From e230fbfc91ccefe6c7bc52b24522850593aee929 Mon Sep 17 00:00:00 2001 From: Kengo TODA Date: Fri, 9 Jul 2021 18:18:20 +0800 Subject: [PATCH 1/3] build: bump up ncc to the latest this change will reduce the size of setup-java from 1610215 to 1594889 (1% reduced) --- dist/cleanup/index.js | 13377 ++++--- dist/setup/index.js | 81079 ++++++++++++++++++++-------------------- package-lock.json | 8 +- package.json | 2 +- tsconfig.json | 2 +- 5 files changed, 46878 insertions(+), 47590 deletions(-) diff --git a/dist/cleanup/index.js b/dist/cleanup/index.js index be25b9b22..b1861fc8e 100644 --- a/dist/cleanup/index.js +++ b/dist/cleanup/index.js @@ -1,50 +1,94 @@ -module.exports = -/******/ (function(modules, runtime) { // webpackBootstrap -/******/ "use strict"; -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ __webpack_require__.ab = __dirname + "/"; -/******/ -/******/ // the startup function -/******/ function startup() { -/******/ // Load entry module and return exports -/******/ return __webpack_require__(219); -/******/ }; -/******/ -/******/ // run startup -/******/ return startup(); -/******/ }) -/************************************************************************/ -/******/ ({ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ 7351: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const os = __importStar(__nccwpck_require__(2087)); +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 + +/***/ }), -/***/ 1: -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 2186: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -57,291 +101,352 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -Object.defineProperty(exports, "__esModule", { value: true }); -const childProcess = __webpack_require__(129); -const path = __webpack_require__(622); -const util_1 = __webpack_require__(669); -const ioUtil = __webpack_require__(672); -const exec = util_1.promisify(childProcess.exec); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const command_1 = __nccwpck_require__(7351); +const file_command_1 = __nccwpck_require__(717); +const utils_1 = __nccwpck_require__(5278); +const os = __importStar(__nccwpck_require__(2087)); +const path = __importStar(__nccwpck_require__(5622)); /** - * Copies a file or folder. - * Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js + * The code to exit an action + */ +var ExitCode; +(function (ExitCode) { + /** + * A code indicating that the action was successful + */ + ExitCode[ExitCode["Success"] = 0] = "Success"; + /** + * A code indicating that the action was a failure + */ + ExitCode[ExitCode["Failure"] = 1] = "Failure"; +})(ExitCode = exports.ExitCode || (exports.ExitCode = {})); +//----------------------------------------------------------------------- +// Variables +//----------------------------------------------------------------------- +/** + * Sets env variable for this action and future actions in the job + * @param name the name of the variable to set + * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function exportVariable(name, val) { + const convertedVal = utils_1.toCommandValue(val); + process.env[name] = convertedVal; + const filePath = process.env['GITHUB_ENV'] || ''; + if (filePath) { + const delimiter = '_GitHubActionsFileCommandDelimeter_'; + const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`; + file_command_1.issueCommand('ENV', commandValue); + } + else { + command_1.issueCommand('set-env', { name }, convertedVal); + } +} +exports.exportVariable = exportVariable; +/** + * Registers a secret which will get masked from logs + * @param secret value of the secret + */ +function setSecret(secret) { + command_1.issueCommand('add-mask', {}, secret); +} +exports.setSecret = setSecret; +/** + * Prepends inputPath to the PATH (for this action and future actions) + * @param inputPath + */ +function addPath(inputPath) { + const filePath = process.env['GITHUB_PATH'] || ''; + if (filePath) { + file_command_1.issueCommand('PATH', inputPath); + } + else { + command_1.issueCommand('add-path', {}, inputPath); + } + process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`; +} +exports.addPath = addPath; +/** + * Gets the value of an input. The value is also trimmed. * - * @param source source path - * @param dest destination path - * @param options optional. See CopyOptions. + * @param name name of the input to get + * @param options optional. See InputOptions. + * @returns string */ -function cp(source, dest, options = {}) { - return __awaiter(this, void 0, void 0, function* () { - const { force, recursive } = 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() - ? 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); - } - }); +function getInput(name, options) { + const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || ''; + if (options && options.required && !val) { + throw new Error(`Input required and not supplied: ${name}`); + } + return val.trim(); } -exports.cp = cp; +exports.getInput = getInput; /** - * Moves a path. + * Sets the value of an output. * - * @param source source path - * @param dest destination path - * @param options optional. See MoveOptions. + * @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 */ -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); - }); +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function setOutput(name, value) { + command_1.issueCommand('set-output', { name }, value); } -exports.mv = mv; +exports.setOutput = setOutput; /** - * Remove a path recursively with force + * 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. * - * @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. - try { - if (yield ioUtil.isDirectory(inputPath, true)) { - yield exec(`rd /s /q "${inputPath}"`); - } - else { - yield exec(`del /f /a "${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 exec(`rm -rf "${inputPath}"`); - } - else { - yield ioUtil.unlink(inputPath); - } - } - }); +function setCommandEcho(enabled) { + command_1.issue('echo', enabled ? 'on' : 'off'); } -exports.rmRF = rmRF; +exports.setCommandEcho = setCommandEcho; +//----------------------------------------------------------------------- +// Results +//----------------------------------------------------------------------- /** - * Make a directory. Creates the full path with folders in between - * Will throw if it fails + * Sets the action status to failed. + * When the action exits it will be with an exit code of 1 + * @param message add error issue message + */ +function setFailed(message) { + process.exitCode = ExitCode.Failure; + error(message); +} +exports.setFailed = setFailed; +//----------------------------------------------------------------------- +// Logging Commands +//----------------------------------------------------------------------- +/** + * Gets whether Actions Step Debug is on or not + */ +function isDebug() { + return process.env['RUNNER_DEBUG'] === '1'; +} +exports.isDebug = isDebug; +/** + * Writes debug message to user log + * @param message debug message + */ +function debug(message) { + command_1.issueCommand('debug', {}, message); +} +exports.debug = debug; +/** + * Adds an error issue + * @param message error issue message. Errors will be converted to string via toString() + */ +function error(message) { + command_1.issue('error', message instanceof Error ? message.toString() : message); +} +exports.error = error; +/** + * Adds an warning issue + * @param message warning issue message. Errors will be converted to string via toString() + */ +function warning(message) { + command_1.issue('warning', message instanceof Error ? message.toString() : message); +} +exports.warning = warning; +/** + * Writes info to log with console.log. + * @param message info message + */ +function info(message) { + process.stdout.write(message + os.EOL); +} +exports.info = info; +/** + * Begin an output group. * - * @param fsPath path to create - * @returns Promise + * Output until the next `groupEnd` will be foldable in this group + * + * @param name The name of the output group */ -function mkdirP(fsPath) { - return __awaiter(this, void 0, void 0, function* () { - yield ioUtil.mkdirP(fsPath); - }); +function startGroup(name) { + command_1.issue('group', name); } -exports.mkdirP = mkdirP; +exports.startGroup = startGroup; /** - * 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. + * End an output group. + */ +function endGroup() { + command_1.issue('endgroup'); +} +exports.endGroup = endGroup; +/** + * Wrap an asynchronous function call in a group. * - * @param tool name of the tool - * @param check whether to check if tool exists - * @returns Promise path to tool + * 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 which(tool, check) { +function group(name, fn) { 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.`); - } - } - } + startGroup(name); + let result; try { - // 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('/') || (ioUtil.IS_WINDOWS && tool.includes('\\'))) { - 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); - } - } - } - // return the first match - for (const directory of directories) { - const filePath = yield ioUtil.tryGetExecutablePath(directory + path.sep + tool, extensions); - if (filePath) { - return filePath; - } - } - return ''; + result = yield fn(); } - catch (err) { - throw new Error(`which failed with message ${err.message}`); + finally { + endGroup(); } + return result; }); } -exports.which = which; -function readCopyOptions(options) { - const force = options.force == null ? true : options.force; - const recursive = Boolean(options.recursive); - return { force, recursive }; +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); } -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); - }); +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}`] || ''; } -// 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); +exports.getState = getState; +//# sourceMappingURL=core.js.map + +/***/ }), + +/***/ 717: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +// For internal use, subject to change. +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +// We use any as a valid input type +/* eslint-disable @typescript-eslint/no-explicit-any */ +const fs = __importStar(__nccwpck_require__(5747)); +const os = __importStar(__nccwpck_require__(2087)); +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 + +/***/ }), + +/***/ 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 })); +/** + * 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; +//# sourceMappingURL=utils.js.map + +/***/ }), + +/***/ 1514: +/***/ (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()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const 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 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(); }); } -//# sourceMappingURL=io.js.map +exports.exec = exec; +//# sourceMappingURL=exec.js.map /***/ }), -/***/ 9: -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 8159: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -361,13 +466,13 @@ var __importStar = (this && this.__importStar) || function (mod) { result["default"] = mod; return result; }; -Object.defineProperty(exports, "__esModule", { value: true }); -const os = __importStar(__webpack_require__(87)); -const events = __importStar(__webpack_require__(614)); -const child = __importStar(__webpack_require__(129)); -const path = __importStar(__webpack_require__(622)); -const io = __importStar(__webpack_require__(1)); -const ioUtil = __importStar(__webpack_require__(672)); +Object.defineProperty(exports, "__esModule", ({ value: true })); +const os = __importStar(__nccwpck_require__(2087)); +const events = __importStar(__nccwpck_require__(8614)); +const child = __importStar(__nccwpck_require__(3129)); +const path = __importStar(__nccwpck_require__(5622)); +const io = __importStar(__nccwpck_require__(7436)); +const ioUtil = __importStar(__nccwpck_require__(1962)); /* eslint-disable @typescript-eslint/unbound-method */ const IS_WINDOWS = process.platform === 'win32'; /* @@ -947,1624 +1052,821 @@ class ExecState extends events.EventEmitter { /***/ }), -/***/ 16: -/***/ (function(module, __unusedexports, __webpack_require__) { - -const SemVer = __webpack_require__(65) -const compareBuild = (a, b, loose) => { - const versionA = new SemVer(a, loose) - const versionB = new SemVer(b, loose) - return versionA.compare(versionB) || versionA.compareBuild(versionB) -} -module.exports = compareBuild - - -/***/ }), - -/***/ 20: -/***/ (function(module, __unusedexports, __webpack_require__) { - -const Range = __webpack_require__(124) - -// Mostly just for testing and legacy API reasons -const toComparators = (range, options) => - new Range(range, options).set - .map(comp => comp.map(c => c.value).join(' ').trim().split(' ')) - -module.exports = toComparators - - -/***/ }), - -/***/ 31: -/***/ (function(module, exports, __webpack_require__) { +/***/ 9925: +/***/ ((__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()); - }); -}; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const semver = __importStar(__webpack_require__(550)); -const core_1 = __webpack_require__(470); -// needs to be require for core node modules to be mocked -/* eslint @typescript-eslint/no-require-imports: 0 */ -const os = __webpack_require__(87); -const cp = __webpack_require__(129); -const fs = __webpack_require__(747); -function _findMatch(versionSpec, stable, candidates, archFilter) { - return __awaiter(this, void 0, void 0, function* () { - const platFilter = os.platform(); - let result; - let match; - let file; - for (const candidate of candidates) { - const version = candidate.version; - core_1.debug(`check ${version} satisfies ${versionSpec}`); - if (semver.satisfies(version, versionSpec) && - (!stable || candidate.stable === stable)) { - file = candidate.files.find(item => { - core_1.debug(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); - let chk = item.arch === archFilter && item.platform === platFilter; - if (chk && item.platform_version) { - const osVersion = module.exports._getOsVersion(); - if (osVersion === item.platform_version) { - chk = true; - } - else { - chk = semver.satisfies(osVersion, item.platform_version); - } - } - return chk; - }); - if (file) { - core_1.debug(`matched ${candidate.version}`); - match = candidate; - break; - } - } - } - if (match && file) { - // clone since we're mutating the file list to be only the file that matches - result = Object.assign({}, match); - result.files = [file]; - } - return result; - }); +Object.defineProperty(exports, "__esModule", ({ value: true })); +const http = __nccwpck_require__(8605); +const https = __nccwpck_require__(7211); +const pm = __nccwpck_require__(6443); +let tunnel; +var HttpCodes; +(function (HttpCodes) { + HttpCodes[HttpCodes["OK"] = 200] = "OK"; + HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; + HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; + HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; + HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; + HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; + HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; + HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; + HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; + HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; + HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; + HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; + HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; + HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; + HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; + HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; + HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; + HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; + HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; + HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; + HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; + HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; + HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; + HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; + HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; + HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; + HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; +})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); +var Headers; +(function (Headers) { + Headers["Accept"] = "accept"; + Headers["ContentType"] = "content-type"; +})(Headers = exports.Headers || (exports.Headers = {})); +var MediaTypes; +(function (MediaTypes) { + MediaTypes["ApplicationJson"] = "application/json"; +})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {})); +/** + * Returns the proxy URL, depending upon the supplied url and proxy environment variables. + * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + */ +function getProxyUrl(serverUrl) { + let proxyUrl = pm.getProxyUrl(new URL(serverUrl)); + return proxyUrl ? proxyUrl.href : ''; } -exports._findMatch = _findMatch; -function _getOsVersion() { - // TODO: add windows and other linux, arm variants - // right now filtering on version is only an ubuntu and macos scenario for tools we build for hosted (python) - const plat = os.platform(); - let version = ''; - if (plat === 'darwin') { - version = cp.execSync('sw_vers -productVersion').toString(); - } - else if (plat === 'linux') { - // lsb_release process not in some containers, readfile - // Run cat /etc/lsb-release - // DISTRIB_ID=Ubuntu - // DISTRIB_RELEASE=18.04 - // DISTRIB_CODENAME=bionic - // DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS" - const lsbContents = module.exports._readLinuxVersionFile(); - if (lsbContents) { - const lines = lsbContents.split('\n'); - for (const line of lines) { - const parts = line.split('='); - if (parts.length === 2 && parts[0].trim() === 'DISTRIB_RELEASE') { - version = parts[1].trim(); - break; - } - } - } +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); } - return version; } -exports._getOsVersion = _getOsVersion; -function _readLinuxVersionFile() { - const lsbFile = '/etc/lsb-release'; - let contents = ''; - if (fs.existsSync(lsbFile)) { - contents = fs.readFileSync(lsbFile).toString(); +exports.HttpClientError = HttpClientError; +class HttpClientResponse { + constructor(message) { + this.message = message; + } + readBody() { + return new Promise(async (resolve, reject) => { + let output = Buffer.alloc(0); + this.message.on('data', (chunk) => { + output = Buffer.concat([output, chunk]); + }); + this.message.on('end', () => { + resolve(output.toString()); + }); + }); } - return contents; } -exports._readLinuxVersionFile = _readLinuxVersionFile; -//# sourceMappingURL=manifest.js.map - -/***/ }), - -/***/ 65: -/***/ (function(module, __unusedexports, __webpack_require__) { - -const debug = __webpack_require__(548) -const { MAX_LENGTH, MAX_SAFE_INTEGER } = __webpack_require__(181) -const { re, t } = __webpack_require__(976) - -const parseOptions = __webpack_require__(143) -const { compareIdentifiers } = __webpack_require__(760) -class SemVer { - constructor (version, options) { - options = parseOptions(options) - - if (version instanceof SemVer) { - if (version.loose === !!options.loose && - version.includePrerelease === !!options.includePrerelease) { - return version - } else { - version = version.version - } - } else if (typeof version !== 'string') { - throw new TypeError(`Invalid Version: ${version}`) +exports.HttpClientResponse = HttpClientResponse; +function isHttps(requestUrl) { + let 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; + } + } } - - if (version.length > MAX_LENGTH) { - throw new TypeError( - `version is longer than ${MAX_LENGTH} characters` - ) + options(requestUrl, additionalHeaders) { + return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); } - - debug('SemVer', version, options) - this.options = options - this.loose = !!options.loose - // this isn't actually relevant for versions, but keep it so that we - // don't run into trouble passing this.options around. - this.includePrerelease = !!options.includePrerelease - - const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) - - if (!m) { - throw new TypeError(`Invalid Version: ${version}`) + get(requestUrl, additionalHeaders) { + return this.request('GET', requestUrl, null, additionalHeaders || {}); } - - this.raw = version - - // these are actually numbers - this.major = +m[1] - this.minor = +m[2] - this.patch = +m[3] - - if (this.major > MAX_SAFE_INTEGER || this.major < 0) { - throw new TypeError('Invalid major version') + del(requestUrl, additionalHeaders) { + return this.request('DELETE', requestUrl, null, additionalHeaders || {}); } - - if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { - throw new TypeError('Invalid minor version') + post(requestUrl, data, additionalHeaders) { + return this.request('POST', requestUrl, data, additionalHeaders || {}); } - - if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { - throw new TypeError('Invalid patch version') + patch(requestUrl, data, additionalHeaders) { + return this.request('PATCH', requestUrl, data, additionalHeaders || {}); } - - // numberify any prerelease numeric ids - if (!m[4]) { - this.prerelease = [] - } else { - this.prerelease = m[4].split('.').map((id) => { - if (/^[0-9]+$/.test(id)) { - const num = +id - if (num >= 0 && num < MAX_SAFE_INTEGER) { - return num - } - } - return id - }) + put(requestUrl, data, additionalHeaders) { + return this.request('PUT', requestUrl, data, additionalHeaders || {}); } - - this.build = m[5] ? m[5].split('.') : [] - this.format() - } - - format () { - this.version = `${this.major}.${this.minor}.${this.patch}` - if (this.prerelease.length) { - this.version += `-${this.prerelease.join('.')}` + head(requestUrl, additionalHeaders) { + return this.request('HEAD', requestUrl, null, additionalHeaders || {}); } - return this.version - } - - toString () { - return this.version - } - - compare (other) { - debug('SemVer.compare', this.version, this.options, other) - if (!(other instanceof SemVer)) { - if (typeof other === 'string' && other === this.version) { - return 0 - } - other = new SemVer(other, this.options) + sendStream(verb, requestUrl, stream, additionalHeaders) { + return this.request(verb, requestUrl, stream, additionalHeaders); } - - if (other.version === this.version) { - return 0 + /** + * Gets a typed object from an endpoint + * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise + */ + async getJson(requestUrl, additionalHeaders = {}) { + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + let res = await this.get(requestUrl, additionalHeaders); + return this._processResponse(res, this.requestOptions); } - - return this.compareMain(other) || this.comparePre(other) - } - - compareMain (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) + async postJson(requestUrl, obj, additionalHeaders = {}) { + let data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + let res = await this.post(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); } - - return ( - compareIdentifiers(this.major, other.major) || - compareIdentifiers(this.minor, other.minor) || - compareIdentifiers(this.patch, other.patch) - ) - } - - comparePre (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) + async putJson(requestUrl, obj, additionalHeaders = {}) { + let data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + let res = await this.put(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); } - - // NOT having a prerelease is > having one - if (this.prerelease.length && !other.prerelease.length) { - return -1 - } else if (!this.prerelease.length && other.prerelease.length) { - return 1 - } else if (!this.prerelease.length && !other.prerelease.length) { - return 0 - } - - let i = 0 - do { - const a = this.prerelease[i] - const b = other.prerelease[i] - debug('prerelease compare', i, a, b) - if (a === undefined && b === undefined) { - return 0 - } else if (b === undefined) { - return 1 - } else if (a === undefined) { - return -1 - } else if (a === b) { - continue - } else { - return compareIdentifiers(a, b) - } - } while (++i) - } - - compareBuild (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) + async patchJson(requestUrl, obj, additionalHeaders = {}) { + let data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + let res = await this.patch(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); } - - let i = 0 - do { - const a = this.build[i] - const b = other.build[i] - debug('prerelease compare', i, a, b) - if (a === undefined && b === undefined) { - return 0 - } else if (b === undefined) { - return 1 - } else if (a === undefined) { - return -1 - } else if (a === b) { - continue - } else { - return compareIdentifiers(a, b) - } - } while (++i) - } - - // preminor will bump the version up to the next minor release, and immediately - // down to pre-release. premajor and prepatch work the same way. - inc (release, identifier) { - switch (release) { - case 'premajor': - this.prerelease.length = 0 - this.patch = 0 - this.minor = 0 - this.major++ - this.inc('pre', identifier) - break - case 'preminor': - this.prerelease.length = 0 - this.patch = 0 - this.minor++ - this.inc('pre', identifier) - break - case 'prepatch': - // If this is already a prerelease, it will bump to the next version - // drop any prereleases that might already exist, since they are not - // relevant at this point. - this.prerelease.length = 0 - this.inc('patch', identifier) - this.inc('pre', identifier) - break - // If the input is a non-prerelease version, this acts the same as - // prepatch. - case 'prerelease': - if (this.prerelease.length === 0) { - this.inc('patch', identifier) - } - this.inc('pre', identifier) - break - - case 'major': - // If this is a pre-major version, bump up to the same major version. - // Otherwise increment major. - // 1.0.0-5 bumps to 1.0.0 - // 1.1.0 bumps to 2.0.0 - if ( - this.minor !== 0 || - this.patch !== 0 || - this.prerelease.length === 0 - ) { - this.major++ - } - this.minor = 0 - this.patch = 0 - this.prerelease = [] - break - case 'minor': - // If this is a pre-minor version, bump up to the same minor version. - // Otherwise increment minor. - // 1.2.0-5 bumps to 1.2.0 - // 1.2.1 bumps to 1.3.0 - if (this.patch !== 0 || this.prerelease.length === 0) { - this.minor++ - } - this.patch = 0 - this.prerelease = [] - break - case 'patch': - // If this is not a pre-release version, it will increment the patch. - // If it is a pre-release it will bump up to the same patch version. - // 1.2.0-5 patches to 1.2.0 - // 1.2.0 patches to 1.2.1 - if (this.prerelease.length === 0) { - this.patch++ + /** + * Makes a raw http request. + * All other methods such as get, post, patch, and request ultimately call this. + * Prefer get, del, post and patch + */ + async request(verb, requestUrl, data, headers) { + if (this._disposed) { + throw new Error('Client has already been disposed.'); } - this.prerelease = [] - break - // This probably shouldn't be used publicly. - // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. - case 'pre': - if (this.prerelease.length === 0) { - this.prerelease = [0] - } else { - let i = this.prerelease.length - while (--i >= 0) { - if (typeof this.prerelease[i] === 'number') { - this.prerelease[i]++ - i = -2 + let parsedUrl = new URL(requestUrl); + let info = this._prepareRequest(verb, parsedUrl, headers); + // Only perform retries on reads since writes may not be idempotent. + let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1 + ? this._maxRetries + 1 + : 1; + let numTries = 0; + let response; + while (numTries < maxTries) { + response = await this.requestRaw(info, data); + // Check if it's an authentication challenge + if (response && + response.message && + response.message.statusCode === HttpCodes.Unauthorized) { + let authenticationHandler; + for (let i = 0; i < this.handlers.length; i++) { + if (this.handlers[i].canHandleAuthentication(response)) { + authenticationHandler = this.handlers[i]; + break; + } + } + if (authenticationHandler) { + return authenticationHandler.handleAuthentication(this, info, data); + } + else { + // We have received an unauthorized response but have no handlers to handle it. + // Let the response return to the caller. + return response; + } } - } - if (i === -1) { - // didn't increment anything - this.prerelease.push(0) - } - } - if (identifier) { - // 1.2.0-beta.1 bumps to 1.2.0-beta.2, - // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 - if (this.prerelease[0] === identifier) { - if (isNaN(this.prerelease[1])) { - this.prerelease = [identifier, 0] + let redirectsRemaining = this._maxRedirects; + while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 && + this._allowRedirects && + redirectsRemaining > 0) { + const redirectUrl = response.message.headers['location']; + if (!redirectUrl) { + // if there's no location to redirect to, we won't + break; + } + let parsedRedirectUrl = new URL(redirectUrl); + if (parsedUrl.protocol == 'https:' && + parsedUrl.protocol != parsedRedirectUrl.protocol && + !this._allowRedirectDowngrade) { + throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.'); + } + // we need to finish reading the response before reassigning response + // which will leak the open socket. + await response.readBody(); + // strip authorization header if redirected to a different hostname + if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { + for (let header in headers) { + // header names are case insensitive + if (header.toLowerCase() === 'authorization') { + delete headers[header]; + } + } + } + // let's make the request with the new redirectUrl + info = this._prepareRequest(verb, parsedRedirectUrl, headers); + response = await this.requestRaw(info, data); + redirectsRemaining--; + } + if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) { + // If not a retry code, return immediately instead of retrying + return response; + } + numTries += 1; + if (numTries < maxTries) { + await response.readBody(); + await this._performExponentialBackoff(numTries); } - } else { - this.prerelease = [identifier, 0] - } } - break - - default: - throw new Error(`invalid increment argument: ${release}`) - } - this.format() - this.raw = this.version - return this - } -} - -module.exports = SemVer - - -/***/ }), - -/***/ 82: -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -// We use any as a valid input type -/* eslint-disable @typescript-eslint/no-explicit-any */ -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * 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 ''; + return response; } - else if (typeof input === 'string' || input instanceof String) { - return input; + /** + * Needs to be called if keepAlive is set to true in request options. + */ + dispose() { + if (this._agent) { + this._agent.destroy(); + } + this._disposed = true; } - return JSON.stringify(input); -} -exports.toCommandValue = toCommandValue; -//# sourceMappingURL=utils.js.map - -/***/ }), - -/***/ 87: -/***/ (function(module) { - -module.exports = require("os"); - -/***/ }), - -/***/ 102: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -// For internal use, subject to change. -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -// We use any as a valid input type -/* eslint-disable @typescript-eslint/no-explicit-any */ -const fs = __importStar(__webpack_require__(747)); -const os = __importStar(__webpack_require__(87)); -const utils_1 = __webpack_require__(82); -function issueCommand(command, message) { - const filePath = process.env[`GITHUB_${command}`]; - if (!filePath) { - throw new Error(`Unable to find environment variable for file command ${command}`); + /** + * Raw request. + * @param info + * @param data + */ + requestRaw(info, data) { + return new Promise((resolve, reject) => { + let callbackForResult = function (err, res) { + if (err) { + reject(err); + } + resolve(res); + }; + this.requestRawWithCallback(info, data, callbackForResult); + }); } - if (!fs.existsSync(filePath)) { - throw new Error(`Missing file at path: ${filePath}`); + /** + * Raw request with callback. + * @param info + * @param data + * @param onResult + */ + requestRawWithCallback(info, data, onResult) { + let socket; + if (typeof data === 'string') { + info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); + } + let callbackCalled = false; + let handleResult = (err, res) => { + if (!callbackCalled) { + callbackCalled = true; + onResult(err, res); + } + }; + let req = info.httpModule.request(info.options, (msg) => { + let res = new HttpClientResponse(msg); + handleResult(null, res); + }); + req.on('socket', sock => { + socket = sock; + }); + // If we ever get disconnected, we want the socket to timeout eventually + req.setTimeout(this._socketTimeout || 3 * 60000, () => { + if (socket) { + socket.end(); + } + handleResult(new Error('Request timeout: ' + info.options.path), null); + }); + req.on('error', function (err) { + // err has statusCode property + // res should have headers + handleResult(err, null); + }); + if (data && typeof data === 'string') { + req.write(data, 'utf8'); + } + if (data && typeof data !== 'string') { + data.on('close', function () { + req.end(); + }); + data.pipe(req); + } + else { + req.end(); + } } - fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, { - encoding: 'utf8' - }); -} -exports.issueCommand = issueCommand; -//# sourceMappingURL=file-command.js.map - -/***/ }), - -/***/ 120: -/***/ (function(module, __unusedexports, __webpack_require__) { - -const compareBuild = __webpack_require__(16) -const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose)) -module.exports = sort - - -/***/ }), - -/***/ 124: -/***/ (function(module, __unusedexports, __webpack_require__) { - -// hoisted class for cyclic dependency -class Range { - constructor (range, options) { - options = parseOptions(options) - - if (range instanceof Range) { - if ( - range.loose === !!options.loose && - range.includePrerelease === !!options.includePrerelease - ) { - return range - } else { - return new Range(range.raw, options) - } + /** + * Gets an http agent. This function is useful when you need an http agent that handles + * routing through a proxy server - depending upon the url and proxy environment variables. + * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + */ + getAgent(serverUrl) { + let parsedUrl = new URL(serverUrl); + return this._getAgent(parsedUrl); } - - if (range instanceof Comparator) { - // just put it in the set and return - this.raw = range.value - this.set = [[range]] - this.format() - return this + _prepareRequest(method, requestUrl, headers) { + const info = {}; + info.parsedUrl = requestUrl; + const usingSsl = info.parsedUrl.protocol === 'https:'; + info.httpModule = usingSsl ? https : http; + const defaultPort = usingSsl ? 443 : 80; + info.options = {}; + info.options.host = info.parsedUrl.hostname; + info.options.port = info.parsedUrl.port + ? parseInt(info.parsedUrl.port) + : defaultPort; + info.options.path = + (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); + info.options.method = method; + info.options.headers = this._mergeHeaders(headers); + if (this.userAgent != null) { + info.options.headers['user-agent'] = this.userAgent; + } + info.options.agent = this._getAgent(info.parsedUrl); + // gives handlers an opportunity to participate + if (this.handlers) { + this.handlers.forEach(handler => { + handler.prepareRequest(info.options); + }); + } + return info; } - - this.options = options - this.loose = !!options.loose - this.includePrerelease = !!options.includePrerelease - - // First, split based on boolean or || - this.raw = range - this.set = range - .split(/\s*\|\|\s*/) - // map the range to a 2d array of comparators - .map(range => this.parseRange(range.trim())) - // throw out any comparator lists that are empty - // this generally means that it was not a valid range, which is allowed - // in loose mode, but will still throw if the WHOLE range is invalid. - .filter(c => c.length) - - if (!this.set.length) { - throw new TypeError(`Invalid SemVer Range: ${range}`) + _mergeHeaders(headers) { + const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); + if (this.requestOptions && this.requestOptions.headers) { + return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers)); + } + return lowercaseKeys(headers || {}); } - - // if we have any that are not the null set, throw out null sets. - if (this.set.length > 1) { - // keep the first one, in case they're all null sets - const first = this.set[0] - this.set = this.set.filter(c => !isNullSet(c[0])) - if (this.set.length === 0) - this.set = [first] - else if (this.set.length > 1) { - // if we have any that are *, then the range is just * - for (const c of this.set) { - if (c.length === 1 && isAny(c[0])) { - this.set = [c] - break - } + _getExistingOrDefaultHeader(additionalHeaders, header, _default) { + const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); + let clientHeader; + if (this.requestOptions && this.requestOptions.headers) { + clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; } - } + return additionalHeaders[header] || clientHeader || _default; } - - this.format() - } - - format () { - this.range = this.set - .map((comps) => { - return comps.join(' ').trim() - }) - .join('||') - .trim() - return this.range - } - - toString () { - return this.range - } - - parseRange (range) { - range = range.trim() - - // memoize range parsing for performance. - // this is a very hot path, and fully deterministic. - const memoOpts = Object.keys(this.options).join(',') - const memoKey = `parseRange:${memoOpts}:${range}` - const cached = cache.get(memoKey) - if (cached) - return cached - - const loose = this.options.loose - // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` - const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] - range = range.replace(hr, hyphenReplace(this.options.includePrerelease)) - debug('hyphen replace', range) - // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` - range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) - debug('comparator trim', range, re[t.COMPARATORTRIM]) - - // `~ 1.2.3` => `~1.2.3` - range = range.replace(re[t.TILDETRIM], tildeTrimReplace) - - // `^ 1.2.3` => `^1.2.3` - range = range.replace(re[t.CARETTRIM], caretTrimReplace) - - // normalize spaces - range = range.split(/\s+/).join(' ') - - // At this point, the range is completely trimmed and - // ready to be split into comparators. - - const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] - const rangeList = range - .split(' ') - .map(comp => parseComparator(comp, this.options)) - .join(' ') - .split(/\s+/) - // >=0.0.0 is equivalent to * - .map(comp => replaceGTE0(comp, this.options)) - // in loose mode, throw out any that are not valid comparators - .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true) - .map(comp => new Comparator(comp, this.options)) - - // if any comparators are the null set, then replace with JUST null set - // if more than one comparator, remove any * comparators - // also, don't include the same comparator more than once - const l = rangeList.length - const rangeMap = new Map() - for (const comp of rangeList) { - if (isNullSet(comp)) - return [comp] - rangeMap.set(comp.value, comp) - } - if (rangeMap.size > 1 && rangeMap.has('')) - rangeMap.delete('') - - const result = [...rangeMap.values()] - cache.set(memoKey, result) - return result - } - - intersects (range, options) { - if (!(range instanceof Range)) { - throw new TypeError('a Range is required') + _getAgent(parsedUrl) { + let agent; + let proxyUrl = pm.getProxyUrl(parsedUrl); + let useProxy = proxyUrl && proxyUrl.hostname; + if (this._keepAlive && useProxy) { + agent = this._proxyAgent; + } + if (this._keepAlive && !useProxy) { + agent = this._agent; + } + // if agent is already assigned use that agent. + if (!!agent) { + return agent; + } + const usingSsl = parsedUrl.protocol === 'https:'; + let maxSockets = 100; + if (!!this.requestOptions) { + maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; + } + if (useProxy) { + // If using proxy, need tunnel + if (!tunnel) { + tunnel = __nccwpck_require__(4294); + } + const agentOptions = { + maxSockets: maxSockets, + keepAlive: this._keepAlive, + proxy: { + 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: 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; } - - return this.set.some((thisComparators) => { - return ( - isSatisfiable(thisComparators, options) && - range.set.some((rangeComparators) => { - return ( - isSatisfiable(rangeComparators, options) && - thisComparators.every((thisComparator) => { - return rangeComparators.every((rangeComparator) => { - return thisComparator.intersects(rangeComparator, options) - }) - }) - ) - }) - ) - }) - } - - // if ANY of the sets match ALL of its comparators, then pass - test (version) { - if (!version) { - return false + _performExponentialBackoff(retryNumber) { + retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); + const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); + return new Promise(resolve => setTimeout(() => resolve(), ms)); } - - if (typeof version === 'string') { - try { - version = new SemVer(version, this.options) - } catch (er) { - return false - } + static dateTimeDeserializer(key, value) { + if (typeof value === 'string') { + let a = new Date(value); + if (!isNaN(a.valueOf())) { + return a; + } + } + return value; } - - for (let i = 0; i < this.set.length; i++) { - if (testSet(this.set[i], version, this.options)) { - return true - } + async _processResponse(res, options) { + return new Promise(async (resolve, reject) => { + const statusCode = res.message.statusCode; + const response = { + statusCode: statusCode, + result: null, + headers: {} + }; + // not found leads to null obj returned + if (statusCode == HttpCodes.NotFound) { + resolve(response); + } + let obj; + let contents; + // get the result from the body + try { + contents = await res.readBody(); + if (contents && contents.length > 0) { + if (options && options.deserializeDates) { + obj = JSON.parse(contents, HttpClient.dateTimeDeserializer); + } + else { + obj = JSON.parse(contents); + } + response.result = obj; + } + response.headers = res.message.headers; + } + catch (err) { + // Invalid resource (contents not json); leaving result obj null + } + // note that 3xx redirects are handled by the http layer. + if (statusCode > 299) { + let msg; + // if exception/error in body, attempt to get better error + if (obj && obj.message) { + msg = obj.message; + } + else if (contents && contents.length > 0) { + // it may be the case that the exception is in the body message as string + msg = contents; + } + else { + msg = 'Failed request: (' + statusCode + ')'; + } + let err = new HttpClientError(msg, statusCode); + err.result = response.result; + reject(err); + } + else { + resolve(response); + } + }); } - return false - } } -module.exports = Range - -const LRU = __webpack_require__(702) -const cache = new LRU({ max: 1000 }) - -const parseOptions = __webpack_require__(143) -const Comparator = __webpack_require__(174) -const debug = __webpack_require__(548) -const SemVer = __webpack_require__(65) -const { - re, - t, - comparatorTrimReplace, - tildeTrimReplace, - caretTrimReplace -} = __webpack_require__(976) +exports.HttpClient = HttpClient; -const isNullSet = c => c.value === '<0.0.0-0' -const isAny = c => c.value === '' -// take a set of comparators and determine whether there -// exists a version which can satisfy it -const isSatisfiable = (comparators, options) => { - let result = true - const remainingComparators = comparators.slice() - let testComparator = remainingComparators.pop() +/***/ }), - while (result && remainingComparators.length) { - result = remainingComparators.every((otherComparator) => { - return testComparator.intersects(otherComparator, options) - }) +/***/ 6443: +/***/ ((__unused_webpack_module, exports) => { - testComparator = remainingComparators.pop() - } +"use strict"; - return result +Object.defineProperty(exports, "__esModule", ({ value: true })); +function getProxyUrl(reqUrl) { + let usingSsl = reqUrl.protocol === 'https:'; + let proxyUrl; + if (checkBypass(reqUrl)) { + return proxyUrl; + } + let proxyVar; + if (usingSsl) { + proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY']; + } + else { + proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY']; + } + if (proxyVar) { + proxyUrl = new URL(proxyVar); + } + return proxyUrl; } - -// comprised of xranges, tildes, stars, and gtlt's at this point. -// already replaced the hyphen ranges -// turn into a set of JUST comparators. -const parseComparator = (comp, options) => { - debug('comp', comp, options) - comp = replaceCarets(comp, options) - debug('caret', comp) - comp = replaceTildes(comp, options) - debug('tildes', comp) - comp = replaceXRanges(comp, options) - debug('xrange', comp) - comp = replaceStars(comp, options) - debug('stars', comp) - return comp -} - -const isX = id => !id || id.toLowerCase() === 'x' || id === '*' - -// ~, ~> --> * (any, kinda silly) -// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0 -// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0 -// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0 -// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0 -// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0 -const replaceTildes = (comp, options) => - comp.trim().split(/\s+/).map((comp) => { - return replaceTilde(comp, options) - }).join(' ') - -const replaceTilde = (comp, options) => { - const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] - return comp.replace(r, (_, M, m, p, pr) => { - debug('tilde', comp, _, M, m, p, pr) - let ret - - if (isX(M)) { - ret = '' - } else if (isX(m)) { - ret = `>=${M}.0.0 <${+M + 1}.0.0-0` - } else if (isX(p)) { - // ~1.2 == >=1.2.0 <1.3.0-0 - ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0` - } else if (pr) { - debug('replaceTilde pr', pr) - ret = `>=${M}.${m}.${p}-${pr - } <${M}.${+m + 1}.0-0` - } else { - // ~1.2.3 == >=1.2.3 <1.3.0-0 - ret = `>=${M}.${m}.${p - } <${M}.${+m + 1}.0-0` +exports.getProxyUrl = getProxyUrl; +function checkBypass(reqUrl) { + if (!reqUrl.hostname) { + return false; } - - debug('tilde return', ret) - return ret - }) -} - -// ^ --> * (any, kinda silly) -// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0 -// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0 -// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0 -// ^1.2.3 --> >=1.2.3 <2.0.0-0 -// ^1.2.0 --> >=1.2.0 <2.0.0-0 -const replaceCarets = (comp, options) => - comp.trim().split(/\s+/).map((comp) => { - return replaceCaret(comp, options) - }).join(' ') - -const replaceCaret = (comp, options) => { - debug('caret', comp, options) - const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] - const z = options.includePrerelease ? '-0' : '' - return comp.replace(r, (_, M, m, p, pr) => { - debug('caret', comp, _, M, m, p, pr) - let ret - - if (isX(M)) { - ret = '' - } else if (isX(m)) { - ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0` - } else if (isX(p)) { - if (M === '0') { - ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0` - } else { - ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0` - } - } else if (pr) { - debug('replaceCaret pr', pr) - if (M === '0') { - if (m === '0') { - ret = `>=${M}.${m}.${p}-${pr - } <${M}.${m}.${+p + 1}-0` - } else { - ret = `>=${M}.${m}.${p}-${pr - } <${M}.${+m + 1}.0-0` - } - } else { - ret = `>=${M}.${m}.${p}-${pr - } <${+M + 1}.0.0-0` - } - } else { - debug('no pr') - if (M === '0') { - if (m === '0') { - ret = `>=${M}.${m}.${p - }${z} <${M}.${m}.${+p + 1}-0` - } else { - ret = `>=${M}.${m}.${p - }${z} <${M}.${+m + 1}.0-0` + let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; + if (!noProxy) { + return false; + } + // Determine the request port + let reqPort; + if (reqUrl.port) { + reqPort = Number(reqUrl.port); + } + else if (reqUrl.protocol === 'http:') { + reqPort = 80; + } + else if (reqUrl.protocol === 'https:') { + reqPort = 443; + } + // Format the request hostname and hostname with port + let upperReqHosts = [reqUrl.hostname.toUpperCase()]; + if (typeof reqPort === 'number') { + upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); + } + // Compare request host against noproxy + for (let upperNoProxyItem of noProxy + .split(',') + .map(x => x.trim().toUpperCase()) + .filter(x => x)) { + if (upperReqHosts.some(x => x === upperNoProxyItem)) { + return true; } - } else { - ret = `>=${M}.${m}.${p - } <${+M + 1}.0.0-0` - } } - - debug('caret return', ret) - return ret - }) -} - -const replaceXRanges = (comp, options) => { - debug('replaceXRanges', comp, options) - return comp.split(/\s+/).map((comp) => { - return replaceXRange(comp, options) - }).join(' ') + return false; } +exports.checkBypass = checkBypass; -const replaceXRange = (comp, options) => { - comp = comp.trim() - const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] - return comp.replace(r, (ret, gtlt, M, m, p, pr) => { - debug('xRange', comp, ret, gtlt, M, m, p, pr) - const xM = isX(M) - const xm = xM || isX(m) - const xp = xm || isX(p) - const anyX = xp - if (gtlt === '=' && anyX) { - gtlt = '' - } +/***/ }), - // if we're including prereleases in the match, then we need - // to fix this to -0, the lowest possible prerelease value - pr = options.includePrerelease ? '-0' : '' +/***/ 1962: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - if (xM) { - if (gtlt === '>' || gtlt === '<') { - // nothing is allowed - ret = '<0.0.0-0' - } else { - // nothing is forbidden - ret = '*' - } - } else if (gtlt && anyX) { - // we know patch is an x, because we have any x at all. - // replace X with 0 - if (xm) { - m = 0 - } - p = 0 +"use strict"; - if (gtlt === '>') { - // >1 => >=2.0.0 - // >1.2 => >=1.3.0 - gtlt = '>=' - if (xm) { - M = +M + 1 - m = 0 - p = 0 - } else { - m = +m + 1 - p = 0 +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 })); +const assert_1 = __nccwpck_require__(2357); +const fs = __nccwpck_require__(5747); +const path = __nccwpck_require__(5622); +_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); } - } else if (gtlt === '<=') { - // <=0.7.x is actually <0.8.0, since any 0.7.x should - // pass. Similarly, <=7.x is actually <8.0.0, etc. - gtlt = '<' - if (xm) { - M = +M + 1 - } else { - m = +m + 1 + catch (err) { + if (err.code === 'ENOENT') { + return false; + } + throw err; } - } - - if (gtlt === '<') - pr = '-0' - - ret = `${gtlt + M}.${m}.${p}${pr}` - } else if (xm) { - ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0` - } else if (xp) { - ret = `>=${M}.${m}.0${pr - } <${M}.${+m + 1}.0-0` - } - - debug('xRange return', ret) - - return ret - }) -} - -// Because * is AND-ed with everything else in the comparator, -// and '' means "any version", just remove the *s entirely. -const replaceStars = (comp, options) => { - debug('replaceStars', comp, options) - // Looseness is ignored here. star is always as loose as it gets! - return comp.trim().replace(re[t.STAR], '') + return true; + }); } - -const replaceGTE0 = (comp, options) => { - debug('replaceGTE0', comp, options) - return comp.trim() - .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '') -} - -// This function is passed to string.replace(re[t.HYPHENRANGE]) -// M, m, patch, prerelease, build -// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 -// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do -// 1.2 - 3.4 => >=1.2.0 <3.5.0-0 -const hyphenReplace = incPr => ($0, - from, fM, fm, fp, fpr, fb, - to, tM, tm, tp, tpr, tb) => { - if (isX(fM)) { - from = '' - } else if (isX(fm)) { - from = `>=${fM}.0.0${incPr ? '-0' : ''}` - } else if (isX(fp)) { - from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}` - } else if (fpr) { - from = `>=${from}` - } else { - from = `>=${from}${incPr ? '-0' : ''}` - } - - if (isX(tM)) { - to = '' - } else if (isX(tm)) { - to = `<${+tM + 1}.0.0-0` - } else if (isX(tp)) { - to = `<${tM}.${+tm + 1}.0-0` - } else if (tpr) { - to = `<=${tM}.${tm}.${tp}-${tpr}` - } else if (incPr) { - to = `<${tM}.${tm}.${+tp + 1}-0` - } else { - to = `<=${to}` - } - - return (`${from} ${to}`).trim() +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(); + }); } - -const testSet = (set, version, options) => { - for (let i = 0; i < set.length; i++) { - if (!set[i].test(version)) { - return false +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 (version.prerelease.length && !options.includePrerelease) { - // Find the set of versions that are allowed to have prereleases - // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 - // That should allow `1.2.3-pr.2` to pass. - // However, `1.2.4-alpha.notready` should NOT be allowed, - // even though it's within the range set by the comparators. - for (let i = 0; i < set.length; i++) { - debug(set[i].semver) - if (set[i].semver === Comparator.ANY) { - continue - } - - if (set[i].semver.prerelease.length > 0) { - const allowed = set[i].semver - if (allowed.major === version.major && - allowed.minor === version.minor && - allowed.patch === version.patch) { - return true + 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; +/** + * Recursively create a directory at `fsPath`. + * + * This implementation is optimistic, meaning it attempts to create the full + * path first, and backs up the path stack from there. + * + * @param fsPath The path to create + * @param maxDepth The maximum recursion depth + * @param depth The current recursion depth + */ +function mkdirP(fsPath, maxDepth = 1000, depth = 1) { + return __awaiter(this, void 0, void 0, function* () { + assert_1.ok(fsPath, 'a path argument must be provided'); + fsPath = path.resolve(fsPath); + if (depth >= maxDepth) + return exports.mkdir(fsPath); + try { + yield exports.mkdir(fsPath); + return; } - } + catch (err) { + switch (err.code) { + case 'ENOENT': { + yield mkdirP(path.dirname(fsPath), maxDepth, depth + 1); + yield exports.mkdir(fsPath); + return; + } + default: { + let stats; + try { + stats = yield exports.stat(fsPath); + } + catch (err2) { + throw err; + } + if (!stats.isDirectory()) + throw err; + } + } + } + }); +} +exports.mkdirP = mkdirP; +/** + * 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, '\\'); } - - // Version has a -pre, but it's not one of the ones we like. - return false - } - - return true + // remove redundant slashes + return p.replace(/\/\/+/g, '/'); } - - -/***/ }), - -/***/ 129: -/***/ (function(module) { - -module.exports = require("child_process"); - -/***/ }), - -/***/ 139: -/***/ (function(module, __unusedexports, __webpack_require__) { - -// Unique ID creation requires a high quality random # generator. In node.js -// this is pretty straight-forward - we use the crypto API. - -var crypto = __webpack_require__(417); - -module.exports = function nodeRNG() { - return crypto.randomBytes(16); -}; - +// 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())); +} +//# sourceMappingURL=io-util.js.map /***/ }), -/***/ 141: -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 7436: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; - -var net = __webpack_require__(631); -var tls = __webpack_require__(818); -var http = __webpack_require__(605); -var https = __webpack_require__(211); -var events = __webpack_require__(614); -var assert = __webpack_require__(357); -var util = __webpack_require__(669); - - -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 - - -/***/ }), - -/***/ 143: -/***/ (function(module) { - -// parse out just the options we care about so we always get a consistent -// obj with keys in a consistent order. -const opts = ['includePrerelease', 'loose', 'rtl'] -const parseOptions = options => - !options ? {} - : typeof options !== 'object' ? { loose: true } - : opts.filter(k => options[k]).reduce((options, k) => { - options[k] = true - return options - }, {}) -module.exports = parseOptions - - -/***/ }), - -/***/ 164: -/***/ (function(module, __unusedexports, __webpack_require__) { - -const SemVer = __webpack_require__(65) -const Range = __webpack_require__(124) -const gt = __webpack_require__(486) - -const minVersion = (range, loose) => { - range = new Range(range, loose) - - let minver = new SemVer('0.0.0') - if (range.test(minver)) { - return minver - } - - minver = new SemVer('0.0.0-0') - if (range.test(minver)) { - return minver - } - - minver = null - for (let i = 0; i < range.set.length; ++i) { - const comparators = range.set[i] - - let setMin = null - comparators.forEach((comparator) => { - // Clone to avoid manipulating the comparator's semver object. - const compver = new SemVer(comparator.semver.version) - switch (comparator.operator) { - case '>': - if (compver.prerelease.length === 0) { - compver.patch++ - } else { - compver.prerelease.push(0) - } - compver.raw = compver.format() - /* fallthrough */ - case '': - case '>=': - if (!setMin || gt(compver, setMin)) { - setMin = compver - } - break - case '<': - case '<=': - /* Ignore maximum versions */ - break - /* istanbul ignore next */ - default: - throw new Error(`Unexpected operation: ${comparator.operator}`) - } - }) - if (setMin && (!minver || gt(minver, setMin))) - minver = setMin - } - - if (minver && range.test(minver)) { - return minver - } - - return null -} -module.exports = minVersion - - -/***/ }), - -/***/ 167: -/***/ (function(module, __unusedexports, __webpack_require__) { - -const compare = __webpack_require__(874) -const gte = (a, b, loose) => compare(a, b, loose) >= 0 -module.exports = gte - - -/***/ }), - -/***/ 174: -/***/ (function(module, __unusedexports, __webpack_require__) { - -const ANY = Symbol('SemVer ANY') -// hoisted class for cyclic dependency -class Comparator { - static get ANY () { - return ANY - } - constructor (comp, options) { - options = parseOptions(options) - - if (comp instanceof Comparator) { - if (comp.loose === !!options.loose) { - return comp - } else { - comp = comp.value - } - } - - debug('comparator', comp, options) - this.options = options - this.loose = !!options.loose - this.parse(comp) - - if (this.semver === ANY) { - this.value = '' - } else { - this.value = this.operator + this.semver.version - } - - debug('comp', this) - } - - parse (comp) { - const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] - const m = comp.match(r) - - if (!m) { - throw new TypeError(`Invalid comparator: ${comp}`) - } - - this.operator = m[1] !== undefined ? m[1] : '' - if (this.operator === '=') { - this.operator = '' - } - - // if it literally is just '>' or '' then allow anything. - if (!m[2]) { - this.semver = ANY - } else { - this.semver = new SemVer(m[2], this.options.loose) - } - } - - toString () { - return this.value - } - - test (version) { - debug('Comparator.test', version, this.options.loose) - - if (this.semver === ANY || version === ANY) { - return true - } - - if (typeof version === 'string') { - try { - version = new SemVer(version, this.options) - } catch (er) { - return false - } - } - - return cmp(version, this.operator, this.semver, this.options) - } - - intersects (comp, options) { - if (!(comp instanceof Comparator)) { - throw new TypeError('a Comparator is required') - } - - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } - - if (this.operator === '') { - if (this.value === '') { - return true - } - return new Range(comp.value, options).test(this.value) - } else if (comp.operator === '') { - if (comp.value === '') { - return true - } - return new Range(this.value, options).test(comp.semver) - } - - const sameDirectionIncreasing = - (this.operator === '>=' || this.operator === '>') && - (comp.operator === '>=' || comp.operator === '>') - const sameDirectionDecreasing = - (this.operator === '<=' || this.operator === '<') && - (comp.operator === '<=' || comp.operator === '<') - const sameSemVer = this.semver.version === comp.semver.version - const differentDirectionsInclusive = - (this.operator === '>=' || this.operator === '<=') && - (comp.operator === '>=' || comp.operator === '<=') - const oppositeDirectionsLessThan = - cmp(this.semver, '<', comp.semver, options) && - (this.operator === '>=' || this.operator === '>') && - (comp.operator === '<=' || comp.operator === '<') - const oppositeDirectionsGreaterThan = - cmp(this.semver, '>', comp.semver, options) && - (this.operator === '<=' || this.operator === '<') && - (comp.operator === '>=' || comp.operator === '>') - - return ( - sameDirectionIncreasing || - sameDirectionDecreasing || - (sameSemVer && differentDirectionsInclusive) || - oppositeDirectionsLessThan || - oppositeDirectionsGreaterThan - ) - } -} - -module.exports = Comparator - -const parseOptions = __webpack_require__(143) -const {re, t} = __webpack_require__(976) -const cmp = __webpack_require__(752) -const debug = __webpack_require__(548) -const SemVer = __webpack_require__(65) -const Range = __webpack_require__(124) - - -/***/ }), - -/***/ 181: -/***/ (function(module) { - -// Note: this is the semver.org version of the spec that it implements -// Not necessarily the package version of this code. -const SEMVER_SPEC_VERSION = '2.0.0' - -const MAX_LENGTH = 256 -const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || - /* istanbul ignore next */ 9007199254740991 - -// Max safe segment length for coercion. -const MAX_SAFE_COMPONENT_LENGTH = 16 - -module.exports = { - SEMVER_SPEC_VERSION, - MAX_LENGTH, - MAX_SAFE_INTEGER, - MAX_SAFE_COMPONENT_LENGTH -} - - -/***/ }), - -/***/ 211: -/***/ (function(module) { - -module.exports = require("https"); - -/***/ }), - -/***/ 219: -/***/ (function(__unusedmodule, exports, __webpack_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.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) { @@ -2574,246 +1876,303 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -Object.defineProperty(exports, "__esModule", { value: true }); -const core = __importStar(__webpack_require__(470)); -const gpg = __importStar(__webpack_require__(884)); -const constants = __importStar(__webpack_require__(694)); -function run() { +Object.defineProperty(exports, "__esModule", ({ value: true })); +const childProcess = __nccwpck_require__(3129); +const path = __nccwpck_require__(5622); +const util_1 = __nccwpck_require__(1669); +const ioUtil = __nccwpck_require__(1962); +const exec = util_1.promisify(childProcess.exec); +/** + * 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 } = 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() + ? 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 (core.getInput(constants.INPUT_GPG_PRIVATE_KEY, { required: false })) { - core.info('Removing private key from keychain'); + 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. + try { + if (yield ioUtil.isDirectory(inputPath, true)) { + yield exec(`rd /s /q "${inputPath}"`); + } + else { + yield exec(`del /f /a "${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 { - const keyFingerprint = core.getState(constants.STATE_GPG_PRIVATE_KEY_FINGERPRINT); - yield gpg.deleteKey(keyFingerprint); + yield ioUtil.unlink(inputPath); } - catch (error) { - core.setFailed('Failed to remove private key'); + 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 exec(`rm -rf "${inputPath}"`); + } + else { + yield ioUtil.unlink(inputPath); } } }); } -run(); - - -/***/ }), - -/***/ 259: -/***/ (function(module, __unusedexports, __webpack_require__) { - -const Range = __webpack_require__(124) -const intersects = (r1, r2, options) => { - r1 = new Range(r1, options) - r2 = new Range(r2, options) - return r1.intersects(r2) -} -module.exports = intersects - - -/***/ }), - -/***/ 283: -/***/ (function(module, __unusedexports, __webpack_require__) { - -const compare = __webpack_require__(874) -const compareLoose = (a, b) => compare(a, b, true) -module.exports = compareLoose - - -/***/ }), - -/***/ 298: -/***/ (function(module, __unusedexports, __webpack_require__) { - -const compare = __webpack_require__(874) -const eq = (a, b, loose) => compare(a, b, loose) === 0 -module.exports = eq - - -/***/ }), - -/***/ 310: -/***/ (function(module, __unusedexports, __webpack_require__) { - -const Range = __webpack_require__(124) -const satisfies = (version, range, options) => { - try { - range = new Range(range, options) - } catch (er) { - return false - } - return range.test(version) +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 + */ +function mkdirP(fsPath) { + return __awaiter(this, void 0, void 0, function* () { + yield ioUtil.mkdirP(fsPath); + }); } -module.exports = satisfies - - -/***/ }), - -/***/ 322: -/***/ (function(__unusedmodule, exports, __webpack_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.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()); +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 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.`); + } + } + } + try { + // 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('/') || (ioUtil.IS_WINDOWS && tool.includes('\\'))) { + 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); + } + } + } + // return the first match + for (const directory of directories) { + const filePath = yield ioUtil.tryGetExecutablePath(directory + path.sep + tool, extensions); + if (filePath) { + return filePath; + } + } + return ''; + } + catch (err) { + throw new Error(`which failed with message ${err.message}`); + } }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getToolcachePath = exports.isVersionSatisfies = exports.getDownloadArchiveExtension = exports.extractJdkFile = exports.getVersionFromToolcachePath = exports.getBooleanInput = exports.getTempDir = void 0; -const os_1 = __importDefault(__webpack_require__(87)); -const path_1 = __importDefault(__webpack_require__(622)); -const fs = __importStar(__webpack_require__(747)); -const semver = __importStar(__webpack_require__(876)); -const core = __importStar(__webpack_require__(470)); -const tc = __importStar(__webpack_require__(533)); -function getTempDir() { - let tempDirectory = process.env['RUNNER_TEMP'] || os_1.default.tmpdir(); - return tempDirectory; } -exports.getTempDir = getTempDir; -function getBooleanInput(inputName, defaultValue = false) { - return (core.getInput(inputName) || String(defaultValue)).toUpperCase() === 'TRUE'; +exports.which = which; +function readCopyOptions(options) { + const force = options.force == null ? true : options.force; + const recursive = Boolean(options.recursive); + return { force, recursive }; } -exports.getBooleanInput = getBooleanInput; -function getVersionFromToolcachePath(toolPath) { - if (toolPath) { - return path_1.default.basename(path_1.default.dirname(toolPath)); - } - return toolPath; +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); + }); } -exports.getVersionFromToolcachePath = getVersionFromToolcachePath; -function extractJdkFile(toolPath, extension) { +// Buffered file copy +function copyFile(srcFile, destFile, force) { return __awaiter(this, void 0, void 0, function* () { - if (!extension) { - extension = toolPath.endsWith('.tar.gz') ? 'tar.gz' : path_1.default.extname(toolPath); - if (extension.startsWith('.')) { - extension = extension.substring(1); + 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); } - switch (extension) { - case 'tar.gz': - case 'tar': - return yield tc.extractTar(toolPath); - case 'zip': - return yield tc.extractZip(toolPath); - default: - return yield tc.extract7z(toolPath); + else if (!(yield ioUtil.exists(destFile)) || force) { + yield ioUtil.copyFile(srcFile, destFile); } }); } -exports.extractJdkFile = extractJdkFile; -function getDownloadArchiveExtension() { - return process.platform === 'win32' ? 'zip' : 'tar.gz'; -} -exports.getDownloadArchiveExtension = getDownloadArchiveExtension; -function isVersionSatisfies(range, version) { - var _a; - if (semver.valid(range)) { - // if full version with build digit is provided as a range (such as '1.2.3+4') - // we should check for exact equal via compareBuild - // since semver.satisfies doesn't handle 4th digit - const semRange = semver.parse(range); - if (semRange && ((_a = semRange.build) === null || _a === void 0 ? void 0 : _a.length) > 0) { - return semver.compareBuild(range, version) === 0; - } - } - return semver.satisfies(version, range); -} -exports.isVersionSatisfies = isVersionSatisfies; -function getToolcachePath(toolName, version, architecture) { - var _a; - const toolcacheRoot = (_a = process.env['RUNNER_TOOL_CACHE']) !== null && _a !== void 0 ? _a : ''; - const fullPath = path_1.default.join(toolcacheRoot, toolName, version, architecture); - if (fs.existsSync(fullPath)) { - return fullPath; - } - return null; -} -exports.getToolcachePath = getToolcachePath; - - -/***/ }), - -/***/ 323: -/***/ (function(module, __unusedexports, __webpack_require__) { - -const outside = __webpack_require__(462) -// Determine if version is less than all the versions possible in the range -const ltr = (version, range, options) => outside(version, range, '<', options) -module.exports = ltr - - -/***/ }), - -/***/ 357: -/***/ (function(module) { - -module.exports = require("assert"); - -/***/ }), - -/***/ 396: -/***/ (function(module) { - -"use strict"; - -module.exports = function (Yallist) { - Yallist.prototype[Symbol.iterator] = function* () { - for (let walker = this.head; walker; walker = walker.next) { - yield walker.value - } - } -} - - -/***/ }), - -/***/ 413: -/***/ (function(module, __unusedexports, __webpack_require__) { - -module.exports = __webpack_require__(141); - - -/***/ }), - -/***/ 417: -/***/ (function(module) { - -module.exports = require("crypto"); +//# sourceMappingURL=io.js.map /***/ }), -/***/ 431: -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 2473: +/***/ (function(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()); + }); +}; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; @@ -2821,169 +2180,177 @@ var __importStar = (this && this.__importStar) || function (mod) { result["default"] = mod; return result; }; -Object.defineProperty(exports, "__esModule", { value: true }); -const os = __importStar(__webpack_require__(87)); -const utils_1 = __webpack_require__(82); -/** - * 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; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const semver = __importStar(__nccwpck_require__(562)); +const core_1 = __nccwpck_require__(2186); +// needs to be require for core node modules to be mocked +/* eslint @typescript-eslint/no-require-imports: 0 */ +const os = __nccwpck_require__(2087); +const cp = __nccwpck_require__(3129); +const fs = __nccwpck_require__(5747); +function _findMatch(versionSpec, stable, candidates, archFilter) { + return __awaiter(this, void 0, void 0, function* () { + const platFilter = os.platform(); + let result; + let match; + let file; + for (const candidate of candidates) { + const version = candidate.version; + core_1.debug(`check ${version} satisfies ${versionSpec}`); + if (semver.satisfies(version, versionSpec) && + (!stable || candidate.stable === stable)) { + file = candidate.files.find(item => { + core_1.debug(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); + let chk = item.arch === archFilter && item.platform === platFilter; + if (chk && item.platform_version) { + const osVersion = module.exports._getOsVersion(); + if (osVersion === item.platform_version) { + chk = true; } else { - cmdStr += ','; + chk = semver.satisfies(osVersion, item.platform_version); } - cmdStr += `${key}=${escapeProperty(val)}`; } + return chk; + }); + if (file) { + core_1.debug(`matched ${candidate.version}`); + match = candidate; + break; } } } - 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'); + if (match && file) { + // clone since we're mutating the file list to be only the file that matches + result = Object.assign({}, match); + result.files = [file]; + } + return result; + }); } -//# sourceMappingURL=command.js.map - -/***/ }), - -/***/ 462: -/***/ (function(module, __unusedexports, __webpack_require__) { - -const SemVer = __webpack_require__(65) -const Comparator = __webpack_require__(174) -const {ANY} = Comparator -const Range = __webpack_require__(124) -const satisfies = __webpack_require__(310) -const gt = __webpack_require__(486) -const lt = __webpack_require__(586) -const lte = __webpack_require__(898) -const gte = __webpack_require__(167) - -const outside = (version, range, hilo, options) => { - version = new SemVer(version, options) - range = new Range(range, options) - - let gtfn, ltefn, ltfn, comp, ecomp - switch (hilo) { - case '>': - gtfn = gt - ltefn = lte - ltfn = lt - comp = '>' - ecomp = '>=' - break - case '<': - gtfn = lt - ltefn = gte - ltfn = gt - comp = '<' - ecomp = '<=' - break - default: - throw new TypeError('Must provide a hilo val of "<" or ">"') - } - - // If it satisfies the range it is not outside - if (satisfies(version, range, options)) { - return false - } - - // From now on, variable terms are as if we're in "gtr" mode. - // but note that everything is flipped for the "ltr" function. - - for (let i = 0; i < range.set.length; ++i) { - const comparators = range.set[i] - - let high = null - let low = null - - comparators.forEach((comparator) => { - if (comparator.semver === ANY) { - comparator = new Comparator('>=0.0.0') - } - high = high || comparator - low = low || comparator - if (gtfn(comparator.semver, high.semver, options)) { - high = comparator - } else if (ltfn(comparator.semver, low.semver, options)) { - low = comparator - } - }) - - // If the edge version comparator has a operator then our version - // isn't outside it - if (high.operator === comp || high.operator === ecomp) { - return false +exports._findMatch = _findMatch; +function _getOsVersion() { + // TODO: add windows and other linux, arm variants + // right now filtering on version is only an ubuntu and macos scenario for tools we build for hosted (python) + const plat = os.platform(); + let version = ''; + if (plat === 'darwin') { + version = cp.execSync('sw_vers -productVersion').toString(); } - - // If the lowest version comparator has an operator and our version - // is less than it then it isn't higher than the range - if ((!low.operator || low.operator === comp) && - ltefn(version, low.semver)) { - return false - } else if (low.operator === ecomp && ltfn(version, low.semver)) { - return false + else if (plat === 'linux') { + // lsb_release process not in some containers, readfile + // Run cat /etc/lsb-release + // DISTRIB_ID=Ubuntu + // DISTRIB_RELEASE=18.04 + // DISTRIB_CODENAME=bionic + // DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS" + const lsbContents = module.exports._readLinuxVersionFile(); + if (lsbContents) { + const lines = lsbContents.split('\n'); + for (const line of lines) { + const parts = line.split('='); + if (parts.length === 2 && parts[0].trim() === 'DISTRIB_RELEASE') { + version = parts[1].trim(); + break; + } + } + } } - } - return true + return version; +} +exports._getOsVersion = _getOsVersion; +function _readLinuxVersionFile() { + const lsbFile = '/etc/lsb-release'; + let contents = ''; + if (fs.existsSync(lsbFile)) { + contents = fs.readFileSync(lsbFile).toString(); + } + return contents; } +exports._readLinuxVersionFile = _readLinuxVersionFile; +//# sourceMappingURL=manifest.js.map -module.exports = outside +/***/ }), + +/***/ 8279: +/***/ (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()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const core = __importStar(__nccwpck_require__(2186)); +/** + * Internal class for retries + */ +class RetryHelper { + constructor(maxAttempts, minSeconds, maxSeconds) { + if (maxAttempts < 1) { + throw new Error('max attempts should be greater than or equal to 1'); + } + this.maxAttempts = maxAttempts; + this.minSeconds = Math.floor(minSeconds); + this.maxSeconds = Math.floor(maxSeconds); + if (this.minSeconds > this.maxSeconds) { + throw new Error('min seconds should be less than or equal to max seconds'); + } + } + execute(action, isRetryable) { + return __awaiter(this, void 0, void 0, function* () { + let attempt = 1; + while (attempt < this.maxAttempts) { + // Try + try { + return yield action(); + } + catch (err) { + if (isRetryable && !isRetryable(err)) { + throw err; + } + core.info(err.message); + } + // Sleep + const seconds = this.getSleepAmount(); + core.info(`Waiting ${seconds} seconds before trying again`); + yield this.sleep(seconds); + attempt++; + } + // Last attempt + return yield action(); + }); + } + getSleepAmount() { + return (Math.floor(Math.random() * (this.maxSeconds - this.minSeconds + 1)) + + this.minSeconds); + } + sleep(seconds) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise(resolve => setTimeout(resolve, seconds * 1000)); + }); + } +} +exports.RetryHelper = RetryHelper; +//# sourceMappingURL=retry-helper.js.map /***/ }), -/***/ 470: -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 7784: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -2995,4474 +2362,5092 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); -}; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const command_1 = __webpack_require__(431); -const file_command_1 = __webpack_require__(102); -const utils_1 = __webpack_require__(82); -const os = __importStar(__webpack_require__(87)); -const path = __importStar(__webpack_require__(622)); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const core = __importStar(__nccwpck_require__(2186)); +const io = __importStar(__nccwpck_require__(7436)); +const fs = __importStar(__nccwpck_require__(5747)); +const mm = __importStar(__nccwpck_require__(2473)); +const os = __importStar(__nccwpck_require__(2087)); +const path = __importStar(__nccwpck_require__(5622)); +const httpm = __importStar(__nccwpck_require__(9925)); +const semver = __importStar(__nccwpck_require__(562)); +const stream = __importStar(__nccwpck_require__(2413)); +const util = __importStar(__nccwpck_require__(1669)); +const v4_1 = __importDefault(__nccwpck_require__(824)); +const exec_1 = __nccwpck_require__(1514); +const assert_1 = __nccwpck_require__(2357); +const retry_helper_1 = __nccwpck_require__(8279); +class HTTPError extends Error { + constructor(httpStatusCode) { + super(`Unexpected HTTP response: ${httpStatusCode}`); + this.httpStatusCode = httpStatusCode; + Object.setPrototypeOf(this, new.target.prototype); + } +} +exports.HTTPError = HTTPError; +const IS_WINDOWS = process.platform === 'win32'; +const IS_MAC = process.platform === 'darwin'; +const userAgent = 'actions/tool-cache'; +/** + * Download a tool from an url and stream it into a file + * + * @param url url of tool to download + * @param dest path to download tool + * @param auth authorization header + * @returns path to downloaded tool + */ +function downloadTool(url, dest, auth) { + return __awaiter(this, void 0, void 0, function* () { + dest = dest || path.join(_getTempDirectory(), v4_1.default()); + yield io.mkdirP(path.dirname(dest)); + core.debug(`Downloading ${url}`); + core.debug(`Destination ${dest}`); + const maxAttempts = 3; + const minSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS', 10); + const maxSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS', 20); + const retryHelper = new retry_helper_1.RetryHelper(maxAttempts, minSeconds, maxSeconds); + return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () { + return yield downloadToolAttempt(url, dest || '', auth); + }), (err) => { + if (err instanceof HTTPError && err.httpStatusCode) { + // Don't retry anything less than 500, except 408 Request Timeout and 429 Too Many Requests + if (err.httpStatusCode < 500 && + err.httpStatusCode !== 408 && + err.httpStatusCode !== 429) { + return false; + } + } + // Otherwise retry + return true; + }); + }); +} +exports.downloadTool = downloadTool; +function downloadToolAttempt(url, dest, auth) { + return __awaiter(this, void 0, void 0, function* () { + if (fs.existsSync(dest)) { + throw new Error(`Destination file path ${dest} already exists`); + } + // Get the response headers + const http = new httpm.HttpClient(userAgent, [], { + allowRetries: false + }); + let headers; + if (auth) { + core.debug('set auth'); + headers = { + authorization: auth + }; + } + const response = yield http.get(url, headers); + if (response.message.statusCode !== 200) { + const err = new HTTPError(response.message.statusCode); + core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); + throw err; + } + // Download the response body + const pipeline = util.promisify(stream.pipeline); + const responseMessageFactory = _getGlobal('TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY', () => response.message); + const readStream = responseMessageFactory(); + let succeeded = false; + try { + yield pipeline(readStream, fs.createWriteStream(dest)); + core.debug('download complete'); + succeeded = true; + return dest; + } + finally { + // Error, delete dest before retry + if (!succeeded) { + core.debug('download failed'); + try { + yield io.rmRF(dest); + } + catch (err) { + core.debug(`Failed to delete '${dest}'. ${err.message}`); + } + } + } + }); +} +/** + * Extract a .7z file + * + * @param file path to the .7z file + * @param dest destination directory. Optional. + * @param _7zPath path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this + * problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will + * gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is + * bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line + * interface, it is smaller than the full command line interface, and it does support long paths. At the + * time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website. + * Be sure to check the current license agreement. If 7zr.exe is bundled with your action, then the path + * to 7zr.exe can be pass to this function. + * @returns path to the destination directory + */ +function extract7z(file, dest, _7zPath) { + return __awaiter(this, void 0, void 0, function* () { + assert_1.ok(IS_WINDOWS, 'extract7z() not supported on current OS'); + assert_1.ok(file, 'parameter "file" is required'); + dest = yield _createExtractFolder(dest); + const originalCwd = process.cwd(); + process.chdir(dest); + if (_7zPath) { + try { + const logLevel = core.isDebug() ? '-bb1' : '-bb0'; + const args = [ + 'x', + logLevel, + '-bd', + '-sccUTF-8', + file + ]; + const options = { + silent: true + }; + yield exec_1.exec(`"${_7zPath}"`, args, options); + } + finally { + process.chdir(originalCwd); + } + } + else { + const escapedScript = path + .join(__dirname, '..', 'scripts', 'Invoke-7zdec.ps1') + .replace(/'/g, "''") + .replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines + const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); + const escapedTarget = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); + const command = `& '${escapedScript}' -Source '${escapedFile}' -Target '${escapedTarget}'`; + const args = [ + '-NoLogo', + '-Sta', + '-NoProfile', + '-NonInteractive', + '-ExecutionPolicy', + 'Unrestricted', + '-Command', + command + ]; + const options = { + silent: true + }; + try { + const powershellPath = yield io.which('powershell', true); + yield exec_1.exec(`"${powershellPath}"`, args, options); + } + finally { + process.chdir(originalCwd); + } + } + return dest; + }); +} +exports.extract7z = extract7z; /** - * The code to exit an action + * Extract a compressed tar archive + * + * @param file path to the tar + * @param dest destination directory. Optional. + * @param flags flags for the tar command to use for extraction. Defaults to 'xz' (extracting gzipped tars). Optional. + * @returns path to the destination directory */ -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 -//----------------------------------------------------------------------- +function extractTar(file, dest, flags = 'xz') { + return __awaiter(this, void 0, void 0, function* () { + if (!file) { + throw new Error("parameter 'file' is required"); + } + // Create dest + dest = yield _createExtractFolder(dest); + // Determine whether GNU tar + core.debug('Checking tar --version'); + let versionOutput = ''; + yield exec_1.exec('tar --version', [], { + ignoreReturnCode: true, + silent: true, + listeners: { + stdout: (data) => (versionOutput += data.toString()), + stderr: (data) => (versionOutput += data.toString()) + } + }); + core.debug(versionOutput.trim()); + const isGnuTar = versionOutput.toUpperCase().includes('GNU TAR'); + // Initialize args + let args; + if (flags instanceof Array) { + args = flags; + } + else { + args = [flags]; + } + if (core.isDebug() && !flags.includes('v')) { + args.push('-v'); + } + let destArg = dest; + let fileArg = file; + if (IS_WINDOWS && isGnuTar) { + args.push('--force-local'); + destArg = dest.replace(/\\/g, '/'); + // Technically only the dest needs to have `/` but for aesthetic consistency + // convert slashes in the file arg too. + fileArg = file.replace(/\\/g, '/'); + } + if (isGnuTar) { + // Suppress warnings when using GNU tar to extract archives created by BSD tar + args.push('--warning=no-unknown-keyword'); + } + args.push('-C', destArg, '-f', fileArg); + yield exec_1.exec(`tar`, args); + return dest; + }); +} +exports.extractTar = extractTar; /** - * 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 + * Extract a xar compatible archive + * + * @param file path to the archive + * @param dest destination directory. Optional. + * @param flags flags for the xar. Optional. + * @returns path to the destination directory */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -function exportVariable(name, val) { - const convertedVal = utils_1.toCommandValue(val); - process.env[name] = convertedVal; - const filePath = process.env['GITHUB_ENV'] || ''; - if (filePath) { - const delimiter = '_GitHubActionsFileCommandDelimeter_'; - const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`; - file_command_1.issueCommand('ENV', commandValue); - } - else { - command_1.issueCommand('set-env', { name }, convertedVal); - } +function extractXar(file, dest, flags = []) { + return __awaiter(this, void 0, void 0, function* () { + assert_1.ok(IS_MAC, 'extractXar() not supported on current OS'); + assert_1.ok(file, 'parameter "file" is required'); + dest = yield _createExtractFolder(dest); + let args; + if (flags instanceof Array) { + args = flags; + } + else { + args = [flags]; + } + args.push('-x', '-C', dest, '-f', file); + if (core.isDebug()) { + args.push('-v'); + } + const xarPath = yield io.which('xar', true); + yield exec_1.exec(`"${xarPath}"`, _unique(args)); + return dest; + }); } -exports.exportVariable = exportVariable; +exports.extractXar = extractXar; /** - * Registers a secret which will get masked from logs - * @param secret value of the secret + * Extract a zip + * + * @param file path to the zip + * @param dest destination directory. Optional. + * @returns path to the destination directory */ -function setSecret(secret) { - command_1.issueCommand('add-mask', {}, secret); +function extractZip(file, dest) { + return __awaiter(this, void 0, void 0, function* () { + if (!file) { + throw new Error("parameter 'file' is required"); + } + dest = yield _createExtractFolder(dest); + if (IS_WINDOWS) { + yield extractZipWin(file, dest); + } + else { + yield extractZipNix(file, dest); + } + return dest; + }); +} +exports.extractZip = extractZip; +function extractZipWin(file, dest) { + return __awaiter(this, void 0, void 0, function* () { + // build the powershell command + const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines + const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); + const command = `$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}')`; + // run powershell + const powershellPath = yield io.which('powershell', true); + const args = [ + '-NoLogo', + '-Sta', + '-NoProfile', + '-NonInteractive', + '-ExecutionPolicy', + 'Unrestricted', + '-Command', + command + ]; + yield exec_1.exec(`"${powershellPath}"`, args); + }); +} +function extractZipNix(file, dest) { + return __awaiter(this, void 0, void 0, function* () { + const unzipPath = yield io.which('unzip', true); + const args = [file]; + if (!core.isDebug()) { + args.unshift('-q'); + } + yield exec_1.exec(`"${unzipPath}"`, args, { cwd: dest }); + }); } -exports.setSecret = setSecret; /** - * Prepends inputPath to the PATH (for this action and future actions) - * @param inputPath + * Caches a directory and installs it into the tool cacheDir + * + * @param sourceDir the directory to cache into tools + * @param tool tool name + * @param version version of the tool. semver format + * @param arch architecture of the tool. Optional. Defaults to machine architecture */ -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']}`; +function cacheDir(sourceDir, tool, version, arch) { + return __awaiter(this, void 0, void 0, function* () { + version = semver.clean(version) || version; + arch = arch || os.arch(); + core.debug(`Caching tool ${tool} ${version} ${arch}`); + core.debug(`source dir: ${sourceDir}`); + if (!fs.statSync(sourceDir).isDirectory()) { + throw new Error('sourceDir is not a directory'); + } + // Create the tool dir + const destPath = yield _createToolPath(tool, version, arch); + // copy each child item. do not move. move can fail on Windows + // due to anti-virus software having an open handle on a file. + for (const itemName of fs.readdirSync(sourceDir)) { + const s = path.join(sourceDir, itemName); + yield io.cp(s, destPath, { recursive: true }); + } + // write .complete + _completeToolPath(tool, version, arch); + return destPath; + }); +} +exports.cacheDir = cacheDir; +/** + * Caches a downloaded file (GUID) and installs it + * into the tool cache with a given targetName + * + * @param sourceFile the file to cache into tools. Typically a result of downloadTool which is a guid. + * @param targetFile the name of the file name in the tools directory + * @param tool tool name + * @param version version of the tool. semver format + * @param arch architecture of the tool. Optional. Defaults to machine architecture + */ +function cacheFile(sourceFile, targetFile, tool, version, arch) { + return __awaiter(this, void 0, void 0, function* () { + version = semver.clean(version) || version; + arch = arch || os.arch(); + core.debug(`Caching tool ${tool} ${version} ${arch}`); + core.debug(`source file: ${sourceFile}`); + if (!fs.statSync(sourceFile).isFile()) { + throw new Error('sourceFile is not a file'); + } + // create the tool dir + const destFolder = yield _createToolPath(tool, version, arch); + // copy instead of move. move can fail on Windows due to + // anti-virus software having an open handle on a file. + const destPath = path.join(destFolder, targetFile); + core.debug(`destination file ${destPath}`); + yield io.cp(sourceFile, destPath); + // write .complete + _completeToolPath(tool, version, arch); + return destFolder; + }); } -exports.addPath = addPath; +exports.cacheFile = cacheFile; /** - * Gets the value of an input. The value is also trimmed. + * Finds the path to a tool version in the local installed tool cache * - * @param name name of the input to get - * @param options optional. See InputOptions. - * @returns string + * @param toolName name of the tool + * @param versionSpec version of the tool + * @param arch optional arch. defaults to arch of computer */ -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}`); +function find(toolName, versionSpec, arch) { + if (!toolName) { + throw new Error('toolName parameter is required'); } - return val.trim(); -} -exports.getInput = getInput; -/** - * Sets the value of an output. - * - * @param name name of the output to set - * @param value value to store. Non-string values will be converted to a string via JSON.stringify - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -function setOutput(name, value) { - command_1.issueCommand('set-output', { name }, value); + if (!versionSpec) { + throw new Error('versionSpec parameter is required'); + } + arch = arch || os.arch(); + // attempt to resolve an explicit version + if (!_isExplicitVersion(versionSpec)) { + const localVersions = findAllVersions(toolName, arch); + const match = _evaluateVersions(localVersions, versionSpec); + versionSpec = match; + } + // check for the explicit version in the cache + let toolPath = ''; + if (versionSpec) { + versionSpec = semver.clean(versionSpec) || ''; + const cachePath = path.join(_getCacheDirectory(), toolName, versionSpec, arch); + core.debug(`checking cache: ${cachePath}`); + if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) { + core.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch}`); + toolPath = cachePath; + } + else { + core.debug('not found'); + } + } + return toolPath; } -exports.setOutput = setOutput; +exports.find = find; /** - * 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. + * Finds the paths to all versions of a tool that are installed in the local tool cache * + * @param toolName name of the tool + * @param arch optional arch. defaults to arch of computer */ -function setCommandEcho(enabled) { - command_1.issue('echo', enabled ? 'on' : 'off'); +function findAllVersions(toolName, arch) { + const versions = []; + arch = arch || os.arch(); + const toolPath = path.join(_getCacheDirectory(), toolName); + if (fs.existsSync(toolPath)) { + const children = fs.readdirSync(toolPath); + for (const child of children) { + if (_isExplicitVersion(child)) { + const fullPath = path.join(toolPath, child, arch || ''); + if (fs.existsSync(fullPath) && fs.existsSync(`${fullPath}.complete`)) { + versions.push(child); + } + } + } + } + return versions; } -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.findAllVersions = findAllVersions; +function getManifestFromRepo(owner, repo, auth, branch = 'master') { + return __awaiter(this, void 0, void 0, function* () { + let releases = []; + const treeUrl = `https://api.github.com/repos/${owner}/${repo}/git/trees/${branch}`; + const http = new httpm.HttpClient('tool-cache'); + const headers = {}; + if (auth) { + core.debug('set auth'); + headers.authorization = auth; + } + const response = yield http.getJson(treeUrl, headers); + if (!response.result) { + return releases; + } + let manifestUrl = ''; + for (const item of response.result.tree) { + if (item.path === 'versions-manifest.json') { + manifestUrl = item.url; + break; + } + } + headers['accept'] = 'application/vnd.github.VERSION.raw'; + let versionsRaw = yield (yield http.get(manifestUrl, headers)).readBody(); + if (versionsRaw) { + // shouldn't be needed but protects against invalid json saved with BOM + versionsRaw = versionsRaw.replace(/^\uFEFF/, ''); + try { + releases = JSON.parse(versionsRaw); + } + catch (_a) { + core.debug('Invalid json'); + } + } + return releases; + }); } -exports.setFailed = setFailed; -//----------------------------------------------------------------------- -// Logging Commands -//----------------------------------------------------------------------- -/** - * Gets whether Actions Step Debug is on or not - */ -function isDebug() { - return process.env['RUNNER_DEBUG'] === '1'; +exports.getManifestFromRepo = getManifestFromRepo; +function findFromManifest(versionSpec, stable, manifest, archFilter = os.arch()) { + return __awaiter(this, void 0, void 0, function* () { + // wrap the internal impl + const match = yield mm._findMatch(versionSpec, stable, manifest, archFilter); + return match; + }); } -exports.isDebug = isDebug; -/** - * Writes debug message to user log - * @param message debug message - */ -function debug(message) { - command_1.issueCommand('debug', {}, message); +exports.findFromManifest = findFromManifest; +function _createExtractFolder(dest) { + return __awaiter(this, void 0, void 0, function* () { + if (!dest) { + // create a temp dir + dest = path.join(_getTempDirectory(), v4_1.default()); + } + yield io.mkdirP(dest); + return dest; + }); } -exports.debug = debug; -/** - * Adds an error issue - * @param message error issue message. Errors will be converted to string via toString() - */ -function error(message) { - command_1.issue('error', message instanceof Error ? message.toString() : message); +function _createToolPath(tool, version, arch) { + return __awaiter(this, void 0, void 0, function* () { + const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); + core.debug(`destination ${folderPath}`); + const markerPath = `${folderPath}.complete`; + yield io.rmRF(folderPath); + yield io.rmRF(markerPath); + yield io.mkdirP(folderPath); + return folderPath; + }); } -exports.error = error; -/** - * Adds an warning issue - * @param message warning issue message. Errors will be converted to string via toString() - */ -function warning(message) { - command_1.issue('warning', message instanceof Error ? message.toString() : message); +function _completeToolPath(tool, version, arch) { + const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); + const markerPath = `${folderPath}.complete`; + fs.writeFileSync(markerPath, ''); + core.debug('finished caching tool'); } -exports.warning = warning; -/** - * Writes info to log with console.log. - * @param message info message - */ -function info(message) { - process.stdout.write(message + os.EOL); +function _isExplicitVersion(versionSpec) { + const c = semver.clean(versionSpec) || ''; + core.debug(`isExplicit: ${c}`); + const valid = semver.valid(c) != null; + core.debug(`explicit? ${valid}`); + return valid; } -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); +function _evaluateVersions(versions, versionSpec) { + let version = ''; + core.debug(`evaluating ${versions.length} versions`); + versions = versions.sort((a, b) => { + if (semver.gt(a, b)) { + return 1; + } + return -1; + }); + for (let i = versions.length - 1; i >= 0; i--) { + const potential = versions[i]; + const satisfied = semver.satisfies(potential, versionSpec); + if (satisfied) { + version = potential; + break; + } + } + if (version) { + core.debug(`matched: ${version}`); + } + else { + core.debug('match not found'); + } + return version; } -exports.startGroup = startGroup; /** - * End an output group. + * Gets RUNNER_TOOL_CACHE */ -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 _getCacheDirectory() { + const cacheDirectory = process.env['RUNNER_TOOL_CACHE'] || ''; + assert_1.ok(cacheDirectory, 'Expected RUNNER_TOOL_CACHE to be defined'); + return cacheDirectory; +} +/** + * Gets RUNNER_TEMP */ -function group(name, fn) { - return __awaiter(this, void 0, void 0, function* () { - startGroup(name); - let result; - try { - result = yield fn(); - } - finally { - endGroup(); - } - return result; - }); +function _getTempDirectory() { + const tempDirectory = process.env['RUNNER_TEMP'] || ''; + assert_1.ok(tempDirectory, 'Expected RUNNER_TEMP to be defined'); + return tempDirectory; } -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 + * Gets a global variable */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -function saveState(name, value) { - command_1.issueCommand('save-state', { name }, value); +function _getGlobal(key, defaultValue) { + /* eslint-disable @typescript-eslint/no-explicit-any */ + const value = global[key]; + /* eslint-enable @typescript-eslint/no-explicit-any */ + return value !== undefined ? value : defaultValue; } -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 + * Returns an array of unique values. + * @param values Values to make unique. */ -function getState(name) { - return process.env[`STATE_${name}`] || ''; +function _unique(values) { + return Array.from(new Set(values)); } -exports.getState = getState; -//# sourceMappingURL=core.js.map +//# sourceMappingURL=tool-cache.js.map /***/ }), -/***/ 480: -/***/ (function(module, __unusedexports, __webpack_require__) { +/***/ 562: +/***/ ((module, exports) => { -const Range = __webpack_require__(124) -const validRange = (range, options) => { - try { - // Return '*' instead of '' so that truthiness works. - // This will throw if it's invalid anyway - return new Range(range, options).range || '*' - } catch (er) { - return null +exports = module.exports = SemVer + +var debug +/* istanbul ignore next */ +if (typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG)) { + debug = function () { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift('SEMVER') + console.log.apply(console, args) } +} else { + debug = function () {} } -module.exports = validRange +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +exports.SEMVER_SPEC_VERSION = '2.0.0' -/***/ }), +var MAX_LENGTH = 256 +var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || + /* istanbul ignore next */ 9007199254740991 -/***/ 486: -/***/ (function(module, __unusedexports, __webpack_require__) { +// Max safe segment length for coercion. +var MAX_SAFE_COMPONENT_LENGTH = 16 -const compare = __webpack_require__(874) -const gt = (a, b, loose) => compare(a, b, loose) > 0 -module.exports = gt +// The actual regexps go on exports.re +var re = exports.re = [] +var src = exports.src = [] +var t = exports.tokens = {} +var R = 0 +function tok (n) { + t[n] = R++ +} -/***/ }), +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. -/***/ 489: -/***/ (function(module, __unusedexports, __webpack_require__) { +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. -const SemVer = __webpack_require__(65) -const patch = (a, loose) => new SemVer(a, loose).patch -module.exports = patch +tok('NUMERICIDENTIFIER') +src[t.NUMERICIDENTIFIER] = '0|[1-9]\\d*' +tok('NUMERICIDENTIFIERLOOSE') +src[t.NUMERICIDENTIFIERLOOSE] = '[0-9]+' +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. -/***/ }), +tok('NONNUMERICIDENTIFIER') +src[t.NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*' -/***/ 499: -/***/ (function(module, __unusedexports, __webpack_require__) { +// ## Main Version +// Three dot-separated numeric identifiers. -const SemVer = __webpack_require__(65) -const parse = __webpack_require__(830) -const {re, t} = __webpack_require__(976) +tok('MAINVERSION') +src[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\.' + + '(' + src[t.NUMERICIDENTIFIER] + ')\\.' + + '(' + src[t.NUMERICIDENTIFIER] + ')' -const coerce = (version, options) => { - if (version instanceof SemVer) { - return version - } +tok('MAINVERSIONLOOSE') +src[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')' - if (typeof version === 'number') { - version = String(version) - } +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. - if (typeof version !== 'string') { - return null - } +tok('PRERELEASEIDENTIFIER') +src[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] + + '|' + src[t.NONNUMERICIDENTIFIER] + ')' - options = options || {} +tok('PRERELEASEIDENTIFIERLOOSE') +src[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] + + '|' + src[t.NONNUMERICIDENTIFIER] + ')' - let match = null - if (!options.rtl) { - match = version.match(re[t.COERCE]) - } else { - // Find the right-most coercible string that does not share - // a terminus with a more left-ward coercible string. - // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' - // - // Walk through the string checking with a /g regexp - // Manually set the index so as to pick up overlapping matches. - // Stop when we get a match that ends at the string end, since no - // coercible string can be more right-ward without the same terminus. - let next - while ((next = re[t.COERCERTL].exec(version)) && - (!match || match.index + match[0].length !== version.length) - ) { - if (!match || - next.index + next[0].length !== match.index + match[0].length) { - match = next - } - re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length - } - // leave it in a clean state - re[t.COERCERTL].lastIndex = -1 - } +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. - if (match === null) - return null +tok('PRERELEASE') +src[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] + + '(?:\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))' - return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options) -} -module.exports = coerce +tok('PRERELEASELOOSE') +src[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] + + '(?:\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))' + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +tok('BUILDIDENTIFIER') +src[t.BUILDIDENTIFIER] = '[0-9A-Za-z-]+' + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +tok('BUILD') +src[t.BUILD] = '(?:\\+(' + src[t.BUILDIDENTIFIER] + + '(?:\\.' + src[t.BUILDIDENTIFIER] + ')*))' +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +tok('FULL') +tok('FULLPLAIN') +src[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] + + src[t.PRERELEASE] + '?' + + src[t.BUILD] + '?' + +src[t.FULL] = '^' + src[t.FULLPLAIN] + '$' + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +tok('LOOSEPLAIN') +src[t.LOOSEPLAIN] = '[v=\\s]*' + src[t.MAINVERSIONLOOSE] + + src[t.PRERELEASELOOSE] + '?' + + src[t.BUILD] + '?' + +tok('LOOSE') +src[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$' + +tok('GTLT') +src[t.GTLT] = '((?:<|>)?=?)' + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +tok('XRANGEIDENTIFIERLOOSE') +src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' +tok('XRANGEIDENTIFIER') +src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\*' + +tok('XRANGEPLAIN') +src[t.XRANGEPLAIN] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + + '(?:' + src[t.PRERELEASE] + ')?' + + src[t.BUILD] + '?' + + ')?)?' + +tok('XRANGEPLAINLOOSE') +src[t.XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + + '(?:' + src[t.PRERELEASELOOSE] + ')?' + + src[t.BUILD] + '?' + + ')?)?' + +tok('XRANGE') +src[t.XRANGE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAIN] + '$' +tok('XRANGELOOSE') +src[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAINLOOSE] + '$' + +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +tok('COERCE') +src[t.COERCE] = '(^|[^\\d])' + + '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:$|[^\\d])' +tok('COERCERTL') +re[t.COERCERTL] = new RegExp(src[t.COERCE], 'g') -/***/ }), +// Tilde ranges. +// Meaning is "reasonably at or greater than" +tok('LONETILDE') +src[t.LONETILDE] = '(?:~>?)' -/***/ 503: -/***/ (function(module, __unusedexports, __webpack_require__) { +tok('TILDETRIM') +src[t.TILDETRIM] = '(\\s*)' + src[t.LONETILDE] + '\\s+' +re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g') +var tildeTrimReplace = '$1~' -const parse = __webpack_require__(830) -const clean = (version, options) => { - const s = parse(version.trim().replace(/^[=v]+/, ''), options) - return s ? s.version : null -} -module.exports = clean +tok('TILDE') +src[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$' +tok('TILDELOOSE') +src[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$' +// Caret ranges. +// Meaning is "at least and backwards compatible with" +tok('LONECARET') +src[t.LONECARET] = '(?:\\^)' -/***/ }), +tok('CARETTRIM') +src[t.CARETTRIM] = '(\\s*)' + src[t.LONECARET] + '\\s+' +re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g') +var caretTrimReplace = '$1^' -/***/ 531: -/***/ (function(module, __unusedexports, __webpack_require__) { +tok('CARET') +src[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$' +tok('CARETLOOSE') +src[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$' -// Determine if version is greater than all the versions possible in the range. -const outside = __webpack_require__(462) -const gtr = (version, range, options) => outside(version, range, '>', options) -module.exports = gtr +// A simple gt/lt/eq thing, or just "" to indicate "any version" +tok('COMPARATORLOOSE') +src[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\s*(' + src[t.LOOSEPLAIN] + ')$|^$' +tok('COMPARATOR') +src[t.COMPARATOR] = '^' + src[t.GTLT] + '\\s*(' + src[t.FULLPLAIN] + ')$|^$' +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +tok('COMPARATORTRIM') +src[t.COMPARATORTRIM] = '(\\s*)' + src[t.GTLT] + + '\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')' -/***/ }), +// this one has to use the /g flag +re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g') +var comparatorTrimReplace = '$1$2$3' -/***/ 533: -/***/ (function(__unusedmodule, exports, __webpack_require__) { +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +tok('HYPHENRANGE') +src[t.HYPHENRANGE] = '^\\s*(' + src[t.XRANGEPLAIN] + ')' + + '\\s+-\\s+' + + '(' + src[t.XRANGEPLAIN] + ')' + + '\\s*$' -"use strict"; +tok('HYPHENRANGELOOSE') +src[t.HYPHENRANGELOOSE] = '^\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' + + '\\s+-\\s+' + + '(' + src[t.XRANGEPLAINLOOSE] + ')' + + '\\s*$' -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const core = __importStar(__webpack_require__(470)); -const io = __importStar(__webpack_require__(1)); -const fs = __importStar(__webpack_require__(747)); -const mm = __importStar(__webpack_require__(31)); -const os = __importStar(__webpack_require__(87)); -const path = __importStar(__webpack_require__(622)); -const httpm = __importStar(__webpack_require__(539)); -const semver = __importStar(__webpack_require__(550)); -const stream = __importStar(__webpack_require__(794)); -const util = __importStar(__webpack_require__(669)); -const v4_1 = __importDefault(__webpack_require__(826)); -const exec_1 = __webpack_require__(986); -const assert_1 = __webpack_require__(357); -const retry_helper_1 = __webpack_require__(979); -class HTTPError extends Error { - constructor(httpStatusCode) { - super(`Unexpected HTTP response: ${httpStatusCode}`); - this.httpStatusCode = httpStatusCode; - Object.setPrototypeOf(this, new.target.prototype); - } -} -exports.HTTPError = HTTPError; -const IS_WINDOWS = process.platform === 'win32'; -const IS_MAC = process.platform === 'darwin'; -const userAgent = 'actions/tool-cache'; -/** - * Download a tool from an url and stream it into a file - * - * @param url url of tool to download - * @param dest path to download tool - * @param auth authorization header - * @returns path to downloaded tool - */ -function downloadTool(url, dest, auth) { - return __awaiter(this, void 0, void 0, function* () { - dest = dest || path.join(_getTempDirectory(), v4_1.default()); - yield io.mkdirP(path.dirname(dest)); - core.debug(`Downloading ${url}`); - core.debug(`Destination ${dest}`); - const maxAttempts = 3; - const minSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS', 10); - const maxSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS', 20); - const retryHelper = new retry_helper_1.RetryHelper(maxAttempts, minSeconds, maxSeconds); - return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () { - return yield downloadToolAttempt(url, dest || '', auth); - }), (err) => { - if (err instanceof HTTPError && err.httpStatusCode) { - // Don't retry anything less than 500, except 408 Request Timeout and 429 Too Many Requests - if (err.httpStatusCode < 500 && - err.httpStatusCode !== 408 && - err.httpStatusCode !== 429) { - return false; - } - } - // Otherwise retry - return true; - }); - }); -} -exports.downloadTool = downloadTool; -function downloadToolAttempt(url, dest, auth) { - return __awaiter(this, void 0, void 0, function* () { - if (fs.existsSync(dest)) { - throw new Error(`Destination file path ${dest} already exists`); - } - // Get the response headers - const http = new httpm.HttpClient(userAgent, [], { - allowRetries: false - }); - let headers; - if (auth) { - core.debug('set auth'); - headers = { - authorization: auth - }; - } - const response = yield http.get(url, headers); - if (response.message.statusCode !== 200) { - const err = new HTTPError(response.message.statusCode); - core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); - throw err; - } - // Download the response body - const pipeline = util.promisify(stream.pipeline); - const responseMessageFactory = _getGlobal('TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY', () => response.message); - const readStream = responseMessageFactory(); - let succeeded = false; - try { - yield pipeline(readStream, fs.createWriteStream(dest)); - core.debug('download complete'); - succeeded = true; - return dest; - } - finally { - // Error, delete dest before retry - if (!succeeded) { - core.debug('download failed'); - try { - yield io.rmRF(dest); - } - catch (err) { - core.debug(`Failed to delete '${dest}'. ${err.message}`); - } - } - } - }); -} -/** - * Extract a .7z file - * - * @param file path to the .7z file - * @param dest destination directory. Optional. - * @param _7zPath path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this - * problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will - * gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is - * bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line - * interface, it is smaller than the full command line interface, and it does support long paths. At the - * time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website. - * Be sure to check the current license agreement. If 7zr.exe is bundled with your action, then the path - * to 7zr.exe can be pass to this function. - * @returns path to the destination directory - */ -function extract7z(file, dest, _7zPath) { - return __awaiter(this, void 0, void 0, function* () { - assert_1.ok(IS_WINDOWS, 'extract7z() not supported on current OS'); - assert_1.ok(file, 'parameter "file" is required'); - dest = yield _createExtractFolder(dest); - const originalCwd = process.cwd(); - process.chdir(dest); - if (_7zPath) { - try { - const logLevel = core.isDebug() ? '-bb1' : '-bb0'; - const args = [ - 'x', - logLevel, - '-bd', - '-sccUTF-8', - file - ]; - const options = { - silent: true - }; - yield exec_1.exec(`"${_7zPath}"`, args, options); - } - finally { - process.chdir(originalCwd); - } - } - else { - const escapedScript = path - .join(__dirname, '..', 'scripts', 'Invoke-7zdec.ps1') - .replace(/'/g, "''") - .replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines - const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); - const escapedTarget = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); - const command = `& '${escapedScript}' -Source '${escapedFile}' -Target '${escapedTarget}'`; - const args = [ - '-NoLogo', - '-Sta', - '-NoProfile', - '-NonInteractive', - '-ExecutionPolicy', - 'Unrestricted', - '-Command', - command - ]; - const options = { - silent: true - }; - try { - const powershellPath = yield io.which('powershell', true); - yield exec_1.exec(`"${powershellPath}"`, args, options); - } - finally { - process.chdir(originalCwd); - } - } - return dest; - }); +// Star ranges basically just allow anything at all. +tok('STAR') +src[t.STAR] = '(<|>)?=?\\s*\\*' + +// Compile to actual regexp objects. +// All are flag-free, unless they were created above with a flag. +for (var i = 0; i < R; i++) { + debug(i, src[i]) + if (!re[i]) { + re[i] = new RegExp(src[i]) + } } -exports.extract7z = extract7z; -/** - * Extract a compressed tar archive - * - * @param file path to the tar - * @param dest destination directory. Optional. - * @param flags flags for the tar command to use for extraction. Defaults to 'xz' (extracting gzipped tars). Optional. - * @returns path to the destination directory - */ -function extractTar(file, dest, flags = 'xz') { - return __awaiter(this, void 0, void 0, function* () { - if (!file) { - throw new Error("parameter 'file' is required"); - } - // Create dest - dest = yield _createExtractFolder(dest); - // Determine whether GNU tar - core.debug('Checking tar --version'); - let versionOutput = ''; - yield exec_1.exec('tar --version', [], { - ignoreReturnCode: true, - silent: true, - listeners: { - stdout: (data) => (versionOutput += data.toString()), - stderr: (data) => (versionOutput += data.toString()) - } - }); - core.debug(versionOutput.trim()); - const isGnuTar = versionOutput.toUpperCase().includes('GNU TAR'); - // Initialize args - let args; - if (flags instanceof Array) { - args = flags; - } - else { - args = [flags]; - } - if (core.isDebug() && !flags.includes('v')) { - args.push('-v'); - } - let destArg = dest; - let fileArg = file; - if (IS_WINDOWS && isGnuTar) { - args.push('--force-local'); - destArg = dest.replace(/\\/g, '/'); - // Technically only the dest needs to have `/` but for aesthetic consistency - // convert slashes in the file arg too. - fileArg = file.replace(/\\/g, '/'); - } - if (isGnuTar) { - // Suppress warnings when using GNU tar to extract archives created by BSD tar - args.push('--warning=no-unknown-keyword'); - } - args.push('-C', destArg, '-f', fileArg); - yield exec_1.exec(`tar`, args); - return dest; - }); + +exports.parse = parse +function parse (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (version instanceof SemVer) { + return version + } + + if (typeof version !== 'string') { + return null + } + + if (version.length > MAX_LENGTH) { + return null + } + + var r = options.loose ? re[t.LOOSE] : re[t.FULL] + if (!r.test(version)) { + return null + } + + try { + return new SemVer(version, options) + } catch (er) { + return null + } } -exports.extractTar = extractTar; -/** - * Extract a xar compatible archive - * - * @param file path to the archive - * @param dest destination directory. Optional. - * @param flags flags for the xar. Optional. - * @returns path to the destination directory - */ -function extractXar(file, dest, flags = []) { - return __awaiter(this, void 0, void 0, function* () { - assert_1.ok(IS_MAC, 'extractXar() not supported on current OS'); - assert_1.ok(file, 'parameter "file" is required'); - dest = yield _createExtractFolder(dest); - let args; - if (flags instanceof Array) { - args = flags; - } - else { - args = [flags]; - } - args.push('-x', '-C', dest, '-f', file); - if (core.isDebug()) { - args.push('-v'); - } - const xarPath = yield io.which('xar', true); - yield exec_1.exec(`"${xarPath}"`, _unique(args)); - return dest; - }); + +exports.valid = valid +function valid (version, options) { + var v = parse(version, options) + return v ? v.version : null } -exports.extractXar = extractXar; -/** - * Extract a zip - * - * @param file path to the zip - * @param dest destination directory. Optional. - * @returns path to the destination directory - */ -function extractZip(file, dest) { - return __awaiter(this, void 0, void 0, function* () { - if (!file) { - throw new Error("parameter 'file' is required"); - } - dest = yield _createExtractFolder(dest); - if (IS_WINDOWS) { - yield extractZipWin(file, dest); - } - else { - yield extractZipNix(file, dest); + +exports.clean = clean +function clean (version, options) { + var s = parse(version.trim().replace(/^[=v]+/, ''), options) + return s ? s.version : null +} + +exports.SemVer = SemVer + +function SemVer (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + if (version instanceof SemVer) { + if (version.loose === options.loose) { + return version + } else { + version = version.version + } + } else if (typeof version !== 'string') { + throw new TypeError('Invalid Version: ' + version) + } + + if (version.length > MAX_LENGTH) { + throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') + } + + if (!(this instanceof SemVer)) { + return new SemVer(version, options) + } + + debug('SemVer', version, options) + this.options = options + this.loose = !!options.loose + + var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) + + if (!m) { + throw new TypeError('Invalid Version: ' + version) + } + + this.raw = version + + // these are actually numbers + this.major = +m[1] + this.minor = +m[2] + this.patch = +m[3] + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') + } + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = [] + } else { + this.prerelease = m[4].split('.').map(function (id) { + if (/^[0-9]+$/.test(id)) { + var num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num } - return dest; - }); + } + return id + }) + } + + this.build = m[5] ? m[5].split('.') : [] + this.format() } -exports.extractZip = extractZip; -function extractZipWin(file, dest) { - return __awaiter(this, void 0, void 0, function* () { - // build the powershell command - const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines - const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); - const command = `$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}')`; - // run powershell - const powershellPath = yield io.which('powershell', true); - const args = [ - '-NoLogo', - '-Sta', - '-NoProfile', - '-NonInteractive', - '-ExecutionPolicy', - 'Unrestricted', - '-Command', - command - ]; - yield exec_1.exec(`"${powershellPath}"`, args); - }); + +SemVer.prototype.format = function () { + this.version = this.major + '.' + this.minor + '.' + this.patch + if (this.prerelease.length) { + this.version += '-' + this.prerelease.join('.') + } + return this.version } -function extractZipNix(file, dest) { - return __awaiter(this, void 0, void 0, function* () { - const unzipPath = yield io.which('unzip', true); - const args = [file]; - if (!core.isDebug()) { - args.unshift('-q'); - } - yield exec_1.exec(`"${unzipPath}"`, args, { cwd: dest }); - }); + +SemVer.prototype.toString = function () { + return this.version } -/** - * Caches a directory and installs it into the tool cacheDir - * - * @param sourceDir the directory to cache into tools - * @param tool tool name - * @param version version of the tool. semver format - * @param arch architecture of the tool. Optional. Defaults to machine architecture - */ -function cacheDir(sourceDir, tool, version, arch) { - return __awaiter(this, void 0, void 0, function* () { - version = semver.clean(version) || version; - arch = arch || os.arch(); - core.debug(`Caching tool ${tool} ${version} ${arch}`); - core.debug(`source dir: ${sourceDir}`); - if (!fs.statSync(sourceDir).isDirectory()) { - throw new Error('sourceDir is not a directory'); - } - // Create the tool dir - const destPath = yield _createToolPath(tool, version, arch); - // copy each child item. do not move. move can fail on Windows - // due to anti-virus software having an open handle on a file. - for (const itemName of fs.readdirSync(sourceDir)) { - const s = path.join(sourceDir, itemName); - yield io.cp(s, destPath, { recursive: true }); - } - // write .complete - _completeToolPath(tool, version, arch); - return destPath; - }); + +SemVer.prototype.compare = function (other) { + debug('SemVer.compare', this.version, this.options, other) + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return this.compareMain(other) || this.comparePre(other) } -exports.cacheDir = cacheDir; -/** - * Caches a downloaded file (GUID) and installs it - * into the tool cache with a given targetName - * - * @param sourceFile the file to cache into tools. Typically a result of downloadTool which is a guid. - * @param targetFile the name of the file name in the tools directory - * @param tool tool name - * @param version version of the tool. semver format - * @param arch architecture of the tool. Optional. Defaults to machine architecture - */ -function cacheFile(sourceFile, targetFile, tool, version, arch) { - return __awaiter(this, void 0, void 0, function* () { - version = semver.clean(version) || version; - arch = arch || os.arch(); - core.debug(`Caching tool ${tool} ${version} ${arch}`); - core.debug(`source file: ${sourceFile}`); - if (!fs.statSync(sourceFile).isFile()) { - throw new Error('sourceFile is not a file'); - } - // create the tool dir - const destFolder = yield _createToolPath(tool, version, arch); - // copy instead of move. move can fail on Windows due to - // anti-virus software having an open handle on a file. - const destPath = path.join(destFolder, targetFile); - core.debug(`destination file ${destPath}`); - yield io.cp(sourceFile, destPath); - // write .complete - _completeToolPath(tool, version, arch); - return destFolder; - }); + +SemVer.prototype.compareMain = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) } -exports.cacheFile = cacheFile; -/** - * Finds the path to a tool version in the local installed tool cache - * - * @param toolName name of the tool - * @param versionSpec version of the tool - * @param arch optional arch. defaults to arch of computer - */ -function find(toolName, versionSpec, arch) { - if (!toolName) { - throw new Error('toolName parameter is required'); - } - if (!versionSpec) { - throw new Error('versionSpec parameter is required'); + +SemVer.prototype.comparePre = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } + + var i = 0 + do { + var a = this.prerelease[i] + var b = other.prerelease[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) } - arch = arch || os.arch(); - // attempt to resolve an explicit version - if (!_isExplicitVersion(versionSpec)) { - const localVersions = findAllVersions(toolName, arch); - const match = _evaluateVersions(localVersions, versionSpec); - versionSpec = match; + } while (++i) +} + +SemVer.prototype.compareBuild = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + var i = 0 + do { + var a = this.build[i] + var b = other.build[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) } - // check for the explicit version in the cache - let toolPath = ''; - if (versionSpec) { - versionSpec = semver.clean(versionSpec) || ''; - const cachePath = path.join(_getCacheDirectory(), toolName, versionSpec, arch); - core.debug(`checking cache: ${cachePath}`); - if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) { - core.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch}`); - toolPath = cachePath; + } while (++i) +} + +// preminor will bump the version up to the next minor release, and immediately +// down to pre-release. premajor and prepatch work the same way. +SemVer.prototype.inc = function (release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0 + this.patch = 0 + this.minor = 0 + this.major++ + this.inc('pre', identifier) + break + case 'preminor': + this.prerelease.length = 0 + this.patch = 0 + this.minor++ + this.inc('pre', identifier) + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch', identifier) + this.inc('pre', identifier) + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier) + } + this.inc('pre', identifier) + break + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if (this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0) { + this.major++ + } + this.minor = 0 + this.patch = 0 + this.prerelease = [] + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++ + } + this.patch = 0 + this.prerelease = [] + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++ + } + this.prerelease = [] + break + // This probably shouldn't be used publicly. + // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) { + this.prerelease = [0] + } else { + var i = this.prerelease.length + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++ + i = -2 + } } - else { - core.debug('not found'); + if (i === -1) { + // didn't increment anything + this.prerelease.push(0) } - } - return toolPath; -} -exports.find = find; -/** - * Finds the paths to all versions of a tool that are installed in the local tool cache - * - * @param toolName name of the tool - * @param arch optional arch. defaults to arch of computer - */ -function findAllVersions(toolName, arch) { - const versions = []; - arch = arch || os.arch(); - const toolPath = path.join(_getCacheDirectory(), toolName); - if (fs.existsSync(toolPath)) { - const children = fs.readdirSync(toolPath); - for (const child of children) { - if (_isExplicitVersion(child)) { - const fullPath = path.join(toolPath, child, arch || ''); - if (fs.existsSync(fullPath) && fs.existsSync(`${fullPath}.complete`)) { - versions.push(child); - } - } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) { + this.prerelease = [identifier, 0] + } + } else { + this.prerelease = [identifier, 0] } - } - return versions; + } + break + + default: + throw new Error('invalid increment argument: ' + release) + } + this.format() + this.raw = this.version + return this } -exports.findAllVersions = findAllVersions; -function getManifestFromRepo(owner, repo, auth, branch = 'master') { - return __awaiter(this, void 0, void 0, function* () { - let releases = []; - const treeUrl = `https://api.github.com/repos/${owner}/${repo}/git/trees/${branch}`; - const http = new httpm.HttpClient('tool-cache'); - const headers = {}; - if (auth) { - core.debug('set auth'); - headers.authorization = auth; - } - const response = yield http.getJson(treeUrl, headers); - if (!response.result) { - return releases; - } - let manifestUrl = ''; - for (const item of response.result.tree) { - if (item.path === 'versions-manifest.json') { - manifestUrl = item.url; - break; - } - } - headers['accept'] = 'application/vnd.github.VERSION.raw'; - let versionsRaw = yield (yield http.get(manifestUrl, headers)).readBody(); - if (versionsRaw) { - // shouldn't be needed but protects against invalid json saved with BOM - versionsRaw = versionsRaw.replace(/^\uFEFF/, ''); - try { - releases = JSON.parse(versionsRaw); - } - catch (_a) { - core.debug('Invalid json'); - } + +exports.inc = inc +function inc (version, release, loose, identifier) { + if (typeof (loose) === 'string') { + identifier = loose + loose = undefined + } + + try { + return new SemVer(version, loose).inc(release, identifier).version + } catch (er) { + return null + } +} + +exports.diff = diff +function diff (version1, version2) { + if (eq(version1, version2)) { + return null + } else { + var v1 = parse(version1) + var v2 = parse(version2) + var prefix = '' + if (v1.prerelease.length || v2.prerelease.length) { + prefix = 'pre' + var defaultResult = 'prerelease' + } + for (var key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return prefix + key } - return releases; - }); + } + } + return defaultResult // may be undefined + } } -exports.getManifestFromRepo = getManifestFromRepo; -function findFromManifest(versionSpec, stable, manifest, archFilter = os.arch()) { - return __awaiter(this, void 0, void 0, function* () { - // wrap the internal impl - const match = yield mm._findMatch(versionSpec, stable, manifest, archFilter); - return match; - }); + +exports.compareIdentifiers = compareIdentifiers + +var numeric = /^[0-9]+$/ +function compareIdentifiers (a, b) { + var anum = numeric.test(a) + var bnum = numeric.test(b) + + if (anum && bnum) { + a = +a + b = +b + } + + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 } -exports.findFromManifest = findFromManifest; -function _createExtractFolder(dest) { - return __awaiter(this, void 0, void 0, function* () { - if (!dest) { - // create a temp dir - dest = path.join(_getTempDirectory(), v4_1.default()); - } - yield io.mkdirP(dest); - return dest; - }); + +exports.rcompareIdentifiers = rcompareIdentifiers +function rcompareIdentifiers (a, b) { + return compareIdentifiers(b, a) } -function _createToolPath(tool, version, arch) { - return __awaiter(this, void 0, void 0, function* () { - const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); - core.debug(`destination ${folderPath}`); - const markerPath = `${folderPath}.complete`; - yield io.rmRF(folderPath); - yield io.rmRF(markerPath); - yield io.mkdirP(folderPath); - return folderPath; - }); + +exports.major = major +function major (a, loose) { + return new SemVer(a, loose).major } -function _completeToolPath(tool, version, arch) { - const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); - const markerPath = `${folderPath}.complete`; - fs.writeFileSync(markerPath, ''); - core.debug('finished caching tool'); + +exports.minor = minor +function minor (a, loose) { + return new SemVer(a, loose).minor } -function _isExplicitVersion(versionSpec) { - const c = semver.clean(versionSpec) || ''; - core.debug(`isExplicit: ${c}`); - const valid = semver.valid(c) != null; - core.debug(`explicit? ${valid}`); - return valid; + +exports.patch = patch +function patch (a, loose) { + return new SemVer(a, loose).patch } -function _evaluateVersions(versions, versionSpec) { - let version = ''; - core.debug(`evaluating ${versions.length} versions`); - versions = versions.sort((a, b) => { - if (semver.gt(a, b)) { - return 1; - } - return -1; - }); - for (let i = versions.length - 1; i >= 0; i--) { - const potential = versions[i]; - const satisfied = semver.satisfies(potential, versionSpec); - if (satisfied) { - version = potential; - break; - } - } - if (version) { - core.debug(`matched: ${version}`); - } - else { - core.debug('match not found'); - } - return version; + +exports.compare = compare +function compare (a, b, loose) { + return new SemVer(a, loose).compare(new SemVer(b, loose)) } -/** - * Gets RUNNER_TOOL_CACHE - */ -function _getCacheDirectory() { - const cacheDirectory = process.env['RUNNER_TOOL_CACHE'] || ''; - assert_1.ok(cacheDirectory, 'Expected RUNNER_TOOL_CACHE to be defined'); - return cacheDirectory; + +exports.compareLoose = compareLoose +function compareLoose (a, b) { + return compare(a, b, true) } -/** - * Gets RUNNER_TEMP - */ -function _getTempDirectory() { - const tempDirectory = process.env['RUNNER_TEMP'] || ''; - assert_1.ok(tempDirectory, 'Expected RUNNER_TEMP to be defined'); - return tempDirectory; + +exports.compareBuild = compareBuild +function compareBuild (a, b, loose) { + var versionA = new SemVer(a, loose) + var versionB = new SemVer(b, loose) + return versionA.compare(versionB) || versionA.compareBuild(versionB) } -/** - * Gets a global variable - */ -function _getGlobal(key, defaultValue) { - /* eslint-disable @typescript-eslint/no-explicit-any */ - const value = global[key]; - /* eslint-enable @typescript-eslint/no-explicit-any */ - return value !== undefined ? value : defaultValue; + +exports.rcompare = rcompare +function rcompare (a, b, loose) { + return compare(b, a, loose) } -/** - * Returns an array of unique values. - * @param values Values to make unique. - */ -function _unique(values) { - return Array.from(new Set(values)); + +exports.sort = sort +function sort (list, loose) { + return list.sort(function (a, b) { + return exports.compareBuild(a, b, loose) + }) } -//# sourceMappingURL=tool-cache.js.map -/***/ }), +exports.rsort = rsort +function rsort (list, loose) { + return list.sort(function (a, b) { + return exports.compareBuild(b, a, loose) + }) +} -/***/ 539: -/***/ (function(__unusedmodule, exports, __webpack_require__) { +exports.gt = gt +function gt (a, b, loose) { + return compare(a, b, loose) > 0 +} -"use strict"; +exports.lt = lt +function lt (a, b, loose) { + return compare(a, b, loose) < 0 +} -Object.defineProperty(exports, "__esModule", { value: true }); -const http = __webpack_require__(605); -const https = __webpack_require__(211); -const pm = __webpack_require__(950); -let tunnel; -var HttpCodes; -(function (HttpCodes) { - HttpCodes[HttpCodes["OK"] = 200] = "OK"; - HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; - HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; - HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; - HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; - HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; - HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; - HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; - HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; - HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; - HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; - HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; - HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; - HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; - HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; - HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; - HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; - HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; - HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; - HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; - HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; - HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; - HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; - HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; - HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; - HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; - HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; -})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); -var Headers; -(function (Headers) { - Headers["Accept"] = "accept"; - Headers["ContentType"] = "content-type"; -})(Headers = exports.Headers || (exports.Headers = {})); -var MediaTypes; -(function (MediaTypes) { - MediaTypes["ApplicationJson"] = "application/json"; -})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {})); -/** - * Returns the proxy URL, depending upon the supplied url and proxy environment variables. - * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com - */ -function getProxyUrl(serverUrl) { - let proxyUrl = pm.getProxyUrl(new URL(serverUrl)); - return proxyUrl ? proxyUrl.href : ''; +exports.eq = eq +function eq (a, b, loose) { + return compare(a, b, loose) === 0 } -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.neq = neq +function neq (a, b, loose) { + return compare(a, b, loose) !== 0 } -exports.HttpClientError = HttpClientError; -class HttpClientResponse { - constructor(message) { - this.message = message; - } - readBody() { - return new Promise(async (resolve, reject) => { - let output = Buffer.alloc(0); - this.message.on('data', (chunk) => { - output = Buffer.concat([output, chunk]); - }); - this.message.on('end', () => { - resolve(output.toString()); - }); - }); - } + +exports.gte = gte +function gte (a, b, loose) { + return compare(a, b, loose) >= 0 } -exports.HttpClientResponse = HttpClientResponse; -function isHttps(requestUrl) { - let parsedUrl = new URL(requestUrl); - return parsedUrl.protocol === 'https:'; + +exports.lte = lte +function lte (a, b, loose) { + return compare(a, b, loose) <= 0 } -exports.isHttps = isHttps; -class HttpClient { - constructor(userAgent, handlers, requestOptions) { - this._ignoreSslError = false; - this._allowRedirects = true; - this._allowRedirectDowngrade = false; - this._maxRedirects = 50; - this._allowRetries = false; - this._maxRetries = 1; - this._keepAlive = false; - this._disposed = false; - this.userAgent = userAgent; - this.handlers = handlers || []; - this.requestOptions = requestOptions; - if (requestOptions) { - if (requestOptions.ignoreSslError != null) { - this._ignoreSslError = requestOptions.ignoreSslError; - } - this._socketTimeout = requestOptions.socketTimeout; - if (requestOptions.allowRedirects != null) { - this._allowRedirects = requestOptions.allowRedirects; - } - if (requestOptions.allowRedirectDowngrade != null) { - this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; - } - if (requestOptions.maxRedirects != null) { - this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); - } - if (requestOptions.keepAlive != null) { - this._keepAlive = requestOptions.keepAlive; - } - if (requestOptions.allowRetries != null) { - this._allowRetries = requestOptions.allowRetries; - } - if (requestOptions.maxRetries != null) { - this._maxRetries = requestOptions.maxRetries; - } - } - } - options(requestUrl, additionalHeaders) { - return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); - } - get(requestUrl, additionalHeaders) { - return this.request('GET', requestUrl, null, additionalHeaders || {}); - } - del(requestUrl, additionalHeaders) { - return this.request('DELETE', requestUrl, null, additionalHeaders || {}); - } - post(requestUrl, data, additionalHeaders) { - return this.request('POST', requestUrl, data, additionalHeaders || {}); - } - patch(requestUrl, data, additionalHeaders) { - return this.request('PATCH', requestUrl, data, additionalHeaders || {}); - } - put(requestUrl, data, additionalHeaders) { - return this.request('PUT', requestUrl, data, additionalHeaders || {}); - } - head(requestUrl, additionalHeaders) { - return this.request('HEAD', requestUrl, null, additionalHeaders || {}); - } - sendStream(verb, requestUrl, stream, additionalHeaders) { - return this.request(verb, requestUrl, stream, additionalHeaders); - } - /** - * Gets a typed object from an endpoint - * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise - */ - async getJson(requestUrl, additionalHeaders = {}) { - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - let res = await this.get(requestUrl, additionalHeaders); - return this._processResponse(res, this.requestOptions); - } - async postJson(requestUrl, obj, additionalHeaders = {}) { - let data = JSON.stringify(obj, null, 2); - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); - let res = await this.post(requestUrl, data, additionalHeaders); - return this._processResponse(res, this.requestOptions); - } - async putJson(requestUrl, obj, additionalHeaders = {}) { - let data = JSON.stringify(obj, null, 2); - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); - let res = await this.put(requestUrl, data, additionalHeaders); - return this._processResponse(res, this.requestOptions); - } - async patchJson(requestUrl, obj, additionalHeaders = {}) { - let data = JSON.stringify(obj, null, 2); - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); - let res = await this.patch(requestUrl, data, additionalHeaders); - return this._processResponse(res, this.requestOptions); + +exports.cmp = cmp +function cmp (a, op, b, loose) { + switch (op) { + case '===': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a === b + + case '!==': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a !== b + + case '': + case '=': + case '==': + return eq(a, b, loose) + + case '!=': + return neq(a, b, loose) + + case '>': + return gt(a, b, loose) + + case '>=': + return gte(a, b, loose) + + case '<': + return lt(a, b, loose) + + case '<=': + return lte(a, b, loose) + + default: + throw new TypeError('Invalid operator: ' + op) + } +} + +exports.Comparator = Comparator +function Comparator (comp, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false } - /** - * Makes a raw http request. - * All other methods such as get, post, patch, and request ultimately call this. - * Prefer get, del, post and patch - */ - async request(verb, requestUrl, data, headers) { - if (this._disposed) { - throw new Error('Client has already been disposed.'); - } - let parsedUrl = new URL(requestUrl); - let info = this._prepareRequest(verb, parsedUrl, headers); - // Only perform retries on reads since writes may not be idempotent. - let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1 - ? this._maxRetries + 1 - : 1; - let numTries = 0; - let response; - while (numTries < maxTries) { - response = await this.requestRaw(info, data); - // Check if it's an authentication challenge - if (response && - response.message && - response.message.statusCode === HttpCodes.Unauthorized) { - let authenticationHandler; - for (let i = 0; i < this.handlers.length; i++) { - if (this.handlers[i].canHandleAuthentication(response)) { - authenticationHandler = this.handlers[i]; - break; - } - } - if (authenticationHandler) { - return authenticationHandler.handleAuthentication(this, info, data); - } - else { - // We have received an unauthorized response but have no handlers to handle it. - // Let the response return to the caller. - return response; - } - } - let redirectsRemaining = this._maxRedirects; - while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 && - this._allowRedirects && - redirectsRemaining > 0) { - const redirectUrl = response.message.headers['location']; - if (!redirectUrl) { - // if there's no location to redirect to, we won't - break; - } - let parsedRedirectUrl = new URL(redirectUrl); - if (parsedUrl.protocol == 'https:' && - parsedUrl.protocol != parsedRedirectUrl.protocol && - !this._allowRedirectDowngrade) { - throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.'); - } - // we need to finish reading the response before reassigning response - // which will leak the open socket. - await response.readBody(); - // strip authorization header if redirected to a different hostname - if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { - for (let header in headers) { - // header names are case insensitive - if (header.toLowerCase() === 'authorization') { - delete headers[header]; - } - } - } - // let's make the request with the new redirectUrl - info = this._prepareRequest(verb, parsedRedirectUrl, headers); - response = await this.requestRaw(info, data); - redirectsRemaining--; - } - if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) { - // If not a retry code, return immediately instead of retrying - return response; - } - numTries += 1; - if (numTries < maxTries) { - await response.readBody(); - await this._performExponentialBackoff(numTries); - } - } - return response; + } + + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp + } else { + comp = comp.value } - /** - * Needs to be called if keepAlive is set to true in request options. - */ - dispose() { - if (this._agent) { - this._agent.destroy(); - } - this._disposed = true; + } + + if (!(this instanceof Comparator)) { + return new Comparator(comp, options) + } + + debug('comparator', comp, options) + this.options = options + this.loose = !!options.loose + this.parse(comp) + + if (this.semver === ANY) { + this.value = '' + } else { + this.value = this.operator + this.semver.version + } + + debug('comp', this) +} + +var ANY = {} +Comparator.prototype.parse = function (comp) { + var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + var m = comp.match(r) + + if (!m) { + throw new TypeError('Invalid comparator: ' + comp) + } + + this.operator = m[1] !== undefined ? m[1] : '' + if (this.operator === '=') { + this.operator = '' + } + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY + } else { + this.semver = new SemVer(m[2], this.options.loose) + } +} + +Comparator.prototype.toString = function () { + return this.value +} + +Comparator.prototype.test = function (version) { + debug('Comparator.test', version, this.options.loose) + + if (this.semver === ANY || version === ANY) { + return true + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false } - /** - * Raw request. - * @param info - * @param data - */ - requestRaw(info, data) { - return new Promise((resolve, reject) => { - let callbackForResult = function (err, res) { - if (err) { - reject(err); - } - resolve(res); - }; - this.requestRawWithCallback(info, data, callbackForResult); - }); + } + + return cmp(version, this.operator, this.semver, this.options) +} + +Comparator.prototype.intersects = function (comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required') + } + + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false } - /** - * Raw request with callback. - * @param info - * @param data - * @param onResult - */ - requestRawWithCallback(info, data, onResult) { - let socket; - if (typeof data === 'string') { - info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); - } - let callbackCalled = false; - let handleResult = (err, res) => { - if (!callbackCalled) { - callbackCalled = true; - onResult(err, res); - } - }; - let req = info.httpModule.request(info.options, (msg) => { - let res = new HttpClientResponse(msg); - handleResult(null, res); - }); - req.on('socket', sock => { - socket = sock; - }); - // If we ever get disconnected, we want the socket to timeout eventually - req.setTimeout(this._socketTimeout || 3 * 60000, () => { - if (socket) { - socket.end(); - } - handleResult(new Error('Request timeout: ' + info.options.path), null); - }); - req.on('error', function (err) { - // err has statusCode property - // res should have headers - handleResult(err, null); - }); - if (data && typeof data === 'string') { - req.write(data, 'utf8'); - } - if (data && typeof data !== 'string') { - data.on('close', function () { - req.end(); - }); - data.pipe(req); - } - else { - req.end(); - } + } + + var rangeTmp + + if (this.operator === '') { + if (this.value === '') { + return true } - /** - * Gets an http agent. This function is useful when you need an http agent that handles - * routing through a proxy server - depending upon the url and proxy environment variables. - * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com - */ - getAgent(serverUrl) { - let parsedUrl = new URL(serverUrl); - return this._getAgent(parsedUrl); + rangeTmp = new Range(comp.value, options) + return satisfies(this.value, rangeTmp, options) + } else if (comp.operator === '') { + if (comp.value === '') { + return true } - _prepareRequest(method, requestUrl, headers) { - const info = {}; - info.parsedUrl = requestUrl; - const usingSsl = info.parsedUrl.protocol === 'https:'; - info.httpModule = usingSsl ? https : http; - const defaultPort = usingSsl ? 443 : 80; - info.options = {}; - info.options.host = info.parsedUrl.hostname; - info.options.port = info.parsedUrl.port - ? parseInt(info.parsedUrl.port) - : defaultPort; - info.options.path = - (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); - info.options.method = method; - info.options.headers = this._mergeHeaders(headers); - if (this.userAgent != null) { - info.options.headers['user-agent'] = this.userAgent; - } - info.options.agent = this._getAgent(info.parsedUrl); - // gives handlers an opportunity to participate - if (this.handlers) { - this.handlers.forEach(handler => { - handler.prepareRequest(info.options); - }); - } - return info; + rangeTmp = new Range(this.value, options) + return satisfies(comp.semver, rangeTmp, options) + } + + var sameDirectionIncreasing = + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '>=' || comp.operator === '>') + var sameDirectionDecreasing = + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '<=' || comp.operator === '<') + var sameSemVer = this.semver.version === comp.semver.version + var differentDirectionsInclusive = + (this.operator === '>=' || this.operator === '<=') && + (comp.operator === '>=' || comp.operator === '<=') + var oppositeDirectionsLessThan = + cmp(this.semver, '<', comp.semver, options) && + ((this.operator === '>=' || this.operator === '>') && + (comp.operator === '<=' || comp.operator === '<')) + var oppositeDirectionsGreaterThan = + cmp(this.semver, '>', comp.semver, options) && + ((this.operator === '<=' || this.operator === '<') && + (comp.operator === '>=' || comp.operator === '>')) + + return sameDirectionIncreasing || sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || oppositeDirectionsGreaterThan +} + +exports.Range = Range +function Range (range, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false } - _mergeHeaders(headers) { - const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); - if (this.requestOptions && this.requestOptions.headers) { - return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers)); - } - return lowercaseKeys(headers || {}); + } + + if (range instanceof Range) { + if (range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease) { + return range + } else { + return new Range(range.raw, options) } - _getExistingOrDefaultHeader(additionalHeaders, header, _default) { - const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); - let clientHeader; - if (this.requestOptions && this.requestOptions.headers) { - clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; - } - return additionalHeaders[header] || clientHeader || _default; + } + + if (range instanceof Comparator) { + return new Range(range.value, options) + } + + if (!(this instanceof Range)) { + return new Range(range, options) + } + + this.options = options + this.loose = !!options.loose + this.includePrerelease = !!options.includePrerelease + + // First, split based on boolean or || + this.raw = range + this.set = range.split(/\s*\|\|\s*/).map(function (range) { + return this.parseRange(range.trim()) + }, this).filter(function (c) { + // throw out any that are not relevant for whatever reason + return c.length + }) + + if (!this.set.length) { + throw new TypeError('Invalid SemVer Range: ' + range) + } + + this.format() +} + +Range.prototype.format = function () { + this.range = this.set.map(function (comps) { + return comps.join(' ').trim() + }).join('||').trim() + return this.range +} + +Range.prototype.toString = function () { + return this.range +} + +Range.prototype.parseRange = function (range) { + var loose = this.options.loose + range = range.trim() + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] + range = range.replace(hr, hyphenReplace) + debug('hyphen replace', range) + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) + debug('comparator trim', range, re[t.COMPARATORTRIM]) + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[t.TILDETRIM], tildeTrimReplace) + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[t.CARETTRIM], caretTrimReplace) + + // normalize spaces + range = range.split(/\s+/).join(' ') + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + var set = range.split(' ').map(function (comp) { + return parseComparator(comp, this.options) + }, this).join(' ').split(/\s+/) + if (this.options.loose) { + // in loose mode, throw out any that are not valid comparators + set = set.filter(function (comp) { + return !!comp.match(compRe) + }) + } + set = set.map(function (comp) { + return new Comparator(comp, this.options) + }, this) + + return set +} + +Range.prototype.intersects = function (range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required') + } + + return this.set.some(function (thisComparators) { + return ( + isSatisfiable(thisComparators, options) && + range.set.some(function (rangeComparators) { + return ( + isSatisfiable(rangeComparators, options) && + thisComparators.every(function (thisComparator) { + return rangeComparators.every(function (rangeComparator) { + return thisComparator.intersects(rangeComparator, options) + }) + }) + ) + }) + ) + }) +} + +// take a set of comparators and determine whether there +// exists a version which can satisfy it +function isSatisfiable (comparators, options) { + var result = true + var remainingComparators = comparators.slice() + var testComparator = remainingComparators.pop() + + while (result && remainingComparators.length) { + result = remainingComparators.every(function (otherComparator) { + return testComparator.intersects(otherComparator, options) + }) + + testComparator = remainingComparators.pop() + } + + return result +} + +// Mostly just for testing and legacy API reasons +exports.toComparators = toComparators +function toComparators (range, options) { + return new Range(range, options).set.map(function (comp) { + return comp.map(function (c) { + return c.value + }).join(' ').trim().split(' ') + }) +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +function parseComparator (comp, options) { + debug('comp', comp, options) + comp = replaceCarets(comp, options) + debug('caret', comp) + comp = replaceTildes(comp, options) + debug('tildes', comp) + comp = replaceXRanges(comp, options) + debug('xrange', comp) + comp = replaceStars(comp, options) + debug('stars', comp) + return comp +} + +function isX (id) { + return !id || id.toLowerCase() === 'x' || id === '*' +} + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 +function replaceTildes (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceTilde(comp, options) + }).join(' ') +} + +function replaceTilde (comp, options) { + var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] + return comp.replace(r, function (_, M, m, p, pr) { + debug('tilde', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0 + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else if (pr) { + debug('replaceTilde pr', pr) + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + } else { + // ~1.2.3 == >=1.2.3 <1.3.0 + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' } - _getAgent(parsedUrl) { - let agent; - let proxyUrl = pm.getProxyUrl(parsedUrl); - let useProxy = proxyUrl && proxyUrl.hostname; - if (this._keepAlive && useProxy) { - agent = this._proxyAgent; - } - if (this._keepAlive && !useProxy) { - agent = this._agent; - } - // if agent is already assigned use that agent. - if (!!agent) { - return agent; - } - const usingSsl = parsedUrl.protocol === 'https:'; - let maxSockets = 100; - if (!!this.requestOptions) { - maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; - } - if (useProxy) { - // If using proxy, need tunnel - if (!tunnel) { - tunnel = __webpack_require__(413); - } - const agentOptions = { - maxSockets: maxSockets, - keepAlive: this._keepAlive, - proxy: { - 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: 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; + + debug('tilde return', ret) + return ret + }) +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 +// ^1.2.3 --> >=1.2.3 <2.0.0 +// ^1.2.0 --> >=1.2.0 <2.0.0 +function replaceCarets (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceCaret(comp, options) + }).join(' ') +} + +function replaceCaret (comp, options) { + debug('caret', comp, options) + var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] + return comp.replace(r, function (_, M, m, p, pr) { + debug('caret', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + if (M === '0') { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else { + ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0' + } + } else if (pr) { + debug('replaceCaret pr', pr) + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' } - 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 - }); + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + (+M + 1) + '.0.0' + } + } else { + debug('no pr') + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' } - return agent; - } - _performExponentialBackoff(retryNumber) { - retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); - const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); - return new Promise(resolve => setTimeout(() => resolve(), ms)); + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + (+M + 1) + '.0.0' + } } - static dateTimeDeserializer(key, value) { - if (typeof value === 'string') { - let a = new Date(value); - if (!isNaN(a.valueOf())) { - return a; - } - } - return value; + + debug('caret return', ret) + return ret + }) +} + +function replaceXRanges (comp, options) { + debug('replaceXRanges', comp, options) + return comp.split(/\s+/).map(function (comp) { + return replaceXRange(comp, options) + }).join(' ') +} + +function replaceXRange (comp, options) { + comp = comp.trim() + var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] + return comp.replace(r, function (ret, gtlt, M, m, p, pr) { + debug('xRange', comp, ret, gtlt, M, m, p, pr) + var xM = isX(M) + var xm = xM || isX(m) + var xp = xm || isX(p) + var anyX = xp + + if (gtlt === '=' && anyX) { + gtlt = '' } - async _processResponse(res, options) { - return new Promise(async (resolve, reject) => { - const statusCode = res.message.statusCode; - const response = { - statusCode: statusCode, - result: null, - headers: {} - }; - // not found leads to null obj returned - if (statusCode == HttpCodes.NotFound) { - resolve(response); - } - let obj; - let contents; - // get the result from the body - try { - contents = await res.readBody(); - if (contents && contents.length > 0) { - if (options && options.deserializeDates) { - obj = JSON.parse(contents, HttpClient.dateTimeDeserializer); - } - else { - obj = JSON.parse(contents); - } - response.result = obj; - } - response.headers = res.message.headers; - } - catch (err) { - // Invalid resource (contents not json); leaving result obj null - } - // note that 3xx redirects are handled by the http layer. - if (statusCode > 299) { - let msg; - // if exception/error in body, attempt to get better error - if (obj && obj.message) { - msg = obj.message; - } - else if (contents && contents.length > 0) { - // it may be the case that the exception is in the body message as string - msg = contents; - } - else { - msg = 'Failed request: (' + statusCode + ')'; - } - let err = new HttpClientError(msg, statusCode); - err.result = response.result; - reject(err); - } - else { - resolve(response); - } - }); + + // if we're including prereleases in the match, then we need + // to fix this to -0, the lowest possible prerelease value + pr = options.includePrerelease ? '-0' : '' + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0-0' + } else { + // nothing is forbidden + ret = '*' + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0 + } + p = 0 + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + // >1.2.3 => >= 1.2.4 + gtlt = '>=' + if (xm) { + M = +M + 1 + m = 0 + p = 0 + } else { + m = +m + 1 + p = 0 + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) { + M = +M + 1 + } else { + m = +m + 1 + } + } + + ret = gtlt + M + '.' + m + '.' + p + pr + } else if (xm) { + ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr + } else if (xp) { + ret = '>=' + M + '.' + m + '.0' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + pr } + + debug('xRange return', ret) + + return ret + }) } -exports.HttpClient = HttpClient; +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +function replaceStars (comp, options) { + debug('replaceStars', comp, options) + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[t.STAR], '') +} -/***/ }), +// This function is passed to string.replace(re[t.HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0 +function hyphenReplace ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) { + if (isX(fM)) { + from = '' + } else if (isX(fm)) { + from = '>=' + fM + '.0.0' + } else if (isX(fp)) { + from = '>=' + fM + '.' + fm + '.0' + } else { + from = '>=' + from + } -/***/ 548: -/***/ (function(module) { + if (isX(tM)) { + to = '' + } else if (isX(tm)) { + to = '<' + (+tM + 1) + '.0.0' + } else if (isX(tp)) { + to = '<' + tM + '.' + (+tm + 1) + '.0' + } else if (tpr) { + to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr + } else { + to = '<=' + to + } -const debug = ( - typeof process === 'object' && - process.env && - process.env.NODE_DEBUG && - /\bsemver\b/i.test(process.env.NODE_DEBUG) -) ? (...args) => console.error('SEMVER', ...args) - : () => {} + return (from + ' ' + to).trim() +} -module.exports = debug +// if ANY of the sets match ALL of its comparators, then pass +Range.prototype.test = function (version) { + if (!version) { + return false + } + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } -/***/ }), + for (var i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false +} -/***/ 550: -/***/ (function(module, exports) { +function testSet (set, version, options) { + for (var i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false + } + } -exports = module.exports = SemVer + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (i = 0; i < set.length; i++) { + debug(set[i].semver) + if (set[i].semver === ANY) { + continue + } -var debug -/* istanbul ignore next */ -if (typeof process === 'object' && - process.env && - process.env.NODE_DEBUG && - /\bsemver\b/i.test(process.env.NODE_DEBUG)) { - debug = function () { - var args = Array.prototype.slice.call(arguments, 0) - args.unshift('SEMVER') - console.log.apply(console, args) + if (set[i].semver.prerelease.length > 0) { + var allowed = set[i].semver + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true + } + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false } -} else { - debug = function () {} + + return true } -// Note: this is the semver.org version of the spec that it implements -// Not necessarily the package version of this code. -exports.SEMVER_SPEC_VERSION = '2.0.0' +exports.satisfies = satisfies +function satisfies (version, range, options) { + try { + range = new Range(range, options) + } catch (er) { + return false + } + return range.test(version) +} -var MAX_LENGTH = 256 -var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || - /* istanbul ignore next */ 9007199254740991 +exports.maxSatisfying = maxSatisfying +function maxSatisfying (versions, range, options) { + var max = null + var maxSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { + // compare(max, v, true) + max = v + maxSV = new SemVer(max, options) + } + } + }) + return max +} -// Max safe segment length for coercion. -var MAX_SAFE_COMPONENT_LENGTH = 16 +exports.minSatisfying = minSatisfying +function minSatisfying (versions, range, options) { + var min = null + var minSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { + // compare(min, v, true) + min = v + minSV = new SemVer(min, options) + } + } + }) + return min +} -// The actual regexps go on exports.re -var re = exports.re = [] -var src = exports.src = [] -var t = exports.tokens = {} -var R = 0 +exports.minVersion = minVersion +function minVersion (range, loose) { + range = new Range(range, loose) + + var minver = new SemVer('0.0.0') + if (range.test(minver)) { + return minver + } + + minver = new SemVer('0.0.0-0') + if (range.test(minver)) { + return minver + } + + minver = null + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + comparators.forEach(function (comparator) { + // Clone to avoid manipulating the comparator's semver object. + var compver = new SemVer(comparator.semver.version) + switch (comparator.operator) { + case '>': + if (compver.prerelease.length === 0) { + compver.patch++ + } else { + compver.prerelease.push(0) + } + compver.raw = compver.format() + /* fallthrough */ + case '': + case '>=': + if (!minver || gt(minver, compver)) { + minver = compver + } + break + case '<': + case '<=': + /* Ignore maximum versions */ + break + /* istanbul ignore next */ + default: + throw new Error('Unexpected operation: ' + comparator.operator) + } + }) + } -function tok (n) { - t[n] = R++ -} + if (minver && range.test(minver)) { + return minver + } -// The following Regular Expressions can be used for tokenizing, -// validating, and parsing SemVer version strings. + return null +} -// ## Numeric Identifier -// A single `0`, or a non-zero digit followed by zero or more digits. +exports.validRange = validRange +function validRange (range, options) { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, options).range || '*' + } catch (er) { + return null + } +} -tok('NUMERICIDENTIFIER') -src[t.NUMERICIDENTIFIER] = '0|[1-9]\\d*' -tok('NUMERICIDENTIFIERLOOSE') -src[t.NUMERICIDENTIFIERLOOSE] = '[0-9]+' +// Determine if version is less than all the versions possible in the range +exports.ltr = ltr +function ltr (version, range, options) { + return outside(version, range, '<', options) +} -// ## Non-numeric Identifier -// Zero or more digits, followed by a letter or hyphen, and then zero or -// more letters, digits, or hyphens. +// Determine if version is greater than all the versions possible in the range. +exports.gtr = gtr +function gtr (version, range, options) { + return outside(version, range, '>', options) +} -tok('NONNUMERICIDENTIFIER') -src[t.NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*' +exports.outside = outside +function outside (version, range, hilo, options) { + version = new SemVer(version, options) + range = new Range(range, options) -// ## Main Version -// Three dot-separated numeric identifiers. + var gtfn, ltefn, ltfn, comp, ecomp + switch (hilo) { + case '>': + gtfn = gt + ltefn = lte + ltfn = lt + comp = '>' + ecomp = '>=' + break + case '<': + gtfn = lt + ltefn = gte + ltfn = gt + comp = '<' + ecomp = '<=' + break + default: + throw new TypeError('Must provide a hilo val of "<" or ">"') + } -tok('MAINVERSION') -src[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\.' + - '(' + src[t.NUMERICIDENTIFIER] + ')\\.' + - '(' + src[t.NUMERICIDENTIFIER] + ')' + // If it satisifes the range it is not outside + if (satisfies(version, range, options)) { + return false + } -tok('MAINVERSIONLOOSE') -src[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + - '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + - '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')' + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. -// ## Pre-release Version Identifier -// A numeric identifier, or a non-numeric identifier. + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] -tok('PRERELEASEIDENTIFIER') -src[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] + - '|' + src[t.NONNUMERICIDENTIFIER] + ')' + var high = null + var low = null -tok('PRERELEASEIDENTIFIERLOOSE') -src[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] + - '|' + src[t.NONNUMERICIDENTIFIER] + ')' + comparators.forEach(function (comparator) { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator + low = low || comparator + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator + } + }) -// ## Pre-release Version -// Hyphen, followed by one or more dot-separated pre-release version -// identifiers. + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false + } -tok('PRERELEASE') -src[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] + - '(?:\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))' + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false + } + } + return true +} -tok('PRERELEASELOOSE') -src[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] + - '(?:\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))' +exports.prerelease = prerelease +function prerelease (version, options) { + var parsed = parse(version, options) + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null +} -// ## Build Metadata Identifier -// Any combination of digits, letters, or hyphens. +exports.intersects = intersects +function intersects (r1, r2, options) { + r1 = new Range(r1, options) + r2 = new Range(r2, options) + return r1.intersects(r2) +} -tok('BUILDIDENTIFIER') -src[t.BUILDIDENTIFIER] = '[0-9A-Za-z-]+' +exports.coerce = coerce +function coerce (version, options) { + if (version instanceof SemVer) { + return version + } -// ## Build Metadata -// Plus sign, followed by one or more period-separated build metadata -// identifiers. + if (typeof version === 'number') { + version = String(version) + } -tok('BUILD') -src[t.BUILD] = '(?:\\+(' + src[t.BUILDIDENTIFIER] + - '(?:\\.' + src[t.BUILDIDENTIFIER] + ')*))' + if (typeof version !== 'string') { + return null + } -// ## Full Version String -// A main version, followed optionally by a pre-release version and -// build metadata. + options = options || {} -// Note that the only major, minor, patch, and pre-release sections of -// the version string are capturing groups. The build metadata is not a -// capturing group, because it should not ever be used in version -// comparison. + var match = null + if (!options.rtl) { + match = version.match(re[t.COERCE]) + } else { + // Find the right-most coercible string that does not share + // a terminus with a more left-ward coercible string. + // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' + // + // Walk through the string checking with a /g regexp + // Manually set the index so as to pick up overlapping matches. + // Stop when we get a match that ends at the string end, since no + // coercible string can be more right-ward without the same terminus. + var next + while ((next = re[t.COERCERTL].exec(version)) && + (!match || match.index + match[0].length !== version.length) + ) { + if (!match || + next.index + next[0].length !== match.index + match[0].length) { + match = next + } + re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length + } + // leave it in a clean state + re[t.COERCERTL].lastIndex = -1 + } -tok('FULL') -tok('FULLPLAIN') -src[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] + - src[t.PRERELEASE] + '?' + - src[t.BUILD] + '?' + if (match === null) { + return null + } -src[t.FULL] = '^' + src[t.FULLPLAIN] + '$' + return parse(match[2] + + '.' + (match[3] || '0') + + '.' + (match[4] || '0'), options) +} -// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. -// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty -// common in the npm registry. -tok('LOOSEPLAIN') -src[t.LOOSEPLAIN] = '[v=\\s]*' + src[t.MAINVERSIONLOOSE] + - src[t.PRERELEASELOOSE] + '?' + - src[t.BUILD] + '?' -tok('LOOSE') -src[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$' +/***/ }), -tok('GTLT') -src[t.GTLT] = '((?:<|>)?=?)' +/***/ 7129: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -// Something like "2.*" or "1.2.x". -// Note that "x.x" is a valid xRange identifer, meaning "any version" -// Only the first item is strictly required. -tok('XRANGEIDENTIFIERLOOSE') -src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' -tok('XRANGEIDENTIFIER') -src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\*' +"use strict"; -tok('XRANGEPLAIN') -src[t.XRANGEPLAIN] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' + - '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + - '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + - '(?:' + src[t.PRERELEASE] + ')?' + - src[t.BUILD] + '?' + - ')?)?' -tok('XRANGEPLAINLOOSE') -src[t.XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + - '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + - '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + - '(?:' + src[t.PRERELEASELOOSE] + ')?' + - src[t.BUILD] + '?' + - ')?)?' +// A linked list to keep track of recently-used-ness +const Yallist = __nccwpck_require__(665) -tok('XRANGE') -src[t.XRANGE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAIN] + '$' -tok('XRANGELOOSE') -src[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAINLOOSE] + '$' +const MAX = Symbol('max') +const LENGTH = Symbol('length') +const LENGTH_CALCULATOR = Symbol('lengthCalculator') +const ALLOW_STALE = Symbol('allowStale') +const MAX_AGE = Symbol('maxAge') +const DISPOSE = Symbol('dispose') +const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet') +const LRU_LIST = Symbol('lruList') +const CACHE = Symbol('cache') +const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet') -// Coercion. -// Extract anything that could conceivably be a part of a valid semver -tok('COERCE') -src[t.COERCE] = '(^|[^\\d])' + - '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + - '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + - '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + - '(?:$|[^\\d])' -tok('COERCERTL') -re[t.COERCERTL] = new RegExp(src[t.COERCE], 'g') +const naiveLength = () => 1 -// Tilde ranges. -// Meaning is "reasonably at or greater than" -tok('LONETILDE') -src[t.LONETILDE] = '(?:~>?)' +// lruList is a yallist where the head is the youngest +// item, and the tail is the oldest. the list contains the Hit +// objects as the entries. +// Each Hit object has a reference to its Yallist.Node. This +// never changes. +// +// cache is a Map (or PseudoMap) that matches the keys to +// the Yallist.Node object. +class LRUCache { + constructor (options) { + if (typeof options === 'number') + options = { max: options } -tok('TILDETRIM') -src[t.TILDETRIM] = '(\\s*)' + src[t.LONETILDE] + '\\s+' -re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g') -var tildeTrimReplace = '$1~' + if (!options) + options = {} -tok('TILDE') -src[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$' -tok('TILDELOOSE') -src[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$' + if (options.max && (typeof options.max !== 'number' || options.max < 0)) + throw new TypeError('max must be a non-negative number') + // Kind of weird to have a default max of Infinity, but oh well. + const max = this[MAX] = options.max || Infinity -// Caret ranges. -// Meaning is "at least and backwards compatible with" -tok('LONECARET') -src[t.LONECARET] = '(?:\\^)' + const lc = options.length || naiveLength + this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc + this[ALLOW_STALE] = options.stale || false + if (options.maxAge && typeof options.maxAge !== 'number') + throw new TypeError('maxAge must be a number') + this[MAX_AGE] = options.maxAge || 0 + this[DISPOSE] = options.dispose + this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false + this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false + this.reset() + } -tok('CARETTRIM') -src[t.CARETTRIM] = '(\\s*)' + src[t.LONECARET] + '\\s+' -re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g') -var caretTrimReplace = '$1^' + // resize the cache when the max changes. + set max (mL) { + if (typeof mL !== 'number' || mL < 0) + throw new TypeError('max must be a non-negative number') -tok('CARET') -src[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$' -tok('CARETLOOSE') -src[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$' + this[MAX] = mL || Infinity + trim(this) + } + get max () { + return this[MAX] + } -// A simple gt/lt/eq thing, or just "" to indicate "any version" -tok('COMPARATORLOOSE') -src[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\s*(' + src[t.LOOSEPLAIN] + ')$|^$' -tok('COMPARATOR') -src[t.COMPARATOR] = '^' + src[t.GTLT] + '\\s*(' + src[t.FULLPLAIN] + ')$|^$' + set allowStale (allowStale) { + this[ALLOW_STALE] = !!allowStale + } + get allowStale () { + return this[ALLOW_STALE] + } -// An expression to strip any whitespace between the gtlt and the thing -// it modifies, so that `> 1.2.3` ==> `>1.2.3` -tok('COMPARATORTRIM') -src[t.COMPARATORTRIM] = '(\\s*)' + src[t.GTLT] + - '\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')' + set maxAge (mA) { + if (typeof mA !== 'number') + throw new TypeError('maxAge must be a non-negative number') -// this one has to use the /g flag -re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g') -var comparatorTrimReplace = '$1$2$3' + this[MAX_AGE] = mA + trim(this) + } + get maxAge () { + return this[MAX_AGE] + } -// Something like `1.2.3 - 1.2.4` -// Note that these all use the loose form, because they'll be -// checked against either the strict or loose comparator form -// later. -tok('HYPHENRANGE') -src[t.HYPHENRANGE] = '^\\s*(' + src[t.XRANGEPLAIN] + ')' + - '\\s+-\\s+' + - '(' + src[t.XRANGEPLAIN] + ')' + - '\\s*$' + // resize the cache when the lengthCalculator changes. + set lengthCalculator (lC) { + if (typeof lC !== 'function') + lC = naiveLength -tok('HYPHENRANGELOOSE') -src[t.HYPHENRANGELOOSE] = '^\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' + - '\\s+-\\s+' + - '(' + src[t.XRANGEPLAINLOOSE] + ')' + - '\\s*$' + if (lC !== this[LENGTH_CALCULATOR]) { + this[LENGTH_CALCULATOR] = lC + this[LENGTH] = 0 + this[LRU_LIST].forEach(hit => { + hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key) + this[LENGTH] += hit.length + }) + } + trim(this) + } + get lengthCalculator () { return this[LENGTH_CALCULATOR] } -// Star ranges basically just allow anything at all. -tok('STAR') -src[t.STAR] = '(<|>)?=?\\s*\\*' + get length () { return this[LENGTH] } + get itemCount () { return this[LRU_LIST].length } -// Compile to actual regexp objects. -// All are flag-free, unless they were created above with a flag. -for (var i = 0; i < R; i++) { - debug(i, src[i]) - if (!re[i]) { - re[i] = new RegExp(src[i]) + rforEach (fn, thisp) { + thisp = thisp || this + for (let walker = this[LRU_LIST].tail; walker !== null;) { + const prev = walker.prev + forEachStep(this, fn, walker, thisp) + walker = prev + } } -} -exports.parse = parse -function parse (version, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false + forEach (fn, thisp) { + thisp = thisp || this + for (let walker = this[LRU_LIST].head; walker !== null;) { + const next = walker.next + forEachStep(this, fn, walker, thisp) + walker = next } } - if (version instanceof SemVer) { - return version + keys () { + return this[LRU_LIST].toArray().map(k => k.key) } - if (typeof version !== 'string') { - return null + values () { + return this[LRU_LIST].toArray().map(k => k.value) } - if (version.length > MAX_LENGTH) { - return null + reset () { + if (this[DISPOSE] && + this[LRU_LIST] && + this[LRU_LIST].length) { + this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value)) + } + + this[CACHE] = new Map() // hash of items by key + this[LRU_LIST] = new Yallist() // list of items in order of use recency + this[LENGTH] = 0 // length of items in the list } - var r = options.loose ? re[t.LOOSE] : re[t.FULL] - if (!r.test(version)) { - return null + dump () { + return this[LRU_LIST].map(hit => + isStale(this, hit) ? false : { + k: hit.key, + v: hit.value, + e: hit.now + (hit.maxAge || 0) + }).toArray().filter(h => h) } - try { - return new SemVer(version, options) - } catch (er) { - return null + dumpLru () { + return this[LRU_LIST] } -} -exports.valid = valid -function valid (version, options) { - var v = parse(version, options) - return v ? v.version : null -} + set (key, value, maxAge) { + maxAge = maxAge || this[MAX_AGE] -exports.clean = clean -function clean (version, options) { - var s = parse(version.trim().replace(/^[=v]+/, ''), options) - return s ? s.version : null -} + if (maxAge && typeof maxAge !== 'number') + throw new TypeError('maxAge must be a number') -exports.SemVer = SemVer + const now = maxAge ? Date.now() : 0 + const len = this[LENGTH_CALCULATOR](value, key) -function SemVer (version, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false + if (this[CACHE].has(key)) { + if (len > this[MAX]) { + del(this, this[CACHE].get(key)) + return false + } + + const node = this[CACHE].get(key) + const item = node.value + + // dispose of the old one before overwriting + // split out into 2 ifs for better coverage tracking + if (this[DISPOSE]) { + if (!this[NO_DISPOSE_ON_SET]) + this[DISPOSE](key, item.value) + } + + item.now = now + item.maxAge = maxAge + item.value = value + this[LENGTH] += len - item.length + item.length = len + this.get(key) + trim(this) + return true } - } - if (version instanceof SemVer) { - if (version.loose === options.loose) { - return version - } else { - version = version.version + + const hit = new Entry(key, value, len, now, maxAge) + + // oversized objects fall out of cache automatically. + if (hit.length > this[MAX]) { + if (this[DISPOSE]) + this[DISPOSE](key, value) + + return false } - } else if (typeof version !== 'string') { - throw new TypeError('Invalid Version: ' + version) - } - if (version.length > MAX_LENGTH) { - throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') + this[LENGTH] += hit.length + this[LRU_LIST].unshift(hit) + this[CACHE].set(key, this[LRU_LIST].head) + trim(this) + return true } - if (!(this instanceof SemVer)) { - return new SemVer(version, options) + has (key) { + if (!this[CACHE].has(key)) return false + const hit = this[CACHE].get(key).value + return !isStale(this, hit) } - debug('SemVer', version, options) - this.options = options - this.loose = !!options.loose - - var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) - - if (!m) { - throw new TypeError('Invalid Version: ' + version) + get (key) { + return get(this, key, true) } - this.raw = version + peek (key) { + return get(this, key, false) + } - // these are actually numbers - this.major = +m[1] - this.minor = +m[2] - this.patch = +m[3] + pop () { + const node = this[LRU_LIST].tail + if (!node) + return null - if (this.major > MAX_SAFE_INTEGER || this.major < 0) { - throw new TypeError('Invalid major version') + del(this, node) + return node.value } - if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { - throw new TypeError('Invalid minor version') + del (key) { + del(this, this[CACHE].get(key)) } - if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { - throw new TypeError('Invalid patch version') - } + load (arr) { + // reset the cache + this.reset() - // numberify any prerelease numeric ids - if (!m[4]) { - this.prerelease = [] - } else { - this.prerelease = m[4].split('.').map(function (id) { - if (/^[0-9]+$/.test(id)) { - var num = +id - if (num >= 0 && num < MAX_SAFE_INTEGER) { - return num + const now = Date.now() + // A previous serialized cache has the most recent items first + for (let l = arr.length - 1; l >= 0; l--) { + const hit = arr[l] + const expiresAt = hit.e || 0 + if (expiresAt === 0) + // the item was created without expiration in a non aged cache + this.set(hit.k, hit.v) + else { + const maxAge = expiresAt - now + // dont add already expired items + if (maxAge > 0) { + this.set(hit.k, hit.v, maxAge) } } - return id - }) + } } - this.build = m[5] ? m[5].split('.') : [] - this.format() + prune () { + this[CACHE].forEach((value, key) => get(this, key, false)) + } } -SemVer.prototype.format = function () { - this.version = this.major + '.' + this.minor + '.' + this.patch - if (this.prerelease.length) { - this.version += '-' + this.prerelease.join('.') +const get = (self, key, doUse) => { + const node = self[CACHE].get(key) + if (node) { + const hit = node.value + if (isStale(self, hit)) { + del(self, node) + if (!self[ALLOW_STALE]) + return undefined + } else { + if (doUse) { + if (self[UPDATE_AGE_ON_GET]) + node.value.now = Date.now() + self[LRU_LIST].unshiftNode(node) + } + } + return hit.value } - return this.version } -SemVer.prototype.toString = function () { - return this.version +const isStale = (self, hit) => { + if (!hit || (!hit.maxAge && !self[MAX_AGE])) + return false + + const diff = Date.now() - hit.now + return hit.maxAge ? diff > hit.maxAge + : self[MAX_AGE] && (diff > self[MAX_AGE]) } -SemVer.prototype.compare = function (other) { - debug('SemVer.compare', this.version, this.options, other) - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) +const trim = self => { + if (self[LENGTH] > self[MAX]) { + for (let walker = self[LRU_LIST].tail; + self[LENGTH] > self[MAX] && walker !== null;) { + // We know that we're about to delete this one, and also + // what the next least recently used key will be, so just + // go ahead and set it now. + const prev = walker.prev + del(self, walker) + walker = prev + } } - - return this.compareMain(other) || this.comparePre(other) } -SemVer.prototype.compareMain = function (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } +const del = (self, node) => { + if (node) { + const hit = node.value + if (self[DISPOSE]) + self[DISPOSE](hit.key, hit.value) - return compareIdentifiers(this.major, other.major) || - compareIdentifiers(this.minor, other.minor) || - compareIdentifiers(this.patch, other.patch) + self[LENGTH] -= hit.length + self[CACHE].delete(hit.key) + self[LRU_LIST].removeNode(node) + } } -SemVer.prototype.comparePre = function (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) +class Entry { + constructor (key, value, length, now, maxAge) { + this.key = key + this.value = value + this.length = length + this.now = now + this.maxAge = maxAge || 0 } +} - // NOT having a prerelease is > having one - if (this.prerelease.length && !other.prerelease.length) { - return -1 - } else if (!this.prerelease.length && other.prerelease.length) { - return 1 - } else if (!this.prerelease.length && !other.prerelease.length) { - return 0 +const forEachStep = (self, fn, node, thisp) => { + let hit = node.value + if (isStale(self, hit)) { + del(self, node) + if (!self[ALLOW_STALE]) + hit = undefined } - - var i = 0 - do { - var a = this.prerelease[i] - var b = other.prerelease[i] - debug('prerelease compare', i, a, b) - if (a === undefined && b === undefined) { - return 0 - } else if (b === undefined) { - return 1 - } else if (a === undefined) { - return -1 - } else if (a === b) { - continue - } else { - return compareIdentifiers(a, b) - } - } while (++i) + if (hit) + fn.call(thisp, hit.value, hit.key, self) } -SemVer.prototype.compareBuild = function (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } +module.exports = LRUCache - var i = 0 - do { - var a = this.build[i] - var b = other.build[i] - debug('prerelease compare', i, a, b) - if (a === undefined && b === undefined) { - return 0 - } else if (b === undefined) { - return 1 - } else if (a === undefined) { - return -1 - } else if (a === b) { - continue - } else { - return compareIdentifiers(a, b) - } - } while (++i) -} -// preminor will bump the version up to the next minor release, and immediately -// down to pre-release. premajor and prepatch work the same way. -SemVer.prototype.inc = function (release, identifier) { - switch (release) { - case 'premajor': - this.prerelease.length = 0 - this.patch = 0 - this.minor = 0 - this.major++ - this.inc('pre', identifier) - break - case 'preminor': - this.prerelease.length = 0 - this.patch = 0 - this.minor++ - this.inc('pre', identifier) - break - case 'prepatch': - // If this is already a prerelease, it will bump to the next version - // drop any prereleases that might already exist, since they are not - // relevant at this point. - this.prerelease.length = 0 - this.inc('patch', identifier) - this.inc('pre', identifier) - break - // If the input is a non-prerelease version, this acts the same as - // prepatch. - case 'prerelease': - if (this.prerelease.length === 0) { - this.inc('patch', identifier) - } - this.inc('pre', identifier) - break +/***/ }), + +/***/ 1532: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const ANY = Symbol('SemVer ANY') +// hoisted class for cyclic dependency +class Comparator { + static get ANY () { + return ANY + } + constructor (comp, options) { + options = parseOptions(options) - case 'major': - // If this is a pre-major version, bump up to the same major version. - // Otherwise increment major. - // 1.0.0-5 bumps to 1.0.0 - // 1.1.0 bumps to 2.0.0 - if (this.minor !== 0 || - this.patch !== 0 || - this.prerelease.length === 0) { - this.major++ - } - this.minor = 0 - this.patch = 0 - this.prerelease = [] - break - case 'minor': - // If this is a pre-minor version, bump up to the same minor version. - // Otherwise increment minor. - // 1.2.0-5 bumps to 1.2.0 - // 1.2.1 bumps to 1.3.0 - if (this.patch !== 0 || this.prerelease.length === 0) { - this.minor++ - } - this.patch = 0 - this.prerelease = [] - break - case 'patch': - // If this is not a pre-release version, it will increment the patch. - // If it is a pre-release it will bump up to the same patch version. - // 1.2.0-5 patches to 1.2.0 - // 1.2.0 patches to 1.2.1 - if (this.prerelease.length === 0) { - this.patch++ - } - this.prerelease = [] - break - // This probably shouldn't be used publicly. - // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. - case 'pre': - if (this.prerelease.length === 0) { - this.prerelease = [0] + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp } else { - var i = this.prerelease.length - while (--i >= 0) { - if (typeof this.prerelease[i] === 'number') { - this.prerelease[i]++ - i = -2 - } - } - if (i === -1) { - // didn't increment anything - this.prerelease.push(0) - } - } - if (identifier) { - // 1.2.0-beta.1 bumps to 1.2.0-beta.2, - // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 - if (this.prerelease[0] === identifier) { - if (isNaN(this.prerelease[1])) { - this.prerelease = [identifier, 0] - } - } else { - this.prerelease = [identifier, 0] - } + comp = comp.value } - break + } - default: - throw new Error('invalid increment argument: ' + release) + debug('comparator', comp, options) + this.options = options + this.loose = !!options.loose + this.parse(comp) + + if (this.semver === ANY) { + this.value = '' + } else { + this.value = this.operator + this.semver.version + } + + debug('comp', this) } - this.format() - this.raw = this.version - return this -} -exports.inc = inc -function inc (version, release, loose, identifier) { - if (typeof (loose) === 'string') { - identifier = loose - loose = undefined + parse (comp) { + const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + const m = comp.match(r) + + if (!m) { + throw new TypeError(`Invalid comparator: ${comp}`) + } + + this.operator = m[1] !== undefined ? m[1] : '' + if (this.operator === '=') { + this.operator = '' + } + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY + } else { + this.semver = new SemVer(m[2], this.options.loose) + } } - try { - return new SemVer(version, loose).inc(release, identifier).version - } catch (er) { - return null + toString () { + return this.value } -} -exports.diff = diff -function diff (version1, version2) { - if (eq(version1, version2)) { - return null - } else { - var v1 = parse(version1) - var v2 = parse(version2) - var prefix = '' - if (v1.prerelease.length || v2.prerelease.length) { - prefix = 'pre' - var defaultResult = 'prerelease' + test (version) { + debug('Comparator.test', version, this.options.loose) + + if (this.semver === ANY || version === ANY) { + return true } - for (var key in v1) { - if (key === 'major' || key === 'minor' || key === 'patch') { - if (v1[key] !== v2[key]) { - return prefix + key - } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false } } - return defaultResult // may be undefined + + return cmp(version, this.operator, this.semver, this.options) } -} -exports.compareIdentifiers = compareIdentifiers + intersects (comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required') + } -var numeric = /^[0-9]+$/ -function compareIdentifiers (a, b) { - var anum = numeric.test(a) - var bnum = numeric.test(b) + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } - if (anum && bnum) { - a = +a - b = +b - } + if (this.operator === '') { + if (this.value === '') { + return true + } + return new Range(comp.value, options).test(this.value) + } else if (comp.operator === '') { + if (comp.value === '') { + return true + } + return new Range(this.value, options).test(comp.semver) + } - return a === b ? 0 - : (anum && !bnum) ? -1 - : (bnum && !anum) ? 1 - : a < b ? -1 - : 1 -} + const sameDirectionIncreasing = + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '>=' || comp.operator === '>') + const sameDirectionDecreasing = + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '<=' || comp.operator === '<') + const sameSemVer = this.semver.version === comp.semver.version + const differentDirectionsInclusive = + (this.operator === '>=' || this.operator === '<=') && + (comp.operator === '>=' || comp.operator === '<=') + const oppositeDirectionsLessThan = + cmp(this.semver, '<', comp.semver, options) && + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '<=' || comp.operator === '<') + const oppositeDirectionsGreaterThan = + cmp(this.semver, '>', comp.semver, options) && + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '>=' || comp.operator === '>') -exports.rcompareIdentifiers = rcompareIdentifiers -function rcompareIdentifiers (a, b) { - return compareIdentifiers(b, a) + return ( + sameDirectionIncreasing || + sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || + oppositeDirectionsGreaterThan + ) + } } -exports.major = major -function major (a, loose) { - return new SemVer(a, loose).major -} +module.exports = Comparator -exports.minor = minor -function minor (a, loose) { - return new SemVer(a, loose).minor -} +const parseOptions = __nccwpck_require__(785) +const {re, t} = __nccwpck_require__(9523) +const cmp = __nccwpck_require__(5098) +const debug = __nccwpck_require__(427) +const SemVer = __nccwpck_require__(8088) +const Range = __nccwpck_require__(9828) -exports.patch = patch -function patch (a, loose) { - return new SemVer(a, loose).patch -} -exports.compare = compare -function compare (a, b, loose) { - return new SemVer(a, loose).compare(new SemVer(b, loose)) -} +/***/ }), -exports.compareLoose = compareLoose -function compareLoose (a, b) { - return compare(a, b, true) -} +/***/ 9828: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -exports.compareBuild = compareBuild -function compareBuild (a, b, loose) { - var versionA = new SemVer(a, loose) - var versionB = new SemVer(b, loose) - return versionA.compare(versionB) || versionA.compareBuild(versionB) -} +// hoisted class for cyclic dependency +class Range { + constructor (range, options) { + options = parseOptions(options) + + if (range instanceof Range) { + if ( + range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease + ) { + return range + } else { + return new Range(range.raw, options) + } + } -exports.rcompare = rcompare -function rcompare (a, b, loose) { - return compare(b, a, loose) -} + if (range instanceof Comparator) { + // just put it in the set and return + this.raw = range.value + this.set = [[range]] + this.format() + return this + } -exports.sort = sort -function sort (list, loose) { - return list.sort(function (a, b) { - return exports.compareBuild(a, b, loose) - }) -} + this.options = options + this.loose = !!options.loose + this.includePrerelease = !!options.includePrerelease -exports.rsort = rsort -function rsort (list, loose) { - return list.sort(function (a, b) { - return exports.compareBuild(b, a, loose) - }) -} + // First, split based on boolean or || + this.raw = range + this.set = range + .split(/\s*\|\|\s*/) + // map the range to a 2d array of comparators + .map(range => this.parseRange(range.trim())) + // throw out any comparator lists that are empty + // this generally means that it was not a valid range, which is allowed + // in loose mode, but will still throw if the WHOLE range is invalid. + .filter(c => c.length) -exports.gt = gt -function gt (a, b, loose) { - return compare(a, b, loose) > 0 -} + if (!this.set.length) { + throw new TypeError(`Invalid SemVer Range: ${range}`) + } -exports.lt = lt -function lt (a, b, loose) { - return compare(a, b, loose) < 0 -} + // if we have any that are not the null set, throw out null sets. + if (this.set.length > 1) { + // keep the first one, in case they're all null sets + const first = this.set[0] + this.set = this.set.filter(c => !isNullSet(c[0])) + if (this.set.length === 0) + this.set = [first] + else if (this.set.length > 1) { + // if we have any that are *, then the range is just * + for (const c of this.set) { + if (c.length === 1 && isAny(c[0])) { + this.set = [c] + break + } + } + } + } -exports.eq = eq -function eq (a, b, loose) { - return compare(a, b, loose) === 0 -} + this.format() + } -exports.neq = neq -function neq (a, b, loose) { - return compare(a, b, loose) !== 0 -} + format () { + this.range = this.set + .map((comps) => { + return comps.join(' ').trim() + }) + .join('||') + .trim() + return this.range + } -exports.gte = gte -function gte (a, b, loose) { - return compare(a, b, loose) >= 0 -} + toString () { + return this.range + } -exports.lte = lte -function lte (a, b, loose) { - return compare(a, b, loose) <= 0 -} + parseRange (range) { + range = range.trim() -exports.cmp = cmp -function cmp (a, op, b, loose) { - switch (op) { - case '===': - if (typeof a === 'object') - a = a.version - if (typeof b === 'object') - b = b.version - return a === b + // memoize range parsing for performance. + // this is a very hot path, and fully deterministic. + const memoOpts = Object.keys(this.options).join(',') + const memoKey = `parseRange:${memoOpts}:${range}` + const cached = cache.get(memoKey) + if (cached) + return cached - case '!==': - if (typeof a === 'object') - a = a.version - if (typeof b === 'object') - b = b.version - return a !== b + const loose = this.options.loose + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] + range = range.replace(hr, hyphenReplace(this.options.includePrerelease)) + debug('hyphen replace', range) + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) + debug('comparator trim', range, re[t.COMPARATORTRIM]) - case '': - case '=': - case '==': - return eq(a, b, loose) + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[t.TILDETRIM], tildeTrimReplace) - case '!=': - return neq(a, b, loose) + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[t.CARETTRIM], caretTrimReplace) - case '>': - return gt(a, b, loose) + // normalize spaces + range = range.split(/\s+/).join(' ') - case '>=': - return gte(a, b, loose) + // At this point, the range is completely trimmed and + // ready to be split into comparators. - case '<': - return lt(a, b, loose) + const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + const rangeList = range + .split(' ') + .map(comp => parseComparator(comp, this.options)) + .join(' ') + .split(/\s+/) + // >=0.0.0 is equivalent to * + .map(comp => replaceGTE0(comp, this.options)) + // in loose mode, throw out any that are not valid comparators + .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true) + .map(comp => new Comparator(comp, this.options)) - case '<=': - return lte(a, b, loose) + // if any comparators are the null set, then replace with JUST null set + // if more than one comparator, remove any * comparators + // also, don't include the same comparator more than once + const l = rangeList.length + const rangeMap = new Map() + for (const comp of rangeList) { + if (isNullSet(comp)) + return [comp] + rangeMap.set(comp.value, comp) + } + if (rangeMap.size > 1 && rangeMap.has('')) + rangeMap.delete('') - default: - throw new TypeError('Invalid operator: ' + op) + const result = [...rangeMap.values()] + cache.set(memoKey, result) + return result } -} -exports.Comparator = Comparator -function Comparator (comp, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false + intersects (range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required') } + + return this.set.some((thisComparators) => { + return ( + isSatisfiable(thisComparators, options) && + range.set.some((rangeComparators) => { + return ( + isSatisfiable(rangeComparators, options) && + thisComparators.every((thisComparator) => { + return rangeComparators.every((rangeComparator) => { + return thisComparator.intersects(rangeComparator, options) + }) + }) + ) + }) + ) + }) } - if (comp instanceof Comparator) { - if (comp.loose === !!options.loose) { - return comp - } else { - comp = comp.value + // if ANY of the sets match ALL of its comparators, then pass + test (version) { + if (!version) { + return false } - } - if (!(this instanceof Comparator)) { - return new Comparator(comp, options) + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + for (let i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false } +} +module.exports = Range - debug('comparator', comp, options) - this.options = options - this.loose = !!options.loose - this.parse(comp) +const LRU = __nccwpck_require__(7129) +const cache = new LRU({ max: 1000 }) - if (this.semver === ANY) { - this.value = '' - } else { - this.value = this.operator + this.semver.version - } +const parseOptions = __nccwpck_require__(785) +const Comparator = __nccwpck_require__(1532) +const debug = __nccwpck_require__(427) +const SemVer = __nccwpck_require__(8088) +const { + re, + t, + comparatorTrimReplace, + tildeTrimReplace, + caretTrimReplace +} = __nccwpck_require__(9523) - debug('comp', this) -} +const isNullSet = c => c.value === '<0.0.0-0' +const isAny = c => c.value === '' -var ANY = {} -Comparator.prototype.parse = function (comp) { - var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] - var m = comp.match(r) +// take a set of comparators and determine whether there +// exists a version which can satisfy it +const isSatisfiable = (comparators, options) => { + let result = true + const remainingComparators = comparators.slice() + let testComparator = remainingComparators.pop() - if (!m) { - throw new TypeError('Invalid comparator: ' + comp) - } + while (result && remainingComparators.length) { + result = remainingComparators.every((otherComparator) => { + return testComparator.intersects(otherComparator, options) + }) - this.operator = m[1] !== undefined ? m[1] : '' - if (this.operator === '=') { - this.operator = '' + testComparator = remainingComparators.pop() } - // if it literally is just '>' or '' then allow anything. - if (!m[2]) { - this.semver = ANY - } else { - this.semver = new SemVer(m[2], this.options.loose) - } + return result } -Comparator.prototype.toString = function () { - return this.value +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +const parseComparator = (comp, options) => { + debug('comp', comp, options) + comp = replaceCarets(comp, options) + debug('caret', comp) + comp = replaceTildes(comp, options) + debug('tildes', comp) + comp = replaceXRanges(comp, options) + debug('xrange', comp) + comp = replaceStars(comp, options) + debug('stars', comp) + return comp } -Comparator.prototype.test = function (version) { - debug('Comparator.test', version, this.options.loose) +const isX = id => !id || id.toLowerCase() === 'x' || id === '*' - if (this.semver === ANY || version === ANY) { - return true - } +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0 +const replaceTildes = (comp, options) => + comp.trim().split(/\s+/).map((comp) => { + return replaceTilde(comp, options) + }).join(' ') - if (typeof version === 'string') { - try { - version = new SemVer(version, this.options) - } catch (er) { - return false +const replaceTilde = (comp, options) => { + const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] + return comp.replace(r, (_, M, m, p, pr) => { + debug('tilde', comp, _, M, m, p, pr) + let ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = `>=${M}.0.0 <${+M + 1}.0.0-0` + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0-0 + ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0` + } else if (pr) { + debug('replaceTilde pr', pr) + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${+m + 1}.0-0` + } else { + // ~1.2.3 == >=1.2.3 <1.3.0-0 + ret = `>=${M}.${m}.${p + } <${M}.${+m + 1}.0-0` } - } - return cmp(version, this.operator, this.semver, this.options) + debug('tilde return', ret) + return ret + }) } -Comparator.prototype.intersects = function (comp, options) { - if (!(comp instanceof Comparator)) { - throw new TypeError('a Comparator is required') - } - - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0 +// ^1.2.3 --> >=1.2.3 <2.0.0-0 +// ^1.2.0 --> >=1.2.0 <2.0.0-0 +const replaceCarets = (comp, options) => + comp.trim().split(/\s+/).map((comp) => { + return replaceCaret(comp, options) + }).join(' ') - var rangeTmp +const replaceCaret = (comp, options) => { + debug('caret', comp, options) + const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] + const z = options.includePrerelease ? '-0' : '' + return comp.replace(r, (_, M, m, p, pr) => { + debug('caret', comp, _, M, m, p, pr) + let ret - if (this.operator === '') { - if (this.value === '') { - return true - } - rangeTmp = new Range(comp.value, options) - return satisfies(this.value, rangeTmp, options) - } else if (comp.operator === '') { - if (comp.value === '') { - return true + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0` + } else if (isX(p)) { + if (M === '0') { + ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0` + } else { + ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0` + } + } else if (pr) { + debug('replaceCaret pr', pr) + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${m}.${+p + 1}-0` + } else { + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${+m + 1}.0-0` + } + } else { + ret = `>=${M}.${m}.${p}-${pr + } <${+M + 1}.0.0-0` + } + } else { + debug('no pr') + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p + }${z} <${M}.${m}.${+p + 1}-0` + } else { + ret = `>=${M}.${m}.${p + }${z} <${M}.${+m + 1}.0-0` + } + } else { + ret = `>=${M}.${m}.${p + } <${+M + 1}.0.0-0` + } } - rangeTmp = new Range(this.value, options) - return satisfies(comp.semver, rangeTmp, options) - } - var sameDirectionIncreasing = - (this.operator === '>=' || this.operator === '>') && - (comp.operator === '>=' || comp.operator === '>') - var sameDirectionDecreasing = - (this.operator === '<=' || this.operator === '<') && - (comp.operator === '<=' || comp.operator === '<') - var sameSemVer = this.semver.version === comp.semver.version - var differentDirectionsInclusive = - (this.operator === '>=' || this.operator === '<=') && - (comp.operator === '>=' || comp.operator === '<=') - var oppositeDirectionsLessThan = - cmp(this.semver, '<', comp.semver, options) && - ((this.operator === '>=' || this.operator === '>') && - (comp.operator === '<=' || comp.operator === '<')) - var oppositeDirectionsGreaterThan = - cmp(this.semver, '>', comp.semver, options) && - ((this.operator === '<=' || this.operator === '<') && - (comp.operator === '>=' || comp.operator === '>')) + debug('caret return', ret) + return ret + }) +} - return sameDirectionIncreasing || sameDirectionDecreasing || - (sameSemVer && differentDirectionsInclusive) || - oppositeDirectionsLessThan || oppositeDirectionsGreaterThan +const replaceXRanges = (comp, options) => { + debug('replaceXRanges', comp, options) + return comp.split(/\s+/).map((comp) => { + return replaceXRange(comp, options) + }).join(' ') } -exports.Range = Range -function Range (range, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } +const replaceXRange = (comp, options) => { + comp = comp.trim() + const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] + return comp.replace(r, (ret, gtlt, M, m, p, pr) => { + debug('xRange', comp, ret, gtlt, M, m, p, pr) + const xM = isX(M) + const xm = xM || isX(m) + const xp = xm || isX(p) + const anyX = xp - if (range instanceof Range) { - if (range.loose === !!options.loose && - range.includePrerelease === !!options.includePrerelease) { - return range - } else { - return new Range(range.raw, options) + if (gtlt === '=' && anyX) { + gtlt = '' } - } - if (range instanceof Comparator) { - return new Range(range.value, options) - } + // if we're including prereleases in the match, then we need + // to fix this to -0, the lowest possible prerelease value + pr = options.includePrerelease ? '-0' : '' + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0-0' + } else { + // nothing is forbidden + ret = '*' + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0 + } + p = 0 + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + gtlt = '>=' + if (xm) { + M = +M + 1 + m = 0 + p = 0 + } else { + m = +m + 1 + p = 0 + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) { + M = +M + 1 + } else { + m = +m + 1 + } + } + + if (gtlt === '<') + pr = '-0' - if (!(this instanceof Range)) { - return new Range(range, options) - } + ret = `${gtlt + M}.${m}.${p}${pr}` + } else if (xm) { + ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0` + } else if (xp) { + ret = `>=${M}.${m}.0${pr + } <${M}.${+m + 1}.0-0` + } - this.options = options - this.loose = !!options.loose - this.includePrerelease = !!options.includePrerelease + debug('xRange return', ret) - // First, split based on boolean or || - this.raw = range - this.set = range.split(/\s*\|\|\s*/).map(function (range) { - return this.parseRange(range.trim()) - }, this).filter(function (c) { - // throw out any that are not relevant for whatever reason - return c.length + return ret }) - - if (!this.set.length) { - throw new TypeError('Invalid SemVer Range: ' + range) - } - - this.format() } -Range.prototype.format = function () { - this.range = this.set.map(function (comps) { - return comps.join(' ').trim() - }).join('||').trim() - return this.range +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +const replaceStars = (comp, options) => { + debug('replaceStars', comp, options) + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[t.STAR], '') } -Range.prototype.toString = function () { - return this.range +const replaceGTE0 = (comp, options) => { + debug('replaceGTE0', comp, options) + return comp.trim() + .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '') } -Range.prototype.parseRange = function (range) { - var loose = this.options.loose - range = range.trim() - // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` - var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] - range = range.replace(hr, hyphenReplace) - debug('hyphen replace', range) - // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` - range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) - debug('comparator trim', range, re[t.COMPARATORTRIM]) - - // `~ 1.2.3` => `~1.2.3` - range = range.replace(re[t.TILDETRIM], tildeTrimReplace) - - // `^ 1.2.3` => `^1.2.3` - range = range.replace(re[t.CARETTRIM], caretTrimReplace) +// This function is passed to string.replace(re[t.HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0-0 +const hyphenReplace = incPr => ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) => { + if (isX(fM)) { + from = '' + } else if (isX(fm)) { + from = `>=${fM}.0.0${incPr ? '-0' : ''}` + } else if (isX(fp)) { + from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}` + } else if (fpr) { + from = `>=${from}` + } else { + from = `>=${from}${incPr ? '-0' : ''}` + } - // normalize spaces - range = range.split(/\s+/).join(' ') + if (isX(tM)) { + to = '' + } else if (isX(tm)) { + to = `<${+tM + 1}.0.0-0` + } else if (isX(tp)) { + to = `<${tM}.${+tm + 1}.0-0` + } else if (tpr) { + to = `<=${tM}.${tm}.${tp}-${tpr}` + } else if (incPr) { + to = `<${tM}.${tm}.${+tp + 1}-0` + } else { + to = `<=${to}` + } - // At this point, the range is completely trimmed and - // ready to be split into comparators. + return (`${from} ${to}`).trim() +} - var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] - var set = range.split(' ').map(function (comp) { - return parseComparator(comp, this.options) - }, this).join(' ').split(/\s+/) - if (this.options.loose) { - // in loose mode, throw out any that are not valid comparators - set = set.filter(function (comp) { - return !!comp.match(compRe) - }) +const testSet = (set, version, options) => { + for (let i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false + } } - set = set.map(function (comp) { - return new Comparator(comp, this.options) - }, this) - return set -} + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (let i = 0; i < set.length; i++) { + debug(set[i].semver) + if (set[i].semver === Comparator.ANY) { + continue + } -Range.prototype.intersects = function (range, options) { - if (!(range instanceof Range)) { - throw new TypeError('a Range is required') + if (set[i].semver.prerelease.length > 0) { + const allowed = set[i].semver + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true + } + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false } - return this.set.some(function (thisComparators) { - return ( - isSatisfiable(thisComparators, options) && - range.set.some(function (rangeComparators) { - return ( - isSatisfiable(rangeComparators, options) && - thisComparators.every(function (thisComparator) { - return rangeComparators.every(function (rangeComparator) { - return thisComparator.intersects(rangeComparator, options) - }) - }) - ) - }) - ) - }) + return true } -// take a set of comparators and determine whether there -// exists a version which can satisfy it -function isSatisfiable (comparators, options) { - var result = true - var remainingComparators = comparators.slice() - var testComparator = remainingComparators.pop() - while (result && remainingComparators.length) { - result = remainingComparators.every(function (otherComparator) { - return testComparator.intersects(otherComparator, options) - }) +/***/ }), - testComparator = remainingComparators.pop() - } +/***/ 8088: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - return result -} +const debug = __nccwpck_require__(427) +const { MAX_LENGTH, MAX_SAFE_INTEGER } = __nccwpck_require__(2293) +const { re, t } = __nccwpck_require__(9523) -// Mostly just for testing and legacy API reasons -exports.toComparators = toComparators -function toComparators (range, options) { - return new Range(range, options).set.map(function (comp) { - return comp.map(function (c) { - return c.value - }).join(' ').trim().split(' ') - }) -} +const parseOptions = __nccwpck_require__(785) +const { compareIdentifiers } = __nccwpck_require__(2463) +class SemVer { + constructor (version, options) { + options = parseOptions(options) -// comprised of xranges, tildes, stars, and gtlt's at this point. -// already replaced the hyphen ranges -// turn into a set of JUST comparators. -function parseComparator (comp, options) { - debug('comp', comp, options) - comp = replaceCarets(comp, options) - debug('caret', comp) - comp = replaceTildes(comp, options) - debug('tildes', comp) - comp = replaceXRanges(comp, options) - debug('xrange', comp) - comp = replaceStars(comp, options) - debug('stars', comp) - return comp -} + if (version instanceof SemVer) { + if (version.loose === !!options.loose && + version.includePrerelease === !!options.includePrerelease) { + return version + } else { + version = version.version + } + } else if (typeof version !== 'string') { + throw new TypeError(`Invalid Version: ${version}`) + } -function isX (id) { - return !id || id.toLowerCase() === 'x' || id === '*' -} + if (version.length > MAX_LENGTH) { + throw new TypeError( + `version is longer than ${MAX_LENGTH} characters` + ) + } -// ~, ~> --> * (any, kinda silly) -// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 -// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 -// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 -// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 -// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 -function replaceTildes (comp, options) { - return comp.trim().split(/\s+/).map(function (comp) { - return replaceTilde(comp, options) - }).join(' ') -} + debug('SemVer', version, options) + this.options = options + this.loose = !!options.loose + // this isn't actually relevant for versions, but keep it so that we + // don't run into trouble passing this.options around. + this.includePrerelease = !!options.includePrerelease -function replaceTilde (comp, options) { - var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] - return comp.replace(r, function (_, M, m, p, pr) { - debug('tilde', comp, _, M, m, p, pr) - var ret + const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) - if (isX(M)) { - ret = '' - } else if (isX(m)) { - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' - } else if (isX(p)) { - // ~1.2 == >=1.2.0 <1.3.0 - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' - } else if (pr) { - debug('replaceTilde pr', pr) - ret = '>=' + M + '.' + m + '.' + p + '-' + pr + - ' <' + M + '.' + (+m + 1) + '.0' - } else { - // ~1.2.3 == >=1.2.3 <1.3.0 - ret = '>=' + M + '.' + m + '.' + p + - ' <' + M + '.' + (+m + 1) + '.0' + if (!m) { + throw new TypeError(`Invalid Version: ${version}`) } - debug('tilde return', ret) - return ret - }) -} + this.raw = version -// ^ --> * (any, kinda silly) -// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 -// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 -// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 -// ^1.2.3 --> >=1.2.3 <2.0.0 -// ^1.2.0 --> >=1.2.0 <2.0.0 -function replaceCarets (comp, options) { - return comp.trim().split(/\s+/).map(function (comp) { - return replaceCaret(comp, options) - }).join(' ') -} + // these are actually numbers + this.major = +m[1] + this.minor = +m[2] + this.patch = +m[3] -function replaceCaret (comp, options) { - debug('caret', comp, options) - var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] - return comp.replace(r, function (_, M, m, p, pr) { - debug('caret', comp, _, M, m, p, pr) - var ret + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') + } - if (isX(M)) { - ret = '' - } else if (isX(m)) { - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' - } else if (isX(p)) { - if (M === '0') { - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' - } else { - ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0' - } - } else if (pr) { - debug('replaceCaret pr', pr) - if (M === '0') { - if (m === '0') { - ret = '>=' + M + '.' + m + '.' + p + '-' + pr + - ' <' + M + '.' + m + '.' + (+p + 1) - } else { - ret = '>=' + M + '.' + m + '.' + p + '-' + pr + - ' <' + M + '.' + (+m + 1) + '.0' - } - } else { - ret = '>=' + M + '.' + m + '.' + p + '-' + pr + - ' <' + (+M + 1) + '.0.0' - } + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = [] } else { - debug('no pr') - if (M === '0') { - if (m === '0') { - ret = '>=' + M + '.' + m + '.' + p + - ' <' + M + '.' + m + '.' + (+p + 1) - } else { - ret = '>=' + M + '.' + m + '.' + p + - ' <' + M + '.' + (+m + 1) + '.0' + this.prerelease = m[4].split('.').map((id) => { + if (/^[0-9]+$/.test(id)) { + const num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } } - } else { - ret = '>=' + M + '.' + m + '.' + p + - ' <' + (+M + 1) + '.0.0' + return id + }) + } + + this.build = m[5] ? m[5].split('.') : [] + this.format() + } + + format () { + this.version = `${this.major}.${this.minor}.${this.patch}` + if (this.prerelease.length) { + this.version += `-${this.prerelease.join('.')}` + } + return this.version + } + + toString () { + return this.version + } + + compare (other) { + debug('SemVer.compare', this.version, this.options, other) + if (!(other instanceof SemVer)) { + if (typeof other === 'string' && other === this.version) { + return 0 } + other = new SemVer(other, this.options) } - debug('caret return', ret) - return ret - }) -} + if (other.version === this.version) { + return 0 + } -function replaceXRanges (comp, options) { - debug('replaceXRanges', comp, options) - return comp.split(/\s+/).map(function (comp) { - return replaceXRange(comp, options) - }).join(' ') -} + return this.compareMain(other) || this.comparePre(other) + } -function replaceXRange (comp, options) { - comp = comp.trim() - var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] - return comp.replace(r, function (ret, gtlt, M, m, p, pr) { - debug('xRange', comp, ret, gtlt, M, m, p, pr) - var xM = isX(M) - var xm = xM || isX(m) - var xp = xm || isX(p) - var anyX = xp + compareMain (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } - if (gtlt === '=' && anyX) { - gtlt = '' + return ( + compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) + ) + } + + comparePre (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) } - // if we're including prereleases in the match, then we need - // to fix this to -0, the lowest possible prerelease value - pr = options.includePrerelease ? '-0' : '' + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } - if (xM) { - if (gtlt === '>' || gtlt === '<') { - // nothing is allowed - ret = '<0.0.0-0' + let i = 0 + do { + const a = this.prerelease[i] + const b = other.prerelease[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue } else { - // nothing is forbidden - ret = '*' + return compareIdentifiers(a, b) } - } else if (gtlt && anyX) { - // we know patch is an x, because we have any x at all. - // replace X with 0 - if (xm) { - m = 0 + } while (++i) + } + + compareBuild (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + let i = 0 + do { + const a = this.build[i] + const b = other.build[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) } - p = 0 + } while (++i) + } + + // preminor will bump the version up to the next minor release, and immediately + // down to pre-release. premajor and prepatch work the same way. + inc (release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0 + this.patch = 0 + this.minor = 0 + this.major++ + this.inc('pre', identifier) + break + case 'preminor': + this.prerelease.length = 0 + this.patch = 0 + this.minor++ + this.inc('pre', identifier) + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch', identifier) + this.inc('pre', identifier) + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier) + } + this.inc('pre', identifier) + break - if (gtlt === '>') { - // >1 => >=2.0.0 - // >1.2 => >=1.3.0 - // >1.2.3 => >= 1.2.4 - gtlt = '>=' - if (xm) { - M = +M + 1 - m = 0 - p = 0 - } else { - m = +m + 1 - p = 0 + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if ( + this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0 + ) { + this.major++ } - } else if (gtlt === '<=') { - // <=0.7.x is actually <0.8.0, since any 0.7.x should - // pass. Similarly, <=7.x is actually <8.0.0, etc. - gtlt = '<' - if (xm) { - M = +M + 1 + this.minor = 0 + this.patch = 0 + this.prerelease = [] + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++ + } + this.patch = 0 + this.prerelease = [] + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++ + } + this.prerelease = [] + break + // This probably shouldn't be used publicly. + // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) { + this.prerelease = [0] } else { - m = +m + 1 + let i = this.prerelease.length + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++ + i = -2 + } + } + if (i === -1) { + // didn't increment anything + this.prerelease.push(0) + } } - } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) { + this.prerelease = [identifier, 0] + } + } else { + this.prerelease = [identifier, 0] + } + } + break - ret = gtlt + M + '.' + m + '.' + p + pr - } else if (xm) { - ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr - } else if (xp) { - ret = '>=' + M + '.' + m + '.0' + pr + - ' <' + M + '.' + (+m + 1) + '.0' + pr + default: + throw new Error(`invalid increment argument: ${release}`) } - - debug('xRange return', ret) - - return ret - }) + this.format() + this.raw = this.version + return this + } } -// Because * is AND-ed with everything else in the comparator, -// and '' means "any version", just remove the *s entirely. -function replaceStars (comp, options) { - debug('replaceStars', comp, options) - // Looseness is ignored here. star is always as loose as it gets! - return comp.trim().replace(re[t.STAR], '') -} +module.exports = SemVer -// This function is passed to string.replace(re[t.HYPHENRANGE]) -// M, m, patch, prerelease, build -// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 -// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do -// 1.2 - 3.4 => >=1.2.0 <3.5.0 -function hyphenReplace ($0, - from, fM, fm, fp, fpr, fb, - to, tM, tm, tp, tpr, tb) { - if (isX(fM)) { - from = '' - } else if (isX(fm)) { - from = '>=' + fM + '.0.0' - } else if (isX(fp)) { - from = '>=' + fM + '.' + fm + '.0' - } else { - from = '>=' + from - } - if (isX(tM)) { - to = '' - } else if (isX(tm)) { - to = '<' + (+tM + 1) + '.0.0' - } else if (isX(tp)) { - to = '<' + tM + '.' + (+tm + 1) + '.0' - } else if (tpr) { - to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr - } else { - to = '<=' + to - } +/***/ }), - return (from + ' ' + to).trim() -} +/***/ 8848: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -// if ANY of the sets match ALL of its comparators, then pass -Range.prototype.test = function (version) { - if (!version) { - return false - } +const parse = __nccwpck_require__(5925) +const clean = (version, options) => { + const s = parse(version.trim().replace(/^[=v]+/, ''), options) + return s ? s.version : null +} +module.exports = clean - if (typeof version === 'string') { - try { - version = new SemVer(version, this.options) - } catch (er) { - return false - } - } - for (var i = 0; i < this.set.length; i++) { - if (testSet(this.set[i], version, this.options)) { - return true - } - } - return false -} +/***/ }), -function testSet (set, version, options) { - for (var i = 0; i < set.length; i++) { - if (!set[i].test(version)) { - return false - } - } +/***/ 5098: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - if (version.prerelease.length && !options.includePrerelease) { - // Find the set of versions that are allowed to have prereleases - // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 - // That should allow `1.2.3-pr.2` to pass. - // However, `1.2.4-alpha.notready` should NOT be allowed, - // even though it's within the range set by the comparators. - for (i = 0; i < set.length; i++) { - debug(set[i].semver) - if (set[i].semver === ANY) { - continue - } +const eq = __nccwpck_require__(1898) +const neq = __nccwpck_require__(6017) +const gt = __nccwpck_require__(4123) +const gte = __nccwpck_require__(5522) +const lt = __nccwpck_require__(194) +const lte = __nccwpck_require__(7520) - if (set[i].semver.prerelease.length > 0) { - var allowed = set[i].semver - if (allowed.major === version.major && - allowed.minor === version.minor && - allowed.patch === version.patch) { - return true - } - } - } +const cmp = (a, op, b, loose) => { + switch (op) { + case '===': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a === b - // Version has a -pre, but it's not one of the ones we like. - return false - } + case '!==': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a !== b - return true -} + case '': + case '=': + case '==': + return eq(a, b, loose) -exports.satisfies = satisfies -function satisfies (version, range, options) { - try { - range = new Range(range, options) - } catch (er) { - return false - } - return range.test(version) -} + case '!=': + return neq(a, b, loose) -exports.maxSatisfying = maxSatisfying -function maxSatisfying (versions, range, options) { - var max = null - var maxSV = null - try { - var rangeObj = new Range(range, options) - } catch (er) { - return null - } - versions.forEach(function (v) { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!max || maxSV.compare(v) === -1) { - // compare(max, v, true) - max = v - maxSV = new SemVer(max, options) - } - } - }) - return max -} + case '>': + return gt(a, b, loose) -exports.minSatisfying = minSatisfying -function minSatisfying (versions, range, options) { - var min = null - var minSV = null - try { - var rangeObj = new Range(range, options) - } catch (er) { - return null + case '>=': + return gte(a, b, loose) + + case '<': + return lt(a, b, loose) + + case '<=': + return lte(a, b, loose) + + default: + throw new TypeError(`Invalid operator: ${op}`) } - versions.forEach(function (v) { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!min || minSV.compare(v) === 1) { - // compare(min, v, true) - min = v - minSV = new SemVer(min, options) - } - } - }) - return min } +module.exports = cmp -exports.minVersion = minVersion -function minVersion (range, loose) { - range = new Range(range, loose) - var minver = new SemVer('0.0.0') - if (range.test(minver)) { - return minver +/***/ }), + +/***/ 3466: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(8088) +const parse = __nccwpck_require__(5925) +const {re, t} = __nccwpck_require__(9523) + +const coerce = (version, options) => { + if (version instanceof SemVer) { + return version } - minver = new SemVer('0.0.0-0') - if (range.test(minver)) { - return minver + if (typeof version === 'number') { + version = String(version) } - minver = null - for (var i = 0; i < range.set.length; ++i) { - var comparators = range.set[i] + if (typeof version !== 'string') { + return null + } - comparators.forEach(function (comparator) { - // Clone to avoid manipulating the comparator's semver object. - var compver = new SemVer(comparator.semver.version) - switch (comparator.operator) { - case '>': - if (compver.prerelease.length === 0) { - compver.patch++ - } else { - compver.prerelease.push(0) - } - compver.raw = compver.format() - /* fallthrough */ - case '': - case '>=': - if (!minver || gt(minver, compver)) { - minver = compver - } - break - case '<': - case '<=': - /* Ignore maximum versions */ - break - /* istanbul ignore next */ - default: - throw new Error('Unexpected operation: ' + comparator.operator) + options = options || {} + + let match = null + if (!options.rtl) { + match = version.match(re[t.COERCE]) + } else { + // Find the right-most coercible string that does not share + // a terminus with a more left-ward coercible string. + // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' + // + // Walk through the string checking with a /g regexp + // Manually set the index so as to pick up overlapping matches. + // Stop when we get a match that ends at the string end, since no + // coercible string can be more right-ward without the same terminus. + let next + while ((next = re[t.COERCERTL].exec(version)) && + (!match || match.index + match[0].length !== version.length) + ) { + if (!match || + next.index + next[0].length !== match.index + match[0].length) { + match = next } - }) + re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length + } + // leave it in a clean state + re[t.COERCERTL].lastIndex = -1 } - if (minver && range.test(minver)) { - return minver - } + if (match === null) + return null - return null + return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options) } +module.exports = coerce -exports.validRange = validRange -function validRange (range, options) { - try { - // Return '*' instead of '' so that truthiness works. - // This will throw if it's invalid anyway - return new Range(range, options).range || '*' - } catch (er) { - return null - } -} -// Determine if version is less than all the versions possible in the range -exports.ltr = ltr -function ltr (version, range, options) { - return outside(version, range, '<', options) -} +/***/ }), -// Determine if version is greater than all the versions possible in the range. -exports.gtr = gtr -function gtr (version, range, options) { - return outside(version, range, '>', options) +/***/ 2156: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(8088) +const compareBuild = (a, b, loose) => { + const versionA = new SemVer(a, loose) + const versionB = new SemVer(b, loose) + return versionA.compare(versionB) || versionA.compareBuild(versionB) } +module.exports = compareBuild -exports.outside = outside -function outside (version, range, hilo, options) { - version = new SemVer(version, options) - range = new Range(range, options) - var gtfn, ltefn, ltfn, comp, ecomp - switch (hilo) { - case '>': - gtfn = gt - ltefn = lte - ltfn = lt - comp = '>' - ecomp = '>=' - break - case '<': - gtfn = lt - ltefn = gte - ltfn = gt - comp = '<' - ecomp = '<=' - break - default: - throw new TypeError('Must provide a hilo val of "<" or ">"') - } +/***/ }), - // If it satisifes the range it is not outside - if (satisfies(version, range, options)) { - return false - } +/***/ 2804: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - // From now on, variable terms are as if we're in "gtr" mode. - // but note that everything is flipped for the "ltr" function. +const compare = __nccwpck_require__(4309) +const compareLoose = (a, b) => compare(a, b, true) +module.exports = compareLoose - for (var i = 0; i < range.set.length; ++i) { - var comparators = range.set[i] - var high = null - var low = null +/***/ }), - comparators.forEach(function (comparator) { - if (comparator.semver === ANY) { - comparator = new Comparator('>=0.0.0') - } - high = high || comparator - low = low || comparator - if (gtfn(comparator.semver, high.semver, options)) { - high = comparator - } else if (ltfn(comparator.semver, low.semver, options)) { - low = comparator - } - }) +/***/ 4309: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - // If the edge version comparator has a operator then our version - // isn't outside it - if (high.operator === comp || high.operator === ecomp) { - return false - } +const SemVer = __nccwpck_require__(8088) +const compare = (a, b, loose) => + new SemVer(a, loose).compare(new SemVer(b, loose)) - // If the lowest version comparator has an operator and our version - // is less than it then it isn't higher than the range - if ((!low.operator || low.operator === comp) && - ltefn(version, low.semver)) { - return false - } else if (low.operator === ecomp && ltfn(version, low.semver)) { - return false +module.exports = compare + + +/***/ }), + +/***/ 4297: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const parse = __nccwpck_require__(5925) +const eq = __nccwpck_require__(1898) + +const diff = (version1, version2) => { + if (eq(version1, version2)) { + return null + } else { + const v1 = parse(version1) + const v2 = parse(version2) + const hasPre = v1.prerelease.length || v2.prerelease.length + const prefix = hasPre ? 'pre' : '' + const defaultResult = hasPre ? 'prerelease' : '' + for (const key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return prefix + key + } + } } + return defaultResult // may be undefined } - return true } +module.exports = diff -exports.prerelease = prerelease -function prerelease (version, options) { - var parsed = parse(version, options) - return (parsed && parsed.prerelease.length) ? parsed.prerelease : null -} -exports.intersects = intersects -function intersects (r1, r2, options) { - r1 = new Range(r1, options) - r2 = new Range(r2, options) - return r1.intersects(r2) -} +/***/ }), + +/***/ 1898: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compare = __nccwpck_require__(4309) +const eq = (a, b, loose) => compare(a, b, loose) === 0 +module.exports = eq + + +/***/ }), + +/***/ 4123: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compare = __nccwpck_require__(4309) +const gt = (a, b, loose) => compare(a, b, loose) > 0 +module.exports = gt + + +/***/ }), -exports.coerce = coerce -function coerce (version, options) { - if (version instanceof SemVer) { - return version - } +/***/ 5522: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - if (typeof version === 'number') { - version = String(version) - } +const compare = __nccwpck_require__(4309) +const gte = (a, b, loose) => compare(a, b, loose) >= 0 +module.exports = gte - if (typeof version !== 'string') { - return null - } - options = options || {} +/***/ }), - var match = null - if (!options.rtl) { - match = version.match(re[t.COERCE]) - } else { - // Find the right-most coercible string that does not share - // a terminus with a more left-ward coercible string. - // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' - // - // Walk through the string checking with a /g regexp - // Manually set the index so as to pick up overlapping matches. - // Stop when we get a match that ends at the string end, since no - // coercible string can be more right-ward without the same terminus. - var next - while ((next = re[t.COERCERTL].exec(version)) && - (!match || match.index + match[0].length !== version.length) - ) { - if (!match || - next.index + next[0].length !== match.index + match[0].length) { - match = next - } - re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length - } - // leave it in a clean state - re[t.COERCERTL].lastIndex = -1 +/***/ 900: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(8088) + +const inc = (version, release, options, identifier) => { + if (typeof (options) === 'string') { + identifier = options + options = undefined } - if (match === null) { + try { + return new SemVer(version, options).inc(release, identifier).version + } catch (er) { return null } - - return parse(match[2] + - '.' + (match[3] || '0') + - '.' + (match[4] || '0'), options) } +module.exports = inc /***/ }), -/***/ 586: -/***/ (function(module, __unusedexports, __webpack_require__) { +/***/ 194: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const compare = __webpack_require__(874) +const compare = __nccwpck_require__(4309) const lt = (a, b, loose) => compare(a, b, loose) < 0 module.exports = lt /***/ }), -/***/ 593: -/***/ (function(module, __unusedexports, __webpack_require__) { +/***/ 7520: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const compareBuild = __webpack_require__(16) -const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose)) -module.exports = rsort +const compare = __nccwpck_require__(4309) +const lte = (a, b, loose) => compare(a, b, loose) <= 0 +module.exports = lte /***/ }), -/***/ 605: -/***/ (function(module) { +/***/ 6688: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(8088) +const major = (a, loose) => new SemVer(a, loose).major +module.exports = major -module.exports = require("http"); /***/ }), -/***/ 612: -/***/ (function(module, __unusedexports, __webpack_require__) { +/***/ 8447: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -"use strict"; +const SemVer = __nccwpck_require__(8088) +const minor = (a, loose) => new SemVer(a, loose).minor +module.exports = minor -module.exports = Yallist -Yallist.Node = Node -Yallist.create = Yallist +/***/ }), -function Yallist (list) { - var self = this - if (!(self instanceof Yallist)) { - self = new Yallist() - } +/***/ 6017: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - self.tail = null - self.head = null - self.length = 0 +const compare = __nccwpck_require__(4309) +const neq = (a, b, loose) => compare(a, b, loose) !== 0 +module.exports = neq - if (list && typeof list.forEach === 'function') { - list.forEach(function (item) { - self.push(item) - }) - } else if (arguments.length > 0) { - for (var i = 0, l = arguments.length; i < l; i++) { - self.push(arguments[i]) - } - } - return self -} +/***/ }), -Yallist.prototype.removeNode = function (node) { - if (node.list !== this) { - throw new Error('removing node which does not belong to this list') - } +/***/ 5925: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - var next = node.next - var prev = node.prev +const {MAX_LENGTH} = __nccwpck_require__(2293) +const { re, t } = __nccwpck_require__(9523) +const SemVer = __nccwpck_require__(8088) - if (next) { - next.prev = prev - } +const parseOptions = __nccwpck_require__(785) +const parse = (version, options) => { + options = parseOptions(options) - if (prev) { - prev.next = next + if (version instanceof SemVer) { + return version } - if (node === this.head) { - this.head = next + if (typeof version !== 'string') { + return null } - if (node === this.tail) { - this.tail = prev + + if (version.length > MAX_LENGTH) { + return null } - node.list.length-- - node.next = null - node.prev = null - node.list = null + const r = options.loose ? re[t.LOOSE] : re[t.FULL] + if (!r.test(version)) { + return null + } - return next + try { + return new SemVer(version, options) + } catch (er) { + return null + } } -Yallist.prototype.unshiftNode = function (node) { - if (node === this.head) { - return - } +module.exports = parse - if (node.list) { - node.list.removeNode(node) - } - var head = this.head - node.list = this - node.next = head - if (head) { - head.prev = node - } +/***/ }), - this.head = node - if (!this.tail) { - this.tail = node - } - this.length++ -} +/***/ 2866: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -Yallist.prototype.pushNode = function (node) { - if (node === this.tail) { - return - } +const SemVer = __nccwpck_require__(8088) +const patch = (a, loose) => new SemVer(a, loose).patch +module.exports = patch - if (node.list) { - node.list.removeNode(node) - } - var tail = this.tail - node.list = this - node.prev = tail - if (tail) { - tail.next = node - } +/***/ }), - this.tail = node - if (!this.head) { - this.head = node - } - this.length++ -} +/***/ 4016: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -Yallist.prototype.push = function () { - for (var i = 0, l = arguments.length; i < l; i++) { - push(this, arguments[i]) - } - return this.length +const parse = __nccwpck_require__(5925) +const prerelease = (version, options) => { + const parsed = parse(version, options) + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null } +module.exports = prerelease -Yallist.prototype.unshift = function () { - for (var i = 0, l = arguments.length; i < l; i++) { - unshift(this, arguments[i]) - } - return this.length -} -Yallist.prototype.pop = function () { - if (!this.tail) { - return undefined - } +/***/ }), - var res = this.tail.value - this.tail = this.tail.prev - if (this.tail) { - this.tail.next = null - } else { - this.head = null - } - this.length-- - return res -} +/***/ 6417: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -Yallist.prototype.shift = function () { - if (!this.head) { - return undefined - } +const compare = __nccwpck_require__(4309) +const rcompare = (a, b, loose) => compare(b, a, loose) +module.exports = rcompare - var res = this.head.value - this.head = this.head.next - if (this.head) { - this.head.prev = null - } else { - this.tail = null - } - this.length-- - return res -} -Yallist.prototype.forEach = function (fn, thisp) { - thisp = thisp || this - for (var walker = this.head, i = 0; walker !== null; i++) { - fn.call(thisp, walker.value, i, this) - walker = walker.next - } -} +/***/ }), -Yallist.prototype.forEachReverse = function (fn, thisp) { - thisp = thisp || this - for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { - fn.call(thisp, walker.value, i, this) - walker = walker.prev - } -} +/***/ 8701: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -Yallist.prototype.get = function (n) { - for (var i = 0, walker = this.head; walker !== null && i < n; i++) { - // abort out of the list early if we hit a cycle - walker = walker.next - } - if (i === n && walker !== null) { - return walker.value - } -} +const compareBuild = __nccwpck_require__(2156) +const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose)) +module.exports = rsort -Yallist.prototype.getReverse = function (n) { - for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { - // abort out of the list early if we hit a cycle - walker = walker.prev - } - if (i === n && walker !== null) { - return walker.value + +/***/ }), + +/***/ 6055: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const Range = __nccwpck_require__(9828) +const satisfies = (version, range, options) => { + try { + range = new Range(range, options) + } catch (er) { + return false } + return range.test(version) } +module.exports = satisfies -Yallist.prototype.map = function (fn, thisp) { - thisp = thisp || this - var res = new Yallist() - for (var walker = this.head; walker !== null;) { - res.push(fn.call(thisp, walker.value, this)) - walker = walker.next - } - return res -} -Yallist.prototype.mapReverse = function (fn, thisp) { - thisp = thisp || this - var res = new Yallist() - for (var walker = this.tail; walker !== null;) { - res.push(fn.call(thisp, walker.value, this)) - walker = walker.prev - } - return res -} +/***/ }), -Yallist.prototype.reduce = function (fn, initial) { - var acc - var walker = this.head - if (arguments.length > 1) { - acc = initial - } else if (this.head) { - walker = this.head.next - acc = this.head.value - } else { - throw new TypeError('Reduce of empty list with no initial value') - } +/***/ 1426: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - for (var i = 0; walker !== null; i++) { - acc = fn(acc, walker.value, i) - walker = walker.next - } +const compareBuild = __nccwpck_require__(2156) +const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose)) +module.exports = sort - return acc -} -Yallist.prototype.reduceReverse = function (fn, initial) { - var acc - var walker = this.tail - if (arguments.length > 1) { - acc = initial - } else if (this.tail) { - walker = this.tail.prev - acc = this.tail.value - } else { - throw new TypeError('Reduce of empty list with no initial value') - } +/***/ }), - for (var i = this.length - 1; walker !== null; i--) { - acc = fn(acc, walker.value, i) - walker = walker.prev - } +/***/ 9601: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - return acc +const parse = __nccwpck_require__(5925) +const valid = (version, options) => { + const v = parse(version, options) + return v ? v.version : null } +module.exports = valid -Yallist.prototype.toArray = function () { - var arr = new Array(this.length) - for (var i = 0, walker = this.head; walker !== null; i++) { - arr[i] = walker.value - walker = walker.next - } - return arr -} -Yallist.prototype.toArrayReverse = function () { - var arr = new Array(this.length) - for (var i = 0, walker = this.tail; walker !== null; i++) { - arr[i] = walker.value - walker = walker.prev - } - return arr -} +/***/ }), -Yallist.prototype.slice = function (from, to) { - to = to || this.length - if (to < 0) { - to += this.length - } - from = from || 0 - if (from < 0) { - from += this.length - } - var ret = new Yallist() - if (to < from || to < 0) { - return ret - } - if (from < 0) { - from = 0 - } - if (to > this.length) { - to = this.length - } - for (var i = 0, walker = this.head; walker !== null && i < from; i++) { - walker = walker.next - } - for (; walker !== null && i < to; i++, walker = walker.next) { - ret.push(walker.value) - } - return ret -} +/***/ 1383: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -Yallist.prototype.sliceReverse = function (from, to) { - to = to || this.length - if (to < 0) { - to += this.length - } - from = from || 0 - if (from < 0) { - from += this.length - } - var ret = new Yallist() - if (to < from || to < 0) { - return ret - } - if (from < 0) { - from = 0 - } - if (to > this.length) { - to = this.length - } - for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { - walker = walker.prev - } - for (; walker !== null && i > from; i--, walker = walker.prev) { - ret.push(walker.value) - } - return ret +// just pre-load all the stuff that index.js lazily exports +const internalRe = __nccwpck_require__(9523) +module.exports = { + re: internalRe.re, + src: internalRe.src, + tokens: internalRe.t, + SEMVER_SPEC_VERSION: __nccwpck_require__(2293).SEMVER_SPEC_VERSION, + SemVer: __nccwpck_require__(8088), + compareIdentifiers: __nccwpck_require__(2463).compareIdentifiers, + rcompareIdentifiers: __nccwpck_require__(2463).rcompareIdentifiers, + parse: __nccwpck_require__(5925), + valid: __nccwpck_require__(9601), + clean: __nccwpck_require__(8848), + inc: __nccwpck_require__(900), + diff: __nccwpck_require__(4297), + major: __nccwpck_require__(6688), + minor: __nccwpck_require__(8447), + patch: __nccwpck_require__(2866), + prerelease: __nccwpck_require__(4016), + compare: __nccwpck_require__(4309), + rcompare: __nccwpck_require__(6417), + compareLoose: __nccwpck_require__(2804), + compareBuild: __nccwpck_require__(2156), + sort: __nccwpck_require__(1426), + rsort: __nccwpck_require__(8701), + gt: __nccwpck_require__(4123), + lt: __nccwpck_require__(194), + eq: __nccwpck_require__(1898), + neq: __nccwpck_require__(6017), + gte: __nccwpck_require__(5522), + lte: __nccwpck_require__(7520), + cmp: __nccwpck_require__(5098), + coerce: __nccwpck_require__(3466), + Comparator: __nccwpck_require__(1532), + Range: __nccwpck_require__(9828), + satisfies: __nccwpck_require__(6055), + toComparators: __nccwpck_require__(2706), + maxSatisfying: __nccwpck_require__(579), + minSatisfying: __nccwpck_require__(832), + minVersion: __nccwpck_require__(4179), + validRange: __nccwpck_require__(2098), + outside: __nccwpck_require__(420), + gtr: __nccwpck_require__(9380), + ltr: __nccwpck_require__(3323), + intersects: __nccwpck_require__(7008), + simplifyRange: __nccwpck_require__(5297), + subset: __nccwpck_require__(7863), } -Yallist.prototype.splice = function (start, deleteCount, ...nodes) { - if (start > this.length) { - start = this.length - 1 - } - if (start < 0) { - start = this.length + start; - } - for (var i = 0, walker = this.head; walker !== null && i < start; i++) { - walker = walker.next - } +/***/ }), - var ret = [] - for (var i = 0; walker && i < deleteCount; i++) { - ret.push(walker.value) - walker = this.removeNode(walker) - } - if (walker === null) { - walker = this.tail - } +/***/ 2293: +/***/ ((module) => { - if (walker !== this.head && walker !== this.tail) { - walker = walker.prev - } +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +const SEMVER_SPEC_VERSION = '2.0.0' - for (var i = 0; i < nodes.length; i++) { - walker = insert(this, walker, nodes[i]) - } - return ret; -} +const MAX_LENGTH = 256 +const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || + /* istanbul ignore next */ 9007199254740991 -Yallist.prototype.reverse = function () { - var head = this.head - var tail = this.tail - for (var walker = head; walker !== null; walker = walker.prev) { - var p = walker.prev - walker.prev = walker.next - walker.next = p - } - this.head = tail - this.tail = head - return this +// Max safe segment length for coercion. +const MAX_SAFE_COMPONENT_LENGTH = 16 + +module.exports = { + SEMVER_SPEC_VERSION, + MAX_LENGTH, + MAX_SAFE_INTEGER, + MAX_SAFE_COMPONENT_LENGTH } -function insert (self, node, value) { - var inserted = node === self.head ? - new Node(value, null, node, self) : - new Node(value, node, node.next, self) - if (inserted.next === null) { - self.tail = inserted - } - if (inserted.prev === null) { - self.head = inserted - } +/***/ }), - self.length++ +/***/ 427: +/***/ ((module) => { - return inserted -} +const debug = ( + typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG) +) ? (...args) => console.error('SEMVER', ...args) + : () => {} -function push (self, item) { - self.tail = new Node(item, self.tail, null, self) - if (!self.head) { - self.head = self.tail - } - self.length++ -} +module.exports = debug -function unshift (self, item) { - self.head = new Node(item, null, self.head, self) - if (!self.tail) { - self.tail = self.head - } - self.length++ -} -function Node (value, prev, next, list) { - if (!(this instanceof Node)) { - return new Node(value, prev, next, list) - } +/***/ }), - this.list = list - this.value = value +/***/ 2463: +/***/ ((module) => { - if (prev) { - prev.next = this - this.prev = prev - } else { - this.prev = null - } +const numeric = /^[0-9]+$/ +const compareIdentifiers = (a, b) => { + const anum = numeric.test(a) + const bnum = numeric.test(b) - if (next) { - next.prev = this - this.next = next - } else { - this.next = null + if (anum && bnum) { + a = +a + b = +b } + + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 } -try { - // add if support for Symbol.iterator is present - __webpack_require__(396)(Yallist) -} catch (er) {} +const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a) + +module.exports = { + compareIdentifiers, + rcompareIdentifiers +} /***/ }), -/***/ 614: -/***/ (function(module) { +/***/ 785: +/***/ ((module) => { + +// parse out just the options we care about so we always get a consistent +// obj with keys in a consistent order. +const opts = ['includePrerelease', 'loose', 'rtl'] +const parseOptions = options => + !options ? {} + : typeof options !== 'object' ? { loose: true } + : opts.filter(k => options[k]).reduce((options, k) => { + options[k] = true + return options + }, {}) +module.exports = parseOptions -module.exports = require("events"); /***/ }), -/***/ 622: -/***/ (function(module) { +/***/ 9523: +/***/ ((module, exports, __nccwpck_require__) => { -module.exports = require("path"); +const { MAX_SAFE_COMPONENT_LENGTH } = __nccwpck_require__(2293) +const debug = __nccwpck_require__(427) +exports = module.exports = {} -/***/ }), +// The actual regexps go on exports.re +const re = exports.re = [] +const src = exports.src = [] +const t = exports.t = {} +let R = 0 -/***/ 630: -/***/ (function(module, __unusedexports, __webpack_require__) { +const createToken = (name, value, isGlobal) => { + const index = R++ + debug(index, value) + t[name] = index + src[index] = value + re[index] = new RegExp(value, isGlobal ? 'g' : undefined) +} -const compare = __webpack_require__(874) -const rcompare = (a, b, loose) => compare(b, a, loose) -module.exports = rcompare +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. -/***/ }), +createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*') +createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+') -/***/ 631: -/***/ (function(module) { +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. -module.exports = require("net"); +createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*') -/***/ }), +// ## Main Version +// Three dot-separated numeric identifiers. -/***/ 669: -/***/ (function(module) { +createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})`) -module.exports = require("util"); +createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})`) -/***/ }), +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. -/***/ 672: -/***/ (function(__unusedmodule, exports, __webpack_require__) { +createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] +}|${src[t.NONNUMERICIDENTIFIER]})`) -"use strict"; +createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] +}|${src[t.NONNUMERICIDENTIFIER]})`) -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 }); -const assert_1 = __webpack_require__(357); -const fs = __webpack_require__(747); -const path = __webpack_require__(622); -_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; -/** - * Recursively create a directory at `fsPath`. - * - * This implementation is optimistic, meaning it attempts to create the full - * path first, and backs up the path stack from there. - * - * @param fsPath The path to create - * @param maxDepth The maximum recursion depth - * @param depth The current recursion depth - */ -function mkdirP(fsPath, maxDepth = 1000, depth = 1) { - return __awaiter(this, void 0, void 0, function* () { - assert_1.ok(fsPath, 'a path argument must be provided'); - fsPath = path.resolve(fsPath); - if (depth >= maxDepth) - return exports.mkdir(fsPath); - try { - yield exports.mkdir(fsPath); - return; - } - catch (err) { - switch (err.code) { - case 'ENOENT': { - yield mkdirP(path.dirname(fsPath), maxDepth, depth + 1); - yield exports.mkdir(fsPath); - return; - } - default: { - let stats; - try { - stats = yield exports.stat(fsPath); - } - catch (err2) { - throw err; - } - if (!stats.isDirectory()) - throw err; - } - } - } - }); -} -exports.mkdirP = mkdirP; -/** - * 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 ''; - }); +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] +}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`) + +createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] +}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`) + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+') + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] +}(?:\\.${src[t.BUILDIDENTIFIER]})*))`) + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +createToken('FULLPLAIN', `v?${src[t.MAINVERSION] +}${src[t.PRERELEASE]}?${ + src[t.BUILD]}?`) + +createToken('FULL', `^${src[t.FULLPLAIN]}$`) + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] +}${src[t.PRERELEASELOOSE]}?${ + src[t.BUILD]}?`) + +createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`) + +createToken('GTLT', '((?:<|>)?=?)') + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`) +createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`) + +createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:${src[t.PRERELEASE]})?${ + src[t.BUILD]}?` + + `)?)?`) + +createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:${src[t.PRERELEASELOOSE]})?${ + src[t.BUILD]}?` + + `)?)?`) + +createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`) +createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`) + +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +createToken('COERCE', `${'(^|[^\\d])' + + '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:$|[^\\d])`) +createToken('COERCERTL', src[t.COERCE], true) + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +createToken('LONETILDE', '(?:~>?)') + +createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true) +exports.tildeTrimReplace = '$1~' + +createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`) +createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`) + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +createToken('LONECARET', '(?:\\^)') + +createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true) +exports.caretTrimReplace = '$1^' + +createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`) +createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`) + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`) +createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`) + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] +}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true) +exports.comparatorTrimReplace = '$1$2$3' + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAIN]})` + + `\\s*$`) + +createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAINLOOSE]})` + + `\\s*$`) + +// Star ranges basically just allow anything at all. +createToken('STAR', '(<|>)?=?\\s*\\*') +// >=0.0.0 is like a star +createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$') +createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$') + + +/***/ }), + +/***/ 9380: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +// Determine if version is greater than all the versions possible in the range. +const outside = __nccwpck_require__(420) +const gtr = (version, range, options) => outside(version, range, '>', options) +module.exports = gtr + + +/***/ }), + +/***/ 7008: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const Range = __nccwpck_require__(9828) +const intersects = (r1, r2, options) => { + r1 = new Range(r1, options) + r2 = new Range(r2, options) + return r1.intersects(r2) } -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, '\\'); +module.exports = intersects + + +/***/ }), + +/***/ 3323: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const outside = __nccwpck_require__(420) +// Determine if version is less than all the versions possible in the range +const ltr = (version, range, options) => outside(version, range, '<', options) +module.exports = ltr + + +/***/ }), + +/***/ 579: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(8088) +const Range = __nccwpck_require__(9828) + +const maxSatisfying = (versions, range, options) => { + let max = null + let maxSV = null + let rangeObj = null + try { + rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach((v) => { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { + // compare(max, v, true) + max = v + maxSV = new SemVer(max, options) + } } - // 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())); + }) + return max } -//# sourceMappingURL=io-util.js.map +module.exports = maxSatisfying -/***/ }), -/***/ 694: -/***/ (function(__unusedmodule, exports) { +/***/ }), -"use strict"; +/***/ 832: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -Object.defineProperty(exports, "__esModule", { value: true }); -exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = exports.INPUT_DEFAULT_GPG_PASSPHRASE = exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = exports.INPUT_GPG_PASSPHRASE = exports.INPUT_GPG_PRIVATE_KEY = exports.INPUT_OVERWRITE_SETTINGS = exports.INPUT_SETTINGS_PATH = exports.INPUT_SERVER_PASSWORD = exports.INPUT_SERVER_USERNAME = exports.INPUT_SERVER_ID = exports.INPUT_CHECK_LATEST = exports.INPUT_JDK_FILE = exports.INPUT_DISTRIBUTION = exports.INPUT_JAVA_PACKAGE = exports.INPUT_ARCHITECTURE = exports.INPUT_JAVA_VERSION = exports.MACOS_JAVA_CONTENT_POSTFIX = void 0; -exports.MACOS_JAVA_CONTENT_POSTFIX = 'Contents/Home'; -exports.INPUT_JAVA_VERSION = 'java-version'; -exports.INPUT_ARCHITECTURE = 'architecture'; -exports.INPUT_JAVA_PACKAGE = 'java-package'; -exports.INPUT_DISTRIBUTION = 'distribution'; -exports.INPUT_JDK_FILE = 'jdkFile'; -exports.INPUT_CHECK_LATEST = 'check-latest'; -exports.INPUT_SERVER_ID = 'server-id'; -exports.INPUT_SERVER_USERNAME = 'server-username'; -exports.INPUT_SERVER_PASSWORD = 'server-password'; -exports.INPUT_SETTINGS_PATH = 'settings-path'; -exports.INPUT_OVERWRITE_SETTINGS = 'overwrite-settings'; -exports.INPUT_GPG_PRIVATE_KEY = 'gpg-private-key'; -exports.INPUT_GPG_PASSPHRASE = 'gpg-passphrase'; -exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined; -exports.INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE'; -exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint'; +const SemVer = __nccwpck_require__(8088) +const Range = __nccwpck_require__(9828) +const minSatisfying = (versions, range, options) => { + let min = null + let minSV = null + let rangeObj = null + try { + rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach((v) => { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { + // compare(min, v, true) + min = v + minSV = new SemVer(min, options) + } + } + }) + return min +} +module.exports = minSatisfying /***/ }), -/***/ 702: -/***/ (function(module, __unusedexports, __webpack_require__) { +/***/ 4179: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -"use strict"; +const SemVer = __nccwpck_require__(8088) +const Range = __nccwpck_require__(9828) +const gt = __nccwpck_require__(4123) +const minVersion = (range, loose) => { + range = new Range(range, loose) -// A linked list to keep track of recently-used-ness -const Yallist = __webpack_require__(612) + let minver = new SemVer('0.0.0') + if (range.test(minver)) { + return minver + } -const MAX = Symbol('max') -const LENGTH = Symbol('length') -const LENGTH_CALCULATOR = Symbol('lengthCalculator') -const ALLOW_STALE = Symbol('allowStale') -const MAX_AGE = Symbol('maxAge') -const DISPOSE = Symbol('dispose') -const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet') -const LRU_LIST = Symbol('lruList') -const CACHE = Symbol('cache') -const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet') + minver = new SemVer('0.0.0-0') + if (range.test(minver)) { + return minver + } + + minver = null + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i] + + let setMin = null + comparators.forEach((comparator) => { + // Clone to avoid manipulating the comparator's semver object. + const compver = new SemVer(comparator.semver.version) + switch (comparator.operator) { + case '>': + if (compver.prerelease.length === 0) { + compver.patch++ + } else { + compver.prerelease.push(0) + } + compver.raw = compver.format() + /* fallthrough */ + case '': + case '>=': + if (!setMin || gt(compver, setMin)) { + setMin = compver + } + break + case '<': + case '<=': + /* Ignore maximum versions */ + break + /* istanbul ignore next */ + default: + throw new Error(`Unexpected operation: ${comparator.operator}`) + } + }) + if (setMin && (!minver || gt(minver, setMin))) + minver = setMin + } -const naiveLength = () => 1 + if (minver && range.test(minver)) { + return minver + } -// lruList is a yallist where the head is the youngest -// item, and the tail is the oldest. the list contains the Hit -// objects as the entries. -// Each Hit object has a reference to its Yallist.Node. This -// never changes. -// -// cache is a Map (or PseudoMap) that matches the keys to -// the Yallist.Node object. -class LRUCache { - constructor (options) { - if (typeof options === 'number') - options = { max: options } + return null +} +module.exports = minVersion - if (!options) - options = {} - if (options.max && (typeof options.max !== 'number' || options.max < 0)) - throw new TypeError('max must be a non-negative number') - // Kind of weird to have a default max of Infinity, but oh well. - const max = this[MAX] = options.max || Infinity +/***/ }), - const lc = options.length || naiveLength - this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc - this[ALLOW_STALE] = options.stale || false - if (options.maxAge && typeof options.maxAge !== 'number') - throw new TypeError('maxAge must be a number') - this[MAX_AGE] = options.maxAge || 0 - this[DISPOSE] = options.dispose - this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false - this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false - this.reset() - } +/***/ 420: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - // resize the cache when the max changes. - set max (mL) { - if (typeof mL !== 'number' || mL < 0) - throw new TypeError('max must be a non-negative number') +const SemVer = __nccwpck_require__(8088) +const Comparator = __nccwpck_require__(1532) +const {ANY} = Comparator +const Range = __nccwpck_require__(9828) +const satisfies = __nccwpck_require__(6055) +const gt = __nccwpck_require__(4123) +const lt = __nccwpck_require__(194) +const lte = __nccwpck_require__(7520) +const gte = __nccwpck_require__(5522) - this[MAX] = mL || Infinity - trim(this) - } - get max () { - return this[MAX] - } +const outside = (version, range, hilo, options) => { + version = new SemVer(version, options) + range = new Range(range, options) - set allowStale (allowStale) { - this[ALLOW_STALE] = !!allowStale - } - get allowStale () { - return this[ALLOW_STALE] + let gtfn, ltefn, ltfn, comp, ecomp + switch (hilo) { + case '>': + gtfn = gt + ltefn = lte + ltfn = lt + comp = '>' + ecomp = '>=' + break + case '<': + gtfn = lt + ltefn = gte + ltfn = gt + comp = '<' + ecomp = '<=' + break + default: + throw new TypeError('Must provide a hilo val of "<" or ">"') } - set maxAge (mA) { - if (typeof mA !== 'number') - throw new TypeError('maxAge must be a non-negative number') - - this[MAX_AGE] = mA - trim(this) - } - get maxAge () { - return this[MAX_AGE] + // If it satisfies the range it is not outside + if (satisfies(version, range, options)) { + return false } - // resize the cache when the lengthCalculator changes. - set lengthCalculator (lC) { - if (typeof lC !== 'function') - lC = naiveLength + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. - if (lC !== this[LENGTH_CALCULATOR]) { - this[LENGTH_CALCULATOR] = lC - this[LENGTH] = 0 - this[LRU_LIST].forEach(hit => { - hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key) - this[LENGTH] += hit.length - }) - } - trim(this) - } - get lengthCalculator () { return this[LENGTH_CALCULATOR] } + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i] - get length () { return this[LENGTH] } - get itemCount () { return this[LRU_LIST].length } + let high = null + let low = null - rforEach (fn, thisp) { - thisp = thisp || this - for (let walker = this[LRU_LIST].tail; walker !== null;) { - const prev = walker.prev - forEachStep(this, fn, walker, thisp) - walker = prev + comparators.forEach((comparator) => { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator + low = low || comparator + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator + } + }) + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false } - } - forEach (fn, thisp) { - thisp = thisp || this - for (let walker = this[LRU_LIST].head; walker !== null;) { - const next = walker.next - forEachStep(this, fn, walker, thisp) - walker = next + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false } } + return true +} - keys () { - return this[LRU_LIST].toArray().map(k => k.key) - } +module.exports = outside - values () { - return this[LRU_LIST].toArray().map(k => k.value) - } - reset () { - if (this[DISPOSE] && - this[LRU_LIST] && - this[LRU_LIST].length) { - this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value)) - } +/***/ }), - this[CACHE] = new Map() // hash of items by key - this[LRU_LIST] = new Yallist() // list of items in order of use recency - this[LENGTH] = 0 // length of items in the list - } +/***/ 5297: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - dump () { - return this[LRU_LIST].map(hit => - isStale(this, hit) ? false : { - k: hit.key, - v: hit.value, - e: hit.now + (hit.maxAge || 0) - }).toArray().filter(h => h) +// given a set of versions and a range, create a "simplified" range +// that includes the same versions that the original range does +// If the original range is shorter than the simplified one, return that. +const satisfies = __nccwpck_require__(6055) +const compare = __nccwpck_require__(4309) +module.exports = (versions, range, options) => { + const set = [] + let min = null + let prev = null + const v = versions.sort((a, b) => compare(a, b, options)) + for (const version of v) { + const included = satisfies(version, range, options) + if (included) { + prev = version + if (!min) + min = version + } else { + if (prev) { + set.push([min, prev]) + } + prev = null + min = null + } } + if (min) + set.push([min, null]) - dumpLru () { - return this[LRU_LIST] + const ranges = [] + for (const [min, max] of set) { + if (min === max) + ranges.push(min) + else if (!max && min === v[0]) + ranges.push('*') + else if (!max) + ranges.push(`>=${min}`) + else if (min === v[0]) + ranges.push(`<=${max}`) + else + ranges.push(`${min} - ${max}`) } + const simplified = ranges.join(' || ') + const original = typeof range.raw === 'string' ? range.raw : String(range) + return simplified.length < original.length ? simplified : range +} - set (key, value, maxAge) { - maxAge = maxAge || this[MAX_AGE] - if (maxAge && typeof maxAge !== 'number') - throw new TypeError('maxAge must be a number') +/***/ }), - const now = maxAge ? Date.now() : 0 - const len = this[LENGTH_CALCULATOR](value, key) +/***/ 7863: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { - if (this[CACHE].has(key)) { - if (len > this[MAX]) { - del(this, this[CACHE].get(key)) - return false - } +const Range = __nccwpck_require__(9828) +const { ANY } = __nccwpck_require__(1532) +const satisfies = __nccwpck_require__(6055) +const compare = __nccwpck_require__(4309) + +// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff: +// - Every simple range `r1, r2, ...` is a subset of some `R1, R2, ...` +// +// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff: +// - If c is only the ANY comparator +// - If C is only the ANY comparator, return true +// - Else return false +// - Let EQ be the set of = comparators in c +// - If EQ is more than one, return true (null set) +// - Let GT be the highest > or >= comparator in c +// - Let LT be the lowest < or <= comparator in c +// - If GT and LT, and GT.semver > LT.semver, return true (null set) +// - If EQ +// - If GT, and EQ does not satisfy GT, return true (null set) +// - If LT, and EQ does not satisfy LT, return true (null set) +// - If EQ satisfies every C, return true +// - Else return false +// - If GT +// - If GT.semver is lower than any > or >= comp in C, return false +// - If GT is >=, and GT.semver does not satisfy every C, return false +// - If LT +// - If LT.semver is greater than any < or <= comp in C, return false +// - If LT is <=, and LT.semver does not satisfy every C, return false +// - If any C is a = range, and GT or LT are set, return false +// - Else return true - const node = this[CACHE].get(key) - const item = node.value +const subset = (sub, dom, options) => { + if (sub === dom) + return true - // dispose of the old one before overwriting - // split out into 2 ifs for better coverage tracking - if (this[DISPOSE]) { - if (!this[NO_DISPOSE_ON_SET]) - this[DISPOSE](key, item.value) - } + sub = new Range(sub, options) + dom = new Range(dom, options) + let sawNonNull = false - item.now = now - item.maxAge = maxAge - item.value = value - this[LENGTH] += len - item.length - item.length = len - this.get(key) - trim(this) - return true + OUTER: for (const simpleSub of sub.set) { + for (const simpleDom of dom.set) { + const isSub = simpleSubset(simpleSub, simpleDom, options) + sawNonNull = sawNonNull || isSub !== null + if (isSub) + continue OUTER } - - const hit = new Entry(key, value, len, now, maxAge) - - // oversized objects fall out of cache automatically. - if (hit.length > this[MAX]) { - if (this[DISPOSE]) - this[DISPOSE](key, value) - + // the null set is a subset of everything, but null simple ranges in + // a complex range should be ignored. so if we saw a non-null range, + // then we know this isn't a subset, but if EVERY simple range was null, + // then it is a subset. + if (sawNonNull) return false - } + } + return true +} - this[LENGTH] += hit.length - this[LRU_LIST].unshift(hit) - this[CACHE].set(key, this[LRU_LIST].head) - trim(this) +const simpleSubset = (sub, dom, options) => { + if (sub === dom) return true - } - has (key) { - if (!this[CACHE].has(key)) return false - const hit = this[CACHE].get(key).value - return !isStale(this, hit) - } + if (sub.length === 1 && sub[0].semver === ANY) + return dom.length === 1 && dom[0].semver === ANY - get (key) { - return get(this, key, true) + const eqSet = new Set() + let gt, lt + for (const c of sub) { + if (c.operator === '>' || c.operator === '>=') + gt = higherGT(gt, c, options) + else if (c.operator === '<' || c.operator === '<=') + lt = lowerLT(lt, c, options) + else + eqSet.add(c.semver) } - peek (key) { - return get(this, key, false) - } + if (eqSet.size > 1) + return null - pop () { - const node = this[LRU_LIST].tail - if (!node) + let gtltComp + if (gt && lt) { + gtltComp = compare(gt.semver, lt.semver, options) + if (gtltComp > 0) + return null + else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) return null - - del(this, node) - return node.value } - del (key) { - del(this, this[CACHE].get(key)) - } + // will iterate one or zero times + for (const eq of eqSet) { + if (gt && !satisfies(eq, String(gt), options)) + return null - load (arr) { - // reset the cache - this.reset() + if (lt && !satisfies(eq, String(lt), options)) + return null - const now = Date.now() - // A previous serialized cache has the most recent items first - for (let l = arr.length - 1; l >= 0; l--) { - const hit = arr[l] - const expiresAt = hit.e || 0 - if (expiresAt === 0) - // the item was created without expiration in a non aged cache - this.set(hit.k, hit.v) - else { - const maxAge = expiresAt - now - // dont add already expired items - if (maxAge > 0) { - this.set(hit.k, hit.v, maxAge) - } - } + for (const c of dom) { + if (!satisfies(eq, String(c), options)) + return false } - } - prune () { - this[CACHE].forEach((value, key) => get(this, key, false)) + return true } -} -const get = (self, key, doUse) => { - const node = self[CACHE].get(key) - if (node) { - const hit = node.value - if (isStale(self, hit)) { - del(self, node) - if (!self[ALLOW_STALE]) - return undefined - } else { - if (doUse) { - if (self[UPDATE_AGE_ON_GET]) - node.value.now = Date.now() - self[LRU_LIST].unshiftNode(node) - } + let higher, lower + let hasDomLT, hasDomGT + for (const c of dom) { + hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>=' + hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<=' + if (gt) { + if (c.operator === '>' || c.operator === '>=') { + higher = higherGT(gt, c, options) + if (higher === c && higher !== gt) + return false + } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) + return false } - return hit.value + if (lt) { + if (c.operator === '<' || c.operator === '<=') { + lower = lowerLT(lt, c, options) + if (lower === c && lower !== lt) + return false + } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) + return false + } + if (!c.operator && (lt || gt) && gtltComp !== 0) + return false } -} -const isStale = (self, hit) => { - if (!hit || (!hit.maxAge && !self[MAX_AGE])) + // if there was a < or >, and nothing in the dom, then must be false + // UNLESS it was limited by another range in the other direction. + // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0 + if (gt && hasDomLT && !lt && gtltComp !== 0) return false - const diff = Date.now() - hit.now - return hit.maxAge ? diff > hit.maxAge - : self[MAX_AGE] && (diff > self[MAX_AGE]) -} + if (lt && hasDomGT && !gt && gtltComp !== 0) + return false -const trim = self => { - if (self[LENGTH] > self[MAX]) { - for (let walker = self[LRU_LIST].tail; - self[LENGTH] > self[MAX] && walker !== null;) { - // We know that we're about to delete this one, and also - // what the next least recently used key will be, so just - // go ahead and set it now. - const prev = walker.prev - del(self, walker) - walker = prev - } - } + return true } -const del = (self, node) => { - if (node) { - const hit = node.value - if (self[DISPOSE]) - self[DISPOSE](hit.key, hit.value) - - self[LENGTH] -= hit.length - self[CACHE].delete(hit.key) - self[LRU_LIST].removeNode(node) - } +// >=1.2.3 is lower than >1.2.3 +const higherGT = (a, b, options) => { + if (!a) + return b + const comp = compare(a.semver, b.semver, options) + return comp > 0 ? a + : comp < 0 ? b + : b.operator === '>' && a.operator === '>=' ? b + : a } -class Entry { - constructor (key, value, length, now, maxAge) { - this.key = key - this.value = value - this.length = length - this.now = now - this.maxAge = maxAge || 0 - } +// <=1.2.3 is higher than <1.2.3 +const lowerLT = (a, b, options) => { + if (!a) + return b + const comp = compare(a.semver, b.semver, options) + return comp < 0 ? a + : comp > 0 ? b + : b.operator === '<' && a.operator === '<=' ? b + : a } -const forEachStep = (self, fn, node, thisp) => { - let hit = node.value - if (isStale(self, hit)) { - del(self, node) - if (!self[ALLOW_STALE]) - hit = undefined +module.exports = subset + + +/***/ }), + +/***/ 2706: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const Range = __nccwpck_require__(9828) + +// Mostly just for testing and legacy API reasons +const toComparators = (range, options) => + new Range(range, options).set + .map(comp => comp.map(c => c.value).join(' ').trim().split(' ')) + +module.exports = toComparators + + +/***/ }), + +/***/ 2098: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const Range = __nccwpck_require__(9828) +const validRange = (range, options) => { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, options).range || '*' + } catch (er) { + return null } - if (hit) - fn.call(thisp, hit.value, hit.key, self) } - -module.exports = LRUCache +module.exports = validRange /***/ }), -/***/ 714: -/***/ (function(module, __unusedexports, __webpack_require__) { +/***/ 4294: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const parse = __webpack_require__(830) -const valid = (version, options) => { - const v = parse(version, options) - return v ? v.version : null -} -module.exports = valid +module.exports = __nccwpck_require__(4219); /***/ }), -/***/ 722: -/***/ (function(module) { +/***/ 4219: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ -var byteToHex = []; -for (var i = 0; i < 256; ++i) { - byteToHex[i] = (i + 0x100).toString(16).substr(1); +"use strict"; + + +var net = __nccwpck_require__(1631); +var tls = __nccwpck_require__(8818); +var http = __nccwpck_require__(8605); +var https = __nccwpck_require__(7211); +var events = __nccwpck_require__(8614); +var assert = __nccwpck_require__(2357); +var util = __nccwpck_require__(1669); + + +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 bytesToUuid(buf, offset) { - var i = offset || 0; - var bth = byteToHex; - // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4 - return ([ - bth[buf[i++]], bth[buf[i++]], - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], - bth[buf[i++]], bth[buf[i++]], - bth[buf[i++]], bth[buf[i++]] - ]).join(''); +function httpsOverHttp(options) { + var agent = new TunnelingAgent(options); + agent.request = http.request; + agent.createSocket = createSecureSocket; + agent.defaultPort = 443; + return agent; } -module.exports = bytesToUuid; +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; +} -/***/ }), -/***/ 740: -/***/ (function(module, __unusedexports, __webpack_require__) { +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 = []; -const SemVer = __webpack_require__(65) -const Range = __webpack_require__(124) -const minSatisfying = (versions, range, options) => { - let min = null - let minSV = null - let rangeObj = null - try { - rangeObj = new Range(range, options) - } catch (er) { - return null - } - versions.forEach((v) => { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!min || minSV.compare(v) === 1) { - // compare(min, v, true) - min = v - minSV = new SemVer(min, options) + 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; } } - }) - return min + socket.destroy(); + self.removeSocket(socket); + }); } -module.exports = minSatisfying +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; + } -/***/ 744: -/***/ (function(module, __unusedexports, __webpack_require__) { + // 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); -const SemVer = __webpack_require__(65) -const major = (a, loose) => new SemVer(a, loose).major -module.exports = major + 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); -/***/ 747: -/***/ (function(module) { + 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'); + } -module.exports = require("fs"); + 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; + } -/***/ 752: -/***/ (function(module, __unusedexports, __webpack_require__) { + function onUpgrade(res, socket, head) { + // Hacky. + process.nextTick(function() { + onConnect(res, socket, head); + }); + } -const eq = __webpack_require__(298) -const neq = __webpack_require__(873) -const gt = __webpack_require__(486) -const gte = __webpack_require__(167) -const lt = __webpack_require__(586) -const lte = __webpack_require__(898) + function onConnect(res, socket, head) { + connectReq.removeAllListeners(); + socket.removeAllListeners(); -const cmp = (a, op, b, loose) => { - switch (op) { - case '===': - if (typeof a === 'object') - a = a.version - if (typeof b === 'object') - b = b.version - return a === b + 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); + } - case '!==': - if (typeof a === 'object') - a = a.version - if (typeof b === 'object') - b = b.version - return a !== b + function onError(cause) { + connectReq.removeAllListeners(); - case '': - case '=': - case '==': - return eq(a, b, loose) + 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); + } +}; - case '!=': - return neq(a, b, loose) +TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { + var pos = this.sockets.indexOf(socket) + if (pos === -1) { + return; + } + this.sockets.splice(pos, 1); - case '>': - return gt(a, b, loose) + 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); + }); + } +}; - case '>=': - return gte(a, b, loose) +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 + }); - case '<': - return lt(a, b, loose) + // 0 is dummy port for v0.6 + var secureSocket = tls.connect(0, tlsOptions); + self.sockets[self.sockets.indexOf(socket)] = secureSocket; + cb(secureSocket); + }); +} - case '<=': - return lte(a, b, loose) - default: - throw new TypeError(`Invalid operator: ${op}`) +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 } -module.exports = cmp - - -/***/ }), - -/***/ 760: -/***/ (function(module) { - -const numeric = /^[0-9]+$/ -const compareIdentifiers = (a, b) => { - const anum = numeric.test(a) - const bnum = numeric.test(b) - if (anum && bnum) { - a = +a - b = +b +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 a === b ? 0 - : (anum && !bnum) ? -1 - : (bnum && !anum) ? 1 - : a < b ? -1 - : 1 + return target; } -const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a) -module.exports = { - compareIdentifiers, - rcompareIdentifiers +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 /***/ }), -/***/ 794: -/***/ (function(module) { - -module.exports = require("stream"); - -/***/ }), - -/***/ 803: -/***/ (function(module, __unusedexports, __webpack_require__) { - -const SemVer = __webpack_require__(65) -const minor = (a, loose) => new SemVer(a, loose).minor -module.exports = minor - - -/***/ }), - -/***/ 811: -/***/ (function(module, __unusedexports, __webpack_require__) { +/***/ 2707: +/***/ ((module) => { -const SemVer = __webpack_require__(65) -const Range = __webpack_require__(124) - -const maxSatisfying = (versions, range, options) => { - let max = null - let maxSV = null - let rangeObj = null - try { - rangeObj = new Range(range, options) - } catch (er) { - return null - } - versions.forEach((v) => { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!max || maxSV.compare(v) === -1) { - // compare(max, v, true) - max = v - maxSV = new SemVer(max, options) - } - } - }) - return max +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ +var byteToHex = []; +for (var i = 0; i < 256; ++i) { + byteToHex[i] = (i + 0x100).toString(16).substr(1); } -module.exports = maxSatisfying - -/***/ }), +function bytesToUuid(buf, offset) { + var i = offset || 0; + var bth = byteToHex; + // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4 + return ([ + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]] + ]).join(''); +} -/***/ 818: -/***/ (function(module) { +module.exports = bytesToUuid; -module.exports = require("tls"); /***/ }), -/***/ 822: -/***/ (function(module, __unusedexports, __webpack_require__) { +/***/ 5859: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const parse = __webpack_require__(830) -const eq = __webpack_require__(298) +// Unique ID creation requires a high quality random # generator. In node.js +// this is pretty straight-forward - we use the crypto API. -const diff = (version1, version2) => { - if (eq(version1, version2)) { - return null - } else { - const v1 = parse(version1) - const v2 = parse(version2) - const hasPre = v1.prerelease.length || v2.prerelease.length - const prefix = hasPre ? 'pre' : '' - const defaultResult = hasPre ? 'prerelease' : '' - for (const key in v1) { - if (key === 'major' || key === 'minor' || key === 'patch') { - if (v1[key] !== v2[key]) { - return prefix + key - } - } - } - return defaultResult // may be undefined - } -} -module.exports = diff +var crypto = __nccwpck_require__(3373); + +module.exports = function nodeRNG() { + return crypto.randomBytes(16); +}; /***/ }), -/***/ 826: -/***/ (function(module, __unusedexports, __webpack_require__) { +/***/ 824: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -var rng = __webpack_require__(139); -var bytesToUuid = __webpack_require__(722); +var rng = __nccwpck_require__(5859); +var bytesToUuid = __nccwpck_require__(2707); function v4(options, buf, offset) { var i = buf && offset || 0; @@ -7494,845 +7479,831 @@ module.exports = v4; /***/ }), -/***/ 830: -/***/ (function(module, __unusedexports, __webpack_require__) { - -const {MAX_LENGTH} = __webpack_require__(181) -const { re, t } = __webpack_require__(976) -const SemVer = __webpack_require__(65) - -const parseOptions = __webpack_require__(143) -const parse = (version, options) => { - options = parseOptions(options) - - if (version instanceof SemVer) { - return version - } - - if (typeof version !== 'string') { - return null - } - - if (version.length > MAX_LENGTH) { - return null - } - - const r = options.loose ? re[t.LOOSE] : re[t.FULL] - if (!r.test(version)) { - return null - } - - try { - return new SemVer(version, options) - } catch (er) { - return null - } -} - -module.exports = parse - - -/***/ }), - -/***/ 873: -/***/ (function(module, __unusedexports, __webpack_require__) { - -const compare = __webpack_require__(874) -const neq = (a, b, loose) => compare(a, b, loose) !== 0 -module.exports = neq - - -/***/ }), - -/***/ 874: -/***/ (function(module, __unusedexports, __webpack_require__) { - -const SemVer = __webpack_require__(65) -const compare = (a, b, loose) => - new SemVer(a, loose).compare(new SemVer(b, loose)) - -module.exports = compare - - -/***/ }), - -/***/ 876: -/***/ (function(module, __unusedexports, __webpack_require__) { - -// just pre-load all the stuff that index.js lazily exports -const internalRe = __webpack_require__(976) -module.exports = { - re: internalRe.re, - src: internalRe.src, - tokens: internalRe.t, - SEMVER_SPEC_VERSION: __webpack_require__(181).SEMVER_SPEC_VERSION, - SemVer: __webpack_require__(65), - compareIdentifiers: __webpack_require__(760).compareIdentifiers, - rcompareIdentifiers: __webpack_require__(760).rcompareIdentifiers, - parse: __webpack_require__(830), - valid: __webpack_require__(714), - clean: __webpack_require__(503), - inc: __webpack_require__(928), - diff: __webpack_require__(822), - major: __webpack_require__(744), - minor: __webpack_require__(803), - patch: __webpack_require__(489), - prerelease: __webpack_require__(968), - compare: __webpack_require__(874), - rcompare: __webpack_require__(630), - compareLoose: __webpack_require__(283), - compareBuild: __webpack_require__(16), - sort: __webpack_require__(120), - rsort: __webpack_require__(593), - gt: __webpack_require__(486), - lt: __webpack_require__(586), - eq: __webpack_require__(298), - neq: __webpack_require__(873), - gte: __webpack_require__(167), - lte: __webpack_require__(898), - cmp: __webpack_require__(752), - coerce: __webpack_require__(499), - Comparator: __webpack_require__(174), - Range: __webpack_require__(124), - satisfies: __webpack_require__(310), - toComparators: __webpack_require__(20), - maxSatisfying: __webpack_require__(811), - minSatisfying: __webpack_require__(740), - minVersion: __webpack_require__(164), - validRange: __webpack_require__(480), - outside: __webpack_require__(462), - gtr: __webpack_require__(531), - ltr: __webpack_require__(323), - intersects: __webpack_require__(259), - simplifyRange: __webpack_require__(877), - subset: __webpack_require__(999), -} - - -/***/ }), +/***/ 4091: +/***/ ((module) => { -/***/ 877: -/***/ (function(module, __unusedexports, __webpack_require__) { +"use strict"; -// given a set of versions and a range, create a "simplified" range -// that includes the same versions that the original range does -// If the original range is shorter than the simplified one, return that. -const satisfies = __webpack_require__(310) -const compare = __webpack_require__(874) -module.exports = (versions, range, options) => { - const set = [] - let min = null - let prev = null - const v = versions.sort((a, b) => compare(a, b, options)) - for (const version of v) { - const included = satisfies(version, range, options) - if (included) { - prev = version - if (!min) - min = version - } else { - if (prev) { - set.push([min, prev]) - } - prev = null - min = null +module.exports = function (Yallist) { + Yallist.prototype[Symbol.iterator] = function* () { + for (let walker = this.head; walker; walker = walker.next) { + yield walker.value } } - if (min) - set.push([min, null]) - - const ranges = [] - for (const [min, max] of set) { - if (min === max) - ranges.push(min) - else if (!max && min === v[0]) - ranges.push('*') - else if (!max) - ranges.push(`>=${min}`) - else if (min === v[0]) - ranges.push(`<=${max}`) - else - ranges.push(`${min} - ${max}`) - } - const simplified = ranges.join(' || ') - const original = typeof range.raw === 'string' ? range.raw : String(range) - return simplified.length < original.length ? simplified : range } /***/ }), -/***/ 884: -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 665: +/***/ ((module, __unused_webpack_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.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.deleteKey = exports.importKey = exports.PRIVATE_KEY_FILE = void 0; -const fs = __importStar(__webpack_require__(747)); -const path = __importStar(__webpack_require__(622)); -const io = __importStar(__webpack_require__(1)); -const exec = __importStar(__webpack_require__(986)); -const util = __importStar(__webpack_require__(322)); -exports.PRIVATE_KEY_FILE = path.join(util.getTempDir(), 'private-key.asc'); -const PRIVATE_KEY_FINGERPRINT_REGEX = /\w{40}/; -function importKey(privateKey) { - return __awaiter(this, void 0, void 0, function* () { - fs.writeFileSync(exports.PRIVATE_KEY_FILE, privateKey, { - encoding: 'utf-8', - flag: 'w' - }); - let output = ''; - const options = { - silent: true, - listeners: { - stdout: (data) => { - output += data.toString(); - } - } - }; - yield exec.exec('gpg', ['--batch', '--import-options', 'import-show', '--import', exports.PRIVATE_KEY_FILE], options); - yield io.rmRF(exports.PRIVATE_KEY_FILE); - const match = output.match(PRIVATE_KEY_FINGERPRINT_REGEX); - return match && match[0]; - }); -} -exports.importKey = importKey; -function deleteKey(keyFingerprint) { - return __awaiter(this, void 0, void 0, function* () { - yield exec.exec('gpg', ['--batch', '--yes', '--delete-secret-keys', keyFingerprint], { - silent: true - }); - yield exec.exec('gpg', ['--batch', '--yes', '--delete-keys', keyFingerprint], { silent: true }); - }); +module.exports = Yallist + +Yallist.Node = Node +Yallist.create = Yallist + +function Yallist (list) { + var self = this + if (!(self instanceof Yallist)) { + self = new Yallist() + } + + self.tail = null + self.head = null + self.length = 0 + + if (list && typeof list.forEach === 'function') { + list.forEach(function (item) { + self.push(item) + }) + } else if (arguments.length > 0) { + for (var i = 0, l = arguments.length; i < l; i++) { + self.push(arguments[i]) + } + } + + return self } -exports.deleteKey = deleteKey; +Yallist.prototype.removeNode = function (node) { + if (node.list !== this) { + throw new Error('removing node which does not belong to this list') + } -/***/ }), + var next = node.next + var prev = node.prev -/***/ 898: -/***/ (function(module, __unusedexports, __webpack_require__) { + if (next) { + next.prev = prev + } -const compare = __webpack_require__(874) -const lte = (a, b, loose) => compare(a, b, loose) <= 0 -module.exports = lte + if (prev) { + prev.next = next + } + + if (node === this.head) { + this.head = next + } + if (node === this.tail) { + this.tail = prev + } + node.list.length-- + node.next = null + node.prev = null + node.list = null -/***/ }), + return next +} -/***/ 928: -/***/ (function(module, __unusedexports, __webpack_require__) { +Yallist.prototype.unshiftNode = function (node) { + if (node === this.head) { + return + } -const SemVer = __webpack_require__(65) + if (node.list) { + node.list.removeNode(node) + } -const inc = (version, release, options, identifier) => { - if (typeof (options) === 'string') { - identifier = options - options = undefined + var head = this.head + node.list = this + node.next = head + if (head) { + head.prev = node } - try { - return new SemVer(version, options).inc(release, identifier).version - } catch (er) { - return null + this.head = node + if (!this.tail) { + this.tail = node } + this.length++ } -module.exports = inc +Yallist.prototype.pushNode = function (node) { + if (node === this.tail) { + return + } -/***/ }), + if (node.list) { + node.list.removeNode(node) + } -/***/ 950: -/***/ (function(__unusedmodule, exports) { + var tail = this.tail + node.list = this + node.prev = tail + if (tail) { + tail.next = node + } -"use strict"; + this.tail = node + if (!this.head) { + this.head = node + } + this.length++ +} -Object.defineProperty(exports, "__esModule", { value: true }); -function getProxyUrl(reqUrl) { - let usingSsl = reqUrl.protocol === 'https:'; - let proxyUrl; - if (checkBypass(reqUrl)) { - return proxyUrl; - } - let proxyVar; - if (usingSsl) { - proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY']; - } - else { - proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY']; - } - if (proxyVar) { - proxyUrl = new URL(proxyVar); - } - return proxyUrl; +Yallist.prototype.push = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + push(this, arguments[i]) + } + return this.length } -exports.getProxyUrl = getProxyUrl; -function checkBypass(reqUrl) { - if (!reqUrl.hostname) { - return false; - } - let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; - if (!noProxy) { - return false; - } - // Determine the request port - let reqPort; - if (reqUrl.port) { - reqPort = Number(reqUrl.port); - } - else if (reqUrl.protocol === 'http:') { - reqPort = 80; - } - else if (reqUrl.protocol === 'https:') { - reqPort = 443; - } - // Format the request hostname and hostname with port - let upperReqHosts = [reqUrl.hostname.toUpperCase()]; - if (typeof reqPort === 'number') { - upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); - } - // Compare request host against noproxy - for (let upperNoProxyItem of noProxy - .split(',') - .map(x => x.trim().toUpperCase()) - .filter(x => x)) { - if (upperReqHosts.some(x => x === upperNoProxyItem)) { - return true; - } - } - return false; + +Yallist.prototype.unshift = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + unshift(this, arguments[i]) + } + return this.length } -exports.checkBypass = checkBypass; +Yallist.prototype.pop = function () { + if (!this.tail) { + return undefined + } + + var res = this.tail.value + this.tail = this.tail.prev + if (this.tail) { + this.tail.next = null + } else { + this.head = null + } + this.length-- + return res +} -/***/ }), +Yallist.prototype.shift = function () { + if (!this.head) { + return undefined + } -/***/ 968: -/***/ (function(module, __unusedexports, __webpack_require__) { + var res = this.head.value + this.head = this.head.next + if (this.head) { + this.head.prev = null + } else { + this.tail = null + } + this.length-- + return res +} -const parse = __webpack_require__(830) -const prerelease = (version, options) => { - const parsed = parse(version, options) - return (parsed && parsed.prerelease.length) ? parsed.prerelease : null +Yallist.prototype.forEach = function (fn, thisp) { + thisp = thisp || this + for (var walker = this.head, i = 0; walker !== null; i++) { + fn.call(thisp, walker.value, i, this) + walker = walker.next + } +} + +Yallist.prototype.forEachReverse = function (fn, thisp) { + thisp = thisp || this + for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { + fn.call(thisp, walker.value, i, this) + walker = walker.prev + } +} + +Yallist.prototype.get = function (n) { + for (var i = 0, walker = this.head; walker !== null && i < n; i++) { + // abort out of the list early if we hit a cycle + walker = walker.next + } + if (i === n && walker !== null) { + return walker.value + } } -module.exports = prerelease +Yallist.prototype.getReverse = function (n) { + for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { + // abort out of the list early if we hit a cycle + walker = walker.prev + } + if (i === n && walker !== null) { + return walker.value + } +} -/***/ }), +Yallist.prototype.map = function (fn, thisp) { + thisp = thisp || this + var res = new Yallist() + for (var walker = this.head; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)) + walker = walker.next + } + return res +} -/***/ 976: -/***/ (function(module, exports, __webpack_require__) { +Yallist.prototype.mapReverse = function (fn, thisp) { + thisp = thisp || this + var res = new Yallist() + for (var walker = this.tail; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)) + walker = walker.prev + } + return res +} -const { MAX_SAFE_COMPONENT_LENGTH } = __webpack_require__(181) -const debug = __webpack_require__(548) -exports = module.exports = {} +Yallist.prototype.reduce = function (fn, initial) { + var acc + var walker = this.head + if (arguments.length > 1) { + acc = initial + } else if (this.head) { + walker = this.head.next + acc = this.head.value + } else { + throw new TypeError('Reduce of empty list with no initial value') + } -// The actual regexps go on exports.re -const re = exports.re = [] -const src = exports.src = [] -const t = exports.t = {} -let R = 0 + for (var i = 0; walker !== null; i++) { + acc = fn(acc, walker.value, i) + walker = walker.next + } -const createToken = (name, value, isGlobal) => { - const index = R++ - debug(index, value) - t[name] = index - src[index] = value - re[index] = new RegExp(value, isGlobal ? 'g' : undefined) + return acc } -// The following Regular Expressions can be used for tokenizing, -// validating, and parsing SemVer version strings. - -// ## Numeric Identifier -// A single `0`, or a non-zero digit followed by zero or more digits. - -createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*') -createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+') +Yallist.prototype.reduceReverse = function (fn, initial) { + var acc + var walker = this.tail + if (arguments.length > 1) { + acc = initial + } else if (this.tail) { + walker = this.tail.prev + acc = this.tail.value + } else { + throw new TypeError('Reduce of empty list with no initial value') + } -// ## Non-numeric Identifier -// Zero or more digits, followed by a letter or hyphen, and then zero or -// more letters, digits, or hyphens. + for (var i = this.length - 1; walker !== null; i--) { + acc = fn(acc, walker.value, i) + walker = walker.prev + } -createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*') + return acc +} -// ## Main Version -// Three dot-separated numeric identifiers. +Yallist.prototype.toArray = function () { + var arr = new Array(this.length) + for (var i = 0, walker = this.head; walker !== null; i++) { + arr[i] = walker.value + walker = walker.next + } + return arr +} -createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + - `(${src[t.NUMERICIDENTIFIER]})\\.` + - `(${src[t.NUMERICIDENTIFIER]})`) +Yallist.prototype.toArrayReverse = function () { + var arr = new Array(this.length) + for (var i = 0, walker = this.tail; walker !== null; i++) { + arr[i] = walker.value + walker = walker.prev + } + return arr +} -createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + - `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + - `(${src[t.NUMERICIDENTIFIERLOOSE]})`) +Yallist.prototype.slice = function (from, to) { + to = to || this.length + if (to < 0) { + to += this.length + } + from = from || 0 + if (from < 0) { + from += this.length + } + var ret = new Yallist() + if (to < from || to < 0) { + return ret + } + if (from < 0) { + from = 0 + } + if (to > this.length) { + to = this.length + } + for (var i = 0, walker = this.head; walker !== null && i < from; i++) { + walker = walker.next + } + for (; walker !== null && i < to; i++, walker = walker.next) { + ret.push(walker.value) + } + return ret +} -// ## Pre-release Version Identifier -// A numeric identifier, or a non-numeric identifier. +Yallist.prototype.sliceReverse = function (from, to) { + to = to || this.length + if (to < 0) { + to += this.length + } + from = from || 0 + if (from < 0) { + from += this.length + } + var ret = new Yallist() + if (to < from || to < 0) { + return ret + } + if (from < 0) { + from = 0 + } + if (to > this.length) { + to = this.length + } + for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { + walker = walker.prev + } + for (; walker !== null && i > from; i--, walker = walker.prev) { + ret.push(walker.value) + } + return ret +} -createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] -}|${src[t.NONNUMERICIDENTIFIER]})`) +Yallist.prototype.splice = function (start, deleteCount, ...nodes) { + if (start > this.length) { + start = this.length - 1 + } + if (start < 0) { + start = this.length + start; + } -createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] -}|${src[t.NONNUMERICIDENTIFIER]})`) + for (var i = 0, walker = this.head; walker !== null && i < start; i++) { + walker = walker.next + } -// ## Pre-release Version -// Hyphen, followed by one or more dot-separated pre-release version -// identifiers. + var ret = [] + for (var i = 0; walker && i < deleteCount; i++) { + ret.push(walker.value) + walker = this.removeNode(walker) + } + if (walker === null) { + walker = this.tail + } -createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] -}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`) + if (walker !== this.head && walker !== this.tail) { + walker = walker.prev + } -createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] -}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`) + for (var i = 0; i < nodes.length; i++) { + walker = insert(this, walker, nodes[i]) + } + return ret; +} -// ## Build Metadata Identifier -// Any combination of digits, letters, or hyphens. +Yallist.prototype.reverse = function () { + var head = this.head + var tail = this.tail + for (var walker = head; walker !== null; walker = walker.prev) { + var p = walker.prev + walker.prev = walker.next + walker.next = p + } + this.head = tail + this.tail = head + return this +} -createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+') +function insert (self, node, value) { + var inserted = node === self.head ? + new Node(value, null, node, self) : + new Node(value, node, node.next, self) -// ## Build Metadata -// Plus sign, followed by one or more period-separated build metadata -// identifiers. + if (inserted.next === null) { + self.tail = inserted + } + if (inserted.prev === null) { + self.head = inserted + } -createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] -}(?:\\.${src[t.BUILDIDENTIFIER]})*))`) + self.length++ -// ## Full Version String -// A main version, followed optionally by a pre-release version and -// build metadata. + return inserted +} -// Note that the only major, minor, patch, and pre-release sections of -// the version string are capturing groups. The build metadata is not a -// capturing group, because it should not ever be used in version -// comparison. +function push (self, item) { + self.tail = new Node(item, self.tail, null, self) + if (!self.head) { + self.head = self.tail + } + self.length++ +} -createToken('FULLPLAIN', `v?${src[t.MAINVERSION] -}${src[t.PRERELEASE]}?${ - src[t.BUILD]}?`) +function unshift (self, item) { + self.head = new Node(item, null, self.head, self) + if (!self.tail) { + self.tail = self.head + } + self.length++ +} -createToken('FULL', `^${src[t.FULLPLAIN]}$`) +function Node (value, prev, next, list) { + if (!(this instanceof Node)) { + return new Node(value, prev, next, list) + } -// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. -// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty -// common in the npm registry. -createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] -}${src[t.PRERELEASELOOSE]}?${ - src[t.BUILD]}?`) + this.list = list + this.value = value -createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`) + if (prev) { + prev.next = this + this.prev = prev + } else { + this.prev = null + } -createToken('GTLT', '((?:<|>)?=?)') + if (next) { + next.prev = this + this.next = next + } else { + this.next = null + } +} -// Something like "2.*" or "1.2.x". -// Note that "x.x" is a valid xRange identifer, meaning "any version" -// Only the first item is strictly required. -createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`) -createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`) +try { + // add if support for Symbol.iterator is present + __nccwpck_require__(4091)(Yallist) +} catch (er) {} -createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + - `(?:${src[t.PRERELEASE]})?${ - src[t.BUILD]}?` + - `)?)?`) -createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:${src[t.PRERELEASELOOSE]})?${ - src[t.BUILD]}?` + - `)?)?`) +/***/ }), -createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`) -createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`) +/***/ 2357: +/***/ ((module) => { -// Coercion. -// Extract anything that could conceivably be a part of a valid semver -createToken('COERCE', `${'(^|[^\\d])' + - '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + - `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + - `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + - `(?:$|[^\\d])`) -createToken('COERCERTL', src[t.COERCE], true) +"use strict"; +module.exports = require("assert");; -// Tilde ranges. -// Meaning is "reasonably at or greater than" -createToken('LONETILDE', '(?:~>?)') +/***/ }), -createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true) -exports.tildeTrimReplace = '$1~' +/***/ 3129: +/***/ ((module) => { -createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`) -createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`) +"use strict"; +module.exports = require("child_process");; -// Caret ranges. -// Meaning is "at least and backwards compatible with" -createToken('LONECARET', '(?:\\^)') +/***/ }), -createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true) -exports.caretTrimReplace = '$1^' +/***/ 3373: +/***/ ((module) => { -createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`) -createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`) +"use strict"; +module.exports = require("crypto");; -// A simple gt/lt/eq thing, or just "" to indicate "any version" -createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`) -createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`) +/***/ }), -// An expression to strip any whitespace between the gtlt and the thing -// it modifies, so that `> 1.2.3` ==> `>1.2.3` -createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] -}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true) -exports.comparatorTrimReplace = '$1$2$3' +/***/ 8614: +/***/ ((module) => { -// Something like `1.2.3 - 1.2.4` -// Note that these all use the loose form, because they'll be -// checked against either the strict or loose comparator form -// later. -createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + - `\\s+-\\s+` + - `(${src[t.XRANGEPLAIN]})` + - `\\s*$`) +"use strict"; +module.exports = require("events");; -createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + - `\\s+-\\s+` + - `(${src[t.XRANGEPLAINLOOSE]})` + - `\\s*$`) +/***/ }), -// Star ranges basically just allow anything at all. -createToken('STAR', '(<|>)?=?\\s*\\*') -// >=0.0.0 is like a star -createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$') -createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$') +/***/ 5747: +/***/ ((module) => { +"use strict"; +module.exports = require("fs");; /***/ }), -/***/ 979: -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 8605: +/***/ ((module) => { "use strict"; - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const core = __importStar(__webpack_require__(470)); -/** - * Internal class for retries - */ -class RetryHelper { - constructor(maxAttempts, minSeconds, maxSeconds) { - if (maxAttempts < 1) { - throw new Error('max attempts should be greater than or equal to 1'); - } - this.maxAttempts = maxAttempts; - this.minSeconds = Math.floor(minSeconds); - this.maxSeconds = Math.floor(maxSeconds); - if (this.minSeconds > this.maxSeconds) { - throw new Error('min seconds should be less than or equal to max seconds'); - } - } - execute(action, isRetryable) { - return __awaiter(this, void 0, void 0, function* () { - let attempt = 1; - while (attempt < this.maxAttempts) { - // Try - try { - return yield action(); - } - catch (err) { - if (isRetryable && !isRetryable(err)) { - throw err; - } - core.info(err.message); - } - // Sleep - const seconds = this.getSleepAmount(); - core.info(`Waiting ${seconds} seconds before trying again`); - yield this.sleep(seconds); - attempt++; - } - // Last attempt - return yield action(); - }); - } - getSleepAmount() { - return (Math.floor(Math.random() * (this.maxSeconds - this.minSeconds + 1)) + - this.minSeconds); - } - sleep(seconds) { - return __awaiter(this, void 0, void 0, function* () { - return new Promise(resolve => setTimeout(resolve, seconds * 1000)); - }); - } -} -exports.RetryHelper = RetryHelper; -//# sourceMappingURL=retry-helper.js.map +module.exports = require("http");; /***/ }), -/***/ 986: -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 7211: +/***/ ((module) => { "use strict"; - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const tr = __importStar(__webpack_require__(9)); -/** - * 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 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; -//# sourceMappingURL=exec.js.map +module.exports = require("https");; /***/ }), -/***/ 999: -/***/ (function(module, __unusedexports, __webpack_require__) { +/***/ 1631: +/***/ ((module) => { -const Range = __webpack_require__(124) -const { ANY } = __webpack_require__(174) -const satisfies = __webpack_require__(310) -const compare = __webpack_require__(874) +"use strict"; +module.exports = require("net");; -// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff: -// - Every simple range `r1, r2, ...` is a subset of some `R1, R2, ...` -// -// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff: -// - If c is only the ANY comparator -// - If C is only the ANY comparator, return true -// - Else return false -// - Let EQ be the set of = comparators in c -// - If EQ is more than one, return true (null set) -// - Let GT be the highest > or >= comparator in c -// - Let LT be the lowest < or <= comparator in c -// - If GT and LT, and GT.semver > LT.semver, return true (null set) -// - If EQ -// - If GT, and EQ does not satisfy GT, return true (null set) -// - If LT, and EQ does not satisfy LT, return true (null set) -// - If EQ satisfies every C, return true -// - Else return false -// - If GT -// - If GT.semver is lower than any > or >= comp in C, return false -// - If GT is >=, and GT.semver does not satisfy every C, return false -// - If LT -// - If LT.semver is greater than any < or <= comp in C, return false -// - If LT is <=, and LT.semver does not satisfy every C, return false -// - If any C is a = range, and GT or LT are set, return false -// - Else return true +/***/ }), + +/***/ 2087: +/***/ ((module) => { -const subset = (sub, dom, options) => { - if (sub === dom) - return true +"use strict"; +module.exports = require("os");; - sub = new Range(sub, options) - dom = new Range(dom, options) - let sawNonNull = false +/***/ }), - OUTER: for (const simpleSub of sub.set) { - for (const simpleDom of dom.set) { - const isSub = simpleSubset(simpleSub, simpleDom, options) - sawNonNull = sawNonNull || isSub !== null - if (isSub) - continue OUTER - } - // the null set is a subset of everything, but null simple ranges in - // a complex range should be ignored. so if we saw a non-null range, - // then we know this isn't a subset, but if EVERY simple range was null, - // then it is a subset. - if (sawNonNull) - return false - } - return true -} +/***/ 5622: +/***/ ((module) => { -const simpleSubset = (sub, dom, options) => { - if (sub === dom) - return true +"use strict"; +module.exports = require("path");; - if (sub.length === 1 && sub[0].semver === ANY) - return dom.length === 1 && dom[0].semver === ANY +/***/ }), - const eqSet = new Set() - let gt, lt - for (const c of sub) { - if (c.operator === '>' || c.operator === '>=') - gt = higherGT(gt, c, options) - else if (c.operator === '<' || c.operator === '<=') - lt = lowerLT(lt, c, options) - else - eqSet.add(c.semver) - } +/***/ 2413: +/***/ ((module) => { - if (eqSet.size > 1) - return null +"use strict"; +module.exports = require("stream");; - let gtltComp - if (gt && lt) { - gtltComp = compare(gt.semver, lt.semver, options) - if (gtltComp > 0) - return null - else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) - return null - } +/***/ }), - // will iterate one or zero times - for (const eq of eqSet) { - if (gt && !satisfies(eq, String(gt), options)) - return null +/***/ 8818: +/***/ ((module) => { - if (lt && !satisfies(eq, String(lt), options)) - return null +"use strict"; +module.exports = require("tls");; - for (const c of dom) { - if (!satisfies(eq, String(c), options)) - return false - } +/***/ }), - return true - } +/***/ 1669: +/***/ ((module) => { - let higher, lower - let hasDomLT, hasDomGT - for (const c of dom) { - hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>=' - hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<=' - if (gt) { - if (c.operator === '>' || c.operator === '>=') { - higher = higherGT(gt, c, options) - if (higher === c && higher !== gt) - return false - } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) - return false +"use strict"; +module.exports = require("util");; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __nccwpck_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ var threw = true; +/******/ try { +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __nccwpck_require__); +/******/ threw = false; +/******/ } finally { +/******/ if(threw) delete __webpack_module_cache__[moduleId]; +/******/ } +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nccwpck_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __nccwpck_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* 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 + "/";/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXTERNAL MODULE: ./node_modules/@actions/core/lib/core.js +var lib_core = __nccwpck_require__(2186); +// EXTERNAL MODULE: external "fs" +var external_fs_ = __nccwpck_require__(5747); +// EXTERNAL MODULE: external "path" +var external_path_ = __nccwpck_require__(5622); +// EXTERNAL MODULE: ./node_modules/@actions/io/lib/io.js +var lib_io = __nccwpck_require__(7436); +// EXTERNAL MODULE: ./node_modules/@actions/exec/lib/exec.js +var lib_exec = __nccwpck_require__(1514); +// EXTERNAL MODULE: external "os" +var external_os_ = __nccwpck_require__(2087); +var external_os_default = /*#__PURE__*/__nccwpck_require__.n(external_os_); +// EXTERNAL MODULE: ./node_modules/semver/index.js +var node_modules_semver = __nccwpck_require__(1383); +// EXTERNAL MODULE: ./node_modules/@actions/tool-cache/lib/tool-cache.js +var tool_cache = __nccwpck_require__(7784); +;// CONCATENATED MODULE: ./src/util.ts +var __awaiter = (undefined && undefined.__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()); + }); +}; + + + + + + +function getTempDir() { + let tempDirectory = process.env['RUNNER_TEMP'] || external_os_default().tmpdir(); + return tempDirectory; +} +function getBooleanInput(inputName, defaultValue = false) { + return (core.getInput(inputName) || String(defaultValue)).toUpperCase() === 'TRUE'; +} +function getVersionFromToolcachePath(toolPath) { + if (toolPath) { + return path.basename(path.dirname(toolPath)); } - if (lt) { - if (c.operator === '<' || c.operator === '<=') { - lower = lowerLT(lt, c, options) - if (lower === c && lower !== lt) - return false - } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) - return false + return toolPath; +} +function extractJdkFile(toolPath, extension) { + return __awaiter(this, void 0, void 0, function* () { + if (!extension) { + extension = toolPath.endsWith('.tar.gz') ? 'tar.gz' : path.extname(toolPath); + if (extension.startsWith('.')) { + extension = extension.substring(1); + } + } + switch (extension) { + case 'tar.gz': + case 'tar': + return yield tc.extractTar(toolPath); + case 'zip': + return yield tc.extractZip(toolPath); + default: + return yield tc.extract7z(toolPath); + } + }); +} +function getDownloadArchiveExtension() { + return process.platform === 'win32' ? 'zip' : 'tar.gz'; +} +function isVersionSatisfies(range, version) { + var _a; + if (semver.valid(range)) { + // if full version with build digit is provided as a range (such as '1.2.3+4') + // we should check for exact equal via compareBuild + // since semver.satisfies doesn't handle 4th digit + const semRange = semver.parse(range); + if (semRange && ((_a = semRange.build) === null || _a === void 0 ? void 0 : _a.length) > 0) { + return semver.compareBuild(range, version) === 0; + } } - if (!c.operator && (lt || gt) && gtltComp !== 0) - return false - } + return semver.satisfies(version, range); +} +function getToolcachePath(toolName, version, architecture) { + var _a; + const toolcacheRoot = (_a = process.env['RUNNER_TOOL_CACHE']) !== null && _a !== void 0 ? _a : ''; + const fullPath = path.join(toolcacheRoot, toolName, version, architecture); + if (fs.existsSync(fullPath)) { + return fullPath; + } + return null; +} - // if there was a < or >, and nothing in the dom, then must be false - // UNLESS it was limited by another range in the other direction. - // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0 - if (gt && hasDomLT && !lt && gtltComp !== 0) - return false +;// CONCATENATED MODULE: ./src/gpg.ts +var gpg_awaiter = (undefined && undefined.__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()); + }); +}; - if (lt && hasDomGT && !gt && gtltComp !== 0) - return false - return true -} -// >=1.2.3 is lower than >1.2.3 -const higherGT = (a, b, options) => { - if (!a) - return b - const comp = compare(a.semver, b.semver, options) - return comp > 0 ? a - : comp < 0 ? b - : b.operator === '>' && a.operator === '>=' ? b - : a -} -// <=1.2.3 is higher than <1.2.3 -const lowerLT = (a, b, options) => { - if (!a) - return b - const comp = compare(a.semver, b.semver, options) - return comp < 0 ? a - : comp > 0 ? b - : b.operator === '<' && a.operator === '<=' ? b - : a + +const PRIVATE_KEY_FILE = external_path_.join(getTempDir(), 'private-key.asc'); +const PRIVATE_KEY_FINGERPRINT_REGEX = /\w{40}/; +function importKey(privateKey) { + return gpg_awaiter(this, void 0, void 0, function* () { + fs.writeFileSync(PRIVATE_KEY_FILE, privateKey, { + encoding: 'utf-8', + flag: 'w' + }); + let output = ''; + const options = { + silent: true, + listeners: { + stdout: (data) => { + output += data.toString(); + } + } + }; + yield exec.exec('gpg', ['--batch', '--import-options', 'import-show', '--import', PRIVATE_KEY_FILE], options); + yield io.rmRF(PRIVATE_KEY_FILE); + const match = output.match(PRIVATE_KEY_FINGERPRINT_REGEX); + return match && match[0]; + }); +} +function deleteKey(keyFingerprint) { + return gpg_awaiter(this, void 0, void 0, function* () { + yield lib_exec.exec('gpg', ['--batch', '--yes', '--delete-secret-keys', keyFingerprint], { + silent: true + }); + yield lib_exec.exec('gpg', ['--batch', '--yes', '--delete-keys', keyFingerprint], { silent: true }); + }); } -module.exports = subset +;// CONCATENATED MODULE: ./src/constants.ts +const MACOS_JAVA_CONTENT_POSTFIX = 'Contents/Home'; +const INPUT_JAVA_VERSION = 'java-version'; +const INPUT_ARCHITECTURE = 'architecture'; +const INPUT_JAVA_PACKAGE = 'java-package'; +const INPUT_DISTRIBUTION = 'distribution'; +const INPUT_JDK_FILE = 'jdkFile'; +const INPUT_CHECK_LATEST = 'check-latest'; +const INPUT_SERVER_ID = 'server-id'; +const INPUT_SERVER_USERNAME = 'server-username'; +const INPUT_SERVER_PASSWORD = 'server-password'; +const INPUT_SETTINGS_PATH = 'settings-path'; +const INPUT_OVERWRITE_SETTINGS = 'overwrite-settings'; +const INPUT_GPG_PRIVATE_KEY = 'gpg-private-key'; +const INPUT_GPG_PASSPHRASE = 'gpg-passphrase'; +const INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined; +const INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE'; +const STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint'; + +;// CONCATENATED MODULE: ./src/cleanup-java.ts +var cleanup_java_awaiter = (undefined && undefined.__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()); + }); +}; -/***/ }) -/******/ }); \ No newline at end of file +function run() { + return cleanup_java_awaiter(this, void 0, void 0, function* () { + if (lib_core.getInput(INPUT_GPG_PRIVATE_KEY, { required: false })) { + lib_core.info('Removing private key from keychain'); + try { + const keyFingerprint = lib_core.getState(STATE_GPG_PRIVATE_KEY_FINGERPRINT); + yield deleteKey(keyFingerprint); + } + catch (error) { + lib_core.setFailed('Failed to remove private key'); + } + } + }); +} +run(); + +})(); + +module.exports = __webpack_exports__; +/******/ })() +; \ No newline at end of file diff --git a/dist/setup/index.js b/dist/setup/index.js index d58e29d84..9355b1909 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -1,1664 +1,1667 @@ -module.exports = -/******/ (function(modules, runtime) { // webpackBootstrap -/******/ "use strict"; -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ __webpack_require__.ab = __dirname + "/"; -/******/ -/******/ // the startup function -/******/ function startup() { -/******/ // Load entry module and return exports -/******/ return __webpack_require__(811); -/******/ }; -/******/ -/******/ // run startup -/******/ return startup(); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */, -/* 1 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ 7351: +/***/ (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()); - }); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; }; -Object.defineProperty(exports, "__esModule", { value: true }); -const childProcess = __webpack_require__(129); -const path = __webpack_require__(622); -const util_1 = __webpack_require__(669); -const ioUtil = __webpack_require__(672); -const exec = util_1.promisify(childProcess.exec); -/** - * 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 } = 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() - ? 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; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const os = __importStar(__nccwpck_require__(2087)); +const utils_1 = __nccwpck_require__(5278); /** - * Moves a path. + * Commands * - * @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 + * Command Format: + * ::name key=value,key=value::message * - * @param inputPath path to remove + * Examples: + * ::warning::This is the message + * ::set-env name=MY_VAR::some value */ -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. - try { - if (yield ioUtil.isDirectory(inputPath, true)) { - yield exec(`rd /s /q "${inputPath}"`); - } - else { - yield exec(`del /f /a "${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 exec(`rm -rf "${inputPath}"`); - } - else { - yield ioUtil.unlink(inputPath); - } - } - }); +function issueCommand(command, properties, message) { + const cmd = new Command(command, properties, message); + process.stdout.write(cmd.toString() + os.EOL); } -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 - */ -function mkdirP(fsPath) { - return __awaiter(this, void 0, void 0, function* () { - yield ioUtil.mkdirP(fsPath); - }); +exports.issueCommand = issueCommand; +function issue(name, message = '') { + issueCommand(name, {}, message); } -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 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.`); - } - } +exports.issue = issue; +const CMD_STRING = '::'; +class Command { + constructor(command, properties, message) { + if (!command) { + command = 'missing.command'; } - try { - // 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('/') || (ioUtil.IS_WINDOWS && tool.includes('\\'))) { - 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); + 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)}`; } } } - // return the first match - for (const directory of directories) { - const filePath = yield ioUtil.tryGetExecutablePath(directory + path.sep + tool, extensions); - if (filePath) { - return filePath; - } - } - return ''; - } - catch (err) { - throw new Error(`which failed with message ${err.message}`); } - }); -} -exports.which = which; -function readCopyOptions(options) { - const force = options.force == null ? true : options.force; - const recursive = Boolean(options.recursive); - return { force, recursive }; + cmdStr += `${CMD_STRING}${escapeData(this.message)}`; + return cmdStr; + } } -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); - }); +function escapeData(s) { + return utils_1.toCommandValue(s) + .replace(/%/g, '%25') + .replace(/\r/g, '%0D') + .replace(/\n/g, '%0A'); } -// 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); - } - }); +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=io.js.map +//# sourceMappingURL=command.js.map /***/ }), -/* 2 */, -/* 3 */, -/* 4 */, -/* 5 */, -/* 6 */, -/* 7 */, -/* 8 */, -/* 9 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - - -var loader = __webpack_require__(457); -var dumper = __webpack_require__(685); - - -function deprecated(name) { - return function () { - throw new Error('Function ' + name + ' is deprecated and cannot be used.'); - }; -} - - -module.exports.Type = __webpack_require__(945); -module.exports.Schema = __webpack_require__(733); -module.exports.FAILSAFE_SCHEMA = __webpack_require__(265); -module.exports.JSON_SCHEMA = __webpack_require__(720); -module.exports.CORE_SCHEMA = __webpack_require__(611); -module.exports.DEFAULT_SAFE_SCHEMA = __webpack_require__(723); -module.exports.DEFAULT_FULL_SCHEMA = __webpack_require__(910); -module.exports.load = loader.load; -module.exports.loadAll = loader.loadAll; -module.exports.safeLoad = loader.safeLoad; -module.exports.safeLoadAll = loader.safeLoadAll; -module.exports.dump = dumper.dump; -module.exports.safeDump = dumper.safeDump; -module.exports.YAMLException = __webpack_require__(556); - -// Deprecated schema names from JS-YAML 2.0.x -module.exports.MINIMAL_SCHEMA = __webpack_require__(265); -module.exports.SAFE_SCHEMA = __webpack_require__(723); -module.exports.DEFAULT_SCHEMA = __webpack_require__(910); - -// Deprecated functions from JS-YAML 1.x.x -module.exports.scan = deprecated('scan'); -module.exports.parse = deprecated('parse'); -module.exports.compose = deprecated('compose'); -module.exports.addConstructor = deprecated('addConstructor'); - -/***/ }), -/* 10 */, -/* 11 */ -/***/ (function(__unusedmodule, exports) { +/***/ 2186: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const command_1 = __nccwpck_require__(7351); +const file_command_1 = __nccwpck_require__(717); +const utils_1 = __nccwpck_require__(5278); +const os = __importStar(__nccwpck_require__(2087)); +const path = __importStar(__nccwpck_require__(5622)); /** - * A surrogate is a code point that is in the range U+D800 to U+DFFF, inclusive. + * The code to exit an action */ -exports.Surrogate = /[\uD800-\uDFFF]/; +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 +//----------------------------------------------------------------------- /** - * A scalar value is a code point that is not a surrogate. + * 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 */ -exports.ScalarValue = /[\uD800-\uDFFF]/; +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function exportVariable(name, val) { + const convertedVal = utils_1.toCommandValue(val); + process.env[name] = convertedVal; + const filePath = process.env['GITHUB_ENV'] || ''; + if (filePath) { + const delimiter = '_GitHubActionsFileCommandDelimeter_'; + const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`; + file_command_1.issueCommand('ENV', commandValue); + } + else { + command_1.issueCommand('set-env', { name }, convertedVal); + } +} +exports.exportVariable = exportVariable; /** - * A noncharacter is a code point that is in the range U+FDD0 to U+FDEF, - * inclusive, or U+FFFE, U+FFFF, U+1FFFE, U+1FFFF, U+2FFFE, U+2FFFF, U+3FFFE, - * U+3FFFF, U+4FFFE, U+4FFFF, U+5FFFE, U+5FFFF, U+6FFFE, U+6FFFF, U+7FFFE, - * U+7FFFF, U+8FFFE, U+8FFFF, U+9FFFE, U+9FFFF, U+AFFFE, U+AFFFF, U+BFFFE, - * U+BFFFF, U+CFFFE, U+CFFFF, U+DFFFE, U+DFFFF, U+EFFFE, U+EFFFF, U+FFFFE, - * U+FFFFF, U+10FFFE, or U+10FFFF. + * Registers a secret which will get masked from logs + * @param secret value of the secret */ -exports.NonCharacter = /[\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]/; +function setSecret(secret) { + command_1.issueCommand('add-mask', {}, secret); +} +exports.setSecret = setSecret; /** - * An ASCII code point is a code point in the range U+0000 NULL to U+007F - * DELETE, inclusive. + * Prepends inputPath to the PATH (for this action and future actions) + * @param inputPath */ -exports.ASCIICodePoint = /[\u0000-\u007F]/; +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; /** - * An ASCII tab or newline is U+0009 TAB, U+000A LF, or U+000D CR. + * Gets the value of an input. The value is also trimmed. + * + * @param name name of the input to get + * @param options optional. See InputOptions. + * @returns string */ -exports.ASCIITabOrNewLine = /[\t\n\r]/; +function getInput(name, options) { + const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || ''; + if (options && options.required && !val) { + throw new Error(`Input required and not supplied: ${name}`); + } + return val.trim(); +} +exports.getInput = getInput; /** - * ASCII whitespace is U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, or - * U+0020 SPACE. + * 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 */ -exports.ASCIIWhiteSpace = /[\t\n\f\r ]/; +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function setOutput(name, value) { + command_1.issueCommand('set-output', { name }, value); +} +exports.setOutput = setOutput; /** - * A C0 control is a code point in the range U+0000 NULL to U+001F - * INFORMATION SEPARATOR ONE, inclusive. + * 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. + * */ -exports.C0Control = /[\u0000-\u001F]/; +function setCommandEcho(enabled) { + command_1.issue('echo', enabled ? 'on' : 'off'); +} +exports.setCommandEcho = setCommandEcho; +//----------------------------------------------------------------------- +// Results +//----------------------------------------------------------------------- /** - * A C0 control or space is a C0 control or U+0020 SPACE. + * 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 */ -exports.C0ControlOrSpace = /[\u0000-\u001F ]/; +function setFailed(message) { + process.exitCode = ExitCode.Failure; + error(message); +} +exports.setFailed = setFailed; +//----------------------------------------------------------------------- +// Logging Commands +//----------------------------------------------------------------------- /** - * A control is a C0 control or a code point in the range U+007F DELETE to - * U+009F APPLICATION PROGRAM COMMAND, inclusive. + * Gets whether Actions Step Debug is on or not */ -exports.Control = /[\u0000-\u001F\u007F-\u009F]/; -/** - * An ASCII digit is a code point in the range U+0030 (0) to U+0039 (9), - * inclusive. +function isDebug() { + return process.env['RUNNER_DEBUG'] === '1'; +} +exports.isDebug = isDebug; +/** + * Writes debug message to user log + * @param message debug message */ -exports.ASCIIDigit = /[0-9]/; +function debug(message) { + command_1.issueCommand('debug', {}, message); +} +exports.debug = debug; /** - * An ASCII upper hex digit is an ASCII digit or a code point in the range - * U+0041 (A) to U+0046 (F), inclusive. + * Adds an error issue + * @param message error issue message. Errors will be converted to string via toString() */ -exports.ASCIIUpperHexDigit = /[0-9A-F]/; +function error(message) { + command_1.issue('error', message instanceof Error ? message.toString() : message); +} +exports.error = error; /** - * An ASCII lower hex digit is an ASCII digit or a code point in the range - * U+0061 (a) to U+0066 (f), inclusive. + * Adds an warning issue + * @param message warning issue message. Errors will be converted to string via toString() */ -exports.ASCIILowerHexDigit = /[0-9a-f]/; +function warning(message) { + command_1.issue('warning', message instanceof Error ? message.toString() : message); +} +exports.warning = warning; /** - * An ASCII hex digit is an ASCII upper hex digit or ASCII lower hex digit. + * Writes info to log with console.log. + * @param message info message */ -exports.ASCIIHexDigit = /[0-9A-Fa-f]/; +function info(message) { + process.stdout.write(message + os.EOL); +} +exports.info = info; /** - * An ASCII upper alpha is a code point in the range U+0041 (A) to U+005A (Z), - * inclusive. + * Begin an output group. + * + * Output until the next `groupEnd` will be foldable in this group + * + * @param name The name of the output group */ -exports.ASCIIUpperAlpha = /[A-Z]/; +function startGroup(name) { + command_1.issue('group', name); +} +exports.startGroup = startGroup; /** - * An ASCII lower alpha is a code point in the range U+0061 (a) to U+007A (z), - * inclusive. + * End an output group. */ -exports.ASCIILowerAlpha = /[a-z]/; +function endGroup() { + command_1.issue('endgroup'); +} +exports.endGroup = endGroup; /** - * An ASCII alpha is an ASCII upper alpha or ASCII lower alpha. + * 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 */ -exports.ASCIIAlpha = /[A-Za-z]/; +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 +//----------------------------------------------------------------------- /** - * An ASCII alphanumeric is an ASCII digit or ASCII alpha. + * 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 */ -exports.ASCIIAlphanumeric = /[0-9A-Za-z]/; -//# sourceMappingURL=CodePoints.js.map +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function saveState(name, value) { + command_1.issueCommand('save-state', { name }, value); +} +exports.saveState = saveState; +/** + * Gets the value of an state set by this action's main execution. + * + * @param name name of the state to get + * @returns string + */ +function getState(name) { + return process.env[`STATE_${name}`] || ''; +} +exports.getState = getState; +//# sourceMappingURL=core.js.map /***/ }), -/* 12 */, -/* 13 */, -/* 14 */ -/***/ (function(module, __unusedexports, __webpack_require__) { -const SemVer = __webpack_require__(65) -const Range = __webpack_require__(124) +/***/ 717: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { -const maxSatisfying = (versions, range, options) => { - let max = null - let maxSV = null - let rangeObj = null - try { - rangeObj = new Range(range, options) - } catch (er) { - return null - } - versions.forEach((v) => { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!max || maxSV.compare(v) === -1) { - // compare(max, v, true) - max = v - maxSV = new SemVer(max, options) - } +"use strict"; + +// For internal use, subject to change. +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +// We use any as a valid input type +/* eslint-disable @typescript-eslint/no-explicit-any */ +const fs = __importStar(__nccwpck_require__(5747)); +const os = __importStar(__nccwpck_require__(2087)); +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}`); } - }) - return max + if (!fs.existsSync(filePath)) { + throw new Error(`Missing file at path: ${filePath}`); + } + fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, { + encoding: 'utf8' + }); } -module.exports = maxSatisfying - +exports.issueCommand = issueCommand; +//# sourceMappingURL=file-command.js.map /***/ }), -/* 15 */, -/* 16 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const SemVer = __webpack_require__(65) -const compareBuild = (a, b, loose) => { - const versionA = new SemVer(a, loose) - const versionB = new SemVer(b, loose) - return versionA.compare(versionB) || versionA.compareBuild(versionB) -} -module.exports = compareBuild - -/***/ }), -/* 17 */, -/* 18 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 5278: +/***/ ((__unused_webpack_module, exports) => { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var util_1 = __webpack_require__(918); +// We use any as a valid input type +/* eslint-disable @typescript-eslint/no-explicit-any */ +Object.defineProperty(exports, "__esModule", ({ value: true })); /** - * Represents a mixin that extends child nodes that can have siblings - * other than doctypes. This mixin is implemented by {@link Element} and - * {@link CharacterData}. + * Sanitizes an input into a string so it can be passed into issueCommand safely + * @param input input to sanitize into a string */ -var NonDocumentTypeChildNodeImpl = /** @class */ (function () { - function NonDocumentTypeChildNodeImpl() { +function toCommandValue(input) { + if (input === null || input === undefined) { + return ''; } - Object.defineProperty(NonDocumentTypeChildNodeImpl.prototype, "previousElementSibling", { - /** @inheritdoc */ - get: function () { - /** - * The previousElementSibling attribute’s getter must return the first - * preceding sibling that is an element, and null otherwise. - */ - var node = util_1.Cast.asNode(this)._previousSibling; - while (node) { - if (util_1.Guard.isElementNode(node)) - return node; - else - node = node._previousSibling; - } - return null; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NonDocumentTypeChildNodeImpl.prototype, "nextElementSibling", { - /** @inheritdoc */ - get: function () { - /** - * The nextElementSibling attribute’s getter must return the first - * following sibling that is an element, and null otherwise. - */ - var node = util_1.Cast.asNode(this)._nextSibling; - while (node) { - if (util_1.Guard.isElementNode(node)) - return node; - else - node = node._nextSibling; - } - return null; - }, - enumerable: true, - configurable: true - }); - return NonDocumentTypeChildNodeImpl; -}()); -exports.NonDocumentTypeChildNodeImpl = NonDocumentTypeChildNodeImpl; -//# sourceMappingURL=NonDocumentTypeChildNodeImpl.js.map + else if (typeof input === 'string' || input instanceof String) { + return input; + } + return JSON.stringify(input); +} +exports.toCommandValue = toCommandValue; +//# sourceMappingURL=utils.js.map /***/ }), -/* 19 */, -/* 20 */, -/* 21 */, -/* 22 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 1514: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; +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 __spread = (this && this.__spread) || function () { - for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); - return ar; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; }; -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(970); -var DOMException_1 = __webpack_require__(35); -var util_1 = __webpack_require__(918); -var CreateAlgorithm_1 = __webpack_require__(86); -var TreeAlgorithm_1 = __webpack_require__(873); -var BoundaryPointAlgorithm_1 = __webpack_require__(350); -var CharacterDataAlgorithm_1 = __webpack_require__(27); -var NodeAlgorithm_1 = __webpack_require__(541); -var MutationAlgorithm_1 = __webpack_require__(479); -var TextAlgorithm_1 = __webpack_require__(154); -/** - * Determines if the node's start boundary point is at its end boundary - * point. - * - * @param range - a range - */ -function range_collapsed(range) { - /** - * A range is collapsed if its start node is its end node and its start offset is its end offset. - */ - return (range._startNode === range._endNode && range._startOffset === range._endOffset); -} -exports.range_collapsed = range_collapsed; -/** - * Gets the root node of a range. - * - * @param range - a range - */ -function range_root(range) { - /** - * The root of a live range is the root of its start node. - */ - return TreeAlgorithm_1.tree_rootNode(range._startNode); -} -exports.range_root = range_root; -/** - * Determines if a node is fully contained in a range. - * - * @param node - a node - * @param range - a range - */ -function range_isContained(node, range) { - /** - * A node node is contained in a live range range if node’s root is range’s - * root, and (node, 0) is after range’s start, and (node, node’s length) is - * before range’s end. - */ - return (TreeAlgorithm_1.tree_rootNode(node) === range_root(range) && - BoundaryPointAlgorithm_1.boundaryPoint_position([node, 0], range._start) === interfaces_1.BoundaryPosition.After && - BoundaryPointAlgorithm_1.boundaryPoint_position([node, TreeAlgorithm_1.tree_nodeLength(node)], range._end) === interfaces_1.BoundaryPosition.Before); -} -exports.range_isContained = range_isContained; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const tr = __importStar(__nccwpck_require__(8159)); /** - * Determines if a node is partially contained in a range. + * Exec a command. + * Output will be streamed to the live console. + * Returns promise with return code * - * @param node - a node - * @param range - a range + * @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 exit code */ -function range_isPartiallyContained(node, range) { - /** - * A node is partially contained in a live range if it’s an inclusive - * ancestor of the live range’s start node but not its end node, - * or vice versa. - */ - var startCheck = TreeAlgorithm_1.tree_isAncestorOf(range._startNode, node, true); - var endCheck = TreeAlgorithm_1.tree_isAncestorOf(range._endNode, node, true); - return (startCheck && !endCheck) || (!startCheck && endCheck); +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.range_isPartiallyContained = range_isPartiallyContained; -/** - * Sets the start boundary point of a range. - * - * @param range - a range - * @param node - a node - * @param offset - an offset into node +exports.exec = exec; +//# sourceMappingURL=exec.js.map + +/***/ }), + +/***/ 8159: +/***/ (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()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const os = __importStar(__nccwpck_require__(2087)); +const events = __importStar(__nccwpck_require__(8614)); +const child = __importStar(__nccwpck_require__(3129)); +const path = __importStar(__nccwpck_require__(5622)); +const io = __importStar(__nccwpck_require__(7436)); +const ioUtil = __importStar(__nccwpck_require__(1962)); +/* 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. */ -function range_setTheStart(range, node, offset) { - /** - * 1. If node is a doctype, then throw an "InvalidNodeTypeError" DOMException. - * 2. If offset is greater than node’s length, then throw an "IndexSizeError" - * DOMException. - * 3. Let bp be the boundary point (node, offset). - * 4. If these steps were invoked as "set the start" - * 4.1. If bp is after the range’s end, or if range’s root is not equal to - * node’s root, set range’s end to bp. - * 4.2. Set range’s start to bp. - */ - if (util_1.Guard.isDocumentTypeNode(node)) { - throw new DOMException_1.InvalidNodeTypeError(); +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 || {}; } - if (offset > TreeAlgorithm_1.tree_nodeLength(node)) { - throw new DOMException_1.IndexSizeError(); + _debug(message) { + if (this.options.listeners && this.options.listeners.debug) { + this.options.listeners.debug(message); + } } - var bp = [node, offset]; - if (range_root(range) !== TreeAlgorithm_1.tree_rootNode(node) || - BoundaryPointAlgorithm_1.boundaryPoint_position(bp, range._end) === interfaces_1.BoundaryPosition.After) { - range._end = bp; + _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; } - range._start = bp; -} -exports.range_setTheStart = range_setTheStart; -/** - * Sets the end boundary point of a range. - * - * @param range - a range - * @param node - a node - * @param offset - an offset into node - */ -function range_setTheEnd(range, node, offset) { - /** - * 1. If node is a doctype, then throw an "InvalidNodeTypeError" DOMException. - * 2. If offset is greater than node’s length, then throw an "IndexSizeError" - * DOMException. - * 3. Let bp be the boundary point (node, offset). - * 4. If these steps were invoked as "set the end" - * 4.1. If bp is before the range’s start, or if range’s root is not equal - * to node’s root, set range’s start to bp. - * 4.2. Set range’s end to bp. - */ - if (util_1.Guard.isDocumentTypeNode(node)) { - throw new DOMException_1.InvalidNodeTypeError(); + _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); + } + strBuffer = s; + } + catch (err) { + // streaming lines to console is best effort. Don't fail a build. + this._debug(`error processing line. Failed with error ${err}`); + } } - if (offset > TreeAlgorithm_1.tree_nodeLength(node)) { - throw new DOMException_1.IndexSizeError(); + _getSpawnFileName() { + if (IS_WINDOWS) { + if (this._isCmdFile()) { + return process.env['COMSPEC'] || 'cmd.exe'; + } + } + return this.toolPath; } - var bp = [node, offset]; - if (range_root(range) !== TreeAlgorithm_1.tree_rootNode(node) || - BoundaryPointAlgorithm_1.boundaryPoint_position(bp, range._start) === interfaces_1.BoundaryPosition.Before) { - range._start = bp; + _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; } - range._end = bp; -} -exports.range_setTheEnd = range_setTheEnd; -/** - * Selects a node. - * - * @param range - a range - * @param node - a node - */ -function range_select(node, range) { - /** - * 1. Let parent be node’s parent. - * 2. If parent is null, then throw an "InvalidNodeTypeError" DOMException. - */ - var parent = node._parent; - if (parent === null) - throw new DOMException_1.InvalidNodeTypeError(); - /** - * 3. Let index be node’s index. - * 4. Set range’s start to boundary point (parent, index). - * 5. Set range’s end to boundary point (parent, index plus 1). - */ - var index = TreeAlgorithm_1.tree_index(node); - range._start = [parent, index]; - range._end = [parent, index + 1]; -} -exports.range_select = range_select; -/** - * EXtracts the contents of range as a document fragment. - * - * @param range - a range - */ -function range_extract(range) { - var e_1, _a, e_2, _b, e_3, _c; - /** - * 1. Let fragment be a new DocumentFragment node whose node document is - * range’s start node’s node document. - * 2. If range is collapsed, then return fragment. - */ - var fragment = CreateAlgorithm_1.create_documentFragment(range._startNode._nodeDocument); - if (range_collapsed(range)) - return fragment; - /** - * 3. Let original start node, original start offset, original end node, - * and original end offset be range’s start node, start offset, end node, - * and end offset, respectively. - */ - var originalStartNode = range._startNode; - var originalStartOffset = range._startOffset; - var originalEndNode = range._endNode; - var originalEndOffset = range._endOffset; - /** - * 4. If original start node is original end node, and they are a Text, - * ProcessingInstruction, or Comment node: - * 4.1. Let clone be a clone of original start node. - * 4.2. Set the data of clone to the result of substringing data with node - * original start node, offset original start offset, and count original end - * offset minus original start offset. - * 4.3. Append clone to fragment. - * 4.4. Replace data with node original start node, offset original start - * offset, count original end offset minus original start offset, and data - * the empty string. - * 4.5. Return fragment. - */ - if (originalStartNode === originalEndNode && - util_1.Guard.isCharacterDataNode(originalStartNode)) { - var clone = NodeAlgorithm_1.node_clone(originalStartNode); - clone._data = CharacterDataAlgorithm_1.characterData_substringData(originalStartNode, originalStartOffset, originalEndOffset - originalStartOffset); - MutationAlgorithm_1.mutation_append(clone, fragment); - CharacterDataAlgorithm_1.characterData_replaceData(originalStartNode, originalStartOffset, originalEndOffset - originalStartOffset, ''); - return fragment; + _endsWith(str, end) { + return str.endsWith(end); } - /** - * 5. Let common ancestor be original start node. - * 6. While common ancestor is not an inclusive ancestor of original end - * node, set common ancestor to its own parent. - */ - var commonAncestor = originalStartNode; - while (!TreeAlgorithm_1.tree_isAncestorOf(originalEndNode, commonAncestor, true)) { - if (commonAncestor._parent === null) { - throw new Error("Parent node is null."); - } - commonAncestor = commonAncestor._parent; + _isCmdFile() { + const upperToolPath = this.toolPath.toUpperCase(); + return (this._endsWith(upperToolPath, '.CMD') || + this._endsWith(upperToolPath, '.BAT')); } - /** - * 7. Let first partially contained child be null. - * 8. If original start node is not an inclusive ancestor of original end - * node, set first partially contained child to the first child of common - * ancestor that is partially contained in range. - */ - var firstPartiallyContainedChild = null; - if (!TreeAlgorithm_1.tree_isAncestorOf(originalEndNode, originalStartNode, true)) { - try { - for (var _d = __values(commonAncestor._children), _e = _d.next(); !_e.done; _e = _d.next()) { - var node = _e.value; - if (range_isPartiallyContained(node, range)) { - firstPartiallyContainedChild = node; - break; - } - } + _windowsQuoteCmdArg(arg) { + // for .exe, apply the normal quoting rules that libuv applies + if (!this._isCmdFile()) { + return this._uvQuoteCmdArg(arg); } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_e && !_e.done && (_a = _d.return)) _a.call(_d); - } - finally { if (e_1) throw e_1.error; } + // 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 '""'; } - } - /** - * 9. Let last partially contained child be null. - * 10. If original end node is not an inclusive ancestor of original start - * node, set last partially contained child to the last child of common - * ancestor that is partially contained in range. - */ - var lastPartiallyContainedChild = null; - if (!TreeAlgorithm_1.tree_isAncestorOf(originalStartNode, originalEndNode, true)) { - var children = __spread(commonAncestor._children); - for (var i = children.length - 1; i > 0; i--) { - var node = children[i]; - if (range_isPartiallyContained(node, range)) { - lastPartiallyContainedChild = node; + // 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; } } - } - /** - * 11. Let contained children be a list of all children of common ancestor - * that are contained in range, in tree order. - * 12. If any member of contained children is a doctype, then throw a - * "HierarchyRequestError" DOMException. - */ - var containedChildren = []; - try { - for (var _f = __values(commonAncestor._children), _g = _f.next(); !_g.done; _g = _f.next()) { - var child = _g.value; - if (range_isContained(child, range)) { - if (util_1.Guard.isDocumentTypeNode(child)) { - throw new DOMException_1.HierarchyRequestError(); - } - containedChildren.push(child); - } + // short-circuit if quotes not needed + if (!needsQuotes) { + return arg; } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_g && !_g.done && (_b = _f.return)) _b.call(_f); + // 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; + } } - finally { if (e_2) throw e_2.error; } - } - var newNode; - var newOffset; - if (TreeAlgorithm_1.tree_isAncestorOf(originalEndNode, originalStartNode, true)) { - /** - * 13. If original start node is an inclusive ancestor of original end node, - * set new node to original start node and new offset to original start - * offset. - */ - newNode = originalStartNode; - newOffset = originalStartOffset; + reverse += '"'; + return reverse + .split('') + .reverse() + .join(''); } - else { - /** - * 14. Otherwise: - * 14.1. Let reference node equal original start node. - * 14.2. While reference node’s parent is not null and is not an inclusive - * ancestor of original end node, set reference node to its parent. - * 14.3. Set new node to the parent of reference node, and new offset to - * one plus reference node’s index. - */ - var referenceNode = originalStartNode; - while (referenceNode._parent !== null && - !TreeAlgorithm_1.tree_isAncestorOf(originalEndNode, referenceNode._parent)) { - referenceNode = referenceNode._parent; + _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 '""'; } - /* istanbul ignore next */ - if (referenceNode._parent === null) { - /** - * If reference node’s parent is null, it would be the root of range, - * so would be an inclusive ancestor of original end node, and we could - * not reach this point. - */ - throw new Error("Parent node is null."); + if (!arg.includes(' ') && !arg.includes('\t') && !arg.includes('"')) { + // No quotation needed + return arg; } - newNode = referenceNode._parent; - newOffset = 1 + TreeAlgorithm_1.tree_index(referenceNode); - } - if (util_1.Guard.isCharacterDataNode(firstPartiallyContainedChild)) { - /** - * 15. If first partially contained child is a Text, ProcessingInstruction, - * or Comment node: - * 15.1. Let clone be a clone of original start node. - * 15.2. Set the data of clone to the result of substringing data with - * node original start node, offset original start offset, and count - * original start node’s length minus original start offset. - * 15.3. Append clone to fragment. - * 15.4. Replace data with node original start node, offset original - * start offset, count original start node’s length minus original start - * offset, and data the empty string. - */ - var clone = NodeAlgorithm_1.node_clone(originalStartNode); - clone._data = CharacterDataAlgorithm_1.characterData_substringData(originalStartNode, originalStartOffset, TreeAlgorithm_1.tree_nodeLength(originalStartNode) - originalStartOffset); - MutationAlgorithm_1.mutation_append(clone, fragment); - CharacterDataAlgorithm_1.characterData_replaceData(originalStartNode, originalStartOffset, TreeAlgorithm_1.tree_nodeLength(originalStartNode) - originalStartOffset, ''); - } - else if (firstPartiallyContainedChild !== null) { - /** - * 16. Otherwise, if first partially contained child is not null: - * 16.1. Let clone be a clone of first partially contained child. - * 16.2. Append clone to fragment. - * 16.3. Let subrange be a new live range whose start is (original start - * node, original start offset) and whose end is (first partially - * contained child, first partially contained child’s length). - * 16.4. Let subfragment be the result of extracting subrange. - * 16.5. Append subfragment to clone. - */ - var clone = NodeAlgorithm_1.node_clone(firstPartiallyContainedChild); - MutationAlgorithm_1.mutation_append(clone, fragment); - var subrange = CreateAlgorithm_1.create_range([originalStartNode, originalStartOffset], [firstPartiallyContainedChild, TreeAlgorithm_1.tree_nodeLength(firstPartiallyContainedChild)]); - var subfragment = range_extract(subrange); - MutationAlgorithm_1.mutation_append(subfragment, clone); - } - try { - /** - * 17. For each contained child in contained children, append contained - * child to fragment. - */ - for (var containedChildren_1 = __values(containedChildren), containedChildren_1_1 = containedChildren_1.next(); !containedChildren_1_1.done; containedChildren_1_1 = containedChildren_1.next()) { - var child = containedChildren_1_1.value; - MutationAlgorithm_1.mutation_append(child, fragment); + if (!arg.includes('"') && !arg.includes('\\')) { + // No embedded double quotes or backslashes, so I can just wrap + // quote marks around the whole thing. + return `"${arg}"`; } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (containedChildren_1_1 && !containedChildren_1_1.done && (_c = containedChildren_1.return)) _c.call(containedChildren_1); + // 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; + } } - finally { if (e_3) throw e_3.error; } + reverse += '"'; + return reverse + .split('') + .reverse() + .join(''); } - if (util_1.Guard.isCharacterDataNode(lastPartiallyContainedChild)) { - /** - * 18. If last partially contained child is a Text, ProcessingInstruction, - * or Comment node: - * 18.1. Let clone be a clone of original end node. - * 18.2. Set the data of clone to the result of substringing data with - * node original end node, offset 0, and count original end offset. - * 18.3. Append clone to fragment. - * 18.4. Replace data with node original end node, offset 0, count - * original end offset, and data the empty string. - */ - var clone = NodeAlgorithm_1.node_clone(originalEndNode); - clone._data = CharacterDataAlgorithm_1.characterData_substringData(originalEndNode, 0, originalEndOffset); - MutationAlgorithm_1.mutation_append(clone, fragment); - CharacterDataAlgorithm_1.characterData_replaceData(originalEndNode, 0, originalEndOffset, ''); + _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; } - else if (lastPartiallyContainedChild !== null) { - /** - * 19. Otherwise, if last partially contained child is not null: - * 19.1. Let clone be a clone of last partially contained child. - * 19.2. Append clone to fragment. - * 19.3. Let subrange be a new live range whose start is (last partially - * contained child, 0) and whose end is (original end node, original - * end offset). - * 19.4. Let subfragment be the result of extracting subrange. - * 19.5. Append subfragment to clone. - */ - var clone = NodeAlgorithm_1.node_clone(lastPartiallyContainedChild); - MutationAlgorithm_1.mutation_append(clone, fragment); - var subrange = CreateAlgorithm_1.create_range([lastPartiallyContainedChild, 0], [originalEndNode, originalEndOffset]); - var subfragment = range_extract(subrange); - MutationAlgorithm_1.mutation_append(subfragment, clone); + _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; } /** - * 20. Set range’s start and end to (new node, new offset). - */ - range._start = [newNode, newOffset]; - range._end = [newNode, newOffset]; - /** - * 21. Return fragment. - */ - return fragment; -} -exports.range_extract = range_extract; -/** - * Clones the contents of range as a document fragment. - * - * @param range - a range - */ -function range_cloneTheContents(range) { - var e_4, _a, e_5, _b, e_6, _c; - /** - * 1. Let fragment be a new DocumentFragment node whose node document - * is range’s start node’s node document. - * 2. If range is collapsed, then return fragment. + * 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 */ - var fragment = CreateAlgorithm_1.create_documentFragment(range._startNode._nodeDocument); - if (range_collapsed(range)) - return fragment; - /** - * 3. Let original start node, original start offset, original end node, - * and original end offset be range’s start node, start offset, end node, - * and end offset, respectively. - * 4. If original start node is original end node, and they are a Text, - * ProcessingInstruction, or Comment node: - * 4.1. Let clone be a clone of original start node. - * 4.2. Set the data of clone to the result of substringing data with node - * original start node, offset original start offset, and count original end - * offset minus original start offset. - * 4.3. Append clone to fragment. - * 4.5. Return fragment. - */ - var originalStartNode = range._startNode; - var originalStartOffset = range._startOffset; - var originalEndNode = range._endNode; - var originalEndOffset = range._endOffset; - if (originalStartNode === originalEndNode && - util_1.Guard.isCharacterDataNode(originalStartNode)) { - var clone = NodeAlgorithm_1.node_clone(originalStartNode); - clone._data = CharacterDataAlgorithm_1.characterData_substringData(originalStartNode, originalStartOffset, originalEndOffset - originalStartOffset); - MutationAlgorithm_1.mutation_append(clone, fragment); + 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) => { + 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); + }); + const fileName = this._getSpawnFileName(); + const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName)); + const 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); + } + this._processLineBuffer(data, stdbuffer, (line) => { + if (this.options.listeners && this.options.listeners.stdline) { + this.options.listeners.stdline(line); + } + }); + }); + } + const 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); + } + 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); + } + }); + }); } - /** - * 5. Let common ancestor be original start node. - * 6. While common ancestor is not an inclusive ancestor of original end - * node, set common ancestor to its own parent. - */ - var commonAncestor = originalStartNode; - while (!TreeAlgorithm_1.tree_isAncestorOf(originalEndNode, commonAncestor, true)) { - if (commonAncestor._parent === null) { - throw new Error("Parent node is null."); +} +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 += '\\'; } - commonAncestor = commonAncestor._parent; + arg += c; + escaped = false; } - /** - * 7. Let first partially contained child be null. - * 8. If original start node is not an inclusive ancestor of original end - * node, set first partially contained child to the first child of common - * ancestor that is partially contained in range. - */ - var firstPartiallyContainedChild = null; - if (!TreeAlgorithm_1.tree_isAncestorOf(originalEndNode, originalStartNode, true)) { - try { - for (var _d = __values(commonAncestor._children), _e = _d.next(); !_e.done; _e = _d.next()) { - var node = _e.value; - if (range_isPartiallyContained(node, range)) { - firstPartiallyContainedChild = node; - break; - } + for (let i = 0; i < argString.length; i++) { + const c = argString.charAt(i); + if (c === '"') { + if (!escaped) { + inQuotes = !inQuotes; } - } - catch (e_4_1) { e_4 = { error: e_4_1 }; } - finally { - try { - if (_e && !_e.done && (_a = _d.return)) _a.call(_d); + else { + append(c); } - finally { if (e_4) throw e_4.error; } + continue; } - } - /** - * 9. Let last partially contained child be null. - * 10. If original end node is not an inclusive ancestor of original start - * node, set last partially contained child to the last child of common - * ancestor that is partially contained in range. - */ - var lastPartiallyContainedChild = null; - if (!TreeAlgorithm_1.tree_isAncestorOf(originalStartNode, originalEndNode, true)) { - var children = __spread(commonAncestor._children); - for (var i = children.length - 1; i > 0; i--) { - var node = children[i]; - if (range_isPartiallyContained(node, range)) { - lastPartiallyContainedChild = node; - break; - } + if (c === '\\' && escaped) { + append(c); + continue; } - } - /** - * 11. Let contained children be a list of all children of common ancestor - * that are contained in range, in tree order. - * 12. If any member of contained children is a doctype, then throw a - * "HierarchyRequestError" DOMException. - */ - var containedChildren = []; - try { - for (var _f = __values(commonAncestor._children), _g = _f.next(); !_g.done; _g = _f.next()) { - var child = _g.value; - if (range_isContained(child, range)) { - if (util_1.Guard.isDocumentTypeNode(child)) { - throw new DOMException_1.HierarchyRequestError(); - } - containedChildren.push(child); + if (c === '\\' && inQuotes) { + escaped = true; + continue; + } + if (c === ' ' && !inQuotes) { + if (arg.length > 0) { + args.push(arg); + arg = ''; } + continue; } + append(c); } - catch (e_5_1) { e_5 = { error: e_5_1 }; } - finally { - try { - if (_g && !_g.done && (_b = _f.return)) _b.call(_f); + 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; } - finally { if (e_5) throw e_5.error; } } - if (util_1.Guard.isCharacterDataNode(firstPartiallyContainedChild)) { - /** - * 13. If first partially contained child is a Text, ProcessingInstruction, - * or Comment node: - * 13.1. Let clone be a clone of original start node. - * 13.2. Set the data of clone to the result of substringing data with - * node original start node, offset original start offset, and count - * original start node’s length minus original start offset. - * 13.3. Append clone to fragment. - */ - var clone = NodeAlgorithm_1.node_clone(originalStartNode); - clone._data = CharacterDataAlgorithm_1.characterData_substringData(originalStartNode, originalStartOffset, TreeAlgorithm_1.tree_nodeLength(originalStartNode) - originalStartOffset); - MutationAlgorithm_1.mutation_append(clone, fragment); + CheckComplete() { + if (this.done) { + return; + } + if (this.processClosed) { + this._setResult(); + } + else if (this.processExited) { + this.timeout = setTimeout(ExecState.HandleTimeout, this.delay, this); + } } - else if (firstPartiallyContainedChild !== null) { - /** - * 14. Otherwise, if first partially contained child is not null: - * 14.1. Let clone be a clone of first partially contained child. - * 14.2. Append clone to fragment. - * 14.3. Let subrange be a new live range whose start is (original start - * node, original start offset) and whose end is (first partially - * contained child, first partially contained child’s length). - * 14.4. Let subfragment be the result of cloning the contents of - * subrange. - * 14.5. Append subfragment to clone. - */ - var clone = NodeAlgorithm_1.node_clone(firstPartiallyContainedChild); - MutationAlgorithm_1.mutation_append(clone, fragment); - var subrange = CreateAlgorithm_1.create_range([originalStartNode, originalStartOffset], [firstPartiallyContainedChild, TreeAlgorithm_1.tree_nodeLength(firstPartiallyContainedChild)]); - var subfragment = range_cloneTheContents(subrange); - MutationAlgorithm_1.mutation_append(subfragment, clone); + _debug(message) { + this.emit('debug', message); } - try { - /** - * 15. For each contained child in contained children, append contained - * child to fragment. - * 15.1. Let clone be a clone of contained child with the clone children - * flag set. - * 15.2. Append clone to fragment. - */ - for (var containedChildren_2 = __values(containedChildren), containedChildren_2_1 = containedChildren_2.next(); !containedChildren_2_1.done; containedChildren_2_1 = containedChildren_2.next()) { - var child = containedChildren_2_1.value; - var clone = NodeAlgorithm_1.node_clone(child); - MutationAlgorithm_1.mutation_append(clone, fragment); + _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`); + } } - } - catch (e_6_1) { e_6 = { error: e_6_1 }; } - finally { - try { - if (containedChildren_2_1 && !containedChildren_2_1.done && (_c = containedChildren_2.return)) _c.call(containedChildren_2); + // clear the timeout + if (this.timeout) { + clearTimeout(this.timeout); + this.timeout = null; } - finally { if (e_6) throw e_6.error; } - } - if (util_1.Guard.isCharacterDataNode(lastPartiallyContainedChild)) { - /** - * 16. If last partially contained child is a Text, ProcessingInstruction, - * or Comment node: - * 16.1. Let clone be a clone of original end node. - * 16.2. Set the data of clone to the result of substringing data with - * node original end node, offset 0, and count original end offset. - * 16.3. Append clone to fragment. - */ - var clone = NodeAlgorithm_1.node_clone(originalEndNode); - clone._data = CharacterDataAlgorithm_1.characterData_substringData(originalEndNode, 0, originalEndOffset); - MutationAlgorithm_1.mutation_append(clone, fragment); + this.done = true; + this.emit('done', error, this.processExitCode); } - else if (lastPartiallyContainedChild !== null) { - /** - * 17. Otherwise, if last partially contained child is not null: - * 17.1. Let clone be a clone of last partially contained child. - * 17.2. Append clone to fragment. - * 17.3. Let subrange be a new live range whose start is (last partially - * contained child, 0) and whose end is (original end node, original - * end offset). - * 17.4. Let subfragment be the result of cloning the contents of subrange. - * 17.5. Append subfragment to clone. - */ - var clone = NodeAlgorithm_1.node_clone(lastPartiallyContainedChild); - fragment.append(clone); - var subrange = CreateAlgorithm_1.create_range([lastPartiallyContainedChild, 0], [originalEndNode, originalEndOffset]); - var subfragment = range_extract(subrange); - MutationAlgorithm_1.mutation_append(subfragment, clone); + 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(); } - /** - * 18. Return fragment. - */ - return fragment; } -exports.range_cloneTheContents = range_cloneTheContents; +//# sourceMappingURL=toolrunner.js.map + +/***/ }), + +/***/ 9925: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +const http = __nccwpck_require__(8605); +const https = __nccwpck_require__(7211); +const pm = __nccwpck_require__(6443); +let tunnel; +var HttpCodes; +(function (HttpCodes) { + HttpCodes[HttpCodes["OK"] = 200] = "OK"; + HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; + HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; + HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; + HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; + HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; + HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; + HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; + HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; + HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; + HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; + HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; + HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; + HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; + HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; + HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; + HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; + HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; + HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; + HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; + HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; + HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; + HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; + HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; + HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; + HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; + HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; +})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); +var Headers; +(function (Headers) { + Headers["Accept"] = "accept"; + Headers["ContentType"] = "content-type"; +})(Headers = exports.Headers || (exports.Headers = {})); +var MediaTypes; +(function (MediaTypes) { + MediaTypes["ApplicationJson"] = "application/json"; +})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {})); /** - * Inserts a node into a range at the start boundary point. - * - * @param node - node to insert - * @param range - a range + * 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 range_insert(node, range) { - var e_7, _a; - /** - * 1. If range’s start node is a ProcessingInstruction or Comment node, is a - * Text node whose parent is null, or is node, then throw a - * "HierarchyRequestError" DOMException. - */ - if (util_1.Guard.isProcessingInstructionNode(range._startNode) || - util_1.Guard.isCommentNode(range._startNode) || - (util_1.Guard.isTextNode(range._startNode) && range._startNode._parent === null) || - range._startNode === node) { - throw new DOMException_1.HierarchyRequestError(); +function getProxyUrl(serverUrl) { + let 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); } - /** - * 2. Let referenceNode be null. - * 3. If range’s start node is a Text node, set referenceNode to that Text - * node. - * 4. Otherwise, set referenceNode to the child of start node whose index is - * start offset, and null if there is no such child. - */ - var referenceNode = null; - if (util_1.Guard.isTextNode(range._startNode)) { - referenceNode = range._startNode; +} +exports.HttpClientError = HttpClientError; +class HttpClientResponse { + constructor(message) { + this.message = message; } - else { - var index = 0; - try { - for (var _b = __values(range._startNode._children), _c = _b.next(); !_c.done; _c = _b.next()) { - var child = _c.value; - if (index === range._startOffset) { - referenceNode = child; - break; - } - index++; - } - } - catch (e_7_1) { e_7 = { error: e_7_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_7) throw e_7.error; } - } + readBody() { + return new Promise(async (resolve, reject) => { + let output = Buffer.alloc(0); + this.message.on('data', (chunk) => { + output = Buffer.concat([output, chunk]); + }); + this.message.on('end', () => { + resolve(output.toString()); + }); + }); } - /** - * 5. Let parent be range’s start node if referenceNode is null, and - * referenceNode’s parent otherwise. - */ - var parent; - if (referenceNode === null) { - parent = range._startNode; - } - else { - if (referenceNode._parent === null) { - throw new Error("Parent node is null."); +} +exports.HttpClientResponse = HttpClientResponse; +function isHttps(requestUrl) { + let 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; + } } - parent = referenceNode._parent; } - /** - * 6. Ensure pre-insertion validity of node into parent before referenceNode. - */ - MutationAlgorithm_1.mutation_ensurePreInsertionValidity(node, parent, referenceNode); - /** - * 7. If range’s start node is a Text node, set referenceNode to the result - * of splitting it with offset range’s start offset. - */ - if (util_1.Guard.isTextNode(range._startNode)) { - referenceNode = TextAlgorithm_1.text_split(range._startNode, range._startOffset); + options(requestUrl, additionalHeaders) { + return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); } - /** - * 8. If node is referenceNode, set referenceNode to its next sibling. - */ - if (node === referenceNode) { - referenceNode = node._nextSibling; + get(requestUrl, additionalHeaders) { + return this.request('GET', requestUrl, null, additionalHeaders || {}); } - /** - * 9. If node’s parent is not null, remove node from its parent. - */ - if (node._parent !== null) { - MutationAlgorithm_1.mutation_remove(node, node._parent); + del(requestUrl, additionalHeaders) { + return this.request('DELETE', requestUrl, null, additionalHeaders || {}); } - /** - * 10. Let newOffset be parent’s length if referenceNode is null, and - * referenceNode’s index otherwise. - */ - var newOffset = (referenceNode === null ? - TreeAlgorithm_1.tree_nodeLength(parent) : TreeAlgorithm_1.tree_index(referenceNode)); - /** - * 11. Increase newOffset by node’s length if node is a DocumentFragment - * node, and one otherwise. - */ - if (util_1.Guard.isDocumentFragmentNode(node)) { - newOffset += TreeAlgorithm_1.tree_nodeLength(node); + post(requestUrl, data, additionalHeaders) { + return this.request('POST', requestUrl, data, additionalHeaders || {}); } - else { - newOffset++; + patch(requestUrl, data, additionalHeaders) { + return this.request('PATCH', requestUrl, data, additionalHeaders || {}); + } + put(requestUrl, data, additionalHeaders) { + return this.request('PUT', requestUrl, data, additionalHeaders || {}); + } + head(requestUrl, additionalHeaders) { + return this.request('HEAD', requestUrl, null, additionalHeaders || {}); + } + sendStream(verb, requestUrl, stream, additionalHeaders) { + return this.request(verb, requestUrl, stream, additionalHeaders); } /** - * 12. Pre-insert node into parent before referenceNode. + * Gets a typed object from an endpoint + * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise */ - MutationAlgorithm_1.mutation_preInsert(node, parent, referenceNode); + async getJson(requestUrl, additionalHeaders = {}) { + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + let res = await this.get(requestUrl, additionalHeaders); + return this._processResponse(res, this.requestOptions); + } + async postJson(requestUrl, obj, additionalHeaders = {}) { + let data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + let res = await this.post(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + } + async putJson(requestUrl, obj, additionalHeaders = {}) { + let data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + let res = await this.put(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + } + async patchJson(requestUrl, obj, additionalHeaders = {}) { + let data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); + let res = await this.patch(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + } /** - * 13. If range is collapsed, then set range’s end to (parent, newOffset). + * Makes a raw http request. + * All other methods such as get, post, patch, and request ultimately call this. + * Prefer get, del, post and patch */ - if (range_collapsed(range)) { - range._end = [parent, newOffset]; - } -} -exports.range_insert = range_insert; -/** - * Traverses through all contained nodes of a range. - * - * @param range - a range - */ -function range_getContainedNodes(range) { - var _a; - return _a = {}, - _a[Symbol.iterator] = function () { - var container = range.commonAncestorContainer; - var currentNode = TreeAlgorithm_1.tree_getFirstDescendantNode(container); - return { - next: function () { - while (currentNode && !range_isContained(currentNode, range)) { - currentNode = TreeAlgorithm_1.tree_getNextDescendantNode(container, currentNode); - } - if (currentNode === null) { - return { done: true, value: null }; - } - else { - var result = { done: false, value: currentNode }; - currentNode = TreeAlgorithm_1.tree_getNextDescendantNode(container, currentNode); - return result; + async request(verb, requestUrl, data, headers) { + if (this._disposed) { + throw new Error('Client has already been disposed.'); + } + let parsedUrl = new URL(requestUrl); + let info = this._prepareRequest(verb, parsedUrl, headers); + // Only perform retries on reads since writes may not be idempotent. + let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1 + ? this._maxRetries + 1 + : 1; + let numTries = 0; + let response; + while (numTries < maxTries) { + response = await this.requestRaw(info, data); + // Check if it's an authentication challenge + if (response && + response.message && + response.message.statusCode === HttpCodes.Unauthorized) { + let authenticationHandler; + for (let i = 0; i < this.handlers.length; i++) { + if (this.handlers[i].canHandleAuthentication(response)) { + authenticationHandler = this.handlers[i]; + break; } } - }; - }, - _a; -} -exports.range_getContainedNodes = range_getContainedNodes; -/** - * Traverses through all partially contained nodes of a range. - * - * @param range - a range - */ -function range_getPartiallyContainedNodes(range) { - var _a; - return _a = {}, - _a[Symbol.iterator] = function () { - var container = range.commonAncestorContainer; - var currentNode = TreeAlgorithm_1.tree_getFirstDescendantNode(container); - return { - next: function () { - while (currentNode && !range_isPartiallyContained(currentNode, range)) { - currentNode = TreeAlgorithm_1.tree_getNextDescendantNode(container, currentNode); - } - if (currentNode === null) { - return { done: true, value: null }; - } - else { - var result = { done: false, value: currentNode }; - currentNode = TreeAlgorithm_1.tree_getNextDescendantNode(container, currentNode); - return result; + if (authenticationHandler) { + return authenticationHandler.handleAuthentication(this, info, data); + } + else { + // We have received an unauthorized response but have no handlers to handle it. + // Let the response return to the caller. + return response; + } + } + let redirectsRemaining = this._maxRedirects; + while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 && + this._allowRedirects && + redirectsRemaining > 0) { + const redirectUrl = response.message.headers['location']; + if (!redirectUrl) { + // if there's no location to redirect to, we won't + break; + } + let parsedRedirectUrl = new URL(redirectUrl); + if (parsedUrl.protocol == 'https:' && + parsedUrl.protocol != parsedRedirectUrl.protocol && + !this._allowRedirectDowngrade) { + throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.'); + } + // we need to finish reading the response before reassigning response + // which will leak the open socket. + await response.readBody(); + // strip authorization header if redirected to a different hostname + if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { + for (let header in headers) { + // header names are case insensitive + if (header.toLowerCase() === 'authorization') { + delete headers[header]; + } } } - }; - }, - _a; -} -exports.range_getPartiallyContainedNodes = range_getPartiallyContainedNodes; -//# sourceMappingURL=RangeAlgorithm.js.map - -/***/ }), -/* 23 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var base64 = __importStar(__webpack_require__(763)); -exports.base64 = base64; -var byte = __importStar(__webpack_require__(782)); -exports.byte = byte; -var byteSequence = __importStar(__webpack_require__(263)); -exports.byteSequence = byteSequence; -var codePoint = __importStar(__webpack_require__(11)); -exports.codePoint = codePoint; -var json = __importStar(__webpack_require__(522)); -exports.json = json; -var list = __importStar(__webpack_require__(657)); -exports.list = list; -var map = __importStar(__webpack_require__(279)); -exports.map = map; -var namespace = __importStar(__webpack_require__(916)); -exports.namespace = namespace; -var queue = __importStar(__webpack_require__(501)); -exports.queue = queue; -var set = __importStar(__webpack_require__(496)); -exports.set = set; -var stack = __importStar(__webpack_require__(134)); -exports.stack = stack; -var string = __importStar(__webpack_require__(97)); -exports.string = string; -//# sourceMappingURL=index.js.map - -/***/ }), -/* 24 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getJavaDistribution = void 0; -const installer_1 = __webpack_require__(144); -const installer_2 = __webpack_require__(393); -const installer_3 = __webpack_require__(584); -var JavaDistribution; -(function (JavaDistribution) { - JavaDistribution["Adopt"] = "adopt"; - JavaDistribution["AdoptHotspot"] = "adopt-hotspot"; - JavaDistribution["AdoptOpenJ9"] = "adopt-openj9"; - JavaDistribution["Zulu"] = "zulu"; - JavaDistribution["JdkFile"] = "jdkfile"; -})(JavaDistribution || (JavaDistribution = {})); -function getJavaDistribution(distributionName, installerOptions, jdkFile) { - switch (distributionName) { - case JavaDistribution.JdkFile: - return new installer_1.LocalDistribution(installerOptions, jdkFile); - case JavaDistribution.Adopt: - case JavaDistribution.AdoptHotspot: - return new installer_3.AdoptDistribution(installerOptions, installer_3.AdoptImplementation.Hotspot); - case JavaDistribution.AdoptOpenJ9: - return new installer_3.AdoptDistribution(installerOptions, installer_3.AdoptImplementation.OpenJ9); - case JavaDistribution.Zulu: - return new installer_2.ZuluDistribution(installerOptions); - default: - return null; - } -} -exports.getJavaDistribution = getJavaDistribution; - - -/***/ }), -/* 25 */, -/* 26 */, -/* 27 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; + // let's make the request with the new redirectUrl + info = this._prepareRequest(verb, parsedRedirectUrl, headers); + response = await this.requestRaw(info, data); + redirectsRemaining--; + } + if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) { + // If not a retry code, return immediately instead of retrying + return response; + } + numTries += 1; + if (numTries < maxTries) { + await response.readBody(); + await this._performExponentialBackoff(numTries); + } } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var util_1 = __webpack_require__(918); -var DOMException_1 = __webpack_require__(35); -var TreeAlgorithm_1 = __webpack_require__(873); -var MutationObserverAlgorithm_1 = __webpack_require__(151); -var DOMAlgorithm_1 = __webpack_require__(304); -/** - * Replaces character data. - * - * @param node - a character data node - * @param offset - start offset - * @param count - count of characters to replace - * @param data - new data - */ -function characterData_replaceData(node, offset, count, data) { - var e_1, _a; + return response; + } /** - * 1. Let length be node’s length. - * 2. If offset is greater than length, then throw an "IndexSizeError" - * DOMException. - * 3. If offset plus count is greater than length, then set count to length - * minus offset. + * Needs to be called if keepAlive is set to true in request options. */ - var length = TreeAlgorithm_1.tree_nodeLength(node); - if (offset > length) { - throw new DOMException_1.IndexSizeError("Offset exceeds character data length. Offset: " + offset + ", Length: " + length + ", Node is " + node.nodeName + "."); - } - if (offset + count > length) { - count = length - offset; + dispose() { + if (this._agent) { + this._agent.destroy(); + } + this._disposed = true; } /** - * 4. Queue a mutation record of "characterData" for node with null, null, - * node’s data, « », « », null, and null. + * Raw request. + * @param info + * @param data */ - if (DOMImpl_1.dom.features.mutationObservers) { - MutationObserverAlgorithm_1.observer_queueMutationRecord("characterData", node, null, null, node._data, [], [], null, null); + requestRaw(info, data) { + return new Promise((resolve, reject) => { + let callbackForResult = function (err, res) { + if (err) { + reject(err); + } + resolve(res); + }; + this.requestRawWithCallback(info, data, callbackForResult); + }); } /** - * 5. Insert data into node’s data after offset code units. - * 6. Let delete offset be offset + data’s length. - * 7. Starting from delete offset code units, remove count code units from - * node’s data. + * Raw request with callback. + * @param info + * @param data + * @param onResult */ - var newData = node._data.substring(0, offset) + data + - node._data.substring(offset + count); - node._data = newData; - try { - /** - * 8. For each live range whose start node is node and start offset is - * greater than offset but less than or equal to offset plus count, set its - * start offset to offset. - * 9. For each live range whose end node is node and end offset is greater - * than offset but less than or equal to offset plus count, set its end - * offset to offset. - * 10. For each live range whose start node is node and start offset is - * greater than offset plus count, increase its start offset by data’s - * length and decrease it by count. - * 11. For each live range whose end node is node and end offset is greater - * than offset plus count, increase its end offset by data’s length and - * decrease it by count. - */ - for (var _b = __values(DOMImpl_1.dom.rangeList), _c = _b.next(); !_c.done; _c = _b.next()) { - var range = _c.value; - if (range._start[0] === node && range._start[1] > offset && range._start[1] <= offset + count) { - range._start[1] = offset; - } - if (range._end[0] === node && range._end[1] > offset && range._end[1] <= offset + count) { - range._end[1] = offset; - } - if (range._start[0] === node && range._start[1] > offset + count) { - range._start[1] += data.length - count; + requestRawWithCallback(info, data, onResult) { + let socket; + if (typeof data === 'string') { + info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); + } + let callbackCalled = false; + let handleResult = (err, res) => { + if (!callbackCalled) { + callbackCalled = true; + onResult(err, res); } - if (range._end[0] === node && range._end[1] > offset + count) { - range._end[1] += data.length - count; + }; + let req = info.httpModule.request(info.options, (msg) => { + let res = new HttpClientResponse(msg); + handleResult(null, res); + }); + req.on('socket', sock => { + socket = sock; + }); + // If we ever get disconnected, we want the socket to timeout eventually + req.setTimeout(this._socketTimeout || 3 * 60000, () => { + if (socket) { + socket.end(); } + handleResult(new Error('Request timeout: ' + info.options.path), null); + }); + req.on('error', function (err) { + // err has statusCode property + // res should have headers + handleResult(err, null); + }); + if (data && typeof data === 'string') { + req.write(data, 'utf8'); } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + if (data && typeof data !== 'string') { + data.on('close', function () { + req.end(); + }); + data.pipe(req); } - finally { if (e_1) throw e_1.error; } - } - /** - * 12. If node is a Text node and its parent is not null, run the child - * text content change steps for node’s parent. - */ - if (DOMImpl_1.dom.features.steps) { - if (util_1.Guard.isTextNode(node) && node._parent !== null) { - DOMAlgorithm_1.dom_runChildTextContentChangeSteps(node._parent); + else { + req.end(); } } -} -exports.characterData_replaceData = characterData_replaceData; -/** - * Returns `count` number of characters from `node`'s data starting at - * the given `offset`. - * - * @param node - a character data node - * @param offset - start offset - * @param count - count of characters to return - */ -function characterData_substringData(node, offset, count) { /** - * 1. Let length be node’s length. - * 2. If offset is greater than length, then throw an "IndexSizeError" - * DOMException. - * 3. If offset plus count is greater than length, return a string whose - * value is the code units from the offsetth code unit to the end of node’s - * data, and then return. - * 4. Return a string whose value is the code units from the offsetth code - * unit to the offset+countth code unit in node’s data. + * 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 */ - var length = TreeAlgorithm_1.tree_nodeLength(node); - if (offset > length) { - throw new DOMException_1.IndexSizeError("Offset exceeds character data length. Offset: " + offset + ", Length: " + length + ", Node is " + node.nodeName + "."); - } - if (offset + count > length) { - return node._data.substr(offset); - } - else { - return node._data.substr(offset, count); + getAgent(serverUrl) { + let parsedUrl = new URL(serverUrl); + return this._getAgent(parsedUrl); } -} -exports.characterData_substringData = characterData_substringData; -//# sourceMappingURL=CharacterDataAlgorithm.js.map + _prepareRequest(method, requestUrl, headers) { + const info = {}; + info.parsedUrl = requestUrl; + const usingSsl = info.parsedUrl.protocol === 'https:'; + info.httpModule = usingSsl ? https : http; + const defaultPort = usingSsl ? 443 : 80; + info.options = {}; + info.options.host = info.parsedUrl.hostname; + info.options.port = info.parsedUrl.port + ? parseInt(info.parsedUrl.port) + : defaultPort; + info.options.path = + (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); + info.options.method = method; + info.options.headers = this._mergeHeaders(headers); + if (this.userAgent != null) { + info.options.headers['user-agent'] = this.userAgent; + } + info.options.agent = this._getAgent(info.parsedUrl); + // gives handlers an opportunity to participate + if (this.handlers) { + this.handlers.forEach(handler => { + handler.prepareRequest(info.options); + }); + } + return info; + } + _mergeHeaders(headers) { + const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); + if (this.requestOptions && this.requestOptions.headers) { + return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers)); + } + return lowercaseKeys(headers || {}); + } + _getExistingOrDefaultHeader(additionalHeaders, header, _default) { + const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); + let clientHeader; + if (this.requestOptions && this.requestOptions.headers) { + clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; + } + return additionalHeaders[header] || clientHeader || _default; + } + _getAgent(parsedUrl) { + let agent; + let proxyUrl = pm.getProxyUrl(parsedUrl); + let useProxy = proxyUrl && proxyUrl.hostname; + if (this._keepAlive && useProxy) { + agent = this._proxyAgent; + } + if (this._keepAlive && !useProxy) { + agent = this._agent; + } + // if agent is already assigned use that agent. + if (!!agent) { + return agent; + } + const usingSsl = parsedUrl.protocol === 'https:'; + let maxSockets = 100; + if (!!this.requestOptions) { + maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; + } + if (useProxy) { + // If using proxy, need tunnel + if (!tunnel) { + tunnel = __nccwpck_require__(4294); + } + const agentOptions = { + maxSockets: maxSockets, + keepAlive: this._keepAlive, + proxy: { + 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: maxSockets }; + agent = usingSsl ? new https.Agent(options) : new http.Agent(options); + this._agent = agent; + } + // if not using private agent and tunnel agent isn't setup then use global agent + if (!agent) { + agent = usingSsl ? https.globalAgent : http.globalAgent; + } + if (usingSsl && this._ignoreSslError) { + // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process + // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options + // we have to cast it to any and change it directly + agent.options = Object.assign(agent.options || {}, { + rejectUnauthorized: false + }); + } + return agent; + } + _performExponentialBackoff(retryNumber) { + retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); + const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); + return new Promise(resolve => setTimeout(() => resolve(), ms)); + } + static dateTimeDeserializer(key, value) { + if (typeof value === 'string') { + let a = new Date(value); + if (!isNaN(a.valueOf())) { + return a; + } + } + return value; + } + async _processResponse(res, options) { + return new Promise(async (resolve, reject) => { + const statusCode = res.message.statusCode; + const response = { + statusCode: statusCode, + result: null, + headers: {} + }; + // not found leads to null obj returned + if (statusCode == HttpCodes.NotFound) { + resolve(response); + } + let obj; + let contents; + // get the result from the body + try { + contents = await res.readBody(); + if (contents && contents.length > 0) { + if (options && options.deserializeDates) { + obj = JSON.parse(contents, HttpClient.dateTimeDeserializer); + } + else { + obj = JSON.parse(contents); + } + response.result = obj; + } + response.headers = res.message.headers; + } + catch (err) { + // Invalid resource (contents not json); leaving result obj null + } + // note that 3xx redirects are handled by the http layer. + if (statusCode > 299) { + let msg; + // if exception/error in body, attempt to get better error + if (obj && obj.message) { + msg = obj.message; + } + else if (contents && contents.length > 0) { + // it may be the case that the exception is in the body message as string + msg = contents; + } + else { + msg = 'Failed request: (' + statusCode + ')'; + } + let err = new HttpClientError(msg, statusCode); + err.result = response.result; + reject(err); + } + else { + resolve(response); + } + }); + } +} +exports.HttpClient = HttpClient; + + +/***/ }), + +/***/ 6443: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +function getProxyUrl(reqUrl) { + let usingSsl = reqUrl.protocol === 'https:'; + let proxyUrl; + if (checkBypass(reqUrl)) { + return proxyUrl; + } + let proxyVar; + if (usingSsl) { + proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY']; + } + else { + proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY']; + } + if (proxyVar) { + proxyUrl = new URL(proxyVar); + } + return proxyUrl; +} +exports.getProxyUrl = getProxyUrl; +function checkBypass(reqUrl) { + if (!reqUrl.hostname) { + return false; + } + let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; + if (!noProxy) { + return false; + } + // Determine the request port + let reqPort; + if (reqUrl.port) { + reqPort = Number(reqUrl.port); + } + else if (reqUrl.protocol === 'http:') { + reqPort = 80; + } + else if (reqUrl.protocol === 'https:') { + reqPort = 443; + } + // Format the request hostname and hostname with port + let upperReqHosts = [reqUrl.hostname.toUpperCase()]; + if (typeof reqPort === 'number') { + upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); + } + // Compare request host against noproxy + for (let upperNoProxyItem of noProxy + .split(',') + .map(x => x.trim().toUpperCase()) + .filter(x => x)) { + if (upperReqHosts.some(x => x === upperNoProxyItem)) { + return true; + } + } + return false; +} +exports.checkBypass = checkBypass; + /***/ }), -/* 28 */, -/* 29 */, -/* 30 */, -/* 31 */ -/***/ (function(module, exports, __webpack_require__) { + +/***/ 1962: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -1671,3537 +1674,3101 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const semver = __importStar(__webpack_require__(550)); -const core_1 = __webpack_require__(470); -// needs to be require for core node modules to be mocked -/* eslint @typescript-eslint/no-require-imports: 0 */ -const os = __webpack_require__(87); -const cp = __webpack_require__(129); -const fs = __webpack_require__(747); -function _findMatch(versionSpec, stable, candidates, archFilter) { +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const assert_1 = __nccwpck_require__(2357); +const fs = __nccwpck_require__(5747); +const path = __nccwpck_require__(5622); +_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* () { - const platFilter = os.platform(); - let result; - let match; - let file; - for (const candidate of candidates) { - const version = candidate.version; - core_1.debug(`check ${version} satisfies ${versionSpec}`); - if (semver.satisfies(version, versionSpec) && - (!stable || candidate.stable === stable)) { - file = candidate.files.find(item => { - core_1.debug(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); - let chk = item.arch === archFilter && item.platform === platFilter; - if (chk && item.platform_version) { - const osVersion = module.exports._getOsVersion(); - if (osVersion === item.platform_version) { - chk = true; - } - else { - chk = semver.satisfies(osVersion, item.platform_version); - } + 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; +/** + * Recursively create a directory at `fsPath`. + * + * This implementation is optimistic, meaning it attempts to create the full + * path first, and backs up the path stack from there. + * + * @param fsPath The path to create + * @param maxDepth The maximum recursion depth + * @param depth The current recursion depth + */ +function mkdirP(fsPath, maxDepth = 1000, depth = 1) { + return __awaiter(this, void 0, void 0, function* () { + assert_1.ok(fsPath, 'a path argument must be provided'); + fsPath = path.resolve(fsPath); + if (depth >= maxDepth) + return exports.mkdir(fsPath); + try { + yield exports.mkdir(fsPath); + return; + } + catch (err) { + switch (err.code) { + case 'ENOENT': { + yield mkdirP(path.dirname(fsPath), maxDepth, depth + 1); + yield exports.mkdir(fsPath); + return; + } + default: { + let stats; + try { + stats = yield exports.stat(fsPath); } - return chk; - }); - if (file) { - core_1.debug(`matched ${candidate.version}`); - match = candidate; - break; + catch (err2) { + throw err; + } + if (!stats.isDirectory()) + throw err; } } } - if (match && file) { - // clone since we're mutating the file list to be only the file that matches - result = Object.assign({}, match); - result.files = [file]; - } - return result; }); } -exports._findMatch = _findMatch; -function _getOsVersion() { - // TODO: add windows and other linux, arm variants - // right now filtering on version is only an ubuntu and macos scenario for tools we build for hosted (python) - const plat = os.platform(); - let version = ''; - if (plat === 'darwin') { - version = cp.execSync('sw_vers -productVersion').toString(); - } - else if (plat === 'linux') { - // lsb_release process not in some containers, readfile - // Run cat /etc/lsb-release - // DISTRIB_ID=Ubuntu - // DISTRIB_RELEASE=18.04 - // DISTRIB_CODENAME=bionic - // DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS" - const lsbContents = module.exports._readLinuxVersionFile(); - if (lsbContents) { - const lines = lsbContents.split('\n'); - for (const line of lines) { - const parts = line.split('='); - if (parts.length === 2 && parts[0].trim() === 'DISTRIB_RELEASE') { - version = parts[1].trim(); - break; +exports.mkdirP = mkdirP; +/** + * 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; } } } - } - return version; + // 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._getOsVersion = _getOsVersion; -function _readLinuxVersionFile() { - const lsbFile = '/etc/lsb-release'; - let contents = ''; - if (fs.existsSync(lsbFile)) { - contents = fs.readFileSync(lsbFile).toString(); +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, '\\'); } - return contents; + // remove redundant slashes + return p.replace(/\/\/+/g, '/'); } -exports._readLinuxVersionFile = _readLinuxVersionFile; -//# sourceMappingURL=manifest.js.map +// 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())); +} +//# sourceMappingURL=io-util.js.map /***/ }), -/* 32 */, -/* 33 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 7436: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var infra_1 = __webpack_require__(23); -var util_1 = __webpack_require__(918); -var DOMException_1 = __webpack_require__(35); -var CreateAlgorithm_1 = __webpack_require__(86); -var CustomElementAlgorithm_1 = __webpack_require__(344); -var MutationObserverAlgorithm_1 = __webpack_require__(151); -var DOMAlgorithm_1 = __webpack_require__(304); -var MutationAlgorithm_1 = __webpack_require__(479); -var DocumentAlgorithm_1 = __webpack_require__(493); +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 childProcess = __nccwpck_require__(3129); +const path = __nccwpck_require__(5622); +const util_1 = __nccwpck_require__(1669); +const ioUtil = __nccwpck_require__(1962); +const exec = util_1.promisify(childProcess.exec); /** - * Determines whether the element's attribute list contains the given - * attribute. + * Copies a file or folder. + * Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js * - * @param attribute - an attribute node - * @param element - an element node + * @param source source path + * @param dest destination path + * @param options optional. See CopyOptions. */ -function element_has(attribute, element) { - /** - * An element has an attribute A if its attribute list contains A. - */ - return element._attributeList._asArray().indexOf(attribute) !== -1; -} -exports.element_has = element_has; -/** - * Changes the value of an attribute node. - * - * @param attribute - an attribute node - * @param element - an element node - * @param value - attribute value - */ -function element_change(attribute, element, value) { - /** - * 1. Queue an attribute mutation record for element with attribute’s - * local name, attribute’s namespace, and attribute’s value. - */ - if (DOMImpl_1.dom.features.mutationObservers) { - MutationObserverAlgorithm_1.observer_queueAttributeMutationRecord(element, attribute._localName, attribute._namespace, attribute._value); - } - /** - * 2. If element is custom, then enqueue a custom element callback reaction - * with element, callback name "attributeChangedCallback", and an argument - * list containing attribute’s local name, attribute’s value, value, and - * attribute’s namespace. - */ - if (DOMImpl_1.dom.features.customElements) { - if (util_1.Guard.isCustomElementNode(element)) { - CustomElementAlgorithm_1.customElement_enqueueACustomElementCallbackReaction(element, "attributeChangedCallback", [attribute._localName, attribute._value, value, attribute._namespace]); +function cp(source, dest, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + const { force, recursive } = 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; } - } - /** - * 3. Run the attribute change steps with element, attribute’s local name, - * attribute’s value, value, and attribute’s namespace. - * 4. Set attribute’s value to value. - */ - if (DOMImpl_1.dom.features.steps) { - DOMAlgorithm_1.dom_runAttributeChangeSteps(element, attribute._localName, attribute._value, value, attribute._namespace); - } - attribute._value = value; -} -exports.element_change = element_change; -/** - * Appends an attribute to an element node. - * - * @param attribute - an attribute - * @param element - an element to receive the attribute - */ -function element_append(attribute, element) { - /** - * 1. Queue an attribute mutation record for element with attribute’s - * local name, attribute’s namespace, and null. - */ - if (DOMImpl_1.dom.features.mutationObservers) { - MutationObserverAlgorithm_1.observer_queueAttributeMutationRecord(element, attribute._localName, attribute._namespace, null); - } - /** - * 2. If element is custom, then enqueue a custom element callback reaction - * with element, callback name "attributeChangedCallback", and an argument - * list containing attribute’s local name, null, attribute’s value, and - * attribute’s namespace. - */ - if (DOMImpl_1.dom.features.customElements) { - if (util_1.Guard.isCustomElementNode(element)) { - CustomElementAlgorithm_1.customElement_enqueueACustomElementCallbackReaction(element, "attributeChangedCallback", [attribute._localName, null, attribute._value, attribute._namespace]); + // If dest is an existing directory, should copy inside. + const newDest = destStat && destStat.isDirectory() + ? path.join(dest, path.basename(source)) + : dest; + if (!(yield ioUtil.exists(source))) { + throw new Error(`no such file or directory: ${source}`); } - } - /** - * 3. Run the attribute change steps with element, attribute’s local name, - * null, attribute’s value, and attribute’s namespace. - */ - if (DOMImpl_1.dom.features.steps) { - DOMAlgorithm_1.dom_runAttributeChangeSteps(element, attribute._localName, null, attribute._value, attribute._namespace); - } - /** - * 4. Append attribute to element’s attribute list. - * 5. Set attribute’s element to element. - */ - element._attributeList._asArray().push(attribute); - attribute._element = element; - // mark that the document has namespaces - if (!element._nodeDocument._hasNamespaces && (attribute._namespace !== null || - attribute._namespacePrefix !== null || attribute._localName === "xmlns")) { - element._nodeDocument._hasNamespaces = true; - } -} -exports.element_append = element_append; -/** - * Removes an attribute from an element node. - * - * @param attribute - an attribute - * @param element - an element to receive the attribute - */ -function element_remove(attribute, element) { - /** - * 1. Queue an attribute mutation record for element with attribute’s - * local name, attribute’s namespace, and attribute’s value. - */ - if (DOMImpl_1.dom.features.mutationObservers) { - MutationObserverAlgorithm_1.observer_queueAttributeMutationRecord(element, attribute._localName, attribute._namespace, attribute._value); - } - /** - * 2. If element is custom, then enqueue a custom element callback reaction - * with element, callback name "attributeChangedCallback", and an argument - * list containing attribute’s local name, attribute’s value, null, - * and attribute’s namespace. - */ - if (DOMImpl_1.dom.features.customElements) { - if (util_1.Guard.isCustomElementNode(element)) { - CustomElementAlgorithm_1.customElement_enqueueACustomElementCallbackReaction(element, "attributeChangedCallback", [attribute._localName, attribute._value, null, attribute._namespace]); + 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); + } } - } - /** - * 3. Run the attribute change steps with element, attribute’s local name, - * attribute’s value, null, and attribute’s namespace. - */ - if (DOMImpl_1.dom.features.steps) { - DOMAlgorithm_1.dom_runAttributeChangeSteps(element, attribute._localName, attribute._value, null, attribute._namespace); - } - /** - * 3. Remove attribute from element’s attribute list. - * 5. Set attribute’s element to null. - */ - var index = element._attributeList._asArray().indexOf(attribute); - element._attributeList._asArray().splice(index, 1); - attribute._element = null; -} -exports.element_remove = element_remove; -/** - * Replaces an attribute with another of an element node. - * - * @param oldAttr - old attribute - * @param newAttr - new attribute - * @param element - an element to receive the attribute - */ -function element_replace(oldAttr, newAttr, element) { - /** - * 1. Queue an attribute mutation record for element with oldAttr’s - * local name, oldAttr’s namespace, and oldAttr’s value. - */ - if (DOMImpl_1.dom.features.mutationObservers) { - MutationObserverAlgorithm_1.observer_queueAttributeMutationRecord(element, oldAttr._localName, oldAttr._namespace, oldAttr._value); - } - /** - * 2. If element is custom, then enqueue a custom element callback reaction - * with element, callback name "attributeChangedCallback", and an argument - * list containing oldAttr’s local name, oldAttr’s value, newAttr’s value, - * and oldAttr’s namespace. - */ - if (DOMImpl_1.dom.features.customElements) { - if (util_1.Guard.isCustomElementNode(element)) { - CustomElementAlgorithm_1.customElement_enqueueACustomElementCallbackReaction(element, "attributeChangedCallback", [oldAttr._localName, oldAttr._value, newAttr._value, oldAttr._namespace]); + 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); } - } - /** - * 3. Run the attribute change steps with element, oldAttr’s local name, - * oldAttr’s value, newAttr’s value, and oldAttr’s namespace. - */ - if (DOMImpl_1.dom.features.steps) { - DOMAlgorithm_1.dom_runAttributeChangeSteps(element, oldAttr._localName, oldAttr._value, newAttr._value, oldAttr._namespace); - } - /** - * 4. Replace oldAttr by newAttr in element’s attribute list. - * 5. Set oldAttr’s element to null. - * 6. Set newAttr’s element to element. - */ - var index = element._attributeList._asArray().indexOf(oldAttr); - if (index !== -1) { - element._attributeList._asArray()[index] = newAttr; - } - oldAttr._element = null; - newAttr._element = element; - // mark that the document has namespaces - if (!element._nodeDocument._hasNamespaces && (newAttr._namespace !== null || - newAttr._namespacePrefix !== null || newAttr._localName === "xmlns")) { - element._nodeDocument._hasNamespaces = true; - } + }); } -exports.element_replace = element_replace; +exports.cp = cp; /** - * Retrieves an attribute with the given name from an element node. + * Moves a path. * - * @param qualifiedName - an attribute name - * @param element - an element to receive the attribute + * @param source source path + * @param dest destination path + * @param options optional. See MoveOptions. */ -function element_getAnAttributeByName(qualifiedName, element) { - /** - * 1. If element is in the HTML namespace and its node document is an HTML - * document, then set qualifiedName to qualifiedName in ASCII lowercase. - * 2. Return the first attribute in element’s attribute list whose qualified - * name is qualifiedName, and null otherwise. - */ - if (element._namespace === infra_1.namespace.HTML && element._nodeDocument._type === "html") { - qualifiedName = qualifiedName.toLowerCase(); - } - return element._attributeList._asArray().find(function (attr) { return attr._qualifiedName === qualifiedName; }) || null; +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.element_getAnAttributeByName = element_getAnAttributeByName; +exports.mv = mv; /** - * Retrieves an attribute with the given namespace and local name from an - * element node. + * Remove a path recursively with force * - * @param namespace - an attribute namespace - * @param localName - an attribute local name - * @param element - an element to receive the attribute + * @param inputPath path to remove */ -function element_getAnAttributeByNamespaceAndLocalName(namespace, localName, element) { - /** - * 1. If namespace is the empty string, set it to null. - * 2. Return the attribute in element’s attribute list whose namespace is - * namespace and local name is localName, if any, and null otherwise. - */ - var ns = namespace || null; - return element._attributeList._asArray().find(function (attr) { return attr._namespace === ns && attr._localName === localName; }) || null; +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. + try { + if (yield ioUtil.isDirectory(inputPath, true)) { + yield exec(`rd /s /q "${inputPath}"`); + } + else { + yield exec(`del /f /a "${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 exec(`rm -rf "${inputPath}"`); + } + else { + yield ioUtil.unlink(inputPath); + } + } + }); } -exports.element_getAnAttributeByNamespaceAndLocalName = element_getAnAttributeByNamespaceAndLocalName; +exports.rmRF = rmRF; /** - * Retrieves an attribute's value with the given name namespace and local - * name from an element node. + * Make a directory. Creates the full path with folders in between + * Will throw if it fails * - * @param element - an element to receive the attribute - * @param localName - an attribute local name - * @param namespace - an attribute namespace + * @param fsPath path to create + * @returns Promise */ -function element_getAnAttributeValue(element, localName, namespace) { - if (namespace === void 0) { namespace = ''; } - /** - * 1. Let attr be the result of getting an attribute given namespace, - * localName, and element. - * 2. If attr is null, then return the empty string. - * 3. Return attr’s value. - */ - var attr = element_getAnAttributeByNamespaceAndLocalName(namespace, localName, element); - if (attr === null) - return ''; - else - return attr._value; +function mkdirP(fsPath) { + return __awaiter(this, void 0, void 0, function* () { + yield ioUtil.mkdirP(fsPath); + }); } -exports.element_getAnAttributeValue = element_getAnAttributeValue; +exports.mkdirP = mkdirP; /** - * Sets an attribute of an element node. + * 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 attr - an attribute - * @param element - an element to receive the attribute + * @param tool name of the tool + * @param check whether to check if tool exists + * @returns Promise path to tool */ -function element_setAnAttribute(attr, element) { - /** - * 1. If attr’s element is neither null nor element, throw an - * "InUseAttributeError" DOMException. - * 2. Let oldAttr be the result of getting an attribute given attr’s - * namespace, attr’s local name, and element. - * 3. If oldAttr is attr, return attr. - * 4. If oldAttr is non-null, replace it by attr in element. - * 5. Otherwise, append attr to element. - * 6. Return oldAttr. - */ - if (attr._element !== null && attr._element !== element) - throw new DOMException_1.InUseAttributeError("This attribute already exists in the document: " + attr._qualifiedName + " as a child of " + attr._element._qualifiedName + "."); - var oldAttr = element_getAnAttributeByNamespaceAndLocalName(attr._namespace || '', attr._localName, element); - if (oldAttr === attr) - return attr; - if (oldAttr !== null) { - element_replace(oldAttr, attr, element); - } - else { - element_append(attr, element); - } - return oldAttr; +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.`); + } + } + } + try { + // 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('/') || (ioUtil.IS_WINDOWS && tool.includes('\\'))) { + 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); + } + } + } + // return the first match + for (const directory of directories) { + const filePath = yield ioUtil.tryGetExecutablePath(directory + path.sep + tool, extensions); + if (filePath) { + return filePath; + } + } + return ''; + } + catch (err) { + throw new Error(`which failed with message ${err.message}`); + } + }); } -exports.element_setAnAttribute = element_setAnAttribute; -/** - * Sets an attribute's value of an element node. - * - * @param element - an element to receive the attribute - * @param localName - an attribute local name - * @param value - an attribute value - * @param prefix - an attribute prefix - * @param namespace - an attribute namespace - */ -function element_setAnAttributeValue(element, localName, value, prefix, namespace) { - if (prefix === void 0) { prefix = null; } - if (namespace === void 0) { namespace = null; } - /** - * 1. If prefix is not given, set it to null. - * 2. If namespace is not given, set it to null. - * 3. Let attribute be the result of getting an attribute given namespace, - * localName, and element. - * 4. If attribute is null, create an attribute whose namespace is - * namespace, namespace prefix is prefix, local name is localName, value - * is value, and node document is element’s node document, then append this - * attribute to element, and then return. - * 5. Change attribute from element to value. - */ - var attribute = element_getAnAttributeByNamespaceAndLocalName(namespace || '', localName, element); - if (attribute === null) { - var newAttr = CreateAlgorithm_1.create_attr(element._nodeDocument, localName); - newAttr._namespace = namespace; - newAttr._namespacePrefix = prefix; - newAttr._value = value; - element_append(newAttr, element); - return; - } - element_change(attribute, element, value); +exports.which = which; +function readCopyOptions(options) { + const force = options.force == null ? true : options.force; + const recursive = Boolean(options.recursive); + return { force, recursive }; } -exports.element_setAnAttributeValue = element_setAnAttributeValue; -/** - * Removes an attribute with the given name from an element node. - * - * @param qualifiedName - an attribute name - * @param element - an element to receive the attribute - */ -function element_removeAnAttributeByName(qualifiedName, element) { - /** - * 1. Let attr be the result of getting an attribute given qualifiedName - * and element. - * 2. If attr is non-null, remove it from element. - * 3. Return attr. - */ - var attr = element_getAnAttributeByName(qualifiedName, element); - if (attr !== null) { - element_remove(attr, element); - } - return attr; +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); + }); } -exports.element_removeAnAttributeByName = element_removeAnAttributeByName; -/** - * Removes an attribute with the given namespace and local name from an - * element node. - * - * @param namespace - an attribute namespace - * @param localName - an attribute local name - * @param element - an element to receive the attribute - */ -function element_removeAnAttributeByNamespaceAndLocalName(namespace, localName, element) { - /** - * 1. Let attr be the result of getting an attribute given namespace, localName, and element. - * 2. If attr is non-null, remove it from element. - * 3. Return attr. - */ - var attr = element_getAnAttributeByNamespaceAndLocalName(namespace, localName, element); - if (attr !== null) { - element_remove(attr, element); - } - return attr; -} -exports.element_removeAnAttributeByNamespaceAndLocalName = element_removeAnAttributeByNamespaceAndLocalName; -/** - * Creates an element node. - * See: https://dom.spec.whatwg.org/#concept-create-element. - * - * @param document - the document owning the element - * @param localName - local name - * @param namespace - element namespace - * @param prefix - namespace prefix - * @param is - the "is" value - * @param synchronousCustomElementsFlag - synchronous custom elements flag - */ -function element_createAnElement(document, localName, namespace, prefix, is, synchronousCustomElementsFlag) { - if (prefix === void 0) { prefix = null; } - if (is === void 0) { is = null; } - if (synchronousCustomElementsFlag === void 0) { synchronousCustomElementsFlag = false; } - /** - * 1. If prefix was not given, let prefix be null. - * 2. If is was not given, let is be null. - * 3. Let result be null. - */ - var result = null; - if (!DOMImpl_1.dom.features.customElements) { - result = CreateAlgorithm_1.create_element(document, localName, namespace, prefix); - result._customElementState = "uncustomized"; - result._customElementDefinition = null; - result._is = is; - return result; - } - /** - * 4. Let definition be the result of looking up a custom element definition - * given document, namespace, localName, and is. - */ - var definition = CustomElementAlgorithm_1.customElement_lookUpACustomElementDefinition(document, namespace, localName, is); - if (definition !== null && definition.name !== definition.localName) { - /** - * 5. If definition is non-null, and definition’s name is not equal to - * its local name (i.e., definition represents a customized built-in - * element), then: - * 5.1. Let interface be the element interface for localName and the HTML - * namespace. - * 5.2. Set result to a new element that implements interface, with no - * attributes, namespace set to the HTML namespace, namespace prefix - * set to prefix, local name set to localName, custom element state set - * to "undefined", custom element definition set to null, is value set - * to is, and node document set to document. - * 5.3. If the synchronous custom elements flag is set, upgrade element - * using definition. - * 5.4. Otherwise, enqueue a custom element upgrade reaction given result - * and definition. - */ - var elemenInterface = DocumentAlgorithm_1.document_elementInterface(localName, infra_1.namespace.HTML); - result = new elemenInterface(); - result._localName = localName; - result._namespace = infra_1.namespace.HTML; - result._namespacePrefix = prefix; - result._customElementState = "undefined"; - result._customElementDefinition = null; - result._is = is; - result._nodeDocument = document; - if (synchronousCustomElementsFlag) { - CustomElementAlgorithm_1.customElement_upgrade(definition, result); - } - else { - CustomElementAlgorithm_1.customElement_enqueueACustomElementUpgradeReaction(result, definition); - } - } - else if (definition !== null) { - /** - * 6. Otherwise, if definition is non-null, then: - */ - if (synchronousCustomElementsFlag) { - /** - * 6.1. If the synchronous custom elements flag is set, then run these - * steps while catching any exceptions: - */ +// 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 { - /** - * 6.1.1. Let C be definition’s constructor. - * 6.1.2. Set result to the result of constructing C, with no arguments. - * 6.1.3. Assert: result’s custom element state and custom element definition - * are initialized. - * 6.1.4. Assert: result’s namespace is the HTML namespace. - * _Note:_ IDL enforces that result is an HTMLElement object, which all - * use the HTML namespace. - */ - var C = definition.constructor; - var result_1 = new C(); - console.assert(result_1._customElementState !== undefined); - console.assert(result_1._customElementDefinition !== undefined); - console.assert(result_1._namespace === infra_1.namespace.HTML); - /** - * 6.1.5. If result’s attribute list is not empty, then throw a - * "NotSupportedError" DOMException. - * 6.1.6. If result has children, then throw a "NotSupportedError" - * DOMException. - * 6.1.7. If result’s parent is not null, then throw a - * "NotSupportedError" DOMException. - * 6.1.8. If result’s node document is not document, then throw a - * "NotSupportedError" DOMException. - * 6.1.9. If result’s local name is not equal to localName, then throw - * a "NotSupportedError" DOMException. - */ - if (result_1._attributeList.length !== 0) - throw new DOMException_1.NotSupportedError("Custom element already has attributes."); - if (result_1._children.size !== 0) - throw new DOMException_1.NotSupportedError("Custom element already has child nodes."); - if (result_1._parent !== null) - throw new DOMException_1.NotSupportedError("Custom element already has a parent node."); - if (result_1._nodeDocument !== document) - throw new DOMException_1.NotSupportedError("Custom element is already in a document."); - if (result_1._localName !== localName) - throw new DOMException_1.NotSupportedError("Custom element has a different local name."); - /** - * 6.1.10. Set result’s namespace prefix to prefix. - * 6.1.11. Set result’s is value to null. - */ - result_1._namespacePrefix = prefix; - result_1._is = null; + yield ioUtil.lstat(destFile); + yield ioUtil.unlink(destFile); } catch (e) { - /** - * If any of these steps threw an exception, then: - * - Report the exception. - * - Set result to a new element that implements the HTMLUnknownElement - * interface, with no attributes, namespace set to the HTML namespace, - * namespace prefix set to prefix, local name set to localName, custom - * element state set to "failed", custom element definition set to null, - * is value set to null, and node document set to document. - */ - // TODO: Report the exception - result = CreateAlgorithm_1.create_htmlUnknownElement(document, localName, infra_1.namespace.HTML, prefix); - result._customElementState = "failed"; - result._customElementDefinition = null; - result._is = null; + // 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 { - /** - * 6.2. Otherwise: - * 6.2.1. Set result to a new element that implements the HTMLElement - * interface, with no attributes, namespace set to the HTML namespace, - * namespace prefix set to prefix, local name set to localName, custom - * element state set to "undefined", custom element definition set to - * null, is value set to null, and node document set to document. - * 6.2.2. Enqueue a custom element upgrade reaction given result and - * definition. - */ - result = CreateAlgorithm_1.create_htmlElement(document, localName, infra_1.namespace.HTML, prefix); - result._customElementState = "undefined"; - result._customElementDefinition = null; - result._is = null; - CustomElementAlgorithm_1.customElement_enqueueACustomElementUpgradeReaction(result, definition); + else if (!(yield ioUtil.exists(destFile)) || force) { + yield ioUtil.copyFile(srcFile, destFile); } - } - else { - /** - * 7. Otherwise: - * 7.1. Let interface be the element interface for localName and - * namespace. - * 7.2. Set result to a new element that implements interface, with no - * attributes, namespace set to namespace, namespace prefix set to prefix, - * local name set to localName, custom element state set to - * "uncustomized", custom element definition set to null, is value set to - * is, and node document set to document. - */ - var elementInterface = DocumentAlgorithm_1.document_elementInterface(localName, namespace); - result = new elementInterface(); - result._localName = localName; - result._namespace = namespace; - result._namespacePrefix = prefix; - result._customElementState = "uncustomized"; - result._customElementDefinition = null; - result._is = is; - result._nodeDocument = document; - /** - * 7.3. If namespace is the HTML namespace, and either localName is a - * valid custom element name or is is non-null, then set result’s - * custom element state to "undefined". - */ - if (namespace === infra_1.namespace.HTML && (is !== null || - CustomElementAlgorithm_1.customElement_isValidCustomElementName(localName))) { - result._customElementState = "undefined"; + }); +} +//# sourceMappingURL=io.js.map + +/***/ }), + +/***/ 2473: +/***/ (function(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()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const semver = __importStar(__nccwpck_require__(562)); +const core_1 = __nccwpck_require__(2186); +// needs to be require for core node modules to be mocked +/* eslint @typescript-eslint/no-require-imports: 0 */ +const os = __nccwpck_require__(2087); +const cp = __nccwpck_require__(3129); +const fs = __nccwpck_require__(5747); +function _findMatch(versionSpec, stable, candidates, archFilter) { + return __awaiter(this, void 0, void 0, function* () { + const platFilter = os.platform(); + let result; + let match; + let file; + for (const candidate of candidates) { + const version = candidate.version; + core_1.debug(`check ${version} satisfies ${versionSpec}`); + if (semver.satisfies(version, versionSpec) && + (!stable || candidate.stable === stable)) { + file = candidate.files.find(item => { + core_1.debug(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); + let chk = item.arch === archFilter && item.platform === platFilter; + if (chk && item.platform_version) { + const osVersion = module.exports._getOsVersion(); + if (osVersion === item.platform_version) { + chk = true; + } + else { + chk = semver.satisfies(osVersion, item.platform_version); + } + } + return chk; + }); + if (file) { + core_1.debug(`matched ${candidate.version}`); + match = candidate; + break; + } + } + } + if (match && file) { + // clone since we're mutating the file list to be only the file that matches + result = Object.assign({}, match); + result.files = [file]; } + return result; + }); +} +exports._findMatch = _findMatch; +function _getOsVersion() { + // TODO: add windows and other linux, arm variants + // right now filtering on version is only an ubuntu and macos scenario for tools we build for hosted (python) + const plat = os.platform(); + let version = ''; + if (plat === 'darwin') { + version = cp.execSync('sw_vers -productVersion').toString(); } - /* istanbul ignore next */ - if (result === null) { - throw new Error("Unable to create element."); + else if (plat === 'linux') { + // lsb_release process not in some containers, readfile + // Run cat /etc/lsb-release + // DISTRIB_ID=Ubuntu + // DISTRIB_RELEASE=18.04 + // DISTRIB_CODENAME=bionic + // DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS" + const lsbContents = module.exports._readLinuxVersionFile(); + if (lsbContents) { + const lines = lsbContents.split('\n'); + for (const line of lines) { + const parts = line.split('='); + if (parts.length === 2 && parts[0].trim() === 'DISTRIB_RELEASE') { + version = parts[1].trim(); + break; + } + } + } } - /** - * 8. Returns result - */ - return result; + return version; } -exports.element_createAnElement = element_createAnElement; -/** - * Inserts a new node adjacent to this element. - * - * @param element - a reference element - * @param where - a string defining where to insert the element node. - * - `beforebegin` before this element itself. - * - `afterbegin` before the first child. - * - `beforeend` after the last child. - * - `afterend` after this element itself. - * @param node - node to insert - */ -function element_insertAdjacent(element, where, node) { - /** - * - "beforebegin" - * If element’s parent is null, return null. - * Return the result of pre-inserting node into element’s parent before - * element. - * - "afterbegin" - * Return the result of pre-inserting node into element before element’s - * first child. - * - "beforeend" - * Return the result of pre-inserting node into element before null. - * - "afterend" - * If element’s parent is null, return null. - * Return the result of pre-inserting node into element’s parent before element’s next sibling. - * - Otherwise - * Throw a "SyntaxError" DOMException. - */ - switch (where.toLowerCase()) { - case 'beforebegin': - if (element._parent === null) - return null; - return MutationAlgorithm_1.mutation_preInsert(node, element._parent, element); - case 'afterbegin': - return MutationAlgorithm_1.mutation_preInsert(node, element, element._firstChild); - case 'beforeend': - return MutationAlgorithm_1.mutation_preInsert(node, element, null); - case 'afterend': - if (element._parent === null) - return null; - return MutationAlgorithm_1.mutation_preInsert(node, element._parent, element._nextSibling); - default: - throw new DOMException_1.SyntaxError("Invalid 'where' argument. \"beforebegin\", \"afterbegin\", \"beforeend\" or \"afterend\" expected"); +exports._getOsVersion = _getOsVersion; +function _readLinuxVersionFile() { + const lsbFile = '/etc/lsb-release'; + let contents = ''; + if (fs.existsSync(lsbFile)) { + contents = fs.readFileSync(lsbFile).toString(); } + return contents; } -exports.element_insertAdjacent = element_insertAdjacent; -//# sourceMappingURL=ElementAlgorithm.js.map +exports._readLinuxVersionFile = _readLinuxVersionFile; +//# sourceMappingURL=manifest.js.map /***/ }), -/* 34 */ -/***/ (function(module) { - -module.exports = require("https"); -/***/ }), -/* 35 */ -/***/ (function(__unusedmodule, exports) { +/***/ 8279: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const core = __importStar(__nccwpck_require__(2186)); /** - * Represents the base class of `Error` objects used by this module. + * Internal class for retries */ -var DOMException = /** @class */ (function (_super) { - __extends(DOMException, _super); - /** - * - * @param name - message name - * @param message - error message - */ - function DOMException(name, message) { - if (message === void 0) { message = ""; } - var _this = _super.call(this, message) || this; - _this.name = name; - return _this; - } - return DOMException; -}(Error)); -exports.DOMException = DOMException; -var DOMStringSizeError = /** @class */ (function (_super) { - __extends(DOMStringSizeError, _super); - /** - * @param message - error message - */ - function DOMStringSizeError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "DOMStringSizeError", message) || this; +class RetryHelper { + constructor(maxAttempts, minSeconds, maxSeconds) { + if (maxAttempts < 1) { + throw new Error('max attempts should be greater than or equal to 1'); + } + this.maxAttempts = maxAttempts; + this.minSeconds = Math.floor(minSeconds); + this.maxSeconds = Math.floor(maxSeconds); + if (this.minSeconds > this.maxSeconds) { + throw new Error('min seconds should be less than or equal to max seconds'); + } } - return DOMStringSizeError; -}(DOMException)); -exports.DOMStringSizeError = DOMStringSizeError; -var WrongDocumentError = /** @class */ (function (_super) { - __extends(WrongDocumentError, _super); - /** - * @param message - error message - */ - function WrongDocumentError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "WrongDocumentError", "The object is in the wrong document. " + message) || this; + execute(action, isRetryable) { + return __awaiter(this, void 0, void 0, function* () { + let attempt = 1; + while (attempt < this.maxAttempts) { + // Try + try { + return yield action(); + } + catch (err) { + if (isRetryable && !isRetryable(err)) { + throw err; + } + core.info(err.message); + } + // Sleep + const seconds = this.getSleepAmount(); + core.info(`Waiting ${seconds} seconds before trying again`); + yield this.sleep(seconds); + attempt++; + } + // Last attempt + return yield action(); + }); } - return WrongDocumentError; -}(DOMException)); -exports.WrongDocumentError = WrongDocumentError; -var NoDataAllowedError = /** @class */ (function (_super) { - __extends(NoDataAllowedError, _super); - /** - * @param message - error message - */ - function NoDataAllowedError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "NoDataAllowedError", message) || this; + getSleepAmount() { + return (Math.floor(Math.random() * (this.maxSeconds - this.minSeconds + 1)) + + this.minSeconds); } - return NoDataAllowedError; -}(DOMException)); -exports.NoDataAllowedError = NoDataAllowedError; -var NoModificationAllowedError = /** @class */ (function (_super) { - __extends(NoModificationAllowedError, _super); - /** - * @param message - error message - */ - function NoModificationAllowedError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "NoModificationAllowedError", "The object can not be modified. " + message) || this; + sleep(seconds) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise(resolve => setTimeout(resolve, seconds * 1000)); + }); } - return NoModificationAllowedError; -}(DOMException)); -exports.NoModificationAllowedError = NoModificationAllowedError; -var NotSupportedError = /** @class */ (function (_super) { - __extends(NotSupportedError, _super); - /** - * @param message - error message - */ - function NotSupportedError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "NotSupportedError", "The operation is not supported. " + message) || this; - } - return NotSupportedError; -}(DOMException)); -exports.NotSupportedError = NotSupportedError; -var InUseAttributeError = /** @class */ (function (_super) { - __extends(InUseAttributeError, _super); - /** - * @param message - error message - */ - function InUseAttributeError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "InUseAttributeError", message) || this; - } - return InUseAttributeError; -}(DOMException)); -exports.InUseAttributeError = InUseAttributeError; -var InvalidStateError = /** @class */ (function (_super) { - __extends(InvalidStateError, _super); - /** - * @param message - error message - */ - function InvalidStateError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "InvalidStateError", "The object is in an invalid state. " + message) || this; - } - return InvalidStateError; -}(DOMException)); -exports.InvalidStateError = InvalidStateError; -var InvalidModificationError = /** @class */ (function (_super) { - __extends(InvalidModificationError, _super); - /** - * @param message - error message - */ - function InvalidModificationError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "InvalidModificationError", "The object can not be modified in this way. " + message) || this; - } - return InvalidModificationError; -}(DOMException)); -exports.InvalidModificationError = InvalidModificationError; -var NamespaceError = /** @class */ (function (_super) { - __extends(NamespaceError, _super); - /** - * @param message - error message - */ - function NamespaceError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "NamespaceError", "The operation is not allowed by Namespaces in XML. [XMLNS] " + message) || this; - } - return NamespaceError; -}(DOMException)); -exports.NamespaceError = NamespaceError; -var InvalidAccessError = /** @class */ (function (_super) { - __extends(InvalidAccessError, _super); - /** - * @param message - error message - */ - function InvalidAccessError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "InvalidAccessError", "The object does not support the operation or argument. " + message) || this; - } - return InvalidAccessError; -}(DOMException)); -exports.InvalidAccessError = InvalidAccessError; -var ValidationError = /** @class */ (function (_super) { - __extends(ValidationError, _super); - /** - * @param message - error message - */ - function ValidationError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "ValidationError", message) || this; - } - return ValidationError; -}(DOMException)); -exports.ValidationError = ValidationError; -var TypeMismatchError = /** @class */ (function (_super) { - __extends(TypeMismatchError, _super); - /** - * @param message - error message - */ - function TypeMismatchError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "TypeMismatchError", message) || this; - } - return TypeMismatchError; -}(DOMException)); -exports.TypeMismatchError = TypeMismatchError; -var SecurityError = /** @class */ (function (_super) { - __extends(SecurityError, _super); - /** - * @param message - error message - */ - function SecurityError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "SecurityError", "The operation is insecure. " + message) || this; - } - return SecurityError; -}(DOMException)); -exports.SecurityError = SecurityError; -var NetworkError = /** @class */ (function (_super) { - __extends(NetworkError, _super); - /** - * @param message - error message - */ - function NetworkError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "NetworkError", "A network error occurred. " + message) || this; - } - return NetworkError; -}(DOMException)); -exports.NetworkError = NetworkError; -var AbortError = /** @class */ (function (_super) { - __extends(AbortError, _super); - /** - * @param message - error message - */ - function AbortError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "AbortError", "The operation was aborted. " + message) || this; - } - return AbortError; -}(DOMException)); -exports.AbortError = AbortError; -var URLMismatchError = /** @class */ (function (_super) { - __extends(URLMismatchError, _super); - /** - * @param message - error message - */ - function URLMismatchError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "URLMismatchError", "The given URL does not match another URL. " + message) || this; - } - return URLMismatchError; -}(DOMException)); -exports.URLMismatchError = URLMismatchError; -var QuotaExceededError = /** @class */ (function (_super) { - __extends(QuotaExceededError, _super); - /** - * @param message - error message - */ - function QuotaExceededError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "QuotaExceededError", "The quota has been exceeded. " + message) || this; - } - return QuotaExceededError; -}(DOMException)); -exports.QuotaExceededError = QuotaExceededError; -var TimeoutError = /** @class */ (function (_super) { - __extends(TimeoutError, _super); - /** - * @param message - error message - */ - function TimeoutError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "TimeoutError", "The operation timed out. " + message) || this; - } - return TimeoutError; -}(DOMException)); -exports.TimeoutError = TimeoutError; -var InvalidNodeTypeError = /** @class */ (function (_super) { - __extends(InvalidNodeTypeError, _super); - /** - * @param message - error message - */ - function InvalidNodeTypeError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "InvalidNodeTypeError", "The supplied node is incorrect or has an incorrect ancestor for this operation. " + message) || this; - } - return InvalidNodeTypeError; -}(DOMException)); -exports.InvalidNodeTypeError = InvalidNodeTypeError; -var DataCloneError = /** @class */ (function (_super) { - __extends(DataCloneError, _super); - /** - * @param message - error message - */ - function DataCloneError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "DataCloneError", "The object can not be cloned. " + message) || this; - } - return DataCloneError; -}(DOMException)); -exports.DataCloneError = DataCloneError; -var NotImplementedError = /** @class */ (function (_super) { - __extends(NotImplementedError, _super); - /** - * @param message - error message - */ - function NotImplementedError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "NotImplementedError", "The DOM method is not implemented by this module. " + message) || this; - } - return NotImplementedError; -}(DOMException)); -exports.NotImplementedError = NotImplementedError; -var HierarchyRequestError = /** @class */ (function (_super) { - __extends(HierarchyRequestError, _super); - /** - * @param message - error message - */ - function HierarchyRequestError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "HierarchyRequestError", "The operation would yield an incorrect node tree. " + message) || this; - } - return HierarchyRequestError; -}(DOMException)); -exports.HierarchyRequestError = HierarchyRequestError; -var NotFoundError = /** @class */ (function (_super) { - __extends(NotFoundError, _super); - /** - * @param message - error message - */ - function NotFoundError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "NotFoundError", "The object can not be found here. " + message) || this; - } - return NotFoundError; -}(DOMException)); -exports.NotFoundError = NotFoundError; -var IndexSizeError = /** @class */ (function (_super) { - __extends(IndexSizeError, _super); - /** - * @param message - error message - */ - function IndexSizeError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "IndexSizeError", "The index is not in the allowed range. " + message) || this; - } - return IndexSizeError; -}(DOMException)); -exports.IndexSizeError = IndexSizeError; -var SyntaxError = /** @class */ (function (_super) { - __extends(SyntaxError, _super); - /** - * @param message - error message - */ - function SyntaxError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "SyntaxError", "The string did not match the expected pattern. " + message) || this; - } - return SyntaxError; -}(DOMException)); -exports.SyntaxError = SyntaxError; -var InvalidCharacterError = /** @class */ (function (_super) { - __extends(InvalidCharacterError, _super); - /** - * @param message - error message - */ - function InvalidCharacterError(message) { - if (message === void 0) { message = ""; } - return _super.call(this, "InvalidCharacterError", "The string contains invalid characters. " + message) || this; - } - return InvalidCharacterError; -}(DOMException)); -exports.InvalidCharacterError = InvalidCharacterError; -//# sourceMappingURL=DOMException.js.map +} +exports.RetryHelper = RetryHelper; +//# sourceMappingURL=retry-helper.js.map /***/ }), -/* 36 */, -/* 37 */, -/* 38 */, -/* 39 */, -/* 40 */, -/* 41 */, -/* 42 */, -/* 43 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 7784: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var NodeImpl_1 = __webpack_require__(935); -var algorithm_1 = __webpack_require__(163); +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const core = __importStar(__nccwpck_require__(2186)); +const io = __importStar(__nccwpck_require__(7436)); +const fs = __importStar(__nccwpck_require__(5747)); +const mm = __importStar(__nccwpck_require__(2473)); +const os = __importStar(__nccwpck_require__(2087)); +const path = __importStar(__nccwpck_require__(5622)); +const httpm = __importStar(__nccwpck_require__(9925)); +const semver = __importStar(__nccwpck_require__(562)); +const stream = __importStar(__nccwpck_require__(2413)); +const util = __importStar(__nccwpck_require__(1669)); +const v4_1 = __importDefault(__nccwpck_require__(824)); +const exec_1 = __nccwpck_require__(1514); +const assert_1 = __nccwpck_require__(2357); +const retry_helper_1 = __nccwpck_require__(8279); +class HTTPError extends Error { + constructor(httpStatusCode) { + super(`Unexpected HTTP response: ${httpStatusCode}`); + this.httpStatusCode = httpStatusCode; + Object.setPrototypeOf(this, new.target.prototype); + } +} +exports.HTTPError = HTTPError; +const IS_WINDOWS = process.platform === 'win32'; +const IS_MAC = process.platform === 'darwin'; +const userAgent = 'actions/tool-cache'; /** - * Represents a generic text node. + * Download a tool from an url and stream it into a file + * + * @param url url of tool to download + * @param dest path to download tool + * @param auth authorization header + * @returns path to downloaded tool */ -var CharacterDataImpl = /** @class */ (function (_super) { - __extends(CharacterDataImpl, _super); - /** - * Initializes a new instance of `CharacterData`. - * - * @param data - the text content - */ - function CharacterDataImpl(data) { - var _this = _super.call(this) || this; - _this._data = data; - return _this; - } - Object.defineProperty(CharacterDataImpl.prototype, "data", { - /** @inheritdoc */ - get: function () { return this._data; }, - set: function (value) { - algorithm_1.characterData_replaceData(this, 0, this._data.length, value); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(CharacterDataImpl.prototype, "length", { - /** @inheritdoc */ - get: function () { return this._data.length; }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - CharacterDataImpl.prototype.substringData = function (offset, count) { - /** - * The substringData(offset, count) method, when invoked, must return the - * result of running substring data with node context object, offset offset, and count count. - */ - return algorithm_1.characterData_substringData(this, offset, count); - }; - /** @inheritdoc */ - CharacterDataImpl.prototype.appendData = function (data) { - /** - * The appendData(data) method, when invoked, must replace data with node - * context object, offset context object’s length, count 0, and data data. - */ - return algorithm_1.characterData_replaceData(this, this._data.length, 0, data); - }; - /** @inheritdoc */ - CharacterDataImpl.prototype.insertData = function (offset, data) { - /** - * The insertData(offset, data) method, when invoked, must replace data with - * node context object, offset offset, count 0, and data data. - */ - algorithm_1.characterData_replaceData(this, offset, 0, data); - }; - /** @inheritdoc */ - CharacterDataImpl.prototype.deleteData = function (offset, count) { - /** - * The deleteData(offset, count) method, when invoked, must replace data - * with node context object, offset offset, count count, and data the - * empty string. - */ - algorithm_1.characterData_replaceData(this, offset, count, ''); - }; - /** @inheritdoc */ - CharacterDataImpl.prototype.replaceData = function (offset, count, data) { - /** - * The replaceData(offset, count, data) method, when invoked, must replace - * data with node context object, offset offset, count count, and data data. - */ - algorithm_1.characterData_replaceData(this, offset, count, data); - }; - Object.defineProperty(CharacterDataImpl.prototype, "previousElementSibling", { - // MIXIN: NonDocumentTypeChildNode - /* istanbul ignore next */ - get: function () { throw new Error("Mixin: NonDocumentTypeChildNode not implemented."); }, - enumerable: true, - configurable: true - }); - Object.defineProperty(CharacterDataImpl.prototype, "nextElementSibling", { - /* istanbul ignore next */ - get: function () { throw new Error("Mixin: NonDocumentTypeChildNode not implemented."); }, - enumerable: true, - configurable: true +function downloadTool(url, dest, auth) { + return __awaiter(this, void 0, void 0, function* () { + dest = dest || path.join(_getTempDirectory(), v4_1.default()); + yield io.mkdirP(path.dirname(dest)); + core.debug(`Downloading ${url}`); + core.debug(`Destination ${dest}`); + const maxAttempts = 3; + const minSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS', 10); + const maxSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS', 20); + const retryHelper = new retry_helper_1.RetryHelper(maxAttempts, minSeconds, maxSeconds); + return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () { + return yield downloadToolAttempt(url, dest || '', auth); + }), (err) => { + if (err instanceof HTTPError && err.httpStatusCode) { + // Don't retry anything less than 500, except 408 Request Timeout and 429 Too Many Requests + if (err.httpStatusCode < 500 && + err.httpStatusCode !== 408 && + err.httpStatusCode !== 429) { + return false; + } + } + // Otherwise retry + return true; + }); }); - // MIXIN: ChildNode - /* istanbul ignore next */ - CharacterDataImpl.prototype.before = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; +} +exports.downloadTool = downloadTool; +function downloadToolAttempt(url, dest, auth) { + return __awaiter(this, void 0, void 0, function* () { + if (fs.existsSync(dest)) { + throw new Error(`Destination file path ${dest} already exists`); } - throw new Error("Mixin: ChildNode not implemented."); - }; - /* istanbul ignore next */ - CharacterDataImpl.prototype.after = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; + // Get the response headers + const http = new httpm.HttpClient(userAgent, [], { + allowRetries: false + }); + let headers; + if (auth) { + core.debug('set auth'); + headers = { + authorization: auth + }; } - throw new Error("Mixin: ChildNode not implemented."); - }; - /* istanbul ignore next */ - CharacterDataImpl.prototype.replaceWith = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; + const response = yield http.get(url, headers); + if (response.message.statusCode !== 200) { + const err = new HTTPError(response.message.statusCode); + core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); + throw err; } - throw new Error("Mixin: ChildNode not implemented."); - }; - /* istanbul ignore next */ - CharacterDataImpl.prototype.remove = function () { throw new Error("Mixin: ChildNode not implemented."); }; - return CharacterDataImpl; -}(NodeImpl_1.NodeImpl)); -exports.CharacterDataImpl = CharacterDataImpl; -//# sourceMappingURL=CharacterDataImpl.js.map - -/***/ }), -/* 44 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - -var common = __webpack_require__(740); -var Type = __webpack_require__(945); - -function isHexCode(c) { - return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || - ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || - ((0x61/* a */ <= c) && (c <= 0x66/* f */)); -} - -function isOctCode(c) { - return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); -} - -function isDecCode(c) { - return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); + // Download the response body + const pipeline = util.promisify(stream.pipeline); + const responseMessageFactory = _getGlobal('TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY', () => response.message); + const readStream = responseMessageFactory(); + let succeeded = false; + try { + yield pipeline(readStream, fs.createWriteStream(dest)); + core.debug('download complete'); + succeeded = true; + return dest; + } + finally { + // Error, delete dest before retry + if (!succeeded) { + core.debug('download failed'); + try { + yield io.rmRF(dest); + } + catch (err) { + core.debug(`Failed to delete '${dest}'. ${err.message}`); + } + } + } + }); } - -function resolveYamlInteger(data) { - if (data === null) return false; - - var max = data.length, - index = 0, - hasDigits = false, - ch; - - if (!max) return false; - - ch = data[index]; - - // sign - if (ch === '-' || ch === '+') { - ch = data[++index]; - } - - if (ch === '0') { - // 0 - if (index + 1 === max) return true; - ch = data[++index]; - - // base 2, base 8, base 16 - - if (ch === 'b') { - // base 2 - index++; - - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (ch !== '0' && ch !== '1') return false; - hasDigits = true; - } - return hasDigits && ch !== '_'; - } - - - if (ch === 'x') { - // base 16 - index++; - - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (!isHexCode(data.charCodeAt(index))) return false; - hasDigits = true; - } - return hasDigits && ch !== '_'; - } - - // base 8 - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (!isOctCode(data.charCodeAt(index))) return false; - hasDigits = true; - } - return hasDigits && ch !== '_'; - } - - // base 10 (except 0) or base 60 - - // value should not start with `_`; - if (ch === '_') return false; - - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (ch === ':') break; - if (!isDecCode(data.charCodeAt(index))) { - return false; - } - hasDigits = true; - } - - // Should have digits and should not end with `_` - if (!hasDigits || ch === '_') return false; - - // if !base60 - done; - if (ch !== ':') return true; - - // base60 almost not used, no needs to optimize - return /^(:[0-5]?[0-9])+$/.test(data.slice(index)); -} - -function constructYamlInteger(data) { - var value = data, sign = 1, ch, base, digits = []; - - if (value.indexOf('_') !== -1) { - value = value.replace(/_/g, ''); - } - - ch = value[0]; - - if (ch === '-' || ch === '+') { - if (ch === '-') sign = -1; - value = value.slice(1); - ch = value[0]; - } - - if (value === '0') return 0; - - if (ch === '0') { - if (value[1] === 'b') return sign * parseInt(value.slice(2), 2); - if (value[1] === 'x') return sign * parseInt(value, 16); - return sign * parseInt(value, 8); - } - - if (value.indexOf(':') !== -1) { - value.split(':').forEach(function (v) { - digits.unshift(parseInt(v, 10)); - }); - - value = 0; - base = 1; - - digits.forEach(function (d) { - value += (d * base); - base *= 60; +/** + * Extract a .7z file + * + * @param file path to the .7z file + * @param dest destination directory. Optional. + * @param _7zPath path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this + * problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will + * gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is + * bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line + * interface, it is smaller than the full command line interface, and it does support long paths. At the + * time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website. + * Be sure to check the current license agreement. If 7zr.exe is bundled with your action, then the path + * to 7zr.exe can be pass to this function. + * @returns path to the destination directory + */ +function extract7z(file, dest, _7zPath) { + return __awaiter(this, void 0, void 0, function* () { + assert_1.ok(IS_WINDOWS, 'extract7z() not supported on current OS'); + assert_1.ok(file, 'parameter "file" is required'); + dest = yield _createExtractFolder(dest); + const originalCwd = process.cwd(); + process.chdir(dest); + if (_7zPath) { + try { + const logLevel = core.isDebug() ? '-bb1' : '-bb0'; + const args = [ + 'x', + logLevel, + '-bd', + '-sccUTF-8', + file + ]; + const options = { + silent: true + }; + yield exec_1.exec(`"${_7zPath}"`, args, options); + } + finally { + process.chdir(originalCwd); + } + } + else { + const escapedScript = path + .join(__dirname, '..', 'scripts', 'Invoke-7zdec.ps1') + .replace(/'/g, "''") + .replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines + const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); + const escapedTarget = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); + const command = `& '${escapedScript}' -Source '${escapedFile}' -Target '${escapedTarget}'`; + const args = [ + '-NoLogo', + '-Sta', + '-NoProfile', + '-NonInteractive', + '-ExecutionPolicy', + 'Unrestricted', + '-Command', + command + ]; + const options = { + silent: true + }; + try { + const powershellPath = yield io.which('powershell', true); + yield exec_1.exec(`"${powershellPath}"`, args, options); + } + finally { + process.chdir(originalCwd); + } + } + return dest; }); - - return sign * value; - - } - - return sign * parseInt(value, 10); -} - -function isInteger(object) { - return (Object.prototype.toString.call(object)) === '[object Number]' && - (object % 1 === 0 && !common.isNegativeZero(object)); } - -module.exports = new Type('tag:yaml.org,2002:int', { - kind: 'scalar', - resolve: resolveYamlInteger, - construct: constructYamlInteger, - predicate: isInteger, - represent: { - binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); }, - octal: function (obj) { return obj >= 0 ? '0' + obj.toString(8) : '-0' + obj.toString(8).slice(1); }, - decimal: function (obj) { return obj.toString(10); }, - /* eslint-disable max-len */ - hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); } - }, - defaultStyle: 'decimal', - styleAliases: { - binary: [ 2, 'bin' ], - octal: [ 8, 'oct' ], - decimal: [ 10, 'dec' ], - hexadecimal: [ 16, 'hex' ] - } -}); - - -/***/ }), -/* 45 */, -/* 46 */, -/* 47 */ -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); +exports.extract7z = extract7z; /** - * Walks through the code points of a string. + * Extract a compressed tar archive + * + * @param file path to the tar + * @param dest destination directory. Optional. + * @param flags flags for the tar command to use for extraction. Defaults to 'xz' (extracting gzipped tars). Optional. + * @returns path to the destination directory */ -var StringWalker = /** @class */ (function () { - /** - * Initializes a new `StringWalker`. - * - * @param input - input string - */ - function StringWalker(input) { - this._pointer = 0; - this._chars = Array.from(input); - this._length = this._chars.length; - } - Object.defineProperty(StringWalker.prototype, "eof", { - /** - * Determines if the current position is beyond the end of string. - */ - get: function () { return this._pointer >= this._length; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StringWalker.prototype, "length", { - /** - * Returns the number of code points in the input string. - */ - get: function () { return this._length; }, - enumerable: true, - configurable: true - }); - /** - * Returns the current code point. Returns `-1` if the position is beyond - * the end of string. - */ - StringWalker.prototype.codePoint = function () { - if (this._codePoint === undefined) { - if (this.eof) { - this._codePoint = -1; - } - else { - var cp = this._chars[this._pointer].codePointAt(0); - /* istanbul ignore else */ - if (cp !== undefined) { - this._codePoint = cp; - } - else { - this._codePoint = -1; - } +function extractTar(file, dest, flags = 'xz') { + return __awaiter(this, void 0, void 0, function* () { + if (!file) { + throw new Error("parameter 'file' is required"); + } + // Create dest + dest = yield _createExtractFolder(dest); + // Determine whether GNU tar + core.debug('Checking tar --version'); + let versionOutput = ''; + yield exec_1.exec('tar --version', [], { + ignoreReturnCode: true, + silent: true, + listeners: { + stdout: (data) => (versionOutput += data.toString()), + stderr: (data) => (versionOutput += data.toString()) } + }); + core.debug(versionOutput.trim()); + const isGnuTar = versionOutput.toUpperCase().includes('GNU TAR'); + // Initialize args + let args; + if (flags instanceof Array) { + args = flags; } - return this._codePoint; - }; - /** - * Returns the current character. Returns an empty string if the position is - * beyond the end of string. - */ - StringWalker.prototype.c = function () { - if (this._c === undefined) { - this._c = (this.eof ? "" : this._chars[this._pointer]); + else { + args = [flags]; } - return this._c; - }; - /** - * Returns the remaining string. - */ - StringWalker.prototype.remaining = function () { - if (this._remaining === undefined) { - this._remaining = (this.eof ? - "" : this._chars.slice(this._pointer + 1).join('')); + if (core.isDebug() && !flags.includes('v')) { + args.push('-v'); } - return this._remaining; - }; - /** - * Returns the substring from the current character to the end of string. - */ - StringWalker.prototype.substring = function () { - if (this._substring === undefined) { - this._substring = (this.eof ? - "" : this._chars.slice(this._pointer).join('')); + let destArg = dest; + let fileArg = file; + if (IS_WINDOWS && isGnuTar) { + args.push('--force-local'); + destArg = dest.replace(/\\/g, '/'); + // Technically only the dest needs to have `/` but for aesthetic consistency + // convert slashes in the file arg too. + fileArg = file.replace(/\\/g, '/'); } - return this._substring; - }; - Object.defineProperty(StringWalker.prototype, "pointer", { - /** - * Gets or sets the current position. - */ - get: function () { return this._pointer; }, - set: function (val) { - if (val === this._pointer) - return; - this._pointer = val; - this._codePoint = undefined; - this._c = undefined; - this._remaining = undefined; - this._substring = undefined; - }, - enumerable: true, - configurable: true + if (isGnuTar) { + // Suppress warnings when using GNU tar to extract archives created by BSD tar + args.push('--warning=no-unknown-keyword'); + } + args.push('-C', destArg, '-f', fileArg); + yield exec_1.exec(`tar`, args); + return dest; }); - return StringWalker; -}()); -exports.StringWalker = StringWalker; -//# sourceMappingURL=StringWalker.js.map - -/***/ }), -/* 48 */, -/* 49 */, -/* 50 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var util_1 = __webpack_require__(592); -var BaseReader_1 = __webpack_require__(305); -var dom_1 = __webpack_require__(743); +} +exports.extractTar = extractTar; /** - * Parses XML nodes from objects and arrays. - * ES6 maps and sets are also supoorted. + * Extract a xar compatible archive + * + * @param file path to the archive + * @param dest destination directory. Optional. + * @param flags flags for the xar. Optional. + * @returns path to the destination directory */ -var ObjectReader = /** @class */ (function (_super) { - __extends(ObjectReader, _super); - function ObjectReader() { - return _super !== null && _super.apply(this, arguments) || this; - } - /** - * Parses the given document representation. - * - * @param node - node receive parsed XML nodes - * @param obj - object to parse - */ - ObjectReader.prototype._parse = function (node, obj) { - var _this = this; - var options = this._builderOptions; - // sanitizes input characters - var invalidCharReplacement = options.invalidCharReplacement; - var s = function (str) { - return dom_1.sanitizeInput(str, invalidCharReplacement); - }; - var lastChild = null; - if (util_1.isFunction(obj)) { - // evaluate if function - lastChild = this.parse(node, obj.apply(this)); +function extractXar(file, dest, flags = []) { + return __awaiter(this, void 0, void 0, function* () { + assert_1.ok(IS_MAC, 'extractXar() not supported on current OS'); + assert_1.ok(file, 'parameter "file" is required'); + dest = yield _createExtractFolder(dest); + let args; + if (flags instanceof Array) { + args = flags; } - else if (util_1.isArray(obj) || util_1.isSet(obj)) { - util_1.forEachArray(obj, function (item) { return lastChild = _this.parse(node, item); }, this); + else { + args = [flags]; } - else /* if (isMap(obj) || isObject(obj)) */ { - // expand if object - util_1.forEachObject(obj, function (key, val) { - if (util_1.isFunction(val)) { - // evaluate if function - val = val.apply(_this); - } - if (!options.ignoreConverters && key.indexOf(options.convert.att) === 0) { - // assign attributes - if (key === options.convert.att) { - if (util_1.isArray(val) || util_1.isSet(val)) { - throw new Error("Invalid attribute: " + val.toString() + ". " + node._debugInfo()); - } - else /* if (isMap(val) || isObject(val)) */ { - util_1.forEachObject(val, function (attrKey, attrVal) { - lastChild = _this.attribute(node, undefined, s(attrKey), s(attrVal)) || lastChild; - }); - } - } - else { - lastChild = _this.attribute(node, undefined, s(key.substr(options.convert.att.length)), s(val)) || lastChild; - } - } - else if (!options.ignoreConverters && key.indexOf(options.convert.text) === 0) { - // text node - if (util_1.isMap(val) || util_1.isObject(val)) { - // if the key is #text expand child nodes under this node to support mixed content - lastChild = _this.parse(node, val); - } - else { - lastChild = _this.text(node, s(val)) || lastChild; - } - } - else if (!options.ignoreConverters && key.indexOf(options.convert.cdata) === 0) { - // cdata node - if (util_1.isArray(val) || util_1.isSet(val)) { - util_1.forEachArray(val, function (item) { return lastChild = _this.cdata(node, s(item)) || lastChild; }, _this); - } - else { - lastChild = _this.cdata(node, s(val)) || lastChild; - } - } - else if (!options.ignoreConverters && key.indexOf(options.convert.comment) === 0) { - // comment node - if (util_1.isArray(val) || util_1.isSet(val)) { - util_1.forEachArray(val, function (item) { return lastChild = _this.comment(node, s(item)) || lastChild; }, _this); - } - else { - lastChild = _this.comment(node, s(val)) || lastChild; - } - } - else if (!options.ignoreConverters && key.indexOf(options.convert.ins) === 0) { - // processing instruction - if (util_1.isString(val)) { - var insIndex = val.indexOf(' '); - var insTarget = (insIndex === -1 ? val : val.substr(0, insIndex)); - var insValue = (insIndex === -1 ? '' : val.substr(insIndex + 1)); - lastChild = _this.instruction(node, s(insTarget), s(insValue)) || lastChild; - } - else if (util_1.isArray(val) || util_1.isSet(val)) { - util_1.forEachArray(val, function (item) { - var insIndex = item.indexOf(' '); - var insTarget = (insIndex === -1 ? item : item.substr(0, insIndex)); - var insValue = (insIndex === -1 ? '' : item.substr(insIndex + 1)); - lastChild = _this.instruction(node, s(insTarget), s(insValue)) || lastChild; - }, _this); - } - else /* if (isMap(target) || isObject(target)) */ { - util_1.forEachObject(val, function (insTarget, insValue) { return lastChild = _this.instruction(node, s(insTarget), s(insValue)) || lastChild; }, _this); - } - } - else if ((util_1.isArray(val) || util_1.isSet(val)) && util_1.isEmpty(val)) { - // skip empty arrays - } - else if ((util_1.isMap(val) || util_1.isObject(val)) && util_1.isEmpty(val)) { - // empty objects produce one node - lastChild = _this.element(node, undefined, s(key)) || lastChild; - } - else if (!options.keepNullNodes && (val == null)) { - // skip null and undefined nodes - } - else if (util_1.isArray(val) || util_1.isSet(val)) { - // expand list by creating child nodes - util_1.forEachArray(val, function (item) { - var childNode = {}; - childNode[key] = item; - lastChild = _this.parse(node, childNode); - }, _this); - } - else if (util_1.isMap(val) || util_1.isObject(val)) { - // create a parent node - var parent = _this.element(node, undefined, key); - if (parent) { - lastChild = parent; - // expand child nodes under parent - _this.parse(parent, val); - } - } - else if (val != null && val !== '') { - // leaf element node with a single text node - var parent = _this.element(node, undefined, key); - if (parent) { - lastChild = parent; - _this.text(parent, s(val)); - } - } - else { - // leaf element node - lastChild = _this.element(node, undefined, s(key)) || lastChild; - } - }, this); + args.push('-x', '-C', dest, '-f', file); + if (core.isDebug()) { + args.push('-v'); } - return lastChild || node; - }; - return ObjectReader; -}(BaseReader_1.BaseReader)); -exports.ObjectReader = ObjectReader; -//# sourceMappingURL=ObjectReader.js.map - -/***/ }), -/* 51 */, -/* 52 */, -/* 53 */, -/* 54 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var OrderedSetAlgorithm_1 = __webpack_require__(146); -var DOMAlgorithm_1 = __webpack_require__(304); -var ElementAlgorithm_1 = __webpack_require__(33); + const xarPath = yield io.which('xar', true); + yield exec_1.exec(`"${xarPath}"`, _unique(args)); + return dest; + }); +} +exports.extractXar = extractXar; /** - * Validates a given token against the supported tokens defined for the given - * token lists' associated attribute. + * Extract a zip * - * @param tokenList - a token list - * @param token - a token + * @param file path to the zip + * @param dest destination directory. Optional. + * @returns path to the destination directory */ -function tokenList_validationSteps(tokenList, token) { - /** - * 1. If the associated attribute’s local name does not define supported - * tokens, throw a TypeError. - * 2. Let lowercase token be a copy of token, in ASCII lowercase. - * 3. If lowercase token is present in supported tokens, return true. - * 4. Return false. - */ - if (!DOMAlgorithm_1.dom_hasSupportedTokens(tokenList._attribute._localName)) { - throw new TypeError("There are no supported tokens defined for attribute name: '" + tokenList._attribute._localName + "'."); - } - return DOMAlgorithm_1.dom_getSupportedTokens(tokenList._attribute._localName).has(token.toLowerCase()); +function extractZip(file, dest) { + return __awaiter(this, void 0, void 0, function* () { + if (!file) { + throw new Error("parameter 'file' is required"); + } + dest = yield _createExtractFolder(dest); + if (IS_WINDOWS) { + yield extractZipWin(file, dest); + } + else { + yield extractZipNix(file, dest); + } + return dest; + }); +} +exports.extractZip = extractZip; +function extractZipWin(file, dest) { + return __awaiter(this, void 0, void 0, function* () { + // build the powershell command + const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines + const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); + const command = `$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}')`; + // run powershell + const powershellPath = yield io.which('powershell', true); + const args = [ + '-NoLogo', + '-Sta', + '-NoProfile', + '-NonInteractive', + '-ExecutionPolicy', + 'Unrestricted', + '-Command', + command + ]; + yield exec_1.exec(`"${powershellPath}"`, args); + }); +} +function extractZipNix(file, dest) { + return __awaiter(this, void 0, void 0, function* () { + const unzipPath = yield io.which('unzip', true); + const args = [file]; + if (!core.isDebug()) { + args.unshift('-q'); + } + yield exec_1.exec(`"${unzipPath}"`, args, { cwd: dest }); + }); } -exports.tokenList_validationSteps = tokenList_validationSteps; /** - * Updates the value of the token lists' associated attribute. + * Caches a directory and installs it into the tool cacheDir * - * @param tokenList - a token list + * @param sourceDir the directory to cache into tools + * @param tool tool name + * @param version version of the tool. semver format + * @param arch architecture of the tool. Optional. Defaults to machine architecture */ -function tokenList_updateSteps(tokenList) { - /** - * 1. If the associated element does not have an associated attribute and - * token set is empty, then return. - * 2. Set an attribute value for the associated element using associated - * attribute’s local name and the result of running the ordered set - * serializer for token set. - */ - if (!tokenList._element.hasAttribute(tokenList._attribute._localName) && - tokenList._tokenSet.size === 0) { - return; - } - ElementAlgorithm_1.element_setAnAttributeValue(tokenList._element, tokenList._attribute._localName, OrderedSetAlgorithm_1.orderedSet_serialize(tokenList._tokenSet)); +function cacheDir(sourceDir, tool, version, arch) { + return __awaiter(this, void 0, void 0, function* () { + version = semver.clean(version) || version; + arch = arch || os.arch(); + core.debug(`Caching tool ${tool} ${version} ${arch}`); + core.debug(`source dir: ${sourceDir}`); + if (!fs.statSync(sourceDir).isDirectory()) { + throw new Error('sourceDir is not a directory'); + } + // Create the tool dir + const destPath = yield _createToolPath(tool, version, arch); + // copy each child item. do not move. move can fail on Windows + // due to anti-virus software having an open handle on a file. + for (const itemName of fs.readdirSync(sourceDir)) { + const s = path.join(sourceDir, itemName); + yield io.cp(s, destPath, { recursive: true }); + } + // write .complete + _completeToolPath(tool, version, arch); + return destPath; + }); } -exports.tokenList_updateSteps = tokenList_updateSteps; +exports.cacheDir = cacheDir; /** - * Gets the value of the token lists' associated attribute. + * Caches a downloaded file (GUID) and installs it + * into the tool cache with a given targetName * - * @param tokenList - a token list + * @param sourceFile the file to cache into tools. Typically a result of downloadTool which is a guid. + * @param targetFile the name of the file name in the tools directory + * @param tool tool name + * @param version version of the tool. semver format + * @param arch architecture of the tool. Optional. Defaults to machine architecture */ -function tokenList_serializeSteps(tokenList) { - /** - * A DOMTokenList object’s serialize steps are to return the result of - * running get an attribute value given the associated element and the - * associated attribute’s local name. - */ - return ElementAlgorithm_1.element_getAnAttributeValue(tokenList._element, tokenList._attribute._localName); -} -exports.tokenList_serializeSteps = tokenList_serializeSteps; -//# sourceMappingURL=DOMTokenListAlgorithm.js.map - -/***/ }), -/* 55 */, -/* 56 */, -/* 57 */, -/* 58 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -// Unique ID creation requires a high quality random # generator. In node.js -// this is pretty straight-forward - we use the crypto API. - -var crypto = __webpack_require__(373); - -module.exports = function nodeRNG() { - return crypto.randomBytes(16); -}; - - -/***/ }), -/* 59 */, -/* 60 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; +function cacheFile(sourceFile, targetFile, tool, version, arch) { + return __awaiter(this, void 0, void 0, function* () { + version = semver.clean(version) || version; + arch = arch || os.arch(); + core.debug(`Caching tool ${tool} ${version} ${arch}`); + core.debug(`source file: ${sourceFile}`); + if (!fs.statSync(sourceFile).isFile()) { + throw new Error('sourceFile is not a file'); } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var util_1 = __webpack_require__(592); -var CreateAlgorithm_1 = __webpack_require__(86); + // create the tool dir + const destFolder = yield _createToolPath(tool, version, arch); + // copy instead of move. move can fail on Windows due to + // anti-virus software having an open handle on a file. + const destPath = path.join(destFolder, targetFile); + core.debug(`destination file ${destPath}`); + yield io.cp(sourceFile, destPath); + // write .complete + _completeToolPath(tool, version, arch); + return destFolder; + }); +} +exports.cacheFile = cacheFile; /** - * Converts the given nodes or strings into a node (if `nodes` has - * only one element) or a document fragment. + * Finds the path to a tool version in the local installed tool cache * - * @param nodes - the array of nodes or strings, - * @param document - owner document + * @param toolName name of the tool + * @param versionSpec version of the tool + * @param arch optional arch. defaults to arch of computer */ -function parentNode_convertNodesIntoANode(nodes, document) { - var e_1, _a; - /** - * 1. Let node be null. - * 2. Replace each string in nodes with a new Text node whose data is the - * string and node document is document. - */ - var node = null; - for (var i = 0; i < nodes.length; i++) { - var item = nodes[i]; - if (util_1.isString(item)) { - var text = CreateAlgorithm_1.create_text(document, item); - nodes[i] = text; +function find(toolName, versionSpec, arch) { + if (!toolName) { + throw new Error('toolName parameter is required'); + } + if (!versionSpec) { + throw new Error('versionSpec parameter is required'); + } + arch = arch || os.arch(); + // attempt to resolve an explicit version + if (!_isExplicitVersion(versionSpec)) { + const localVersions = findAllVersions(toolName, arch); + const match = _evaluateVersions(localVersions, versionSpec); + versionSpec = match; + } + // check for the explicit version in the cache + let toolPath = ''; + if (versionSpec) { + versionSpec = semver.clean(versionSpec) || ''; + const cachePath = path.join(_getCacheDirectory(), toolName, versionSpec, arch); + core.debug(`checking cache: ${cachePath}`); + if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) { + core.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch}`); + toolPath = cachePath; + } + else { + core.debug('not found'); } } - /** - * 3. If nodes contains one node, set node to that node. - * 4. Otherwise, set node to a new DocumentFragment whose node document is - * document, and then append each node in nodes, if any, to it. - */ - if (nodes.length === 1) { - node = nodes[0]; + return toolPath; +} +exports.find = find; +/** + * Finds the paths to all versions of a tool that are installed in the local tool cache + * + * @param toolName name of the tool + * @param arch optional arch. defaults to arch of computer + */ +function findAllVersions(toolName, arch) { + const versions = []; + arch = arch || os.arch(); + const toolPath = path.join(_getCacheDirectory(), toolName); + if (fs.existsSync(toolPath)) { + const children = fs.readdirSync(toolPath); + for (const child of children) { + if (_isExplicitVersion(child)) { + const fullPath = path.join(toolPath, child, arch || ''); + if (fs.existsSync(fullPath) && fs.existsSync(`${fullPath}.complete`)) { + versions.push(child); + } + } + } } - else { - node = CreateAlgorithm_1.create_documentFragment(document); - var ns = node; - try { - for (var nodes_1 = __values(nodes), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) { - var item = nodes_1_1.value; - ns.appendChild(item); + return versions; +} +exports.findAllVersions = findAllVersions; +function getManifestFromRepo(owner, repo, auth, branch = 'master') { + return __awaiter(this, void 0, void 0, function* () { + let releases = []; + const treeUrl = `https://api.github.com/repos/${owner}/${repo}/git/trees/${branch}`; + const http = new httpm.HttpClient('tool-cache'); + const headers = {}; + if (auth) { + core.debug('set auth'); + headers.authorization = auth; + } + const response = yield http.getJson(treeUrl, headers); + if (!response.result) { + return releases; + } + let manifestUrl = ''; + for (const item of response.result.tree) { + if (item.path === 'versions-manifest.json') { + manifestUrl = item.url; + break; } } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { + headers['accept'] = 'application/vnd.github.VERSION.raw'; + let versionsRaw = yield (yield http.get(manifestUrl, headers)).readBody(); + if (versionsRaw) { + // shouldn't be needed but protects against invalid json saved with BOM + versionsRaw = versionsRaw.replace(/^\uFEFF/, ''); try { - if (nodes_1_1 && !nodes_1_1.done && (_a = nodes_1.return)) _a.call(nodes_1); + releases = JSON.parse(versionsRaw); } - finally { if (e_1) throw e_1.error; } + catch (_a) { + core.debug('Invalid json'); + } + } + return releases; + }); +} +exports.getManifestFromRepo = getManifestFromRepo; +function findFromManifest(versionSpec, stable, manifest, archFilter = os.arch()) { + return __awaiter(this, void 0, void 0, function* () { + // wrap the internal impl + const match = yield mm._findMatch(versionSpec, stable, manifest, archFilter); + return match; + }); +} +exports.findFromManifest = findFromManifest; +function _createExtractFolder(dest) { + return __awaiter(this, void 0, void 0, function* () { + if (!dest) { + // create a temp dir + dest = path.join(_getTempDirectory(), v4_1.default()); + } + yield io.mkdirP(dest); + return dest; + }); +} +function _createToolPath(tool, version, arch) { + return __awaiter(this, void 0, void 0, function* () { + const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); + core.debug(`destination ${folderPath}`); + const markerPath = `${folderPath}.complete`; + yield io.rmRF(folderPath); + yield io.rmRF(markerPath); + yield io.mkdirP(folderPath); + return folderPath; + }); +} +function _completeToolPath(tool, version, arch) { + const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); + const markerPath = `${folderPath}.complete`; + fs.writeFileSync(markerPath, ''); + core.debug('finished caching tool'); +} +function _isExplicitVersion(versionSpec) { + const c = semver.clean(versionSpec) || ''; + core.debug(`isExplicit: ${c}`); + const valid = semver.valid(c) != null; + core.debug(`explicit? ${valid}`); + return valid; +} +function _evaluateVersions(versions, versionSpec) { + let version = ''; + core.debug(`evaluating ${versions.length} versions`); + versions = versions.sort((a, b) => { + if (semver.gt(a, b)) { + return 1; + } + return -1; + }); + for (let i = versions.length - 1; i >= 0; i--) { + const potential = versions[i]; + const satisfied = semver.satisfies(potential, versionSpec); + if (satisfied) { + version = potential; + break; } } - /** - * 5. Return node. - */ - return node; + if (version) { + core.debug(`matched: ${version}`); + } + else { + core.debug('match not found'); + } + return version; } -exports.parentNode_convertNodesIntoANode = parentNode_convertNodesIntoANode; -//# sourceMappingURL=ParentNodeAlgorithm.js.map +/** + * Gets RUNNER_TOOL_CACHE + */ +function _getCacheDirectory() { + const cacheDirectory = process.env['RUNNER_TOOL_CACHE'] || ''; + assert_1.ok(cacheDirectory, 'Expected RUNNER_TOOL_CACHE to be defined'); + return cacheDirectory; +} +/** + * Gets RUNNER_TEMP + */ +function _getTempDirectory() { + const tempDirectory = process.env['RUNNER_TEMP'] || ''; + assert_1.ok(tempDirectory, 'Expected RUNNER_TEMP to be defined'); + return tempDirectory; +} +/** + * Gets a global variable + */ +function _getGlobal(key, defaultValue) { + /* eslint-disable @typescript-eslint/no-explicit-any */ + const value = global[key]; + /* eslint-enable @typescript-eslint/no-explicit-any */ + return value !== undefined ? value : defaultValue; +} +/** + * Returns an array of unique values. + * @param values Values to make unique. + */ +function _unique(values) { + return Array.from(new Set(values)); +} +//# sourceMappingURL=tool-cache.js.map /***/ }), -/* 61 */, -/* 62 */, -/* 63 */, -/* 64 */, -/* 65 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const debug = __webpack_require__(548) -const { MAX_LENGTH, MAX_SAFE_INTEGER } = __webpack_require__(181) -const { re, t } = __webpack_require__(976) - -const parseOptions = __webpack_require__(143) -const { compareIdentifiers } = __webpack_require__(954) -class SemVer { - constructor (version, options) { - options = parseOptions(options) - - if (version instanceof SemVer) { - if (version.loose === !!options.loose && - version.includePrerelease === !!options.includePrerelease) { - return version - } else { - version = version.version - } - } else if (typeof version !== 'string') { - throw new TypeError(`Invalid Version: ${version}`) - } - if (version.length > MAX_LENGTH) { - throw new TypeError( - `version is longer than ${MAX_LENGTH} characters` - ) - } +/***/ 562: +/***/ ((module, exports) => { - debug('SemVer', version, options) - this.options = options - this.loose = !!options.loose - // this isn't actually relevant for versions, but keep it so that we - // don't run into trouble passing this.options around. - this.includePrerelease = !!options.includePrerelease +exports = module.exports = SemVer - const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) +var debug +/* istanbul ignore next */ +if (typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG)) { + debug = function () { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift('SEMVER') + console.log.apply(console, args) + } +} else { + debug = function () {} +} - if (!m) { - throw new TypeError(`Invalid Version: ${version}`) - } +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +exports.SEMVER_SPEC_VERSION = '2.0.0' - this.raw = version +var MAX_LENGTH = 256 +var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || + /* istanbul ignore next */ 9007199254740991 - // these are actually numbers - this.major = +m[1] - this.minor = +m[2] - this.patch = +m[3] +// Max safe segment length for coercion. +var MAX_SAFE_COMPONENT_LENGTH = 16 - if (this.major > MAX_SAFE_INTEGER || this.major < 0) { - throw new TypeError('Invalid major version') - } +// The actual regexps go on exports.re +var re = exports.re = [] +var src = exports.src = [] +var t = exports.tokens = {} +var R = 0 - if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { - throw new TypeError('Invalid minor version') - } +function tok (n) { + t[n] = R++ +} - if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { - throw new TypeError('Invalid patch version') - } +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. - // numberify any prerelease numeric ids - if (!m[4]) { - this.prerelease = [] - } else { - this.prerelease = m[4].split('.').map((id) => { - if (/^[0-9]+$/.test(id)) { - const num = +id - if (num >= 0 && num < MAX_SAFE_INTEGER) { - return num - } - } - return id - }) - } +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. - this.build = m[5] ? m[5].split('.') : [] - this.format() - } +tok('NUMERICIDENTIFIER') +src[t.NUMERICIDENTIFIER] = '0|[1-9]\\d*' +tok('NUMERICIDENTIFIERLOOSE') +src[t.NUMERICIDENTIFIERLOOSE] = '[0-9]+' - format () { - this.version = `${this.major}.${this.minor}.${this.patch}` - if (this.prerelease.length) { - this.version += `-${this.prerelease.join('.')}` - } - return this.version - } +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. - toString () { - return this.version - } +tok('NONNUMERICIDENTIFIER') +src[t.NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*' - compare (other) { - debug('SemVer.compare', this.version, this.options, other) - if (!(other instanceof SemVer)) { - if (typeof other === 'string' && other === this.version) { - return 0 - } - other = new SemVer(other, this.options) - } +// ## Main Version +// Three dot-separated numeric identifiers. - if (other.version === this.version) { - return 0 - } +tok('MAINVERSION') +src[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\.' + + '(' + src[t.NUMERICIDENTIFIER] + ')\\.' + + '(' + src[t.NUMERICIDENTIFIER] + ')' - return this.compareMain(other) || this.comparePre(other) - } +tok('MAINVERSIONLOOSE') +src[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')' - compareMain (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. - return ( - compareIdentifiers(this.major, other.major) || - compareIdentifiers(this.minor, other.minor) || - compareIdentifiers(this.patch, other.patch) - ) - } +tok('PRERELEASEIDENTIFIER') +src[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] + + '|' + src[t.NONNUMERICIDENTIFIER] + ')' - comparePre (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } +tok('PRERELEASEIDENTIFIERLOOSE') +src[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] + + '|' + src[t.NONNUMERICIDENTIFIER] + ')' - // NOT having a prerelease is > having one - if (this.prerelease.length && !other.prerelease.length) { - return -1 - } else if (!this.prerelease.length && other.prerelease.length) { - return 1 - } else if (!this.prerelease.length && !other.prerelease.length) { - return 0 - } +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. - let i = 0 - do { - const a = this.prerelease[i] - const b = other.prerelease[i] - debug('prerelease compare', i, a, b) - if (a === undefined && b === undefined) { - return 0 - } else if (b === undefined) { - return 1 - } else if (a === undefined) { - return -1 - } else if (a === b) { - continue - } else { - return compareIdentifiers(a, b) - } - } while (++i) - } +tok('PRERELEASE') +src[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] + + '(?:\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))' - compareBuild (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } +tok('PRERELEASELOOSE') +src[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] + + '(?:\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))' - let i = 0 - do { - const a = this.build[i] - const b = other.build[i] - debug('prerelease compare', i, a, b) - if (a === undefined && b === undefined) { - return 0 - } else if (b === undefined) { - return 1 - } else if (a === undefined) { - return -1 - } else if (a === b) { - continue - } else { - return compareIdentifiers(a, b) - } - } while (++i) - } +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. - // preminor will bump the version up to the next minor release, and immediately - // down to pre-release. premajor and prepatch work the same way. - inc (release, identifier) { - switch (release) { - case 'premajor': - this.prerelease.length = 0 - this.patch = 0 - this.minor = 0 - this.major++ - this.inc('pre', identifier) - break - case 'preminor': - this.prerelease.length = 0 - this.patch = 0 - this.minor++ - this.inc('pre', identifier) - break - case 'prepatch': - // If this is already a prerelease, it will bump to the next version - // drop any prereleases that might already exist, since they are not - // relevant at this point. - this.prerelease.length = 0 - this.inc('patch', identifier) - this.inc('pre', identifier) - break - // If the input is a non-prerelease version, this acts the same as - // prepatch. - case 'prerelease': - if (this.prerelease.length === 0) { - this.inc('patch', identifier) - } - this.inc('pre', identifier) - break +tok('BUILDIDENTIFIER') +src[t.BUILDIDENTIFIER] = '[0-9A-Za-z-]+' - case 'major': - // If this is a pre-major version, bump up to the same major version. - // Otherwise increment major. - // 1.0.0-5 bumps to 1.0.0 - // 1.1.0 bumps to 2.0.0 - if ( - this.minor !== 0 || - this.patch !== 0 || - this.prerelease.length === 0 - ) { - this.major++ - } - this.minor = 0 - this.patch = 0 - this.prerelease = [] - break - case 'minor': - // If this is a pre-minor version, bump up to the same minor version. - // Otherwise increment minor. - // 1.2.0-5 bumps to 1.2.0 - // 1.2.1 bumps to 1.3.0 - if (this.patch !== 0 || this.prerelease.length === 0) { - this.minor++ - } - this.patch = 0 - this.prerelease = [] - break - case 'patch': - // If this is not a pre-release version, it will increment the patch. - // If it is a pre-release it will bump up to the same patch version. - // 1.2.0-5 patches to 1.2.0 - // 1.2.0 patches to 1.2.1 - if (this.prerelease.length === 0) { - this.patch++ - } - this.prerelease = [] - break - // This probably shouldn't be used publicly. - // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. - case 'pre': - if (this.prerelease.length === 0) { - this.prerelease = [0] - } else { - let i = this.prerelease.length - while (--i >= 0) { - if (typeof this.prerelease[i] === 'number') { - this.prerelease[i]++ - i = -2 - } - } - if (i === -1) { - // didn't increment anything - this.prerelease.push(0) - } - } - if (identifier) { - // 1.2.0-beta.1 bumps to 1.2.0-beta.2, - // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 - if (this.prerelease[0] === identifier) { - if (isNaN(this.prerelease[1])) { - this.prerelease = [identifier, 0] - } - } else { - this.prerelease = [identifier, 0] - } - } - break +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. - default: - throw new Error(`invalid increment argument: ${release}`) - } - this.format() - this.raw = this.version - return this - } -} +tok('BUILD') +src[t.BUILD] = '(?:\\+(' + src[t.BUILDIDENTIFIER] + + '(?:\\.' + src[t.BUILDIDENTIFIER] + ')*))' -module.exports = SemVer +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. -/***/ }), -/* 66 */, -/* 67 */, -/* 68 */, -/* 69 */, -/* 70 */, -/* 71 */, -/* 72 */, -/* 73 */, -/* 74 */, -/* 75 */ -/***/ (function(module, __unusedexports, __webpack_require__) { +tok('FULL') +tok('FULLPLAIN') +src[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] + + src[t.PRERELEASE] + '?' + + src[t.BUILD] + '?' -"use strict"; +src[t.FULL] = '^' + src[t.FULLPLAIN] + '$' +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +tok('LOOSEPLAIN') +src[t.LOOSEPLAIN] = '[v=\\s]*' + src[t.MAINVERSIONLOOSE] + + src[t.PRERELEASELOOSE] + '?' + + src[t.BUILD] + '?' -var Type = __webpack_require__(945); +tok('LOOSE') +src[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$' -var _toString = Object.prototype.toString; +tok('GTLT') +src[t.GTLT] = '((?:<|>)?=?)' -function resolveYamlPairs(data) { - if (data === null) return true; +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +tok('XRANGEIDENTIFIERLOOSE') +src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' +tok('XRANGEIDENTIFIER') +src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\*' - var index, length, pair, keys, result, - object = data; +tok('XRANGEPLAIN') +src[t.XRANGEPLAIN] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + + '(?:' + src[t.PRERELEASE] + ')?' + + src[t.BUILD] + '?' + + ')?)?' - result = new Array(object.length); +tok('XRANGEPLAINLOOSE') +src[t.XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + + '(?:' + src[t.PRERELEASELOOSE] + ')?' + + src[t.BUILD] + '?' + + ')?)?' - for (index = 0, length = object.length; index < length; index += 1) { - pair = object[index]; +tok('XRANGE') +src[t.XRANGE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAIN] + '$' +tok('XRANGELOOSE') +src[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAINLOOSE] + '$' - if (_toString.call(pair) !== '[object Object]') return false; +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +tok('COERCE') +src[t.COERCE] = '(^|[^\\d])' + + '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:$|[^\\d])' +tok('COERCERTL') +re[t.COERCERTL] = new RegExp(src[t.COERCE], 'g') - keys = Object.keys(pair); +// Tilde ranges. +// Meaning is "reasonably at or greater than" +tok('LONETILDE') +src[t.LONETILDE] = '(?:~>?)' - if (keys.length !== 1) return false; +tok('TILDETRIM') +src[t.TILDETRIM] = '(\\s*)' + src[t.LONETILDE] + '\\s+' +re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g') +var tildeTrimReplace = '$1~' - result[index] = [ keys[0], pair[keys[0]] ]; - } +tok('TILDE') +src[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$' +tok('TILDELOOSE') +src[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$' - return true; -} +// Caret ranges. +// Meaning is "at least and backwards compatible with" +tok('LONECARET') +src[t.LONECARET] = '(?:\\^)' -function constructYamlPairs(data) { - if (data === null) return []; +tok('CARETTRIM') +src[t.CARETTRIM] = '(\\s*)' + src[t.LONECARET] + '\\s+' +re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g') +var caretTrimReplace = '$1^' - var index, length, pair, keys, result, - object = data; +tok('CARET') +src[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$' +tok('CARETLOOSE') +src[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$' - result = new Array(object.length); +// A simple gt/lt/eq thing, or just "" to indicate "any version" +tok('COMPARATORLOOSE') +src[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\s*(' + src[t.LOOSEPLAIN] + ')$|^$' +tok('COMPARATOR') +src[t.COMPARATOR] = '^' + src[t.GTLT] + '\\s*(' + src[t.FULLPLAIN] + ')$|^$' - for (index = 0, length = object.length; index < length; index += 1) { - pair = object[index]; +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +tok('COMPARATORTRIM') +src[t.COMPARATORTRIM] = '(\\s*)' + src[t.GTLT] + + '\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')' - keys = Object.keys(pair); +// this one has to use the /g flag +re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g') +var comparatorTrimReplace = '$1$2$3' - result[index] = [ keys[0], pair[keys[0]] ]; - } +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +tok('HYPHENRANGE') +src[t.HYPHENRANGE] = '^\\s*(' + src[t.XRANGEPLAIN] + ')' + + '\\s+-\\s+' + + '(' + src[t.XRANGEPLAIN] + ')' + + '\\s*$' - return result; +tok('HYPHENRANGELOOSE') +src[t.HYPHENRANGELOOSE] = '^\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' + + '\\s+-\\s+' + + '(' + src[t.XRANGEPLAINLOOSE] + ')' + + '\\s*$' + +// Star ranges basically just allow anything at all. +tok('STAR') +src[t.STAR] = '(<|>)?=?\\s*\\*' + +// Compile to actual regexp objects. +// All are flag-free, unless they were created above with a flag. +for (var i = 0; i < R; i++) { + debug(i, src[i]) + if (!re[i]) { + re[i] = new RegExp(src[i]) + } } -module.exports = new Type('tag:yaml.org,2002:pairs', { - kind: 'sequence', - resolve: resolveYamlPairs, - construct: constructYamlPairs -}); +exports.parse = parse +function parse (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + if (version instanceof SemVer) { + return version + } -/***/ }), -/* 76 */, -/* 77 */, -/* 78 */, -/* 79 */, -/* 80 */, -/* 81 */, -/* 82 */ -/***/ (function(__unusedmodule, exports) { + if (typeof version !== 'string') { + return null + } -"use strict"; + if (version.length > MAX_LENGTH) { + return null + } -// We use any as a valid input type -/* eslint-disable @typescript-eslint/no-explicit-any */ -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * 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); + var r = options.loose ? re[t.LOOSE] : re[t.FULL] + if (!r.test(version)) { + return null + } + + try { + return new SemVer(version, options) + } catch (er) { + return null + } } -exports.toCommandValue = toCommandValue; -//# sourceMappingURL=utils.js.map -/***/ }), -/* 83 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { +exports.valid = valid +function valid (version, options) { + var v = parse(version, options) + return v ? v.version : null +} -"use strict"; +exports.clean = clean +function clean (version, options) { + var s = parse(version.trim().replace(/^[=v]+/, ''), options) + return s ? s.version : null +} -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.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.JavaBase = void 0; -const tc = __importStar(__webpack_require__(139)); -const core = __importStar(__webpack_require__(470)); -const fs = __importStar(__webpack_require__(747)); -const semver_1 = __importDefault(__webpack_require__(876)); -const path_1 = __importDefault(__webpack_require__(622)); -const httpm = __importStar(__webpack_require__(539)); -const util_1 = __webpack_require__(322); -const constants_1 = __webpack_require__(211); -class JavaBase { - constructor(distribution, installerOptions) { - this.distribution = distribution; - this.http = new httpm.HttpClient('actions/setup-java', undefined, { - allowRetries: true, - maxRetries: 3 - }); - ({ version: this.version, stable: this.stable } = this.normalizeVersion(installerOptions.version)); - this.architecture = installerOptions.architecture; - this.packageType = installerOptions.packageType; - this.checkLatest = installerOptions.checkLatest; - } - setupJava() { - return __awaiter(this, void 0, void 0, function* () { - let foundJava = this.findInToolcache(); - if (foundJava && !this.checkLatest) { - core.info(`Resolved Java ${foundJava.version} from tool-cache`); - } - else { - core.info('Trying to resolve the latest version from remote'); - const javaRelease = yield this.findPackageForDownload(this.version); - core.info(`Resolved latest version as ${javaRelease.version}`); - if ((foundJava === null || foundJava === void 0 ? void 0 : foundJava.version) === javaRelease.version) { - core.info(`Resolved Java ${foundJava.version} from tool-cache`); - } - else { - core.info('Trying to download...'); - foundJava = yield this.downloadTool(javaRelease); - core.info(`Java ${foundJava.version} was downloaded`); - } - } - // JDK folder may contain postfix "Contents/Home" on macOS - const macOSPostfixPath = path_1.default.join(foundJava.path, constants_1.MACOS_JAVA_CONTENT_POSTFIX); - if (process.platform === 'darwin' && fs.existsSync(macOSPostfixPath)) { - foundJava.path = macOSPostfixPath; - } - core.info(`Setting Java ${foundJava.version} as the default`); - this.setJavaDefault(foundJava.version, foundJava.path); - return foundJava; - }); +exports.SemVer = SemVer + +function SemVer (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false } - get toolcacheFolderName() { - return `Java_${this.distribution}_${this.packageType}`; + } + if (version instanceof SemVer) { + if (version.loose === options.loose) { + return version + } else { + version = version.version } - getToolcacheVersionName(version) { - if (!this.stable) { - if (version.includes('+')) { - return version.replace('+', '-ea.'); - } - else { - return `${version}-ea`; - } + } else if (typeof version !== 'string') { + throw new TypeError('Invalid Version: ' + version) + } + + if (version.length > MAX_LENGTH) { + throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') + } + + if (!(this instanceof SemVer)) { + return new SemVer(version, options) + } + + debug('SemVer', version, options) + this.options = options + this.loose = !!options.loose + + var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) + + if (!m) { + throw new TypeError('Invalid Version: ' + version) + } + + this.raw = version + + // these are actually numbers + this.major = +m[1] + this.minor = +m[2] + this.patch = +m[3] + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') + } + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = [] + } else { + this.prerelease = m[4].split('.').map(function (id) { + if (/^[0-9]+$/.test(id)) { + var num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num } - // Kotlin and some Java dependencies don't work properly when Java path contains "+" sign - // so replace "/hostedtoolcache/Java/11.0.3+4/x64" to "/hostedtoolcache/Java/11.0.3-4/x64" when saves to cache - // related issue: https://github.com/actions/virtual-environments/issues/3014 - return version.replace('+', '-'); + } + return id + }) + } + + this.build = m[5] ? m[5].split('.') : [] + this.format() +} + +SemVer.prototype.format = function () { + this.version = this.major + '.' + this.minor + '.' + this.patch + if (this.prerelease.length) { + this.version += '-' + this.prerelease.join('.') + } + return this.version +} + +SemVer.prototype.toString = function () { + return this.version +} + +SemVer.prototype.compare = function (other) { + debug('SemVer.compare', this.version, this.options, other) + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return this.compareMain(other) || this.comparePre(other) +} + +SemVer.prototype.compareMain = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) +} + +SemVer.prototype.comparePre = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } + + var i = 0 + do { + var a = this.prerelease[i] + var b = other.prerelease[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) } - findInToolcache() { - // we can't use tc.find directly because firstly, we need to filter versions by stability flag - // if *-ea is provided, take only ea versions from toolcache, otherwise - only stable versions - const availableVersions = tc - .findAllVersions(this.toolcacheFolderName, this.architecture) - .map(item => { - return { - version: item - .replace('-ea.', '+') - .replace(/-ea$/, '') - // Kotlin and some Java dependencies don't work properly when Java path contains "+" sign - // so replace "/hostedtoolcache/Java/11.0.3-4/x64" to "/hostedtoolcache/Java/11.0.3+4/x64" when retrieves to cache - // related issue: https://github.com/actions/virtual-environments/issues/3014 - .replace('-', '+'), - path: util_1.getToolcachePath(this.toolcacheFolderName, item, this.architecture) || '', - stable: !item.includes('-ea') - }; - }) - .filter(item => item.stable === this.stable); - const satisfiedVersions = availableVersions - .filter(item => util_1.isVersionSatisfies(this.version, item.version)) - .filter(item => item.path) - .sort((a, b) => { - return -semver_1.default.compareBuild(a.version, b.version); - }); - if (!satisfiedVersions || satisfiedVersions.length === 0) { - return null; - } - return { - version: satisfiedVersions[0].version, - path: satisfiedVersions[0].path - }; + } while (++i) +} + +SemVer.prototype.compareBuild = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + var i = 0 + do { + var a = this.build[i] + var b = other.build[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) } - normalizeVersion(version) { - let stable = true; - if (version.endsWith('-ea')) { - version = version.replace(/-ea$/, ''); - stable = false; + } while (++i) +} + +// preminor will bump the version up to the next minor release, and immediately +// down to pre-release. premajor and prepatch work the same way. +SemVer.prototype.inc = function (release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0 + this.patch = 0 + this.minor = 0 + this.major++ + this.inc('pre', identifier) + break + case 'preminor': + this.prerelease.length = 0 + this.patch = 0 + this.minor++ + this.inc('pre', identifier) + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch', identifier) + this.inc('pre', identifier) + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier) + } + this.inc('pre', identifier) + break + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if (this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0) { + this.major++ + } + this.minor = 0 + this.patch = 0 + this.prerelease = [] + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++ + } + this.patch = 0 + this.prerelease = [] + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++ + } + this.prerelease = [] + break + // This probably shouldn't be used publicly. + // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) { + this.prerelease = [0] + } else { + var i = this.prerelease.length + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++ + i = -2 + } } - else if (version.includes('-ea.')) { - // transform '11.0.3-ea.2' -> '11.0.3+2' - version = version.replace('-ea.', '+'); - stable = false; + if (i === -1) { + // didn't increment anything + this.prerelease.push(0) } - if (!semver_1.default.validRange(version)) { - throw new Error(`The string '${version}' is not valid SemVer notation for a Java version. Please check README file for code snippets and more detailed information`); + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) { + this.prerelease = [identifier, 0] + } + } else { + this.prerelease = [identifier, 0] } - return { - version, - stable - }; + } + break + + default: + throw new Error('invalid increment argument: ' + release) + } + this.format() + this.raw = this.version + return this +} + +exports.inc = inc +function inc (version, release, loose, identifier) { + if (typeof (loose) === 'string') { + identifier = loose + loose = undefined + } + + try { + return new SemVer(version, loose).inc(release, identifier).version + } catch (er) { + return null + } +} + +exports.diff = diff +function diff (version1, version2) { + if (eq(version1, version2)) { + return null + } else { + var v1 = parse(version1) + var v2 = parse(version2) + var prefix = '' + if (v1.prerelease.length || v2.prerelease.length) { + prefix = 'pre' + var defaultResult = 'prerelease' } - setJavaDefault(version, toolPath) { - core.exportVariable('JAVA_HOME', toolPath); - core.addPath(path_1.default.join(toolPath, 'bin')); - core.setOutput('distribution', this.distribution); - core.setOutput('path', toolPath); - core.setOutput('version', version); + for (var key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return prefix + key + } + } } + return defaultResult // may be undefined + } } -exports.JavaBase = JavaBase; - -/***/ }), -/* 84 */, -/* 85 */ -/***/ (function(module, __unusedexports, __webpack_require__) { +exports.compareIdentifiers = compareIdentifiers -const compare = __webpack_require__(874) -const neq = (a, b, loose) => compare(a, b, loose) !== 0 -module.exports = neq +var numeric = /^[0-9]+$/ +function compareIdentifiers (a, b) { + var anum = numeric.test(a) + var bnum = numeric.test(b) + if (anum && bnum) { + a = +a + b = +b + } -/***/ }), -/* 86 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +} -"use strict"; +exports.rcompareIdentifiers = rcompareIdentifiers +function rcompareIdentifiers (a, b) { + return compareIdentifiers(b, a) +} -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImplementationImpl_1 = __webpack_require__(174); -var WindowImpl_1 = __webpack_require__(932); -var XMLDocumentImpl_1 = __webpack_require__(661); -var DocumentImpl_1 = __webpack_require__(488); -var AbortControllerImpl_1 = __webpack_require__(990); -var AbortSignalImpl_1 = __webpack_require__(784); -var DocumentTypeImpl_1 = __webpack_require__(558); -var ElementImpl_1 = __webpack_require__(695); -var DocumentFragmentImpl_1 = __webpack_require__(796); -var ShadowRootImpl_1 = __webpack_require__(581); -var AttrImpl_1 = __webpack_require__(866); -var TextImpl_1 = __webpack_require__(820); -var CDATASectionImpl_1 = __webpack_require__(920); -var CommentImpl_1 = __webpack_require__(760); -var ProcessingInstructionImpl_1 = __webpack_require__(619); -var HTMLCollectionImpl_1 = __webpack_require__(204); -var NodeListImpl_1 = __webpack_require__(636); -var NodeListStaticImpl_1 = __webpack_require__(266); -var NamedNodeMapImpl_1 = __webpack_require__(88); -var RangeImpl_1 = __webpack_require__(90); -var NodeIteratorImpl_1 = __webpack_require__(800); -var TreeWalkerImpl_1 = __webpack_require__(646); -var NodeFilterImpl_1 = __webpack_require__(774); -var MutationRecordImpl_1 = __webpack_require__(730); -var DOMTokenListImpl_1 = __webpack_require__(425); -/** - * Creates a `DOMImplementation`. - * - * @param document - associated document - */ -function create_domImplementation(document) { - return DOMImplementationImpl_1.DOMImplementationImpl._create(document); +exports.major = major +function major (a, loose) { + return new SemVer(a, loose).major } -exports.create_domImplementation = create_domImplementation; -/** - * Creates a `Window` node. - */ -function create_window() { - return WindowImpl_1.WindowImpl._create(); + +exports.minor = minor +function minor (a, loose) { + return new SemVer(a, loose).minor } -exports.create_window = create_window; -/** - * Creates an `XMLDocument` node. - */ -function create_xmlDocument() { - return new XMLDocumentImpl_1.XMLDocumentImpl(); + +exports.patch = patch +function patch (a, loose) { + return new SemVer(a, loose).patch } -exports.create_xmlDocument = create_xmlDocument; -/** - * Creates a `Document` node. - */ -function create_document() { - return new DocumentImpl_1.DocumentImpl(); + +exports.compare = compare +function compare (a, b, loose) { + return new SemVer(a, loose).compare(new SemVer(b, loose)) } -exports.create_document = create_document; -/** - * Creates an `AbortController`. - */ -function create_abortController() { - return new AbortControllerImpl_1.AbortControllerImpl(); + +exports.compareLoose = compareLoose +function compareLoose (a, b) { + return compare(a, b, true) } -exports.create_abortController = create_abortController; -/** - * Creates an `AbortSignal`. - */ -function create_abortSignal() { - return AbortSignalImpl_1.AbortSignalImpl._create(); + +exports.compareBuild = compareBuild +function compareBuild (a, b, loose) { + var versionA = new SemVer(a, loose) + var versionB = new SemVer(b, loose) + return versionA.compare(versionB) || versionA.compareBuild(versionB) } -exports.create_abortSignal = create_abortSignal; -/** - * Creates a `DocumentType` node. - * - * @param document - owner document - * @param name - name of the node - * @param publicId - `PUBLIC` identifier - * @param systemId - `SYSTEM` identifier - */ -function create_documentType(document, name, publicId, systemId) { - return DocumentTypeImpl_1.DocumentTypeImpl._create(document, name, publicId, systemId); + +exports.rcompare = rcompare +function rcompare (a, b, loose) { + return compare(b, a, loose) } -exports.create_documentType = create_documentType; -/** - * Creates a new `Element` node. - * - * @param document - owner document - * @param localName - local name - * @param namespace - namespace - * @param prefix - namespace prefix - */ -function create_element(document, localName, namespace, prefix) { - return ElementImpl_1.ElementImpl._create(document, localName, namespace, prefix); + +exports.sort = sort +function sort (list, loose) { + return list.sort(function (a, b) { + return exports.compareBuild(a, b, loose) + }) } -exports.create_element = create_element; -/** - * Creates a new `HTMLElement` node. - * - * @param document - owner document - * @param localName - local name - * @param namespace - namespace - * @param prefix - namespace prefix - */ -function create_htmlElement(document, localName, namespace, prefix) { - // TODO: Implement in HTML DOM - return ElementImpl_1.ElementImpl._create(document, localName, namespace, prefix); -} -exports.create_htmlElement = create_htmlElement; -/** - * Creates a new `HTMLUnknownElement` node. - * - * @param document - owner document - * @param localName - local name - * @param namespace - namespace - * @param prefix - namespace prefix - */ -function create_htmlUnknownElement(document, localName, namespace, prefix) { - // TODO: Implement in HTML DOM - return ElementImpl_1.ElementImpl._create(document, localName, namespace, prefix); -} -exports.create_htmlUnknownElement = create_htmlUnknownElement; -/** - * Creates a new `DocumentFragment` node. - * - * @param document - owner document - */ -function create_documentFragment(document) { - return DocumentFragmentImpl_1.DocumentFragmentImpl._create(document); + +exports.rsort = rsort +function rsort (list, loose) { + return list.sort(function (a, b) { + return exports.compareBuild(b, a, loose) + }) } -exports.create_documentFragment = create_documentFragment; -/** - * Creates a new `ShadowRoot` node. - * - * @param document - owner document - * @param host - shadow root's host element node - */ -function create_shadowRoot(document, host) { - return ShadowRootImpl_1.ShadowRootImpl._create(document, host); + +exports.gt = gt +function gt (a, b, loose) { + return compare(a, b, loose) > 0 } -exports.create_shadowRoot = create_shadowRoot; -/** - * Creates a new `Attr` node. - * - * @param document - owner document - * @param localName - local name - */ -function create_attr(document, localName) { - return AttrImpl_1.AttrImpl._create(document, localName); + +exports.lt = lt +function lt (a, b, loose) { + return compare(a, b, loose) < 0 } -exports.create_attr = create_attr; -/** - * Creates a new `Text` node. - * - * @param document - owner document - * @param data - node contents - */ -function create_text(document, data) { - return TextImpl_1.TextImpl._create(document, data); + +exports.eq = eq +function eq (a, b, loose) { + return compare(a, b, loose) === 0 } -exports.create_text = create_text; -/** - * Creates a new `CDATASection` node. - * - * @param document - owner document - * @param data - node contents - */ -function create_cdataSection(document, data) { - return CDATASectionImpl_1.CDATASectionImpl._create(document, data); + +exports.neq = neq +function neq (a, b, loose) { + return compare(a, b, loose) !== 0 } -exports.create_cdataSection = create_cdataSection; -/** - * Creates a new `Comment` node. - * - * @param document - owner document - * @param data - node contents - */ -function create_comment(document, data) { - return CommentImpl_1.CommentImpl._create(document, data); + +exports.gte = gte +function gte (a, b, loose) { + return compare(a, b, loose) >= 0 } -exports.create_comment = create_comment; -/** - * Creates a new `ProcessingInstruction` node. - * - * @param document - owner document - * @param target - instruction target - * @param data - node contents - */ -function create_processingInstruction(document, target, data) { - return ProcessingInstructionImpl_1.ProcessingInstructionImpl._create(document, target, data); + +exports.lte = lte +function lte (a, b, loose) { + return compare(a, b, loose) <= 0 } -exports.create_processingInstruction = create_processingInstruction; -/** - * Creates a new `HTMLCollection`. - * - * @param root - root node - * @param filter - node filter - */ -function create_htmlCollection(root, filter) { - if (filter === void 0) { filter = (function () { return true; }); } - return HTMLCollectionImpl_1.HTMLCollectionImpl._create(root, filter); + +exports.cmp = cmp +function cmp (a, op, b, loose) { + switch (op) { + case '===': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a === b + + case '!==': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a !== b + + case '': + case '=': + case '==': + return eq(a, b, loose) + + case '!=': + return neq(a, b, loose) + + case '>': + return gt(a, b, loose) + + case '>=': + return gte(a, b, loose) + + case '<': + return lt(a, b, loose) + + case '<=': + return lte(a, b, loose) + + default: + throw new TypeError('Invalid operator: ' + op) + } } -exports.create_htmlCollection = create_htmlCollection; -/** - * Creates a new live `NodeList`. - * - * @param root - root node - */ -function create_nodeList(root) { - return NodeListImpl_1.NodeListImpl._create(root); + +exports.Comparator = Comparator +function Comparator (comp, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp + } else { + comp = comp.value + } + } + + if (!(this instanceof Comparator)) { + return new Comparator(comp, options) + } + + debug('comparator', comp, options) + this.options = options + this.loose = !!options.loose + this.parse(comp) + + if (this.semver === ANY) { + this.value = '' + } else { + this.value = this.operator + this.semver.version + } + + debug('comp', this) } -exports.create_nodeList = create_nodeList; -/** - * Creates a new static `NodeList`. - * - * @param root - root node - * @param items - a list of items to initialize the list - */ -function create_nodeListStatic(root, items) { - return NodeListStaticImpl_1.NodeListStaticImpl._create(root, items); + +var ANY = {} +Comparator.prototype.parse = function (comp) { + var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + var m = comp.match(r) + + if (!m) { + throw new TypeError('Invalid comparator: ' + comp) + } + + this.operator = m[1] !== undefined ? m[1] : '' + if (this.operator === '=') { + this.operator = '' + } + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY + } else { + this.semver = new SemVer(m[2], this.options.loose) + } } -exports.create_nodeListStatic = create_nodeListStatic; -/** - * Creates a new `NamedNodeMap`. - * - * @param element - parent element - */ -function create_namedNodeMap(element) { - return NamedNodeMapImpl_1.NamedNodeMapImpl._create(element); + +Comparator.prototype.toString = function () { + return this.value } -exports.create_namedNodeMap = create_namedNodeMap; -/** - * Creates a new `Range`. - * - * @param start - start point - * @param end - end point - */ -function create_range(start, end) { - return RangeImpl_1.RangeImpl._create(start, end); + +Comparator.prototype.test = function (version) { + debug('Comparator.test', version, this.options.loose) + + if (this.semver === ANY || version === ANY) { + return true + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + return cmp(version, this.operator, this.semver, this.options) } -exports.create_range = create_range; -/** - * Creates a new `NodeIterator`. - * - * @param root - iterator's root node - * @param reference - reference node - * @param pointerBeforeReference - whether the iterator is before or after the - * reference node - */ -function create_nodeIterator(root, reference, pointerBeforeReference) { - return NodeIteratorImpl_1.NodeIteratorImpl._create(root, reference, pointerBeforeReference); + +Comparator.prototype.intersects = function (comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required') + } + + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + var rangeTmp + + if (this.operator === '') { + if (this.value === '') { + return true + } + rangeTmp = new Range(comp.value, options) + return satisfies(this.value, rangeTmp, options) + } else if (comp.operator === '') { + if (comp.value === '') { + return true + } + rangeTmp = new Range(this.value, options) + return satisfies(comp.semver, rangeTmp, options) + } + + var sameDirectionIncreasing = + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '>=' || comp.operator === '>') + var sameDirectionDecreasing = + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '<=' || comp.operator === '<') + var sameSemVer = this.semver.version === comp.semver.version + var differentDirectionsInclusive = + (this.operator === '>=' || this.operator === '<=') && + (comp.operator === '>=' || comp.operator === '<=') + var oppositeDirectionsLessThan = + cmp(this.semver, '<', comp.semver, options) && + ((this.operator === '>=' || this.operator === '>') && + (comp.operator === '<=' || comp.operator === '<')) + var oppositeDirectionsGreaterThan = + cmp(this.semver, '>', comp.semver, options) && + ((this.operator === '<=' || this.operator === '<') && + (comp.operator === '>=' || comp.operator === '>')) + + return sameDirectionIncreasing || sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || oppositeDirectionsGreaterThan } -exports.create_nodeIterator = create_nodeIterator; -/** - * Creates a new `TreeWalker`. - * - * @param root - iterator's root node - * @param current - current node - */ -function create_treeWalker(root, current) { - return TreeWalkerImpl_1.TreeWalkerImpl._create(root, current); + +exports.Range = Range +function Range (range, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (range instanceof Range) { + if (range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease) { + return range + } else { + return new Range(range.raw, options) + } + } + + if (range instanceof Comparator) { + return new Range(range.value, options) + } + + if (!(this instanceof Range)) { + return new Range(range, options) + } + + this.options = options + this.loose = !!options.loose + this.includePrerelease = !!options.includePrerelease + + // First, split based on boolean or || + this.raw = range + this.set = range.split(/\s*\|\|\s*/).map(function (range) { + return this.parseRange(range.trim()) + }, this).filter(function (c) { + // throw out any that are not relevant for whatever reason + return c.length + }) + + if (!this.set.length) { + throw new TypeError('Invalid SemVer Range: ' + range) + } + + this.format() } -exports.create_treeWalker = create_treeWalker; -/** - * Creates a new `NodeFilter`. - */ -function create_nodeFilter() { - return NodeFilterImpl_1.NodeFilterImpl._create(); + +Range.prototype.format = function () { + this.range = this.set.map(function (comps) { + return comps.join(' ').trim() + }).join('||').trim() + return this.range } -exports.create_nodeFilter = create_nodeFilter; -/** - * Creates a new `MutationRecord`. - * - * @param type - type of mutation: `"attributes"` for an attribute - * mutation, `"characterData"` for a mutation to a CharacterData node - * and `"childList"` for a mutation to the tree of nodes. - * @param target - node affected by the mutation. - * @param addedNodes - list of added nodes. - * @param removedNodes - list of removed nodes. - * @param previousSibling - previous sibling of added or removed nodes. - * @param nextSibling - next sibling of added or removed nodes. - * @param attributeName - local name of the changed attribute, - * and `null` otherwise. - * @param attributeNamespace - namespace of the changed attribute, - * and `null` otherwise. - * @param oldValue - value before mutation: attribute value for an attribute - * mutation, node `data` for a mutation to a CharacterData node and `null` - * for a mutation to the tree of nodes. - */ -function create_mutationRecord(type, target, addedNodes, removedNodes, previousSibling, nextSibling, attributeName, attributeNamespace, oldValue) { - return MutationRecordImpl_1.MutationRecordImpl._create(type, target, addedNodes, removedNodes, previousSibling, nextSibling, attributeName, attributeNamespace, oldValue); + +Range.prototype.toString = function () { + return this.range } -exports.create_mutationRecord = create_mutationRecord; -/** - * Creates a new `DOMTokenList`. - * - * @param element - associated element - * @param attribute - associated attribute - */ -function create_domTokenList(element, attribute) { - return DOMTokenListImpl_1.DOMTokenListImpl._create(element, attribute); + +Range.prototype.parseRange = function (range) { + var loose = this.options.loose + range = range.trim() + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] + range = range.replace(hr, hyphenReplace) + debug('hyphen replace', range) + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) + debug('comparator trim', range, re[t.COMPARATORTRIM]) + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[t.TILDETRIM], tildeTrimReplace) + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[t.CARETTRIM], caretTrimReplace) + + // normalize spaces + range = range.split(/\s+/).join(' ') + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + var set = range.split(' ').map(function (comp) { + return parseComparator(comp, this.options) + }, this).join(' ').split(/\s+/) + if (this.options.loose) { + // in loose mode, throw out any that are not valid comparators + set = set.filter(function (comp) { + return !!comp.match(compRe) + }) + } + set = set.map(function (comp) { + return new Comparator(comp, this.options) + }, this) + + return set } -exports.create_domTokenList = create_domTokenList; -//# sourceMappingURL=CreateAlgorithm.js.map -/***/ }), -/* 87 */ -/***/ (function(module) { +Range.prototype.intersects = function (range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required') + } -module.exports = require("os"); + return this.set.some(function (thisComparators) { + return ( + isSatisfiable(thisComparators, options) && + range.set.some(function (rangeComparators) { + return ( + isSatisfiable(rangeComparators, options) && + thisComparators.every(function (thisComparator) { + return rangeComparators.every(function (rangeComparator) { + return thisComparator.intersects(rangeComparator, options) + }) + }) + ) + }) + ) + }) +} -/***/ }), -/* 88 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { +// take a set of comparators and determine whether there +// exists a version which can satisfy it +function isSatisfiable (comparators, options) { + var result = true + var remainingComparators = comparators.slice() + var testComparator = remainingComparators.pop() -"use strict"; + while (result && remainingComparators.length) { + result = remainingComparators.every(function (otherComparator) { + return testComparator.intersects(otherComparator, options) + }) -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMException_1 = __webpack_require__(35); -var algorithm_1 = __webpack_require__(163); -/** - * Represents a collection of attributes. - */ -var NamedNodeMapImpl = /** @class */ (function (_super) { - __extends(NamedNodeMapImpl, _super); - /** - * Initializes a new instance of `NamedNodeMap`. - * - * @param element - parent element - */ - function NamedNodeMapImpl(element) { - var _this = _super.call(this) || this; - _this._element = element; - // TODO: This workaround is needed to extend Array in ES5 - Object.setPrototypeOf(_this, NamedNodeMapImpl.prototype); - return _this; + testComparator = remainingComparators.pop() + } + + return result +} + +// Mostly just for testing and legacy API reasons +exports.toComparators = toComparators +function toComparators (range, options) { + return new Range(range, options).set.map(function (comp) { + return comp.map(function (c) { + return c.value + }).join(' ').trim().split(' ') + }) +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +function parseComparator (comp, options) { + debug('comp', comp, options) + comp = replaceCarets(comp, options) + debug('caret', comp) + comp = replaceTildes(comp, options) + debug('tildes', comp) + comp = replaceXRanges(comp, options) + debug('xrange', comp) + comp = replaceStars(comp, options) + debug('stars', comp) + return comp +} + +function isX (id) { + return !id || id.toLowerCase() === 'x' || id === '*' +} + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 +function replaceTildes (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceTilde(comp, options) + }).join(' ') +} + +function replaceTilde (comp, options) { + var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] + return comp.replace(r, function (_, M, m, p, pr) { + debug('tilde', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0 + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else if (pr) { + debug('replaceTilde pr', pr) + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + } else { + // ~1.2.3 == >=1.2.3 <1.3.0 + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' } - NamedNodeMapImpl.prototype._asArray = function () { return this; }; - /** @inheritdoc */ - NamedNodeMapImpl.prototype.item = function (index) { - /** - * 1. If index is equal to or greater than context object’s attribute list’s - * size, then return null. - * 2. Otherwise, return context object’s attribute list[index]. - * - */ - return this[index] || null; - }; - /** @inheritdoc */ - NamedNodeMapImpl.prototype.getNamedItem = function (qualifiedName) { - /** - * The getNamedItem(qualifiedName) method, when invoked, must return the - * result of getting an attribute given qualifiedName and element. - */ - return algorithm_1.element_getAnAttributeByName(qualifiedName, this._element); - }; - /** @inheritdoc */ - NamedNodeMapImpl.prototype.getNamedItemNS = function (namespace, localName) { - /** - * The getNamedItemNS(namespace, localName) method, when invoked, must - * return the result of getting an attribute given namespace, localName, - * and element. - */ - return algorithm_1.element_getAnAttributeByNamespaceAndLocalName(namespace || '', localName, this._element); - }; - /** @inheritdoc */ - NamedNodeMapImpl.prototype.setNamedItem = function (attr) { - /** - * The setNamedItem(attr) and setNamedItemNS(attr) methods, when invoked, - * must return the result of setting an attribute given attr and element. - */ - return algorithm_1.element_setAnAttribute(attr, this._element); - }; - /** @inheritdoc */ - NamedNodeMapImpl.prototype.setNamedItemNS = function (attr) { - return algorithm_1.element_setAnAttribute(attr, this._element); - }; - /** @inheritdoc */ - NamedNodeMapImpl.prototype.removeNamedItem = function (qualifiedName) { - /** - * 1. Let attr be the result of removing an attribute given qualifiedName - * and element. - * 2. If attr is null, then throw a "NotFoundError" DOMException. - * 3. Return attr. - */ - var attr = algorithm_1.element_removeAnAttributeByName(qualifiedName, this._element); - if (attr === null) - throw new DOMException_1.NotFoundError(); - return attr; - }; - /** @inheritdoc */ - NamedNodeMapImpl.prototype.removeNamedItemNS = function (namespace, localName) { - /** - * 1. Let attr be the result of removing an attribute given namespace, - * localName, and element. - * 2. If attr is null, then throw a "NotFoundError" DOMException. - * 3. Return attr. - */ - var attr = algorithm_1.element_removeAnAttributeByNamespaceAndLocalName(namespace || '', localName, this._element); - if (attr === null) - throw new DOMException_1.NotFoundError(); - return attr; - }; - /** - * Creates a new `NamedNodeMap`. - * - * @param element - parent element - */ - NamedNodeMapImpl._create = function (element) { - return new NamedNodeMapImpl(element); - }; - return NamedNodeMapImpl; -}(Array)); -exports.NamedNodeMapImpl = NamedNodeMapImpl; -//# sourceMappingURL=NamedNodeMapImpl.js.map -/***/ }), -/* 89 */, -/* 90 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + debug('tilde return', ret) + return ret + }) +} -"use strict"; +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 +// ^1.2.3 --> >=1.2.3 <2.0.0 +// ^1.2.0 --> >=1.2.0 <2.0.0 +function replaceCarets (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceCaret(comp, options) + }).join(' ') +} -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; +function replaceCaret (comp, options) { + debug('caret', comp, options) + var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] + return comp.replace(r, function (_, M, m, p, pr) { + debug('caret', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + if (M === '0') { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else { + ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0' + } + } else if (pr) { + debug('replaceCaret pr', pr) + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var interfaces_1 = __webpack_require__(970); -var AbstractRangeImpl_1 = __webpack_require__(413); -var DOMException_1 = __webpack_require__(35); -var algorithm_1 = __webpack_require__(163); -var WebIDLAlgorithm_1 = __webpack_require__(495); -var util_1 = __webpack_require__(918); -/** - * Represents a live range. - */ -var RangeImpl = /** @class */ (function (_super) { - __extends(RangeImpl, _super); - /** - * Initializes a new instance of `Range`. - */ - function RangeImpl() { - var _this = _super.call(this) || this; - /** - * The Range() constructor, when invoked, must return a new live range with - * (current global object’s associated Document, 0) as its start and end. - */ - var doc = DOMImpl_1.dom.window._associatedDocument; - _this._start = [doc, 0]; - _this._end = [doc, 0]; - DOMImpl_1.dom.rangeList.add(_this); - return _this; + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + (+M + 1) + '.0.0' + } + } else { + debug('no pr') + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' + } + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + (+M + 1) + '.0.0' + } } - Object.defineProperty(RangeImpl.prototype, "commonAncestorContainer", { - /** @inheritdoc */ - get: function () { - /** - * 1. Let container be start node. - * 2. While container is not an inclusive ancestor of end node, let - * container be container’s parent. - * 3. Return container. - */ - var container = this._start[0]; - while (!algorithm_1.tree_isAncestorOf(this._end[0], container, true)) { - if (container._parent === null) { - throw new Error("Parent node is null."); - } - container = container._parent; - } - return container; - }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - RangeImpl.prototype.setStart = function (node, offset) { - /** - * The setStart(node, offset) method, when invoked, must set the start of - * context object to boundary point (node, offset). - */ - algorithm_1.range_setTheStart(this, node, offset); - }; - /** @inheritdoc */ - RangeImpl.prototype.setEnd = function (node, offset) { - /** - * The setEnd(node, offset) method, when invoked, must set the end of - * context object to boundary point (node, offset). - */ - algorithm_1.range_setTheEnd(this, node, offset); - }; - /** @inheritdoc */ - RangeImpl.prototype.setStartBefore = function (node) { - /** - * 1. Let parent be node’s parent. - * 2. If parent is null, then throw an "InvalidNodeTypeError" DOMException. - * 3. Set the start of the context object to boundary point - * (parent, node’s index). - */ - var parent = node._parent; - if (parent === null) - throw new DOMException_1.InvalidNodeTypeError(); - algorithm_1.range_setTheStart(this, parent, algorithm_1.tree_index(node)); - }; - /** @inheritdoc */ - RangeImpl.prototype.setStartAfter = function (node) { - /** - * 1. Let parent be node’s parent. - * 2. If parent is null, then throw an "InvalidNodeTypeError" DOMException. - * 3. Set the start of the context object to boundary point - * (parent, node’s index plus 1). - */ - var parent = node._parent; - if (parent === null) - throw new DOMException_1.InvalidNodeTypeError(); - algorithm_1.range_setTheStart(this, parent, algorithm_1.tree_index(node) + 1); - }; - /** @inheritdoc */ - RangeImpl.prototype.setEndBefore = function (node) { - /** - * 1. Let parent be node’s parent. - * 2. If parent is null, then throw an "InvalidNodeTypeError" DOMException. - * 3. Set the end of the context object to boundary point - * (parent, node’s index). - */ - var parent = node._parent; - if (parent === null) - throw new DOMException_1.InvalidNodeTypeError(); - algorithm_1.range_setTheEnd(this, parent, algorithm_1.tree_index(node)); - }; - /** @inheritdoc */ - RangeImpl.prototype.setEndAfter = function (node) { - /** - * 1. Let parent be node’s parent. - * 2. If parent is null, then throw an "InvalidNodeTypeError" DOMException. - * 3. Set the end of the context object to boundary point - * (parent, node’s index plus 1). - */ - var parent = node._parent; - if (parent === null) - throw new DOMException_1.InvalidNodeTypeError(); - algorithm_1.range_setTheEnd(this, parent, algorithm_1.tree_index(node) + 1); - }; - /** @inheritdoc */ - RangeImpl.prototype.collapse = function (toStart) { - /** - * The collapse(toStart) method, when invoked, must if toStart is true, - * set end to start, and set start to end otherwise. - */ - if (toStart) { - this._end = this._start; + + debug('caret return', ret) + return ret + }) +} + +function replaceXRanges (comp, options) { + debug('replaceXRanges', comp, options) + return comp.split(/\s+/).map(function (comp) { + return replaceXRange(comp, options) + }).join(' ') +} + +function replaceXRange (comp, options) { + comp = comp.trim() + var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] + return comp.replace(r, function (ret, gtlt, M, m, p, pr) { + debug('xRange', comp, ret, gtlt, M, m, p, pr) + var xM = isX(M) + var xm = xM || isX(m) + var xp = xm || isX(p) + var anyX = xp + + if (gtlt === '=' && anyX) { + gtlt = '' + } + + // if we're including prereleases in the match, then we need + // to fix this to -0, the lowest possible prerelease value + pr = options.includePrerelease ? '-0' : '' + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0-0' + } else { + // nothing is forbidden + ret = '*' + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0 + } + p = 0 + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + // >1.2.3 => >= 1.2.4 + gtlt = '>=' + if (xm) { + M = +M + 1 + m = 0 + p = 0 + } else { + m = +m + 1 + p = 0 } - else { - this._start = this._end; + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) { + M = +M + 1 + } else { + m = +m + 1 } - }; - /** @inheritdoc */ - RangeImpl.prototype.selectNode = function (node) { - /** - * The selectNode(node) method, when invoked, must select node within - * context object. - */ - algorithm_1.range_select(node, this); - }; - /** @inheritdoc */ - RangeImpl.prototype.selectNodeContents = function (node) { - /** - * 1. If node is a doctype, throw an "InvalidNodeTypeError" DOMException. - * 2. Let length be the length of node. - * 3. Set start to the boundary point (node, 0). - * 4. Set end to the boundary point (node, length). - */ - if (util_1.Guard.isDocumentTypeNode(node)) - throw new DOMException_1.InvalidNodeTypeError(); - var length = algorithm_1.tree_nodeLength(node); - this._start = [node, 0]; - this._end = [node, length]; - }; - /** @inheritdoc */ - RangeImpl.prototype.compareBoundaryPoints = function (how, sourceRange) { - /** - * 1. If how is not one of - * - START_TO_START, - * - START_TO_END, - * - END_TO_END, and - * - END_TO_START, - * then throw a "NotSupportedError" DOMException. - */ - if (how !== interfaces_1.HowToCompare.StartToStart && how !== interfaces_1.HowToCompare.StartToEnd && - how !== interfaces_1.HowToCompare.EndToEnd && how !== interfaces_1.HowToCompare.EndToStart) - throw new DOMException_1.NotSupportedError(); - /** - * 2. If context object’s root is not the same as sourceRange’s root, - * then throw a "WrongDocumentError" DOMException. - */ - if (algorithm_1.range_root(this) !== algorithm_1.range_root(sourceRange)) - throw new DOMException_1.WrongDocumentError(); - /** - * 3. If how is: - * - START_TO_START: - * Let this point be the context object’s start. Let other point be - * sourceRange’s start. - * - START_TO_END: - * Let this point be the context object’s end. Let other point be - * sourceRange’s start. - * - END_TO_END: - * Let this point be the context object’s end. Let other point be - * sourceRange’s end. - * - END_TO_START: - * Let this point be the context object’s start. Let other point be - * sourceRange’s end. - */ - var thisPoint; - var otherPoint; - switch (how) { - case interfaces_1.HowToCompare.StartToStart: - thisPoint = this._start; - otherPoint = sourceRange._start; - break; - case interfaces_1.HowToCompare.StartToEnd: - thisPoint = this._end; - otherPoint = sourceRange._start; - break; - case interfaces_1.HowToCompare.EndToEnd: - thisPoint = this._end; - otherPoint = sourceRange._end; - break; - case interfaces_1.HowToCompare.EndToStart: - thisPoint = this._start; - otherPoint = sourceRange._end; - break; - /* istanbul ignore next */ - default: - throw new DOMException_1.NotSupportedError(); - } - /** - * 4. If the position of this point relative to other point is - * - before - * Return −1. - * - equal - * Return 0. - * - after - * Return 1. - */ - var position = algorithm_1.boundaryPoint_position(thisPoint, otherPoint); - if (position === interfaces_1.BoundaryPosition.Before) { - return -1; - } - else if (position === interfaces_1.BoundaryPosition.After) { - return 1; + } + + ret = gtlt + M + '.' + m + '.' + p + pr + } else if (xm) { + ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr + } else if (xp) { + ret = '>=' + M + '.' + m + '.0' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + pr + } + + debug('xRange return', ret) + + return ret + }) +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +function replaceStars (comp, options) { + debug('replaceStars', comp, options) + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[t.STAR], '') +} + +// This function is passed to string.replace(re[t.HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0 +function hyphenReplace ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) { + if (isX(fM)) { + from = '' + } else if (isX(fm)) { + from = '>=' + fM + '.0.0' + } else if (isX(fp)) { + from = '>=' + fM + '.' + fm + '.0' + } else { + from = '>=' + from + } + + if (isX(tM)) { + to = '' + } else if (isX(tm)) { + to = '<' + (+tM + 1) + '.0.0' + } else if (isX(tp)) { + to = '<' + tM + '.' + (+tm + 1) + '.0' + } else if (tpr) { + to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr + } else { + to = '<=' + to + } + + return (from + ' ' + to).trim() +} + +// if ANY of the sets match ALL of its comparators, then pass +Range.prototype.test = function (version) { + if (!version) { + return false + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + for (var i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false +} + +function testSet (set, version, options) { + for (var i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false + } + } + + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (i = 0; i < set.length; i++) { + debug(set[i].semver) + if (set[i].semver === ANY) { + continue + } + + if (set[i].semver.prerelease.length > 0) { + var allowed = set[i].semver + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true } - else { - return 0; + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false + } + + return true +} + +exports.satisfies = satisfies +function satisfies (version, range, options) { + try { + range = new Range(range, options) + } catch (er) { + return false + } + return range.test(version) +} + +exports.maxSatisfying = maxSatisfying +function maxSatisfying (versions, range, options) { + var max = null + var maxSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { + // compare(max, v, true) + max = v + maxSV = new SemVer(max, options) + } + } + }) + return max +} + +exports.minSatisfying = minSatisfying +function minSatisfying (versions, range, options) { + var min = null + var minSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { + // compare(min, v, true) + min = v + minSV = new SemVer(min, options) + } + } + }) + return min +} + +exports.minVersion = minVersion +function minVersion (range, loose) { + range = new Range(range, loose) + + var minver = new SemVer('0.0.0') + if (range.test(minver)) { + return minver + } + + minver = new SemVer('0.0.0-0') + if (range.test(minver)) { + return minver + } + + minver = null + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + comparators.forEach(function (comparator) { + // Clone to avoid manipulating the comparator's semver object. + var compver = new SemVer(comparator.semver.version) + switch (comparator.operator) { + case '>': + if (compver.prerelease.length === 0) { + compver.patch++ + } else { + compver.prerelease.push(0) + } + compver.raw = compver.format() + /* fallthrough */ + case '': + case '>=': + if (!minver || gt(minver, compver)) { + minver = compver + } + break + case '<': + case '<=': + /* Ignore maximum versions */ + break + /* istanbul ignore next */ + default: + throw new Error('Unexpected operation: ' + comparator.operator) + } + }) + } + + if (minver && range.test(minver)) { + return minver + } + + return null +} + +exports.validRange = validRange +function validRange (range, options) { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, options).range || '*' + } catch (er) { + return null + } +} + +// Determine if version is less than all the versions possible in the range +exports.ltr = ltr +function ltr (version, range, options) { + return outside(version, range, '<', options) +} + +// Determine if version is greater than all the versions possible in the range. +exports.gtr = gtr +function gtr (version, range, options) { + return outside(version, range, '>', options) +} + +exports.outside = outside +function outside (version, range, hilo, options) { + version = new SemVer(version, options) + range = new Range(range, options) + + var gtfn, ltefn, ltfn, comp, ecomp + switch (hilo) { + case '>': + gtfn = gt + ltefn = lte + ltfn = lt + comp = '>' + ecomp = '>=' + break + case '<': + gtfn = lt + ltefn = gte + ltfn = gt + comp = '<' + ecomp = '<=' + break + default: + throw new TypeError('Must provide a hilo val of "<" or ">"') + } + + // If it satisifes the range it is not outside + if (satisfies(version, range, options)) { + return false + } + + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + var high = null + var low = null + + comparators.forEach(function (comparator) { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator + low = low || comparator + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator + } + }) + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false + } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false + } + } + return true +} + +exports.prerelease = prerelease +function prerelease (version, options) { + var parsed = parse(version, options) + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null +} + +exports.intersects = intersects +function intersects (r1, r2, options) { + r1 = new Range(r1, options) + r2 = new Range(r2, options) + return r1.intersects(r2) +} + +exports.coerce = coerce +function coerce (version, options) { + if (version instanceof SemVer) { + return version + } + + if (typeof version === 'number') { + version = String(version) + } + + if (typeof version !== 'string') { + return null + } + + options = options || {} + + var match = null + if (!options.rtl) { + match = version.match(re[t.COERCE]) + } else { + // Find the right-most coercible string that does not share + // a terminus with a more left-ward coercible string. + // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' + // + // Walk through the string checking with a /g regexp + // Manually set the index so as to pick up overlapping matches. + // Stop when we get a match that ends at the string end, since no + // coercible string can be more right-ward without the same terminus. + var next + while ((next = re[t.COERCERTL].exec(version)) && + (!match || match.index + match[0].length !== version.length) + ) { + if (!match || + next.index + next[0].length !== match.index + match[0].length) { + match = next + } + re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length + } + // leave it in a clean state + re[t.COERCERTL].lastIndex = -1 + } + + if (match === null) { + return null + } + + return parse(match[2] + + '.' + (match[3] || '0') + + '.' + (match[4] || '0'), options) +} + + +/***/ }), + +/***/ 2206: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; } }; - /** @inheritdoc */ - RangeImpl.prototype.deleteContents = function () { - var e_1, _a, e_2, _b; - /** - * 1. If the context object is collapsed, then return. - * 2. Let original start node, original start offset, original end node, - * and original end offset be the context object’s start node, - * start offset, end node, and end offset, respectively. - */ - if (algorithm_1.range_collapsed(this)) - return; - var originalStartNode = this._startNode; - var originalStartOffset = this._startOffset; - var originalEndNode = this._endNode; - var originalEndOffset = this._endOffset; - /** - * 3. If original start node and original end node are the same, and they - * are a Text, ProcessingInstruction, or Comment node, replace data with - * node original start node, offset original start offset, count original - * end offset minus original start offset, and data the empty string, - * and then return. - */ - if (originalStartNode === originalEndNode && - util_1.Guard.isCharacterDataNode(originalStartNode)) { - algorithm_1.characterData_replaceData(originalStartNode, originalStartOffset, originalEndOffset - originalStartOffset, ''); - return; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var EventAlgorithm_1 = __nccwpck_require__(8217); +/** + * Adds an algorithm to the given abort signal. + * + * @param algorithm - an algorithm + * @param signal - abort signal + */ +function abort_add(algorithm, signal) { + /** + * 1. If signal’s aborted flag is set, then return. + * 2. Append algorithm to signal’s abort algorithms. + */ + if (signal._abortedFlag) + return; + signal._abortAlgorithms.add(algorithm); +} +exports.abort_add = abort_add; +/** + * Removes an algorithm from the given abort signal. + * + * @param algorithm - an algorithm + * @param signal - abort signal + */ +function abort_remove(algorithm, signal) { + /** + * To remove an algorithm algorithm from an AbortSignal signal, remove + * algorithm from signal’s abort algorithms. + */ + signal._abortAlgorithms.delete(algorithm); +} +exports.abort_remove = abort_remove; +/** + * Signals abort on the given abort signal. + * + * @param signal - abort signal + */ +function abort_signalAbort(signal) { + var e_1, _a; + /** + * 1. If signal’s aborted flag is set, then return. + * 2. Set signal’s aborted flag. + * 3. For each algorithm in signal’s abort algorithms: run algorithm. + * 4. Empty signal’s abort algorithms. + * 5. Fire an event named abort at signal. + */ + if (signal._abortedFlag) + return; + signal._abortedFlag = true; + try { + for (var _b = __values(signal._abortAlgorithms), _c = _b.next(); !_c.done; _c = _b.next()) { + var algorithm = _c.value; + algorithm.call(signal); } - /** - * 4. Let nodes to remove be a list of all the nodes that are contained in - * the context object, in tree order, omitting any node whose parent is also - * contained in the context object. - */ - var nodesToRemove = []; + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { try { - for (var _c = __values(algorithm_1.range_getContainedNodes(this)), _d = _c.next(); !_d.done; _d = _c.next()) { - var node = _d.value; - var parent = node._parent; - if (parent !== null && algorithm_1.range_isContained(parent, this)) { - continue; - } - nodesToRemove.push(node); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_d && !_d.done && (_a = _c.return)) _a.call(_c); - } - finally { if (e_1) throw e_1.error; } - } - var newNode; - var newOffset; - if (algorithm_1.tree_isAncestorOf(originalEndNode, originalStartNode, true)) { - /** - * 5. If original start node is an inclusive ancestor of original end - * node, set new node to original start node and new offset to original - * start offset. - */ - newNode = originalStartNode; - newOffset = originalStartOffset; - } - else { - /** - * 6. Otherwise: - * 6.1. Let reference node equal original start node. - * 6.2. While reference node’s parent is not null and is not an inclusive - * ancestor of original end node, set reference node to its parent. - * 6.3. Set new node to the parent of reference node, and new offset to - * one plus the index of reference node. - */ - var referenceNode = originalStartNode; - while (referenceNode._parent !== null && - !algorithm_1.tree_isAncestorOf(originalEndNode, referenceNode._parent, true)) { - referenceNode = referenceNode._parent; - } - /* istanbul ignore next */ - if (referenceNode._parent === null) { - throw new Error("Parent node is null."); - } - newNode = referenceNode._parent; - newOffset = algorithm_1.tree_index(referenceNode) + 1; - } - /** - * 7. If original start node is a Text, ProcessingInstruction, or Comment - * node, replace data with node original start node, offset original start - * offset, count original start node’s length minus original start offset, - * data the empty string. - */ - if (util_1.Guard.isCharacterDataNode(originalStartNode)) { - algorithm_1.characterData_replaceData(originalStartNode, originalStartOffset, algorithm_1.tree_nodeLength(originalStartNode) - originalStartOffset, ''); - } - try { - /** - * 8. For each node in nodes to remove, in tree order, remove node from its - * parent. - */ - for (var nodesToRemove_1 = __values(nodesToRemove), nodesToRemove_1_1 = nodesToRemove_1.next(); !nodesToRemove_1_1.done; nodesToRemove_1_1 = nodesToRemove_1.next()) { - var node = nodesToRemove_1_1.value; - /* istanbul ignore else */ - if (node._parent) { - algorithm_1.mutation_remove(node, node._parent); - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (nodesToRemove_1_1 && !nodesToRemove_1_1.done && (_b = nodesToRemove_1.return)) _b.call(nodesToRemove_1); - } - finally { if (e_2) throw e_2.error; } - } - /** - * 9. If original end node is a Text, ProcessingInstruction, or Comment - * node, replace data with node original end node, offset 0, count original - * end offset and data the empty string. - */ - if (util_1.Guard.isCharacterDataNode(originalEndNode)) { - algorithm_1.characterData_replaceData(originalEndNode, 0, originalEndOffset, ''); - } - /** - * 10. Set start and end to (new node, new offset). - */ - this._start = [newNode, newOffset]; - this._end = [newNode, newOffset]; - }; - /** @inheritdoc */ - RangeImpl.prototype.extractContents = function () { - /** - * The extractContents() method, when invoked, must return the result of - * extracting the context object. - */ - return algorithm_1.range_extract(this); - }; - /** @inheritdoc */ - RangeImpl.prototype.cloneContents = function () { - /** - * The cloneContents() method, when invoked, must return the result of - * cloning the contents of the context object. - */ - return algorithm_1.range_cloneTheContents(this); - }; - /** @inheritdoc */ - RangeImpl.prototype.insertNode = function (node) { - /** - * The insertNode(node) method, when invoked, must insert node into the - * context object. - */ - return algorithm_1.range_insert(node, this); - }; - /** @inheritdoc */ - RangeImpl.prototype.surroundContents = function (newParent) { - var e_3, _a; - try { - /** - * 1. If a non-Text node is partially contained in the context object, then - * throw an "InvalidStateError" DOMException. - */ - for (var _b = __values(algorithm_1.range_getPartiallyContainedNodes(this)), _c = _b.next(); !_c.done; _c = _b.next()) { - var node = _c.value; - if (!util_1.Guard.isTextNode(node)) { - throw new DOMException_1.InvalidStateError(); - } - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_3) throw e_3.error; } - } - /** - * 2. If newParent is a Document, DocumentType, or DocumentFragment node, - * then throw an "InvalidNodeTypeError" DOMException. - */ - if (util_1.Guard.isDocumentNode(newParent) || - util_1.Guard.isDocumentTypeNode(newParent) || - util_1.Guard.isDocumentFragmentNode(newParent)) { - throw new DOMException_1.InvalidNodeTypeError(); - } - /** - * 3. Let fragment be the result of extracting the context object. - */ - var fragment = algorithm_1.range_extract(this); - /** - * 4. If newParent has children, then replace all with null within newParent. - */ - if ((newParent)._children.size !== 0) { - algorithm_1.mutation_replaceAll(null, newParent); - } - /** - * 5. Insert newParent into the context object. - * 6. Append fragment to newParent. - */ - algorithm_1.range_insert(newParent, this); - algorithm_1.mutation_append(fragment, newParent); - /** - * 7. Select newParent within the context object. - */ - algorithm_1.range_select(newParent, this); - }; - /** @inheritdoc */ - RangeImpl.prototype.cloneRange = function () { - /** - * The cloneRange() method, when invoked, must return a new live range with - * the same start and end as the context object. - */ - return algorithm_1.create_range(this._start, this._end); - }; - /** @inheritdoc */ - RangeImpl.prototype.detach = function () { - /** - * The detach() method, when invoked, must do nothing. - * - * since JS lacks weak references, we still use detach - */ - DOMImpl_1.dom.rangeList.delete(this); - }; - /** @inheritdoc */ - RangeImpl.prototype.isPointInRange = function (node, offset) { - /** - * 1. If node’s root is different from the context object’s root, return false. - */ - if (algorithm_1.tree_rootNode(node) !== algorithm_1.range_root(this)) { - return false; - } - /** - * 2. If node is a doctype, then throw an "InvalidNodeTypeError" DOMException. - * 3. If offset is greater than node’s length, then throw an - * "IndexSizeError" DOMException. - */ - if (util_1.Guard.isDocumentTypeNode(node)) - throw new DOMException_1.InvalidNodeTypeError(); - if (offset > algorithm_1.tree_nodeLength(node)) - throw new DOMException_1.IndexSizeError(); - /** - * 4. If (node, offset) is before start or after end, return false. - */ - var bp = [node, offset]; - if (algorithm_1.boundaryPoint_position(bp, this._start) === interfaces_1.BoundaryPosition.Before || - algorithm_1.boundaryPoint_position(bp, this._end) === interfaces_1.BoundaryPosition.After) { - return false; + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } - /** - * 5. Return true. - */ - return true; - }; - /** @inheritdoc */ - RangeImpl.prototype.comparePoint = function (node, offset) { - /** - * 1. If node’s root is different from the context object’s root, then throw - * a "WrongDocumentError" DOMException. - * 2. If node is a doctype, then throw an "InvalidNodeTypeError" DOMException. - * 3. If offset is greater than node’s length, then throw an - * "IndexSizeError" DOMException. - */ - if (algorithm_1.tree_rootNode(node) !== algorithm_1.range_root(this)) - throw new DOMException_1.WrongDocumentError(); - if (util_1.Guard.isDocumentTypeNode(node)) - throw new DOMException_1.InvalidNodeTypeError(); - if (offset > algorithm_1.tree_nodeLength(node)) - throw new DOMException_1.IndexSizeError(); - /** - * 4. If (node, offset) is before start, return −1. - * 5. If (node, offset) is after end, return 1. - * 6. Return 0. - */ - var bp = [node, offset]; - if (algorithm_1.boundaryPoint_position(bp, this._start) === interfaces_1.BoundaryPosition.Before) { - return -1; + finally { if (e_1) throw e_1.error; } + } + signal._abortAlgorithms.clear(); + EventAlgorithm_1.event_fireAnEvent("abort", signal); +} +exports.abort_signalAbort = abort_signalAbort; +//# sourceMappingURL=AbortAlgorithm.js.map + +/***/ }), + +/***/ 4309: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var ElementAlgorithm_1 = __nccwpck_require__(1849); +/** + * Changes the value of an existing attribute. + * + * @param attribute - an attribute node + * @param value - attribute value + */ +function attr_setAnExistingAttributeValue(attribute, value) { + /** + * 1. If attribute’s element is null, then set attribute’s value to value. + * 2. Otherwise, change attribute from attribute’s element to value. + */ + if (attribute._element === null) { + attribute._value = value; + } + else { + ElementAlgorithm_1.element_change(attribute, attribute._element, value); + } +} +exports.attr_setAnExistingAttributeValue = attr_setAnExistingAttributeValue; +//# sourceMappingURL=AttrAlgorithm.js.map + +/***/ }), + +/***/ 1054: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7305); +var TreeAlgorithm_1 = __nccwpck_require__(6620); +/** + * Defines the position of a boundary point relative to another. + * + * @param bp - a boundary point + * @param relativeTo - a boundary point to compare to + */ +function boundaryPoint_position(bp, relativeTo) { + var nodeA = bp[0]; + var offsetA = bp[1]; + var nodeB = relativeTo[0]; + var offsetB = relativeTo[1]; + /** + * 1. Assert: nodeA and nodeB have the same root. + */ + console.assert(TreeAlgorithm_1.tree_rootNode(nodeA) === TreeAlgorithm_1.tree_rootNode(nodeB), "Boundary points must share the same root node."); + /** + * 2. If nodeA is nodeB, then return equal if offsetA is offsetB, before + * if offsetA is less than offsetB, and after if offsetA is greater than + * offsetB. + */ + if (nodeA === nodeB) { + if (offsetA === offsetB) { + return interfaces_1.BoundaryPosition.Equal; } - else if (algorithm_1.boundaryPoint_position(bp, this._end) === interfaces_1.BoundaryPosition.After) { - return 1; + else if (offsetA < offsetB) { + return interfaces_1.BoundaryPosition.Before; } else { - return 0; - } - }; - /** @inheritdoc */ - RangeImpl.prototype.intersectsNode = function (node) { - /** - * 1. If node’s root is different from the context object’s root, return false. - */ - if (algorithm_1.tree_rootNode(node) !== algorithm_1.range_root(this)) { - return false; + return interfaces_1.BoundaryPosition.After; } - /** - * 2. Let parent be node’s parent. - * 3. If parent is null, return true. - */ - var parent = node._parent; - if (parent === null) - return true; - /** - * 4. Let offset be node’s index. - */ - var offset = algorithm_1.tree_index(node); - /** - * 5. If (parent, offset) is before end and (parent, offset plus 1) is - * after start, return true. - */ - if (algorithm_1.boundaryPoint_position([parent, offset], this._end) === interfaces_1.BoundaryPosition.Before && - algorithm_1.boundaryPoint_position([parent, offset + 1], this._start) === interfaces_1.BoundaryPosition.After) { - return true; + } + /** + * 3. If nodeA is following nodeB, then if the position of (nodeB, offsetB) + * relative to (nodeA, offsetA) is before, return after, and if it is after, + * return before. + */ + if (TreeAlgorithm_1.tree_isFollowing(nodeB, nodeA)) { + var pos = boundaryPoint_position([nodeB, offsetB], [nodeA, offsetA]); + if (pos === interfaces_1.BoundaryPosition.Before) { + return interfaces_1.BoundaryPosition.After; } - /** - * 6. Return false. - */ - return false; - }; - RangeImpl.prototype.toString = function () { - var e_4, _a; - /** - * 1. Let s be the empty string. - */ - var s = ''; - /** - * 2. If the context object’s start node is the context object’s end node - * and it is a Text node, then return the substring of that Text node’s data - * beginning at the context object’s start offset and ending at the context - * object’s end offset. - */ - if (this._startNode === this._endNode && util_1.Guard.isTextNode(this._startNode)) { - return this._startNode._data.substring(this._startOffset, this._endOffset); + else if (pos === interfaces_1.BoundaryPosition.After) { + return interfaces_1.BoundaryPosition.Before; } + } + /** + * 4. If nodeA is an ancestor of nodeB: + */ + if (TreeAlgorithm_1.tree_isAncestorOf(nodeB, nodeA)) { /** - * 3. If the context object’s start node is a Text node, then append the - * substring of that node’s data from the context object’s start offset - * until the end to s. + * 4.1. Let child be nodeB. + * 4.2. While child is not a child of nodeA, set child to its parent. + * 4.3. If child’s index is less than offsetA, then return after. */ - if (util_1.Guard.isTextNode(this._startNode)) { - s += this._startNode._data.substring(this._startOffset); - } - try { - /** - * 4. Append the concatenation of the data of all Text nodes that are - * contained in the context object, in tree order, to s. - */ - for (var _b = __values(algorithm_1.range_getContainedNodes(this)), _c = _b.next(); !_c.done; _c = _b.next()) { - var child = _c.value; - if (util_1.Guard.isTextNode(child)) { - s += child._data; - } - } - } - catch (e_4_1) { e_4 = { error: e_4_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + var child = nodeB; + while (!TreeAlgorithm_1.tree_isChildOf(nodeA, child)) { + /* istanbul ignore else */ + if (child._parent !== null) { + child = child._parent; } - finally { if (e_4) throw e_4.error; } } - /** - * 5. If the context object’s end node is a Text node, then append the - * substring of that node’s data from its start until the context object’s - * end offset to s. - */ - if (util_1.Guard.isTextNode(this._endNode)) { - s += this._endNode._data.substring(0, this._endOffset); + if (TreeAlgorithm_1.tree_index(child) < offsetA) { + return interfaces_1.BoundaryPosition.After; } - /** - * 6. Return s. - */ - return s; - }; + } /** - * Creates a new `Range`. - * - * @param start - start point - * @param end - end point + * 5. Return before. */ - RangeImpl._create = function (start, end) { - var range = new RangeImpl(); - if (start) - range._start = start; - if (end) - range._end = end; - return range; - }; - RangeImpl.START_TO_START = 0; - RangeImpl.START_TO_END = 1; - RangeImpl.END_TO_END = 2; - RangeImpl.END_TO_START = 3; - return RangeImpl; -}(AbstractRangeImpl_1.AbstractRangeImpl)); -exports.RangeImpl = RangeImpl; -/** - * Define constants on prototype. - */ -WebIDLAlgorithm_1.idl_defineConst(RangeImpl.prototype, "START_TO_START", 0); -WebIDLAlgorithm_1.idl_defineConst(RangeImpl.prototype, "START_TO_END", 1); -WebIDLAlgorithm_1.idl_defineConst(RangeImpl.prototype, "END_TO_END", 2); -WebIDLAlgorithm_1.idl_defineConst(RangeImpl.prototype, "END_TO_START", 3); -//# sourceMappingURL=RangeImpl.js.map + return interfaces_1.BoundaryPosition.Before; +} +exports.boundaryPoint_position = boundaryPoint_position; +//# sourceMappingURL=BoundaryPointAlgorithm.js.map /***/ }), -/* 91 */, -/* 92 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 9461: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); var __values = (this && this.__values) || function(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); @@ -5213,791 +4780,564 @@ var __values = (this && this.__values) || function(o) { }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; -Object.defineProperty(exports, "__esModule", { value: true }); -var ObjectWriter_1 = __webpack_require__(419); -var util_1 = __webpack_require__(592); -var BaseWriter_1 = __webpack_require__(462); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var util_1 = __nccwpck_require__(5282); +var DOMException_1 = __nccwpck_require__(3166); +var TreeAlgorithm_1 = __nccwpck_require__(6620); +var MutationObserverAlgorithm_1 = __nccwpck_require__(8157); +var DOMAlgorithm_1 = __nccwpck_require__(9628); /** - * Serializes XML nodes into a JSON string. + * Replaces character data. + * + * @param node - a character data node + * @param offset - start offset + * @param count - count of characters to replace + * @param data - new data */ -var JSONWriter = /** @class */ (function (_super) { - __extends(JSONWriter, _super); +function characterData_replaceData(node, offset, count, data) { + var e_1, _a; /** - * Initializes a new instance of `JSONWriter`. - * - * @param builderOptions - XML builder options - * @param writerOptions - serialization options + * 1. Let length be node’s length. + * 2. If offset is greater than length, then throw an "IndexSizeError" + * DOMException. + * 3. If offset plus count is greater than length, then set count to length + * minus offset. */ - function JSONWriter(builderOptions, writerOptions) { - var _this = _super.call(this, builderOptions) || this; - // provide default options - _this._writerOptions = util_1.applyDefaults(writerOptions, { - wellFormed: false, - noDoubleEncoding: false, - prettyPrint: false, - indent: ' ', - newline: '\n', - offset: 0, - group: false, - verbose: false - }); - return _this; + var length = TreeAlgorithm_1.tree_nodeLength(node); + if (offset > length) { + throw new DOMException_1.IndexSizeError("Offset exceeds character data length. Offset: " + offset + ", Length: " + length + ", Node is " + node.nodeName + "."); + } + if (offset + count > length) { + count = length - offset; } /** - * Produces an XML serialization of the given node. - * - * @param node - node to serialize - * @param writerOptions - serialization options + * 4. Queue a mutation record of "characterData" for node with null, null, + * node’s data, « », « », null, and null. */ - JSONWriter.prototype.serialize = function (node) { - // convert to object - var objectWriterOptions = util_1.applyDefaults(this._writerOptions, { - format: "object", - wellFormed: false, - noDoubleEncoding: false, - }); - var objectWriter = new ObjectWriter_1.ObjectWriter(this._builderOptions, objectWriterOptions); - var val = objectWriter.serialize(node); - // recursively convert object into JSON string - return this._beginLine(this._writerOptions, 0) + this._convertObject(val, this._writerOptions); - }; + if (DOMImpl_1.dom.features.mutationObservers) { + MutationObserverAlgorithm_1.observer_queueMutationRecord("characterData", node, null, null, node._data, [], [], null, null); + } /** - * Produces an XML serialization of the given object. - * - * @param obj - object to serialize - * @param options - serialization options - * @param level - depth of the XML tree + * 5. Insert data into node’s data after offset code units. + * 6. Let delete offset be offset + data’s length. + * 7. Starting from delete offset code units, remove count code units from + * node’s data. */ - JSONWriter.prototype._convertObject = function (obj, options, level) { - var e_1, _a; - var _this = this; - if (level === void 0) { level = 0; } - var markup = ''; - var isLeaf = this._isLeafNode(obj); - if (util_1.isArray(obj)) { - markup += '['; - var len = obj.length; - var i = 0; - try { - for (var obj_1 = __values(obj), obj_1_1 = obj_1.next(); !obj_1_1.done; obj_1_1 = obj_1.next()) { - var val = obj_1_1.value; - markup += this._endLine(options, level + 1) + - this._beginLine(options, level + 1) + - this._convertObject(val, options, level + 1); - if (i < len - 1) { - markup += ','; - } - i++; - } + var newData = node._data.substring(0, offset) + data + + node._data.substring(offset + count); + node._data = newData; + try { + /** + * 8. For each live range whose start node is node and start offset is + * greater than offset but less than or equal to offset plus count, set its + * start offset to offset. + * 9. For each live range whose end node is node and end offset is greater + * than offset but less than or equal to offset plus count, set its end + * offset to offset. + * 10. For each live range whose start node is node and start offset is + * greater than offset plus count, increase its start offset by data’s + * length and decrease it by count. + * 11. For each live range whose end node is node and end offset is greater + * than offset plus count, increase its end offset by data’s length and + * decrease it by count. + */ + for (var _b = __values(DOMImpl_1.dom.rangeList), _c = _b.next(); !_c.done; _c = _b.next()) { + var range = _c.value; + if (range._start[0] === node && range._start[1] > offset && range._start[1] <= offset + count) { + range._start[1] = offset; } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (obj_1_1 && !obj_1_1.done && (_a = obj_1.return)) _a.call(obj_1); - } - finally { if (e_1) throw e_1.error; } + if (range._end[0] === node && range._end[1] > offset && range._end[1] <= offset + count) { + range._end[1] = offset; } - markup += this._endLine(options, level) + this._beginLine(options, level); - markup += ']'; - } - else if (util_1.isObject(obj)) { - markup += '{'; - var len_1 = util_1.objectLength(obj); - var i_1 = 0; - util_1.forEachObject(obj, function (key, val) { - if (isLeaf && options.prettyPrint) { - markup += ' '; - } - else { - markup += _this._endLine(options, level + 1) + _this._beginLine(options, level + 1); - } - markup += _this._key(key); - if (options.prettyPrint) { - markup += ' '; - } - markup += _this._convertObject(val, options, level + 1); - if (i_1 < len_1 - 1) { - markup += ','; - } - i_1++; - }, this); - if (isLeaf && options.prettyPrint) { - markup += ' '; + if (range._start[0] === node && range._start[1] > offset + count) { + range._start[1] += data.length - count; } - else { - markup += this._endLine(options, level) + this._beginLine(options, level); + if (range._end[0] === node && range._end[1] > offset + count) { + range._end[1] += data.length - count; } - markup += '}'; - } - else { - markup += this._val(obj); - } - return markup; - }; - /** - * Produces characters to be prepended to a line of string in pretty-print - * mode. - * - * @param options - serialization options - * @param level - current depth of the XML tree - */ - JSONWriter.prototype._beginLine = function (options, level) { - if (!options.prettyPrint) { - return ''; } - else { - var indentLevel = options.offset + level + 1; - if (indentLevel > 0) { - return new Array(indentLevel).join(options.indent); - } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } - return ''; - }; + finally { if (e_1) throw e_1.error; } + } /** - * Produces characters to be appended to a line of string in pretty-print - * mode. - * - * @param options - serialization options - * @param level - current depth of the XML tree + * 12. If node is a Text node and its parent is not null, run the child + * text content change steps for node’s parent. */ - JSONWriter.prototype._endLine = function (options, level) { - if (!options.prettyPrint) { - return ''; - } - else { - return options.newline; + if (DOMImpl_1.dom.features.steps) { + if (util_1.Guard.isTextNode(node) && node._parent !== null) { + DOMAlgorithm_1.dom_runChildTextContentChangeSteps(node._parent); } - }; - /** - * Produces a JSON key string delimited with double quotes. - */ - JSONWriter.prototype._key = function (key) { - return "\"" + key + "\":"; - }; - /** - * Produces a JSON value string delimited with double quotes. - */ - JSONWriter.prototype._val = function (val) { - return JSON.stringify(val); - }; - /** - * Determines if an object is a leaf node. - * - * @param obj - */ - JSONWriter.prototype._isLeafNode = function (obj) { - return this._descendantCount(obj) <= 1; - }; + } +} +exports.characterData_replaceData = characterData_replaceData; +/** + * Returns `count` number of characters from `node`'s data starting at + * the given `offset`. + * + * @param node - a character data node + * @param offset - start offset + * @param count - count of characters to return + */ +function characterData_substringData(node, offset, count) { /** - * Counts the number of descendants of the given object. - * - * @param obj - * @param count + * 1. Let length be node’s length. + * 2. If offset is greater than length, then throw an "IndexSizeError" + * DOMException. + * 3. If offset plus count is greater than length, return a string whose + * value is the code units from the offsetth code unit to the end of node’s + * data, and then return. + * 4. Return a string whose value is the code units from the offsetth code + * unit to the offset+countth code unit in node’s data. */ - JSONWriter.prototype._descendantCount = function (obj, count) { - var _this = this; - if (count === void 0) { count = 0; } - if (util_1.isArray(obj)) { - util_1.forEachArray(obj, function (val) { return count += _this._descendantCount(val, count); }, this); - } - else if (util_1.isObject(obj)) { - util_1.forEachObject(obj, function (key, val) { return count += _this._descendantCount(val, count); }, this); - } - else { - count++; - } - return count; - }; - return JSONWriter; -}(BaseWriter_1.BaseWriter)); -exports.JSONWriter = JSONWriter; -//# sourceMappingURL=JSONWriter.js.map - -/***/ }), -/* 93 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - - -var common = __webpack_require__(740); - - -function Mark(name, buffer, position, line, column) { - this.name = name; - this.buffer = buffer; - this.position = position; - this.line = line; - this.column = column; -} - - -Mark.prototype.getSnippet = function getSnippet(indent, maxLength) { - var head, start, tail, end, snippet; - - if (!this.buffer) return null; - - indent = indent || 4; - maxLength = maxLength || 75; - - head = ''; - start = this.position; - - while (start > 0 && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(start - 1)) === -1) { - start -= 1; - if (this.position - start > (maxLength / 2 - 1)) { - head = ' ... '; - start += 5; - break; + var length = TreeAlgorithm_1.tree_nodeLength(node); + if (offset > length) { + throw new DOMException_1.IndexSizeError("Offset exceeds character data length. Offset: " + offset + ", Length: " + length + ", Node is " + node.nodeName + "."); } - } - - tail = ''; - end = this.position; - - while (end < this.buffer.length && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(end)) === -1) { - end += 1; - if (end - this.position > (maxLength / 2 - 1)) { - tail = ' ... '; - end -= 5; - break; + if (offset + count > length) { + return node._data.substr(offset); } - } - - snippet = this.buffer.slice(start, end); - - return common.repeat(' ', indent) + head + snippet + tail + '\n' + - common.repeat(' ', indent + this.position - start + head.length) + '^'; -}; - - -Mark.prototype.toString = function toString(compact) { - var snippet, where = ''; - - if (this.name) { - where += 'in "' + this.name + '" '; - } - - where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1); - - if (!compact) { - snippet = this.getSnippet(); - - if (snippet) { - where += ':\n' + snippet; + else { + return node._data.substr(offset, count); } - } - - return where; -}; - - -module.exports = Mark; - +} +exports.characterData_substringData = characterData_substringData; +//# sourceMappingURL=CharacterDataAlgorithm.js.map /***/ }), -/* 94 */, -/* 95 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var MapWriter_1 = __webpack_require__(750); -exports.MapWriter = MapWriter_1.MapWriter; -var XMLWriter_1 = __webpack_require__(764); -exports.XMLWriter = XMLWriter_1.XMLWriter; -var ObjectWriter_1 = __webpack_require__(419); -exports.ObjectWriter = ObjectWriter_1.ObjectWriter; -var JSONWriter_1 = __webpack_require__(92); -exports.JSONWriter = JSONWriter_1.JSONWriter; -var YAMLWriter_1 = __webpack_require__(325); -exports.YAMLWriter = YAMLWriter_1.YAMLWriter; -//# sourceMappingURL=index.js.map -/***/ }), -/* 96 */, -/* 97 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 7339: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var CodePoints_1 = __webpack_require__(11); -var ByteSequence_1 = __webpack_require__(263); -var Byte_1 = __webpack_require__(782); -var util_1 = __webpack_require__(592); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImplementationImpl_1 = __nccwpck_require__(2197); +var WindowImpl_1 = __nccwpck_require__(9067); +var XMLDocumentImpl_1 = __nccwpck_require__(1685); +var DocumentImpl_1 = __nccwpck_require__(4333); +var AbortControllerImpl_1 = __nccwpck_require__(6461); +var AbortSignalImpl_1 = __nccwpck_require__(22); +var DocumentTypeImpl_1 = __nccwpck_require__(3173); +var ElementImpl_1 = __nccwpck_require__(5975); +var DocumentFragmentImpl_1 = __nccwpck_require__(2585); +var ShadowRootImpl_1 = __nccwpck_require__(1911); +var AttrImpl_1 = __nccwpck_require__(3717); +var TextImpl_1 = __nccwpck_require__(2191); +var CDATASectionImpl_1 = __nccwpck_require__(3977); +var CommentImpl_1 = __nccwpck_require__(930); +var ProcessingInstructionImpl_1 = __nccwpck_require__(9430); +var HTMLCollectionImpl_1 = __nccwpck_require__(3969); +var NodeListImpl_1 = __nccwpck_require__(3728); +var NodeListStaticImpl_1 = __nccwpck_require__(5306); +var NamedNodeMapImpl_1 = __nccwpck_require__(7206); +var RangeImpl_1 = __nccwpck_require__(166); +var NodeIteratorImpl_1 = __nccwpck_require__(1997); +var TreeWalkerImpl_1 = __nccwpck_require__(9261); +var NodeFilterImpl_1 = __nccwpck_require__(2355); +var MutationRecordImpl_1 = __nccwpck_require__(6219); +var DOMTokenListImpl_1 = __nccwpck_require__(5096); /** - * Determines if the string `a` is a code unit prefix of string `b`. + * Creates a `DOMImplementation`. * - * @param a - a string - * @param b - a string + * @param document - associated document */ -function isCodeUnitPrefix(a, b) { - /** - * 1. Let i be 0. - * 2. While true: - * 2.1. Let aCodeUnit be the ith code unit of a if i is less than a’s length; - * otherwise null. - * 2.2. Let bCodeUnit be the ith code unit of b if i is less than b’s length; - * otherwise null. - * 2.3. If bCodeUnit is null, then return true. - * 2.4. Return false if aCodeUnit is different from bCodeUnit. - * 2.5. Set i to i + 1. - */ - var i = 0; - while (true) { - var aCodeUnit = i < a.length ? a.charCodeAt(i) : null; - var bCodeUnit = i < b.length ? b.charCodeAt(i) : null; - if (aCodeUnit === null) - return true; - if (aCodeUnit !== bCodeUnit) - return false; - i++; - } +function create_domImplementation(document) { + return DOMImplementationImpl_1.DOMImplementationImpl._create(document); } -exports.isCodeUnitPrefix = isCodeUnitPrefix; +exports.create_domImplementation = create_domImplementation; /** - * Determines if the string `a` is a code unit less than string `b`. - * - * @param a - a string - * @param b - a string + * Creates a `Window` node. */ -function isCodeUnitLessThan(a, b) { - /** - * 1. If b is a code unit prefix of a, then return false. - * 2. If a is a code unit prefix of b, then return true. - * 3. Let n be the smallest index such that the nth code unit of a is - * different from the nth code unit of b. (There has to be such an index, - * since neither string is a prefix of the other.) - * 4. If the nth code unit of a is less than the nth code unit of b, then - * return true. - * 5. Return false. - */ - if (isCodeUnitPrefix(b, a)) - return false; - if (isCodeUnitPrefix(a, b)) - return true; - for (var i = 0; i < Math.min(a.length, b.length); i++) { - var aCodeUnit = a.charCodeAt(i); - var bCodeUnit = b.charCodeAt(i); - if (aCodeUnit === bCodeUnit) - continue; - return (aCodeUnit < bCodeUnit); - } - /* istanbul ignore next */ - return false; +function create_window() { + return WindowImpl_1.WindowImpl._create(); } -exports.isCodeUnitLessThan = isCodeUnitLessThan; +exports.create_window = create_window; /** - * Isomorphic encodes the given string. - * - * @param str - a string + * Creates an `XMLDocument` node. */ -function isomorphicEncode(str) { - var e_1, _a; - /** - * 1. Assert: input contains no code points greater than U+00FF. - * 2. Return a byte sequence whose length is equal to input’s length and whose - * bytes have the same values as input’s code points, in the same order. - */ - var codePoints = Array.from(str); - var bytes = new Uint8Array(codePoints.length); - var i = 0; - try { - for (var str_1 = __values(str), str_1_1 = str_1.next(); !str_1_1.done; str_1_1 = str_1.next()) { - var codePoint = str_1_1.value; - var byte = codePoint.codePointAt(0); - console.assert(byte !== undefined && byte <= 0x00FF, "isomorphicEncode requires string bytes to be less than or equal to 0x00FF."); - if (byte !== undefined && byte <= 0x00FF) { - bytes[i++] = byte; - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (str_1_1 && !str_1_1.done && (_a = str_1.return)) _a.call(str_1); - } - finally { if (e_1) throw e_1.error; } - } - return bytes; +function create_xmlDocument() { + return new XMLDocumentImpl_1.XMLDocumentImpl(); } -exports.isomorphicEncode = isomorphicEncode; +exports.create_xmlDocument = create_xmlDocument; /** - * Determines if the given string is An ASCII string. - * - * @param str - a string + * Creates a `Document` node. */ -function isASCIIString(str) { - /** - * An ASCII string is a string whose code points are all ASCII code points. - */ - return /^[\u0000-\u007F]*$/.test(str); +function create_document() { + return new DocumentImpl_1.DocumentImpl(); } -exports.isASCIIString = isASCIIString; +exports.create_document = create_document; /** - * Converts all uppercase ASCII code points to lowercase. - * - * @param str - a string + * Creates an `AbortController`. */ -function asciiLowercase(str) { - var e_2, _a; - /** - * To ASCII lowercase a string, replace all ASCII upper alphas in the string - * with their corresponding code point in ASCII lower alpha. - */ - var result = ""; - try { - for (var str_2 = __values(str), str_2_1 = str_2.next(); !str_2_1.done; str_2_1 = str_2.next()) { - var c = str_2_1.value; - var code = c.codePointAt(0); - if (code !== undefined && code >= 0x41 && code <= 0x5A) { - result += String.fromCodePoint(code + 0x20); - } - else { - result += c; - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (str_2_1 && !str_2_1.done && (_a = str_2.return)) _a.call(str_2); - } - finally { if (e_2) throw e_2.error; } - } - return result; +function create_abortController() { + return new AbortControllerImpl_1.AbortControllerImpl(); } -exports.asciiLowercase = asciiLowercase; +exports.create_abortController = create_abortController; /** - * Converts all uppercase ASCII code points to uppercase. - * - * @param str - a string + * Creates an `AbortSignal`. */ -function asciiUppercase(str) { - var e_3, _a; - /** - * To ASCII uppercase a string, replace all ASCII lower alphas in the string - * with their corresponding code point in ASCII upper alpha. - */ - var result = ""; - try { - for (var str_3 = __values(str), str_3_1 = str_3.next(); !str_3_1.done; str_3_1 = str_3.next()) { - var c = str_3_1.value; - var code = c.codePointAt(0); - if (code !== undefined && code >= 0x61 && code <= 0x7A) { - result += String.fromCodePoint(code - 0x20); - } - else { - result += c; - } - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (str_3_1 && !str_3_1.done && (_a = str_3.return)) _a.call(str_3); - } - finally { if (e_3) throw e_3.error; } - } - return result; +function create_abortSignal() { + return AbortSignalImpl_1.AbortSignalImpl._create(); } -exports.asciiUppercase = asciiUppercase; +exports.create_abortSignal = create_abortSignal; /** - * Compares two ASCII strings case-insensitively. + * Creates a `DocumentType` node. * - * @param a - a string - * @param b - a string + * @param document - owner document + * @param name - name of the node + * @param publicId - `PUBLIC` identifier + * @param systemId - `SYSTEM` identifier */ -function asciiCaseInsensitiveMatch(a, b) { - /** - * A string A is an ASCII case-insensitive match for a string B, if the ASCII - * lowercase of A is the ASCII lowercase of B. - */ - return asciiLowercase(a) === asciiLowercase(b); +function create_documentType(document, name, publicId, systemId) { + return DocumentTypeImpl_1.DocumentTypeImpl._create(document, name, publicId, systemId); } -exports.asciiCaseInsensitiveMatch = asciiCaseInsensitiveMatch; +exports.create_documentType = create_documentType; /** - * ASCII encodes a string. + * Creates a new `Element` node. * - * @param str - a string + * @param document - owner document + * @param localName - local name + * @param namespace - namespace + * @param prefix - namespace prefix */ -function asciiEncode(str) { - /** - * 1. Assert: input is an ASCII string. - * 2. Return the isomorphic encoding of input. - */ - console.assert(isASCIIString(str), "asciiEncode requires an ASCII string."); - return isomorphicEncode(str); +function create_element(document, localName, namespace, prefix) { + return ElementImpl_1.ElementImpl._create(document, localName, namespace, prefix); } -exports.asciiEncode = asciiEncode; +exports.create_element = create_element; /** - * ASCII decodes a byte sequence. + * Creates a new `HTMLElement` node. * - * @param bytes - a byte sequence + * @param document - owner document + * @param localName - local name + * @param namespace - namespace + * @param prefix - namespace prefix */ -function asciiDecode(bytes) { - var e_4, _a; - try { - /** - * 1. Assert: All bytes in input are ASCII bytes. - * 2. Return the isomorphic decoding of input. - */ - for (var bytes_1 = __values(bytes), bytes_1_1 = bytes_1.next(); !bytes_1_1.done; bytes_1_1 = bytes_1.next()) { - var byte = bytes_1_1.value; - console.assert(Byte_1.isASCIIByte(byte), "asciiDecode requires an ASCII byte sequence."); - } - } - catch (e_4_1) { e_4 = { error: e_4_1 }; } - finally { - try { - if (bytes_1_1 && !bytes_1_1.done && (_a = bytes_1.return)) _a.call(bytes_1); - } - finally { if (e_4) throw e_4.error; } - } - return ByteSequence_1.isomorphicDecode(bytes); +function create_htmlElement(document, localName, namespace, prefix) { + // TODO: Implement in HTML DOM + return ElementImpl_1.ElementImpl._create(document, localName, namespace, prefix); } -exports.asciiDecode = asciiDecode; +exports.create_htmlElement = create_htmlElement; /** - * Strips newline characters from a string. + * Creates a new `HTMLUnknownElement` node. * - * @param str - a string + * @param document - owner document + * @param localName - local name + * @param namespace - namespace + * @param prefix - namespace prefix */ -function stripNewlines(str) { - /** - * To strip newlines from a string, remove any U+000A LF and U+000D CR code - * points from the string. - */ - return str.replace(/[\n\r]/g, ""); +function create_htmlUnknownElement(document, localName, namespace, prefix) { + // TODO: Implement in HTML DOM + return ElementImpl_1.ElementImpl._create(document, localName, namespace, prefix); } -exports.stripNewlines = stripNewlines; +exports.create_htmlUnknownElement = create_htmlUnknownElement; /** - * Normalizes newline characters in a string by converting consecutive - * carriage-return newline characters and also single carriage return characters - * into a single newline. + * Creates a new `DocumentFragment` node. * - * @param str - a string + * @param document - owner document */ -function normalizeNewlines(str) { - /** - * To normalize newlines in a string, replace every U+000D CR U+000A LF code - * point pair with a single U+000A LF code point, and then replace every - * remaining U+000D CR code point with a U+000A LF code point. - */ - return str.replace(/\r\n/g, "\n").replace(/\r/g, "\n"); +function create_documentFragment(document) { + return DocumentFragmentImpl_1.DocumentFragmentImpl._create(document); } -exports.normalizeNewlines = normalizeNewlines; +exports.create_documentFragment = create_documentFragment; /** - * Removes leading and trailing whitespace characters from a string. + * Creates a new `ShadowRoot` node. * - * @param str - a string + * @param document - owner document + * @param host - shadow root's host element node */ -function stripLeadingAndTrailingASCIIWhitespace(str) { - /** - * To strip leading and trailing ASCII whitespace from a string, remove all - * ASCII whitespace that are at the start or the end of the string. - */ - return str.replace(/^[\t\n\f\r ]+/, "").replace(/[\t\n\f\r ]+$/, ""); +function create_shadowRoot(document, host) { + return ShadowRootImpl_1.ShadowRootImpl._create(document, host); } -exports.stripLeadingAndTrailingASCIIWhitespace = stripLeadingAndTrailingASCIIWhitespace; +exports.create_shadowRoot = create_shadowRoot; /** - * Removes consecutive newline characters from a string. + * Creates a new `Attr` node. * - * @param str - a string + * @param document - owner document + * @param localName - local name */ -function stripAndCollapseASCIIWhitespace(str) { - /** - * To strip and collapse ASCII whitespace in a string, replace any sequence of - * one or more consecutive code points that are ASCII whitespace in the string - * with a single U+0020 SPACE code point, and then remove any leading and - * trailing ASCII whitespace from that string. - */ - return stripLeadingAndTrailingASCIIWhitespace(str.replace(/[\t\n\f\r ]{2,}/g, " ")); +function create_attr(document, localName) { + return AttrImpl_1.AttrImpl._create(document, localName); } -exports.stripAndCollapseASCIIWhitespace = stripAndCollapseASCIIWhitespace; +exports.create_attr = create_attr; /** - * Collects a sequence of code points matching a given condition from the input - * string. + * Creates a new `Text` node. * - * @param condition - a condition to match - * @param input - a string - * @param options - starting position + * @param document - owner document + * @param data - node contents */ -function collectASequenceOfCodePoints(condition, input, options) { - /** - * 1. Let result be the empty string. - * 2. While position doesn’t point past the end of input and the code point at - * position within input meets the condition condition: - * 2.1. Append that code point to the end of result. - * 2.2. Advance position by 1. - * 3. Return result. - */ - if (!util_1.isArray(input)) - return collectASequenceOfCodePoints(condition, Array.from(input), options); - var result = ""; - while (options.position < input.length && !!condition.call(null, input[options.position])) { - result += input[options.position]; - options.position++; - } - return result; +function create_text(document, data) { + return TextImpl_1.TextImpl._create(document, data); } -exports.collectASequenceOfCodePoints = collectASequenceOfCodePoints; +exports.create_text = create_text; /** - * Skips over ASCII whitespace. + * Creates a new `CDATASection` node. * - * @param input - input string - * @param options - starting position + * @param document - owner document + * @param data - node contents */ -function skipASCIIWhitespace(input, options) { - /** - * To skip ASCII whitespace within a string input given a position variable - * position, collect a sequence of code points that are ASCII whitespace from - * input given position. The collected code points are not used, but position - * is still updated. - */ - collectASequenceOfCodePoints(function (str) { return CodePoints_1.ASCIIWhiteSpace.test(str); }, input, options); +function create_cdataSection(document, data) { + return CDATASectionImpl_1.CDATASectionImpl._create(document, data); } -exports.skipASCIIWhitespace = skipASCIIWhitespace; +exports.create_cdataSection = create_cdataSection; /** - * Solits a string at the given delimiter. + * Creates a new `Comment` node. * - * @param input - input string - * @param delimiter - a delimiter string + * @param document - owner document + * @param data - node contents */ -function strictlySplit(input, delimiter) { - /** - * 1. Let position be a position variable for input, initially pointing at the - * start of input. - * 2. Let tokens be a list of strings, initially empty. - * 3. Let token be the result of collecting a sequence of code points that are - * not equal to delimiter from input, given position. - * 4. Append token to tokens. - * 5. While position is not past the end of input: - * 5.1. Assert: the code point at position within input is delimiter. - * 5.2. Advance position by 1. - * 5.3. Let token be the result of collecting a sequence of code points that - * are not equal to delimiter from input, given position. - * 5.4. Append token to tokens. - * 6. Return tokens. - */ - if (!util_1.isArray(input)) - return strictlySplit(Array.from(input), delimiter); - var options = { position: 0 }; - var tokens = []; - var token = collectASequenceOfCodePoints(function (str) { return delimiter !== str; }, input, options); - tokens.push(token); - while (options.position < input.length) { - console.assert(input[options.position] === delimiter, "strictlySplit found no delimiter in input string."); - options.position++; - token = collectASequenceOfCodePoints(function (str) { return delimiter !== str; }, input, options); - tokens.push(token); - } - return tokens; +function create_comment(document, data) { + return CommentImpl_1.CommentImpl._create(document, data); } -exports.strictlySplit = strictlySplit; +exports.create_comment = create_comment; /** - * Splits a string on ASCII whitespace. + * Creates a new `ProcessingInstruction` node. * - * @param input - a string + * @param document - owner document + * @param target - instruction target + * @param data - node contents */ -function splitAStringOnASCIIWhitespace(input) { - /** - * 1. Let position be a position variable for input, initially pointing at the - * start of input. - * 2. Let tokens be a list of strings, initially empty. - * 3. Skip ASCII whitespace within input given position. - * 4. While position is not past the end of input: - * 4.1. Let token be the result of collecting a sequence of code points that - * are not ASCII whitespace from input, given position. - * 4.2. Append token to tokens. - * 4.3. Skip ASCII whitespace within input given position. - * 5. Return tokens. - */ - if (!util_1.isArray(input)) - return splitAStringOnASCIIWhitespace(Array.from(input)); - var options = { position: 0 }; - var tokens = []; - skipASCIIWhitespace(input, options); - while (options.position < input.length) { - var token = collectASequenceOfCodePoints(function (str) { return !CodePoints_1.ASCIIWhiteSpace.test(str); }, input, options); - tokens.push(token); - skipASCIIWhitespace(input, options); - } - return tokens; +function create_processingInstruction(document, target, data) { + return ProcessingInstructionImpl_1.ProcessingInstructionImpl._create(document, target, data); } -exports.splitAStringOnASCIIWhitespace = splitAStringOnASCIIWhitespace; +exports.create_processingInstruction = create_processingInstruction; /** - * Splits a string on commas. + * Creates a new `HTMLCollection`. * - * @param input - a string + * @param root - root node + * @param filter - node filter */ -function splitAStringOnCommas(input) { - /** - * 1. Let position be a position variable for input, initially pointing at the - * start of input. - * 2. Let tokens be a list of strings, initially empty. - * 3. While position is not past the end of input: - * 3.1. Let token be the result of collecting a sequence of code points that - * are not U+002C (,) from input, given position. - * 3.2. Strip leading and trailing ASCII whitespace from token. - * 3.3. Append token to tokens. - * 3.4. If position is not past the end of input, then: - * 3.4.1. Assert: the code point at position within input is U+002C (,). - * 3.4.2. Advance position by 1. - * 4. Return tokens. - */ - if (!util_1.isArray(input)) - return splitAStringOnCommas(Array.from(input)); - var options = { position: 0 }; - var tokens = []; - while (options.position < input.length) { - var token = collectASequenceOfCodePoints(function (str) { return str !== ','; }, input, options); - tokens.push(stripLeadingAndTrailingASCIIWhitespace(token)); - if (options.position < input.length) { - console.assert(input[options.position] === ',', "splitAStringOnCommas found no delimiter in input string."); - options.position++; - } - } - return tokens; +function create_htmlCollection(root, filter) { + if (filter === void 0) { filter = (function () { return true; }); } + return HTMLCollectionImpl_1.HTMLCollectionImpl._create(root, filter); } -exports.splitAStringOnCommas = splitAStringOnCommas; +exports.create_htmlCollection = create_htmlCollection; /** - * Concatenates a list of strings with the given separator. + * Creates a new live `NodeList`. * - * @param list - a list of strings - * @param separator - a separator string + * @param root - root node */ -function concatenate(list, separator) { - if (separator === void 0) { separator = ""; } - /** - * 1. If list is empty, then return the empty string. - * 2. If separator is not given, then set separator to the empty string. - * 3. Return a string whose contents are list’s items, in order, separated - * from each other by separator. - */ - if (list.length === 0) - return ""; - return list.join(separator); +function create_nodeList(root) { + return NodeListImpl_1.NodeListImpl._create(root); } -exports.concatenate = concatenate; -//# sourceMappingURL=String.js.map +exports.create_nodeList = create_nodeList; +/** + * Creates a new static `NodeList`. + * + * @param root - root node + * @param items - a list of items to initialize the list + */ +function create_nodeListStatic(root, items) { + return NodeListStaticImpl_1.NodeListStaticImpl._create(root, items); +} +exports.create_nodeListStatic = create_nodeListStatic; +/** + * Creates a new `NamedNodeMap`. + * + * @param element - parent element + */ +function create_namedNodeMap(element) { + return NamedNodeMapImpl_1.NamedNodeMapImpl._create(element); +} +exports.create_namedNodeMap = create_namedNodeMap; +/** + * Creates a new `Range`. + * + * @param start - start point + * @param end - end point + */ +function create_range(start, end) { + return RangeImpl_1.RangeImpl._create(start, end); +} +exports.create_range = create_range; +/** + * Creates a new `NodeIterator`. + * + * @param root - iterator's root node + * @param reference - reference node + * @param pointerBeforeReference - whether the iterator is before or after the + * reference node + */ +function create_nodeIterator(root, reference, pointerBeforeReference) { + return NodeIteratorImpl_1.NodeIteratorImpl._create(root, reference, pointerBeforeReference); +} +exports.create_nodeIterator = create_nodeIterator; +/** + * Creates a new `TreeWalker`. + * + * @param root - iterator's root node + * @param current - current node + */ +function create_treeWalker(root, current) { + return TreeWalkerImpl_1.TreeWalkerImpl._create(root, current); +} +exports.create_treeWalker = create_treeWalker; +/** + * Creates a new `NodeFilter`. + */ +function create_nodeFilter() { + return NodeFilterImpl_1.NodeFilterImpl._create(); +} +exports.create_nodeFilter = create_nodeFilter; +/** + * Creates a new `MutationRecord`. + * + * @param type - type of mutation: `"attributes"` for an attribute + * mutation, `"characterData"` for a mutation to a CharacterData node + * and `"childList"` for a mutation to the tree of nodes. + * @param target - node affected by the mutation. + * @param addedNodes - list of added nodes. + * @param removedNodes - list of removed nodes. + * @param previousSibling - previous sibling of added or removed nodes. + * @param nextSibling - next sibling of added or removed nodes. + * @param attributeName - local name of the changed attribute, + * and `null` otherwise. + * @param attributeNamespace - namespace of the changed attribute, + * and `null` otherwise. + * @param oldValue - value before mutation: attribute value for an attribute + * mutation, node `data` for a mutation to a CharacterData node and `null` + * for a mutation to the tree of nodes. + */ +function create_mutationRecord(type, target, addedNodes, removedNodes, previousSibling, nextSibling, attributeName, attributeNamespace, oldValue) { + return MutationRecordImpl_1.MutationRecordImpl._create(type, target, addedNodes, removedNodes, previousSibling, nextSibling, attributeName, attributeNamespace, oldValue); +} +exports.create_mutationRecord = create_mutationRecord; +/** + * Creates a new `DOMTokenList`. + * + * @param element - associated element + * @param attribute - associated attribute + */ +function create_domTokenList(element, attribute) { + return DOMTokenListImpl_1.DOMTokenListImpl._create(element, attribute); +} +exports.create_domTokenList = create_domTokenList; +//# sourceMappingURL=CreateAlgorithm.js.map + +/***/ }), + +/***/ 5648: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var PotentialCustomElementName = /[a-z]([\0-\t\x2D\._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])*-([\0-\t\x2D\._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])*/; +var NamesWithHyphen = new Set(['annotation-xml', 'color-profile', + 'font-face', 'font-face-src', 'font-face-uri', 'font-face-format', + 'font-face-name', 'missing-glyph']); +var ElementNames = new Set(['article', 'aside', 'blockquote', + 'body', 'div', 'footer', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', + 'header', 'main', 'nav', 'p', 'section', 'span']); +var VoidElementNames = new Set(['area', 'base', 'basefont', + 'bgsound', 'br', 'col', 'embed', 'frame', 'hr', 'img', 'input', 'keygen', + 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr']); +var ShadowHostNames = new Set(['article', 'aside', 'blockquote', 'body', + 'div', 'footer', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'main', + 'nav', 'p', 'section', 'span']); +/** + * Determines if the given string is a valid custom element name. + * + * @param name - a name string + */ +function customElement_isValidCustomElementName(name) { + if (!PotentialCustomElementName.test(name)) + return false; + if (NamesWithHyphen.has(name)) + return false; + return true; +} +exports.customElement_isValidCustomElementName = customElement_isValidCustomElementName; +/** + * Determines if the given string is a valid element name. + * + * @param name - a name string + */ +function customElement_isValidElementName(name) { + return (ElementNames.has(name)); +} +exports.customElement_isValidElementName = customElement_isValidElementName; +/** + * Determines if the given string is a void element name. + * + * @param name - a name string + */ +function customElement_isVoidElementName(name) { + return (VoidElementNames.has(name)); +} +exports.customElement_isVoidElementName = customElement_isVoidElementName; +/** + * Determines if the given string is a valid shadow host element name. + * + * @param name - a name string + */ +function customElement_isValidShadowHostName(name) { + return (ShadowHostNames.has(name)); +} +exports.customElement_isValidShadowHostName = customElement_isValidShadowHostName; +/** + * Enqueues an upgrade reaction for a custom element. + * + * @param element - a custom element + * @param definition - a custom element definition + */ +function customElement_enqueueACustomElementUpgradeReaction(element, definition) { + // TODO: Implement in HTML DOM +} +exports.customElement_enqueueACustomElementUpgradeReaction = customElement_enqueueACustomElementUpgradeReaction; +/** + * Enqueues a callback reaction for a custom element. + * + * @param element - a custom element + * @param callbackName - name of the callback + * @param args - callback arguments + */ +function customElement_enqueueACustomElementCallbackReaction(element, callbackName, args) { + // TODO: Implement in HTML DOM +} +exports.customElement_enqueueACustomElementCallbackReaction = customElement_enqueueACustomElementCallbackReaction; +/** + * Upgrade a custom element. + * + * @param element - a custom element + */ +function customElement_upgrade(definition, element) { + // TODO: Implement in HTML DOM +} +exports.customElement_upgrade = customElement_upgrade; +/** + * Tries to upgrade a custom element. + * + * @param element - a custom element + */ +function customElement_tryToUpgrade(element) { + // TODO: Implement in HTML DOM +} +exports.customElement_tryToUpgrade = customElement_tryToUpgrade; +/** + * Looks up a custom element definition. + * + * @param document - a document + * @param namespace - element namespace + * @param localName - element local name + * @param is - an `is` value + */ +function customElement_lookUpACustomElementDefinition(document, namespace, localName, is) { + // TODO: Implement in HTML DOM + return null; +} +exports.customElement_lookUpACustomElementDefinition = customElement_lookUpACustomElementDefinition; +//# sourceMappingURL=CustomElementAlgorithm.js.map /***/ }), -/* 98 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 9628: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -6012,1553 +5352,1138 @@ var __values = (this && this.__values) || function(o) { }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(970); -var LocalNameSet_1 = __webpack_require__(575); -var NamespacePrefixMap_1 = __webpack_require__(392); -var DOMException_1 = __webpack_require__(35); -var infra_1 = __webpack_require__(23); -var algorithm_1 = __webpack_require__(163); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var TreeAlgorithm_1 = __nccwpck_require__(6620); +var util_1 = __nccwpck_require__(5282); +var ShadowTreeAlgorithm_1 = __nccwpck_require__(8733); +var supportedTokens = new Map(); /** - * Represents an XML serializer. + * Runs removing steps for node. * - * Implements: https://www.w3.org/TR/DOM-Parsing/#serializing + * @param removedNode - removed node + * @param oldParent - old parent node */ -var XMLSerializerImpl = /** @class */ (function () { - function XMLSerializerImpl() { +function dom_runRemovingSteps(removedNode, oldParent) { + // No steps defined +} +exports.dom_runRemovingSteps = dom_runRemovingSteps; +/** + * Runs cloning steps for node. + * + * @param copy - node clone + * @param node - node + * @param document - document to own the cloned node + * @param cloneChildrenFlag - whether child nodes are cloned + */ +function dom_runCloningSteps(copy, node, document, cloneChildrenFlag) { + // No steps defined +} +exports.dom_runCloningSteps = dom_runCloningSteps; +/** + * Runs adopting steps for node. + * + * @param node - node + * @param oldDocument - old document + */ +function dom_runAdoptingSteps(node, oldDocument) { + // No steps defined +} +exports.dom_runAdoptingSteps = dom_runAdoptingSteps; +/** + * Runs attribute change steps for an element node. + * + * @param element - element node owning the attribute + * @param localName - attribute's local name + * @param oldValue - attribute's old value + * @param value - attribute's new value + * @param namespace - attribute's namespace + */ +function dom_runAttributeChangeSteps(element, localName, oldValue, value, namespace) { + var e_1, _a; + // run default steps + if (DOMImpl_1.dom.features.slots) { + updateASlotablesName.call(element, element, localName, oldValue, value, namespace); + updateASlotsName.call(element, element, localName, oldValue, value, namespace); } - /** @inheritdoc */ - XMLSerializerImpl.prototype.serializeToString = function (root) { + updateAnElementID.call(element, element, localName, value, namespace); + try { + // run custom steps + for (var _b = __values(element._attributeChangeSteps), _c = _b.next(); !_c.done; _c = _b.next()) { + var step = _c.value; + step.call(element, element, localName, oldValue, value, namespace); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } +} +exports.dom_runAttributeChangeSteps = dom_runAttributeChangeSteps; +/** + * Runs insertion steps for a node. + * + * @param insertedNode - inserted node + */ +function dom_runInsertionSteps(insertedNode) { + // No steps defined +} +exports.dom_runInsertionSteps = dom_runInsertionSteps; +/** + * Runs pre-removing steps for a node iterator and node. + * + * @param nodeIterator - a node iterator + * @param toBeRemoved - node to be removed + */ +function dom_runNodeIteratorPreRemovingSteps(nodeIterator, toBeRemoved) { + removeNodeIterator.call(nodeIterator, nodeIterator, toBeRemoved); +} +exports.dom_runNodeIteratorPreRemovingSteps = dom_runNodeIteratorPreRemovingSteps; +/** + * Determines if there are any supported tokens defined for the given + * attribute name. + * + * @param attributeName - an attribute name + */ +function dom_hasSupportedTokens(attributeName) { + return supportedTokens.has(attributeName); +} +exports.dom_hasSupportedTokens = dom_hasSupportedTokens; +/** + * Returns the set of supported tokens defined for the given attribute name. + * + * @param attributeName - an attribute name + */ +function dom_getSupportedTokens(attributeName) { + return supportedTokens.get(attributeName) || new Set(); +} +exports.dom_getSupportedTokens = dom_getSupportedTokens; +/** + * Runs event construction steps. + * + * @param event - an event + */ +function dom_runEventConstructingSteps(event) { + // No steps defined +} +exports.dom_runEventConstructingSteps = dom_runEventConstructingSteps; +/** + * Runs child text content change steps for a parent node. + * + * @param parent - parent node with text node child nodes + */ +function dom_runChildTextContentChangeSteps(parent) { + // No steps defined +} +exports.dom_runChildTextContentChangeSteps = dom_runChildTextContentChangeSteps; +/** + * Defines pre-removing steps for a node iterator. + */ +function removeNodeIterator(nodeIterator, toBeRemovedNode) { + /** + * 1. If toBeRemovedNode is not an inclusive ancestor of nodeIterator’s + * reference, or toBeRemovedNode is nodeIterator’s root, then return. + */ + if (toBeRemovedNode === nodeIterator._root || + !TreeAlgorithm_1.tree_isAncestorOf(nodeIterator._reference, toBeRemovedNode, true)) { + return; + } + /** + * 2. If nodeIterator’s pointer before reference is true, then: + */ + if (nodeIterator._pointerBeforeReference) { /** - * The serializeToString(root) method must produce an XML serialization - * of root passing a value of false for the require well-formed parameter, - * and return the result. + * 2.1. Let next be toBeRemovedNode’s first following node that is an + * inclusive descendant of nodeIterator’s root and is not an inclusive + * descendant of toBeRemovedNode, and null if there is no such node. */ - return this._xmlSerialization(root, false); - }; + while (true) { + var nextNode = TreeAlgorithm_1.tree_getFollowingNode(nodeIterator._root, toBeRemovedNode); + if (nextNode !== null && + TreeAlgorithm_1.tree_isDescendantOf(nodeIterator._root, nextNode, true) && + !TreeAlgorithm_1.tree_isDescendantOf(toBeRemovedNode, nextNode, true)) { + /** + * 2.2. If next is non-null, then set nodeIterator’s reference to next + * and return. + */ + nodeIterator._reference = nextNode; + return; + } + else if (nextNode === null) { + /** + * 2.3. Otherwise, set nodeIterator’s pointer before reference to false. + */ + nodeIterator._pointerBeforeReference = false; + return; + } + } + } /** - * Produces an XML serialization of the given node. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance + * 3. Set nodeIterator’s reference to toBeRemovedNode’s parent, if + * toBeRemovedNode’s previous sibling is null, and to the inclusive + * descendant of toBeRemovedNode’s previous sibling that appears last in + * tree order otherwise. */ - XMLSerializerImpl.prototype._xmlSerialization = function (node, requireWellFormed) { - // To increase performance, use a namespace-aware serializer only if the - // document has namespaced elements - if (node._nodeDocument === undefined || node._nodeDocument._hasNamespaces) { - /** From: https://w3c.github.io/DOM-Parsing/#xml-serialization - * - * 1. Let namespace be a context namespace with value null. - * The context namespace tracks the XML serialization algorithm's current - * default namespace. The context namespace is changed when either an Element - * Node has a default namespace declaration, or the algorithm generates a - * default namespace declaration for the Element Node to match its own - * namespace. The algorithm assumes no namespace (null) to start. - * 2. Let prefix map be a new namespace prefix map. - * 3. Add the XML namespace with prefix value "xml" to prefix map. - * 4. Let prefix index be a generated namespace prefix index with value 1. - * The generated namespace prefix index is used to generate a new unique - * prefix value when no suitable existing namespace prefix is available to - * serialize a node's namespaceURI (or the namespaceURI of one of node's - * attributes). See the generate a prefix algorithm. - */ - var namespace = null; - var prefixMap = new NamespacePrefixMap_1.NamespacePrefixMap(); - prefixMap.set("xml", infra_1.namespace.XML); - var prefixIndex = { value: 1 }; - /** - * 5. Return the result of running the XML serialization algorithm on node - * passing the context namespace namespace, namespace prefix map prefix map, - * generated namespace prefix index reference to prefix index, and the - * flag require well-formed. If an exception occurs during the execution - * of the algorithm, then catch that exception and throw an - * "InvalidStateError" DOMException. - */ - try { - return this._serializeNodeNS(node, namespace, prefixMap, prefixIndex, requireWellFormed); - } - catch (_a) { - throw new DOMException_1.InvalidStateError(); + if (toBeRemovedNode._previousSibling === null) { + if (toBeRemovedNode._parent !== null) { + nodeIterator._reference = toBeRemovedNode._parent; + } + } + else { + var referenceNode = toBeRemovedNode._previousSibling; + var childNode = TreeAlgorithm_1.tree_getFirstDescendantNode(toBeRemovedNode._previousSibling, true, false); + while (childNode !== null) { + if (childNode !== null) { + referenceNode = childNode; } + // loop through to get the last descendant node + childNode = TreeAlgorithm_1.tree_getNextDescendantNode(toBeRemovedNode._previousSibling, childNode, true, false); + } + nodeIterator._reference = referenceNode; + } +} +/** + * Defines attribute change steps to update a slot’s name. + */ +function updateASlotsName(element, localName, oldValue, value, namespace) { + /** + * 1. If element is a slot, localName is name, and namespace is null, then: + * 1.1. If value is oldValue, then return. + * 1.2. If value is null and oldValue is the empty string, then return. + * 1.3. If value is the empty string and oldValue is null, then return. + * 1.4. If value is null or the empty string, then set element’s name to the + * empty string. + * 1.5. Otherwise, set element’s name to value. + * 1.6. Run assign slotables for a tree with element’s root. + */ + if (util_1.Guard.isSlot(element) && localName === "name" && namespace === null) { + if (value === oldValue) + return; + if (value === null && oldValue === '') + return; + if (value === '' && oldValue === null) + return; + if ((value === null || value === '')) { + element._name = ''; } else { - try { - return this._serializeNode(node, requireWellFormed); - } - catch (_b) { - throw new DOMException_1.InvalidStateError(); - } + element._name = value; } - }; + ShadowTreeAlgorithm_1.shadowTree_assignSlotablesForATree(TreeAlgorithm_1.tree_rootNode(element)); + } +} +/** + * Defines attribute change steps to update a slotable’s name. + */ +function updateASlotablesName(element, localName, oldValue, value, namespace) { /** - * Produces an XML serialization of a node. - * - * @param node - node to serialize - * @param namespace - context namespace - * @param prefixMap - namespace prefix map - * @param prefixIndex - generated namespace prefix index - * @param requireWellFormed - whether to check conformance + * 1. If localName is slot and namespace is null, then: + * 1.1. If value is oldValue, then return. + * 1.2. If value is null and oldValue is the empty string, then return. + * 1.3. If value is the empty string and oldValue is null, then return. + * 1.4. If value is null or the empty string, then set element’s name to + * the empty string. + * 1.5. Otherwise, set element’s name to value. + * 1.6. If element is assigned, then run assign slotables for element’s + * assigned slot. + * 1.7. Run assign a slot for element. */ - XMLSerializerImpl.prototype._serializeNodeNS = function (node, namespace, prefixMap, prefixIndex, requireWellFormed) { - switch (node.nodeType) { - case interfaces_1.NodeType.Element: - return this._serializeElementNS(node, namespace, prefixMap, prefixIndex, requireWellFormed); - case interfaces_1.NodeType.Document: - return this._serializeDocumentNS(node, namespace, prefixMap, prefixIndex, requireWellFormed); - case interfaces_1.NodeType.Comment: - return this._serializeComment(node, requireWellFormed); - case interfaces_1.NodeType.Text: - return this._serializeText(node, requireWellFormed); - case interfaces_1.NodeType.DocumentFragment: - return this._serializeDocumentFragmentNS(node, namespace, prefixMap, prefixIndex, requireWellFormed); - case interfaces_1.NodeType.DocumentType: - return this._serializeDocumentType(node, requireWellFormed); - case interfaces_1.NodeType.ProcessingInstruction: - return this._serializeProcessingInstruction(node, requireWellFormed); - case interfaces_1.NodeType.CData: - return this._serializeCData(node, requireWellFormed); - default: - throw new Error("Unknown node type: " + node.nodeType); + if (util_1.Guard.isSlotable(element) && localName === "slot" && namespace === null) { + if (value === oldValue) + return; + if (value === null && oldValue === '') + return; + if (value === '' && oldValue === null) + return; + if ((value === null || value === '')) { + element._name = ''; } - }; + else { + element._name = value; + } + if (ShadowTreeAlgorithm_1.shadowTree_isAssigned(element)) { + ShadowTreeAlgorithm_1.shadowTree_assignSlotables(element._assignedSlot); + } + ShadowTreeAlgorithm_1.shadowTree_assignASlot(element); + } +} +/** + * Defines attribute change steps to update an element's ID. + */ +function updateAnElementID(element, localName, value, namespace) { /** - * Produces an XML serialization of a node. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance + * 1. If localName is id, namespace is null, and value is null or the empty + * string, then unset element’s ID. + * 2. Otherwise, if localName is id, namespace is null, then set element’s + * ID to value. */ - XMLSerializerImpl.prototype._serializeNode = function (node, requireWellFormed) { - switch (node.nodeType) { - case interfaces_1.NodeType.Element: - return this._serializeElement(node, requireWellFormed); - case interfaces_1.NodeType.Document: - return this._serializeDocument(node, requireWellFormed); - case interfaces_1.NodeType.Comment: - return this._serializeComment(node, requireWellFormed); - case interfaces_1.NodeType.Text: - return this._serializeText(node, requireWellFormed); - case interfaces_1.NodeType.DocumentFragment: - return this._serializeDocumentFragment(node, requireWellFormed); - case interfaces_1.NodeType.DocumentType: - return this._serializeDocumentType(node, requireWellFormed); - case interfaces_1.NodeType.ProcessingInstruction: - return this._serializeProcessingInstruction(node, requireWellFormed); - case interfaces_1.NodeType.CData: - return this._serializeCData(node, requireWellFormed); - default: - throw new Error("Unknown node type: " + node.nodeType); + if (localName === "id" && namespace === null) { + if (!value) + element._uniqueIdentifier = undefined; + else + element._uniqueIdentifier = value; + } +} +//# sourceMappingURL=DOMAlgorithm.js.map + +/***/ }), + +/***/ 3261: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var OrderedSetAlgorithm_1 = __nccwpck_require__(3670); +var DOMAlgorithm_1 = __nccwpck_require__(9628); +var ElementAlgorithm_1 = __nccwpck_require__(1849); +/** + * Validates a given token against the supported tokens defined for the given + * token lists' associated attribute. + * + * @param tokenList - a token list + * @param token - a token + */ +function tokenList_validationSteps(tokenList, token) { + /** + * 1. If the associated attribute’s local name does not define supported + * tokens, throw a TypeError. + * 2. Let lowercase token be a copy of token, in ASCII lowercase. + * 3. If lowercase token is present in supported tokens, return true. + * 4. Return false. + */ + if (!DOMAlgorithm_1.dom_hasSupportedTokens(tokenList._attribute._localName)) { + throw new TypeError("There are no supported tokens defined for attribute name: '" + tokenList._attribute._localName + "'."); + } + return DOMAlgorithm_1.dom_getSupportedTokens(tokenList._attribute._localName).has(token.toLowerCase()); +} +exports.tokenList_validationSteps = tokenList_validationSteps; +/** + * Updates the value of the token lists' associated attribute. + * + * @param tokenList - a token list + */ +function tokenList_updateSteps(tokenList) { + /** + * 1. If the associated element does not have an associated attribute and + * token set is empty, then return. + * 2. Set an attribute value for the associated element using associated + * attribute’s local name and the result of running the ordered set + * serializer for token set. + */ + if (!tokenList._element.hasAttribute(tokenList._attribute._localName) && + tokenList._tokenSet.size === 0) { + return; + } + ElementAlgorithm_1.element_setAnAttributeValue(tokenList._element, tokenList._attribute._localName, OrderedSetAlgorithm_1.orderedSet_serialize(tokenList._tokenSet)); +} +exports.tokenList_updateSteps = tokenList_updateSteps; +/** + * Gets the value of the token lists' associated attribute. + * + * @param tokenList - a token list + */ +function tokenList_serializeSteps(tokenList) { + /** + * A DOMTokenList object’s serialize steps are to return the result of + * running get an attribute value given the associated element and the + * associated attribute’s local name. + */ + return ElementAlgorithm_1.element_getAnAttributeValue(tokenList._element, tokenList._attribute._localName); +} +exports.tokenList_serializeSteps = tokenList_serializeSteps; +//# sourceMappingURL=DOMTokenListAlgorithm.js.map + +/***/ }), + +/***/ 2793: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; } }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var util_1 = __nccwpck_require__(5282); +var util_2 = __nccwpck_require__(6195); +var ElementImpl_1 = __nccwpck_require__(5975); +var CustomElementAlgorithm_1 = __nccwpck_require__(5648); +var TreeAlgorithm_1 = __nccwpck_require__(6620); +var NamespaceAlgorithm_1 = __nccwpck_require__(5856); +var DOMAlgorithm_1 = __nccwpck_require__(9628); +var ElementAlgorithm_1 = __nccwpck_require__(1849); +var MutationAlgorithm_1 = __nccwpck_require__(5463); +/** + * Returns an element interface for the given name and namespace. + * + * @param name - element name + * @param namespace - namespace + */ +function document_elementInterface(name, namespace) { + return ElementImpl_1.ElementImpl; +} +exports.document_elementInterface = document_elementInterface; +/** + * Creates a new element node. + * See: https://dom.spec.whatwg.org/#internal-createelementns-steps + * + * @param document - owner document + * @param namespace - element namespace + * @param qualifiedName - qualified name + * @param options - element options + */ +function document_internalCreateElementNS(document, namespace, qualifiedName, options) { /** - * Produces an XML serialization of an element node. - * - * @param node - node to serialize - * @param namespace - context namespace - * @param prefixMap - namespace prefix map - * @param prefixIndex - generated namespace prefix index - * @param requireWellFormed - whether to check conformance + * 1. Let namespace, prefix, and localName be the result of passing + * namespace and qualifiedName to validate and extract. + * 2. Let is be null. + * 3. If options is a dictionary and options’s is is present, then set + * is to it. + * 4. Return the result of creating an element given document, localName, + * namespace, prefix, is, and with the synchronous custom elements flag set. */ - XMLSerializerImpl.prototype._serializeElementNS = function (node, namespace, prefixMap, prefixIndex, requireWellFormed) { - var e_1, _a; - /** - * From: https://w3c.github.io/DOM-Parsing/#xml-serializing-an-element-node - * - * 1. If the require well-formed flag is set (its value is true), and this - * node's localName attribute contains the character ":" (U+003A COLON) or - * does not match the XML Name production, then throw an exception; the - * serialization of this node would not be a well-formed element. - */ - if (requireWellFormed && (node.localName.indexOf(":") !== -1 || - !algorithm_1.xml_isName(node.localName))) { - throw new Error("Node local name contains invalid characters (well-formed required)."); - } - /** - * 2. Let markup be the string "<" (U+003C LESS-THAN SIGN). - * 3. Let qualified name be an empty string. - * 4. Let skip end tag be a boolean flag with value false. - * 5. Let ignore namespace definition attribute be a boolean flag with value - * false. - * 6. Given prefix map, copy a namespace prefix map and let map be the - * result. - * 7. Let local prefixes map be an empty map. The map has unique Node prefix - * strings as its keys, with corresponding namespaceURI Node values as the - * map's key values (in this map, the null namespace is represented by the - * empty string). - * - * _Note:_ This map is local to each element. It is used to ensure there - * are no conflicting prefixes should a new namespace prefix attribute need - * to be generated. It is also used to enable skipping of duplicate prefix - * definitions when writing an element's attributes: the map allows the - * algorithm to distinguish between a prefix in the namespace prefix map - * that might be locally-defined (to the current Element) and one that is - * not. - * 8. Let local default namespace be the result of recording the namespace - * information for node given map and local prefixes map. - * - * _Note:_ The above step will update map with any found namespace prefix - * definitions, add the found prefix definitions to the local prefixes map - * and return a local default namespace value defined by a default namespace - * attribute if one exists. Otherwise it returns null. - * 9. Let inherited ns be a copy of namespace. - * 10. Let ns be the value of node's namespaceURI attribute. - */ - var markup = "<"; - var qualifiedName = ''; - var skipEndTag = false; - var ignoreNamespaceDefinitionAttribute = false; - var map = prefixMap.copy(); - var localPrefixesMap = {}; - var localDefaultNamespace = this._recordNamespaceInformation(node, map, localPrefixesMap); - var inheritedNS = namespace; - var ns = node.namespaceURI; - /** 11. If inherited ns is equal to ns, then: */ - if (inheritedNS === ns) { - /** - * 11.1. If local default namespace is not null, then set ignore - * namespace definition attribute to true. - */ - if (localDefaultNamespace !== null) { - ignoreNamespaceDefinitionAttribute = true; - } - /** - * 11.2. If ns is the XML namespace, then append to qualified name the - * concatenation of the string "xml:" and the value of node's localName. - * 11.3. Otherwise, append to qualified name the value of node's - * localName. The node's prefix if it exists, is dropped. - */ - if (ns === infra_1.namespace.XML) { - qualifiedName = 'xml:' + node.localName; - } - else { - qualifiedName = node.localName; - } - /** 11.4. Append the value of qualified name to markup. */ - markup += qualifiedName; + var _a = __read(NamespaceAlgorithm_1.namespace_validateAndExtract(namespace, qualifiedName), 3), ns = _a[0], prefix = _a[1], localName = _a[2]; + var is = null; + if (options !== undefined) { + if (util_2.isString(options)) { + is = options; } else { + is = options.is; + } + } + return ElementAlgorithm_1.element_createAnElement(document, localName, ns, prefix, is, true); +} +exports.document_internalCreateElementNS = document_internalCreateElementNS; +/** + * Removes `node` and its subtree from its document and changes + * its owner document to `document` so that it can be inserted + * into `document`. + * + * @param node - the node to move + * @param document - document to receive the node and its subtree + */ +function document_adopt(node, document) { + var e_1, _a; + // Optimize for common case of inserting a fresh node + if (node._nodeDocument === document && node._parent === null) { + return; + } + /** + * 1. Let oldDocument be node’s node document. + * 2. If node’s parent is not null, remove node from its parent. + */ + var oldDocument = node._nodeDocument; + if (node._parent) + MutationAlgorithm_1.mutation_remove(node, node._parent); + /** + * 3. If document is not oldDocument, then: + */ + if (document !== oldDocument) { + /** + * 3.1. For each inclusiveDescendant in node’s shadow-including inclusive + * descendants: + */ + var inclusiveDescendant = TreeAlgorithm_1.tree_getFirstDescendantNode(node, true, true); + while (inclusiveDescendant !== null) { /** - * 12. Otherwise, inherited ns is not equal to ns (the node's own - * namespace is different from the context namespace of its parent). - * Run these sub-steps: - * - * 12.1. Let prefix be the value of node's prefix attribute. - * 12.2. Let candidate prefix be the result of retrieving a preferred - * prefix string prefix from map given namespace ns. The above may return - * null if no namespace key ns exists in map. - */ - var prefix = node.prefix; - /** - * We don't need to run "retrieving a preferred prefix string" algorithm if - * the element has no prefix and its namespace matches to the default - * namespace. - * See: https://github.com/web-platform-tests/wpt/pull/16703 + * 3.1.1. Set inclusiveDescendant’s node document to document. + * 3.1.2. If inclusiveDescendant is an element, then set the node + * document of each attribute in inclusiveDescendant’s attribute list + * to document. */ - var candidatePrefix = null; - if (prefix !== null || ns !== localDefaultNamespace) { - candidatePrefix = map.get(prefix, ns); + inclusiveDescendant._nodeDocument = document; + if (util_1.Guard.isElementNode(inclusiveDescendant)) { + try { + for (var _b = (e_1 = void 0, __values(inclusiveDescendant._attributeList._asArray())), _c = _b.next(); !_c.done; _c = _b.next()) { + var attr = _c.value; + attr._nodeDocument = document; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } } /** - * 12.3. If the value of prefix matches "xmlns", then run the following - * steps: + * 3.2. For each inclusiveDescendant in node's shadow-including + * inclusive descendants that is custom, enqueue a custom + * element callback reaction with inclusiveDescendant, + * callback name "adoptedCallback", and an argument list + * containing oldDocument and document. */ - if (prefix === "xmlns") { - /** - * 12.3.1. If the require well-formed flag is set, then throw an error. - * An Element with prefix "xmlns" will not legally round-trip in a - * conforming XML parser. - */ - if (requireWellFormed) { - throw new Error("An element cannot have the 'xmlns' prefix (well-formed required)."); + if (DOMImpl_1.dom.features.customElements) { + if (util_1.Guard.isElementNode(inclusiveDescendant) && + inclusiveDescendant._customElementState === "custom") { + CustomElementAlgorithm_1.customElement_enqueueACustomElementCallbackReaction(inclusiveDescendant, "adoptedCallback", [oldDocument, document]); } - /** - * 12.3.2. Let candidate prefix be the value of prefix. - */ - candidatePrefix = prefix; } /** - * 12.4.Found a suitable namespace prefix: if candidate prefix is not - * null (a namespace prefix is defined which maps to ns), then: + * 3.3. For each inclusiveDescendant in node’s shadow-including + * inclusive descendants, in shadow-including tree order, run the + * adopting steps with inclusiveDescendant and oldDocument. */ - if (candidatePrefix !== null) { - /** - * The following may serialize a different prefix than the Element's - * existing prefix if it already had one. However, the retrieving a - * preferred prefix string algorithm already tried to match the - * existing prefix if possible. - * - * 12.4.1. Append to qualified name the concatenation of candidate - * prefix, ":" (U+003A COLON), and node's localName. There exists on - * this node or the node's ancestry a namespace prefix definition that - * defines the node's namespace. - * 12.4.2. If the local default namespace is not null (there exists a - * locally-defined default namespace declaration attribute) and its - * value is not the XML namespace, then let inherited ns get the value - * of local default namespace unless the local default namespace is the - * empty string in which case let it get null (the context namespace - * is changed to the declared default, rather than this node's own - * namespace). - * - * _Note:_ Any default namespace definitions or namespace prefixes that - * define the XML namespace are omitted when serializing this node's - * attributes. - */ - qualifiedName = candidatePrefix + ':' + node.localName; - if (localDefaultNamespace !== null && localDefaultNamespace !== infra_1.namespace.XML) { - inheritedNS = localDefaultNamespace || null; - } - /** - * 12.4.3. Append the value of qualified name to markup. - */ - markup += qualifiedName; - /** 12.5. Otherwise, if prefix is not null, then: */ - } - else if (prefix !== null) { - /** - * _Note:_ By this step, there is no namespace or prefix mapping - * declaration in this node (or any parent node visited by this - * algorithm) that defines prefix otherwise the step labelled Found - * a suitable namespace prefix would have been followed. The sub-steps - * that follow will create a new namespace prefix declaration for prefix - * and ensure that prefix does not conflict with an existing namespace - * prefix declaration of the same localName in node's attribute list. - * - * 12.5.1. If the local prefixes map contains a key matching prefix, - * then let prefix be the result of generating a prefix providing as - * input map, ns, and prefix index. - */ - if (prefix in localPrefixesMap) { - prefix = this._generatePrefix(ns, map, prefixIndex); - } - /** - * 12.5.2. Add prefix to map given namespace ns. - * 12.5.3. Append to qualified name the concatenation of prefix, ":" - * (U+003A COLON), and node's localName. - * 12.5.4. Append the value of qualified name to markup. - */ - map.set(prefix, ns); - qualifiedName += prefix + ':' + node.localName; - markup += qualifiedName; - /** - * 12.5.5. Append the following to markup, in the order listed: - * - * _Note:_ The following serializes a namespace prefix declaration for - * prefix which was just added to the map. - * - * 12.5.5.1. " " (U+0020 SPACE); - * 12.5.5.2. The string "xmlns:"; - * 12.5.5.3. The value of prefix; - * 12.5.5.4. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); - * 12.5.5.5. The result of serializing an attribute value given ns and - * the require well-formed flag as input; - * 12.5.5.6. """ (U+0022 QUOTATION MARK). - */ - markup += " xmlns:" + prefix + "=\"" + - this._serializeAttributeValue(ns, requireWellFormed) + "\""; - /** - * 12.5.5.7. If local default namespace is not null (there exists a - * locally-defined default namespace declaration attribute), then - * let inherited ns get the value of local default namespace unless the - * local default namespace is the empty string in which case let it get - * null. - */ - if (localDefaultNamespace !== null) { - inheritedNS = localDefaultNamespace || null; - } - /** - * 12.6. Otherwise, if local default namespace is null, or local - * default namespace is not null and its value is not equal to ns, then: - */ - } - else if (localDefaultNamespace === null || - (localDefaultNamespace !== null && localDefaultNamespace !== ns)) { - /** - * _Note:_ At this point, the namespace for this node still needs to be - * serialized, but there's no prefix (or candidate prefix) available; the - * following uses the default namespace declaration to define the - * namespace--optionally replacing an existing default declaration - * if present. - * - * 12.6.1. Set the ignore namespace definition attribute flag to true. - * 12.6.2. Append to qualified name the value of node's localName. - * 12.6.3. Let the value of inherited ns be ns. - * - * _Note:_ The new default namespace will be used in the serialization - * to define this node's namespace and act as the context namespace for - * its children. - */ - ignoreNamespaceDefinitionAttribute = true; - qualifiedName += node.localName; - inheritedNS = ns; - /** - * 12.6.4. Append the value of qualified name to markup. - */ - markup += qualifiedName; - /** - * 12.6.5. Append the following to markup, in the order listed: - * - * _Note:_ The following serializes the new (or replacement) default - * namespace definition. - * - * 12.6.5.1. " " (U+0020 SPACE); - * 12.6.5.2. The string "xmlns"; - * 12.6.5.3. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); - * 12.6.5.4. The result of serializing an attribute value given ns - * and the require well-formed flag as input; - * 12.6.5.5. """ (U+0022 QUOTATION MARK). - */ - markup += " xmlns" + "=\"" + - this._serializeAttributeValue(ns, requireWellFormed) + "\""; - /** - * 12.7. Otherwise, the node has a local default namespace that matches - * ns. Append to qualified name the value of node's localName, let the - * value of inherited ns be ns, and append the value of qualified name - * to markup. - */ - } - else { - qualifiedName += node.localName; - inheritedNS = ns; - markup += qualifiedName; - } - } - /** - * 13. Append to markup the result of the XML serialization of node's - * attributes given map, prefix index, local prefixes map, ignore namespace - * definition attribute flag, and require well-formed flag. - */ - markup += this._serializeAttributesNS(node, map, prefixIndex, localPrefixesMap, ignoreNamespaceDefinitionAttribute, requireWellFormed); - /** - * 14. If ns is the HTML namespace, and the node's list of children is - * empty, and the node's localName matches any one of the following void - * elements: "area", "base", "basefont", "bgsound", "br", "col", "embed", - * "frame", "hr", "img", "input", "keygen", "link", "menuitem", "meta", - * "param", "source", "track", "wbr"; then append the following to markup, - * in the order listed: - * 14.1. " " (U+0020 SPACE); - * 14.2. "/" (U+002F SOLIDUS). - * and set the skip end tag flag to true. - * 15. If ns is not the HTML namespace, and the node's list of children is - * empty, then append "/" (U+002F SOLIDUS) to markup and set the skip end - * tag flag to true. - * 16. Append ">" (U+003E GREATER-THAN SIGN) to markup. - */ - var isHTML = (ns === infra_1.namespace.HTML); - if (isHTML && node.childNodes.length === 0 && - XMLSerializerImpl._VoidElementNames.has(node.localName)) { - markup += " /"; - skipEndTag = true; - } - else if (!isHTML && node.childNodes.length === 0) { - markup += "/"; - skipEndTag = true; - } - markup += ">"; - /** - * 17. If the value of skip end tag is true, then return the value of markup - * and skip the remaining steps. The node is a leaf-node. - */ - if (skipEndTag) - return markup; - /** - * 18. If ns is the HTML namespace, and the node's localName matches the - * string "template", then this is a template element. Append to markup the - * result of XML serializing a DocumentFragment node given the template - * element's template contents (a DocumentFragment), providing inherited - * ns, map, prefix index, and the require well-formed flag. - * - * _Note:_ This allows template content to round-trip, given the rules for - * parsing XHTML documents. - * - * 19. Otherwise, append to markup the result of running the XML - * serialization algorithm on each of node's children, in tree order, - * providing inherited ns, map, prefix index, and the require well-formed - * flag. - */ - if (isHTML && node.localName === "template") { - // TODO: serialize template contents - } - else { - try { - for (var _b = __values(node._children || node.childNodes), _c = _b.next(); !_c.done; _c = _b.next()) { - var childNode = _c.value; - markup += this._serializeNodeNS(childNode, inheritedNS, map, prefixIndex, requireWellFormed); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } + if (DOMImpl_1.dom.features.steps) { + DOMAlgorithm_1.dom_runAdoptingSteps(inclusiveDescendant, oldDocument); } + inclusiveDescendant = TreeAlgorithm_1.tree_getNextDescendantNode(node, inclusiveDescendant, true, true); } - /** - * 20. Append the following to markup, in the order listed: - * 20.1. "" (U+003E GREATER-THAN SIGN). - */ - markup += ""; - /** - * 21. Return the value of markup. - */ - return markup; - }; + } +} +exports.document_adopt = document_adopt; +//# sourceMappingURL=DocumentAlgorithm.js.map + +/***/ }), + +/***/ 1849: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var infra_1 = __nccwpck_require__(4251); +var util_1 = __nccwpck_require__(5282); +var DOMException_1 = __nccwpck_require__(3166); +var CreateAlgorithm_1 = __nccwpck_require__(7339); +var CustomElementAlgorithm_1 = __nccwpck_require__(5648); +var MutationObserverAlgorithm_1 = __nccwpck_require__(8157); +var DOMAlgorithm_1 = __nccwpck_require__(9628); +var MutationAlgorithm_1 = __nccwpck_require__(5463); +var DocumentAlgorithm_1 = __nccwpck_require__(2793); +/** + * Determines whether the element's attribute list contains the given + * attribute. + * + * @param attribute - an attribute node + * @param element - an element node + */ +function element_has(attribute, element) { /** - * Produces an XML serialization of a document node. - * - * @param node - node to serialize - * @param namespace - context namespace - * @param prefixMap - namespace prefix map - * @param prefixIndex - generated namespace prefix index - * @param requireWellFormed - whether to check conformance + * An element has an attribute A if its attribute list contains A. */ - XMLSerializerImpl.prototype._serializeDocumentNS = function (node, namespace, prefixMap, prefixIndex, requireWellFormed) { - var e_2, _a; - /** - * If the require well-formed flag is set (its value is true), and this node - * has no documentElement (the documentElement attribute's value is null), - * then throw an exception; the serialization of this node would not be a - * well-formed document. - */ - if (requireWellFormed && node.documentElement === null) { - throw new Error("Missing document element (well-formed required)."); - } - /** - * Otherwise, run the following steps: - * 1. Let serialized document be an empty string. - * 2. For each child child of node, in tree order, run the XML - * serialization algorithm on the child passing along the provided - * arguments, and append the result to serialized document. - * - * _Note:_ This will serialize any number of ProcessingInstruction and - * Comment nodes both before and after the Document's documentElement node, - * including at most one DocumentType node. (Text nodes are not allowed as - * children of the Document.) - * - * 3. Return the value of serialized document. - */ - var serializedDocument = ""; - try { - for (var _b = __values(node._children || node.childNodes), _c = _b.next(); !_c.done; _c = _b.next()) { - var childNode = _c.value; - serializedDocument += this._serializeNodeNS(childNode, namespace, prefixMap, prefixIndex, requireWellFormed); - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_2) throw e_2.error; } - } - return serializedDocument; - }; + return element._attributeList._asArray().indexOf(attribute) !== -1; +} +exports.element_has = element_has; +/** + * Changes the value of an attribute node. + * + * @param attribute - an attribute node + * @param element - an element node + * @param value - attribute value + */ +function element_change(attribute, element, value) { /** - * Produces an XML serialization of a comment node. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance + * 1. Queue an attribute mutation record for element with attribute’s + * local name, attribute’s namespace, and attribute’s value. */ - XMLSerializerImpl.prototype._serializeComment = function (node, requireWellFormed) { - /** - * If the require well-formed flag is set (its value is true), and node's - * data contains characters that are not matched by the XML Char production - * or contains "--" (two adjacent U+002D HYPHEN-MINUS characters) or that - * ends with a "-" (U+002D HYPHEN-MINUS) character, then throw an exception; - * the serialization of this node's data would not be well-formed. - */ - if (requireWellFormed && (!algorithm_1.xml_isLegalChar(node.data) || - node.data.indexOf("--") !== -1 || node.data.endsWith("-"))) { - throw new Error("Comment data contains invalid characters (well-formed required)."); - } - /** - * Otherwise, return the concatenation of "". - */ - return ""; - }; + if (DOMImpl_1.dom.features.mutationObservers) { + MutationObserverAlgorithm_1.observer_queueAttributeMutationRecord(element, attribute._localName, attribute._namespace, attribute._value); + } /** - * Produces an XML serialization of a text node. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance - * @param level - current depth of the XML tree + * 2. If element is custom, then enqueue a custom element callback reaction + * with element, callback name "attributeChangedCallback", and an argument + * list containing attribute’s local name, attribute’s value, value, and + * attribute’s namespace. */ - XMLSerializerImpl.prototype._serializeText = function (node, requireWellFormed) { - /** - * 1. If the require well-formed flag is set (its value is true), and - * node's data contains characters that are not matched by the XML Char - * production, then throw an exception; the serialization of this node's - * data would not be well-formed. - */ - if (requireWellFormed && !algorithm_1.xml_isLegalChar(node.data)) { - throw new Error("Text data contains invalid characters (well-formed required)."); + if (DOMImpl_1.dom.features.customElements) { + if (util_1.Guard.isCustomElementNode(element)) { + CustomElementAlgorithm_1.customElement_enqueueACustomElementCallbackReaction(element, "attributeChangedCallback", [attribute._localName, attribute._value, value, attribute._namespace]); } - /** - * 2. Let markup be the value of node's data. - * 3. Replace any occurrences of "&" in markup by "&". - * 4. Replace any occurrences of "<" in markup by "<". - * 5. Replace any occurrences of ">" in markup by ">". - * 6. Return the value of markup. - */ - var result = ""; - for (var i = 0; i < node.data.length; i++) { - var c = node.data[i]; - if (c === "&") - result += "&"; - else if (c === "<") - result += "<"; - else if (c === ">") - result += ">"; - else - result += c; - } - return result; - }; + } /** - * Produces an XML serialization of a document fragment node. - * - * @param node - node to serialize - * @param namespace - context namespace - * @param prefixMap - namespace prefix map - * @param prefixIndex - generated namespace prefix index - * @param requireWellFormed - whether to check conformance + * 3. Run the attribute change steps with element, attribute’s local name, + * attribute’s value, value, and attribute’s namespace. + * 4. Set attribute’s value to value. */ - XMLSerializerImpl.prototype._serializeDocumentFragmentNS = function (node, namespace, prefixMap, prefixIndex, requireWellFormed) { - var e_3, _a; - /** - * 1. Let markup the empty string. - * 2. For each child child of node, in tree order, run the XML serialization - * algorithm on the child given namespace, prefix map, a reference to prefix - * index, and flag require well-formed. Concatenate the result to markup. - * 3. Return the value of markup. - */ - var markup = ""; - try { - for (var _b = __values(node._children || node.childNodes), _c = _b.next(); !_c.done; _c = _b.next()) { - var childNode = _c.value; - markup += this._serializeNodeNS(childNode, namespace, prefixMap, prefixIndex, requireWellFormed); - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_3) throw e_3.error; } + if (DOMImpl_1.dom.features.steps) { + DOMAlgorithm_1.dom_runAttributeChangeSteps(element, attribute._localName, attribute._value, value, attribute._namespace); + } + attribute._value = value; +} +exports.element_change = element_change; +/** + * Appends an attribute to an element node. + * + * @param attribute - an attribute + * @param element - an element to receive the attribute + */ +function element_append(attribute, element) { + /** + * 1. Queue an attribute mutation record for element with attribute’s + * local name, attribute’s namespace, and null. + */ + if (DOMImpl_1.dom.features.mutationObservers) { + MutationObserverAlgorithm_1.observer_queueAttributeMutationRecord(element, attribute._localName, attribute._namespace, null); + } + /** + * 2. If element is custom, then enqueue a custom element callback reaction + * with element, callback name "attributeChangedCallback", and an argument + * list containing attribute’s local name, null, attribute’s value, and + * attribute’s namespace. + */ + if (DOMImpl_1.dom.features.customElements) { + if (util_1.Guard.isCustomElementNode(element)) { + CustomElementAlgorithm_1.customElement_enqueueACustomElementCallbackReaction(element, "attributeChangedCallback", [attribute._localName, null, attribute._value, attribute._namespace]); } - return markup; - }; + } /** - * Produces an XML serialization of a document type node. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance + * 3. Run the attribute change steps with element, attribute’s local name, + * null, attribute’s value, and attribute’s namespace. */ - XMLSerializerImpl.prototype._serializeDocumentType = function (node, requireWellFormed) { - /** - * 1. If the require well-formed flag is true and the node's publicId - * attribute contains characters that are not matched by the XML PubidChar - * production, then throw an exception; the serialization of this node - * would not be a well-formed document type declaration. - */ - if (requireWellFormed && !algorithm_1.xml_isPubidChar(node.publicId)) { - throw new Error("DocType public identifier does not match PubidChar construct (well-formed required)."); + if (DOMImpl_1.dom.features.steps) { + DOMAlgorithm_1.dom_runAttributeChangeSteps(element, attribute._localName, null, attribute._value, attribute._namespace); + } + /** + * 4. Append attribute to element’s attribute list. + * 5. Set attribute’s element to element. + */ + element._attributeList._asArray().push(attribute); + attribute._element = element; + // mark that the document has namespaces + if (!element._nodeDocument._hasNamespaces && (attribute._namespace !== null || + attribute._namespacePrefix !== null || attribute._localName === "xmlns")) { + element._nodeDocument._hasNamespaces = true; + } +} +exports.element_append = element_append; +/** + * Removes an attribute from an element node. + * + * @param attribute - an attribute + * @param element - an element to receive the attribute + */ +function element_remove(attribute, element) { + /** + * 1. Queue an attribute mutation record for element with attribute’s + * local name, attribute’s namespace, and attribute’s value. + */ + if (DOMImpl_1.dom.features.mutationObservers) { + MutationObserverAlgorithm_1.observer_queueAttributeMutationRecord(element, attribute._localName, attribute._namespace, attribute._value); + } + /** + * 2. If element is custom, then enqueue a custom element callback reaction + * with element, callback name "attributeChangedCallback", and an argument + * list containing attribute’s local name, attribute’s value, null, + * and attribute’s namespace. + */ + if (DOMImpl_1.dom.features.customElements) { + if (util_1.Guard.isCustomElementNode(element)) { + CustomElementAlgorithm_1.customElement_enqueueACustomElementCallbackReaction(element, "attributeChangedCallback", [attribute._localName, attribute._value, null, attribute._namespace]); } - /** - * 2. If the require well-formed flag is true and the node's systemId - * attribute contains characters that are not matched by the XML Char - * production or that contains both a """ (U+0022 QUOTATION MARK) and a - * "'" (U+0027 APOSTROPHE), then throw an exception; the serialization - * of this node would not be a well-formed document type declaration. - */ - if (requireWellFormed && - (!algorithm_1.xml_isLegalChar(node.systemId) || - (node.systemId.indexOf('"') !== -1 && node.systemId.indexOf("'") !== -1))) { - throw new Error("DocType system identifier contains invalid characters (well-formed required)."); + } + /** + * 3. Run the attribute change steps with element, attribute’s local name, + * attribute’s value, null, and attribute’s namespace. + */ + if (DOMImpl_1.dom.features.steps) { + DOMAlgorithm_1.dom_runAttributeChangeSteps(element, attribute._localName, attribute._value, null, attribute._namespace); + } + /** + * 3. Remove attribute from element’s attribute list. + * 5. Set attribute’s element to null. + */ + var index = element._attributeList._asArray().indexOf(attribute); + element._attributeList._asArray().splice(index, 1); + attribute._element = null; +} +exports.element_remove = element_remove; +/** + * Replaces an attribute with another of an element node. + * + * @param oldAttr - old attribute + * @param newAttr - new attribute + * @param element - an element to receive the attribute + */ +function element_replace(oldAttr, newAttr, element) { + /** + * 1. Queue an attribute mutation record for element with oldAttr’s + * local name, oldAttr’s namespace, and oldAttr’s value. + */ + if (DOMImpl_1.dom.features.mutationObservers) { + MutationObserverAlgorithm_1.observer_queueAttributeMutationRecord(element, oldAttr._localName, oldAttr._namespace, oldAttr._value); + } + /** + * 2. If element is custom, then enqueue a custom element callback reaction + * with element, callback name "attributeChangedCallback", and an argument + * list containing oldAttr’s local name, oldAttr’s value, newAttr’s value, + * and oldAttr’s namespace. + */ + if (DOMImpl_1.dom.features.customElements) { + if (util_1.Guard.isCustomElementNode(element)) { + CustomElementAlgorithm_1.customElement_enqueueACustomElementCallbackReaction(element, "attributeChangedCallback", [oldAttr._localName, oldAttr._value, newAttr._value, oldAttr._namespace]); } - /** - * 3. Let markup be an empty string. - * 4. Append the string "" (U+003E GREATER-THAN SIGN) to markup. - * 11. Return the value of markup. - */ - return node.publicId && node.systemId ? - "" - : node.publicId ? - "" - : node.systemId ? - "" - : - ""; - }; + } /** - * Produces an XML serialization of a processing instruction node. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance + * 3. Run the attribute change steps with element, oldAttr’s local name, + * oldAttr’s value, newAttr’s value, and oldAttr’s namespace. */ - XMLSerializerImpl.prototype._serializeProcessingInstruction = function (node, requireWellFormed) { + if (DOMImpl_1.dom.features.steps) { + DOMAlgorithm_1.dom_runAttributeChangeSteps(element, oldAttr._localName, oldAttr._value, newAttr._value, oldAttr._namespace); + } + /** + * 4. Replace oldAttr by newAttr in element’s attribute list. + * 5. Set oldAttr’s element to null. + * 6. Set newAttr’s element to element. + */ + var index = element._attributeList._asArray().indexOf(oldAttr); + if (index !== -1) { + element._attributeList._asArray()[index] = newAttr; + } + oldAttr._element = null; + newAttr._element = element; + // mark that the document has namespaces + if (!element._nodeDocument._hasNamespaces && (newAttr._namespace !== null || + newAttr._namespacePrefix !== null || newAttr._localName === "xmlns")) { + element._nodeDocument._hasNamespaces = true; + } +} +exports.element_replace = element_replace; +/** + * Retrieves an attribute with the given name from an element node. + * + * @param qualifiedName - an attribute name + * @param element - an element to receive the attribute + */ +function element_getAnAttributeByName(qualifiedName, element) { + /** + * 1. If element is in the HTML namespace and its node document is an HTML + * document, then set qualifiedName to qualifiedName in ASCII lowercase. + * 2. Return the first attribute in element’s attribute list whose qualified + * name is qualifiedName, and null otherwise. + */ + if (element._namespace === infra_1.namespace.HTML && element._nodeDocument._type === "html") { + qualifiedName = qualifiedName.toLowerCase(); + } + return element._attributeList._asArray().find(function (attr) { return attr._qualifiedName === qualifiedName; }) || null; +} +exports.element_getAnAttributeByName = element_getAnAttributeByName; +/** + * Retrieves an attribute with the given namespace and local name from an + * element node. + * + * @param namespace - an attribute namespace + * @param localName - an attribute local name + * @param element - an element to receive the attribute + */ +function element_getAnAttributeByNamespaceAndLocalName(namespace, localName, element) { + /** + * 1. If namespace is the empty string, set it to null. + * 2. Return the attribute in element’s attribute list whose namespace is + * namespace and local name is localName, if any, and null otherwise. + */ + var ns = namespace || null; + return element._attributeList._asArray().find(function (attr) { return attr._namespace === ns && attr._localName === localName; }) || null; +} +exports.element_getAnAttributeByNamespaceAndLocalName = element_getAnAttributeByNamespaceAndLocalName; +/** + * Retrieves an attribute's value with the given name namespace and local + * name from an element node. + * + * @param element - an element to receive the attribute + * @param localName - an attribute local name + * @param namespace - an attribute namespace + */ +function element_getAnAttributeValue(element, localName, namespace) { + if (namespace === void 0) { namespace = ''; } + /** + * 1. Let attr be the result of getting an attribute given namespace, + * localName, and element. + * 2. If attr is null, then return the empty string. + * 3. Return attr’s value. + */ + var attr = element_getAnAttributeByNamespaceAndLocalName(namespace, localName, element); + if (attr === null) + return ''; + else + return attr._value; +} +exports.element_getAnAttributeValue = element_getAnAttributeValue; +/** + * Sets an attribute of an element node. + * + * @param attr - an attribute + * @param element - an element to receive the attribute + */ +function element_setAnAttribute(attr, element) { + /** + * 1. If attr’s element is neither null nor element, throw an + * "InUseAttributeError" DOMException. + * 2. Let oldAttr be the result of getting an attribute given attr’s + * namespace, attr’s local name, and element. + * 3. If oldAttr is attr, return attr. + * 4. If oldAttr is non-null, replace it by attr in element. + * 5. Otherwise, append attr to element. + * 6. Return oldAttr. + */ + if (attr._element !== null && attr._element !== element) + throw new DOMException_1.InUseAttributeError("This attribute already exists in the document: " + attr._qualifiedName + " as a child of " + attr._element._qualifiedName + "."); + var oldAttr = element_getAnAttributeByNamespaceAndLocalName(attr._namespace || '', attr._localName, element); + if (oldAttr === attr) + return attr; + if (oldAttr !== null) { + element_replace(oldAttr, attr, element); + } + else { + element_append(attr, element); + } + return oldAttr; +} +exports.element_setAnAttribute = element_setAnAttribute; +/** + * Sets an attribute's value of an element node. + * + * @param element - an element to receive the attribute + * @param localName - an attribute local name + * @param value - an attribute value + * @param prefix - an attribute prefix + * @param namespace - an attribute namespace + */ +function element_setAnAttributeValue(element, localName, value, prefix, namespace) { + if (prefix === void 0) { prefix = null; } + if (namespace === void 0) { namespace = null; } + /** + * 1. If prefix is not given, set it to null. + * 2. If namespace is not given, set it to null. + * 3. Let attribute be the result of getting an attribute given namespace, + * localName, and element. + * 4. If attribute is null, create an attribute whose namespace is + * namespace, namespace prefix is prefix, local name is localName, value + * is value, and node document is element’s node document, then append this + * attribute to element, and then return. + * 5. Change attribute from element to value. + */ + var attribute = element_getAnAttributeByNamespaceAndLocalName(namespace || '', localName, element); + if (attribute === null) { + var newAttr = CreateAlgorithm_1.create_attr(element._nodeDocument, localName); + newAttr._namespace = namespace; + newAttr._namespacePrefix = prefix; + newAttr._value = value; + element_append(newAttr, element); + return; + } + element_change(attribute, element, value); +} +exports.element_setAnAttributeValue = element_setAnAttributeValue; +/** + * Removes an attribute with the given name from an element node. + * + * @param qualifiedName - an attribute name + * @param element - an element to receive the attribute + */ +function element_removeAnAttributeByName(qualifiedName, element) { + /** + * 1. Let attr be the result of getting an attribute given qualifiedName + * and element. + * 2. If attr is non-null, remove it from element. + * 3. Return attr. + */ + var attr = element_getAnAttributeByName(qualifiedName, element); + if (attr !== null) { + element_remove(attr, element); + } + return attr; +} +exports.element_removeAnAttributeByName = element_removeAnAttributeByName; +/** + * Removes an attribute with the given namespace and local name from an + * element node. + * + * @param namespace - an attribute namespace + * @param localName - an attribute local name + * @param element - an element to receive the attribute + */ +function element_removeAnAttributeByNamespaceAndLocalName(namespace, localName, element) { + /** + * 1. Let attr be the result of getting an attribute given namespace, localName, and element. + * 2. If attr is non-null, remove it from element. + * 3. Return attr. + */ + var attr = element_getAnAttributeByNamespaceAndLocalName(namespace, localName, element); + if (attr !== null) { + element_remove(attr, element); + } + return attr; +} +exports.element_removeAnAttributeByNamespaceAndLocalName = element_removeAnAttributeByNamespaceAndLocalName; +/** + * Creates an element node. + * See: https://dom.spec.whatwg.org/#concept-create-element. + * + * @param document - the document owning the element + * @param localName - local name + * @param namespace - element namespace + * @param prefix - namespace prefix + * @param is - the "is" value + * @param synchronousCustomElementsFlag - synchronous custom elements flag + */ +function element_createAnElement(document, localName, namespace, prefix, is, synchronousCustomElementsFlag) { + if (prefix === void 0) { prefix = null; } + if (is === void 0) { is = null; } + if (synchronousCustomElementsFlag === void 0) { synchronousCustomElementsFlag = false; } + /** + * 1. If prefix was not given, let prefix be null. + * 2. If is was not given, let is be null. + * 3. Let result be null. + */ + var result = null; + if (!DOMImpl_1.dom.features.customElements) { + result = CreateAlgorithm_1.create_element(document, localName, namespace, prefix); + result._customElementState = "uncustomized"; + result._customElementDefinition = null; + result._is = is; + return result; + } + /** + * 4. Let definition be the result of looking up a custom element definition + * given document, namespace, localName, and is. + */ + var definition = CustomElementAlgorithm_1.customElement_lookUpACustomElementDefinition(document, namespace, localName, is); + if (definition !== null && definition.name !== definition.localName) { /** - * 1. If the require well-formed flag is set (its value is true), and node's - * target contains a ":" (U+003A COLON) character or is an ASCII - * case-insensitive match for the string "xml", then throw an exception; - * the serialization of this node's target would not be well-formed. - */ - if (requireWellFormed && (node.target.indexOf(":") !== -1 || (/^xml$/i).test(node.target))) { - throw new Error("Processing instruction target contains invalid characters (well-formed required)."); + * 5. If definition is non-null, and definition’s name is not equal to + * its local name (i.e., definition represents a customized built-in + * element), then: + * 5.1. Let interface be the element interface for localName and the HTML + * namespace. + * 5.2. Set result to a new element that implements interface, with no + * attributes, namespace set to the HTML namespace, namespace prefix + * set to prefix, local name set to localName, custom element state set + * to "undefined", custom element definition set to null, is value set + * to is, and node document set to document. + * 5.3. If the synchronous custom elements flag is set, upgrade element + * using definition. + * 5.4. Otherwise, enqueue a custom element upgrade reaction given result + * and definition. + */ + var elemenInterface = DocumentAlgorithm_1.document_elementInterface(localName, infra_1.namespace.HTML); + result = new elemenInterface(); + result._localName = localName; + result._namespace = infra_1.namespace.HTML; + result._namespacePrefix = prefix; + result._customElementState = "undefined"; + result._customElementDefinition = null; + result._is = is; + result._nodeDocument = document; + if (synchronousCustomElementsFlag) { + CustomElementAlgorithm_1.customElement_upgrade(definition, result); } - /** - * 2. If the require well-formed flag is set (its value is true), and node's - * data contains characters that are not matched by the XML Char production - * or contains the string "?>" (U+003F QUESTION MARK, - * U+003E GREATER-THAN SIGN), then throw an exception; the serialization of - * this node's data would not be well-formed. - */ - if (requireWellFormed && (!algorithm_1.xml_isLegalChar(node.data) || - node.data.indexOf("?>") !== -1)) { - throw new Error("Processing instruction data contains invalid characters (well-formed required)."); + else { + CustomElementAlgorithm_1.customElement_enqueueACustomElementUpgradeReaction(result, definition); } + } + else if (definition !== null) { /** - * 3. Let markup be the concatenation of the following, in the order listed: - * 3.1. "" (U+003F QUESTION MARK, U+003E GREATER-THAN SIGN). - * 4. Return the value of markup. + * 6. Otherwise, if definition is non-null, then: */ - return ""; - }; - /** - * Produces an XML serialization of a CDATA node. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance - */ - XMLSerializerImpl.prototype._serializeCData = function (node, requireWellFormed) { - if (requireWellFormed && (node.data.indexOf("]]>") !== -1)) { - throw new Error("CDATA contains invalid characters (well-formed required)."); - } - return ""; - }; - /** - * Produces an XML serialization of the attributes of an element node. - * - * @param node - node to serialize - * @param map - namespace prefix map - * @param prefixIndex - generated namespace prefix index - * @param localPrefixesMap - local prefixes map - * @param ignoreNamespaceDefinitionAttribute - whether to ignore namespace - * attributes - * @param requireWellFormed - whether to check conformance - */ - XMLSerializerImpl.prototype._serializeAttributesNS = function (node, map, prefixIndex, localPrefixesMap, ignoreNamespaceDefinitionAttribute, requireWellFormed) { - var e_4, _a; - /** - * 1. Let result be the empty string. - * 2. Let localname set be a new empty namespace localname set. This - * localname set will contain tuples of unique attribute namespaceURI and - * localName pairs, and is populated as each attr is processed. This set is - * used to [optionally] enforce the well-formed constraint that an element - * cannot have two attributes with the same namespaceURI and localName. - * This can occur when two otherwise identical attributes on the same - * element differ only by their prefix values. - */ - var result = ""; - var localNameSet = requireWellFormed ? new LocalNameSet_1.LocalNameSet() : undefined; - try { + if (synchronousCustomElementsFlag) { /** - * 3. Loop: For each attribute attr in element's attributes, in the order - * they are specified in the element's attribute list: + * 6.1. If the synchronous custom elements flag is set, then run these + * steps while catching any exceptions: */ - for (var _b = __values(node.attributes), _c = _b.next(); !_c.done; _c = _b.next()) { - var attr = _c.value; - // Optimize common case - if (!ignoreNamespaceDefinitionAttribute && !requireWellFormed && attr.namespaceURI === null) { - result += " " + attr.localName + "=\"" + - this._serializeAttributeValue(attr.value, requireWellFormed) + "\""; - continue; - } - /** - * 3.1. If the require well-formed flag is set (its value is true), and the - * localname set contains a tuple whose values match those of a new tuple - * consisting of attr's namespaceURI attribute and localName attribute, - * then throw an exception; the serialization of this attr would fail to - * produce a well-formed element serialization. - */ - if (requireWellFormed && localNameSet && localNameSet.has(attr.namespaceURI, attr.localName)) { - throw new Error("Element contains duplicate attributes (well-formed required)."); - } + try { /** - * 3.2. Create a new tuple consisting of attr's namespaceURI attribute and - * localName attribute, and add it to the localname set. - * 3.3. Let attribute namespace be the value of attr's namespaceURI value. - * 3.4. Let candidate prefix be null. + * 6.1.1. Let C be definition’s constructor. + * 6.1.2. Set result to the result of constructing C, with no arguments. + * 6.1.3. Assert: result’s custom element state and custom element definition + * are initialized. + * 6.1.4. Assert: result’s namespace is the HTML namespace. + * _Note:_ IDL enforces that result is an HTMLElement object, which all + * use the HTML namespace. */ - if (requireWellFormed && localNameSet) - localNameSet.set(attr.namespaceURI, attr.localName); - var attributeNamespace = attr.namespaceURI; - var candidatePrefix = null; - /** 3.5. If attribute namespace is not null, then run these sub-steps: */ - if (attributeNamespace !== null) { - /** - * 3.5.1. Let candidate prefix be the result of retrieving a preferred - * prefix string from map given namespace attribute namespace with - * preferred prefix being attr's prefix value. - */ - candidatePrefix = map.get(attr.prefix, attributeNamespace); - /** - * 3.5.2. If the value of attribute namespace is the XMLNS namespace, - * then run these steps: - */ - if (attributeNamespace === infra_1.namespace.XMLNS) { - /** - * 3.5.2.1. If any of the following are true, then stop running these - * steps and goto Loop to visit the next attribute: - * - the attr's value is the XML namespace; - * _Note:_ The XML namespace cannot be redeclared and survive - * round-tripping (unless it defines the prefix "xml"). To avoid this - * problem, this algorithm always prefixes elements in the XML - * namespace with "xml" and drops any related definitions as seen - * in the above condition. - * - the attr's prefix is null and the ignore namespace definition - * attribute flag is true (the Element's default namespace attribute - * should be skipped); - * - the attr's prefix is not null and either - * * the attr's localName is not a key contained in the local - * prefixes map, or - * * the attr's localName is present in the local prefixes map but - * the value of the key does not match attr's value - * and furthermore that the attr's localName (as the prefix to find) - * is found in the namespace prefix map given the namespace consisting - * of the attr's value (the current namespace prefix definition was - * exactly defined previously--on an ancestor element not the current - * element whose attributes are being processed). - */ - if (attr.value === infra_1.namespace.XML || - (attr.prefix === null && ignoreNamespaceDefinitionAttribute) || - (attr.prefix !== null && (!(attr.localName in localPrefixesMap) || - localPrefixesMap[attr.localName] !== attr.value) && - map.has(attr.localName, attr.value))) - continue; - /** - * 3.5.2.2. If the require well-formed flag is set (its value is true), - * and the value of attr's value attribute matches the XMLNS - * namespace, then throw an exception; the serialization of this - * attribute would produce invalid XML because the XMLNS namespace - * is reserved and cannot be applied as an element's namespace via - * XML parsing. - * - * _Note:_ DOM APIs do allow creation of elements in the XMLNS - * namespace but with strict qualifications. - */ - if (requireWellFormed && attr.value === infra_1.namespace.XMLNS) { - throw new Error("XMLNS namespace is reserved (well-formed required)."); - } - /** - * 3.5.2.3. If the require well-formed flag is set (its value is true), - * and the value of attr's value attribute is the empty string, then - * throw an exception; namespace prefix declarations cannot be used - * to undeclare a namespace (use a default namespace declaration - * instead). - */ - if (requireWellFormed && attr.value === '') { - throw new Error("Namespace prefix declarations cannot be used to undeclare a namespace (well-formed required)."); - } - /** - * 3.5.2.4. the attr's prefix matches the string "xmlns", then let - * candidate prefix be the string "xmlns". - */ - if (attr.prefix === 'xmlns') - candidatePrefix = 'xmlns'; - /** - * 3.5.3. Otherwise, the attribute namespace is not the XMLNS namespace. - * Run these steps: - * - * _Note:_ The (candidatePrefix === null) check is not in the spec. - * We deviate from the spec here. Otherwise a prefix is generated for - * all attributes with namespaces. - */ - } - else if (candidatePrefix === null) { - if (attr.prefix !== null && - (!map.hasPrefix(attr.prefix) || - map.has(attr.prefix, attributeNamespace))) { - /** - * Check if we can use the attribute's own prefix. - * We deviate from the spec here. - * TODO: This is not an efficient way of searching for prefixes. - * Follow developments to the spec. - */ - candidatePrefix = attr.prefix; - } - else { - /** - * 3.5.3.1. Let candidate prefix be the result of generating a prefix - * providing map, attribute namespace, and prefix index as input. - */ - candidatePrefix = this._generatePrefix(attributeNamespace, map, prefixIndex); - } - /** - * 3.5.3.2. Append the following to result, in the order listed: - * 3.5.3.2.1. " " (U+0020 SPACE); - * 3.5.3.2.2. The string "xmlns:"; - * 3.5.3.2.3. The value of candidate prefix; - * 3.5.3.2.4. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); - * 3.5.3.2.5. The result of serializing an attribute value given - * attribute namespace and the require well-formed flag as input; - * 3.5.3.2.6. """ (U+0022 QUOTATION MARK). - */ - result += " xmlns:" + candidatePrefix + "=\"" + - this._serializeAttributeValue(attributeNamespace, requireWellFormed) + "\""; - } - } + var C = definition.constructor; + var result_1 = new C(); + console.assert(result_1._customElementState !== undefined); + console.assert(result_1._customElementDefinition !== undefined); + console.assert(result_1._namespace === infra_1.namespace.HTML); /** - * 3.6. Append a " " (U+0020 SPACE) to result. - * 3.7. If candidate prefix is not null, then append to result the - * concatenation of candidate prefix with ":" (U+003A COLON). + * 6.1.5. If result’s attribute list is not empty, then throw a + * "NotSupportedError" DOMException. + * 6.1.6. If result has children, then throw a "NotSupportedError" + * DOMException. + * 6.1.7. If result’s parent is not null, then throw a + * "NotSupportedError" DOMException. + * 6.1.8. If result’s node document is not document, then throw a + * "NotSupportedError" DOMException. + * 6.1.9. If result’s local name is not equal to localName, then throw + * a "NotSupportedError" DOMException. */ - result += " "; - if (candidatePrefix !== null) { - result += candidatePrefix + ':'; - } + if (result_1._attributeList.length !== 0) + throw new DOMException_1.NotSupportedError("Custom element already has attributes."); + if (result_1._children.size !== 0) + throw new DOMException_1.NotSupportedError("Custom element already has child nodes."); + if (result_1._parent !== null) + throw new DOMException_1.NotSupportedError("Custom element already has a parent node."); + if (result_1._nodeDocument !== document) + throw new DOMException_1.NotSupportedError("Custom element is already in a document."); + if (result_1._localName !== localName) + throw new DOMException_1.NotSupportedError("Custom element has a different local name."); /** - * 3.8. If the require well-formed flag is set (its value is true), and - * this attr's localName attribute contains the character - * ":" (U+003A COLON) or does not match the XML Name production or - * equals "xmlns" and attribute namespace is null, then throw an - * exception; the serialization of this attr would not be a - * well-formed attribute. + * 6.1.10. Set result’s namespace prefix to prefix. + * 6.1.11. Set result’s is value to null. */ - if (requireWellFormed && (attr.localName.indexOf(":") !== -1 || - !algorithm_1.xml_isName(attr.localName) || - (attr.localName === "xmlns" && attributeNamespace === null))) { - throw new Error("Attribute local name contains invalid characters (well-formed required)."); - } + result_1._namespacePrefix = prefix; + result_1._is = null; + } + catch (e) { /** - * 3.9. Append the following strings to result, in the order listed: - * 3.9.1. The value of attr's localName; - * 3.9.2. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); - * 3.9.3. The result of serializing an attribute value given attr's value - * attribute and the require well-formed flag as input; - * 3.9.4. """ (U+0022 QUOTATION MARK). + * If any of these steps threw an exception, then: + * - Report the exception. + * - Set result to a new element that implements the HTMLUnknownElement + * interface, with no attributes, namespace set to the HTML namespace, + * namespace prefix set to prefix, local name set to localName, custom + * element state set to "failed", custom element definition set to null, + * is value set to null, and node document set to document. */ - result += attr.localName + "=\"" + - this._serializeAttributeValue(attr.value, requireWellFormed) + "\""; - } - } - catch (e_4_1) { e_4 = { error: e_4_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + // TODO: Report the exception + result = CreateAlgorithm_1.create_htmlUnknownElement(document, localName, infra_1.namespace.HTML, prefix); + result._customElementState = "failed"; + result._customElementDefinition = null; + result._is = null; } - finally { if (e_4) throw e_4.error; } } - /** - * 4. Return the value of result. - */ - return result; - }; - /** - * Records namespace information for the given element and returns the - * default namespace attribute value. - * - * @param node - element node to process - * @param map - namespace prefix map - * @param localPrefixesMap - local prefixes map - */ - XMLSerializerImpl.prototype._recordNamespaceInformation = function (node, map, localPrefixesMap) { - var e_5, _a; - /** - * 1. Let default namespace attr value be null. - */ - var defaultNamespaceAttrValue = null; - try { + else { /** - * 2. Main: For each attribute attr in element's attributes, in the order - * they are specified in the element's attribute list: + * 6.2. Otherwise: + * 6.2.1. Set result to a new element that implements the HTMLElement + * interface, with no attributes, namespace set to the HTML namespace, + * namespace prefix set to prefix, local name set to localName, custom + * element state set to "undefined", custom element definition set to + * null, is value set to null, and node document set to document. + * 6.2.2. Enqueue a custom element upgrade reaction given result and + * definition. */ - for (var _b = __values(node.attributes), _c = _b.next(); !_c.done; _c = _b.next()) { - var attr = _c.value; - /** - * _Note:_ The following conditional steps find namespace prefixes. Only - * attributes in the XMLNS namespace are considered (e.g., attributes made - * to look like namespace declarations via - * setAttribute("xmlns:pretend-prefix", "pretend-namespace") are not - * included). - */ - /** 2.1. Let attribute namespace be the value of attr's namespaceURI value. */ - var attributeNamespace = attr.namespaceURI; - /** 2.2. Let attribute prefix be the value of attr's prefix. */ - var attributePrefix = attr.prefix; - /** 2.3. If the attribute namespace is the XMLNS namespace, then: */ - if (attributeNamespace === infra_1.namespace.XMLNS) { - /** - * 2.3.1. If attribute prefix is null, then attr is a default namespace - * declaration. Set the default namespace attr value to attr's value and - * stop running these steps, returning to Main to visit the next - * attribute. - */ - if (attributePrefix === null) { - defaultNamespaceAttrValue = attr.value; - continue; - /** - * 2.3.2. Otherwise, the attribute prefix is not null and attr is a - * namespace prefix definition. Run the following steps: - */ - } - else { - /** 2.3.2.1. Let prefix definition be the value of attr's localName. */ - var prefixDefinition = attr.localName; - /** 2.3.2.2. Let namespace definition be the value of attr's value. */ - var namespaceDefinition = attr.value; - /** - * 2.3.2.3. If namespace definition is the XML namespace, then stop - * running these steps, and return to Main to visit the next - * attribute. - * - * _Note:_ XML namespace definitions in prefixes are completely - * ignored (in order to avoid unnecessary work when there might be - * prefix conflicts). XML namespaced elements are always handled - * uniformly by prefixing (and overriding if necessary) the element's - * localname with the reserved "xml" prefix. - */ - if (namespaceDefinition === infra_1.namespace.XML) { - continue; - } - /** - * 2.3.2.4. If namespace definition is the empty string (the - * declarative form of having no namespace), then let namespace - * definition be null instead. - */ - if (namespaceDefinition === '') { - namespaceDefinition = null; - } - /** - * 2.3.2.5. If prefix definition is found in map given the namespace - * namespace definition, then stop running these steps, and return to - * Main to visit the next attribute. - * - * _Note:_ This step avoids adding duplicate prefix definitions for - * the same namespace in the map. This has the side-effect of avoiding - * later serialization of duplicate namespace prefix declarations in - * any descendant nodes. - */ - if (map.has(prefixDefinition, namespaceDefinition)) { - continue; - } - /** - * 2.3.2.6. Add the prefix prefix definition to map given namespace - * namespace definition. - */ - map.set(prefixDefinition, namespaceDefinition); - /** - * 2.3.2.7. Add the value of prefix definition as a new key to the - * local prefixes map, with the namespace definition as the key's - * value replacing the value of null with the empty string if - * applicable. - */ - localPrefixesMap[prefixDefinition] = namespaceDefinition || ''; - } - } - } - } - catch (e_5_1) { e_5 = { error: e_5_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_5) throw e_5.error; } - } - /** - * 3. Return the value of default namespace attr value. - * - * _Note:_ The empty string is a legitimate return value and is not - * converted to null. - */ - return defaultNamespaceAttrValue; - }; - /** - * Generates a new prefix for the given namespace. - * - * @param newNamespace - a namespace to generate prefix for - * @param prefixMap - namespace prefix map - * @param prefixIndex - generated namespace prefix index - */ - XMLSerializerImpl.prototype._generatePrefix = function (newNamespace, prefixMap, prefixIndex) { - /** - * 1. Let generated prefix be the concatenation of the string "ns" and the - * current numerical value of prefix index. - * 2. Let the value of prefix index be incremented by one. - * 3. Add to map the generated prefix given the new namespace namespace. - * 4. Return the value of generated prefix. - */ - var generatedPrefix = "ns" + prefixIndex.value; - prefixIndex.value++; - prefixMap.set(generatedPrefix, newNamespace); - return generatedPrefix; - }; - /** - * Produces an XML serialization of an attribute value. - * - * @param value - attribute value - * @param requireWellFormed - whether to check conformance - */ - XMLSerializerImpl.prototype._serializeAttributeValue = function (value, requireWellFormed) { - /** - * From: https://w3c.github.io/DOM-Parsing/#dfn-serializing-an-attribute-value - * - * 1. If the require well-formed flag is set (its value is true), and - * attribute value contains characters that are not matched by the XML Char - * production, then throw an exception; the serialization of this attribute - * value would fail to produce a well-formed element serialization. - */ - if (requireWellFormed && value !== null && !algorithm_1.xml_isLegalChar(value)) { - throw new Error("Invalid characters in attribute value."); + result = CreateAlgorithm_1.create_htmlElement(document, localName, infra_1.namespace.HTML, prefix); + result._customElementState = "undefined"; + result._customElementDefinition = null; + result._is = null; + CustomElementAlgorithm_1.customElement_enqueueACustomElementUpgradeReaction(result, definition); } + } + else { /** - * 2. If attribute value is null, then return the empty string. + * 7. Otherwise: + * 7.1. Let interface be the element interface for localName and + * namespace. + * 7.2. Set result to a new element that implements interface, with no + * attributes, namespace set to namespace, namespace prefix set to prefix, + * local name set to localName, custom element state set to + * "uncustomized", custom element definition set to null, is value set to + * is, and node document set to document. */ - if (value === null) - return ""; + var elementInterface = DocumentAlgorithm_1.document_elementInterface(localName, namespace); + result = new elementInterface(); + result._localName = localName; + result._namespace = namespace; + result._namespacePrefix = prefix; + result._customElementState = "uncustomized"; + result._customElementDefinition = null; + result._is = is; + result._nodeDocument = document; /** - * 3. Otherwise, attribute value is a string. Return the value of attribute - * value, first replacing any occurrences of the following: - * - "&" with "&" - * - """ with """ - * - "<" with "<" - * - ">" with ">" - * NOTE - * This matches behavior present in browsers, and goes above and beyond the - * grammar requirement in the XML specification's AttValue production by - * also replacing ">" characters. + * 7.3. If namespace is the HTML namespace, and either localName is a + * valid custom element name or is is non-null, then set result’s + * custom element state to "undefined". */ - var result = ""; - for (var i = 0; i < value.length; i++) { - var c = value[i]; - if (c === "\"") - result += """; - else if (c === "&") - result += "&"; - else if (c === "<") - result += "<"; - else if (c === ">") - result += ">"; - else - result += c; + if (namespace === infra_1.namespace.HTML && (is !== null || + CustomElementAlgorithm_1.customElement_isValidCustomElementName(localName))) { + result._customElementState = "undefined"; } - return result; - }; + } + /* istanbul ignore next */ + if (result === null) { + throw new Error("Unable to create element."); + } /** - * Produces an XML serialization of an element node. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance + * 8. Returns result */ - XMLSerializerImpl.prototype._serializeElement = function (node, requireWellFormed) { - var e_6, _a; - /** - * From: https://w3c.github.io/DOM-Parsing/#xml-serializing-an-element-node - * - * 1. If the require well-formed flag is set (its value is true), and this - * node's localName attribute contains the character ":" (U+003A COLON) or - * does not match the XML Name production, then throw an exception; the - * serialization of this node would not be a well-formed element. - */ - if (requireWellFormed && (node.localName.indexOf(":") !== -1 || - !algorithm_1.xml_isName(node.localName))) { - throw new Error("Node local name contains invalid characters (well-formed required)."); - } - /** - * 2. Let markup be the string "<" (U+003C LESS-THAN SIGN). - * 3. Let qualified name be an empty string. - * 4. Let skip end tag be a boolean flag with value false. - * 5. Let ignore namespace definition attribute be a boolean flag with value - * false. - * 6. Given prefix map, copy a namespace prefix map and let map be the - * result. - * 7. Let local prefixes map be an empty map. The map has unique Node prefix - * strings as its keys, with corresponding namespaceURI Node values as the - * map's key values (in this map, the null namespace is represented by the - * empty string). - * - * _Note:_ This map is local to each element. It is used to ensure there - * are no conflicting prefixes should a new namespace prefix attribute need - * to be generated. It is also used to enable skipping of duplicate prefix - * definitions when writing an element's attributes: the map allows the - * algorithm to distinguish between a prefix in the namespace prefix map - * that might be locally-defined (to the current Element) and one that is - * not. - * 8. Let local default namespace be the result of recording the namespace - * information for node given map and local prefixes map. - * - * _Note:_ The above step will update map with any found namespace prefix - * definitions, add the found prefix definitions to the local prefixes map - * and return a local default namespace value defined by a default namespace - * attribute if one exists. Otherwise it returns null. - * 9. Let inherited ns be a copy of namespace. - * 10. Let ns be the value of node's namespaceURI attribute. - */ - var skipEndTag = false; - /** 11. If inherited ns is equal to ns, then: */ - /** - * 11.1. If local default namespace is not null, then set ignore - * namespace definition attribute to true. - * 11.2. If ns is the XML namespace, then append to qualified name the - * concatenation of the string "xml:" and the value of node's localName. - * 11.3. Otherwise, append to qualified name the value of node's - * localName. The node's prefix if it exists, is dropped. - */ - var qualifiedName = node.localName; - /** 11.4. Append the value of qualified name to markup. */ - var markup = "<" + qualifiedName; - /** - * 13. Append to markup the result of the XML serialization of node's - * attributes given map, prefix index, local prefixes map, ignore namespace - * definition attribute flag, and require well-formed flag. - */ - markup += this._serializeAttributes(node, requireWellFormed); - /** - * 14. If ns is the HTML namespace, and the node's list of children is - * empty, and the node's localName matches any one of the following void - * elements: "area", "base", "basefont", "bgsound", "br", "col", "embed", - * "frame", "hr", "img", "input", "keygen", "link", "menuitem", "meta", - * "param", "source", "track", "wbr"; then append the following to markup, - * in the order listed: - * 14.1. " " (U+0020 SPACE); - * 14.2. "/" (U+002F SOLIDUS). - * and set the skip end tag flag to true. - * 15. If ns is not the HTML namespace, and the node's list of children is - * empty, then append "/" (U+002F SOLIDUS) to markup and set the skip end - * tag flag to true. - * 16. Append ">" (U+003E GREATER-THAN SIGN) to markup. - */ - if (node._children.size === 0) { - markup += "/"; - skipEndTag = true; - } - markup += ">"; - /** - * 17. If the value of skip end tag is true, then return the value of markup - * and skip the remaining steps. The node is a leaf-node. - */ - if (skipEndTag) - return markup; - try { - /** - * 18. If ns is the HTML namespace, and the node's localName matches the - * string "template", then this is a template element. Append to markup the - * result of XML serializing a DocumentFragment node given the template - * element's template contents (a DocumentFragment), providing inherited - * ns, map, prefix index, and the require well-formed flag. - * - * _Note:_ This allows template content to round-trip, given the rules for - * parsing XHTML documents. - * - * 19. Otherwise, append to markup the result of running the XML - * serialization algorithm on each of node's children, in tree order, - * providing inherited ns, map, prefix index, and the require well-formed - * flag. - */ - for (var _b = __values(node._children), _c = _b.next(); !_c.done; _c = _b.next()) { - var childNode = _c.value; - markup += this._serializeNode(childNode, requireWellFormed); - } - } - catch (e_6_1) { e_6 = { error: e_6_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_6) throw e_6.error; } - } - /** - * 20. Append the following to markup, in the order listed: - * 20.1. "" (U+003E GREATER-THAN SIGN). - */ - markup += ""; - /** - * 21. Return the value of markup. - */ - return markup; - }; - /** - * Produces an XML serialization of a document node. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance - */ - XMLSerializerImpl.prototype._serializeDocument = function (node, requireWellFormed) { - var e_7, _a; - /** - * If the require well-formed flag is set (its value is true), and this node - * has no documentElement (the documentElement attribute's value is null), - * then throw an exception; the serialization of this node would not be a - * well-formed document. - */ - if (requireWellFormed && node.documentElement === null) { - throw new Error("Missing document element (well-formed required)."); - } - /** - * Otherwise, run the following steps: - * 1. Let serialized document be an empty string. - * 2. For each child child of node, in tree order, run the XML - * serialization algorithm on the child passing along the provided - * arguments, and append the result to serialized document. - * - * _Note:_ This will serialize any number of ProcessingInstruction and - * Comment nodes both before and after the Document's documentElement node, - * including at most one DocumentType node. (Text nodes are not allowed as - * children of the Document.) - * - * 3. Return the value of serialized document. - */ - var serializedDocument = ""; - try { - for (var _b = __values(node._children), _c = _b.next(); !_c.done; _c = _b.next()) { - var childNode = _c.value; - serializedDocument += this._serializeNode(childNode, requireWellFormed); - } - } - catch (e_7_1) { e_7 = { error: e_7_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_7) throw e_7.error; } - } - return serializedDocument; - }; - /** - * Produces an XML serialization of a document fragment node. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance - */ - XMLSerializerImpl.prototype._serializeDocumentFragment = function (node, requireWellFormed) { - var e_8, _a; - /** - * 1. Let markup the empty string. - * 2. For each child child of node, in tree order, run the XML serialization - * algorithm on the child given namespace, prefix map, a reference to prefix - * index, and flag require well-formed. Concatenate the result to markup. - * 3. Return the value of markup. - */ - var markup = ""; - try { - for (var _b = __values(node._children), _c = _b.next(); !_c.done; _c = _b.next()) { - var childNode = _c.value; - markup += this._serializeNode(childNode, requireWellFormed); - } - } - catch (e_8_1) { e_8 = { error: e_8_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_8) throw e_8.error; } - } - return markup; - }; + return result; +} +exports.element_createAnElement = element_createAnElement; +/** + * Inserts a new node adjacent to this element. + * + * @param element - a reference element + * @param where - a string defining where to insert the element node. + * - `beforebegin` before this element itself. + * - `afterbegin` before the first child. + * - `beforeend` after the last child. + * - `afterend` after this element itself. + * @param node - node to insert + */ +function element_insertAdjacent(element, where, node) { /** - * Produces an XML serialization of the attributes of an element node. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance + * - "beforebegin" + * If element’s parent is null, return null. + * Return the result of pre-inserting node into element’s parent before + * element. + * - "afterbegin" + * Return the result of pre-inserting node into element before element’s + * first child. + * - "beforeend" + * Return the result of pre-inserting node into element before null. + * - "afterend" + * If element’s parent is null, return null. + * Return the result of pre-inserting node into element’s parent before element’s next sibling. + * - Otherwise + * Throw a "SyntaxError" DOMException. */ - XMLSerializerImpl.prototype._serializeAttributes = function (node, requireWellFormed) { - var e_9, _a; - /** - * 1. Let result be the empty string. - * 2. Let localname set be a new empty namespace localname set. This - * localname set will contain tuples of unique attribute namespaceURI and - * localName pairs, and is populated as each attr is processed. This set is - * used to [optionally] enforce the well-formed constraint that an element - * cannot have two attributes with the same namespaceURI and localName. - * This can occur when two otherwise identical attributes on the same - * element differ only by their prefix values. - */ - var result = ""; - var localNameSet = requireWellFormed ? {} : undefined; - try { - /** - * 3. Loop: For each attribute attr in element's attributes, in the order - * they are specified in the element's attribute list: - */ - for (var _b = __values(node.attributes), _c = _b.next(); !_c.done; _c = _b.next()) { - var attr = _c.value; - /** - * 3.1. If the require well-formed flag is set (its value is true), and the - * localname set contains a tuple whose values match those of a new tuple - * consisting of attr's namespaceURI attribute and localName attribute, - * then throw an exception; the serialization of this attr would fail to - * produce a well-formed element serialization. - */ - if (requireWellFormed && localNameSet && (attr.localName in localNameSet)) { - throw new Error("Element contains duplicate attributes (well-formed required)."); - } - /** - * 3.2. Create a new tuple consisting of attr's namespaceURI attribute and - * localName attribute, and add it to the localname set. - * 3.3. Let attribute namespace be the value of attr's namespaceURI value. - * 3.4. Let candidate prefix be null. - */ - if (requireWellFormed && localNameSet) - localNameSet[attr.localName] = true; - /** 3.5. If attribute namespace is not null, then run these sub-steps: */ - /** - * 3.6. Append a " " (U+0020 SPACE) to result. - * 3.7. If candidate prefix is not null, then append to result the - * concatenation of candidate prefix with ":" (U+003A COLON). - */ - /** - * 3.8. If the require well-formed flag is set (its value is true), and - * this attr's localName attribute contains the character - * ":" (U+003A COLON) or does not match the XML Name production or - * equals "xmlns" and attribute namespace is null, then throw an - * exception; the serialization of this attr would not be a - * well-formed attribute. - */ - if (requireWellFormed && (attr.localName.indexOf(":") !== -1 || - !algorithm_1.xml_isName(attr.localName))) { - throw new Error("Attribute local name contains invalid characters (well-formed required)."); - } - /** - * 3.9. Append the following strings to result, in the order listed: - * 3.9.1. The value of attr's localName; - * 3.9.2. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); - * 3.9.3. The result of serializing an attribute value given attr's value - * attribute and the require well-formed flag as input; - * 3.9.4. """ (U+0022 QUOTATION MARK). - */ - result += " " + attr.localName + "=\"" + - this._serializeAttributeValue(attr.value, requireWellFormed) + "\""; - } - } - catch (e_9_1) { e_9 = { error: e_9_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_9) throw e_9.error; } - } - /** - * 4. Return the value of result. - */ - return result; - }; - XMLSerializerImpl._VoidElementNames = new Set(['area', 'base', 'basefont', - 'bgsound', 'br', 'col', 'embed', 'frame', 'hr', 'img', 'input', 'keygen', - 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr']); - return XMLSerializerImpl; -}()); -exports.XMLSerializerImpl = XMLSerializerImpl; -//# sourceMappingURL=XMLSerializerImpl.js.map - -/***/ }), -/* 99 */, -/* 100 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - -var Type = __webpack_require__(945); - -var _hasOwnProperty = Object.prototype.hasOwnProperty; - -function resolveYamlSet(data) { - if (data === null) return true; - - var key, object = data; - - for (key in object) { - if (_hasOwnProperty.call(object, key)) { - if (object[key] !== null) return false; + switch (where.toLowerCase()) { + case 'beforebegin': + if (element._parent === null) + return null; + return MutationAlgorithm_1.mutation_preInsert(node, element._parent, element); + case 'afterbegin': + return MutationAlgorithm_1.mutation_preInsert(node, element, element._firstChild); + case 'beforeend': + return MutationAlgorithm_1.mutation_preInsert(node, element, null); + case 'afterend': + if (element._parent === null) + return null; + return MutationAlgorithm_1.mutation_preInsert(node, element._parent, element._nextSibling); + default: + throw new DOMException_1.SyntaxError("Invalid 'where' argument. \"beforebegin\", \"afterbegin\", \"beforeend\" or \"afterend\" expected"); } - } - - return true; -} - -function constructYamlSet(data) { - return data !== null ? data : {}; } - -module.exports = new Type('tag:yaml.org,2002:set', { - kind: 'mapping', - resolve: resolveYamlSet, - construct: constructYamlSet -}); - +exports.element_insertAdjacent = element_insertAdjacent; +//# sourceMappingURL=ElementAlgorithm.js.map /***/ }), -/* 101 */, -/* 102 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -// For internal use, subject to change. -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -// We use any as a valid input type -/* eslint-disable @typescript-eslint/no-explicit-any */ -const fs = __importStar(__webpack_require__(747)); -const os = __importStar(__webpack_require__(87)); -const utils_1 = __webpack_require__(82); -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 -/***/ }), -/* 103 */, -/* 104 */, -/* 105 */, -/* 106 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 8217: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -7573,2146 +6498,2452 @@ var __values = (this && this.__values) || function(o) { }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; -Object.defineProperty(exports, "__esModule", { value: true }); -var util_1 = __webpack_require__(592); -/** - * Flattens the given options argument. - * - * @param options - options argument - */ -function eventTarget_flatten(options) { - /** - * 1. If options is a boolean, then return options. - * 2. Return options’s capture. - */ - if (util_1.isBoolean(options)) { - return options; +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } - else { - return options.capture || false; + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } } -} -exports.eventTarget_flatten = eventTarget_flatten; + return ar; +}; +var __spread = (this && this.__spread) || function () { + for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); + return ar; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var interfaces_1 = __nccwpck_require__(7305); +var util_1 = __nccwpck_require__(5282); +var CustomEventImpl_1 = __nccwpck_require__(9857); +var EventImpl_1 = __nccwpck_require__(8245); +var DOMException_1 = __nccwpck_require__(3166); +var TreeAlgorithm_1 = __nccwpck_require__(6620); +var ShadowTreeAlgorithm_1 = __nccwpck_require__(8733); +var DOMAlgorithm_1 = __nccwpck_require__(9628); /** - * Flattens the given options argument. + * Sets the canceled flag of an event. * - * @param options - options argument + * @param event - an event */ -function eventTarget_flattenMore(options) { - /** - * 1. Let capture be the result of flattening options. - * 2. Let once and passive be false. - * 3. If options is a dictionary, then set passive to options’s passive and - * once to options’s once. - * 4. Return capture, passive, and once. - */ - var capture = eventTarget_flatten(options); - var once = false; - var passive = false; - if (!util_1.isBoolean(options)) { - once = options.once || false; - passive = options.passive || false; +function event_setTheCanceledFlag(event) { + if (event._cancelable && !event._inPassiveListenerFlag) { + event._canceledFlag = true; } - return [capture, passive, once]; } -exports.eventTarget_flattenMore = eventTarget_flattenMore; +exports.event_setTheCanceledFlag = event_setTheCanceledFlag; /** - * Adds a new event listener. + * Initializes the value of an event. * - * @param eventTarget - event target - * @param listener - event listener + * @param event - an event to initialize + * @param type - the type of event + * @param bubbles - whether the event propagates in reverse + * @param cancelable - whether the event can be cancelled */ -function eventTarget_addEventListener(eventTarget, listener) { - /** - * 1. If eventTarget is a ServiceWorkerGlobalScope object, its service - * worker’s script resource’s has ever been evaluated flag is set, and - * listener’s type matches the type attribute value of any of the service - * worker events, then report a warning to the console that this might not - * give the expected results. [SERVICE-WORKERS] - */ - // TODO: service worker - /** - * 2. If listener’s callback is null, then return. - */ - if (listener.callback === null) - return; - /** - * 3. If eventTarget’s event listener list does not contain an event listener - * whose type is listener’s type, callback is listener’s callback, and capture - * is listener’s capture, then append listener to eventTarget’s event listener - * list. - */ - for (var i = 0; i < eventTarget._eventListenerList.length; i++) { - var entry = eventTarget._eventListenerList[i]; - if (entry.type === listener.type && entry.callback.handleEvent === listener.callback.handleEvent - && entry.capture === listener.capture) { - return; - } - } - eventTarget._eventListenerList.push(listener); +function event_initialize(event, type, bubbles, cancelable) { + event._initializedFlag = true; + event._stopPropagationFlag = false; + event._stopImmediatePropagationFlag = false; + event._canceledFlag = false; + event._isTrusted = false; + event._target = null; + event._type = type; + event._bubbles = bubbles; + event._cancelable = cancelable; } -exports.eventTarget_addEventListener = eventTarget_addEventListener; +exports.event_initialize = event_initialize; /** - * Removes an event listener. + * Creates a new event. * - * @param eventTarget - event target - * @param listener - event listener + * @param eventInterface - event interface + * @param realm - realm */ -function eventTarget_removeEventListener(eventTarget, listener, index) { +function event_createAnEvent(eventInterface, realm) { + if (realm === void 0) { realm = undefined; } /** - * 1. If eventTarget is a ServiceWorkerGlobalScope object and its service - * worker’s set of event types to handle contains type, then report a - * warning to the console that this might not give the expected results. - * [SERVICE-WORKERS] + * 1. If realm is not given, then set it to null. + * 2. Let dictionary be the result of converting the JavaScript value + * undefined to the dictionary type accepted by eventInterface’s + * constructor. (This dictionary type will either be EventInit or a + * dictionary that inherits from it.) + * 3. Let event be the result of running the inner event creation steps with + * eventInterface, realm, the time of the occurrence that the event is + * signaling, and dictionary. + * 4. Initialize event’s isTrusted attribute to true. + * 5. Return event. */ - // TODO: service worker + if (realm === undefined) + realm = null; + var dictionary = {}; + var event = event_innerEventCreationSteps(eventInterface, realm, new Date(), dictionary); + event._isTrusted = true; + return event; +} +exports.event_createAnEvent = event_createAnEvent; +/** + * Performs event creation steps. + * + * @param eventInterface - event interface + * @param realm - realm + * @param time - time of occurrance + * @param dictionary - event attributes + * + */ +function event_innerEventCreationSteps(eventInterface, realm, time, dictionary) { /** - * 2. Set listener’s removed to true and remove listener from eventTarget’s - * event listener list. + * 1. Let event be the result of creating a new object using eventInterface. + * TODO: Implement realms + * If realm is non-null, then use that Realm; otherwise, use the default + * behavior defined in Web IDL. */ - listener.removed = true; - eventTarget._eventListenerList.splice(index, 1); + var event = new eventInterface(""); + /** + * 2. Set event’s initialized flag. + * 3. Initialize event’s timeStamp attribute to a DOMHighResTimeStamp + * representing the high resolution time from the time origin to time. + * 4. For each member → value in dictionary, if event has an attribute + * whose identifier is member, then initialize that attribute to value. + * 5. Run the event constructing steps with event. + * 6. Return event. + */ + event._initializedFlag = true; + event._timeStamp = time.getTime(); + Object.assign(event, dictionary); + if (DOMImpl_1.dom.features.steps) { + DOMAlgorithm_1.dom_runEventConstructingSteps(event); + } + return event; } -exports.eventTarget_removeEventListener = eventTarget_removeEventListener; +exports.event_innerEventCreationSteps = event_innerEventCreationSteps; /** - * Removes all event listeners. + * Dispatches an event to an event target. * - * @param eventTarget - event target + * @param event - the event to dispatch + * @param target - event target + * @param legacyTargetOverrideFlag - legacy target override flag + * @param legacyOutputDidListenersThrowFlag - legacy output flag that returns + * whether the event listener's callback threw an exception */ -function eventTarget_removeAllEventListeners(eventTarget) { +function event_dispatch(event, target, legacyTargetOverrideFlag, legacyOutputDidListenersThrowFlag) { + var e_1, _a, e_2, _b; + if (legacyTargetOverrideFlag === void 0) { legacyTargetOverrideFlag = false; } + if (legacyOutputDidListenersThrowFlag === void 0) { legacyOutputDidListenersThrowFlag = { value: false }; } + var clearTargets = false; /** - * To remove all event listeners, given an EventTarget object eventTarget, - * for each listener of eventTarget’s event listener list, remove an event - * listener with eventTarget and listener. + * 1. Set event's dispatch flag. */ - var e_1, _a; - try { - for (var _b = __values(eventTarget._eventListenerList), _c = _b.next(); !_c.done; _c = _b.next()) { - var e = _c.value; - e.removed = true; + event._dispatchFlag = true; + /** + * 2. Let targetOverride be target, if legacy target override flag is not + * given, and target's associated Document otherwise. + * + * _Note:_ legacy target override flag is only used by HTML and only when + * target is a Window object. + */ + var targetOverride = target; + if (legacyTargetOverrideFlag) { + var doc = target._associatedDocument; + if (util_1.Guard.isDocumentNode(doc)) { + targetOverride = doc; } } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { + /** + * 3. Let activationTarget be null. + * 4. Let relatedTarget be the result of retargeting event's relatedTarget + * against target. + * 5. If target is not relatedTarget or target is event's relatedTarget, + * then: + */ + var activationTarget = null; + var relatedTarget = TreeAlgorithm_1.tree_retarget(event._relatedTarget, target); + if (target !== relatedTarget || target === event._relatedTarget) { + /** + * 5.1. Let touchTargets be a new list. + * 5.2. For each touchTarget of event's touch target list, append the + * result of retargeting touchTarget against target to touchTargets. + * 5.3. Append to an event path with event, target, targetOverride, + * relatedTarget, touchTargets, and false. + * 5.4. Let isActivationEvent be true, if event is a MouseEvent object + * and event's type attribute is "click", and false otherwise. + * 5.5. If isActivationEvent is true and target has activation behavior, + * then set activationTarget to target. + * 5.6. Let slotable be target, if target is a slotable and is assigned, + * and null otherwise. + * 5.7. Let slot-in-closed-tree be false. + * 5.8. Let parent be the result of invoking target's get the parent with + * event. + */ + var touchTargets = []; try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + for (var _c = __values(event._touchTargetList), _d = _c.next(); !_d.done; _d = _c.next()) { + var touchTarget = _d.value; + touchTargets.push(TreeAlgorithm_1.tree_retarget(touchTarget, target)); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_d && !_d.done && (_a = _c.return)) _a.call(_c); + } + finally { if (e_1) throw e_1.error; } + } + event_appendToAnEventPath(event, target, targetOverride, relatedTarget, touchTargets, false); + var isActivationEvent = (util_1.Guard.isMouseEvent(event) && event._type === "click"); + if (isActivationEvent && target._activationBehavior !== undefined) { + activationTarget = target; + } + var slotable = (util_1.Guard.isSlotable(target) && ShadowTreeAlgorithm_1.shadowTree_isAssigned(target)) ? + target : null; + var slotInClosedTree = false; + var parent = target._getTheParent(event); + /** + * 5.9. While parent is non-null: + */ + while (parent !== null && util_1.Guard.isNode(parent)) { + /** + * 5.9.1 If slotable is non-null: + * 5.9.1.1. Assert: parent is a slot. + * 5.9.1.2. Set slotable to null. + * 5.9.1.3. If parent's root is a shadow root whose mode is "closed", + * then set slot-in-closed-tree to true. + */ + if (slotable !== null) { + if (!util_1.Guard.isSlot(parent)) { + throw new Error("Parent node of a slotable should be a slot."); + } + slotable = null; + var root = TreeAlgorithm_1.tree_rootNode(parent, true); + if (util_1.Guard.isShadowRoot(root) && root._mode === "closed") { + slotInClosedTree = true; + } + } + /** + * 5.9.2 If parent is a slotable and is assigned, then set slotable to + * parent. + * 5.9.3. Let relatedTarget be the result of retargeting event's + * relatedTarget against parent. + * 5.9.4. Let touchTargets be a new list. + * 5.9.4. For each touchTarget of event's touch target list, append the + * result of retargeting touchTarget against parent to touchTargets. + */ + if (util_1.Guard.isSlotable(parent) && ShadowTreeAlgorithm_1.shadowTree_isAssigned(parent)) { + slotable = parent; + } + relatedTarget = TreeAlgorithm_1.tree_retarget(event._relatedTarget, parent); + touchTargets = []; + try { + for (var _e = (e_2 = void 0, __values(event._touchTargetList)), _f = _e.next(); !_f.done; _f = _e.next()) { + var touchTarget = _f.value; + touchTargets.push(TreeAlgorithm_1.tree_retarget(touchTarget, parent)); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_f && !_f.done && (_b = _e.return)) _b.call(_e); + } + finally { if (e_2) throw e_2.error; } + } + /** + * 5.9.6. If parent is a Window object, or parent is a node and target's + * root is a shadow-including inclusive ancestor of parent, then: + */ + if (util_1.Guard.isWindow(parent) || (util_1.Guard.isNode(parent) && util_1.Guard.isNode(target) && + TreeAlgorithm_1.tree_isAncestorOf(TreeAlgorithm_1.tree_rootNode(target, true), parent, true, true))) { + /** + * 5.9.6.1. If isActivationEvent is true, event's bubbles attribute + * is true, activationTarget is null, and parent has activation + * behavior, then set activationTarget to parent. + * 5.9.6.2. Append to an event path with event, parent, null, + * relatedTarget, touchTargets, and slot-in-closed-tree. + */ + if (isActivationEvent && event._bubbles && activationTarget === null && + parent._activationBehavior) { + activationTarget = parent; + } + event_appendToAnEventPath(event, parent, null, relatedTarget, touchTargets, slotInClosedTree); + } + else if (parent === relatedTarget) { + /** + * 5.9.7. Otherwise, if parent is relatedTarget, + * then set parent to null. + */ + parent = null; + } + else { + /** + * 5.9.8. Otherwise, set target to parent and then: + * 5.9.8.1. If isActivationEvent is true, activationTarget is null, + * and target has activation behavior, then set activationTarget + * to target. + * 5.9.8.2. Append to an event path with event, parent, target, + * relatedTarget, touchTargets, and slot-in-closed-tree. + */ + target = parent; + if (isActivationEvent && activationTarget === null && + target._activationBehavior) { + activationTarget = target; + } + event_appendToAnEventPath(event, parent, target, relatedTarget, touchTargets, slotInClosedTree); + } + /** + * 5.9.9. If parent is non-null, then set parent to the result of + * invoking parent's get the parent with event. + * 5.9.10. Set slot-in-closed-tree to false. + */ + if (parent !== null) { + parent = parent._getTheParent(event); + } + slotInClosedTree = false; + } + /** + * 5.10. Let clearTargetsStruct be the last struct in event's path whose + * shadow-adjusted target is non-null. + */ + var clearTargetsStruct = null; + var path = event._path; + for (var i = path.length - 1; i >= 0; i--) { + var struct = path[i]; + if (struct.shadowAdjustedTarget !== null) { + clearTargetsStruct = struct; + break; + } + } + /** + * 5.11. Let clearTargets be true if clearTargetsStruct's shadow-adjusted + * target, clearTargetsStruct's relatedTarget, or an EventTarget object + * in clearTargetsStruct's touch target list is a node and its root is + * a shadow root, and false otherwise. + */ + if (clearTargetsStruct !== null) { + if (util_1.Guard.isNode(clearTargetsStruct.shadowAdjustedTarget) && + util_1.Guard.isShadowRoot(TreeAlgorithm_1.tree_rootNode(clearTargetsStruct.shadowAdjustedTarget, true))) { + clearTargets = true; + } + else if (util_1.Guard.isNode(clearTargetsStruct.relatedTarget) && + util_1.Guard.isShadowRoot(TreeAlgorithm_1.tree_rootNode(clearTargetsStruct.relatedTarget, true))) { + clearTargets = true; + } + else { + for (var j = 0; j < clearTargetsStruct.touchTargetList.length; j++) { + var struct = clearTargetsStruct.touchTargetList[j]; + if (util_1.Guard.isNode(struct) && + util_1.Guard.isShadowRoot(TreeAlgorithm_1.tree_rootNode(struct, true))) { + clearTargets = true; + break; + } + } + } + } + /** + * 5.12. If activationTarget is non-null and activationTarget has + * legacy-pre-activation behavior, then run activationTarget's + * legacy-pre-activation behavior. + */ + if (activationTarget !== null && + activationTarget._legacyPreActivationBehavior !== undefined) { + activationTarget._legacyPreActivationBehavior(event); + } + /** + * 5.13. For each struct in event's path, in reverse order: + */ + for (var i = path.length - 1; i >= 0; i--) { + var struct = path[i]; + /** + * 5.13.1. If struct's shadow-adjusted target is non-null, then set + * event's eventPhase attribute to AT_TARGET. + * 5.13.2. Otherwise, set event's eventPhase attribute to + * CAPTURING_PHASE. + * 5.13.3. Invoke with struct, event, "capturing", and + * legacyOutputDidListenersThrowFlag if given. + */ + if (struct.shadowAdjustedTarget !== null) { + event._eventPhase = interfaces_1.EventPhase.AtTarget; + } + else { + event._eventPhase = interfaces_1.EventPhase.Capturing; + } + event_invoke(struct, event, "capturing", legacyOutputDidListenersThrowFlag); + } + /** + * 5.14. For each struct in event's path + */ + for (var i = 0; i < path.length; i++) { + var struct = path[i]; + /** + * 5.14.1. If struct's shadow-adjusted target is non-null, then set + * event's eventPhase attribute to AT_TARGET. + * 5.14.2. Otherwise: + * 5.14.2.1. If event's bubbles attribute is false, then continue. + * 5.14.2.2. Set event's eventPhase attribute to BUBBLING_PHASE. + * 5.14.3. Invoke with struct, event, "bubbling", and + * legacyOutputDidListenersThrowFlag if given. + */ + if (struct.shadowAdjustedTarget !== null) { + event._eventPhase = interfaces_1.EventPhase.AtTarget; + } + else { + if (!event._bubbles) + continue; + event._eventPhase = interfaces_1.EventPhase.Bubbling; + } + event_invoke(struct, event, "bubbling", legacyOutputDidListenersThrowFlag); } - finally { if (e_1) throw e_1.error; } } - eventTarget._eventListenerList.length = 0; + /** + * 6. Set event's eventPhase attribute to NONE. + * 7. Set event's currentTarget attribute to null. + * 8. Set event's path to the empty list. + * 9. Unset event's dispatch flag, stop propagation flag, and stop + * immediate propagation flag. + */ + event._eventPhase = interfaces_1.EventPhase.None; + event._currentTarget = null; + event._path = []; + event._dispatchFlag = false; + event._stopPropagationFlag = false; + event._stopImmediatePropagationFlag = false; + /** + * 10. If clearTargets, then: + * 10.1. Set event's target to null. + * 10.2. Set event's relatedTarget to null. + * 10.3. Set event's touch target list to the empty list. + */ + if (clearTargets) { + event._target = null; + event._relatedTarget = null; + event._touchTargetList = []; + } + /** + * 11. If activationTarget is non-null, then: + * 11.1. If event's canceled flag is unset, then run activationTarget's + * activation behavior with event. + * 11.2. Otherwise, if activationTarget has legacy-canceled-activation + * behavior, then run activationTarget's legacy-canceled-activation + * behavior. + */ + if (activationTarget !== null) { + if (!event._canceledFlag && activationTarget._activationBehavior !== undefined) { + activationTarget._activationBehavior(event); + } + else if (activationTarget._legacyCanceledActivationBehavior !== undefined) { + activationTarget._legacyCanceledActivationBehavior(event); + } + } + /** + * 12. Return false if event's canceled flag is set, and true otherwise. + */ + return !event._canceledFlag; } -exports.eventTarget_removeAllEventListeners = eventTarget_removeAllEventListeners; -//# sourceMappingURL=EventTargetAlgorithm.js.map - -/***/ }), -/* 107 */, -/* 108 */, -/* 109 */, -/* 110 */, -/* 111 */, -/* 112 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var ObjectReader_1 = __webpack_require__(50); -var BaseReader_1 = __webpack_require__(305); +exports.event_dispatch = event_dispatch; /** - * Parses XML nodes from a JSON string. + * Appends a new struct to an event's path. + * + * @param event - an event + * @param invocationTarget - the target of the invocation + * @param shadowAdjustedTarget - shadow-root adjusted event target + * @param relatedTarget - related event target + * @param touchTargets - a list of touch targets + * @param slotInClosedTree - if the target's parent is a closed shadow root */ -var JSONReader = /** @class */ (function (_super) { - __extends(JSONReader, _super); - function JSONReader() { - return _super !== null && _super.apply(this, arguments) || this; +function event_appendToAnEventPath(event, invocationTarget, shadowAdjustedTarget, relatedTarget, touchTargets, slotInClosedTree) { + /** + * 1. Let invocationTargetInShadowTree be false. + * 2. If invocationTarget is a node and its root is a shadow root, then + * set invocationTargetInShadowTree to true. + */ + var invocationTargetInShadowTree = false; + if (util_1.Guard.isNode(invocationTarget) && + util_1.Guard.isShadowRoot(TreeAlgorithm_1.tree_rootNode(invocationTarget))) { + invocationTargetInShadowTree = true; } /** - * Parses the given document representation. + * 3. Let root-of-closed-tree be false. + * 4. If invocationTarget is a shadow root whose mode is "closed", then + * set root-of-closed-tree to true. + */ + var rootOfClosedTree = false; + if (util_1.Guard.isShadowRoot(invocationTarget) && + invocationTarget._mode === "closed") { + rootOfClosedTree = true; + } + /** + * 5. Append a new struct to event's path whose invocation target is + * invocationTarget, invocation-target-in-shadow-tree is + * invocationTargetInShadowTree, shadow-adjusted target is + * shadowAdjustedTarget, relatedTarget is relatedTarget, + * touch target list is touchTargets, root-of-closed-tree is + * root-of-closed-tree, and slot-in-closed-tree is slot-in-closed-tree. + */ + event._path.push({ + invocationTarget: invocationTarget, + invocationTargetInShadowTree: invocationTargetInShadowTree, + shadowAdjustedTarget: shadowAdjustedTarget, + relatedTarget: relatedTarget, + touchTargetList: touchTargets, + rootOfClosedTree: rootOfClosedTree, + slotInClosedTree: slotInClosedTree + }); +} +exports.event_appendToAnEventPath = event_appendToAnEventPath; +/** + * Invokes an event. + * + * @param struct - a struct defining event's path + * @param event - the event to invoke + * @param phase - event phase + * @param legacyOutputDidListenersThrowFlag - legacy output flag that returns + * whether the event listener's callback threw an exception + */ +function event_invoke(struct, event, phase, legacyOutputDidListenersThrowFlag) { + if (legacyOutputDidListenersThrowFlag === void 0) { legacyOutputDidListenersThrowFlag = { value: false }; } + /** + * 1. Set event's target to the shadow-adjusted target of the last struct + * in event's path, that is either struct or preceding struct, whose + * shadow-adjusted target is non-null. + */ + var path = event._path; + var index = -1; + for (var i = 0; i < path.length; i++) { + if (path[i] === struct) { + index = i; + break; + } + } + if (index !== -1) { + var item = path[index]; + if (item.shadowAdjustedTarget !== null) { + event._target = item.shadowAdjustedTarget; + } + else if (index > 0) { + item = path[index - 1]; + if (item.shadowAdjustedTarget !== null) { + event._target = item.shadowAdjustedTarget; + } + } + } + /** + * 2. Set event's relatedTarget to struct's relatedTarget. + * 3. Set event's touch target list to struct's touch target list. + * 4. If event's stop propagation flag is set, then return. + * 5. Initialize event's currentTarget attribute to struct's invocation + * target. + * 6. Let listeners be a clone of event's currentTarget attribute value's + * event listener list. * - * @param node - node receive parsed XML nodes - * @param str - JSON string to parse + * _Note:_ This avoids event listeners added after this point from being + * run. Note that removal still has an effect due to the removed field. */ - JSONReader.prototype._parse = function (node, str) { - return new ObjectReader_1.ObjectReader(this._builderOptions).parse(node, JSON.parse(str)); - }; - return JSONReader; -}(BaseReader_1.BaseReader)); -exports.JSONReader = JSONReader; -//# sourceMappingURL=JSONReader.js.map - -/***/ }), -/* 113 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var util_1 = __webpack_require__(592); -// Import implementation classes -var AbortControllerImpl_1 = __webpack_require__(990); -exports.AbortController = AbortControllerImpl_1.AbortControllerImpl; -var AbortSignalImpl_1 = __webpack_require__(784); -exports.AbortSignal = AbortSignalImpl_1.AbortSignalImpl; -var AbstractRangeImpl_1 = __webpack_require__(413); -exports.AbstractRange = AbstractRangeImpl_1.AbstractRangeImpl; -var AttrImpl_1 = __webpack_require__(866); -exports.Attr = AttrImpl_1.AttrImpl; -var CDATASectionImpl_1 = __webpack_require__(920); -exports.CDATASection = CDATASectionImpl_1.CDATASectionImpl; -var CharacterDataImpl_1 = __webpack_require__(43); -exports.CharacterData = CharacterDataImpl_1.CharacterDataImpl; -var ChildNodeImpl_1 = __webpack_require__(983); -var CommentImpl_1 = __webpack_require__(760); -exports.Comment = CommentImpl_1.CommentImpl; -var CustomEventImpl_1 = __webpack_require__(164); -exports.CustomEvent = CustomEventImpl_1.CustomEventImpl; -var DocumentFragmentImpl_1 = __webpack_require__(796); -exports.DocumentFragment = DocumentFragmentImpl_1.DocumentFragmentImpl; -var DocumentImpl_1 = __webpack_require__(488); -exports.Document = DocumentImpl_1.DocumentImpl; -var DocumentOrShadowRootImpl_1 = __webpack_require__(247); -var DocumentTypeImpl_1 = __webpack_require__(558); -exports.DocumentType = DocumentTypeImpl_1.DocumentTypeImpl; -var DOMImpl_1 = __webpack_require__(648); -exports.dom = DOMImpl_1.dom; -var DOMImplementationImpl_1 = __webpack_require__(174); -exports.DOMImplementation = DOMImplementationImpl_1.DOMImplementationImpl; -var DOMTokenListImpl_1 = __webpack_require__(425); -exports.DOMTokenList = DOMTokenListImpl_1.DOMTokenListImpl; -var ElementImpl_1 = __webpack_require__(695); -exports.Element = ElementImpl_1.ElementImpl; -var EventImpl_1 = __webpack_require__(427); -exports.Event = EventImpl_1.EventImpl; -var EventTargetImpl_1 = __webpack_require__(597); -exports.EventTarget = EventTargetImpl_1.EventTargetImpl; -var HTMLCollectionImpl_1 = __webpack_require__(204); -exports.HTMLCollection = HTMLCollectionImpl_1.HTMLCollectionImpl; -var MutationObserverImpl_1 = __webpack_require__(175); -exports.MutationObserver = MutationObserverImpl_1.MutationObserverImpl; -var MutationRecordImpl_1 = __webpack_require__(730); -exports.MutationRecord = MutationRecordImpl_1.MutationRecordImpl; -var NamedNodeMapImpl_1 = __webpack_require__(88); -exports.NamedNodeMap = NamedNodeMapImpl_1.NamedNodeMapImpl; -var NodeFilterImpl_1 = __webpack_require__(774); -exports.NodeFilter = NodeFilterImpl_1.NodeFilterImpl; -var NodeImpl_1 = __webpack_require__(935); -exports.Node = NodeImpl_1.NodeImpl; -var NodeIteratorImpl_1 = __webpack_require__(800); -exports.NodeIterator = NodeIteratorImpl_1.NodeIteratorImpl; -var NodeListImpl_1 = __webpack_require__(636); -exports.NodeList = NodeListImpl_1.NodeListImpl; -var NodeListStaticImpl_1 = __webpack_require__(266); -exports.NodeListStatic = NodeListStaticImpl_1.NodeListStaticImpl; -var NonDocumentTypeChildNodeImpl_1 = __webpack_require__(18); -var NonElementParentNodeImpl_1 = __webpack_require__(574); -var ParentNodeImpl_1 = __webpack_require__(934); -var ProcessingInstructionImpl_1 = __webpack_require__(619); -exports.ProcessingInstruction = ProcessingInstructionImpl_1.ProcessingInstructionImpl; -var RangeImpl_1 = __webpack_require__(90); -exports.Range = RangeImpl_1.RangeImpl; -var ShadowRootImpl_1 = __webpack_require__(581); -exports.ShadowRoot = ShadowRootImpl_1.ShadowRootImpl; -var SlotableImpl_1 = __webpack_require__(429); -var StaticRangeImpl_1 = __webpack_require__(688); -exports.StaticRange = StaticRangeImpl_1.StaticRangeImpl; -var TextImpl_1 = __webpack_require__(820); -exports.Text = TextImpl_1.TextImpl; -var TraverserImpl_1 = __webpack_require__(487); -exports.Traverser = TraverserImpl_1.TraverserImpl; -var TreeWalkerImpl_1 = __webpack_require__(646); -exports.TreeWalker = TreeWalkerImpl_1.TreeWalkerImpl; -var WindowImpl_1 = __webpack_require__(932); -exports.Window = WindowImpl_1.WindowImpl; -var XMLDocumentImpl_1 = __webpack_require__(661); -exports.XMLDocument = XMLDocumentImpl_1.XMLDocumentImpl; -// Apply mixins -// ChildNode -util_1.applyMixin(ElementImpl_1.ElementImpl, ChildNodeImpl_1.ChildNodeImpl); -util_1.applyMixin(CharacterDataImpl_1.CharacterDataImpl, ChildNodeImpl_1.ChildNodeImpl); -util_1.applyMixin(DocumentTypeImpl_1.DocumentTypeImpl, ChildNodeImpl_1.ChildNodeImpl); -// DocumentOrShadowRoot -util_1.applyMixin(DocumentImpl_1.DocumentImpl, DocumentOrShadowRootImpl_1.DocumentOrShadowRootImpl); -util_1.applyMixin(ShadowRootImpl_1.ShadowRootImpl, DocumentOrShadowRootImpl_1.DocumentOrShadowRootImpl); -// NonDocumentTypeChildNode -util_1.applyMixin(ElementImpl_1.ElementImpl, NonDocumentTypeChildNodeImpl_1.NonDocumentTypeChildNodeImpl); -util_1.applyMixin(CharacterDataImpl_1.CharacterDataImpl, NonDocumentTypeChildNodeImpl_1.NonDocumentTypeChildNodeImpl); -// NonElementParentNode -util_1.applyMixin(DocumentImpl_1.DocumentImpl, NonElementParentNodeImpl_1.NonElementParentNodeImpl); -util_1.applyMixin(DocumentFragmentImpl_1.DocumentFragmentImpl, NonElementParentNodeImpl_1.NonElementParentNodeImpl); -// ParentNode -util_1.applyMixin(DocumentImpl_1.DocumentImpl, ParentNodeImpl_1.ParentNodeImpl); -util_1.applyMixin(DocumentFragmentImpl_1.DocumentFragmentImpl, ParentNodeImpl_1.ParentNodeImpl); -util_1.applyMixin(ElementImpl_1.ElementImpl, ParentNodeImpl_1.ParentNodeImpl); -// Slotable -util_1.applyMixin(TextImpl_1.TextImpl, SlotableImpl_1.SlotableImpl); -util_1.applyMixin(ElementImpl_1.ElementImpl, SlotableImpl_1.SlotableImpl); -//# sourceMappingURL=index.js.map - -/***/ }), -/* 114 */, -/* 115 */, -/* 116 */, -/* 117 */, -/* 118 */, -/* 119 */, -/* 120 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const compareBuild = __webpack_require__(16) -const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose)) -module.exports = sort - - -/***/ }), -/* 121 */, -/* 122 */, -/* 123 */, -/* 124 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -// hoisted class for cyclic dependency -class Range { - constructor (range, options) { - options = parseOptions(options) - - if (range instanceof Range) { - if ( - range.loose === !!options.loose && - range.includePrerelease === !!options.includePrerelease - ) { - return range - } else { - return new Range(range.raw, options) - } - } - - if (range instanceof Comparator) { - // just put it in the set and return - this.raw = range.value - this.set = [[range]] - this.format() - return this - } - - this.options = options - this.loose = !!options.loose - this.includePrerelease = !!options.includePrerelease - - // First, split based on boolean or || - this.raw = range - this.set = range - .split(/\s*\|\|\s*/) - // map the range to a 2d array of comparators - .map(range => this.parseRange(range.trim())) - // throw out any comparator lists that are empty - // this generally means that it was not a valid range, which is allowed - // in loose mode, but will still throw if the WHOLE range is invalid. - .filter(c => c.length) - - if (!this.set.length) { - throw new TypeError(`Invalid SemVer Range: ${range}`) - } - - // if we have any that are not the null set, throw out null sets. - if (this.set.length > 1) { - // keep the first one, in case they're all null sets - const first = this.set[0] - this.set = this.set.filter(c => !isNullSet(c[0])) - if (this.set.length === 0) - this.set = [first] - else if (this.set.length > 1) { - // if we have any that are *, then the range is just * - for (const c of this.set) { - if (c.length === 1 && isAny(c[0])) { - this.set = [c] - break - } + event._relatedTarget = struct.relatedTarget; + event._touchTargetList = struct.touchTargetList; + if (event._stopPropagationFlag) + return; + event._currentTarget = struct.invocationTarget; + var currentTarget = event._currentTarget; + var targetListeners = currentTarget._eventListenerList; + var listeners = new (Array.bind.apply(Array, __spread([void 0], targetListeners)))(); + /** + * 7. Let found be the result of running inner invoke with event, listeners, + * phase, and legacyOutputDidListenersThrowFlag if given. + */ + var found = event_innerInvoke(event, listeners, phase, struct, legacyOutputDidListenersThrowFlag); + /** + * 8. If found is false and event's isTrusted attribute is true, then: + */ + if (!found && event._isTrusted) { + /** + * 8.1. Let originalEventType be event's type attribute value. + * 8.2. If event's type attribute value is a match for any of the strings + * in the first column in the following table, set event's type attribute + * value to the string in the second column on the same row as the matching + * string, and return otherwise. + * + * Event type | Legacy event type + * ------------------------------------------------- + * "animationend" | "webkitAnimationEnd" + * "animationiteration" | "webkitAnimationIteration" + * "animationstart" | "webkitAnimationStart" + * "transitionend" | "webkitTransitionEnd" + */ + var originalEventType = event._type; + if (originalEventType === "animationend") { + event._type = "webkitAnimationEnd"; } - } - } - - this.format() - } - - format () { - this.range = this.set - .map((comps) => { - return comps.join(' ').trim() - }) - .join('||') - .trim() - return this.range - } - - toString () { - return this.range - } - - parseRange (range) { - range = range.trim() - - // memoize range parsing for performance. - // this is a very hot path, and fully deterministic. - const memoOpts = Object.keys(this.options).join(',') - const memoKey = `parseRange:${memoOpts}:${range}` - const cached = cache.get(memoKey) - if (cached) - return cached - - const loose = this.options.loose - // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` - const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] - range = range.replace(hr, hyphenReplace(this.options.includePrerelease)) - debug('hyphen replace', range) - // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` - range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) - debug('comparator trim', range, re[t.COMPARATORTRIM]) - - // `~ 1.2.3` => `~1.2.3` - range = range.replace(re[t.TILDETRIM], tildeTrimReplace) - - // `^ 1.2.3` => `^1.2.3` - range = range.replace(re[t.CARETTRIM], caretTrimReplace) - - // normalize spaces - range = range.split(/\s+/).join(' ') - - // At this point, the range is completely trimmed and - // ready to be split into comparators. - - const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] - const rangeList = range - .split(' ') - .map(comp => parseComparator(comp, this.options)) - .join(' ') - .split(/\s+/) - // >=0.0.0 is equivalent to * - .map(comp => replaceGTE0(comp, this.options)) - // in loose mode, throw out any that are not valid comparators - .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true) - .map(comp => new Comparator(comp, this.options)) - - // if any comparators are the null set, then replace with JUST null set - // if more than one comparator, remove any * comparators - // also, don't include the same comparator more than once - const l = rangeList.length - const rangeMap = new Map() - for (const comp of rangeList) { - if (isNullSet(comp)) - return [comp] - rangeMap.set(comp.value, comp) - } - if (rangeMap.size > 1 && rangeMap.has('')) - rangeMap.delete('') - - const result = [...rangeMap.values()] - cache.set(memoKey, result) - return result - } - - intersects (range, options) { - if (!(range instanceof Range)) { - throw new TypeError('a Range is required') + else if (originalEventType === "animationiteration") { + event._type = "webkitAnimationIteration"; + } + else if (originalEventType === "animationstart") { + event._type = "webkitAnimationStart"; + } + else if (originalEventType === "transitionend") { + event._type = "webkitTransitionEnd"; + } + /** + * 8.3. Inner invoke with event, listeners, phase, and + * legacyOutputDidListenersThrowFlag if given. + * 8.4. Set event's type attribute value to originalEventType. + */ + event_innerInvoke(event, listeners, phase, struct, legacyOutputDidListenersThrowFlag); + event._type = originalEventType; } - - return this.set.some((thisComparators) => { - return ( - isSatisfiable(thisComparators, options) && - range.set.some((rangeComparators) => { - return ( - isSatisfiable(rangeComparators, options) && - thisComparators.every((thisComparator) => { - return rangeComparators.every((rangeComparator) => { - return thisComparator.intersects(rangeComparator, options) - }) - }) - ) - }) - ) - }) - } - - // if ANY of the sets match ALL of its comparators, then pass - test (version) { - if (!version) { - return false +} +exports.event_invoke = event_invoke; +/** + * Invokes an event. + * + * @param event - the event to invoke + * @param listeners - event listeners + * @param phase - event phase + * @param struct - a struct defining event's path + * @param legacyOutputDidListenersThrowFlag - legacy output flag that returns + * whether the event listener's callback threw an exception + */ +function event_innerInvoke(event, listeners, phase, struct, legacyOutputDidListenersThrowFlag) { + if (legacyOutputDidListenersThrowFlag === void 0) { legacyOutputDidListenersThrowFlag = { value: false }; } + /** + * 1. Let found be false. + * 2. For each listener in listeners, whose removed is false: + */ + var found = false; + for (var i = 0; i < listeners.length; i++) { + var listener = listeners[i]; + if (!listener.removed) { + /** + * 2.1. If event's type attribute value is not listener's type, then + * continue. + * 2.2. Set found to true. + * 2.3. If phase is "capturing" and listener's capture is false, then + * continue. + * 2.4. If phase is "bubbling" and listener's capture is true, then + * continue. + */ + if (event._type !== listener.type) + continue; + found = true; + if (phase === "capturing" && !listener.capture) + continue; + if (phase === "bubbling" && listener.capture) + continue; + /** + * 2.5. If listener's once is true, then remove listener from event's + * currentTarget attribute value's event listener list. + */ + if (listener.once && event._currentTarget !== null) { + var impl = event._currentTarget; + var index = -1; + for (var i_1 = 0; i_1 < impl._eventListenerList.length; i_1++) { + if (impl._eventListenerList[i_1] === listener) { + index = i_1; + break; + } + } + if (index !== -1) { + impl._eventListenerList.splice(index, 1); + } + } + /** + * TODO: Implement realms + * + * 2.6. Let global be listener callback's associated Realm's global + * object. + */ + var globalObject = undefined; + /** + * 2.7. Let currentEvent be undefined. + * 2.8. If global is a Window object, then: + * 2.8.1. Set currentEvent to global's current event. + * 2.8.2. If struct's invocation-target-in-shadow-tree is false, then + * set global's current event to event. + */ + var currentEvent = undefined; + if (util_1.Guard.isWindow(globalObject)) { + currentEvent = globalObject._currentEvent; + if (struct.invocationTargetInShadowTree === false) { + globalObject._currentEvent = event; + } + } + /** + * 2.9. If listener's passive is true, then set event's in passive + * listener flag. + * 2.10. Call a user object's operation with listener's callback, + * "handleEvent", « event », and event's currentTarget attribute value. + */ + if (listener.passive) + event._inPassiveListenerFlag = true; + try { + listener.callback.handleEvent.call(event._currentTarget, event); + } + catch (err) { + /** + * If this throws an exception, then: + * 2.10.1. Report the exception. + * 2.10.2. Set legacyOutputDidListenersThrowFlag if given. + * + * _Note:_ The legacyOutputDidListenersThrowFlag is only used by + * Indexed Database API. + * TODO: Report the exception + * See: https://html.spec.whatwg.org/multipage/webappapis.html#runtime-script-errors-in-documents + */ + legacyOutputDidListenersThrowFlag.value = true; + } + /** + * 2.11. Unset event's in passive listener flag. + */ + if (listener.passive) + event._inPassiveListenerFlag = false; + /** + * 2.12. If global is a Window object, then set global's current event + * to currentEvent. + */ + if (util_1.Guard.isWindow(globalObject)) { + globalObject._currentEvent = currentEvent; + } + /** + * 2.13. If event's stop immediate propagation flag is set, then return + * found. + */ + if (event._stopImmediatePropagationFlag) + return found; + } } - - if (typeof version === 'string') { - try { - version = new SemVer(version, this.options) - } catch (er) { - return false - } + /** + * 3. Return found. + */ + return found; +} +exports.event_innerInvoke = event_innerInvoke; +/** + * Fires an event at target. + * @param e - event name + * @param target - event target + * @param eventConstructor - an event constructor, with a description of how + * IDL attributes are to be initialized + * @param idlAttributes - a dictionary describing how IDL attributes are + * to be initialized + * @param legacyTargetOverrideFlag - legacy target override flag + */ +function event_fireAnEvent(e, target, eventConstructor, idlAttributes, legacyTargetOverrideFlag) { + /** + * 1. If eventConstructor is not given, then let eventConstructor be Event. + */ + if (eventConstructor === undefined) { + eventConstructor = EventImpl_1.EventImpl; } - - for (let i = 0; i < this.set.length; i++) { - if (testSet(this.set[i], version, this.options)) { - return true - } + /** + * 2. Let event be the result of creating an event given eventConstructor, + * in the relevant Realm of target. + */ + var event = event_createAnEvent(eventConstructor); + /** + * 3. Initialize event’s type attribute to e. + */ + event._type = e; + /** + * 4. Initialize any other IDL attributes of event as described in the + * invocation of this algorithm. + * _Note:_ This also allows for the isTrusted attribute to be set to false. + */ + if (idlAttributes) { + for (var key in idlAttributes) { + var idlObj = event; + idlObj[key] = idlAttributes[key]; + } } - return false - } -} -module.exports = Range - -const LRU = __webpack_require__(702) -const cache = new LRU({ max: 1000 }) - -const parseOptions = __webpack_require__(143) -const Comparator = __webpack_require__(536) -const debug = __webpack_require__(548) -const SemVer = __webpack_require__(65) -const { - re, - t, - comparatorTrimReplace, - tildeTrimReplace, - caretTrimReplace -} = __webpack_require__(976) - -const isNullSet = c => c.value === '<0.0.0-0' -const isAny = c => c.value === '' - -// take a set of comparators and determine whether there -// exists a version which can satisfy it -const isSatisfiable = (comparators, options) => { - let result = true - const remainingComparators = comparators.slice() - let testComparator = remainingComparators.pop() - - while (result && remainingComparators.length) { - result = remainingComparators.every((otherComparator) => { - return testComparator.intersects(otherComparator, options) - }) - - testComparator = remainingComparators.pop() - } - - return result -} - -// comprised of xranges, tildes, stars, and gtlt's at this point. -// already replaced the hyphen ranges -// turn into a set of JUST comparators. -const parseComparator = (comp, options) => { - debug('comp', comp, options) - comp = replaceCarets(comp, options) - debug('caret', comp) - comp = replaceTildes(comp, options) - debug('tildes', comp) - comp = replaceXRanges(comp, options) - debug('xrange', comp) - comp = replaceStars(comp, options) - debug('stars', comp) - return comp + /** + * 5. Return the result of dispatching event at target, with legacy target + * override flag set if set. + */ + return event_dispatch(event, target, legacyTargetOverrideFlag); } - -const isX = id => !id || id.toLowerCase() === 'x' || id === '*' - -// ~, ~> --> * (any, kinda silly) -// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0 -// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0 -// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0 -// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0 -// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0 -const replaceTildes = (comp, options) => - comp.trim().split(/\s+/).map((comp) => { - return replaceTilde(comp, options) - }).join(' ') - -const replaceTilde = (comp, options) => { - const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] - return comp.replace(r, (_, M, m, p, pr) => { - debug('tilde', comp, _, M, m, p, pr) - let ret - - if (isX(M)) { - ret = '' - } else if (isX(m)) { - ret = `>=${M}.0.0 <${+M + 1}.0.0-0` - } else if (isX(p)) { - // ~1.2 == >=1.2.0 <1.3.0-0 - ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0` - } else if (pr) { - debug('replaceTilde pr', pr) - ret = `>=${M}.${m}.${p}-${pr - } <${M}.${+m + 1}.0-0` - } else { - // ~1.2.3 == >=1.2.3 <1.3.0-0 - ret = `>=${M}.${m}.${p - } <${M}.${+m + 1}.0-0` +exports.event_fireAnEvent = event_fireAnEvent; +/** + * Creates an event. + * + * @param eventInterface - the name of the event interface + */ +function event_createLegacyEvent(eventInterface) { + /** + * 1. Let constructor be null. + */ + var constructor = null; + /** + * TODO: Implement in HTML DOM + * 2. If interface is an ASCII case-insensitive match for any of the strings + * in the first column in the following table, then set constructor to the + * interface in the second column on the same row as the matching string: + * + * String | Interface + * -------|---------- + * "beforeunloadevent" | BeforeUnloadEvent + * "compositionevent" | CompositionEvent + * "customevent" | CustomEvent + * "devicemotionevent" | DeviceMotionEvent + * "deviceorientationevent" | DeviceOrientationEvent + * "dragevent" | DragEvent + * "event" | Event + * "events" | Event + * "focusevent" | FocusEvent + * "hashchangeevent" | HashChangeEvent + * "htmlevents" | Event + * "keyboardevent" | KeyboardEvent + * "messageevent" | MessageEvent + * "mouseevent" | MouseEvent + * "mouseevents" | + * "storageevent" | StorageEvent + * "svgevents" | Event + * "textevent" | CompositionEvent + * "touchevent" | TouchEvent + * "uievent" | UIEvent + * "uievents" | UIEvent + */ + switch (eventInterface.toLowerCase()) { + case "beforeunloadevent": + break; + case "compositionevent": + break; + case "customevent": + constructor = CustomEventImpl_1.CustomEventImpl; + break; + case "devicemotionevent": + break; + case "deviceorientationevent": + break; + case "dragevent": + break; + case "event": + case "events": + constructor = EventImpl_1.EventImpl; + break; + case "focusevent": + break; + case "hashchangeevent": + break; + case "htmlevents": + break; + case "keyboardevent": + break; + case "messageevent": + break; + case "mouseevent": + break; + case "mouseevents": + break; + case "storageevent": + break; + case "svgevents": + break; + case "textevent": + break; + case "touchevent": + break; + case "uievent": + break; + case "uievents": + break; } - - debug('tilde return', ret) - return ret - }) -} - -// ^ --> * (any, kinda silly) -// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0 -// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0 -// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0 -// ^1.2.3 --> >=1.2.3 <2.0.0-0 -// ^1.2.0 --> >=1.2.0 <2.0.0-0 -const replaceCarets = (comp, options) => - comp.trim().split(/\s+/).map((comp) => { - return replaceCaret(comp, options) - }).join(' ') - -const replaceCaret = (comp, options) => { - debug('caret', comp, options) - const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] - const z = options.includePrerelease ? '-0' : '' - return comp.replace(r, (_, M, m, p, pr) => { - debug('caret', comp, _, M, m, p, pr) - let ret - - if (isX(M)) { - ret = '' - } else if (isX(m)) { - ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0` - } else if (isX(p)) { - if (M === '0') { - ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0` - } else { - ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0` - } - } else if (pr) { - debug('replaceCaret pr', pr) - if (M === '0') { - if (m === '0') { - ret = `>=${M}.${m}.${p}-${pr - } <${M}.${m}.${+p + 1}-0` - } else { - ret = `>=${M}.${m}.${p}-${pr - } <${M}.${+m + 1}.0-0` - } - } else { - ret = `>=${M}.${m}.${p}-${pr - } <${+M + 1}.0.0-0` - } - } else { - debug('no pr') - if (M === '0') { - if (m === '0') { - ret = `>=${M}.${m}.${p - }${z} <${M}.${m}.${+p + 1}-0` - } else { - ret = `>=${M}.${m}.${p - }${z} <${M}.${+m + 1}.0-0` - } - } else { - ret = `>=${M}.${m}.${p - } <${+M + 1}.0.0-0` - } + /** + * 3. If constructor is null, then throw a "NotSupportedError" DOMException. + */ + if (constructor === null) { + throw new DOMException_1.NotSupportedError("Event constructor not found for interface " + eventInterface + "."); } - - debug('caret return', ret) - return ret - }) + /** + * 4. If the interface indicated by constructor is not exposed on the + * relevant global object of the context object, then throw a + * "NotSupportedError" DOMException. + * _Note:_ Typically user agents disable support for touch events in some + * configurations, in which case this clause would be triggered for the + * interface TouchEvent. + */ + // TODO: Implement realms + /** + * 5. Let event be the result of creating an event given constructor. + * 6. Initialize event’s type attribute to the empty string. + * 7. Initialize event’s timeStamp attribute to a DOMHighResTimeStamp + * representing the high resolution time from the time origin to now. + * 8. Initialize event’s isTrusted attribute to false. + * 9. Unset event’s initialized flag. + */ + var event = new constructor(""); + event._type = ""; + event._timeStamp = new Date().getTime(); + event._isTrusted = false; + event._initializedFlag = false; + /** + * 10. Return event. + */ + return event; } - -const replaceXRanges = (comp, options) => { - debug('replaceXRanges', comp, options) - return comp.split(/\s+/).map((comp) => { - return replaceXRange(comp, options) - }).join(' ') +exports.event_createLegacyEvent = event_createLegacyEvent; +/** + * Getter of an event handler IDL attribute. + * + * @param eventTarget - event target + * @param name - event name + */ +function event_getterEventHandlerIDLAttribute(thisObj, name) { + /** + * 1. Let eventTarget be the result of determining the target of an event + * handler given this object and name. + * 2. If eventTarget is null, then return null. + * 3. Return the result of getting the current value of the event handler + * given eventTarget and name. + */ + var eventTarget = event_determineTheTargetOfAnEventHandler(thisObj, name); + if (eventTarget === null) + return null; + return event_getTheCurrentValueOfAnEventHandler(eventTarget, name); } - -const replaceXRange = (comp, options) => { - comp = comp.trim() - const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] - return comp.replace(r, (ret, gtlt, M, m, p, pr) => { - debug('xRange', comp, ret, gtlt, M, m, p, pr) - const xM = isX(M) - const xm = xM || isX(m) - const xp = xm || isX(p) - const anyX = xp - - if (gtlt === '=' && anyX) { - gtlt = '' +exports.event_getterEventHandlerIDLAttribute = event_getterEventHandlerIDLAttribute; +/** + * Setter of an event handler IDL attribute. + * + * @param eventTarget - event target + * @param name - event name + * @param value - event handler + */ +function event_setterEventHandlerIDLAttribute(thisObj, name, value) { + /** + * 1. Let eventTarget be the result of determining the target of an event + * handler given this object and name. + * 2. If eventTarget is null, then return. + * 3. If the given value is null, then deactivate an event handler given + * eventTarget and name. + * 4. Otherwise: + * 4.1. Let handlerMap be eventTarget's event handler map. + * 4.2. Let eventHandler be handlerMap[name]. + * 4.3. Set eventHandler's value to the given value. + * 4.4. Activate an event handler given eventTarget and name. + */ + var eventTarget = event_determineTheTargetOfAnEventHandler(thisObj, name); + if (eventTarget === null) + return; + if (value === null) { + event_deactivateAnEventHandler(eventTarget, name); } - - // if we're including prereleases in the match, then we need - // to fix this to -0, the lowest possible prerelease value - pr = options.includePrerelease ? '-0' : '' - - if (xM) { - if (gtlt === '>' || gtlt === '<') { - // nothing is allowed - ret = '<0.0.0-0' - } else { - // nothing is forbidden - ret = '*' - } - } else if (gtlt && anyX) { - // we know patch is an x, because we have any x at all. - // replace X with 0 - if (xm) { - m = 0 - } - p = 0 - - if (gtlt === '>') { - // >1 => >=2.0.0 - // >1.2 => >=1.3.0 - gtlt = '>=' - if (xm) { - M = +M + 1 - m = 0 - p = 0 - } else { - m = +m + 1 - p = 0 - } - } else if (gtlt === '<=') { - // <=0.7.x is actually <0.8.0, since any 0.7.x should - // pass. Similarly, <=7.x is actually <8.0.0, etc. - gtlt = '<' - if (xm) { - M = +M + 1 - } else { - m = +m + 1 + else { + var handlerMap = eventTarget._eventHandlerMap; + var eventHandler = handlerMap["onabort"]; + if (eventHandler !== undefined) { + eventHandler.value = value; } - } - - if (gtlt === '<') - pr = '-0' - - ret = `${gtlt + M}.${m}.${p}${pr}` - } else if (xm) { - ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0` - } else if (xp) { - ret = `>=${M}.${m}.0${pr - } <${M}.${+m + 1}.0-0` + event_activateAnEventHandler(eventTarget, name); } - - debug('xRange return', ret) - - return ret - }) } - -// Because * is AND-ed with everything else in the comparator, -// and '' means "any version", just remove the *s entirely. -const replaceStars = (comp, options) => { - debug('replaceStars', comp, options) - // Looseness is ignored here. star is always as loose as it gets! - return comp.trim().replace(re[t.STAR], '') +exports.event_setterEventHandlerIDLAttribute = event_setterEventHandlerIDLAttribute; +/** + * Determines the target of an event handler. + * + * @param eventTarget - event target + * @param name - event name + */ +function event_determineTheTargetOfAnEventHandler(eventTarget, name) { + // TODO: Implement in HTML DOM + return null; } - -const replaceGTE0 = (comp, options) => { - debug('replaceGTE0', comp, options) - return comp.trim() - .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '') +exports.event_determineTheTargetOfAnEventHandler = event_determineTheTargetOfAnEventHandler; +/** + * Gets the current value of an event handler. + * + * @param eventTarget - event target + * @param name - event name + */ +function event_getTheCurrentValueOfAnEventHandler(eventTarget, name) { + // TODO: Implement in HTML DOM + return null; } - -// This function is passed to string.replace(re[t.HYPHENRANGE]) -// M, m, patch, prerelease, build -// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 -// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do -// 1.2 - 3.4 => >=1.2.0 <3.5.0-0 -const hyphenReplace = incPr => ($0, - from, fM, fm, fp, fpr, fb, - to, tM, tm, tp, tpr, tb) => { - if (isX(fM)) { - from = '' - } else if (isX(fm)) { - from = `>=${fM}.0.0${incPr ? '-0' : ''}` - } else if (isX(fp)) { - from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}` - } else if (fpr) { - from = `>=${from}` - } else { - from = `>=${from}${incPr ? '-0' : ''}` - } - - if (isX(tM)) { - to = '' - } else if (isX(tm)) { - to = `<${+tM + 1}.0.0-0` - } else if (isX(tp)) { - to = `<${tM}.${+tm + 1}.0-0` - } else if (tpr) { - to = `<=${tM}.${tm}.${tp}-${tpr}` - } else if (incPr) { - to = `<${tM}.${tm}.${+tp + 1}-0` - } else { - to = `<=${to}` - } - - return (`${from} ${to}`).trim() +exports.event_getTheCurrentValueOfAnEventHandler = event_getTheCurrentValueOfAnEventHandler; +/** + * Activates an event handler. + * + * @param eventTarget - event target + * @param name - event name + */ +function event_activateAnEventHandler(eventTarget, name) { + // TODO: Implement in HTML DOM } - -const testSet = (set, version, options) => { - for (let i = 0; i < set.length; i++) { - if (!set[i].test(version)) { - return false - } - } - - if (version.prerelease.length && !options.includePrerelease) { - // Find the set of versions that are allowed to have prereleases - // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 - // That should allow `1.2.3-pr.2` to pass. - // However, `1.2.4-alpha.notready` should NOT be allowed, - // even though it's within the range set by the comparators. - for (let i = 0; i < set.length; i++) { - debug(set[i].semver) - if (set[i].semver === Comparator.ANY) { - continue - } - - if (set[i].semver.prerelease.length > 0) { - const allowed = set[i].semver - if (allowed.major === version.major && - allowed.minor === version.minor && - allowed.patch === version.patch) { - return true - } - } - } - - // Version has a -pre, but it's not one of the ones we like. - return false - } - - return true +exports.event_activateAnEventHandler = event_activateAnEventHandler; +/** + * Deactivates an event handler. + * + * @param eventTarget - event target + * @param name - event name + */ +function event_deactivateAnEventHandler(eventTarget, name) { + // TODO: Implement in HTML DOM } - +exports.event_deactivateAnEventHandler = event_deactivateAnEventHandler; +//# sourceMappingURL=EventAlgorithm.js.map /***/ }), -/* 125 */, -/* 126 */, -/* 127 */, -/* 128 */, -/* 129 */ -/***/ (function(module) { - -module.exports = require("child_process"); -/***/ }), -/* 130 */, -/* 131 */, -/* 132 */, -/* 133 */, -/* 134 */ -/***/ (function(__unusedmodule, exports) { +/***/ 1312: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var util_1 = __nccwpck_require__(6195); /** - * Pushes the given item to the stack. + * Flattens the given options argument. * - * @param list - a list - * @param item - an item + * @param options - options argument */ -function push(list, item) { - list.push(item); +function eventTarget_flatten(options) { + /** + * 1. If options is a boolean, then return options. + * 2. Return options’s capture. + */ + if (util_1.isBoolean(options)) { + return options; + } + else { + return options.capture || false; + } } -exports.push = push; +exports.eventTarget_flatten = eventTarget_flatten; /** - * Pops and returns an item from the stack. + * Flattens the given options argument. * - * @param list - a list + * @param options - options argument */ -function pop(list) { - return list.pop() || null; -} -exports.pop = pop; -//# sourceMappingURL=Stack.js.map - -/***/ }), -/* 135 */, -/* 136 */, -/* 137 */, -/* 138 */, -/* 139 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const core = __importStar(__webpack_require__(470)); -const io = __importStar(__webpack_require__(1)); -const fs = __importStar(__webpack_require__(747)); -const mm = __importStar(__webpack_require__(31)); -const os = __importStar(__webpack_require__(87)); -const path = __importStar(__webpack_require__(622)); -const httpm = __importStar(__webpack_require__(539)); -const semver = __importStar(__webpack_require__(550)); -const stream = __importStar(__webpack_require__(794)); -const util = __importStar(__webpack_require__(669)); -const v4_1 = __importDefault(__webpack_require__(494)); -const exec_1 = __webpack_require__(986); -const assert_1 = __webpack_require__(357); -const retry_helper_1 = __webpack_require__(979); -class HTTPError extends Error { - constructor(httpStatusCode) { - super(`Unexpected HTTP response: ${httpStatusCode}`); - this.httpStatusCode = httpStatusCode; - Object.setPrototypeOf(this, new.target.prototype); +function eventTarget_flattenMore(options) { + /** + * 1. Let capture be the result of flattening options. + * 2. Let once and passive be false. + * 3. If options is a dictionary, then set passive to options’s passive and + * once to options’s once. + * 4. Return capture, passive, and once. + */ + var capture = eventTarget_flatten(options); + var once = false; + var passive = false; + if (!util_1.isBoolean(options)) { + once = options.once || false; + passive = options.passive || false; } + return [capture, passive, once]; } -exports.HTTPError = HTTPError; -const IS_WINDOWS = process.platform === 'win32'; -const IS_MAC = process.platform === 'darwin'; -const userAgent = 'actions/tool-cache'; +exports.eventTarget_flattenMore = eventTarget_flattenMore; /** - * Download a tool from an url and stream it into a file + * Adds a new event listener. * - * @param url url of tool to download - * @param dest path to download tool - * @param auth authorization header - * @returns path to downloaded tool + * @param eventTarget - event target + * @param listener - event listener */ -function downloadTool(url, dest, auth) { - return __awaiter(this, void 0, void 0, function* () { - dest = dest || path.join(_getTempDirectory(), v4_1.default()); - yield io.mkdirP(path.dirname(dest)); - core.debug(`Downloading ${url}`); - core.debug(`Destination ${dest}`); - const maxAttempts = 3; - const minSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS', 10); - const maxSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS', 20); - const retryHelper = new retry_helper_1.RetryHelper(maxAttempts, minSeconds, maxSeconds); - return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () { - return yield downloadToolAttempt(url, dest || '', auth); - }), (err) => { - if (err instanceof HTTPError && err.httpStatusCode) { - // Don't retry anything less than 500, except 408 Request Timeout and 429 Too Many Requests - if (err.httpStatusCode < 500 && - err.httpStatusCode !== 408 && - err.httpStatusCode !== 429) { - return false; - } - } - // Otherwise retry - return true; - }); - }); +function eventTarget_addEventListener(eventTarget, listener) { + /** + * 1. If eventTarget is a ServiceWorkerGlobalScope object, its service + * worker’s script resource’s has ever been evaluated flag is set, and + * listener’s type matches the type attribute value of any of the service + * worker events, then report a warning to the console that this might not + * give the expected results. [SERVICE-WORKERS] + */ + // TODO: service worker + /** + * 2. If listener’s callback is null, then return. + */ + if (listener.callback === null) + return; + /** + * 3. If eventTarget’s event listener list does not contain an event listener + * whose type is listener’s type, callback is listener’s callback, and capture + * is listener’s capture, then append listener to eventTarget’s event listener + * list. + */ + for (var i = 0; i < eventTarget._eventListenerList.length; i++) { + var entry = eventTarget._eventListenerList[i]; + if (entry.type === listener.type && entry.callback.handleEvent === listener.callback.handleEvent + && entry.capture === listener.capture) { + return; + } + } + eventTarget._eventListenerList.push(listener); } -exports.downloadTool = downloadTool; -function downloadToolAttempt(url, dest, auth) { - return __awaiter(this, void 0, void 0, function* () { - if (fs.existsSync(dest)) { - throw new Error(`Destination file path ${dest} already exists`); +exports.eventTarget_addEventListener = eventTarget_addEventListener; +/** + * Removes an event listener. + * + * @param eventTarget - event target + * @param listener - event listener + */ +function eventTarget_removeEventListener(eventTarget, listener, index) { + /** + * 1. If eventTarget is a ServiceWorkerGlobalScope object and its service + * worker’s set of event types to handle contains type, then report a + * warning to the console that this might not give the expected results. + * [SERVICE-WORKERS] + */ + // TODO: service worker + /** + * 2. Set listener’s removed to true and remove listener from eventTarget’s + * event listener list. + */ + listener.removed = true; + eventTarget._eventListenerList.splice(index, 1); +} +exports.eventTarget_removeEventListener = eventTarget_removeEventListener; +/** + * Removes all event listeners. + * + * @param eventTarget - event target + */ +function eventTarget_removeAllEventListeners(eventTarget) { + /** + * To remove all event listeners, given an EventTarget object eventTarget, + * for each listener of eventTarget’s event listener list, remove an event + * listener with eventTarget and listener. + */ + var e_1, _a; + try { + for (var _b = __values(eventTarget._eventListenerList), _c = _b.next(); !_c.done; _c = _b.next()) { + var e = _c.value; + e.removed = true; } - // Get the response headers - const http = new httpm.HttpClient(userAgent, [], { - allowRetries: false - }); - let headers; - if (auth) { - core.debug('set auth'); - headers = { - authorization: auth - }; + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } - const response = yield http.get(url, headers); - if (response.message.statusCode !== 200) { - const err = new HTTPError(response.message.statusCode); - core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); - throw err; + finally { if (e_1) throw e_1.error; } + } + eventTarget._eventListenerList.length = 0; +} +exports.eventTarget_removeAllEventListeners = eventTarget_removeAllEventListeners; +//# sourceMappingURL=EventTargetAlgorithm.js.map + +/***/ }), + +/***/ 5463: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; } - // Download the response body - const pipeline = util.promisify(stream.pipeline); - const responseMessageFactory = _getGlobal('TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY', () => response.message); - const readStream = responseMessageFactory(); - let succeeded = false; + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { try { - yield pipeline(readStream, fs.createWriteStream(dest)); - core.debug('download complete'); - succeeded = true; - return dest; + if (r && !r.done && (m = i["return"])) m.call(i); } - finally { - // Error, delete dest before retry - if (!succeeded) { - core.debug('download failed'); + finally { if (e) throw e.error; } + } + return ar; +}; +var __spread = (this && this.__spread) || function () { + for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); + return ar; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var DOMException_1 = __nccwpck_require__(3166); +var interfaces_1 = __nccwpck_require__(7305); +var util_1 = __nccwpck_require__(5282); +var util_2 = __nccwpck_require__(6195); +var infra_1 = __nccwpck_require__(4251); +var CustomElementAlgorithm_1 = __nccwpck_require__(5648); +var TreeAlgorithm_1 = __nccwpck_require__(6620); +var NodeIteratorAlgorithm_1 = __nccwpck_require__(3973); +var ShadowTreeAlgorithm_1 = __nccwpck_require__(8733); +var MutationObserverAlgorithm_1 = __nccwpck_require__(8157); +var DOMAlgorithm_1 = __nccwpck_require__(9628); +var DocumentAlgorithm_1 = __nccwpck_require__(2793); +/** + * Ensures pre-insertion validity of a node into a parent before a + * child. + * + * @param node - node to insert + * @param parent - parent node to receive node + * @param child - child node to insert node before + */ +function mutation_ensurePreInsertionValidity(node, parent, child) { + var e_1, _a, e_2, _b, e_3, _c, e_4, _d; + var parentNodeType = parent._nodeType; + var nodeNodeType = node._nodeType; + var childNodeType = child ? child._nodeType : null; + /** + * 1. If parent is not a Document, DocumentFragment, or Element node, + * throw a "HierarchyRequestError" DOMException. + */ + if (parentNodeType !== interfaces_1.NodeType.Document && + parentNodeType !== interfaces_1.NodeType.DocumentFragment && + parentNodeType !== interfaces_1.NodeType.Element) + throw new DOMException_1.HierarchyRequestError("Only document, document fragment and element nodes can contain child nodes. Parent node is " + parent.nodeName + "."); + /** + * 2. If node is a host-including inclusive ancestor of parent, throw a + * "HierarchyRequestError" DOMException. + */ + if (TreeAlgorithm_1.tree_isHostIncludingAncestorOf(parent, node, true)) + throw new DOMException_1.HierarchyRequestError("The node to be inserted cannot be an inclusive ancestor of parent node. Node is " + node.nodeName + ", parent node is " + parent.nodeName + "."); + /** + * 3. If child is not null and its parent is not parent, then throw a + * "NotFoundError" DOMException. + */ + if (child !== null && child._parent !== parent) + throw new DOMException_1.NotFoundError("The reference child node cannot be found under parent node. Child node is " + child.nodeName + ", parent node is " + parent.nodeName + "."); + /** + * 4. If node is not a DocumentFragment, DocumentType, Element, Text, + * ProcessingInstruction, or Comment node, throw a "HierarchyRequestError" + * DOMException. + */ + if (nodeNodeType !== interfaces_1.NodeType.DocumentFragment && + nodeNodeType !== interfaces_1.NodeType.DocumentType && + nodeNodeType !== interfaces_1.NodeType.Element && + nodeNodeType !== interfaces_1.NodeType.Text && + nodeNodeType !== interfaces_1.NodeType.ProcessingInstruction && + nodeNodeType !== interfaces_1.NodeType.CData && + nodeNodeType !== interfaces_1.NodeType.Comment) + throw new DOMException_1.HierarchyRequestError("Only document fragment, document type, element, text, processing instruction, cdata section or comment nodes can be inserted. Node is " + node.nodeName + "."); + /** + * 5. If either node is a Text node and parent is a document, or node is a + * doctype and parent is not a document, throw a "HierarchyRequestError" + * DOMException. + */ + if (nodeNodeType === interfaces_1.NodeType.Text && + parentNodeType === interfaces_1.NodeType.Document) + throw new DOMException_1.HierarchyRequestError("Cannot insert a text node as a child of a document node. Node is " + node.nodeName + "."); + if (nodeNodeType === interfaces_1.NodeType.DocumentType && + parentNodeType !== interfaces_1.NodeType.Document) + throw new DOMException_1.HierarchyRequestError("A document type node can only be inserted under a document node. Parent node is " + parent.nodeName + "."); + /** + * 6. If parent is a document, and any of the statements below, switched on + * node, are true, throw a "HierarchyRequestError" DOMException. + * - DocumentFragment node + * If node has more than one element child or has a Text node child. + * Otherwise, if node has one element child and either parent has an element + * child, child is a doctype, or child is not null and a doctype is + * following child. + * - element + * parent has an element child, child is a doctype, or child is not null and + * a doctype is following child. + * - doctype + * parent has a doctype child, child is non-null and an element is preceding + * child, or child is null and parent has an element child. + */ + if (parentNodeType === interfaces_1.NodeType.Document) { + if (nodeNodeType === interfaces_1.NodeType.DocumentFragment) { + var eleCount = 0; + try { + for (var _e = __values(node._children), _f = _e.next(); !_f.done; _f = _e.next()) { + var childNode = _f.value; + if (childNode._nodeType === interfaces_1.NodeType.Element) + eleCount++; + else if (childNode._nodeType === interfaces_1.NodeType.Text) + throw new DOMException_1.HierarchyRequestError("Cannot insert text a node as a child of a document node. Node is " + childNode.nodeName + "."); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { try { - yield io.rmRF(dest); + if (_f && !_f.done && (_a = _e.return)) _a.call(_e); } - catch (err) { - core.debug(`Failed to delete '${dest}'. ${err.message}`); + finally { if (e_1) throw e_1.error; } + } + if (eleCount > 1) { + throw new DOMException_1.HierarchyRequestError("A document node can only have one document element node. Document fragment to be inserted has " + eleCount + " element nodes."); + } + else if (eleCount === 1) { + try { + for (var _g = __values(parent._children), _h = _g.next(); !_h.done; _h = _g.next()) { + var ele = _h.value; + if (ele._nodeType === interfaces_1.NodeType.Element) + throw new DOMException_1.HierarchyRequestError("The document node already has a document element node."); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_h && !_h.done && (_b = _g.return)) _b.call(_g); + } + finally { if (e_2) throw e_2.error; } + } + if (child) { + if (childNodeType === interfaces_1.NodeType.DocumentType) + throw new DOMException_1.HierarchyRequestError("Cannot insert an element node before a document type node."); + var doctypeChild = child._nextSibling; + while (doctypeChild) { + if (doctypeChild._nodeType === interfaces_1.NodeType.DocumentType) + throw new DOMException_1.HierarchyRequestError("Cannot insert an element node before a document type node."); + doctypeChild = doctypeChild._nextSibling; + } } } } - }); -} -/** - * Extract a .7z file - * - * @param file path to the .7z file - * @param dest destination directory. Optional. - * @param _7zPath path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this - * problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will - * gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is - * bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line - * interface, it is smaller than the full command line interface, and it does support long paths. At the - * time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website. - * Be sure to check the current license agreement. If 7zr.exe is bundled with your action, then the path - * to 7zr.exe can be pass to this function. - * @returns path to the destination directory - */ -function extract7z(file, dest, _7zPath) { - return __awaiter(this, void 0, void 0, function* () { - assert_1.ok(IS_WINDOWS, 'extract7z() not supported on current OS'); - assert_1.ok(file, 'parameter "file" is required'); - dest = yield _createExtractFolder(dest); - const originalCwd = process.cwd(); - process.chdir(dest); - if (_7zPath) { + else if (nodeNodeType === interfaces_1.NodeType.Element) { try { - const logLevel = core.isDebug() ? '-bb1' : '-bb0'; - const args = [ - 'x', - logLevel, - '-bd', - '-sccUTF-8', - file - ]; - const options = { - silent: true - }; - yield exec_1.exec(`"${_7zPath}"`, args, options); + for (var _j = __values(parent._children), _k = _j.next(); !_k.done; _k = _j.next()) { + var ele = _k.value; + if (ele._nodeType === interfaces_1.NodeType.Element) + throw new DOMException_1.HierarchyRequestError("Document already has a document element node. Node is " + node.nodeName + "."); + } } + catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { - process.chdir(originalCwd); + try { + if (_k && !_k.done && (_c = _j.return)) _c.call(_j); + } + finally { if (e_3) throw e_3.error; } + } + if (child) { + if (childNodeType === interfaces_1.NodeType.DocumentType) + throw new DOMException_1.HierarchyRequestError("Cannot insert an element node before a document type node. Node is " + node.nodeName + "."); + var doctypeChild = child._nextSibling; + while (doctypeChild) { + if (doctypeChild._nodeType === interfaces_1.NodeType.DocumentType) + throw new DOMException_1.HierarchyRequestError("Cannot insert an element node before a document type node. Node is " + node.nodeName + "."); + doctypeChild = doctypeChild._nextSibling; + } } } - else { - const escapedScript = path - .join(__dirname, '..', 'scripts', 'Invoke-7zdec.ps1') - .replace(/'/g, "''") - .replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines - const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); - const escapedTarget = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); - const command = `& '${escapedScript}' -Source '${escapedFile}' -Target '${escapedTarget}'`; - const args = [ - '-NoLogo', - '-Sta', - '-NoProfile', - '-NonInteractive', - '-ExecutionPolicy', - 'Unrestricted', - '-Command', - command - ]; - const options = { - silent: true - }; + else if (nodeNodeType === interfaces_1.NodeType.DocumentType) { try { - const powershellPath = yield io.which('powershell', true); - yield exec_1.exec(`"${powershellPath}"`, args, options); + for (var _l = __values(parent._children), _m = _l.next(); !_m.done; _m = _l.next()) { + var ele = _m.value; + if (ele._nodeType === interfaces_1.NodeType.DocumentType) + throw new DOMException_1.HierarchyRequestError("Document already has a document type node. Node is " + node.nodeName + "."); + } } + catch (e_4_1) { e_4 = { error: e_4_1 }; } finally { - process.chdir(originalCwd); + try { + if (_m && !_m.done && (_d = _l.return)) _d.call(_l); + } + finally { if (e_4) throw e_4.error; } + } + if (child) { + var elementChild = child._previousSibling; + while (elementChild) { + if (elementChild._nodeType === interfaces_1.NodeType.Element) + throw new DOMException_1.HierarchyRequestError("Cannot insert a document type node before an element node. Node is " + node.nodeName + "."); + elementChild = elementChild._previousSibling; + } + } + else { + var elementChild = parent._firstChild; + while (elementChild) { + if (elementChild._nodeType === interfaces_1.NodeType.Element) + throw new DOMException_1.HierarchyRequestError("Cannot insert a document type node before an element node. Node is " + node.nodeName + "."); + elementChild = elementChild._nextSibling; + } } } - return dest; - }); + } } -exports.extract7z = extract7z; +exports.mutation_ensurePreInsertionValidity = mutation_ensurePreInsertionValidity; /** - * Extract a compressed tar archive + * Ensures pre-insertion validity of a node into a parent before a + * child, then adopts the node to the tree and inserts it. * - * @param file path to the tar - * @param dest destination directory. Optional. - * @param flags flags for the tar command to use for extraction. Defaults to 'xz' (extracting gzipped tars). Optional. - * @returns path to the destination directory + * @param node - node to insert + * @param parent - parent node to receive node + * @param child - child node to insert node before */ -function extractTar(file, dest, flags = 'xz') { - return __awaiter(this, void 0, void 0, function* () { - if (!file) { - throw new Error("parameter 'file' is required"); - } - // Create dest - dest = yield _createExtractFolder(dest); - // Determine whether GNU tar - core.debug('Checking tar --version'); - let versionOutput = ''; - yield exec_1.exec('tar --version', [], { - ignoreReturnCode: true, - silent: true, - listeners: { - stdout: (data) => (versionOutput += data.toString()), - stderr: (data) => (versionOutput += data.toString()) - } - }); - core.debug(versionOutput.trim()); - const isGnuTar = versionOutput.toUpperCase().includes('GNU TAR'); - // Initialize args - let args; - if (flags instanceof Array) { - args = flags; - } - else { - args = [flags]; - } - if (core.isDebug() && !flags.includes('v')) { - args.push('-v'); - } - let destArg = dest; - let fileArg = file; - if (IS_WINDOWS && isGnuTar) { - args.push('--force-local'); - destArg = dest.replace(/\\/g, '/'); - // Technically only the dest needs to have `/` but for aesthetic consistency - // convert slashes in the file arg too. - fileArg = file.replace(/\\/g, '/'); - } - if (isGnuTar) { - // Suppress warnings when using GNU tar to extract archives created by BSD tar - args.push('--warning=no-unknown-keyword'); - } - args.push('-C', destArg, '-f', fileArg); - yield exec_1.exec(`tar`, args); - return dest; - }); +function mutation_preInsert(node, parent, child) { + /** + * 1. Ensure pre-insertion validity of node into parent before child. + * 2. Let reference child be child. + * 3. If reference child is node, set it to node’s next sibling. + * 4. Adopt node into parent’s node document. + * 5. Insert node into parent before reference child. + * 6. Return node. + */ + mutation_ensurePreInsertionValidity(node, parent, child); + var referenceChild = child; + if (referenceChild === node) + referenceChild = node._nextSibling; + DocumentAlgorithm_1.document_adopt(node, parent._nodeDocument); + mutation_insert(node, parent, referenceChild); + return node; } -exports.extractTar = extractTar; +exports.mutation_preInsert = mutation_preInsert; /** - * Extract a xar compatible archive + * Inserts a node into a parent node before the given child node. * - * @param file path to the archive - * @param dest destination directory. Optional. - * @param flags flags for the xar. Optional. - * @returns path to the destination directory + * @param node - node to insert + * @param parent - parent node to receive node + * @param child - child node to insert node before + * @param suppressObservers - whether to notify observers */ -function extractXar(file, dest, flags = []) { - return __awaiter(this, void 0, void 0, function* () { - assert_1.ok(IS_MAC, 'extractXar() not supported on current OS'); - assert_1.ok(file, 'parameter "file" is required'); - dest = yield _createExtractFolder(dest); - let args; - if (flags instanceof Array) { - args = flags; +function mutation_insert(node, parent, child, suppressObservers) { + var e_5, _a; + // Optimized common case + if (child === null && node._nodeType !== interfaces_1.NodeType.DocumentFragment) { + mutation_insert_single(node, parent, suppressObservers); + return; + } + /** + * 1. Let count be the number of children of node if it is a + * DocumentFragment node, and one otherwise. + */ + var count = (node._nodeType === interfaces_1.NodeType.DocumentFragment ? + node._children.size : 1); + /** + * 2. If child is non-null, then: + */ + if (child !== null) { + /** + * 2.1. For each live range whose start node is parent and start + * offset is greater than child's index, increase its start + * offset by count. + * 2.2. For each live range whose end node is parent and end + * offset is greater than child's index, increase its end + * offset by count. + */ + if (DOMImpl_1.dom.rangeList.size !== 0) { + var index_1 = TreeAlgorithm_1.tree_index(child); + try { + for (var _b = __values(DOMImpl_1.dom.rangeList), _c = _b.next(); !_c.done; _c = _b.next()) { + var range = _c.value; + if (range._start[0] === parent && range._start[1] > index_1) { + range._start[1] += count; + } + if (range._end[0] === parent && range._end[1] > index_1) { + range._end[1] += count; + } + } + } + catch (e_5_1) { e_5 = { error: e_5_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_5) throw e_5.error; } + } } - else { - args = [flags]; + } + /** + * 3. Let nodes be node’s children, if node is a DocumentFragment node; + * otherwise « node ». + */ + var nodes = node._nodeType === interfaces_1.NodeType.DocumentFragment ? new (Array.bind.apply(Array, __spread([void 0], node._children)))() : [node]; + /** + * 4. If node is a DocumentFragment node, remove its children with the + * suppress observers flag set. + */ + if (node._nodeType === interfaces_1.NodeType.DocumentFragment) { + while (node._firstChild) { + mutation_remove(node._firstChild, node, true); } - args.push('-x', '-C', dest, '-f', file); - if (core.isDebug()) { - args.push('-v'); + } + /** + * 5. If node is a DocumentFragment node, then queue a tree mutation record + * for node with « », nodes, null, and null. + */ + if (DOMImpl_1.dom.features.mutationObservers) { + if (node._nodeType === interfaces_1.NodeType.DocumentFragment) { + MutationObserverAlgorithm_1.observer_queueTreeMutationRecord(node, [], nodes, null, null); } - const xarPath = yield io.which('xar', true); - yield exec_1.exec(`"${xarPath}"`, _unique(args)); - return dest; - }); -} -exports.extractXar = extractXar; -/** - * Extract a zip - * - * @param file path to the zip - * @param dest destination directory. Optional. - * @returns path to the destination directory - */ -function extractZip(file, dest) { - return __awaiter(this, void 0, void 0, function* () { - if (!file) { - throw new Error("parameter 'file' is required"); + } + /** + * 6. Let previousSibling be child’s previous sibling or parent’s last + * child if child is null. + */ + var previousSibling = (child ? child._previousSibling : parent._lastChild); + var index = child === null ? -1 : TreeAlgorithm_1.tree_index(child); + /** + * 7. For each node in nodes, in tree order: + */ + for (var i = 0; i < nodes.length; i++) { + var node_1 = nodes[i]; + if (util_1.Guard.isElementNode(node_1)) { + // set document element node + if (util_1.Guard.isDocumentNode(parent)) { + parent._documentElement = node_1; + } + // mark that the document has namespaces + if (!node_1._nodeDocument._hasNamespaces && (node_1._namespace !== null || + node_1._namespacePrefix !== null)) { + node_1._nodeDocument._hasNamespaces = true; + } } - dest = yield _createExtractFolder(dest); - if (IS_WINDOWS) { - yield extractZipWin(file, dest); + /** + * 7.1. If child is null, then append node to parent’s children. + * 7.2. Otherwise, insert node into parent’s children before child’s + * index. + */ + node_1._parent = parent; + if (child === null) { + infra_1.set.append(parent._children, node_1); } else { - yield extractZipNix(file, dest); - } - return dest; - }); -} -exports.extractZip = extractZip; -function extractZipWin(file, dest) { - return __awaiter(this, void 0, void 0, function* () { - // build the powershell command - const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines - const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); - const command = `$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}')`; - // run powershell - const powershellPath = yield io.which('powershell', true); - const args = [ - '-NoLogo', - '-Sta', - '-NoProfile', - '-NonInteractive', - '-ExecutionPolicy', - 'Unrestricted', - '-Command', - command - ]; - yield exec_1.exec(`"${powershellPath}"`, args); - }); -} -function extractZipNix(file, dest) { - return __awaiter(this, void 0, void 0, function* () { - const unzipPath = yield io.which('unzip', true); - const args = [file]; - if (!core.isDebug()) { - args.unshift('-q'); - } - yield exec_1.exec(`"${unzipPath}"`, args, { cwd: dest }); - }); -} -/** - * Caches a directory and installs it into the tool cacheDir - * - * @param sourceDir the directory to cache into tools - * @param tool tool name - * @param version version of the tool. semver format - * @param arch architecture of the tool. Optional. Defaults to machine architecture - */ -function cacheDir(sourceDir, tool, version, arch) { - return __awaiter(this, void 0, void 0, function* () { - version = semver.clean(version) || version; - arch = arch || os.arch(); - core.debug(`Caching tool ${tool} ${version} ${arch}`); - core.debug(`source dir: ${sourceDir}`); - if (!fs.statSync(sourceDir).isDirectory()) { - throw new Error('sourceDir is not a directory'); - } - // Create the tool dir - const destPath = yield _createToolPath(tool, version, arch); - // copy each child item. do not move. move can fail on Windows - // due to anti-virus software having an open handle on a file. - for (const itemName of fs.readdirSync(sourceDir)) { - const s = path.join(sourceDir, itemName); - yield io.cp(s, destPath, { recursive: true }); - } - // write .complete - _completeToolPath(tool, version, arch); - return destPath; - }); -} -exports.cacheDir = cacheDir; -/** - * Caches a downloaded file (GUID) and installs it - * into the tool cache with a given targetName - * - * @param sourceFile the file to cache into tools. Typically a result of downloadTool which is a guid. - * @param targetFile the name of the file name in the tools directory - * @param tool tool name - * @param version version of the tool. semver format - * @param arch architecture of the tool. Optional. Defaults to machine architecture - */ -function cacheFile(sourceFile, targetFile, tool, version, arch) { - return __awaiter(this, void 0, void 0, function* () { - version = semver.clean(version) || version; - arch = arch || os.arch(); - core.debug(`Caching tool ${tool} ${version} ${arch}`); - core.debug(`source file: ${sourceFile}`); - if (!fs.statSync(sourceFile).isFile()) { - throw new Error('sourceFile is not a file'); + infra_1.set.insert(parent._children, node_1, index); + index++; } - // create the tool dir - const destFolder = yield _createToolPath(tool, version, arch); - // copy instead of move. move can fail on Windows due to - // anti-virus software having an open handle on a file. - const destPath = path.join(destFolder, targetFile); - core.debug(`destination file ${destPath}`); - yield io.cp(sourceFile, destPath); - // write .complete - _completeToolPath(tool, version, arch); - return destFolder; - }); -} -exports.cacheFile = cacheFile; -/** - * Finds the path to a tool version in the local installed tool cache - * - * @param toolName name of the tool - * @param versionSpec version of the tool - * @param arch optional arch. defaults to arch of computer - */ -function find(toolName, versionSpec, arch) { - if (!toolName) { - throw new Error('toolName parameter is required'); - } - if (!versionSpec) { - throw new Error('versionSpec parameter is required'); - } - arch = arch || os.arch(); - // attempt to resolve an explicit version - if (!_isExplicitVersion(versionSpec)) { - const localVersions = findAllVersions(toolName, arch); - const match = _evaluateVersions(localVersions, versionSpec); - versionSpec = match; - } - // check for the explicit version in the cache - let toolPath = ''; - if (versionSpec) { - versionSpec = semver.clean(versionSpec) || ''; - const cachePath = path.join(_getCacheDirectory(), toolName, versionSpec, arch); - core.debug(`checking cache: ${cachePath}`); - if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) { - core.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch}`); - toolPath = cachePath; + // assign siblings and children for quick lookups + if (parent._firstChild === null) { + node_1._previousSibling = null; + node_1._nextSibling = null; + parent._firstChild = node_1; + parent._lastChild = node_1; } else { - core.debug('not found'); + var prev = (child ? child._previousSibling : parent._lastChild); + var next = (child ? child : null); + node_1._previousSibling = prev; + node_1._nextSibling = next; + if (prev) + prev._nextSibling = node_1; + if (next) + next._previousSibling = node_1; + if (!prev) + parent._firstChild = node_1; + if (!next) + parent._lastChild = node_1; } - } - return toolPath; -} -exports.find = find; -/** - * Finds the paths to all versions of a tool that are installed in the local tool cache - * - * @param toolName name of the tool - * @param arch optional arch. defaults to arch of computer - */ -function findAllVersions(toolName, arch) { - const versions = []; - arch = arch || os.arch(); - const toolPath = path.join(_getCacheDirectory(), toolName); - if (fs.existsSync(toolPath)) { - const children = fs.readdirSync(toolPath); - for (const child of children) { - if (_isExplicitVersion(child)) { - const fullPath = path.join(toolPath, child, arch || ''); - if (fs.existsSync(fullPath) && fs.existsSync(`${fullPath}.complete`)) { - versions.push(child); - } + /** + * 7.3. If parent is a shadow host and node is a slotable, then + * assign a slot for node. + */ + if (DOMImpl_1.dom.features.slots) { + if (parent._shadowRoot !== null && util_1.Guard.isSlotable(node_1)) { + ShadowTreeAlgorithm_1.shadowTree_assignASlot(node_1); } } - } - return versions; -} -exports.findAllVersions = findAllVersions; -function getManifestFromRepo(owner, repo, auth, branch = 'master') { - return __awaiter(this, void 0, void 0, function* () { - let releases = []; - const treeUrl = `https://api.github.com/repos/${owner}/${repo}/git/trees/${branch}`; - const http = new httpm.HttpClient('tool-cache'); - const headers = {}; - if (auth) { - core.debug('set auth'); - headers.authorization = auth; - } - const response = yield http.getJson(treeUrl, headers); - if (!response.result) { - return releases; - } - let manifestUrl = ''; - for (const item of response.result.tree) { - if (item.path === 'versions-manifest.json') { - manifestUrl = item.url; - break; + /** + * 7.4. If node is a Text node, run the child text content change + * steps for parent. + */ + if (DOMImpl_1.dom.features.steps) { + if (util_1.Guard.isTextNode(node_1)) { + DOMAlgorithm_1.dom_runChildTextContentChangeSteps(parent); } } - headers['accept'] = 'application/vnd.github.VERSION.raw'; - let versionsRaw = yield (yield http.get(manifestUrl, headers)).readBody(); - if (versionsRaw) { - // shouldn't be needed but protects against invalid json saved with BOM - versionsRaw = versionsRaw.replace(/^\uFEFF/, ''); - try { - releases = JSON.parse(versionsRaw); - } - catch (_a) { - core.debug('Invalid json'); + /** + * 7.5. If parent's root is a shadow root, and parent is a slot + * whose assigned nodes is the empty list, then run signal + * a slot change for parent. + */ + if (DOMImpl_1.dom.features.slots) { + if (util_1.Guard.isShadowRoot(TreeAlgorithm_1.tree_rootNode(parent)) && + util_1.Guard.isSlot(parent) && util_2.isEmpty(parent._assignedNodes)) { + ShadowTreeAlgorithm_1.shadowTree_signalASlotChange(parent); } } - return releases; - }); -} -exports.getManifestFromRepo = getManifestFromRepo; -function findFromManifest(versionSpec, stable, manifest, archFilter = os.arch()) { - return __awaiter(this, void 0, void 0, function* () { - // wrap the internal impl - const match = yield mm._findMatch(versionSpec, stable, manifest, archFilter); - return match; - }); -} -exports.findFromManifest = findFromManifest; -function _createExtractFolder(dest) { - return __awaiter(this, void 0, void 0, function* () { - if (!dest) { - // create a temp dir - dest = path.join(_getTempDirectory(), v4_1.default()); - } - yield io.mkdirP(dest); - return dest; - }); -} -function _createToolPath(tool, version, arch) { - return __awaiter(this, void 0, void 0, function* () { - const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); - core.debug(`destination ${folderPath}`); - const markerPath = `${folderPath}.complete`; - yield io.rmRF(folderPath); - yield io.rmRF(markerPath); - yield io.mkdirP(folderPath); - return folderPath; - }); -} -function _completeToolPath(tool, version, arch) { - const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); - const markerPath = `${folderPath}.complete`; - fs.writeFileSync(markerPath, ''); - core.debug('finished caching tool'); -} -function _isExplicitVersion(versionSpec) { - const c = semver.clean(versionSpec) || ''; - core.debug(`isExplicit: ${c}`); - const valid = semver.valid(c) != null; - core.debug(`explicit? ${valid}`); - return valid; -} -function _evaluateVersions(versions, versionSpec) { - let version = ''; - core.debug(`evaluating ${versions.length} versions`); - versions = versions.sort((a, b) => { - if (semver.gt(a, b)) { - return 1; + /** + * 7.6. Run assign slotables for a tree with node's root. + */ + if (DOMImpl_1.dom.features.slots) { + ShadowTreeAlgorithm_1.shadowTree_assignSlotablesForATree(TreeAlgorithm_1.tree_rootNode(node_1)); } - return -1; - }); - for (let i = versions.length - 1; i >= 0; i--) { - const potential = versions[i]; - const satisfied = semver.satisfies(potential, versionSpec); - if (satisfied) { - version = potential; - break; + /** + * 7.7. For each shadow-including inclusive descendant + * inclusiveDescendant of node, in shadow-including tree + * order: + */ + var inclusiveDescendant = TreeAlgorithm_1.tree_getFirstDescendantNode(node_1, true, true); + while (inclusiveDescendant !== null) { + /** + * 7.7.1. Run the insertion steps with inclusiveDescendant. + */ + if (DOMImpl_1.dom.features.steps) { + DOMAlgorithm_1.dom_runInsertionSteps(inclusiveDescendant); + } + if (DOMImpl_1.dom.features.customElements) { + /** + * 7.7.2. If inclusiveDescendant is connected, then: + */ + if (util_1.Guard.isElementNode(inclusiveDescendant) && + ShadowTreeAlgorithm_1.shadowTree_isConnected(inclusiveDescendant)) { + if (util_1.Guard.isCustomElementNode(inclusiveDescendant)) { + /** + * 7.7.2.1. If inclusiveDescendant is custom, then enqueue a custom + * element callback reaction with inclusiveDescendant, callback name + * "connectedCallback", and an empty argument list. + */ + CustomElementAlgorithm_1.customElement_enqueueACustomElementCallbackReaction(inclusiveDescendant, "connectedCallback", []); + } + else { + /** + * 7.7.2.2. Otherwise, try to upgrade inclusiveDescendant. + */ + CustomElementAlgorithm_1.customElement_tryToUpgrade(inclusiveDescendant); + } + } + } + inclusiveDescendant = TreeAlgorithm_1.tree_getNextDescendantNode(node_1, inclusiveDescendant, true, true); } } - if (version) { - core.debug(`matched: ${version}`); - } - else { - core.debug('match not found'); + /** + * 8. If suppress observers flag is unset, then queue a tree mutation record + * for parent with nodes, « », previousSibling, and child. + */ + if (DOMImpl_1.dom.features.mutationObservers) { + if (!suppressObservers) { + MutationObserverAlgorithm_1.observer_queueTreeMutationRecord(parent, nodes, [], previousSibling, child); + } } - return version; } +exports.mutation_insert = mutation_insert; /** - * Gets RUNNER_TOOL_CACHE + * Inserts a node into a parent node. Optimized routine for the common case where + * node is not a document fragment node and it has no child nodes. + * + * @param node - node to insert + * @param parent - parent node to receive node + * @param suppressObservers - whether to notify observers */ -function _getCacheDirectory() { - const cacheDirectory = process.env['RUNNER_TOOL_CACHE'] || ''; - assert_1.ok(cacheDirectory, 'Expected RUNNER_TOOL_CACHE to be defined'); - return cacheDirectory; -} -/** - * Gets RUNNER_TEMP - */ -function _getTempDirectory() { - const tempDirectory = process.env['RUNNER_TEMP'] || ''; - assert_1.ok(tempDirectory, 'Expected RUNNER_TEMP to be defined'); - return tempDirectory; -} -/** - * Gets a global variable - */ -function _getGlobal(key, defaultValue) { - /* eslint-disable @typescript-eslint/no-explicit-any */ - const value = global[key]; - /* eslint-enable @typescript-eslint/no-explicit-any */ - return value !== undefined ? value : defaultValue; -} -/** - * Returns an array of unique values. - * @param values Values to make unique. - */ -function _unique(values) { - return Array.from(new Set(values)); -} -//# sourceMappingURL=tool-cache.js.map - -/***/ }), -/* 140 */, -/* 141 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - - -var net = __webpack_require__(631); -var tls = __webpack_require__(818); -var http = __webpack_require__(605); -var https = __webpack_require__(34); -var events = __webpack_require__(614); -var assert = __webpack_require__(357); -var util = __webpack_require__(669); - - -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 mutation_insert_single(node, parent, suppressObservers) { + /** + * 1. Let count be the number of children of node if it is a + * DocumentFragment node, and one otherwise. + * 2. If child is non-null, then: + * 2.1. For each live range whose start node is parent and start + * offset is greater than child's index, increase its start + * offset by count. + * 2.2. For each live range whose end node is parent and end + * offset is greater than child's index, increase its end + * offset by count. + * 3. Let nodes be node’s children, if node is a DocumentFragment node; + * otherwise « node ». + * 4. If node is a DocumentFragment node, remove its children with the + * suppress observers flag set. + * 5. If node is a DocumentFragment node, then queue a tree mutation record + * for node with « », nodes, null, and null. + */ + /** + * 6. Let previousSibling be child’s previous sibling or parent’s last + * child if child is null. + */ + var previousSibling = parent._lastChild; + // set document element node + if (util_1.Guard.isElementNode(node)) { + // set document element node + if (util_1.Guard.isDocumentNode(parent)) { + parent._documentElement = node; + } + // mark that the document has namespaces + if (!node._nodeDocument._hasNamespaces && (node._namespace !== null || + node._namespacePrefix !== null)) { + node._nodeDocument._hasNamespaces = true; + } } - - function onCloseOrRemove(err) { - self.removeSocket(socket); - socket.removeListener('free', onFree); - socket.removeListener('close', onCloseOrRemove); - socket.removeListener('agentRemove', onCloseOrRemove); + /** + * 7. For each node in nodes, in tree order: + * 7.1. If child is null, then append node to parent’s children. + * 7.2. Otherwise, insert node into parent’s children before child’s + * index. + */ + node._parent = parent; + parent._children.add(node); + // assign siblings and children for quick lookups + if (parent._firstChild === null) { + node._previousSibling = null; + node._nextSibling = null; + parent._firstChild = node; + parent._lastChild = node; } - }); -}; - -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 + else { + var prev = parent._lastChild; + node._previousSibling = prev; + node._nextSibling = null; + if (prev) + prev._nextSibling = node; + if (!prev) + parent._firstChild = node; + parent._lastChild = node; } - }); - 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; + /** + * 7.3. If parent is a shadow host and node is a slotable, then + * assign a slot for node. + */ + if (DOMImpl_1.dom.features.slots) { + if (parent._shadowRoot !== null && util_1.Guard.isSlotable(node)) { + ShadowTreeAlgorithm_1.shadowTree_assignASlot(node); + } } - 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; + /** + * 7.4. If node is a Text node, run the child text content change + * steps for parent. + */ + if (DOMImpl_1.dom.features.steps) { + if (util_1.Guard.isTextNode(node)) { + DOMAlgorithm_1.dom_runChildTextContentChangeSteps(parent); + } } - 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]; + /** + * 7.5. If parent's root is a shadow root, and parent is a slot + * whose assigned nodes is the empty list, then run signal + * a slot change for parent. + */ + if (DOMImpl_1.dom.features.slots) { + if (util_1.Guard.isShadowRoot(TreeAlgorithm_1.tree_rootNode(parent)) && + util_1.Guard.isSlot(parent) && util_2.isEmpty(parent._assignedNodes)) { + ShadowTreeAlgorithm_1.shadowTree_signalASlotChange(parent); } - } } - } - 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:'); + /** + * 7.6. Run assign slotables for a tree with node's root. + */ + if (DOMImpl_1.dom.features.slots) { + ShadowTreeAlgorithm_1.shadowTree_assignSlotablesForATree(TreeAlgorithm_1.tree_rootNode(node)); } - console.error.apply(console, args); - } -} else { - debug = function() {}; -} -exports.debug = debug; // for test - - -/***/ }), -/* 142 */, -/* 143 */ -/***/ (function(module) { - -// parse out just the options we care about so we always get a consistent -// obj with keys in a consistent order. -const opts = ['includePrerelease', 'loose', 'rtl'] -const parseOptions = options => - !options ? {} - : typeof options !== 'object' ? { loose: true } - : opts.filter(k => options[k]).reduce((options, k) => { - options[k] = true - return options - }, {}) -module.exports = parseOptions - - -/***/ }), -/* 144 */ -/***/ (function(__unusedmodule, exports, __webpack_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.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.LocalDistribution = void 0; -const tc = __importStar(__webpack_require__(139)); -const core = __importStar(__webpack_require__(470)); -const fs_1 = __importDefault(__webpack_require__(747)); -const path_1 = __importDefault(__webpack_require__(622)); -const base_installer_1 = __webpack_require__(83); -const util_1 = __webpack_require__(322); -const constants_1 = __webpack_require__(211); -class LocalDistribution extends base_installer_1.JavaBase { - constructor(installerOptions, jdkFile) { - super('jdkfile', installerOptions); - this.jdkFile = jdkFile; + /** + * 7.7. For each shadow-including inclusive descendant + * inclusiveDescendant of node, in shadow-including tree + * order: + * 7.7.1. Run the insertion steps with inclusiveDescendant. + */ + if (DOMImpl_1.dom.features.steps) { + DOMAlgorithm_1.dom_runInsertionSteps(node); } - setupJava() { - return __awaiter(this, void 0, void 0, function* () { - let foundJava = this.findInToolcache(); - if (foundJava) { - core.info(`Resolved Java ${foundJava.version} from tool-cache`); + if (DOMImpl_1.dom.features.customElements) { + /** + * 7.7.2. If inclusiveDescendant is connected, then: + */ + if (util_1.Guard.isElementNode(node) && + ShadowTreeAlgorithm_1.shadowTree_isConnected(node)) { + if (util_1.Guard.isCustomElementNode(node)) { + /** + * 7.7.2.1. If inclusiveDescendant is custom, then enqueue a custom + * element callback reaction with inclusiveDescendant, callback name + * "connectedCallback", and an empty argument list. + */ + CustomElementAlgorithm_1.customElement_enqueueACustomElementCallbackReaction(node, "connectedCallback", []); } else { - core.info(`Java ${this.version} was not found in tool-cache. Trying to unpack JDK file...`); - if (!this.jdkFile) { - throw new Error("'jdkFile' is not specified"); - } - const jdkFilePath = path_1.default.resolve(this.jdkFile); - const stats = fs_1.default.statSync(jdkFilePath); - if (!stats.isFile()) { - throw new Error(`JDK file was not found in path '${jdkFilePath}'`); - } - core.info(`Extracting Java from '${jdkFilePath}'`); - const extractedJavaPath = yield util_1.extractJdkFile(jdkFilePath); - const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; - const archivePath = path_1.default.join(extractedJavaPath, archiveName); - const javaVersion = this.version; - let javaPath = yield tc.cacheDir(archivePath, this.toolcacheFolderName, this.getToolcacheVersionName(javaVersion), this.architecture); - // for different Java distributions, postfix can exist or not so need to check both cases - if (process.platform === 'darwin' && - fs_1.default.existsSync(path_1.default.join(javaPath, constants_1.MACOS_JAVA_CONTENT_POSTFIX))) { - javaPath = path_1.default.join(javaPath, constants_1.MACOS_JAVA_CONTENT_POSTFIX); - } - foundJava = { - version: javaVersion, - path: javaPath - }; + /** + * 7.7.2.2. Otherwise, try to upgrade inclusiveDescendant. + */ + CustomElementAlgorithm_1.customElement_tryToUpgrade(node); } - core.info(`Setting Java ${foundJava.version} as default`); - this.setJavaDefault(foundJava.version, foundJava.path); - return foundJava; - }); - } - findPackageForDownload(version) { - return __awaiter(this, void 0, void 0, function* () { - throw new Error('This method should not be implemented in local file provider'); - }); - } - downloadTool(javaRelease) { - return __awaiter(this, void 0, void 0, function* () { - throw new Error('This method should not be implemented in local file provider'); - }); - } -} -exports.LocalDistribution = LocalDistribution; - - -/***/ }), -/* 145 */, -/* 146 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); } - finally { if (e) throw e.error; } } - return ar; -}; -var __spread = (this && this.__spread) || function () { - for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); - return ar; -}; -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; + /** + * 8. If suppress observers flag is unset, then queue a tree mutation record + * for parent with nodes, « », previousSibling, and child. + */ + if (DOMImpl_1.dom.features.mutationObservers) { + if (!suppressObservers) { + MutationObserverAlgorithm_1.observer_queueTreeMutationRecord(parent, [node], [], previousSibling, null); } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var infra_1 = __webpack_require__(23); + } +} /** - * Converts a whitespace separated string into an array of tokens. + * Appends a node to the children of a parent node. * - * @param value - a string of whitespace separated tokens + * @param node - a node + * @param parent - the parent to receive node */ -function orderedSet_parse(value) { +function mutation_append(node, parent) { /** - * 1. Let inputTokens be the result of splitting input on ASCII whitespace. - * 2. Let tokens be a new ordered set. - * 3. For each token in inputTokens, append token to tokens. - * 4. Return tokens. + * To append a node to a parent, pre-insert node into parent before null. */ - var inputTokens = infra_1.string.splitAStringOnASCIIWhitespace(value); - return new Set(inputTokens); + return mutation_preInsert(node, parent, null); } -exports.orderedSet_parse = orderedSet_parse; +exports.mutation_append = mutation_append; /** - * Converts an array of tokens into a space separated string. + * Replaces a node with another node. * - * @param tokens - an array of token strings + * @param child - child node to remove + * @param node - node to insert + * @param parent - parent node to receive node */ -function orderedSet_serialize(tokens) { +function mutation_replace(child, node, parent) { + var e_6, _a, e_7, _b, e_8, _c, e_9, _d; /** - * The ordered set serializer takes a set and returns the concatenation of - * set using U+0020 SPACE. + * 1. If parent is not a Document, DocumentFragment, or Element node, + * throw a "HierarchyRequestError" DOMException. */ - return __spread(tokens).join(' '); -} -exports.orderedSet_serialize = orderedSet_serialize; -/** - * Removes duplicate tokens and convert all whitespace characters - * to space. - * - * @param value - a string of whitespace separated tokens - */ -function orderedSet_sanitize(value) { - return orderedSet_serialize(orderedSet_parse(value)); -} -exports.orderedSet_sanitize = orderedSet_sanitize; -/** - * Determines whether a set contains the other. - * - * @param set1 - a set - * @param set1 - a set that is contained in set1 - * @param caseSensitive - whether matches are case-sensitive - */ -function orderedSet_contains(set1, set2, caseSensitive) { - var e_1, _a, e_2, _b; - try { - for (var set2_1 = __values(set2), set2_1_1 = set2_1.next(); !set2_1_1.done; set2_1_1 = set2_1.next()) { - var val2 = set2_1_1.value; - var found = false; + if (parent._nodeType !== interfaces_1.NodeType.Document && + parent._nodeType !== interfaces_1.NodeType.DocumentFragment && + parent._nodeType !== interfaces_1.NodeType.Element) + throw new DOMException_1.HierarchyRequestError("Only document, document fragment and element nodes can contain child nodes. Parent node is " + parent.nodeName + "."); + /** + * 2. If node is a host-including inclusive ancestor of parent, throw a + * "HierarchyRequestError" DOMException. + */ + if (TreeAlgorithm_1.tree_isHostIncludingAncestorOf(parent, node, true)) + throw new DOMException_1.HierarchyRequestError("The node to be inserted cannot be an ancestor of parent node. Node is " + node.nodeName + ", parent node is " + parent.nodeName + "."); + /** + * 3. If child’s parent is not parent, then throw a "NotFoundError" + * DOMException. + */ + if (child._parent !== parent) + throw new DOMException_1.NotFoundError("The reference child node cannot be found under parent node. Child node is " + child.nodeName + ", parent node is " + parent.nodeName + "."); + /** + * 4. If node is not a DocumentFragment, DocumentType, Element, Text, + * ProcessingInstruction, or Comment node, throw a "HierarchyRequestError" + * DOMException. + */ + if (node._nodeType !== interfaces_1.NodeType.DocumentFragment && + node._nodeType !== interfaces_1.NodeType.DocumentType && + node._nodeType !== interfaces_1.NodeType.Element && + node._nodeType !== interfaces_1.NodeType.Text && + node._nodeType !== interfaces_1.NodeType.ProcessingInstruction && + node._nodeType !== interfaces_1.NodeType.CData && + node._nodeType !== interfaces_1.NodeType.Comment) + throw new DOMException_1.HierarchyRequestError("Only document fragment, document type, element, text, processing instruction, cdata section or comment nodes can be inserted. Node is " + node.nodeName + "."); + /** + * 5. If either node is a Text node and parent is a document, or node is a + * doctype and parent is not a document, throw a "HierarchyRequestError" + * DOMException. + */ + if (node._nodeType === interfaces_1.NodeType.Text && + parent._nodeType === interfaces_1.NodeType.Document) + throw new DOMException_1.HierarchyRequestError("Cannot insert a text node as a child of a document node. Node is " + node.nodeName + "."); + if (node._nodeType === interfaces_1.NodeType.DocumentType && + parent._nodeType !== interfaces_1.NodeType.Document) + throw new DOMException_1.HierarchyRequestError("A document type node can only be inserted under a document node. Parent node is " + parent.nodeName + "."); + /** + * 6. If parent is a document, and any of the statements below, switched on + * node, are true, throw a "HierarchyRequestError" DOMException. + * - DocumentFragment node + * If node has more than one element child or has a Text node child. + * Otherwise, if node has one element child and either parent has an element + * child that is not child or a doctype is following child. + * - element + * parent has an element child that is not child or a doctype is + * following child. + * - doctype + * parent has a doctype child that is not child, or an element is + * preceding child. + */ + if (parent._nodeType === interfaces_1.NodeType.Document) { + if (node._nodeType === interfaces_1.NodeType.DocumentFragment) { + var eleCount = 0; try { - for (var set1_1 = (e_2 = void 0, __values(set1)), set1_1_1 = set1_1.next(); !set1_1_1.done; set1_1_1 = set1_1.next()) { - var val1 = set1_1_1.value; - if (caseSensitive) { - if (val1 === val2) { - found = true; - break; - } + for (var _e = __values(node._children), _f = _e.next(); !_f.done; _f = _e.next()) { + var childNode = _f.value; + if (childNode._nodeType === interfaces_1.NodeType.Element) + eleCount++; + else if (childNode._nodeType === interfaces_1.NodeType.Text) + throw new DOMException_1.HierarchyRequestError("Cannot insert text a node as a child of a document node. Node is " + childNode.nodeName + "."); + } + } + catch (e_6_1) { e_6 = { error: e_6_1 }; } + finally { + try { + if (_f && !_f.done && (_a = _e.return)) _a.call(_e); + } + finally { if (e_6) throw e_6.error; } + } + if (eleCount > 1) { + throw new DOMException_1.HierarchyRequestError("A document node can only have one document element node. Document fragment to be inserted has " + eleCount + " element nodes."); + } + else if (eleCount === 1) { + try { + for (var _g = __values(parent._children), _h = _g.next(); !_h.done; _h = _g.next()) { + var ele = _h.value; + if (ele._nodeType === interfaces_1.NodeType.Element && ele !== child) + throw new DOMException_1.HierarchyRequestError("The document node already has a document element node."); } - else { - if (val1.toUpperCase() === val2.toUpperCase()) { - found = true; - break; - } + } + catch (e_7_1) { e_7 = { error: e_7_1 }; } + finally { + try { + if (_h && !_h.done && (_b = _g.return)) _b.call(_g); } + finally { if (e_7) throw e_7.error; } + } + var doctypeChild = child._nextSibling; + while (doctypeChild) { + if (doctypeChild._nodeType === interfaces_1.NodeType.DocumentType) + throw new DOMException_1.HierarchyRequestError("Cannot insert an element node before a document type node."); + doctypeChild = doctypeChild._nextSibling; } } - catch (e_2_1) { e_2 = { error: e_2_1 }; } + } + else if (node._nodeType === interfaces_1.NodeType.Element) { + try { + for (var _j = __values(parent._children), _k = _j.next(); !_k.done; _k = _j.next()) { + var ele = _k.value; + if (ele._nodeType === interfaces_1.NodeType.Element && ele !== child) + throw new DOMException_1.HierarchyRequestError("Document already has a document element node. Node is " + node.nodeName + "."); + } + } + catch (e_8_1) { e_8 = { error: e_8_1 }; } finally { try { - if (set1_1_1 && !set1_1_1.done && (_b = set1_1.return)) _b.call(set1_1); + if (_k && !_k.done && (_c = _j.return)) _c.call(_j); } - finally { if (e_2) throw e_2.error; } + finally { if (e_8) throw e_8.error; } + } + var doctypeChild = child._nextSibling; + while (doctypeChild) { + if (doctypeChild._nodeType === interfaces_1.NodeType.DocumentType) + throw new DOMException_1.HierarchyRequestError("Cannot insert an element node before a document type node. Node is " + node.nodeName + "."); + doctypeChild = doctypeChild._nextSibling; } - if (!found) - return false; } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (set2_1_1 && !set2_1_1.done && (_a = set2_1.return)) _a.call(set2_1); + else if (node._nodeType === interfaces_1.NodeType.DocumentType) { + try { + for (var _l = __values(parent._children), _m = _l.next(); !_m.done; _m = _l.next()) { + var ele = _m.value; + if (ele._nodeType === interfaces_1.NodeType.DocumentType && ele !== child) + throw new DOMException_1.HierarchyRequestError("Document already has a document type node. Node is " + node.nodeName + "."); + } + } + catch (e_9_1) { e_9 = { error: e_9_1 }; } + finally { + try { + if (_m && !_m.done && (_d = _l.return)) _d.call(_l); + } + finally { if (e_9) throw e_9.error; } + } + var elementChild = child._previousSibling; + while (elementChild) { + if (elementChild._nodeType === interfaces_1.NodeType.Element) + throw new DOMException_1.HierarchyRequestError("Cannot insert a document type node before an element node. Node is " + node.nodeName + "."); + elementChild = elementChild._previousSibling; + } } - finally { if (e_1) throw e_1.error; } } - return true; + /** + * 7. Let reference child be child’s next sibling. + * 8. If reference child is node, set it to node’s next sibling. + * 8. Let previousSibling be child’s previous sibling. + */ + var referenceChild = child._nextSibling; + if (referenceChild === node) + referenceChild = node._nextSibling; + var previousSibling = child._previousSibling; + /** + * 10. Adopt node into parent’s node document. + * 11. Let removedNodes be the empty list. + */ + DocumentAlgorithm_1.document_adopt(node, parent._nodeDocument); + var removedNodes = []; + /** + * 12. If child’s parent is not null, then: + */ + if (child._parent !== null) { + /** + * 12.1. Set removedNodes to [child]. + * 12.2. Remove child from its parent with the suppress observers flag + * set. + */ + removedNodes.push(child); + mutation_remove(child, child._parent, true); + } + /** + * 13. Let nodes be node’s children if node is a DocumentFragment node; + * otherwise [node]. + */ + var nodes = []; + if (node._nodeType === interfaces_1.NodeType.DocumentFragment) { + nodes = Array.from(node._children); + } + else { + nodes.push(node); + } + /** + * 14. Insert node into parent before reference child with the suppress + * observers flag set. + */ + mutation_insert(node, parent, referenceChild, true); + /** + * 15. Queue a tree mutation record for parent with nodes, removedNodes, + * previousSibling, and reference child. + */ + if (DOMImpl_1.dom.features.mutationObservers) { + MutationObserverAlgorithm_1.observer_queueTreeMutationRecord(parent, nodes, removedNodes, previousSibling, referenceChild); + } + /** + * 16. Return child. + */ + return child; } -exports.orderedSet_contains = orderedSet_contains; -//# sourceMappingURL=OrderedSetAlgorithm.js.map - -/***/ }), -/* 147 */, -/* 148 */, -/* 149 */, -/* 150 */, -/* 151 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; +exports.mutation_replace = mutation_replace; +/** + * Replaces all nodes of a parent with the given node. + * + * @param node - node to insert + * @param parent - parent node to receive node + */ +function mutation_replaceAll(node, parent) { + var e_10, _a; + /** + * 1. If node is not null, adopt node into parent’s node document. + */ + if (node !== null) { + DocumentAlgorithm_1.document_adopt(node, parent._nodeDocument); + } + /** + * 2. Let removedNodes be parent’s children. + */ + var removedNodes = Array.from(parent._children); + /** + * 3. Let addedNodes be the empty list. + * 4. If node is DocumentFragment node, then set addedNodes to node’s + * children. + * 5. Otherwise, if node is non-null, set addedNodes to [node]. + */ + var addedNodes = []; + if (node && node._nodeType === interfaces_1.NodeType.DocumentFragment) { + addedNodes = Array.from(node._children); + } + else if (node !== null) { + addedNodes.push(node); + } try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + /** + * 6. Remove all parent’s children, in tree order, with the suppress + * observers flag set. + */ + for (var removedNodes_1 = __values(removedNodes), removedNodes_1_1 = removedNodes_1.next(); !removedNodes_1_1.done; removedNodes_1_1 = removedNodes_1.next()) { + var childNode = removedNodes_1_1.value; + mutation_remove(childNode, parent, true); + } } - catch (error) { e = { error: error }; } + catch (e_10_1) { e_10 = { error: e_10_1 }; } finally { try { - if (r && !r.done && (m = i["return"])) m.call(i); + if (removedNodes_1_1 && !removedNodes_1_1.done && (_a = removedNodes_1.return)) _a.call(removedNodes_1); } - finally { if (e) throw e.error; } + finally { if (e_10) throw e_10.error; } } - return ar; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var util_1 = __webpack_require__(918); -var infra_1 = __webpack_require__(23); -var CreateAlgorithm_1 = __webpack_require__(86); -var TreeAlgorithm_1 = __webpack_require__(873); -var EventAlgorithm_1 = __webpack_require__(826); -/** - * Queues a mutation observer microtask to the surrounding agent’s mutation - * observers. - */ -function observer_queueAMutationObserverMicrotask() { /** - * 1. If the surrounding agent’s mutation observer microtask queued is true, - * then return. - * 2. Set the surrounding agent’s mutation observer microtask queued to true. - * 3. Queue a microtask to notify mutation observers. + * 7. If node is not null, then insert node into parent before null with the + * suppress observers flag set. */ - var window = DOMImpl_1.dom.window; - if (window._mutationObserverMicrotaskQueued) - return; - window._mutationObserverMicrotaskQueued = true; - Promise.resolve().then(function () { observer_notifyMutationObservers(); }); + if (node !== null) { + mutation_insert(node, parent, null, true); + } + /** + * 8. Queue a tree mutation record for parent with addedNodes, removedNodes, + * null, and null. + */ + if (DOMImpl_1.dom.features.mutationObservers) { + MutationObserverAlgorithm_1.observer_queueTreeMutationRecord(parent, addedNodes, removedNodes, null, null); + } } -exports.observer_queueAMutationObserverMicrotask = observer_queueAMutationObserverMicrotask; +exports.mutation_replaceAll = mutation_replaceAll; /** - * Notifies the surrounding agent’s mutation observers. + * Ensures pre-removal validity of a child node from a parent, then + * removes it. + * + * @param child - child node to remove + * @param parent - parent node */ -function observer_notifyMutationObservers() { - var e_1, _a, e_2, _b; +function mutation_preRemove(child, parent) { /** - * 1. Set the surrounding agent’s mutation observer microtask queued to false. - * 2. Let notifySet be a clone of the surrounding agent’s mutation observers. - * 3. Let signalSet be a clone of the surrounding agent’s signal slots. - * 4. Empty the surrounding agent’s signal slots. + * 1. If child’s parent is not parent, then throw a "NotFoundError" + * DOMException. + * 2. Remove child from parent. + * 3. Return child. */ - var window = DOMImpl_1.dom.window; - window._mutationObserverMicrotaskQueued = false; - var notifySet = infra_1.set.clone(window._mutationObservers); - var signalSet = infra_1.set.clone(window._signalSlots); - infra_1.set.empty(window._signalSlots); - var _loop_1 = function (mo) { - /** - * 5.1. Let records be a clone of mo’s record queue. - * 5.2. Empty mo’s record queue. - */ - var records = infra_1.list.clone(mo._recordQueue); - infra_1.list.empty(mo._recordQueue); + if (child._parent !== parent) + throw new DOMException_1.NotFoundError("The child node cannot be found under parent node. Child node is " + child.nodeName + ", parent node is " + parent.nodeName + "."); + mutation_remove(child, parent); + return child; +} +exports.mutation_preRemove = mutation_preRemove; +/** + * Removes a child node from its parent. + * + * @param node - node to remove + * @param parent - parent node + * @param suppressObservers - whether to notify observers + */ +function mutation_remove(node, parent, suppressObservers) { + var e_11, _a, e_12, _b, e_13, _c, e_14, _d; + if (DOMImpl_1.dom.rangeList.size !== 0) { /** - * 5.3. For each node of mo’s node list, remove all transient registered - * observers whose observer is mo from node’s registered observer list. + * 1. Let index be node’s index. */ - for (var i = 0; i < mo._nodeList.length; i++) { - var node = mo._nodeList[i]; - infra_1.list.remove(node._registeredObserverList, function (observer) { - return util_1.Guard.isTransientRegisteredObserver(observer) && observer.observer === mo; - }); + var index = TreeAlgorithm_1.tree_index(node); + try { + /** + * 2. For each live range whose start node is an inclusive descendant of + * node, set its start to (parent, index). + * 3. For each live range whose end node is an inclusive descendant of + * node, set its end to (parent, index). + */ + for (var _e = __values(DOMImpl_1.dom.rangeList), _f = _e.next(); !_f.done; _f = _e.next()) { + var range = _f.value; + if (TreeAlgorithm_1.tree_isDescendantOf(node, range._start[0], true)) { + range._start = [parent, index]; + } + if (TreeAlgorithm_1.tree_isDescendantOf(node, range._end[0], true)) { + range._end = [parent, index]; + } + if (range._start[0] === parent && range._start[1] > index) { + range._start[1]--; + } + if (range._end[0] === parent && range._end[1] > index) { + range._end[1]--; + } + } } - /** - * 5.4. If records is not empty, then invoke mo’s callback with « records, - * mo », and mo. If this throws an exception, then report the exception. - */ - if (!infra_1.list.isEmpty(records)) { + catch (e_11_1) { e_11 = { error: e_11_1 }; } + finally { try { - mo._callback.call(mo, records, mo); - } - catch (err) { - // TODO: Report the exception + if (_f && !_f.done && (_a = _e.return)) _a.call(_e); } + finally { if (e_11) throw e_11.error; } } - }; - try { - /** - * 5. For each mo of notifySet: - */ - for (var notifySet_1 = __values(notifySet), notifySet_1_1 = notifySet_1.next(); !notifySet_1_1.done; notifySet_1_1 = notifySet_1.next()) { - var mo = notifySet_1_1.value; - _loop_1(mo); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { try { - if (notifySet_1_1 && !notifySet_1_1.done && (_a = notifySet_1.return)) _a.call(notifySet_1); + /** + * 4. For each live range whose start node is parent and start offset is + * greater than index, decrease its start offset by 1. + * 5. For each live range whose end node is parent and end offset is greater + * than index, decrease its end offset by 1. + */ + for (var _g = __values(DOMImpl_1.dom.rangeList), _h = _g.next(); !_h.done; _h = _g.next()) { + var range = _h.value; + if (range._start[0] === parent && range._start[1] > index) { + range._start[1] -= 1; + } + if (range._end[0] === parent && range._end[1] > index) { + range._end[1] -= 1; + } + } + } + catch (e_12_1) { e_12 = { error: e_12_1 }; } + finally { + try { + if (_h && !_h.done && (_b = _g.return)) _b.call(_g); + } + finally { if (e_12) throw e_12.error; } } - finally { if (e_1) throw e_1.error; } } /** - * 6. For each slot of signalSet, fire an event named slotchange, with its - * bubbles attribute set to true, at slot. + * 6. For each NodeIterator object iterator whose root’s node document is + * node’s node document, run the NodeIterator pre-removing steps given node + * and iterator. */ - if (DOMImpl_1.dom.features.slots) { + if (DOMImpl_1.dom.features.steps) { try { - for (var signalSet_1 = __values(signalSet), signalSet_1_1 = signalSet_1.next(); !signalSet_1_1.done; signalSet_1_1 = signalSet_1.next()) { - var slot = signalSet_1_1.value; - EventAlgorithm_1.event_fireAnEvent("slotchange", slot, undefined, { bubbles: true }); + for (var _j = __values(NodeIteratorAlgorithm_1.nodeIterator_iteratorList()), _k = _j.next(); !_k.done; _k = _j.next()) { + var iterator = _k.value; + if (iterator._root._nodeDocument === node._nodeDocument) { + DOMAlgorithm_1.dom_runNodeIteratorPreRemovingSteps(iterator, node); + } } } - catch (e_2_1) { e_2 = { error: e_2_1 }; } + catch (e_13_1) { e_13 = { error: e_13_1 }; } + finally { + try { + if (_k && !_k.done && (_c = _j.return)) _c.call(_j); + } + finally { if (e_13) throw e_13.error; } + } + } + /** + * 7. Let oldPreviousSibling be node’s previous sibling. + * 8. Let oldNextSibling be node’s next sibling. + */ + var oldPreviousSibling = node._previousSibling; + var oldNextSibling = node._nextSibling; + // set document element node + if (util_1.Guard.isDocumentNode(parent) && util_1.Guard.isElementNode(node)) { + parent._documentElement = null; + } + /** + * 9. Remove node from its parent’s children. + */ + node._parent = null; + parent._children.delete(node); + // assign siblings and children for quick lookups + var prev = node._previousSibling; + var next = node._nextSibling; + node._previousSibling = null; + node._nextSibling = null; + if (prev) + prev._nextSibling = next; + if (next) + next._previousSibling = prev; + if (!prev) + parent._firstChild = next; + if (!next) + parent._lastChild = prev; + /** + * 10. If node is assigned, then run assign slotables for node’s assigned + * slot. + */ + if (DOMImpl_1.dom.features.slots) { + if (util_1.Guard.isSlotable(node) && node._assignedSlot !== null && ShadowTreeAlgorithm_1.shadowTree_isAssigned(node)) { + ShadowTreeAlgorithm_1.shadowTree_assignSlotables(node._assignedSlot); + } + } + /** + * 11. If parent’s root is a shadow root, and parent is a slot whose + * assigned nodes is the empty list, then run signal a slot change for + * parent. + */ + if (DOMImpl_1.dom.features.slots) { + if (util_1.Guard.isShadowRoot(TreeAlgorithm_1.tree_rootNode(parent)) && + util_1.Guard.isSlot(parent) && util_2.isEmpty(parent._assignedNodes)) { + ShadowTreeAlgorithm_1.shadowTree_signalASlotChange(parent); + } + } + /** + * 12. If node has an inclusive descendant that is a slot, then: + * 12.1. Run assign slotables for a tree with parent's root. + * 12.2. Run assign slotables for a tree with node. + */ + if (DOMImpl_1.dom.features.slots) { + var descendant_1 = TreeAlgorithm_1.tree_getFirstDescendantNode(node, true, false, function (e) { return util_1.Guard.isSlot(e); }); + if (descendant_1 !== null) { + ShadowTreeAlgorithm_1.shadowTree_assignSlotablesForATree(TreeAlgorithm_1.tree_rootNode(parent)); + ShadowTreeAlgorithm_1.shadowTree_assignSlotablesForATree(node); + } + } + /** + * 13. Run the removing steps with node and parent. + */ + if (DOMImpl_1.dom.features.steps) { + DOMAlgorithm_1.dom_runRemovingSteps(node, parent); + } + /** + * 14. If node is custom, then enqueue a custom element callback + * reaction with node, callback name "disconnectedCallback", + * and an empty argument list. + */ + if (DOMImpl_1.dom.features.customElements) { + if (util_1.Guard.isCustomElementNode(node)) { + CustomElementAlgorithm_1.customElement_enqueueACustomElementCallbackReaction(node, "disconnectedCallback", []); + } + } + /** + * 15. For each shadow-including descendant descendant of node, + * in shadow-including tree order, then: + */ + var descendant = TreeAlgorithm_1.tree_getFirstDescendantNode(node, false, true); + while (descendant !== null) { + /** + * 15.1. Run the removing steps with descendant. + */ + if (DOMImpl_1.dom.features.steps) { + DOMAlgorithm_1.dom_runRemovingSteps(descendant, node); + } + /** + * 15.2. If descendant is custom, then enqueue a custom element + * callback reaction with descendant, callback name + * "disconnectedCallback", and an empty argument list. + */ + if (DOMImpl_1.dom.features.customElements) { + if (util_1.Guard.isCustomElementNode(descendant)) { + CustomElementAlgorithm_1.customElement_enqueueACustomElementCallbackReaction(descendant, "disconnectedCallback", []); + } + } + descendant = TreeAlgorithm_1.tree_getNextDescendantNode(node, descendant, false, true); + } + /** + * 16. For each inclusive ancestor inclusiveAncestor of parent, and + * then for each registered of inclusiveAncestor's registered + * observer list, if registered's options's subtree is true, + * then append a new transient registered observer whose + * observer is registered's observer, options is registered's + * options, and source is registered to node's registered + * observer list. + */ + if (DOMImpl_1.dom.features.mutationObservers) { + var inclusiveAncestor = TreeAlgorithm_1.tree_getFirstAncestorNode(parent, true); + while (inclusiveAncestor !== null) { + try { + for (var _l = (e_14 = void 0, __values(inclusiveAncestor._registeredObserverList)), _m = _l.next(); !_m.done; _m = _l.next()) { + var registered = _m.value; + if (registered.options.subtree) { + node._registeredObserverList.push({ + observer: registered.observer, + options: registered.options, + source: registered + }); + } + } + } + catch (e_14_1) { e_14 = { error: e_14_1 }; } + finally { + try { + if (_m && !_m.done && (_d = _l.return)) _d.call(_l); + } + finally { if (e_14) throw e_14.error; } + } + inclusiveAncestor = TreeAlgorithm_1.tree_getNextAncestorNode(parent, inclusiveAncestor, true); + } + } + /** + * 17. If suppress observers flag is unset, then queue a tree mutation + * record for parent with « », « node », oldPreviousSibling, and + * oldNextSibling. + */ + if (DOMImpl_1.dom.features.mutationObservers) { + if (!suppressObservers) { + MutationObserverAlgorithm_1.observer_queueTreeMutationRecord(parent, [], [node], oldPreviousSibling, oldNextSibling); + } + } + /** + * 18. If node is a Text node, then run the child text content change steps + * for parent. + */ + if (DOMImpl_1.dom.features.steps) { + if (util_1.Guard.isTextNode(node)) { + DOMAlgorithm_1.dom_runChildTextContentChangeSteps(parent); + } + } +} +exports.mutation_remove = mutation_remove; +//# sourceMappingURL=MutationAlgorithm.js.map + +/***/ }), + +/***/ 8157: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var util_1 = __nccwpck_require__(5282); +var infra_1 = __nccwpck_require__(4251); +var CreateAlgorithm_1 = __nccwpck_require__(7339); +var TreeAlgorithm_1 = __nccwpck_require__(6620); +var EventAlgorithm_1 = __nccwpck_require__(8217); +/** + * Queues a mutation observer microtask to the surrounding agent’s mutation + * observers. + */ +function observer_queueAMutationObserverMicrotask() { + /** + * 1. If the surrounding agent’s mutation observer microtask queued is true, + * then return. + * 2. Set the surrounding agent’s mutation observer microtask queued to true. + * 3. Queue a microtask to notify mutation observers. + */ + var window = DOMImpl_1.dom.window; + if (window._mutationObserverMicrotaskQueued) + return; + window._mutationObserverMicrotaskQueued = true; + Promise.resolve().then(function () { observer_notifyMutationObservers(); }); +} +exports.observer_queueAMutationObserverMicrotask = observer_queueAMutationObserverMicrotask; +/** + * Notifies the surrounding agent’s mutation observers. + */ +function observer_notifyMutationObservers() { + var e_1, _a, e_2, _b; + /** + * 1. Set the surrounding agent’s mutation observer microtask queued to false. + * 2. Let notifySet be a clone of the surrounding agent’s mutation observers. + * 3. Let signalSet be a clone of the surrounding agent’s signal slots. + * 4. Empty the surrounding agent’s signal slots. + */ + var window = DOMImpl_1.dom.window; + window._mutationObserverMicrotaskQueued = false; + var notifySet = infra_1.set.clone(window._mutationObservers); + var signalSet = infra_1.set.clone(window._signalSlots); + infra_1.set.empty(window._signalSlots); + var _loop_1 = function (mo) { + /** + * 5.1. Let records be a clone of mo’s record queue. + * 5.2. Empty mo’s record queue. + */ + var records = infra_1.list.clone(mo._recordQueue); + infra_1.list.empty(mo._recordQueue); + /** + * 5.3. For each node of mo’s node list, remove all transient registered + * observers whose observer is mo from node’s registered observer list. + */ + for (var i = 0; i < mo._nodeList.length; i++) { + var node = mo._nodeList[i]; + infra_1.list.remove(node._registeredObserverList, function (observer) { + return util_1.Guard.isTransientRegisteredObserver(observer) && observer.observer === mo; + }); + } + /** + * 5.4. If records is not empty, then invoke mo’s callback with « records, + * mo », and mo. If this throws an exception, then report the exception. + */ + if (!infra_1.list.isEmpty(records)) { + try { + mo._callback.call(mo, records, mo); + } + catch (err) { + // TODO: Report the exception + } + } + }; + try { + /** + * 5. For each mo of notifySet: + */ + for (var notifySet_1 = __values(notifySet), notifySet_1_1 = notifySet_1.next(); !notifySet_1_1.done; notifySet_1_1 = notifySet_1.next()) { + var mo = notifySet_1_1.value; + _loop_1(mo); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (notifySet_1_1 && !notifySet_1_1.done && (_a = notifySet_1.return)) _a.call(notifySet_1); + } + finally { if (e_1) throw e_1.error; } + } + /** + * 6. For each slot of signalSet, fire an event named slotchange, with its + * bubbles attribute set to true, at slot. + */ + if (DOMImpl_1.dom.features.slots) { + try { + for (var signalSet_1 = __values(signalSet), signalSet_1_1 = signalSet_1.next(); !signalSet_1_1.done; signalSet_1_1 = signalSet_1.next()) { + var slot = signalSet_1_1.value; + EventAlgorithm_1.event_fireAnEvent("slotchange", slot, undefined, { bubbles: true }); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (signalSet_1_1 && !signalSet_1_1.done && (_b = signalSet_1.return)) _b.call(signalSet_1); @@ -9864,10 +9095,101 @@ exports.observer_queueAttributeMutationRecord = observer_queueAttributeMutationR //# sourceMappingURL=MutationObserverAlgorithm.js.map /***/ }), -/* 152 */, -/* 153 */, -/* 154 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 5856: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMException_1 = __nccwpck_require__(3166); +var infra_1 = __nccwpck_require__(4251); +var XMLAlgorithm_1 = __nccwpck_require__(7030); +/** + * Validates the given qualified name. + * + * @param qualifiedName - qualified name + */ +function namespace_validate(qualifiedName) { + /** + * To validate a qualifiedName, throw an "InvalidCharacterError" + * DOMException if qualifiedName does not match the Name or QName + * production. + */ + if (!XMLAlgorithm_1.xml_isName(qualifiedName)) + throw new DOMException_1.InvalidCharacterError("Invalid XML name: " + qualifiedName); + if (!XMLAlgorithm_1.xml_isQName(qualifiedName)) + throw new DOMException_1.InvalidCharacterError("Invalid XML qualified name: " + qualifiedName + "."); +} +exports.namespace_validate = namespace_validate; +/** + * Validates and extracts a namespace, prefix and localName from the + * given namespace and qualified name. + * See: https://dom.spec.whatwg.org/#validate-and-extract. + * + * @param namespace - namespace + * @param qualifiedName - qualified name + * + * @returns a tuple with `namespace`, `prefix` and `localName`. + */ +function namespace_validateAndExtract(namespace, qualifiedName) { + /** + * 1. If namespace is the empty string, set it to null. + * 2. Validate qualifiedName. + * 3. Let prefix be null. + * 4. Let localName be qualifiedName. + * 5. If qualifiedName contains a ":" (U+003E), then split the string on it + * and set prefix to the part before and localName to the part after. + * 6. If prefix is non-null and namespace is null, then throw a + * "NamespaceError" DOMException. + * 7. If prefix is "xml" and namespace is not the XML namespace, then throw + * a "NamespaceError" DOMException. + * 8. If either qualifiedName or prefix is "xmlns" and namespace is not the + * XMLNS namespace, then throw a "NamespaceError" DOMException. + * 9. If namespace is the XMLNS namespace and neither qualifiedName nor + * prefix is "xmlns", then throw a "NamespaceError" DOMException. + * 10. Return namespace, prefix, and localName. + */ + if (!namespace) + namespace = null; + namespace_validate(qualifiedName); + var parts = qualifiedName.split(':'); + var prefix = (parts.length === 2 ? parts[0] : null); + var localName = (parts.length === 2 ? parts[1] : qualifiedName); + if (prefix && namespace === null) + throw new DOMException_1.NamespaceError("Qualified name includes a prefix but the namespace is null."); + if (prefix === "xml" && namespace !== infra_1.namespace.XML) + throw new DOMException_1.NamespaceError("Qualified name includes the \"xml\" prefix but the namespace is not the XML namespace."); + if (namespace !== infra_1.namespace.XMLNS && + (prefix === "xmlns" || qualifiedName === "xmlns")) + throw new DOMException_1.NamespaceError("Qualified name includes the \"xmlns\" prefix but the namespace is not the XMLNS namespace."); + if (namespace === infra_1.namespace.XMLNS && + (prefix !== "xmlns" && qualifiedName !== "xmlns")) + throw new DOMException_1.NamespaceError("Qualified name does not include the \"xmlns\" prefix but the namespace is the XMLNS namespace."); + return [namespace, prefix, localName]; +} +exports.namespace_validateAndExtract = namespace_validateAndExtract; +/** + * Extracts a prefix and localName from the given qualified name. + * + * @param qualifiedName - qualified name + * + * @returns an tuple with `prefix` and `localName`. + */ +function namespace_extractQName(qualifiedName) { + namespace_validate(qualifiedName); + var parts = qualifiedName.split(':'); + var prefix = (parts.length === 2 ? parts[0] : null); + var localName = (parts.length === 2 ? parts[1] : qualifiedName); + return [prefix, localName]; +} +exports.namespace_extractQName = namespace_extractQName; +//# sourceMappingURL=NamespaceAlgorithm.js.map + +/***/ }), + +/***/ 4924: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -9882,769 +9204,657 @@ var __values = (this && this.__values) || function(o) { }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var util_1 = __webpack_require__(918); -var DOMException_1 = __webpack_require__(35); -var CreateAlgorithm_1 = __webpack_require__(86); -var TreeAlgorithm_1 = __webpack_require__(873); -var CharacterDataAlgorithm_1 = __webpack_require__(27); -var MutationAlgorithm_1 = __webpack_require__(479); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var util_1 = __nccwpck_require__(5282); +var infra_1 = __nccwpck_require__(4251); +var CreateAlgorithm_1 = __nccwpck_require__(7339); +var OrderedSetAlgorithm_1 = __nccwpck_require__(3670); +var DOMAlgorithm_1 = __nccwpck_require__(9628); +var MutationAlgorithm_1 = __nccwpck_require__(5463); +var ElementAlgorithm_1 = __nccwpck_require__(1849); /** - * Returns node with its adjacent text and cdata node siblings. + * Replaces the contents of the given node with a single text node. * - * @param node - a node - * @param self - whether to include node itself + * @param string - node contents + * @param parent - a node */ -function text_contiguousTextNodes(node, self) { - var _a; - if (self === void 0) { self = false; } +function node_stringReplaceAll(str, parent) { /** - * The contiguous Text nodes of a node node are node, node’s previous - * sibling Text node, if any, and its contiguous Text nodes, and node’s next - * sibling Text node, if any, and its contiguous Text nodes, avoiding any - * duplicates. + * 1. Let node be null. + * 2. If string is not the empty string, then set node to a new Text node + * whose data is string and node document is parent’s node document. + * 3. Replace all with node within parent. */ - return _a = {}, - _a[Symbol.iterator] = function () { - var currentNode = node; - while (currentNode && util_1.Guard.isTextNode(currentNode._previousSibling)) { - currentNode = currentNode._previousSibling; - } - return { - next: function () { - if (currentNode && (!self && currentNode === node)) { - if (util_1.Guard.isTextNode(currentNode._nextSibling)) { - currentNode = currentNode._nextSibling; - } - else { - currentNode = null; - } - } - if (currentNode === null) { - return { done: true, value: null }; - } - else { - var result = { done: false, value: currentNode }; - if (util_1.Guard.isTextNode(currentNode._nextSibling)) { - currentNode = currentNode._nextSibling; - } - else { - currentNode = null; - } - return result; - } - } - }; - }, - _a; + var node = null; + if (str !== '') { + node = CreateAlgorithm_1.create_text(parent._nodeDocument, str); + } + MutationAlgorithm_1.mutation_replaceAll(node, parent); } -exports.text_contiguousTextNodes = text_contiguousTextNodes; +exports.node_stringReplaceAll = node_stringReplaceAll; /** - * Returns node with its adjacent text node siblings. + * Clones a node. * - * @param node - a node - * @param self - whether to include node itself + * @param node - a node to clone + * @param document - the document to own the cloned node + * @param cloneChildrenFlag - whether to clone node's children */ -function text_contiguousExclusiveTextNodes(node, self) { - var _a; - if (self === void 0) { self = false; } +function node_clone(node, document, cloneChildrenFlag) { + var e_1, _a, e_2, _b; + if (document === void 0) { document = null; } + if (cloneChildrenFlag === void 0) { cloneChildrenFlag = false; } /** - * The contiguous exclusive Text nodes of a node node are node, node’s - * previous sibling exclusive Text node, if any, and its contiguous - * exclusive Text nodes, and node’s next sibling exclusive Text node, - * if any, and its contiguous exclusive Text nodes, avoiding any duplicates. + * 1. If document is not given, let document be node’s node document. */ - return _a = {}, - _a[Symbol.iterator] = function () { - var currentNode = node; - while (currentNode && util_1.Guard.isExclusiveTextNode(currentNode._previousSibling)) { - currentNode = currentNode._previousSibling; + if (document === null) + document = node._nodeDocument; + var copy; + if (util_1.Guard.isElementNode(node)) { + /** + * 2. If node is an element, then: + * 2.1. Let copy be the result of creating an element, given document, + * node’s local name, node’s namespace, node’s namespace prefix, + * and node’s is value, with the synchronous custom elements flag unset. + * 2.2. For each attribute in node’s attribute list: + * 2.2.1. Let copyAttribute be a clone of attribute. + * 2.2.2. Append copyAttribute to copy. + */ + copy = ElementAlgorithm_1.element_createAnElement(document, node._localName, node._namespace, node._namespacePrefix, node._is, false); + try { + for (var _c = __values(node._attributeList), _d = _c.next(); !_d.done; _d = _c.next()) { + var attribute = _d.value; + var copyAttribute = node_clone(attribute, document); + ElementAlgorithm_1.element_append(copyAttribute, copy); } - return { - next: function () { - if (currentNode && (!self && currentNode === node)) { - if (util_1.Guard.isExclusiveTextNode(currentNode._nextSibling)) { - currentNode = currentNode._nextSibling; - } - else { - currentNode = null; - } - } - if (currentNode === null) { - return { done: true, value: null }; - } - else { - var result = { done: false, value: currentNode }; - if (util_1.Guard.isExclusiveTextNode(currentNode._nextSibling)) { - currentNode = currentNode._nextSibling; - } - else { - currentNode = null; - } - return result; - } - } - }; - }, - _a; -} -exports.text_contiguousExclusiveTextNodes = text_contiguousExclusiveTextNodes; -/** - * Returns the concatenation of the data of all the Text node descendants of - * node, in tree order. - * - * @param node - a node - */ -function text_descendantTextContent(node) { + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_d && !_d.done && (_a = _c.return)) _a.call(_c); + } + finally { if (e_1) throw e_1.error; } + } + } + else { + /** + * 3. Otherwise, let copy be a node that implements the same interfaces as + * node, and fulfills these additional requirements, switching on node: + * - Document + * Set copy’s encoding, content type, URL, origin, type, and mode, to those + * of node. + * - DocumentType + * Set copy’s name, public ID, and system ID, to those of node. + * - Attr + * Set copy’s namespace, namespace prefix, local name, and value, to + * those of node. + * - Text + * - Comment + * Set copy’s data, to that of node. + * - ProcessingInstruction + * Set copy’s target and data to those of node. + * - Any other node + */ + if (util_1.Guard.isDocumentNode(node)) { + var doc = CreateAlgorithm_1.create_document(); + doc._encoding = node._encoding; + doc._contentType = node._contentType; + doc._URL = node._URL; + doc._origin = node._origin; + doc._type = node._type; + doc._mode = node._mode; + copy = doc; + } + else if (util_1.Guard.isDocumentTypeNode(node)) { + var doctype = CreateAlgorithm_1.create_documentType(document, node._name, node._publicId, node._systemId); + copy = doctype; + } + else if (util_1.Guard.isAttrNode(node)) { + var attr = CreateAlgorithm_1.create_attr(document, node.localName); + attr._namespace = node._namespace; + attr._namespacePrefix = node._namespacePrefix; + attr._value = node._value; + copy = attr; + } + else if (util_1.Guard.isExclusiveTextNode(node)) { + copy = CreateAlgorithm_1.create_text(document, node._data); + } + else if (util_1.Guard.isCDATASectionNode(node)) { + copy = CreateAlgorithm_1.create_cdataSection(document, node._data); + } + else if (util_1.Guard.isCommentNode(node)) { + copy = CreateAlgorithm_1.create_comment(document, node._data); + } + else if (util_1.Guard.isProcessingInstructionNode(node)) { + copy = CreateAlgorithm_1.create_processingInstruction(document, node._target, node._data); + } + else if (util_1.Guard.isDocumentFragmentNode(node)) { + copy = CreateAlgorithm_1.create_documentFragment(document); + } + else { + copy = Object.create(node); + } + } /** - * The descendant text content of a node node is the concatenation of the - * data of all the Text node descendants of node, in tree order. + * 4. Set copy’s node document and document to copy, if copy is a document, + * and set copy’s node document to document otherwise. */ - var contents = ''; - var text = TreeAlgorithm_1.tree_getFirstDescendantNode(node, false, false, function (e) { return util_1.Guard.isTextNode(e); }); - while (text !== null) { - contents += text._data; - text = TreeAlgorithm_1.tree_getNextDescendantNode(node, text, false, false, function (e) { return util_1.Guard.isTextNode(e); }); + if (util_1.Guard.isDocumentNode(copy)) { + copy._nodeDocument = copy; + document = copy; } - return contents; + else { + copy._nodeDocument = document; + } + /** + * 5. Run any cloning steps defined for node in other applicable + * specifications and pass copy, node, document and the clone children flag + * if set, as parameters. + */ + if (DOMImpl_1.dom.features.steps) { + DOMAlgorithm_1.dom_runCloningSteps(copy, node, document, cloneChildrenFlag); + } + /** + * 6. If the clone children flag is set, clone all the children of node and + * append them to copy, with document as specified and the clone children + * flag being set. + */ + if (cloneChildrenFlag) { + try { + for (var _e = __values(node._children), _f = _e.next(); !_f.done; _f = _e.next()) { + var child = _f.value; + var childCopy = node_clone(child, document, true); + MutationAlgorithm_1.mutation_append(childCopy, copy); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_f && !_f.done && (_b = _e.return)) _b.call(_e); + } + finally { if (e_2) throw e_2.error; } + } + } + /** + * 7. Return copy. + */ + return copy; } -exports.text_descendantTextContent = text_descendantTextContent; +exports.node_clone = node_clone; /** - * Splits data at the given offset and returns the remainder as a text - * node. + * Determines if two nodes can be considered equal. * - * @param node - a text node - * @param offset - the offset at which to split the nodes. + * @param a - node to compare + * @param b - node to compare */ -function text_split(node, offset) { - var e_1, _a; +function node_equals(a, b) { + var e_3, _a, e_4, _b; /** - * 1. Let length be node’s length. - * 2. If offset is greater than length, then throw an "IndexSizeError" - * DOMException. + * 1. A and B’s nodeType attribute value is identical. */ - var length = node._data.length; - if (offset > length) { - throw new DOMException_1.IndexSizeError(); + if (a._nodeType !== b._nodeType) + return false; + /** + * 2. The following are also equal, depending on A: + * - DocumentType + * Its name, public ID, and system ID. + * - Element + * Its namespace, namespace prefix, local name, and its attribute list’s size. + * - Attr + * Its namespace, local name, and value. + * - ProcessingInstruction + * Its target and data. + * - Text + * - Comment + * Its data. + */ + if (util_1.Guard.isDocumentTypeNode(a) && util_1.Guard.isDocumentTypeNode(b)) { + if (a._name !== b._name || a._publicId !== b._publicId || + a._systemId !== b._systemId) + return false; + } + else if (util_1.Guard.isElementNode(a) && util_1.Guard.isElementNode(b)) { + if (a._namespace !== b._namespace || a._namespacePrefix !== b._namespacePrefix || + a._localName !== b._localName || + a._attributeList.length !== b._attributeList.length) + return false; + } + else if (util_1.Guard.isAttrNode(a) && util_1.Guard.isAttrNode(b)) { + if (a._namespace !== b._namespace || a._localName !== b._localName || + a._value !== b._value) + return false; + } + else if (util_1.Guard.isProcessingInstructionNode(a) && util_1.Guard.isProcessingInstructionNode(b)) { + if (a._target !== b._target || a._data !== b._data) + return false; + } + else if (util_1.Guard.isCharacterDataNode(a) && util_1.Guard.isCharacterDataNode(b)) { + if (a._data !== b._data) + return false; } /** - * 3. Let count be length minus offset. - * 4. Let new data be the result of substringing data with node node, - * offset offset, and count count. - * 5. Let new node be a new Text node, with the same node document as node. - * Set new node’s data to new data. - * 6. Let parent be node’s parent. - * 7. If parent is not null, then: + * 3. If A is an element, each attribute in its attribute list has an attribute + * that equals an attribute in B’s attribute list. */ - var count = length - offset; - var newData = CharacterDataAlgorithm_1.characterData_substringData(node, offset, count); - var newNode = CreateAlgorithm_1.create_text(node._nodeDocument, newData); - var parent = node._parent; - if (parent !== null) { - /** - * 7.1. Insert new node into parent before node’s next sibling. - */ - MutationAlgorithm_1.mutation_insert(newNode, parent, node._nextSibling); + if (util_1.Guard.isElementNode(a) && util_1.Guard.isElementNode(b)) { + var attrMap = {}; try { - /** - * 7.2. For each live range whose start node is node and start offset is - * greater than offset, set its start node to new node and decrease its - * start offset by offset. - * 7.3. For each live range whose end node is node and end offset is greater - * than offset, set its end node to new node and decrease its end offset - * by offset. - * 7.4. For each live range whose start node is parent and start offset is - * equal to the index of node plus 1, increase its start offset by 1. - * 7.5. For each live range whose end node is parent and end offset is equal - * to the index of node plus 1, increase its end offset by 1. - */ - for (var _b = __values(DOMImpl_1.dom.rangeList), _c = _b.next(); !_c.done; _c = _b.next()) { - var range = _c.value; - if (range._start[0] === node && range._start[1] > offset) { - range._start[0] = newNode; - range._start[1] -= offset; - } - if (range._end[0] === node && range._end[1] > offset) { - range._end[0] = newNode; - range._end[1] -= offset; - } - var index = TreeAlgorithm_1.tree_index(node); - if (range._start[0] === parent && range._start[1] === index + 1) { - range._start[1]++; - } - if (range._end[0] === parent && range._end[1] === index + 1) { - range._end[1]++; - } + for (var _c = __values(a._attributeList), _d = _c.next(); !_d.done; _d = _c.next()) { + var attrA = _d.value; + attrMap[attrA._localName] = attrA; } } - catch (e_1_1) { e_1 = { error: e_1_1 }; } + catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + if (_d && !_d.done && (_a = _c.return)) _a.call(_c); } - finally { if (e_1) throw e_1.error; } + finally { if (e_3) throw e_3.error; } + } + try { + for (var _e = __values(b._attributeList), _f = _e.next(); !_f.done; _f = _e.next()) { + var attrB = _f.value; + var attrA = attrMap[attrB._localName]; + if (!attrA) + return false; + if (!node_equals(attrA, attrB)) + return false; + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (_f && !_f.done && (_b = _e.return)) _b.call(_e); + } + finally { if (e_4) throw e_4.error; } } } /** - * 8. Replace data with node node, offset offset, count count, and data - * the empty string. - * 9. Return new node. + * 4. A and B have the same number of children. + * 5. Each child of A equals the child of B at the identical index. */ - CharacterDataAlgorithm_1.characterData_replaceData(node, offset, count, ''); - return newNode; + if (a._children.size !== b._children.size) + return false; + var itA = a._children[Symbol.iterator](); + var itB = b._children[Symbol.iterator](); + var resultA = itA.next(); + var resultB = itB.next(); + while (!resultA.done && !resultB.done) { + var child1 = resultA.value; + var child2 = resultB.value; + if (!node_equals(child1, child2)) + return false; + resultA = itA.next(); + resultB = itB.next(); + } + return true; } -exports.text_split = text_split; -//# sourceMappingURL=TextAlgorithm.js.map - -/***/ }), -/* 155 */, -/* 156 */, -/* 157 */, -/* 158 */, -/* 159 */, -/* 160 */, -/* 161 */, -/* 162 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var ElementAlgorithm_1 = __webpack_require__(33); +exports.node_equals = node_equals; /** - * Changes the value of an existing attribute. + * Returns a collection of elements with the given qualified name which are + * descendants of the given root node. + * See: https://dom.spec.whatwg.org/#concept-getelementsbytagname * - * @param attribute - an attribute node - * @param value - attribute value + * @param qualifiedName - qualified name + * @param root - root node */ -function attr_setAnExistingAttributeValue(attribute, value) { +function node_listOfElementsWithQualifiedName(qualifiedName, root) { /** - * 1. If attribute’s element is null, then set attribute’s value to value. - * 2. Otherwise, change attribute from attribute’s element to value. + * 1. If qualifiedName is "*" (U+002A), return a HTMLCollection rooted at + * root, whose filter matches only descendant elements. + * 2. Otherwise, if root’s node document is an HTML document, return a + * HTMLCollection rooted at root, whose filter matches the following + * descendant elements: + * 2.1. Whose namespace is the HTML namespace and whose qualified name is + * qualifiedName, in ASCII lowercase. + * 2.2. Whose namespace is not the HTML namespace and whose qualified name + * is qualifiedName. + * 3. Otherwise, return a HTMLCollection rooted at root, whose filter + * matches descendant elements whose qualified name is qualifiedName. */ - if (attribute._element === null) { - attribute._value = value; + if (qualifiedName === "*") { + return CreateAlgorithm_1.create_htmlCollection(root); + } + else if (root._nodeDocument._type === "html") { + return CreateAlgorithm_1.create_htmlCollection(root, function (ele) { + if (ele._namespace === infra_1.namespace.HTML && + ele._qualifiedName === qualifiedName.toLowerCase()) { + return true; + } + else if (ele._namespace !== infra_1.namespace.HTML && + ele._qualifiedName === qualifiedName) { + return true; + } + else { + return false; + } + }); } else { - ElementAlgorithm_1.element_change(attribute, attribute._element, value); + return CreateAlgorithm_1.create_htmlCollection(root, function (ele) { + return (ele._qualifiedName === qualifiedName); + }); } } -exports.attr_setAnExistingAttributeValue = attr_setAnExistingAttributeValue; -//# sourceMappingURL=AttrAlgorithm.js.map - -/***/ }), -/* 163 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -function __export(m) { - for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; -} -Object.defineProperty(exports, "__esModule", { value: true }); -__export(__webpack_require__(710)); -__export(__webpack_require__(162)); -__export(__webpack_require__(350)); -__export(__webpack_require__(27)); -__export(__webpack_require__(86)); -__export(__webpack_require__(344)); -__export(__webpack_require__(493)); -__export(__webpack_require__(304)); -__export(__webpack_require__(54)); -__export(__webpack_require__(33)); -__export(__webpack_require__(826)); -__export(__webpack_require__(106)); -__export(__webpack_require__(479)); -__export(__webpack_require__(151)); -__export(__webpack_require__(664)); -__export(__webpack_require__(541)); -__export(__webpack_require__(272)); -__export(__webpack_require__(146)); -__export(__webpack_require__(60)); -__export(__webpack_require__(22)); -__export(__webpack_require__(483)); -__export(__webpack_require__(180)); -__export(__webpack_require__(154)); -__export(__webpack_require__(464)); -__export(__webpack_require__(873)); -__export(__webpack_require__(705)); -__export(__webpack_require__(495)); -__export(__webpack_require__(442)); -//# sourceMappingURL=index.js.map - -/***/ }), -/* 164 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var EventImpl_1 = __webpack_require__(427); -var algorithm_1 = __webpack_require__(163); +exports.node_listOfElementsWithQualifiedName = node_listOfElementsWithQualifiedName; /** - * Represents and event that carries custom data. + * Returns a collection of elements with the given namespace which are + * descendants of the given root node. + * See: https://dom.spec.whatwg.org/#concept-getelementsbytagnamens + * + * @param namespace - element namespace + * @param localName - local name + * @param root - root node */ -var CustomEventImpl = /** @class */ (function (_super) { - __extends(CustomEventImpl, _super); +function node_listOfElementsWithNamespace(namespace, localName, root) { /** - * Initializes a new instance of `CustomEvent`. + * 1. If namespace is the empty string, set it to null. + * 2. If both namespace and localName are "*" (U+002A), return a + * HTMLCollection rooted at root, whose filter matches descendant elements. + * 3. Otherwise, if namespace is "*" (U+002A), return a HTMLCollection + * rooted at root, whose filter matches descendant elements whose local + * name is localName. + * 4. Otherwise, if localName is "*" (U+002A), return a HTMLCollection + * rooted at root, whose filter matches descendant elements whose + * namespace is namespace. + * 5. Otherwise, return a HTMLCollection rooted at root, whose filter + * matches descendant elements whose namespace is namespace and local + * name is localName. */ - function CustomEventImpl(type, eventInit) { - var _this = _super.call(this, type, eventInit) || this; - _this._detail = null; - _this._detail = (eventInit && eventInit.detail) || null; - return _this; + if (namespace === '') + namespace = null; + if (namespace === "*" && localName === "*") { + return CreateAlgorithm_1.create_htmlCollection(root); } - Object.defineProperty(CustomEventImpl.prototype, "detail", { - /** @inheritdoc */ - get: function () { return this._detail; }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - CustomEventImpl.prototype.initCustomEvent = function (type, bubbles, cancelable, detail) { - if (bubbles === void 0) { bubbles = false; } - if (cancelable === void 0) { cancelable = false; } - if (detail === void 0) { detail = null; } - /** - * 1. If the context object’s dispatch flag is set, then return. - */ - if (this._dispatchFlag) - return; - /** - * 2. Initialize the context object with type, bubbles, and cancelable. - */ - algorithm_1.event_initialize(this, type, bubbles, cancelable); - /** - * 3. Set the context object’s detail attribute to detail. - */ - this._detail = detail; - }; - return CustomEventImpl; -}(EventImpl_1.EventImpl)); -exports.CustomEventImpl = CustomEventImpl; -//# sourceMappingURL=CustomEventImpl.js.map - -/***/ }), -/* 165 */, -/* 166 */, -/* 167 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const compare = __webpack_require__(874) -const gte = (a, b, loose) => compare(a, b, loose) >= 0 -module.exports = gte - - -/***/ }), -/* 168 */, -/* 169 */, -/* 170 */, -/* 171 */, -/* 172 */ -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); + else if (namespace === "*") { + return CreateAlgorithm_1.create_htmlCollection(root, function (ele) { + return (ele._localName === localName); + }); + } + else if (localName === "*") { + return CreateAlgorithm_1.create_htmlCollection(root, function (ele) { + return (ele._namespace === namespace); + }); + } + else { + return CreateAlgorithm_1.create_htmlCollection(root, function (ele) { + return (ele._localName === localName && ele._namespace === namespace); + }); + } +} +exports.node_listOfElementsWithNamespace = node_listOfElementsWithNamespace; /** - * Defines the type of a token. + * Returns a collection of elements with the given class names which are + * descendants of the given root node. + * See: https://dom.spec.whatwg.org/#concept-getelementsbyclassname + * + * @param namespace - element namespace + * @param localName - local name + * @param root - root node */ -var TokenType; -(function (TokenType) { - TokenType[TokenType["EOF"] = 0] = "EOF"; - TokenType[TokenType["Declaration"] = 1] = "Declaration"; - TokenType[TokenType["DocType"] = 2] = "DocType"; - TokenType[TokenType["Element"] = 3] = "Element"; - TokenType[TokenType["Text"] = 4] = "Text"; - TokenType[TokenType["CDATA"] = 5] = "CDATA"; - TokenType[TokenType["PI"] = 6] = "PI"; - TokenType[TokenType["Comment"] = 7] = "Comment"; - TokenType[TokenType["ClosingTag"] = 8] = "ClosingTag"; -})(TokenType = exports.TokenType || (exports.TokenType = {})); -//# sourceMappingURL=interfaces.js.map - -/***/ }), -/* 173 */, -/* 174 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var infra_1 = __webpack_require__(23); -var algorithm_1 = __webpack_require__(163); -var WebIDLAlgorithm_1 = __webpack_require__(495); +function node_listOfElementsWithClassNames(classNames, root) { + /** + * 1. Let classes be the result of running the ordered set parser + * on classNames. + * 2. If classes is the empty set, return an empty HTMLCollection. + * 3. Return a HTMLCollection rooted at root, whose filter matches + * descendant elements that have all their classes in classes. + * The comparisons for the classes must be done in an ASCII case-insensitive + * manner if root’s node document’s mode is "quirks", and in a + * case-sensitive manner otherwise. + */ + var classes = OrderedSetAlgorithm_1.orderedSet_parse(classNames); + if (classes.size === 0) { + return CreateAlgorithm_1.create_htmlCollection(root, function () { return false; }); + } + var caseSensitive = (root._nodeDocument._mode !== "quirks"); + return CreateAlgorithm_1.create_htmlCollection(root, function (ele) { + var eleClasses = ele.classList; + return OrderedSetAlgorithm_1.orderedSet_contains(eleClasses._tokenSet, classes, caseSensitive); + }); +} +exports.node_listOfElementsWithClassNames = node_listOfElementsWithClassNames; /** - * Represents an object providing methods which are not dependent on - * any particular document. + * Searches for a namespace prefix associated with the given namespace + * starting from the given element through its ancestors. + * + * @param element - an element node to start searching at + * @param namespace - namespace to search for */ -var DOMImplementationImpl = /** @class */ (function () { +function node_locateANamespacePrefix(element, namespace) { /** - * Initializes a new instance of `DOMImplementation`. - * - * @param document - the associated document + * 1. If element’s namespace is namespace and its namespace prefix is not + * null, then return its namespace prefix. */ - function DOMImplementationImpl(document) { - this._associatedDocument = document || DOMImpl_1.dom.window.document; - } - /** @inheritdoc */ - DOMImplementationImpl.prototype.createDocumentType = function (qualifiedName, publicId, systemId) { - /** - * 1. Validate qualifiedName. - * 2. Return a new doctype, with qualifiedName as its name, publicId as its - * public ID, and systemId as its system ID, and with its node document set - * to the associated document of the context object. - */ - algorithm_1.namespace_validate(qualifiedName); - return algorithm_1.create_documentType(this._associatedDocument, qualifiedName, publicId, systemId); - }; - /** @inheritdoc */ - DOMImplementationImpl.prototype.createDocument = function (namespace, qualifiedName, doctype) { - if (doctype === void 0) { doctype = null; } - /** - * 1. Let document be a new XMLDocument. - */ - var document = algorithm_1.create_xmlDocument(); - /** - * 2. Let element be null. - * 3. If qualifiedName is not the empty string, then set element to - * the result of running the internal createElementNS steps, given document, - * namespace, qualifiedName, and an empty dictionary. - */ - var element = null; - if (qualifiedName) { - element = algorithm_1.document_internalCreateElementNS(document, namespace, qualifiedName); + if (element._namespace === namespace && element._namespacePrefix !== null) { + return element._namespacePrefix; + } + /** + * 2. If element has an attribute whose namespace prefix is "xmlns" and + * value is namespace, then return element’s first such attribute’s + * local name. + */ + for (var i = 0; i < element._attributeList.length; i++) { + var attr = element._attributeList[i]; + if (attr._namespacePrefix === "xmlns" && attr._value === namespace) { + return attr._localName; } + } + /** + * 3. If element’s parent element is not null, then return the result of + * running locate a namespace prefix on that element using namespace. + */ + if (element._parent && util_1.Guard.isElementNode(element._parent)) { + return node_locateANamespacePrefix(element._parent, namespace); + } + /** + * 4. Return null. + */ + return null; +} +exports.node_locateANamespacePrefix = node_locateANamespacePrefix; +/** + * Searches for a namespace associated with the given namespace prefix + * starting from the given node through its ancestors. + * + * @param node - a node to start searching at + * @param prefix - namespace prefix to search for + */ +function node_locateANamespace(node, prefix) { + if (util_1.Guard.isElementNode(node)) { /** - * 4. If doctype is non-null, append doctype to document. - * 5. If element is non-null, append element to document. - */ - if (doctype) - document.appendChild(doctype); - if (element) - document.appendChild(element); - /** - * 6. document’s origin is context object’s associated document’s origin. - */ - document._origin = this._associatedDocument._origin; - /** - * 7. document’s content type is determined by namespace: - * - HTML namespace - * application/xhtml+xml - * - SVG namespace - * image/svg+xml - * - Any other namespace - * application/xml - */ - if (namespace === infra_1.namespace.HTML) - document._contentType = "application/xhtml+xml"; - else if (namespace === infra_1.namespace.SVG) - document._contentType = "image/svg+xml"; - else - document._contentType = "application/xml"; - /** - * 8. Return document. - */ - return document; - }; - /** @inheritdoc */ - DOMImplementationImpl.prototype.createHTMLDocument = function (title) { - /** - * 1. Let doc be a new document that is an HTML document. - * 2. Set doc’s content type to "text/html". - */ - var doc = algorithm_1.create_document(); - doc._type = "html"; - doc._contentType = "text/html"; - /** - * 3. Append a new doctype, with "html" as its name and with its node - * document set to doc, to doc. + * 1. If its namespace is not null and its namespace prefix is prefix, + * then return namespace. */ - doc.appendChild(algorithm_1.create_documentType(doc, "html", "", "")); + if (node._namespace !== null && node._namespacePrefix === prefix) { + return node._namespace; + } /** - * 4. Append the result of creating an element given doc, html, and the - * HTML namespace, to doc. + * 2. If it has an attribute whose namespace is the XMLNS namespace, + * namespace prefix is "xmlns", and local name is prefix, or if prefix + * is null and it has an attribute whose namespace is the XMLNS namespace, + * namespace prefix is null, and local name is "xmlns", then return its + * value if it is not the empty string, and null otherwise. */ - var htmlElement = algorithm_1.element_createAnElement(doc, "html", infra_1.namespace.HTML); - doc.appendChild(htmlElement); + for (var i = 0; i < node._attributeList.length; i++) { + var attr = node._attributeList[i]; + if (attr._namespace === infra_1.namespace.XMLNS && + attr._namespacePrefix === "xmlns" && + attr._localName === prefix) { + return attr._value || null; + } + if (prefix === null && attr._namespace === infra_1.namespace.XMLNS && + attr._namespacePrefix === null && attr._localName === "xmlns") { + return attr._value || null; + } + } /** - * 5. Append the result of creating an element given doc, head, and the - * HTML namespace, to the html element created earlier. + * 3. If its parent element is null, then return null. */ - var headElement = algorithm_1.element_createAnElement(doc, "head", infra_1.namespace.HTML); - htmlElement.appendChild(headElement); + if (node.parentElement === null) + return null; /** - * 6. If title is given: - * 6.1. Append the result of creating an element given doc, title, and - * the HTML namespace, to the head element created earlier. - * 6.2. Append a new Text node, with its data set to title (which could - * be the empty string) and its node document set to doc, to the title - * element created earlier. + * 4. Return the result of running locate a namespace on its parent + * element using prefix. */ - if (title !== undefined) { - var titleElement = algorithm_1.element_createAnElement(doc, "title", infra_1.namespace.HTML); - headElement.appendChild(titleElement); - var textElement = algorithm_1.create_text(doc, title); - titleElement.appendChild(textElement); - } + return node_locateANamespace(node.parentElement, prefix); + } + else if (util_1.Guard.isDocumentNode(node)) { /** - * 7. Append the result of creating an element given doc, body, and the - * HTML namespace, to the html element created earlier. + * 1. If its document element is null, then return null. + * 2. Return the result of running locate a namespace on its document + * element using prefix. */ - var bodyElement = algorithm_1.element_createAnElement(doc, "body", infra_1.namespace.HTML); - htmlElement.appendChild(bodyElement); + if (node.documentElement === null) + return null; + return node_locateANamespace(node.documentElement, prefix); + } + else if (util_1.Guard.isDocumentTypeNode(node) || util_1.Guard.isDocumentFragmentNode(node)) { + return null; + } + else if (util_1.Guard.isAttrNode(node)) { /** - * 8. doc’s origin is context object’s associated document’s origin. + * 1. If its element is null, then return null. + * 2. Return the result of running locate a namespace on its element + * using prefix. */ - doc._origin = this._associatedDocument._origin; + if (node._element === null) + return null; + return node_locateANamespace(node._element, prefix); + } + else { /** - * 9. Return doc. + * 1. If its parent element is null, then return null. + * 2. Return the result of running locate a namespace on its parent + * element using prefix. */ - return doc; - }; - /** @inheritdoc */ - DOMImplementationImpl.prototype.hasFeature = function () { return true; }; - /** - * Creates a new `DOMImplementation`. - * - * @param document - owner document - */ - DOMImplementationImpl._create = function (document) { - return new DOMImplementationImpl(document); - }; - return DOMImplementationImpl; -}()); -exports.DOMImplementationImpl = DOMImplementationImpl; -WebIDLAlgorithm_1.idl_defineConst(DOMImplementationImpl.prototype, "_ID", "@oozcitak/dom"); -//# sourceMappingURL=DOMImplementationImpl.js.map + if (!node._parent || !util_1.Guard.isElementNode(node._parent)) + return null; + return node_locateANamespace(node._parent, prefix); + } +} +exports.node_locateANamespace = node_locateANamespace; +//# sourceMappingURL=NodeAlgorithm.js.map /***/ }), -/* 175 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 3973: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var util_1 = __webpack_require__(918); -var infra_1 = __webpack_require__(23); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var interfaces_1 = __nccwpck_require__(7305); +var TraversalAlgorithm_1 = __nccwpck_require__(998); +var TreeAlgorithm_1 = __nccwpck_require__(6620); /** - * Represents an object that can be used to observe mutations to the tree of - * nodes. + * Returns the next or previous node in the subtree, or `null` if + * there are none. + * + * @param iterator - the `NodeIterator` instance + * @param forward- `true` to return the next node, or `false` to + * return the previous node. */ -var MutationObserverImpl = /** @class */ (function () { +function nodeIterator_traverse(iterator, forward) { /** - * Initializes a new instance of `MutationObserver`. - * - * @param callback - the callback function + * 1. Let node be iterator’s reference. + * 2. Let beforeNode be iterator’s pointer before reference. */ - function MutationObserverImpl(callback) { - this._nodeList = []; - this._recordQueue = []; - /** - * 1. Let mo be a new MutationObserver object whose callback is callback. - * 2. Append mo to mo’s relevant agent’s mutation observers. - * 3. Return mo. - */ - this._callback = callback; - var window = DOMImpl_1.dom.window; - infra_1.set.append(window._mutationObservers, this); - } - /** @inheritdoc */ - MutationObserverImpl.prototype.observe = function (target, options) { - var e_1, _a; - options = options || { - childList: false, - subtree: false - }; - /** - * 1. If either options’s attributeOldValue or attributeFilter is present - * and options’s attributes is omitted, then set options’s attributes - * to true. - * 2. If options’s characterDataOldValue is present and options’s - * characterData is omitted, then set options’s characterData to true. - * 3. If none of options’s childList, attributes, and characterData is - * true, then throw a TypeError. - * 4. If options’s attributeOldValue is true and options’s attributes is - * false, then throw a TypeError. - * 5. If options’s attributeFilter is present and options’s attributes is - * false, then throw a TypeError. - * 6. If options’s characterDataOldValue is true and options’s characterData - * is false, then throw a TypeError. - */ - if ((options.attributeOldValue !== undefined || options.attributeFilter !== undefined) && - options.attributes === undefined) { - options.attributes = true; - } - if (options.characterDataOldValue !== undefined && options.characterData === undefined) { - options.characterData = true; - } - if (!options.childList && !options.attributes && !options.characterData) { - throw new TypeError(); - } - if (options.attributeOldValue && !options.attributes) { - throw new TypeError(); - } - if (options.attributeFilter !== undefined && !options.attributes) { - throw new TypeError(); - } - if (options.characterDataOldValue && !options.characterData) { - throw new TypeError(); - } + var node = iterator._reference; + var beforeNode = iterator._pointerBeforeReference; + /** + * 3. While true: + */ + while (true) { /** - * 7. For each registered of target’s registered observer list, if - * registered’s observer is the context object: + * 3.1. Branch on direction: */ - var isRegistered = false; - var coptions = options; - var _loop_1 = function (registered) { - var e_2, _a; - if (registered.observer === this_1) { - isRegistered = true; - try { - /** - * 7.1. For each node of the context object’s node list, remove all - * transient registered observers whose source is registered from node’s - * registered observer list. - */ - for (var _b = (e_2 = void 0, __values(this_1._nodeList)), _c = _b.next(); !_c.done; _c = _b.next()) { - var node = _c.value; - infra_1.list.remove(node._registeredObserverList, function (ob) { - return util_1.Guard.isTransientRegisteredObserver(ob) && ob.source === registered; - }); - } + if (forward) { + /** + * - next + */ + if (!beforeNode) { + /** + * If beforeNode is false, then set node to the first node following + * node in iterator’s iterator collection. If there is no such node, + * then return null. + */ + var nextNode = TreeAlgorithm_1.tree_getFollowingNode(iterator._root, node); + if (nextNode) { + node = nextNode; } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_2) throw e_2.error; } + else { + return null; } + } + else { /** - * 7.2. Set registered’s options to options. + * If beforeNode is true, then set it to false. */ - registered.options = coptions; - } - }; - var this_1 = this; - try { - for (var _b = __values(target._registeredObserverList), _c = _b.next(); !_c.done; _c = _b.next()) { - var registered = _c.value; - _loop_1(registered); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + beforeNode = false; } - finally { if (e_1) throw e_1.error; } - } - /** - * 8. Otherwise: - * 8.1. Append a new registered observer whose observer is the context - * object and options is options to target’s registered observer list. - * 8.2. Append target to the context object’s node list. - */ - if (!isRegistered) { - target._registeredObserverList.push({ observer: this, options: options }); - this._nodeList.push(target); } - }; - /** @inheritdoc */ - MutationObserverImpl.prototype.disconnect = function () { - var e_3, _a; - var _this = this; - try { + else { /** - * 1. For each node of the context object’s node list, remove any - * registered observer from node’s registered observer list for which the - * context object is the observer. + * - previous */ - for (var _b = __values(this._nodeList), _c = _b.next(); !_c.done; _c = _b.next()) { - var node = _c.value; - infra_1.list.remove((node)._registeredObserverList, function (ob) { - return ob.observer === _this; - }); + if (beforeNode) { + /** + * If beforeNode is true, then set node to the first node preceding + * node in iterator’s iterator collection. If there is no such node, + * then return null. + */ + var prevNode = TreeAlgorithm_1.tree_getPrecedingNode(iterator.root, node); + if (prevNode) { + node = prevNode; + } + else { + return null; + } } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + else { + /** + * If beforeNode is false, then set it to true. + */ + beforeNode = true; } - finally { if (e_3) throw e_3.error; } } /** - * 2. Empty the context object’s record queue. - */ - this._recordQueue = []; - }; - /** @inheritdoc */ - MutationObserverImpl.prototype.takeRecords = function () { - /** - * 1. Let records be a clone of the context object’s record queue. - * 2. Empty the context object’s record queue. - * 3. Return records. + * 3.2. Let result be the result of filtering node within iterator. + * 3.3. If result is FILTER_ACCEPT, then break. */ - var records = this._recordQueue; - this._recordQueue = []; - return records; - }; - return MutationObserverImpl; -}()); -exports.MutationObserverImpl = MutationObserverImpl; -//# sourceMappingURL=MutationObserverImpl.js.map + var result = TraversalAlgorithm_1.traversal_filter(iterator, node); + if (result === interfaces_1.FilterResult.Accept) { + break; + } + } + /** + * 4. Set iterator’s reference to node. + * 5. Set iterator’s pointer before reference to beforeNode. + * 6. Return node. + */ + iterator._reference = node; + iterator._pointerBeforeReference = beforeNode; + return node; +} +exports.nodeIterator_traverse = nodeIterator_traverse; +/** + * Gets the global iterator list. + */ +function nodeIterator_iteratorList() { + return DOMImpl_1.dom.window._iteratorList; +} +exports.nodeIterator_iteratorList = nodeIterator_iteratorList; +//# sourceMappingURL=NodeIteratorAlgorithm.js.map /***/ }), -/* 176 */, -/* 177 */, -/* 178 */, -/* 179 */, -/* 180 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 3670: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; @@ -10665,889 +9875,1069 @@ var __spread = (this && this.__spread) || function () { for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); return ar; }; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var util_1 = __webpack_require__(918); -var util_2 = __webpack_require__(592); -var TreeAlgorithm_1 = __webpack_require__(873); -var MutationObserverAlgorithm_1 = __webpack_require__(151); +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var infra_1 = __nccwpck_require__(4251); /** - * Signals a slot change to the given slot. + * Converts a whitespace separated string into an array of tokens. * - * @param slot - a slot + * @param value - a string of whitespace separated tokens */ -function shadowTree_signalASlotChange(slot) { +function orderedSet_parse(value) { /** - * 1. Append slot to slot’s relevant agent’s signal slots. - * 2. Queue a mutation observer microtask. + * 1. Let inputTokens be the result of splitting input on ASCII whitespace. + * 2. Let tokens be a new ordered set. + * 3. For each token in inputTokens, append token to tokens. + * 4. Return tokens. */ - var window = DOMImpl_1.dom.window; - window._signalSlots.add(slot); - MutationObserverAlgorithm_1.observer_queueAMutationObserverMicrotask(); + var inputTokens = infra_1.string.splitAStringOnASCIIWhitespace(value); + return new Set(inputTokens); } -exports.shadowTree_signalASlotChange = shadowTree_signalASlotChange; +exports.orderedSet_parse = orderedSet_parse; /** - * Determines whether a the shadow tree of the given element node is - * connected to a document node. + * Converts an array of tokens into a space separated string. * - * @param element - an element node of the shadow tree + * @param tokens - an array of token strings */ -function shadowTree_isConnected(element) { +function orderedSet_serialize(tokens) { /** - * An element is connected if its shadow-including root is a document. + * The ordered set serializer takes a set and returns the concatenation of + * set using U+0020 SPACE. */ - return util_1.Guard.isDocumentNode(TreeAlgorithm_1.tree_rootNode(element, true)); + return __spread(tokens).join(' '); } -exports.shadowTree_isConnected = shadowTree_isConnected; +exports.orderedSet_serialize = orderedSet_serialize; /** - * Determines whether a slotable is assigned. + * Removes duplicate tokens and convert all whitespace characters + * to space. * - * @param slotable - a slotable + * @param value - a string of whitespace separated tokens */ -function shadowTree_isAssigned(slotable) { - /** - * A slotable is assigned if its assigned slot is non-null. - */ - return (slotable._assignedSlot !== null); -} -exports.shadowTree_isAssigned = shadowTree_isAssigned; -/** - * Finds a slot for the given slotable. - * - * @param slotable - a slotable - * @param openFlag - `true` to search open shadow tree's only - */ -function shadowTree_findASlot(slotable, openFlag) { - if (openFlag === void 0) { openFlag = false; } - /** - * 1. If slotable’s parent is null, then return null. - * 2. Let shadow be slotable’s parent’s shadow root. - * 3. If shadow is null, then return null. - * 4. If the open flag is set and shadow’s mode is not "open", then - * return null. - * 5. Return the first slot in tree order in shadow’s descendants whose name - * is slotable’s name, if any, and null otherwise. - */ - var node = util_1.Cast.asNode(slotable); - var parent = node._parent; - if (parent === null) - return null; - var shadow = parent._shadowRoot || null; - if (shadow === null) - return null; - if (openFlag && shadow._mode !== "open") - return null; - var child = TreeAlgorithm_1.tree_getFirstDescendantNode(shadow, false, true, function (e) { return util_1.Guard.isSlot(e); }); - while (child !== null) { - if (child._name === slotable._name) - return child; - child = TreeAlgorithm_1.tree_getNextDescendantNode(shadow, child, false, true, function (e) { return util_1.Guard.isSlot(e); }); - } - return null; +function orderedSet_sanitize(value) { + return orderedSet_serialize(orderedSet_parse(value)); } -exports.shadowTree_findASlot = shadowTree_findASlot; +exports.orderedSet_sanitize = orderedSet_sanitize; /** - * Finds slotables for the given slot. + * Determines whether a set contains the other. * - * @param slot - a slot + * @param set1 - a set + * @param set1 - a set that is contained in set1 + * @param caseSensitive - whether matches are case-sensitive */ -function shadowTree_findSlotables(slot) { - var e_1, _a; - /** - * 1. Let result be an empty list. - * 2. If slot’s root is not a shadow root, then return result. - */ - var result = []; - var root = TreeAlgorithm_1.tree_rootNode(slot); - if (!util_1.Guard.isShadowRoot(root)) - return result; - /** - * 3. Let host be slot’s root’s host. - * 4. For each slotable child of host, slotable, in tree order: - */ - var host = root._host; +function orderedSet_contains(set1, set2, caseSensitive) { + var e_1, _a, e_2, _b; try { - for (var _b = __values(host._children), _c = _b.next(); !_c.done; _c = _b.next()) { - var slotable = _c.value; - if (util_1.Guard.isSlotable(slotable)) { - /** - * 4.1. Let foundSlot be the result of finding a slot given slotable. - * 4.2. If foundSlot is slot, then append slotable to result. - */ - var foundSlot = shadowTree_findASlot(slotable); - if (foundSlot === slot) { - result.push(slotable); + for (var set2_1 = __values(set2), set2_1_1 = set2_1.next(); !set2_1_1.done; set2_1_1 = set2_1.next()) { + var val2 = set2_1_1.value; + var found = false; + try { + for (var set1_1 = (e_2 = void 0, __values(set1)), set1_1_1 = set1_1.next(); !set1_1_1.done; set1_1_1 = set1_1.next()) { + var val1 = set1_1_1.value; + if (caseSensitive) { + if (val1 === val2) { + found = true; + break; + } + } + else { + if (val1.toUpperCase() === val2.toUpperCase()) { + found = true; + break; + } + } + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (set1_1_1 && !set1_1_1.done && (_b = set1_1.return)) _b.call(set1_1); } + finally { if (e_2) throw e_2.error; } } + if (!found) + return false; } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + if (set2_1_1 && !set2_1_1.done && (_a = set2_1.return)) _a.call(set2_1); } finally { if (e_1) throw e_1.error; } } - /** - * 5. Return result. - */ - return result; + return true; } -exports.shadowTree_findSlotables = shadowTree_findSlotables; +exports.orderedSet_contains = orderedSet_contains; +//# sourceMappingURL=OrderedSetAlgorithm.js.map + +/***/ }), + +/***/ 2328: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var util_1 = __nccwpck_require__(6195); +var CreateAlgorithm_1 = __nccwpck_require__(7339); /** - * Finds slotables for the given slot. + * Converts the given nodes or strings into a node (if `nodes` has + * only one element) or a document fragment. * - * @param slot - a slot + * @param nodes - the array of nodes or strings, + * @param document - owner document */ -function shadowTree_findFlattenedSlotables(slot) { - var e_2, _a, e_3, _b; +function parentNode_convertNodesIntoANode(nodes, document) { + var e_1, _a; /** - * 1. Let result be an empty list. - * 2. If slot’s root is not a shadow root, then return result. + * 1. Let node be null. + * 2. Replace each string in nodes with a new Text node whose data is the + * string and node document is document. */ - var result = []; - var root = TreeAlgorithm_1.tree_rootNode(slot); - if (!util_1.Guard.isShadowRoot(root)) - return result; + var node = null; + for (var i = 0; i < nodes.length; i++) { + var item = nodes[i]; + if (util_1.isString(item)) { + var text = CreateAlgorithm_1.create_text(document, item); + nodes[i] = text; + } + } /** - * 3. Let slotables be the result of finding slotables given slot. - * 4. If slotables is the empty list, then append each slotable child of - * slot, in tree order, to slotables. + * 3. If nodes contains one node, set node to that node. + * 4. Otherwise, set node to a new DocumentFragment whose node document is + * document, and then append each node in nodes, if any, to it. */ - var slotables = shadowTree_findSlotables(slot); - if (util_2.isEmpty(slotables)) { + if (nodes.length === 1) { + node = nodes[0]; + } + else { + node = CreateAlgorithm_1.create_documentFragment(document); + var ns = node; try { - for (var _c = __values(slot._children), _d = _c.next(); !_d.done; _d = _c.next()) { - var slotable = _d.value; - if (util_1.Guard.isSlotable(slotable)) { - slotables.push(slotable); - } + for (var nodes_1 = __values(nodes), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) { + var item = nodes_1_1.value; + ns.appendChild(item); } } - catch (e_2_1) { e_2 = { error: e_2_1 }; } + catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (_d && !_d.done && (_a = _c.return)) _a.call(_c); + if (nodes_1_1 && !nodes_1_1.done && (_a = nodes_1.return)) _a.call(nodes_1); } - finally { if (e_2) throw e_2.error; } + finally { if (e_1) throw e_1.error; } } } - try { - /** - * 5. For each node in slotables: - */ - for (var slotables_1 = __values(slotables), slotables_1_1 = slotables_1.next(); !slotables_1_1.done; slotables_1_1 = slotables_1.next()) { - var node = slotables_1_1.value; - /** - * 5.1. If node is a slot whose root is a shadow root, then: - */ - if (util_1.Guard.isSlot(node) && util_1.Guard.isShadowRoot(TreeAlgorithm_1.tree_rootNode(node))) { - /** - * 5.1.1. Let temporaryResult be the result of finding flattened slotables given node. - * 5.1.2. Append each slotable in temporaryResult, in order, to result. - */ - var temporaryResult = shadowTree_findFlattenedSlotables(node); - result.push.apply(result, __spread(temporaryResult)); - } - else { - /** - * 5.2. Otherwise, append node to result. - */ - result.push(node); - } + /** + * 5. Return node. + */ + return node; +} +exports.parentNode_convertNodesIntoANode = parentNode_convertNodesIntoANode; +//# sourceMappingURL=ParentNodeAlgorithm.js.map + +/***/ }), + +/***/ 457: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } - catch (e_3_1) { e_3 = { error: e_3_1 }; } + catch (error) { e = { error: error }; } finally { try { - if (slotables_1_1 && !slotables_1_1.done && (_b = slotables_1.return)) _b.call(slotables_1); + if (r && !r.done && (m = i["return"])) m.call(i); } - finally { if (e_3) throw e_3.error; } + finally { if (e) throw e.error; } } + return ar; +}; +var __spread = (this && this.__spread) || function () { + for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); + return ar; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7305); +var DOMException_1 = __nccwpck_require__(3166); +var util_1 = __nccwpck_require__(5282); +var CreateAlgorithm_1 = __nccwpck_require__(7339); +var TreeAlgorithm_1 = __nccwpck_require__(6620); +var BoundaryPointAlgorithm_1 = __nccwpck_require__(1054); +var CharacterDataAlgorithm_1 = __nccwpck_require__(9461); +var NodeAlgorithm_1 = __nccwpck_require__(4924); +var MutationAlgorithm_1 = __nccwpck_require__(5463); +var TextAlgorithm_1 = __nccwpck_require__(3512); +/** + * Determines if the node's start boundary point is at its end boundary + * point. + * + * @param range - a range + */ +function range_collapsed(range) { /** - * 6. Return result. + * A range is collapsed if its start node is its end node and its start offset is its end offset. */ - return result; + return (range._startNode === range._endNode && range._startOffset === range._endOffset); } -exports.shadowTree_findFlattenedSlotables = shadowTree_findFlattenedSlotables; +exports.range_collapsed = range_collapsed; /** - * Assigns slotables to the given slot. + * Gets the root node of a range. * - * @param slot - a slot + * @param range - a range */ -function shadowTree_assignSlotables(slot) { - var e_4, _a; +function range_root(range) { /** - * 1. Let slotables be the result of finding slotables for slot. - * 2. If slotables and slot’s assigned nodes are not identical, then run - * signal a slot change for slot. + * The root of a live range is the root of its start node. */ - var slotables = shadowTree_findSlotables(slot); - if (slotables.length === slot._assignedNodes.length) { - var nodesIdentical = true; - for (var i = 0; i < slotables.length; i++) { - if (slotables[i] !== slot._assignedNodes[i]) { - nodesIdentical = false; - break; - } - } - if (!nodesIdentical) { - shadowTree_signalASlotChange(slot); - } - } + return TreeAlgorithm_1.tree_rootNode(range._startNode); +} +exports.range_root = range_root; +/** + * Determines if a node is fully contained in a range. + * + * @param node - a node + * @param range - a range + */ +function range_isContained(node, range) { /** - * 3. Set slot’s assigned nodes to slotables. - * 4. For each slotable in slotables, set slotable’s assigned slot to slot. + * A node node is contained in a live range range if node’s root is range’s + * root, and (node, 0) is after range’s start, and (node, node’s length) is + * before range’s end. */ - slot._assignedNodes = slotables; - try { - for (var slotables_2 = __values(slotables), slotables_2_1 = slotables_2.next(); !slotables_2_1.done; slotables_2_1 = slotables_2.next()) { - var slotable = slotables_2_1.value; - slotable._assignedSlot = slot; - } - } - catch (e_4_1) { e_4 = { error: e_4_1 }; } - finally { - try { - if (slotables_2_1 && !slotables_2_1.done && (_a = slotables_2.return)) _a.call(slotables_2); - } - finally { if (e_4) throw e_4.error; } - } + return (TreeAlgorithm_1.tree_rootNode(node) === range_root(range) && + BoundaryPointAlgorithm_1.boundaryPoint_position([node, 0], range._start) === interfaces_1.BoundaryPosition.After && + BoundaryPointAlgorithm_1.boundaryPoint_position([node, TreeAlgorithm_1.tree_nodeLength(node)], range._end) === interfaces_1.BoundaryPosition.Before); } -exports.shadowTree_assignSlotables = shadowTree_assignSlotables; +exports.range_isContained = range_isContained; /** - * Assigns slotables to all nodes of a tree. + * Determines if a node is partially contained in a range. * - * @param root - root node + * @param node - a node + * @param range - a range */ -function shadowTree_assignSlotablesForATree(root) { +function range_isPartiallyContained(node, range) { /** - * To assign slotables for a tree, given a node root, run assign slotables - * for each slot slot in root’s inclusive descendants, in tree order. + * A node is partially contained in a live range if it’s an inclusive + * ancestor of the live range’s start node but not its end node, + * or vice versa. */ - var descendant = TreeAlgorithm_1.tree_getFirstDescendantNode(root, true, false, function (e) { return util_1.Guard.isSlot(e); }); - while (descendant !== null) { - shadowTree_assignSlotables(descendant); - descendant = TreeAlgorithm_1.tree_getNextDescendantNode(root, descendant, true, false, function (e) { return util_1.Guard.isSlot(e); }); + var startCheck = TreeAlgorithm_1.tree_isAncestorOf(range._startNode, node, true); + var endCheck = TreeAlgorithm_1.tree_isAncestorOf(range._endNode, node, true); + return (startCheck && !endCheck) || (!startCheck && endCheck); +} +exports.range_isPartiallyContained = range_isPartiallyContained; +/** + * Sets the start boundary point of a range. + * + * @param range - a range + * @param node - a node + * @param offset - an offset into node + */ +function range_setTheStart(range, node, offset) { + /** + * 1. If node is a doctype, then throw an "InvalidNodeTypeError" DOMException. + * 2. If offset is greater than node’s length, then throw an "IndexSizeError" + * DOMException. + * 3. Let bp be the boundary point (node, offset). + * 4. If these steps were invoked as "set the start" + * 4.1. If bp is after the range’s end, or if range’s root is not equal to + * node’s root, set range’s end to bp. + * 4.2. Set range’s start to bp. + */ + if (util_1.Guard.isDocumentTypeNode(node)) { + throw new DOMException_1.InvalidNodeTypeError(); + } + if (offset > TreeAlgorithm_1.tree_nodeLength(node)) { + throw new DOMException_1.IndexSizeError(); + } + var bp = [node, offset]; + if (range_root(range) !== TreeAlgorithm_1.tree_rootNode(node) || + BoundaryPointAlgorithm_1.boundaryPoint_position(bp, range._end) === interfaces_1.BoundaryPosition.After) { + range._end = bp; } + range._start = bp; } -exports.shadowTree_assignSlotablesForATree = shadowTree_assignSlotablesForATree; +exports.range_setTheStart = range_setTheStart; /** - * Assigns a slot to a slotables. + * Sets the end boundary point of a range. * - * @param slotable - a slotable + * @param range - a range + * @param node - a node + * @param offset - an offset into node */ -function shadowTree_assignASlot(slotable) { +function range_setTheEnd(range, node, offset) { /** - * 1. Let slot be the result of finding a slot with slotable. - * 2. If slot is non-null, then run assign slotables for slot. + * 1. If node is a doctype, then throw an "InvalidNodeTypeError" DOMException. + * 2. If offset is greater than node’s length, then throw an "IndexSizeError" + * DOMException. + * 3. Let bp be the boundary point (node, offset). + * 4. If these steps were invoked as "set the end" + * 4.1. If bp is before the range’s start, or if range’s root is not equal + * to node’s root, set range’s start to bp. + * 4.2. Set range’s end to bp. */ - var slot = shadowTree_findASlot(slotable); - if (slot !== null) { - shadowTree_assignSlotables(slot); + if (util_1.Guard.isDocumentTypeNode(node)) { + throw new DOMException_1.InvalidNodeTypeError(); + } + if (offset > TreeAlgorithm_1.tree_nodeLength(node)) { + throw new DOMException_1.IndexSizeError(); + } + var bp = [node, offset]; + if (range_root(range) !== TreeAlgorithm_1.tree_rootNode(node) || + BoundaryPointAlgorithm_1.boundaryPoint_position(bp, range._start) === interfaces_1.BoundaryPosition.Before) { + range._start = bp; } + range._end = bp; } -exports.shadowTree_assignASlot = shadowTree_assignASlot; -//# sourceMappingURL=ShadowTreeAlgorithm.js.map - -/***/ }), -/* 181 */ -/***/ (function(module) { - -// Note: this is the semver.org version of the spec that it implements -// Not necessarily the package version of this code. -const SEMVER_SPEC_VERSION = '2.0.0' - -const MAX_LENGTH = 256 -const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || - /* istanbul ignore next */ 9007199254740991 - -// Max safe segment length for coercion. -const MAX_SAFE_COMPONENT_LENGTH = 16 - -module.exports = { - SEMVER_SPEC_VERSION, - MAX_LENGTH, - MAX_SAFE_INTEGER, - MAX_SAFE_COMPONENT_LENGTH +exports.range_setTheEnd = range_setTheEnd; +/** + * Selects a node. + * + * @param range - a range + * @param node - a node + */ +function range_select(node, range) { + /** + * 1. Let parent be node’s parent. + * 2. If parent is null, then throw an "InvalidNodeTypeError" DOMException. + */ + var parent = node._parent; + if (parent === null) + throw new DOMException_1.InvalidNodeTypeError(); + /** + * 3. Let index be node’s index. + * 4. Set range’s start to boundary point (parent, index). + * 5. Set range’s end to boundary point (parent, index plus 1). + */ + var index = TreeAlgorithm_1.tree_index(node); + range._start = [parent, index]; + range._end = [parent, index + 1]; } - - -/***/ }), -/* 182 */, -/* 183 */, -/* 184 */, -/* 185 */, -/* 186 */, -/* 187 */, -/* 188 */, -/* 189 */, -/* 190 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var BaseCBWriter_1 = __webpack_require__(512); +exports.range_select = range_select; /** - * Serializes XML nodes. + * EXtracts the contents of range as a document fragment. + * + * @param range - a range */ -var XMLCBWriter = /** @class */ (function (_super) { - __extends(XMLCBWriter, _super); +function range_extract(range) { + var e_1, _a, e_2, _b, e_3, _c; /** - * Initializes a new instance of `XMLCBWriter`. - * - * @param builderOptions - XML builder options + * 1. Let fragment be a new DocumentFragment node whose node document is + * range’s start node’s node document. + * 2. If range is collapsed, then return fragment. */ - function XMLCBWriter(builderOptions) { - var _this = _super.call(this, builderOptions) || this; - _this._lineLength = 0; - return _this; - } - /** @inheritdoc */ - XMLCBWriter.prototype.frontMatter = function () { - return ""; - }; - /** @inheritdoc */ - XMLCBWriter.prototype.declaration = function (version, encoding, standalone) { - var markup = this._beginLine() + ""; - return markup; - }; - /** @inheritdoc */ - XMLCBWriter.prototype.docType = function (name, publicId, systemId) { - var markup = this._beginLine(); - if (publicId && systemId) { - markup += ""; - } - else if (publicId) { - markup += ""; + var fragment = CreateAlgorithm_1.create_documentFragment(range._startNode._nodeDocument); + if (range_collapsed(range)) + return fragment; + /** + * 3. Let original start node, original start offset, original end node, + * and original end offset be range’s start node, start offset, end node, + * and end offset, respectively. + */ + var originalStartNode = range._startNode; + var originalStartOffset = range._startOffset; + var originalEndNode = range._endNode; + var originalEndOffset = range._endOffset; + /** + * 4. If original start node is original end node, and they are a Text, + * ProcessingInstruction, or Comment node: + * 4.1. Let clone be a clone of original start node. + * 4.2. Set the data of clone to the result of substringing data with node + * original start node, offset original start offset, and count original end + * offset minus original start offset. + * 4.3. Append clone to fragment. + * 4.4. Replace data with node original start node, offset original start + * offset, count original end offset minus original start offset, and data + * the empty string. + * 4.5. Return fragment. + */ + if (originalStartNode === originalEndNode && + util_1.Guard.isCharacterDataNode(originalStartNode)) { + var clone = NodeAlgorithm_1.node_clone(originalStartNode); + clone._data = CharacterDataAlgorithm_1.characterData_substringData(originalStartNode, originalStartOffset, originalEndOffset - originalStartOffset); + MutationAlgorithm_1.mutation_append(clone, fragment); + CharacterDataAlgorithm_1.characterData_replaceData(originalStartNode, originalStartOffset, originalEndOffset - originalStartOffset, ''); + return fragment; + } + /** + * 5. Let common ancestor be original start node. + * 6. While common ancestor is not an inclusive ancestor of original end + * node, set common ancestor to its own parent. + */ + var commonAncestor = originalStartNode; + while (!TreeAlgorithm_1.tree_isAncestorOf(originalEndNode, commonAncestor, true)) { + if (commonAncestor._parent === null) { + throw new Error("Parent node is null."); } - else if (systemId) { - markup += ""; + commonAncestor = commonAncestor._parent; + } + /** + * 7. Let first partially contained child be null. + * 8. If original start node is not an inclusive ancestor of original end + * node, set first partially contained child to the first child of common + * ancestor that is partially contained in range. + */ + var firstPartiallyContainedChild = null; + if (!TreeAlgorithm_1.tree_isAncestorOf(originalEndNode, originalStartNode, true)) { + try { + for (var _d = __values(commonAncestor._children), _e = _d.next(); !_e.done; _e = _d.next()) { + var node = _e.value; + if (range_isPartiallyContained(node, range)) { + firstPartiallyContainedChild = node; + break; + } + } } - else { - markup += ""; + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_e && !_e.done && (_a = _d.return)) _a.call(_d); + } + finally { if (e_1) throw e_1.error; } } - return markup; - }; - /** @inheritdoc */ - XMLCBWriter.prototype.comment = function (data) { - return this._beginLine() + ""; - }; - /** @inheritdoc */ - XMLCBWriter.prototype.text = function (data) { - return this._beginLine() + data; - }; - /** @inheritdoc */ - XMLCBWriter.prototype.instruction = function (target, data) { - if (data) { - return this._beginLine() + ""; + } + /** + * 9. Let last partially contained child be null. + * 10. If original end node is not an inclusive ancestor of original start + * node, set last partially contained child to the last child of common + * ancestor that is partially contained in range. + */ + var lastPartiallyContainedChild = null; + if (!TreeAlgorithm_1.tree_isAncestorOf(originalStartNode, originalEndNode, true)) { + var children = __spread(commonAncestor._children); + for (var i = children.length - 1; i > 0; i--) { + var node = children[i]; + if (range_isPartiallyContained(node, range)) { + lastPartiallyContainedChild = node; + break; + } } - else { - return this._beginLine() + ""; + } + /** + * 11. Let contained children be a list of all children of common ancestor + * that are contained in range, in tree order. + * 12. If any member of contained children is a doctype, then throw a + * "HierarchyRequestError" DOMException. + */ + var containedChildren = []; + try { + for (var _f = __values(commonAncestor._children), _g = _f.next(); !_g.done; _g = _f.next()) { + var child = _g.value; + if (range_isContained(child, range)) { + if (util_1.Guard.isDocumentTypeNode(child)) { + throw new DOMException_1.HierarchyRequestError(); + } + containedChildren.push(child); + } } - }; - /** @inheritdoc */ - XMLCBWriter.prototype.cdata = function (data) { - return this._beginLine() + ""; - }; - /** @inheritdoc */ - XMLCBWriter.prototype.openTagBegin = function (name) { - this._lineLength += 1 + name.length; - return this._beginLine() + "<" + name; - }; - /** @inheritdoc */ - XMLCBWriter.prototype.openTagEnd = function (name, selfClosing, voidElement) { - if (voidElement) { - return " />"; + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_g && !_g.done && (_b = _f.return)) _b.call(_f); } - else if (selfClosing) { - if (this._writerOptions.allowEmptyTags) { - return ">"; - } - else if (this._writerOptions.spaceBeforeSlash) { - return " />"; - } - else { - return "/>"; - } + finally { if (e_2) throw e_2.error; } + } + var newNode; + var newOffset; + if (TreeAlgorithm_1.tree_isAncestorOf(originalEndNode, originalStartNode, true)) { + /** + * 13. If original start node is an inclusive ancestor of original end node, + * set new node to original start node and new offset to original start + * offset. + */ + newNode = originalStartNode; + newOffset = originalStartOffset; + } + else { + /** + * 14. Otherwise: + * 14.1. Let reference node equal original start node. + * 14.2. While reference node’s parent is not null and is not an inclusive + * ancestor of original end node, set reference node to its parent. + * 14.3. Set new node to the parent of reference node, and new offset to + * one plus reference node’s index. + */ + var referenceNode = originalStartNode; + while (referenceNode._parent !== null && + !TreeAlgorithm_1.tree_isAncestorOf(originalEndNode, referenceNode._parent)) { + referenceNode = referenceNode._parent; } - else { - return ">"; + /* istanbul ignore next */ + if (referenceNode._parent === null) { + /** + * If reference node’s parent is null, it would be the root of range, + * so would be an inclusive ancestor of original end node, and we could + * not reach this point. + */ + throw new Error("Parent node is null."); } - }; - /** @inheritdoc */ - XMLCBWriter.prototype.closeTag = function (name) { - return this._beginLine() + ""; - }; - /** @inheritdoc */ - XMLCBWriter.prototype.attribute = function (name, value) { - var str = name + "=\"" + value + "\""; - if (this._writerOptions.prettyPrint && this._writerOptions.width > 0 && - this._lineLength + 1 + str.length > this._writerOptions.width) { - str = this._beginLine() + this._indent(1) + str; - this._lineLength = str.length; - return str; + newNode = referenceNode._parent; + newOffset = 1 + TreeAlgorithm_1.tree_index(referenceNode); + } + if (util_1.Guard.isCharacterDataNode(firstPartiallyContainedChild)) { + /** + * 15. If first partially contained child is a Text, ProcessingInstruction, + * or Comment node: + * 15.1. Let clone be a clone of original start node. + * 15.2. Set the data of clone to the result of substringing data with + * node original start node, offset original start offset, and count + * original start node’s length minus original start offset. + * 15.3. Append clone to fragment. + * 15.4. Replace data with node original start node, offset original + * start offset, count original start node’s length minus original start + * offset, and data the empty string. + */ + var clone = NodeAlgorithm_1.node_clone(originalStartNode); + clone._data = CharacterDataAlgorithm_1.characterData_substringData(originalStartNode, originalStartOffset, TreeAlgorithm_1.tree_nodeLength(originalStartNode) - originalStartOffset); + MutationAlgorithm_1.mutation_append(clone, fragment); + CharacterDataAlgorithm_1.characterData_replaceData(originalStartNode, originalStartOffset, TreeAlgorithm_1.tree_nodeLength(originalStartNode) - originalStartOffset, ''); + } + else if (firstPartiallyContainedChild !== null) { + /** + * 16. Otherwise, if first partially contained child is not null: + * 16.1. Let clone be a clone of first partially contained child. + * 16.2. Append clone to fragment. + * 16.3. Let subrange be a new live range whose start is (original start + * node, original start offset) and whose end is (first partially + * contained child, first partially contained child’s length). + * 16.4. Let subfragment be the result of extracting subrange. + * 16.5. Append subfragment to clone. + */ + var clone = NodeAlgorithm_1.node_clone(firstPartiallyContainedChild); + MutationAlgorithm_1.mutation_append(clone, fragment); + var subrange = CreateAlgorithm_1.create_range([originalStartNode, originalStartOffset], [firstPartiallyContainedChild, TreeAlgorithm_1.tree_nodeLength(firstPartiallyContainedChild)]); + var subfragment = range_extract(subrange); + MutationAlgorithm_1.mutation_append(subfragment, clone); + } + try { + /** + * 17. For each contained child in contained children, append contained + * child to fragment. + */ + for (var containedChildren_1 = __values(containedChildren), containedChildren_1_1 = containedChildren_1.next(); !containedChildren_1_1.done; containedChildren_1_1 = containedChildren_1.next()) { + var child = containedChildren_1_1.value; + MutationAlgorithm_1.mutation_append(child, fragment); } - else { - this._lineLength += 1 + str.length; - return " " + str; + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (containedChildren_1_1 && !containedChildren_1_1.done && (_c = containedChildren_1.return)) _c.call(containedChildren_1); } - }; - /** @inheritdoc */ - XMLCBWriter.prototype.beginElement = function (name) { }; - /** @inheritdoc */ - XMLCBWriter.prototype.endElement = function (name) { }; + finally { if (e_3) throw e_3.error; } + } + if (util_1.Guard.isCharacterDataNode(lastPartiallyContainedChild)) { + /** + * 18. If last partially contained child is a Text, ProcessingInstruction, + * or Comment node: + * 18.1. Let clone be a clone of original end node. + * 18.2. Set the data of clone to the result of substringing data with + * node original end node, offset 0, and count original end offset. + * 18.3. Append clone to fragment. + * 18.4. Replace data with node original end node, offset 0, count + * original end offset, and data the empty string. + */ + var clone = NodeAlgorithm_1.node_clone(originalEndNode); + clone._data = CharacterDataAlgorithm_1.characterData_substringData(originalEndNode, 0, originalEndOffset); + MutationAlgorithm_1.mutation_append(clone, fragment); + CharacterDataAlgorithm_1.characterData_replaceData(originalEndNode, 0, originalEndOffset, ''); + } + else if (lastPartiallyContainedChild !== null) { + /** + * 19. Otherwise, if last partially contained child is not null: + * 19.1. Let clone be a clone of last partially contained child. + * 19.2. Append clone to fragment. + * 19.3. Let subrange be a new live range whose start is (last partially + * contained child, 0) and whose end is (original end node, original + * end offset). + * 19.4. Let subfragment be the result of extracting subrange. + * 19.5. Append subfragment to clone. + */ + var clone = NodeAlgorithm_1.node_clone(lastPartiallyContainedChild); + MutationAlgorithm_1.mutation_append(clone, fragment); + var subrange = CreateAlgorithm_1.create_range([lastPartiallyContainedChild, 0], [originalEndNode, originalEndOffset]); + var subfragment = range_extract(subrange); + MutationAlgorithm_1.mutation_append(subfragment, clone); + } /** - * Produces characters to be prepended to a line of string in pretty-print - * mode. + * 20. Set range’s start and end to (new node, new offset). */ - XMLCBWriter.prototype._beginLine = function () { - if (this._writerOptions.prettyPrint) { - var str = (this.hasData ? this._writerOptions.newline : "") + - this._indent(this._writerOptions.offset + this.level); - this._lineLength = str.length; - return str; - } - else { - return ""; - } - }; + range._start = [newNode, newOffset]; + range._end = [newNode, newOffset]; /** - * Produces an indentation string. - * - * @param level - depth of the tree + * 21. Return fragment. */ - XMLCBWriter.prototype._indent = function (level) { - if (level <= 0) { - return ""; - } - else { - return this._writerOptions.indent.repeat(level); - } - }; - return XMLCBWriter; -}(BaseCBWriter_1.BaseCBWriter)); -exports.XMLCBWriter = XMLCBWriter; -//# sourceMappingURL=XMLCBWriter.js.map - -/***/ }), -/* 191 */, -/* 192 */, -/* 193 */, -/* 194 */, -/* 195 */, -/* 196 */, -/* 197 */, -/* 198 */, -/* 199 */, -/* 200 */, -/* 201 */, -/* 202 */, -/* 203 */, -/* 204 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var infra_1 = __webpack_require__(23); -var algorithm_1 = __webpack_require__(163); -var util_1 = __webpack_require__(918); -var util_2 = __webpack_require__(592); + return fragment; +} +exports.range_extract = range_extract; /** - * Represents a collection of elements. + * Clones the contents of range as a document fragment. + * + * @param range - a range */ -var HTMLCollectionImpl = /** @class */ (function () { +function range_cloneTheContents(range) { + var e_4, _a, e_5, _b, e_6, _c; /** - * Initializes a new instance of `HTMLCollection`. - * - * @param root - root node - * @param filter - node filter + * 1. Let fragment be a new DocumentFragment node whose node document + * is range’s start node’s node document. + * 2. If range is collapsed, then return fragment. */ - function HTMLCollectionImpl(root, filter) { - this._live = true; - this._root = root; - this._filter = filter; - return new Proxy(this, this); + var fragment = CreateAlgorithm_1.create_documentFragment(range._startNode._nodeDocument); + if (range_collapsed(range)) + return fragment; + /** + * 3. Let original start node, original start offset, original end node, + * and original end offset be range’s start node, start offset, end node, + * and end offset, respectively. + * 4. If original start node is original end node, and they are a Text, + * ProcessingInstruction, or Comment node: + * 4.1. Let clone be a clone of original start node. + * 4.2. Set the data of clone to the result of substringing data with node + * original start node, offset original start offset, and count original end + * offset minus original start offset. + * 4.3. Append clone to fragment. + * 4.5. Return fragment. + */ + var originalStartNode = range._startNode; + var originalStartOffset = range._startOffset; + var originalEndNode = range._endNode; + var originalEndOffset = range._endOffset; + if (originalStartNode === originalEndNode && + util_1.Guard.isCharacterDataNode(originalStartNode)) { + var clone = NodeAlgorithm_1.node_clone(originalStartNode); + clone._data = CharacterDataAlgorithm_1.characterData_substringData(originalStartNode, originalStartOffset, originalEndOffset - originalStartOffset); + MutationAlgorithm_1.mutation_append(clone, fragment); } - Object.defineProperty(HTMLCollectionImpl.prototype, "length", { - /** @inheritdoc */ - get: function () { - var _this = this; - /** - * The length attribute’s getter must return the number of nodes - * represented by the collection. - */ - var count = 0; - var node = algorithm_1.tree_getFirstDescendantNode(this._root, false, false, function (e) { return util_1.Guard.isElementNode(e) && _this._filter(e); }); - while (node !== null) { - count++; - node = algorithm_1.tree_getNextDescendantNode(this._root, node, false, false, function (e) { return util_1.Guard.isElementNode(e) && _this._filter(e); }); - } - return count; - }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - HTMLCollectionImpl.prototype.item = function (index) { - var _this = this; - /** - * The item(index) method, when invoked, must return the indexth element - * in the collection. If there is no indexth element in the collection, - * then the method must return null. - */ - var i = 0; - var node = algorithm_1.tree_getFirstDescendantNode(this._root, false, false, function (e) { return util_1.Guard.isElementNode(e) && _this._filter(e); }); - while (node !== null) { - if (i === index) - return node; - else - i++; - node = algorithm_1.tree_getNextDescendantNode(this._root, node, false, false, function (e) { return util_1.Guard.isElementNode(e) && _this._filter(e); }); + /** + * 5. Let common ancestor be original start node. + * 6. While common ancestor is not an inclusive ancestor of original end + * node, set common ancestor to its own parent. + */ + var commonAncestor = originalStartNode; + while (!TreeAlgorithm_1.tree_isAncestorOf(originalEndNode, commonAncestor, true)) { + if (commonAncestor._parent === null) { + throw new Error("Parent node is null."); } - return null; - }; - /** @inheritdoc */ - HTMLCollectionImpl.prototype.namedItem = function (key) { - var _this = this; - /** - * 1. If key is the empty string, return null. - * 2. Return the first element in the collection for which at least one of - * the following is true: - * - it has an ID which is key; - * - it is in the HTML namespace and has a name attribute whose value is key; - * or null if there is no such element. - */ - if (key === '') - return null; - var ele = algorithm_1.tree_getFirstDescendantNode(this._root, false, false, function (e) { return util_1.Guard.isElementNode(e) && _this._filter(e); }); - while (ele != null) { - if (ele._uniqueIdentifier === key) { - return ele; - } - else if (ele._namespace === infra_1.namespace.HTML) { - for (var i = 0; i < ele._attributeList.length; i++) { - var attr = ele._attributeList[i]; - if (attr._localName === "name" && attr._namespace === null && - attr._namespacePrefix === null && attr._value === key) - return ele; + commonAncestor = commonAncestor._parent; + } + /** + * 7. Let first partially contained child be null. + * 8. If original start node is not an inclusive ancestor of original end + * node, set first partially contained child to the first child of common + * ancestor that is partially contained in range. + */ + var firstPartiallyContainedChild = null; + if (!TreeAlgorithm_1.tree_isAncestorOf(originalEndNode, originalStartNode, true)) { + try { + for (var _d = __values(commonAncestor._children), _e = _d.next(); !_e.done; _e = _d.next()) { + var node = _e.value; + if (range_isPartiallyContained(node, range)) { + firstPartiallyContainedChild = node; + break; } } - ele = algorithm_1.tree_getNextDescendantNode(this._root, ele, false, false, function (e) { return util_1.Guard.isElementNode(e) && _this._filter(e); }); } - return null; - }; - /** @inheritdoc */ - HTMLCollectionImpl.prototype[Symbol.iterator] = function () { - var root = this._root; - var filter = this._filter; - var currentNode = algorithm_1.tree_getFirstDescendantNode(root, false, false, function (e) { return util_1.Guard.isElementNode(e) && filter(e); }); - return { - next: function () { - if (currentNode === null) { - return { done: true, value: null }; - } - else { - var result = { done: false, value: currentNode }; - currentNode = algorithm_1.tree_getNextDescendantNode(root, currentNode, false, false, function (e) { return util_1.Guard.isElementNode(e) && filter(e); }); - return result; - } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (_e && !_e.done && (_a = _d.return)) _a.call(_d); } - }; - }; - /** - * Implements a proxy get trap to provide array-like access. - */ - HTMLCollectionImpl.prototype.get = function (target, key, receiver) { - if (!util_2.isString(key) || HTMLCollectionImpl.reservedNames.indexOf(key) !== -1) { - return Reflect.get(target, key, receiver); - } - var index = Number(key); - if (isNaN(index)) { - return target.namedItem(key) || undefined; - } - else { - return target.item(index) || undefined; + finally { if (e_4) throw e_4.error; } } - }; + } /** - * Implements a proxy set trap to provide array-like access. + * 9. Let last partially contained child be null. + * 10. If original end node is not an inclusive ancestor of original start + * node, set last partially contained child to the last child of common + * ancestor that is partially contained in range. */ - HTMLCollectionImpl.prototype.set = function (target, key, value, receiver) { - if (!util_2.isString(key) || HTMLCollectionImpl.reservedNames.indexOf(key) !== -1) { - return Reflect.set(target, key, value, receiver); - } - var index = Number(key); - var node = isNaN(index) ? - target.namedItem(key) || undefined : target.item(index) || undefined; - if (node && node._parent) { - algorithm_1.mutation_replace(node, value, node._parent); - return true; + var lastPartiallyContainedChild = null; + if (!TreeAlgorithm_1.tree_isAncestorOf(originalStartNode, originalEndNode, true)) { + var children = __spread(commonAncestor._children); + for (var i = children.length - 1; i > 0; i--) { + var node = children[i]; + if (range_isPartiallyContained(node, range)) { + lastPartiallyContainedChild = node; + break; + } } - else { - return false; + } + /** + * 11. Let contained children be a list of all children of common ancestor + * that are contained in range, in tree order. + * 12. If any member of contained children is a doctype, then throw a + * "HierarchyRequestError" DOMException. + */ + var containedChildren = []; + try { + for (var _f = __values(commonAncestor._children), _g = _f.next(); !_g.done; _g = _f.next()) { + var child = _g.value; + if (range_isContained(child, range)) { + if (util_1.Guard.isDocumentTypeNode(child)) { + throw new DOMException_1.HierarchyRequestError(); + } + containedChildren.push(child); + } } - }; + } + catch (e_5_1) { e_5 = { error: e_5_1 }; } + finally { + try { + if (_g && !_g.done && (_b = _f.return)) _b.call(_f); + } + finally { if (e_5) throw e_5.error; } + } + if (util_1.Guard.isCharacterDataNode(firstPartiallyContainedChild)) { + /** + * 13. If first partially contained child is a Text, ProcessingInstruction, + * or Comment node: + * 13.1. Let clone be a clone of original start node. + * 13.2. Set the data of clone to the result of substringing data with + * node original start node, offset original start offset, and count + * original start node’s length minus original start offset. + * 13.3. Append clone to fragment. + */ + var clone = NodeAlgorithm_1.node_clone(originalStartNode); + clone._data = CharacterDataAlgorithm_1.characterData_substringData(originalStartNode, originalStartOffset, TreeAlgorithm_1.tree_nodeLength(originalStartNode) - originalStartOffset); + MutationAlgorithm_1.mutation_append(clone, fragment); + } + else if (firstPartiallyContainedChild !== null) { + /** + * 14. Otherwise, if first partially contained child is not null: + * 14.1. Let clone be a clone of first partially contained child. + * 14.2. Append clone to fragment. + * 14.3. Let subrange be a new live range whose start is (original start + * node, original start offset) and whose end is (first partially + * contained child, first partially contained child’s length). + * 14.4. Let subfragment be the result of cloning the contents of + * subrange. + * 14.5. Append subfragment to clone. + */ + var clone = NodeAlgorithm_1.node_clone(firstPartiallyContainedChild); + MutationAlgorithm_1.mutation_append(clone, fragment); + var subrange = CreateAlgorithm_1.create_range([originalStartNode, originalStartOffset], [firstPartiallyContainedChild, TreeAlgorithm_1.tree_nodeLength(firstPartiallyContainedChild)]); + var subfragment = range_cloneTheContents(subrange); + MutationAlgorithm_1.mutation_append(subfragment, clone); + } + try { + /** + * 15. For each contained child in contained children, append contained + * child to fragment. + * 15.1. Let clone be a clone of contained child with the clone children + * flag set. + * 15.2. Append clone to fragment. + */ + for (var containedChildren_2 = __values(containedChildren), containedChildren_2_1 = containedChildren_2.next(); !containedChildren_2_1.done; containedChildren_2_1 = containedChildren_2.next()) { + var child = containedChildren_2_1.value; + var clone = NodeAlgorithm_1.node_clone(child); + MutationAlgorithm_1.mutation_append(clone, fragment); + } + } + catch (e_6_1) { e_6 = { error: e_6_1 }; } + finally { + try { + if (containedChildren_2_1 && !containedChildren_2_1.done && (_c = containedChildren_2.return)) _c.call(containedChildren_2); + } + finally { if (e_6) throw e_6.error; } + } + if (util_1.Guard.isCharacterDataNode(lastPartiallyContainedChild)) { + /** + * 16. If last partially contained child is a Text, ProcessingInstruction, + * or Comment node: + * 16.1. Let clone be a clone of original end node. + * 16.2. Set the data of clone to the result of substringing data with + * node original end node, offset 0, and count original end offset. + * 16.3. Append clone to fragment. + */ + var clone = NodeAlgorithm_1.node_clone(originalEndNode); + clone._data = CharacterDataAlgorithm_1.characterData_substringData(originalEndNode, 0, originalEndOffset); + MutationAlgorithm_1.mutation_append(clone, fragment); + } + else if (lastPartiallyContainedChild !== null) { + /** + * 17. Otherwise, if last partially contained child is not null: + * 17.1. Let clone be a clone of last partially contained child. + * 17.2. Append clone to fragment. + * 17.3. Let subrange be a new live range whose start is (last partially + * contained child, 0) and whose end is (original end node, original + * end offset). + * 17.4. Let subfragment be the result of cloning the contents of subrange. + * 17.5. Append subfragment to clone. + */ + var clone = NodeAlgorithm_1.node_clone(lastPartiallyContainedChild); + fragment.append(clone); + var subrange = CreateAlgorithm_1.create_range([lastPartiallyContainedChild, 0], [originalEndNode, originalEndOffset]); + var subfragment = range_extract(subrange); + MutationAlgorithm_1.mutation_append(subfragment, clone); + } /** - * Creates a new `HTMLCollection`. - * - * @param root - root node - * @param filter - node filter + * 18. Return fragment. */ - HTMLCollectionImpl._create = function (root, filter) { - if (filter === void 0) { filter = (function () { return true; }); } - return new HTMLCollectionImpl(root, filter); - }; - HTMLCollectionImpl.reservedNames = ['_root', '_live', '_filter', 'length', - 'item', 'namedItem', 'get', 'set']; - return HTMLCollectionImpl; -}()); -exports.HTMLCollectionImpl = HTMLCollectionImpl; -//# sourceMappingURL=HTMLCollectionImpl.js.map - -/***/ }), -/* 205 */, -/* 206 */, -/* 207 */, -/* 208 */, -/* 209 */, -/* 210 */, -/* 211 */ -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = exports.INPUT_DEFAULT_GPG_PASSPHRASE = exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = exports.INPUT_GPG_PASSPHRASE = exports.INPUT_GPG_PRIVATE_KEY = exports.INPUT_OVERWRITE_SETTINGS = exports.INPUT_SETTINGS_PATH = exports.INPUT_SERVER_PASSWORD = exports.INPUT_SERVER_USERNAME = exports.INPUT_SERVER_ID = exports.INPUT_CHECK_LATEST = exports.INPUT_JDK_FILE = exports.INPUT_DISTRIBUTION = exports.INPUT_JAVA_PACKAGE = exports.INPUT_ARCHITECTURE = exports.INPUT_JAVA_VERSION = exports.MACOS_JAVA_CONTENT_POSTFIX = void 0; -exports.MACOS_JAVA_CONTENT_POSTFIX = 'Contents/Home'; -exports.INPUT_JAVA_VERSION = 'java-version'; -exports.INPUT_ARCHITECTURE = 'architecture'; -exports.INPUT_JAVA_PACKAGE = 'java-package'; -exports.INPUT_DISTRIBUTION = 'distribution'; -exports.INPUT_JDK_FILE = 'jdkFile'; -exports.INPUT_CHECK_LATEST = 'check-latest'; -exports.INPUT_SERVER_ID = 'server-id'; -exports.INPUT_SERVER_USERNAME = 'server-username'; -exports.INPUT_SERVER_PASSWORD = 'server-password'; -exports.INPUT_SETTINGS_PATH = 'settings-path'; -exports.INPUT_OVERWRITE_SETTINGS = 'overwrite-settings'; -exports.INPUT_GPG_PRIVATE_KEY = 'gpg-private-key'; -exports.INPUT_GPG_PASSPHRASE = 'gpg-passphrase'; -exports.INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined; -exports.INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE'; -exports.STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint'; - - -/***/ }), -/* 212 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -// Export classes -var DOMParserImpl_1 = __webpack_require__(642); -exports.DOMParser = DOMParserImpl_1.DOMParserImpl; -//# sourceMappingURL=index.js.map - -/***/ }), -/* 213 */, -/* 214 */, -/* 215 */, -/* 216 */, -/* 217 */, -/* 218 */, -/* 219 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const Range = __webpack_require__(124) - -// Mostly just for testing and legacy API reasons -const toComparators = (range, options) => - new Range(range, options).set - .map(comp => comp.map(c => c.value).join(' ').trim().split(' ')) - -module.exports = toComparators - - -/***/ }), -/* 220 */, -/* 221 */, -/* 222 */, -/* 223 */, -/* 224 */, -/* 225 */, -/* 226 */, -/* 227 */, -/* 228 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - -var Type = __webpack_require__(945); - -function resolveYamlBoolean(data) { - if (data === null) return false; - - var max = data.length; - - return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) || - (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); + return fragment; } - -function constructYamlBoolean(data) { - return data === 'true' || - data === 'True' || - data === 'TRUE'; +exports.range_cloneTheContents = range_cloneTheContents; +/** + * Inserts a node into a range at the start boundary point. + * + * @param node - node to insert + * @param range - a range + */ +function range_insert(node, range) { + var e_7, _a; + /** + * 1. If range’s start node is a ProcessingInstruction or Comment node, is a + * Text node whose parent is null, or is node, then throw a + * "HierarchyRequestError" DOMException. + */ + if (util_1.Guard.isProcessingInstructionNode(range._startNode) || + util_1.Guard.isCommentNode(range._startNode) || + (util_1.Guard.isTextNode(range._startNode) && range._startNode._parent === null) || + range._startNode === node) { + throw new DOMException_1.HierarchyRequestError(); + } + /** + * 2. Let referenceNode be null. + * 3. If range’s start node is a Text node, set referenceNode to that Text + * node. + * 4. Otherwise, set referenceNode to the child of start node whose index is + * start offset, and null if there is no such child. + */ + var referenceNode = null; + if (util_1.Guard.isTextNode(range._startNode)) { + referenceNode = range._startNode; + } + else { + var index = 0; + try { + for (var _b = __values(range._startNode._children), _c = _b.next(); !_c.done; _c = _b.next()) { + var child = _c.value; + if (index === range._startOffset) { + referenceNode = child; + break; + } + index++; + } + } + catch (e_7_1) { e_7 = { error: e_7_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_7) throw e_7.error; } + } + } + /** + * 5. Let parent be range’s start node if referenceNode is null, and + * referenceNode’s parent otherwise. + */ + var parent; + if (referenceNode === null) { + parent = range._startNode; + } + else { + if (referenceNode._parent === null) { + throw new Error("Parent node is null."); + } + parent = referenceNode._parent; + } + /** + * 6. Ensure pre-insertion validity of node into parent before referenceNode. + */ + MutationAlgorithm_1.mutation_ensurePreInsertionValidity(node, parent, referenceNode); + /** + * 7. If range’s start node is a Text node, set referenceNode to the result + * of splitting it with offset range’s start offset. + */ + if (util_1.Guard.isTextNode(range._startNode)) { + referenceNode = TextAlgorithm_1.text_split(range._startNode, range._startOffset); + } + /** + * 8. If node is referenceNode, set referenceNode to its next sibling. + */ + if (node === referenceNode) { + referenceNode = node._nextSibling; + } + /** + * 9. If node’s parent is not null, remove node from its parent. + */ + if (node._parent !== null) { + MutationAlgorithm_1.mutation_remove(node, node._parent); + } + /** + * 10. Let newOffset be parent’s length if referenceNode is null, and + * referenceNode’s index otherwise. + */ + var newOffset = (referenceNode === null ? + TreeAlgorithm_1.tree_nodeLength(parent) : TreeAlgorithm_1.tree_index(referenceNode)); + /** + * 11. Increase newOffset by node’s length if node is a DocumentFragment + * node, and one otherwise. + */ + if (util_1.Guard.isDocumentFragmentNode(node)) { + newOffset += TreeAlgorithm_1.tree_nodeLength(node); + } + else { + newOffset++; + } + /** + * 12. Pre-insert node into parent before referenceNode. + */ + MutationAlgorithm_1.mutation_preInsert(node, parent, referenceNode); + /** + * 13. If range is collapsed, then set range’s end to (parent, newOffset). + */ + if (range_collapsed(range)) { + range._end = [parent, newOffset]; + } } - -function isBoolean(object) { - return Object.prototype.toString.call(object) === '[object Boolean]'; +exports.range_insert = range_insert; +/** + * Traverses through all contained nodes of a range. + * + * @param range - a range + */ +function range_getContainedNodes(range) { + var _a; + return _a = {}, + _a[Symbol.iterator] = function () { + var container = range.commonAncestorContainer; + var currentNode = TreeAlgorithm_1.tree_getFirstDescendantNode(container); + return { + next: function () { + while (currentNode && !range_isContained(currentNode, range)) { + currentNode = TreeAlgorithm_1.tree_getNextDescendantNode(container, currentNode); + } + if (currentNode === null) { + return { done: true, value: null }; + } + else { + var result = { done: false, value: currentNode }; + currentNode = TreeAlgorithm_1.tree_getNextDescendantNode(container, currentNode); + return result; + } + } + }; + }, + _a; } - -module.exports = new Type('tag:yaml.org,2002:bool', { - kind: 'scalar', - resolve: resolveYamlBoolean, - construct: constructYamlBoolean, - predicate: isBoolean, - represent: { - lowercase: function (object) { return object ? 'true' : 'false'; }, - uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, - camelcase: function (object) { return object ? 'True' : 'False'; } - }, - defaultStyle: 'lowercase' -}); - - -/***/ }), -/* 229 */, -/* 230 */, -/* 231 */, -/* 232 */, -/* 233 */, -/* 234 */, -/* 235 */, -/* 236 */, -/* 237 */, -/* 238 */, -/* 239 */, -/* 240 */, -/* 241 */, -/* 242 */, -/* 243 */, -/* 244 */, -/* 245 */, -/* 246 */, -/* 247 */ -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); +exports.range_getContainedNodes = range_getContainedNodes; /** - * Represents a mixin for an interface to be used to share APIs between - * documents and shadow roots. This mixin is implemented by - * {@link Document} and {@link ShadowRoot}. + * Traverses through all partially contained nodes of a range. * - * _Note:_ The DocumentOrShadowRoot mixin is expected to be used by other - * standards that want to define APIs shared between documents and shadow roots. + * @param range - a range */ -var DocumentOrShadowRootImpl = /** @class */ (function () { - function DocumentOrShadowRootImpl() { - } - return DocumentOrShadowRootImpl; -}()); -exports.DocumentOrShadowRootImpl = DocumentOrShadowRootImpl; -//# sourceMappingURL=DocumentOrShadowRootImpl.js.map +function range_getPartiallyContainedNodes(range) { + var _a; + return _a = {}, + _a[Symbol.iterator] = function () { + var container = range.commonAncestorContainer; + var currentNode = TreeAlgorithm_1.tree_getFirstDescendantNode(container); + return { + next: function () { + while (currentNode && !range_isPartiallyContained(currentNode, range)) { + currentNode = TreeAlgorithm_1.tree_getNextDescendantNode(container, currentNode); + } + if (currentNode === null) { + return { done: true, value: null }; + } + else { + var result = { done: false, value: currentNode }; + currentNode = TreeAlgorithm_1.tree_getNextDescendantNode(container, currentNode); + return result; + } + } + }; + }, + _a; +} +exports.range_getPartiallyContainedNodes = range_getPartiallyContainedNodes; +//# sourceMappingURL=RangeAlgorithm.js.map /***/ }), -/* 248 */, -/* 249 */, -/* 250 */, -/* 251 */, -/* 252 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var dom_1 = __webpack_require__(113); -dom_1.dom.setFeatures(true); -var dom_2 = __webpack_require__(113); -exports.DOMImplementation = dom_2.DOMImplementation; -var parser_1 = __webpack_require__(212); -exports.DOMParser = parser_1.DOMParser; -var serializer_1 = __webpack_require__(686); -exports.XMLSerializer = serializer_1.XMLSerializer; -//# sourceMappingURL=index.js.map - -/***/ }), -/* 253 */, -/* 254 */, -/* 255 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 1853: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var builder_1 = __webpack_require__(535); -exports.builder = builder_1.builder; -exports.create = builder_1.create; -exports.fragment = builder_1.fragment; -exports.convert = builder_1.convert; -exports.createCB = builder_1.createCB; -exports.fragmentCB = builder_1.fragmentCB; -//# sourceMappingURL=index.js.map - -/***/ }), -/* 256 */, -/* 257 */, -/* 258 */, -/* 259 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const Range = __webpack_require__(124) -const intersects = (r1, r2, options) => { - r1 = new Range(r1, options) - r2 = new Range(r2, options) - return r1.intersects(r2) +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMException_1 = __nccwpck_require__(3166); +/** + * Matches elements with the given selectors. + * + * @param selectors - selectors + * @param node - the node to match against + */ +function selectors_scopeMatchASelectorsString(selectors, node) { + /** + * TODO: Selectors + * 1. Let s be the result of parse a selector selectors. [SELECTORS4] + * 2. If s is failure, then throw a "SyntaxError" DOMException. + * 3. Return the result of match a selector against a tree with s and node’s + * root using scoping root node. [SELECTORS4]. + */ + throw new DOMException_1.NotSupportedError(); } -module.exports = intersects - +exports.selectors_scopeMatchASelectorsString = selectors_scopeMatchASelectorsString; +//# sourceMappingURL=SelectorsAlgorithm.js.map /***/ }), -/* 260 */, -/* 261 */, -/* 262 */, -/* 263 */ -/***/ (function(__unusedmodule, exports) { + +/***/ 8733: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; @@ -11568,185 +10958,295 @@ var __spread = (this && this.__spread) || function () { for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); return ar; }; -Object.defineProperty(exports, "__esModule", { value: true }); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var util_1 = __nccwpck_require__(5282); +var util_2 = __nccwpck_require__(6195); +var TreeAlgorithm_1 = __nccwpck_require__(6620); +var MutationObserverAlgorithm_1 = __nccwpck_require__(8157); /** - * Returns the count of bytes in a sequence. + * Signals a slot change to the given slot. * - * @param list - a byte sequence + * @param slot - a slot */ -function length(list) { +function shadowTree_signalASlotChange(slot) { /** - * A byte sequence’s length is the number of bytes it contains. + * 1. Append slot to slot’s relevant agent’s signal slots. + * 2. Queue a mutation observer microtask. */ - return list.length; + var window = DOMImpl_1.dom.window; + window._signalSlots.add(slot); + MutationObserverAlgorithm_1.observer_queueAMutationObserverMicrotask(); } -exports.length = length; +exports.shadowTree_signalASlotChange = shadowTree_signalASlotChange; /** - * Converts each byte to lowercase. + * Determines whether a the shadow tree of the given element node is + * connected to a document node. * - * @param list - a byte sequence + * @param element - an element node of the shadow tree */ -function byteLowercase(list) { +function shadowTree_isConnected(element) { /** - * To byte-lowercase a byte sequence, increase each byte it contains, in the - * range 0x41 (A) to 0x5A (Z), inclusive, by 0x20. + * An element is connected if its shadow-including root is a document. */ - for (var i = 0; i < list.length; i++) { - var c = list[i]; - if (c >= 0x41 && c <= 0x5A) { - list[i] = c + 0x20; - } - } + return util_1.Guard.isDocumentNode(TreeAlgorithm_1.tree_rootNode(element, true)); } -exports.byteLowercase = byteLowercase; +exports.shadowTree_isConnected = shadowTree_isConnected; /** - * Converts each byte to uppercase. + * Determines whether a slotable is assigned. * - * @param list - a byte sequence + * @param slotable - a slotable */ -function byteUppercase(list) { +function shadowTree_isAssigned(slotable) { /** - * To byte-uppercase a byte sequence, subtract each byte it contains, in the - * range 0x61 (a) to 0x7A (z), inclusive, by 0x20. + * A slotable is assigned if its assigned slot is non-null. */ - for (var i = 0; i < list.length; i++) { - var c = list[i]; - if (c >= 0x61 && c <= 0x7A) { - list[i] = c - 0x20; - } - } + return (slotable._assignedSlot !== null); } -exports.byteUppercase = byteUppercase; +exports.shadowTree_isAssigned = shadowTree_isAssigned; /** - * Compares two byte sequences. + * Finds a slot for the given slotable. * - * @param listA - a byte sequence - * @param listB - a byte sequence + * @param slotable - a slotable + * @param openFlag - `true` to search open shadow tree's only */ -function byteCaseInsensitiveMatch(listA, listB) { +function shadowTree_findASlot(slotable, openFlag) { + if (openFlag === void 0) { openFlag = false; } /** - * A byte sequence A is a byte-case-insensitive match for a byte sequence B, - * if the byte-lowercase of A is the byte-lowercase of B. + * 1. If slotable’s parent is null, then return null. + * 2. Let shadow be slotable’s parent’s shadow root. + * 3. If shadow is null, then return null. + * 4. If the open flag is set and shadow’s mode is not "open", then + * return null. + * 5. Return the first slot in tree order in shadow’s descendants whose name + * is slotable’s name, if any, and null otherwise. */ - if (listA.length !== listB.length) - return false; - for (var i = 0; i < listA.length; i++) { - var a = listA[i]; - var b = listB[i]; - if (a >= 0x41 && a <= 0x5A) - a += 0x20; - if (b >= 0x41 && b <= 0x5A) - b += 0x20; - if (a !== b) - return false; + var node = util_1.Cast.asNode(slotable); + var parent = node._parent; + if (parent === null) + return null; + var shadow = parent._shadowRoot || null; + if (shadow === null) + return null; + if (openFlag && shadow._mode !== "open") + return null; + var child = TreeAlgorithm_1.tree_getFirstDescendantNode(shadow, false, true, function (e) { return util_1.Guard.isSlot(e); }); + while (child !== null) { + if (child._name === slotable._name) + return child; + child = TreeAlgorithm_1.tree_getNextDescendantNode(shadow, child, false, true, function (e) { return util_1.Guard.isSlot(e); }); } - return true; + return null; } -exports.byteCaseInsensitiveMatch = byteCaseInsensitiveMatch; +exports.shadowTree_findASlot = shadowTree_findASlot; /** - * Determines if `listA` starts with `listB`. + * Finds slotables for the given slot. * - * @param listA - a byte sequence - * @param listB - a byte sequence + * @param slot - a slot */ -function startsWith(listA, listB) { +function shadowTree_findSlotables(slot) { + var e_1, _a; /** - * 1. Let i be 0. - * 2. While true: - * 2.1. Let aByte be the ith byte of a if i is less than a’s length; otherwise null. - * 2.3. Let bByte be the ith byte of b if i is less than b’s length; otherwise null. - * 2.4. If bByte is null, then return true. - * 2.5. Return false if aByte is not bByte. - * 2.6. Set i to i + 1. + * 1. Let result be an empty list. + * 2. If slot’s root is not a shadow root, then return result. */ - var i = 0; - while (true) { - if (i >= listA.length) - return false; - if (i >= listB.length) - return true; - if (listA[i] !== listB[i]) - return false; - i++; + var result = []; + var root = TreeAlgorithm_1.tree_rootNode(slot); + if (!util_1.Guard.isShadowRoot(root)) + return result; + /** + * 3. Let host be slot’s root’s host. + * 4. For each slotable child of host, slotable, in tree order: + */ + var host = root._host; + try { + for (var _b = __values(host._children), _c = _b.next(); !_c.done; _c = _b.next()) { + var slotable = _c.value; + if (util_1.Guard.isSlotable(slotable)) { + /** + * 4.1. Let foundSlot be the result of finding a slot given slotable. + * 4.2. If foundSlot is slot, then append slotable to result. + */ + var foundSlot = shadowTree_findASlot(slotable); + if (foundSlot === slot) { + result.push(slotable); + } + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } } + /** + * 5. Return result. + */ + return result; } -exports.startsWith = startsWith; +exports.shadowTree_findSlotables = shadowTree_findSlotables; /** - * Determines if `listA` is less than `listB`. + * Finds slotables for the given slot. * - * @param listA - a byte sequence - * @param listB - a byte sequence + * @param slot - a slot */ -function byteLessThan(listA, listB) { +function shadowTree_findFlattenedSlotables(slot) { + var e_2, _a, e_3, _b; /** - * 1. If b starts with a, then return false. - * 2. If a starts with b, then return true. - * 3. Let n be the smallest index such that the nth byte of a is different - * from the nth byte of b. (There has to be such an index, since neither byte - * sequence starts with the other.) - * 4. If the nth byte of a is less than the nth byte of b, then return true. - * 5. Return false. + * 1. Let result be an empty list. + * 2. If slot’s root is not a shadow root, then return result. */ - var i = 0; - while (true) { - if (i >= listA.length) - return false; - if (i >= listB.length) - return true; - var a = listA[i]; - var b = listB[i]; - if (a < b) - return true; - else if (a > b) - return false; - i++; + var result = []; + var root = TreeAlgorithm_1.tree_rootNode(slot); + if (!util_1.Guard.isShadowRoot(root)) + return result; + /** + * 3. Let slotables be the result of finding slotables given slot. + * 4. If slotables is the empty list, then append each slotable child of + * slot, in tree order, to slotables. + */ + var slotables = shadowTree_findSlotables(slot); + if (util_2.isEmpty(slotables)) { + try { + for (var _c = __values(slot._children), _d = _c.next(); !_d.done; _d = _c.next()) { + var slotable = _d.value; + if (util_1.Guard.isSlotable(slotable)) { + slotables.push(slotable); + } + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_d && !_d.done && (_a = _c.return)) _a.call(_c); + } + finally { if (e_2) throw e_2.error; } + } + } + try { + /** + * 5. For each node in slotables: + */ + for (var slotables_1 = __values(slotables), slotables_1_1 = slotables_1.next(); !slotables_1_1.done; slotables_1_1 = slotables_1.next()) { + var node = slotables_1_1.value; + /** + * 5.1. If node is a slot whose root is a shadow root, then: + */ + if (util_1.Guard.isSlot(node) && util_1.Guard.isShadowRoot(TreeAlgorithm_1.tree_rootNode(node))) { + /** + * 5.1.1. Let temporaryResult be the result of finding flattened slotables given node. + * 5.1.2. Append each slotable in temporaryResult, in order, to result. + */ + var temporaryResult = shadowTree_findFlattenedSlotables(node); + result.push.apply(result, __spread(temporaryResult)); + } + else { + /** + * 5.2. Otherwise, append node to result. + */ + result.push(node); + } + } } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (slotables_1_1 && !slotables_1_1.done && (_b = slotables_1.return)) _b.call(slotables_1); + } + finally { if (e_3) throw e_3.error; } + } + /** + * 6. Return result. + */ + return result; } -exports.byteLessThan = byteLessThan; +exports.shadowTree_findFlattenedSlotables = shadowTree_findFlattenedSlotables; /** - * Decodes a byte sequence into a string. + * Assigns slotables to the given slot. * - * @param list - a byte sequence + * @param slot - a slot */ -function isomorphicDecode(list) { +function shadowTree_assignSlotables(slot) { + var e_4, _a; /** - * To isomorphic decode a byte sequence input, return a string whose length is - * equal to input’s length and whose code points have the same values as - * input’s bytes, in the same order. + * 1. Let slotables be the result of finding slotables for slot. + * 2. If slotables and slot’s assigned nodes are not identical, then run + * signal a slot change for slot. */ - return String.fromCodePoint.apply(String, __spread(list)); + var slotables = shadowTree_findSlotables(slot); + if (slotables.length === slot._assignedNodes.length) { + var nodesIdentical = true; + for (var i = 0; i < slotables.length; i++) { + if (slotables[i] !== slot._assignedNodes[i]) { + nodesIdentical = false; + break; + } + } + if (!nodesIdentical) { + shadowTree_signalASlotChange(slot); + } + } + /** + * 3. Set slot’s assigned nodes to slotables. + * 4. For each slotable in slotables, set slotable’s assigned slot to slot. + */ + slot._assignedNodes = slotables; + try { + for (var slotables_2 = __values(slotables), slotables_2_1 = slotables_2.next(); !slotables_2_1.done; slotables_2_1 = slotables_2.next()) { + var slotable = slotables_2_1.value; + slotable._assignedSlot = slot; + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (slotables_2_1 && !slotables_2_1.done && (_a = slotables_2.return)) _a.call(slotables_2); + } + finally { if (e_4) throw e_4.error; } + } } -exports.isomorphicDecode = isomorphicDecode; -//# sourceMappingURL=ByteSequence.js.map +exports.shadowTree_assignSlotables = shadowTree_assignSlotables; +/** + * Assigns slotables to all nodes of a tree. + * + * @param root - root node + */ +function shadowTree_assignSlotablesForATree(root) { + /** + * To assign slotables for a tree, given a node root, run assign slotables + * for each slot slot in root’s inclusive descendants, in tree order. + */ + var descendant = TreeAlgorithm_1.tree_getFirstDescendantNode(root, true, false, function (e) { return util_1.Guard.isSlot(e); }); + while (descendant !== null) { + shadowTree_assignSlotables(descendant); + descendant = TreeAlgorithm_1.tree_getNextDescendantNode(root, descendant, true, false, function (e) { return util_1.Guard.isSlot(e); }); + } +} +exports.shadowTree_assignSlotablesForATree = shadowTree_assignSlotablesForATree; +/** + * Assigns a slot to a slotables. + * + * @param slotable - a slotable + */ +function shadowTree_assignASlot(slotable) { + /** + * 1. Let slot be the result of finding a slot with slotable. + * 2. If slot is non-null, then run assign slotables for slot. + */ + var slot = shadowTree_findASlot(slotable); + if (slot !== null) { + shadowTree_assignSlotables(slot); + } +} +exports.shadowTree_assignASlot = shadowTree_assignASlot; +//# sourceMappingURL=ShadowTreeAlgorithm.js.map /***/ }), -/* 264 */, -/* 265 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; -// Standard YAML's Failsafe schema. -// http://www.yaml.org/spec/1.2/spec.html#id2802346 - - - - - -var Schema = __webpack_require__(733); - -module.exports = new Schema({ - explicit: [ - __webpack_require__(450), - __webpack_require__(921), - __webpack_require__(988) - ] -}); - - -/***/ }), -/* 266 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 3512: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -11761,338 +11261,297 @@ var __values = (this && this.__values) || function(o) { }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var util_1 = __webpack_require__(592); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var util_1 = __nccwpck_require__(5282); +var DOMException_1 = __nccwpck_require__(3166); +var CreateAlgorithm_1 = __nccwpck_require__(7339); +var TreeAlgorithm_1 = __nccwpck_require__(6620); +var CharacterDataAlgorithm_1 = __nccwpck_require__(9461); +var MutationAlgorithm_1 = __nccwpck_require__(5463); /** - * Represents an ordered list of nodes. - * This is a static implementation of `NodeList`. + * Returns node with its adjacent text and cdata node siblings. + * + * @param node - a node + * @param self - whether to include node itself */ -var NodeListStaticImpl = /** @class */ (function () { +function text_contiguousTextNodes(node, self) { + var _a; + if (self === void 0) { self = false; } /** - * Initializes a new instance of `NodeList`. - * - * @param root - root node + * The contiguous Text nodes of a node node are node, node’s previous + * sibling Text node, if any, and its contiguous Text nodes, and node’s next + * sibling Text node, if any, and its contiguous Text nodes, avoiding any + * duplicates. */ - function NodeListStaticImpl(root) { - this._live = false; - this._items = []; - this._length = 0; - this._root = root; - this._items = []; - this._filter = function (node) { return true; }; - return new Proxy(this, this); - } - Object.defineProperty(NodeListStaticImpl.prototype, "length", { - /** @inheritdoc */ - get: function () { - /** - * The length attribute must return the number of nodes represented by - * the collection. - */ - return this._items.length; - }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - NodeListStaticImpl.prototype.item = function (index) { - /** - * The item(index) method must return the indexth node in the collection. - * If there is no indexth node in the collection, then the method must - * return null. - */ - if (index < 0 || index > this.length - 1) - return null; - return this._items[index]; - }; - /** @inheritdoc */ - NodeListStaticImpl.prototype.keys = function () { - var _a; - return _a = {}, - _a[Symbol.iterator] = function () { - var index = 0; - return { - next: function () { - if (index === this.length) { - return { done: true, value: null }; + return _a = {}, + _a[Symbol.iterator] = function () { + var currentNode = node; + while (currentNode && util_1.Guard.isTextNode(currentNode._previousSibling)) { + currentNode = currentNode._previousSibling; + } + return { + next: function () { + if (currentNode && (!self && currentNode === node)) { + if (util_1.Guard.isTextNode(currentNode._nextSibling)) { + currentNode = currentNode._nextSibling; } else { - return { done: false, value: index++ }; + currentNode = null; } - }.bind(this) - }; - }.bind(this), - _a; - }; - /** @inheritdoc */ - NodeListStaticImpl.prototype.values = function () { - var _a; - return _a = {}, - _a[Symbol.iterator] = function () { - var it = this[Symbol.iterator](); - return { - next: function () { - return it.next(); } - }; - }.bind(this), - _a; - }; - /** @inheritdoc */ - NodeListStaticImpl.prototype.entries = function () { - var _a; - return _a = {}, - _a[Symbol.iterator] = function () { - var it = this[Symbol.iterator](); - var index = 0; - return { - next: function () { - var itResult = it.next(); - if (itResult.done) { - return { done: true, value: null }; + if (currentNode === null) { + return { done: true, value: null }; + } + else { + var result = { done: false, value: currentNode }; + if (util_1.Guard.isTextNode(currentNode._nextSibling)) { + currentNode = currentNode._nextSibling; } else { - return { done: false, value: [index++, itResult.value] }; + currentNode = null; } + return result; } - }; - }.bind(this), - _a; - }; - /** @inheritdoc */ - NodeListStaticImpl.prototype[Symbol.iterator] = function () { - var it = this._items[Symbol.iterator](); - return { - next: function () { - return it.next(); - } - }; - }; - /** @inheritdoc */ - NodeListStaticImpl.prototype.forEach = function (callback, thisArg) { - var e_1, _a; - if (thisArg === undefined) { - thisArg = DOMImpl_1.dom.window; - } - var index = 0; - try { - for (var _b = __values(this._items), _c = _b.next(); !_c.done; _c = _b.next()) { - var node = _c.value; - callback.call(thisArg, node, index++, this); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - }; - /** - * Implements a proxy get trap to provide array-like access. - */ - NodeListStaticImpl.prototype.get = function (target, key, receiver) { - if (!util_1.isString(key)) { - return Reflect.get(target, key, receiver); - } - var index = Number(key); - if (isNaN(index)) { - return Reflect.get(target, key, receiver); - } - return target._items[index] || undefined; - }; - /** - * Implements a proxy set trap to provide array-like access. - */ - NodeListStaticImpl.prototype.set = function (target, key, value, receiver) { - if (!util_1.isString(key)) { - return Reflect.set(target, key, value, receiver); - } - var index = Number(key); - if (isNaN(index)) { - return Reflect.set(target, key, value, receiver); - } - if (index >= 0 && index < target._items.length) { - target._items[index] = value; - return true; - } - else { - return false; - } - }; - /** - * Creates a new `NodeList`. - * - * @param root - root node - * @param items - a list of items to initialize the list - */ - NodeListStaticImpl._create = function (root, items) { - var list = new NodeListStaticImpl(root); - list._items = items; - return list; - }; - return NodeListStaticImpl; -}()); -exports.NodeListStaticImpl = NodeListStaticImpl; -//# sourceMappingURL=NodeListStaticImpl.js.map - -/***/ }), -/* 267 */, -/* 268 */, -/* 269 */, -/* 270 */, -/* 271 */, -/* 272 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var interfaces_1 = __webpack_require__(970); -var TraversalAlgorithm_1 = __webpack_require__(464); -var TreeAlgorithm_1 = __webpack_require__(873); + } + }; + }, + _a; +} +exports.text_contiguousTextNodes = text_contiguousTextNodes; /** - * Returns the next or previous node in the subtree, or `null` if - * there are none. + * Returns node with its adjacent text node siblings. * - * @param iterator - the `NodeIterator` instance - * @param forward- `true` to return the next node, or `false` to - * return the previous node. + * @param node - a node + * @param self - whether to include node itself */ -function nodeIterator_traverse(iterator, forward) { - /** - * 1. Let node be iterator’s reference. - * 2. Let beforeNode be iterator’s pointer before reference. - */ - var node = iterator._reference; - var beforeNode = iterator._pointerBeforeReference; +function text_contiguousExclusiveTextNodes(node, self) { + var _a; + if (self === void 0) { self = false; } /** - * 3. While true: + * The contiguous exclusive Text nodes of a node node are node, node’s + * previous sibling exclusive Text node, if any, and its contiguous + * exclusive Text nodes, and node’s next sibling exclusive Text node, + * if any, and its contiguous exclusive Text nodes, avoiding any duplicates. */ - while (true) { - /** - * 3.1. Branch on direction: - */ - if (forward) { + return _a = {}, + _a[Symbol.iterator] = function () { + var currentNode = node; + while (currentNode && util_1.Guard.isExclusiveTextNode(currentNode._previousSibling)) { + currentNode = currentNode._previousSibling; + } + return { + next: function () { + if (currentNode && (!self && currentNode === node)) { + if (util_1.Guard.isExclusiveTextNode(currentNode._nextSibling)) { + currentNode = currentNode._nextSibling; + } + else { + currentNode = null; + } + } + if (currentNode === null) { + return { done: true, value: null }; + } + else { + var result = { done: false, value: currentNode }; + if (util_1.Guard.isExclusiveTextNode(currentNode._nextSibling)) { + currentNode = currentNode._nextSibling; + } + else { + currentNode = null; + } + return result; + } + } + }; + }, + _a; +} +exports.text_contiguousExclusiveTextNodes = text_contiguousExclusiveTextNodes; +/** + * Returns the concatenation of the data of all the Text node descendants of + * node, in tree order. + * + * @param node - a node + */ +function text_descendantTextContent(node) { + /** + * The descendant text content of a node node is the concatenation of the + * data of all the Text node descendants of node, in tree order. + */ + var contents = ''; + var text = TreeAlgorithm_1.tree_getFirstDescendantNode(node, false, false, function (e) { return util_1.Guard.isTextNode(e); }); + while (text !== null) { + contents += text._data; + text = TreeAlgorithm_1.tree_getNextDescendantNode(node, text, false, false, function (e) { return util_1.Guard.isTextNode(e); }); + } + return contents; +} +exports.text_descendantTextContent = text_descendantTextContent; +/** + * Splits data at the given offset and returns the remainder as a text + * node. + * + * @param node - a text node + * @param offset - the offset at which to split the nodes. + */ +function text_split(node, offset) { + var e_1, _a; + /** + * 1. Let length be node’s length. + * 2. If offset is greater than length, then throw an "IndexSizeError" + * DOMException. + */ + var length = node._data.length; + if (offset > length) { + throw new DOMException_1.IndexSizeError(); + } + /** + * 3. Let count be length minus offset. + * 4. Let new data be the result of substringing data with node node, + * offset offset, and count count. + * 5. Let new node be a new Text node, with the same node document as node. + * Set new node’s data to new data. + * 6. Let parent be node’s parent. + * 7. If parent is not null, then: + */ + var count = length - offset; + var newData = CharacterDataAlgorithm_1.characterData_substringData(node, offset, count); + var newNode = CreateAlgorithm_1.create_text(node._nodeDocument, newData); + var parent = node._parent; + if (parent !== null) { + /** + * 7.1. Insert new node into parent before node’s next sibling. + */ + MutationAlgorithm_1.mutation_insert(newNode, parent, node._nextSibling); + try { /** - * - next + * 7.2. For each live range whose start node is node and start offset is + * greater than offset, set its start node to new node and decrease its + * start offset by offset. + * 7.3. For each live range whose end node is node and end offset is greater + * than offset, set its end node to new node and decrease its end offset + * by offset. + * 7.4. For each live range whose start node is parent and start offset is + * equal to the index of node plus 1, increase its start offset by 1. + * 7.5. For each live range whose end node is parent and end offset is equal + * to the index of node plus 1, increase its end offset by 1. */ - if (!beforeNode) { - /** - * If beforeNode is false, then set node to the first node following - * node in iterator’s iterator collection. If there is no such node, - * then return null. - */ - var nextNode = TreeAlgorithm_1.tree_getFollowingNode(iterator._root, node); - if (nextNode) { - node = nextNode; + for (var _b = __values(DOMImpl_1.dom.rangeList), _c = _b.next(); !_c.done; _c = _b.next()) { + var range = _c.value; + if (range._start[0] === node && range._start[1] > offset) { + range._start[0] = newNode; + range._start[1] -= offset; } - else { - return null; + if (range._end[0] === node && range._end[1] > offset) { + range._end[0] = newNode; + range._end[1] -= offset; } - } - else { - /** - * If beforeNode is true, then set it to false. - */ - beforeNode = false; - } - } - else { - /** - * - previous - */ - if (beforeNode) { - /** - * If beforeNode is true, then set node to the first node preceding - * node in iterator’s iterator collection. If there is no such node, - * then return null. - */ - var prevNode = TreeAlgorithm_1.tree_getPrecedingNode(iterator.root, node); - if (prevNode) { - node = prevNode; + var index = TreeAlgorithm_1.tree_index(node); + if (range._start[0] === parent && range._start[1] === index + 1) { + range._start[1]++; } - else { - return null; + if (range._end[0] === parent && range._end[1] === index + 1) { + range._end[1]++; } } - else { - /** - * If beforeNode is false, then set it to true. - */ - beforeNode = true; - } } - /** - * 3.2. Let result be the result of filtering node within iterator. - * 3.3. If result is FILTER_ACCEPT, then break. - */ - var result = TraversalAlgorithm_1.traversal_filter(iterator, node); - if (result === interfaces_1.FilterResult.Accept) { - break; + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } } } /** - * 4. Set iterator’s reference to node. - * 5. Set iterator’s pointer before reference to beforeNode. - * 6. Return node. + * 8. Replace data with node node, offset offset, count count, and data + * the empty string. + * 9. Return new node. */ - iterator._reference = node; - iterator._pointerBeforeReference = beforeNode; - return node; + CharacterDataAlgorithm_1.characterData_replaceData(node, offset, count, ''); + return newNode; } -exports.nodeIterator_traverse = nodeIterator_traverse; +exports.text_split = text_split; +//# sourceMappingURL=TextAlgorithm.js.map + +/***/ }), + +/***/ 998: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7305); +var DOMException_1 = __nccwpck_require__(3166); /** - * Gets the global iterator list. + * Applies the filter to the given node and returns the result. + * + * @param traverser - the `NodeIterator` or `TreeWalker` instance + * @param node - the node to filter */ -function nodeIterator_iteratorList() { - return DOMImpl_1.dom.window._iteratorList; +function traversal_filter(traverser, node) { + /** + * 1. If traverser’s active flag is set, then throw an "InvalidStateError" + * DOMException. + */ + if (traverser._activeFlag) { + throw new DOMException_1.InvalidStateError(); + } + /** + * 2. Let n be node’s nodeType attribute value − 1. + */ + var n = node._nodeType - 1; + /** + * 3. If the nth bit (where 0 is the least significant bit) of traverser’s + * whatToShow is not set, then return FILTER_SKIP. + */ + var mask = 1 << n; + if ((traverser.whatToShow & mask) === 0) { + return interfaces_1.FilterResult.Skip; + } + /** + * 4. If traverser’s filter is null, then return FILTER_ACCEPT. + */ + if (!traverser.filter) { + return interfaces_1.FilterResult.Accept; + } + /** + * 5. Set traverser’s active flag. + */ + traverser._activeFlag = true; + /** + * 6. Let result be the return value of call a user object’s operation with + * traverser’s filter, "acceptNode", and « node ». If this throws an + * exception, then unset traverser’s active flag and rethrow the exception. + */ + var result = interfaces_1.FilterResult.Reject; + try { + result = traverser.filter.acceptNode(node); + } + catch (err) { + traverser._activeFlag = false; + throw err; + } + /** + * 7. Unset traverser’s active flag. + * 8. Return result. + */ + traverser._activeFlag = false; + return result; } -exports.nodeIterator_iteratorList = nodeIterator_iteratorList; -//# sourceMappingURL=NodeIteratorAlgorithm.js.map +exports.traversal_filter = traversal_filter; +//# sourceMappingURL=TraversalAlgorithm.js.map /***/ }), -/* 273 */, -/* 274 */, -/* 275 */, -/* 276 */, -/* 277 */, -/* 278 */, -/* 279 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 6620: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; var __values = (this && this.__values) || function(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); @@ -12104,965 +11563,1278 @@ var __values = (this && this.__values) || function(o) { }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var util_1 = __nccwpck_require__(5282); +var interfaces_1 = __nccwpck_require__(7305); +/** + * Gets the next descendant of the given node of the tree rooted at `root` + * in depth-first pre-order. + * + * @param root - root node of the tree + * @param node - a node + * @param shadow - whether to visit shadow tree nodes + */ +function _getNextDescendantNode(root, node, shadow) { + if (shadow === void 0) { shadow = false; } + // traverse shadow tree + if (shadow && util_1.Guard.isElementNode(node) && util_1.Guard.isShadowRoot(node.shadowRoot)) { + if (node.shadowRoot._firstChild) + return node.shadowRoot._firstChild; } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } + // traverse child nodes + if (node._firstChild) + return node._firstChild; + if (node === root) + return null; + // traverse siblings + if (node._nextSibling) + return node._nextSibling; + // traverse parent's next sibling + var parent = node._parent; + while (parent && parent !== root) { + if (parent._nextSibling) + return parent._nextSibling; + parent = parent._parent; } - return ar; -}; -var __spread = (this && this.__spread) || function () { - for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); - return ar; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var util_1 = __webpack_require__(592); + return null; +} +function _emptyIterator() { + var _a; + return _a = {}, + _a[Symbol.iterator] = function () { + return { + next: function () { + return { done: true, value: null }; + } + }; + }, + _a; +} /** - * Gets the value corresponding to the given key. + * Returns the first descendant node of the tree rooted at `node` in + * depth-first pre-order. * - * @param map - a map - * @param key - a key + * @param node - root node of the tree + * @param self - whether to include `node` in traversal + * @param shadow - whether to visit shadow tree nodes + * @param filter - a function to filter nodes */ -function get(map, key) { - return map.get(key); +function tree_getFirstDescendantNode(node, self, shadow, filter) { + if (self === void 0) { self = false; } + if (shadow === void 0) { shadow = false; } + var firstNode = (self ? node : _getNextDescendantNode(node, node, shadow)); + while (firstNode && filter && !filter(firstNode)) { + firstNode = _getNextDescendantNode(node, firstNode, shadow); + } + return firstNode; } -exports.get = get; +exports.tree_getFirstDescendantNode = tree_getFirstDescendantNode; /** - * Sets the value corresponding to the given key. + * Returns the next descendant node of the tree rooted at `node` in + * depth-first pre-order. * - * @param map - a map - * @param key - a key - * @param val - a value + * @param node - root node of the tree + * @param currentNode - current descendant node + * @param self - whether to include `node` in traversal + * @param shadow - whether to visit shadow tree nodes + * @param filter - a function to filter nodes */ -function set(map, key, val) { - map.set(key, val); +function tree_getNextDescendantNode(node, currentNode, self, shadow, filter) { + if (self === void 0) { self = false; } + if (shadow === void 0) { shadow = false; } + var nextNode = _getNextDescendantNode(node, currentNode, shadow); + while (nextNode && filter && !filter(nextNode)) { + nextNode = _getNextDescendantNode(node, nextNode, shadow); + } + return nextNode; } -exports.set = set; +exports.tree_getNextDescendantNode = tree_getNextDescendantNode; /** - * Removes the item with the given key or all items matching condition. + * Traverses through all descendant nodes of the tree rooted at + * `node` in depth-first pre-order. * - * @param map - a map - * @param conditionOrItem - the key of an item to remove or a condition matching - * items to remove + * @param node - root node of the tree + * @param self - whether to include `node` in traversal + * @param shadow - whether to visit shadow tree nodes + * @param filter - a function to filter nodes */ -function remove(map, conditionOrItem) { - var e_1, _a, e_2, _b; - if (!util_1.isFunction(conditionOrItem)) { - map.delete(conditionOrItem); +function tree_getDescendantNodes(node, self, shadow, filter) { + var _a; + if (self === void 0) { self = false; } + if (shadow === void 0) { shadow = false; } + if (!self && node._children.size === 0) { + return _emptyIterator(); } - else { - var toRemove = []; - try { - for (var map_1 = __values(map), map_1_1 = map_1.next(); !map_1_1.done; map_1_1 = map_1.next()) { - var item = map_1_1.value; - if (!!conditionOrItem.call(null, item)) { - toRemove.push(item[0]); + return _a = {}, + _a[Symbol.iterator] = function () { + var currentNode = (self ? node : _getNextDescendantNode(node, node, shadow)); + return { + next: function () { + while (currentNode && filter && !filter(currentNode)) { + currentNode = _getNextDescendantNode(node, currentNode, shadow); + } + if (currentNode === null) { + return { done: true, value: null }; + } + else { + var result = { done: false, value: currentNode }; + currentNode = _getNextDescendantNode(node, currentNode, shadow); + return result; + } } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (map_1_1 && !map_1_1.done && (_a = map_1.return)) _a.call(map_1); - } - finally { if (e_1) throw e_1.error; } - } - try { - for (var toRemove_1 = __values(toRemove), toRemove_1_1 = toRemove_1.next(); !toRemove_1_1.done; toRemove_1_1 = toRemove_1.next()) { - var key = toRemove_1_1.value; - map.delete(key); - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (toRemove_1_1 && !toRemove_1_1.done && (_b = toRemove_1.return)) _b.call(toRemove_1); - } - finally { if (e_2) throw e_2.error; } - } - } + }; + }, + _a; } -exports.remove = remove; +exports.tree_getDescendantNodes = tree_getDescendantNodes; /** - * Determines if the map contains a value with the given key. + * Traverses through all descendant element nodes of the tree rooted at + * `node` in depth-first preorder. * - * @param map - a map - * @param conditionOrItem - the key of an item to match or a condition matching - * items + * @param node - root node of the tree + * @param self - whether to include `node` in traversal + * @param shadow - whether to visit shadow tree nodes + * @param filter - a function to filter nodes */ -function contains(map, conditionOrItem) { - var e_3, _a; - if (!util_1.isFunction(conditionOrItem)) { - return map.has(conditionOrItem); +function tree_getDescendantElements(node, self, shadow, filter) { + var _a; + if (self === void 0) { self = false; } + if (shadow === void 0) { shadow = false; } + if (!self && node._children.size === 0) { + return _emptyIterator(); } - else { - try { - for (var map_2 = __values(map), map_2_1 = map_2.next(); !map_2_1.done; map_2_1 = map_2.next()) { - var item = map_2_1.value; - if (!!conditionOrItem.call(null, item)) { - return true; + return _a = {}, + _a[Symbol.iterator] = function () { + var it = tree_getDescendantNodes(node, self, shadow, function (e) { return util_1.Guard.isElementNode(e); })[Symbol.iterator](); + var currentNode = it.next().value; + return { + next: function () { + while (currentNode && filter && !filter(currentNode)) { + currentNode = it.next().value; + } + if (currentNode === null) { + return { done: true, value: null }; + } + else { + var result = { done: false, value: currentNode }; + currentNode = it.next().value; + return result; + } } - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (map_2_1 && !map_2_1.done && (_a = map_2.return)) _a.call(map_2); - } - finally { if (e_3) throw e_3.error; } - } - return false; - } + }; + }, + _a; } -exports.contains = contains; +exports.tree_getDescendantElements = tree_getDescendantElements; /** - * Gets the keys of the map. + * Traverses through all sibling nodes of `node`. * - * @param map - a map + * @param node - root node of the tree + * @param self - whether to include `node` in traversal + * @param filter - a function to filter nodes */ -function keys(map) { - return new Set(map.keys()); +function tree_getSiblingNodes(node, self, filter) { + var _a; + if (self === void 0) { self = false; } + if (!node._parent || node._parent._children.size === 0) { + return _emptyIterator(); + } + return _a = {}, + _a[Symbol.iterator] = function () { + var currentNode = node._parent ? node._parent._firstChild : null; + return { + next: function () { + while (currentNode && (filter && !filter(currentNode) || (!self && currentNode === node))) { + currentNode = currentNode._nextSibling; + } + if (currentNode === null) { + return { done: true, value: null }; + } + else { + var result = { done: false, value: currentNode }; + currentNode = currentNode._nextSibling; + return result; + } + } + }; + }, + _a; } -exports.keys = keys; +exports.tree_getSiblingNodes = tree_getSiblingNodes; /** - * Gets the values of the map. + * Gets the first ancestor of `node` in reverse tree order. * - * @param map - a map + * @param node - root node of the tree + * @param self - whether to include `node` in traversal + * @param filter - a function to filter nodes */ -function values(map) { - return __spread(map.values()); +function tree_getFirstAncestorNode(node, self, filter) { + if (self === void 0) { self = false; } + var firstNode = self ? node : node._parent; + while (firstNode && filter && !filter(firstNode)) { + firstNode = firstNode._parent; + } + return firstNode; } -exports.values = values; +exports.tree_getFirstAncestorNode = tree_getFirstAncestorNode; /** - * Gets the size of the map. + * Gets the first ancestor of `node` in reverse tree order. * - * @param map - a map - * @param condition - an optional condition to match + * @param node - root node of the tree + * @param self - whether to include `node` in traversal + * @param filter - a function to filter nodes */ -function size(map, condition) { - var e_4, _a; - if (condition === undefined) { - return map.size; - } - else { - var count = 0; - try { - for (var map_3 = __values(map), map_3_1 = map_3.next(); !map_3_1.done; map_3_1 = map_3.next()) { - var item = map_3_1.value; - if (!!condition.call(null, item)) { - count++; - } - } - } - catch (e_4_1) { e_4 = { error: e_4_1 }; } - finally { - try { - if (map_3_1 && !map_3_1.done && (_a = map_3.return)) _a.call(map_3); - } - finally { if (e_4) throw e_4.error; } - } - return count; +function tree_getNextAncestorNode(node, currentNode, self, filter) { + if (self === void 0) { self = false; } + var nextNode = currentNode._parent; + while (nextNode && filter && !filter(nextNode)) { + nextNode = nextNode._parent; } + return nextNode; } -exports.size = size; +exports.tree_getNextAncestorNode = tree_getNextAncestorNode; /** - * Determines if the map is empty. + * Traverses through all ancestor nodes `node` in reverse tree order. * - * @param map - a map + * @param node - root node of the tree + * @param self - whether to include `node` in traversal + * @param filter - a function to filter nodes */ -function isEmpty(map) { - return map.size === 0; +function tree_getAncestorNodes(node, self, filter) { + var _a; + if (self === void 0) { self = false; } + if (!self && !node._parent) { + return _emptyIterator(); + } + return _a = {}, + _a[Symbol.iterator] = function () { + var currentNode = tree_getFirstAncestorNode(node, self, filter); + return { + next: function () { + if (currentNode === null) { + return { done: true, value: null }; + } + else { + var result = { done: false, value: currentNode }; + currentNode = tree_getNextAncestorNode(node, currentNode, self, filter); + return result; + } + } + }; + }, + _a; } -exports.isEmpty = isEmpty; +exports.tree_getAncestorNodes = tree_getAncestorNodes; /** - * Returns an iterator for the items of the map. + * Returns the common ancestor of the given nodes. * - * @param map - a map - * @param condition - an optional condition to match + * @param nodeA - a node + * @param nodeB - a node */ -function forEach(map, condition) { - var map_4, map_4_1, item, e_5_1; - var e_5, _a; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - if (!(condition === undefined)) return [3 /*break*/, 2]; - return [5 /*yield**/, __values(map)]; - case 1: - _b.sent(); - return [3 /*break*/, 9]; - case 2: - _b.trys.push([2, 7, 8, 9]); - map_4 = __values(map), map_4_1 = map_4.next(); - _b.label = 3; - case 3: - if (!!map_4_1.done) return [3 /*break*/, 6]; - item = map_4_1.value; - if (!!!condition.call(null, item)) return [3 /*break*/, 5]; - return [4 /*yield*/, item]; - case 4: - _b.sent(); - _b.label = 5; - case 5: - map_4_1 = map_4.next(); - return [3 /*break*/, 3]; - case 6: return [3 /*break*/, 9]; - case 7: - e_5_1 = _b.sent(); - e_5 = { error: e_5_1 }; - return [3 /*break*/, 9]; - case 8: - try { - if (map_4_1 && !map_4_1.done && (_a = map_4.return)) _a.call(map_4); - } - finally { if (e_5) throw e_5.error; } - return [7 /*endfinally*/]; - case 9: return [2 /*return*/]; +function tree_getCommonAncestor(nodeA, nodeB) { + if (nodeA === nodeB) { + return nodeA._parent; + } + // lists of parent nodes + var parentsA = []; + var parentsB = []; + var pA = tree_getFirstAncestorNode(nodeA, true); + while (pA !== null) { + parentsA.push(pA); + pA = tree_getNextAncestorNode(nodeA, pA, true); + } + var pB = tree_getFirstAncestorNode(nodeB, true); + while (pB !== null) { + parentsB.push(pB); + pB = tree_getNextAncestorNode(nodeB, pB, true); + } + // walk through parents backwards until they differ + var pos1 = parentsA.length; + var pos2 = parentsB.length; + var parent = null; + for (var i = Math.min(pos1, pos2); i > 0; i--) { + var parent1 = parentsA[--pos1]; + var parent2 = parentsB[--pos2]; + if (parent1 !== parent2) { + break; } - }); + parent = parent1; + } + return parent; } -exports.forEach = forEach; +exports.tree_getCommonAncestor = tree_getCommonAncestor; /** - * Creates and returns a shallow clone of map. + * Returns the node following `node` in depth-first preorder. * - * @param map - a map + * @param root - root of the subtree + * @param node - a node */ -function clone(map) { - return new Map(map); +function tree_getFollowingNode(root, node) { + if (node._firstChild) { + return node._firstChild; + } + else if (node._nextSibling) { + return node._nextSibling; + } + else { + while (true) { + var parent = node._parent; + if (parent === null || parent === root) { + return null; + } + else if (parent._nextSibling) { + return parent._nextSibling; + } + else { + node = parent; + } + } + } } -exports.clone = clone; +exports.tree_getFollowingNode = tree_getFollowingNode; /** - * Returns a new map containing items from the map sorted in ascending - * order. + * Returns the node preceding `node` in depth-first preorder. * - * @param map - a map - * @param lessThanAlgo - a function that returns `true` if its first argument - * is less than its second argument, and `false` otherwise. + * @param root - root of the subtree + * @param node - a node */ -function sortInAscendingOrder(map, lessThanAlgo) { - var list = new (Array.bind.apply(Array, __spread([void 0], map)))(); - list.sort(function (itemA, itemB) { - return lessThanAlgo.call(null, itemA, itemB) ? -1 : 1; - }); - return new Map(list); +function tree_getPrecedingNode(root, node) { + if (node === root) { + return null; + } + if (node._previousSibling) { + node = node._previousSibling; + if (node._lastChild) { + return node._lastChild; + } + else { + return node; + } + } + else { + return node._parent; + } } -exports.sortInAscendingOrder = sortInAscendingOrder; +exports.tree_getPrecedingNode = tree_getPrecedingNode; /** - * Returns a new map containing items from the map sorted in descending - * order. + * Determines if the node tree is constrained. A node tree is + * constrained as follows, expressed as a relationship between the + * type of node and its allowed children: + * - Document (In tree order) + * * Zero or more nodes each of which is ProcessingInstruction + * or Comment. + * * Optionally one DocumentType node. + * * Zero or more nodes each of which is ProcessingInstruction + * or Comment. + * * Optionally one Element node. + * * Zero or more nodes each of which is ProcessingInstruction + * or Comment. + * - DocumentFragment, Element + * * Zero or more nodes each of which is Element, Text, + * ProcessingInstruction, or Comment. + * - DocumentType, Text, ProcessingInstruction, Comment + * * None. * - * @param map - a map - * @param lessThanAlgo - a function that returns `true` if its first argument - * is less than its second argument, and `false` otherwise. + * @param node - the root of the tree */ -function sortInDescendingOrder(map, lessThanAlgo) { - var list = new (Array.bind.apply(Array, __spread([void 0], map)))(); - list.sort(function (itemA, itemB) { - return lessThanAlgo.call(null, itemA, itemB) ? 1 : -1; - }); - return new Map(list); +function tree_isConstrained(node) { + var e_1, _a, e_2, _b, e_3, _c; + switch (node._nodeType) { + case interfaces_1.NodeType.Document: + var hasDocType = false; + var hasElement = false; + try { + for (var _d = __values(node._children), _e = _d.next(); !_e.done; _e = _d.next()) { + var childNode = _e.value; + switch (childNode._nodeType) { + case interfaces_1.NodeType.ProcessingInstruction: + case interfaces_1.NodeType.Comment: + break; + case interfaces_1.NodeType.DocumentType: + if (hasDocType || hasElement) + return false; + hasDocType = true; + break; + case interfaces_1.NodeType.Element: + if (hasElement) + return false; + hasElement = true; + break; + default: + return false; + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_e && !_e.done && (_a = _d.return)) _a.call(_d); + } + finally { if (e_1) throw e_1.error; } + } + break; + case interfaces_1.NodeType.DocumentFragment: + case interfaces_1.NodeType.Element: + try { + for (var _f = __values(node._children), _g = _f.next(); !_g.done; _g = _f.next()) { + var childNode = _g.value; + switch (childNode._nodeType) { + case interfaces_1.NodeType.Element: + case interfaces_1.NodeType.Text: + case interfaces_1.NodeType.ProcessingInstruction: + case interfaces_1.NodeType.CData: + case interfaces_1.NodeType.Comment: + break; + default: + return false; + } + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_g && !_g.done && (_b = _f.return)) _b.call(_f); + } + finally { if (e_2) throw e_2.error; } + } + break; + case interfaces_1.NodeType.DocumentType: + case interfaces_1.NodeType.Text: + case interfaces_1.NodeType.ProcessingInstruction: + case interfaces_1.NodeType.CData: + case interfaces_1.NodeType.Comment: + return (!node.hasChildNodes()); + } + try { + for (var _h = __values(node._children), _j = _h.next(); !_j.done; _j = _h.next()) { + var childNode = _j.value; + // recursively check child nodes + if (!tree_isConstrained(childNode)) + return false; + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_j && !_j.done && (_c = _h.return)) _c.call(_h); + } + finally { if (e_3) throw e_3.error; } + } + return true; } -exports.sortInDescendingOrder = sortInDescendingOrder; -//# sourceMappingURL=Map.js.map - -/***/ }), -/* 280 */, -/* 281 */, -/* 282 */, -/* 283 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const compare = __webpack_require__(874) -const compareLoose = (a, b) => compare(a, b, true) -module.exports = compareLoose - - -/***/ }), -/* 284 */, -/* 285 */, -/* 286 */ -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Represents the state of the URL parser. - */ -var ParserState; -(function (ParserState) { - ParserState[ParserState["SchemeStart"] = 0] = "SchemeStart"; - ParserState[ParserState["Scheme"] = 1] = "Scheme"; - ParserState[ParserState["NoScheme"] = 2] = "NoScheme"; - ParserState[ParserState["SpecialRelativeOrAuthority"] = 3] = "SpecialRelativeOrAuthority"; - ParserState[ParserState["PathOrAuthority"] = 4] = "PathOrAuthority"; - ParserState[ParserState["Relative"] = 5] = "Relative"; - ParserState[ParserState["RelativeSlash"] = 6] = "RelativeSlash"; - ParserState[ParserState["SpecialAuthoritySlashes"] = 7] = "SpecialAuthoritySlashes"; - ParserState[ParserState["SpecialAuthorityIgnoreSlashes"] = 8] = "SpecialAuthorityIgnoreSlashes"; - ParserState[ParserState["Authority"] = 9] = "Authority"; - ParserState[ParserState["Host"] = 10] = "Host"; - ParserState[ParserState["Hostname"] = 11] = "Hostname"; - ParserState[ParserState["Port"] = 12] = "Port"; - ParserState[ParserState["File"] = 13] = "File"; - ParserState[ParserState["FileSlash"] = 14] = "FileSlash"; - ParserState[ParserState["FileHost"] = 15] = "FileHost"; - ParserState[ParserState["PathStart"] = 16] = "PathStart"; - ParserState[ParserState["Path"] = 17] = "Path"; - ParserState[ParserState["CannotBeABaseURLPath"] = 18] = "CannotBeABaseURLPath"; - ParserState[ParserState["Query"] = 19] = "Query"; - ParserState[ParserState["Fragment"] = 20] = "Fragment"; -})(ParserState = exports.ParserState || (exports.ParserState = {})); -exports.OpaqueOrigin = ["", "", null, null]; -//# sourceMappingURL=interfaces.js.map - -/***/ }), -/* 287 */, -/* 288 */, -/* 289 */, -/* 290 */, -/* 291 */, -/* 292 */, -/* 293 */, -/* 294 */, -/* 295 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var _1 = __webpack_require__(535); +exports.tree_isConstrained = tree_isConstrained; /** - * Creates an XML builder which serializes the document in chunks. - * - * @param options - callback builder options + * Returns the length of a node. * - * @returns callback builder + * @param node - a node to check */ -function createCB(options) { - return new _1.XMLBuilderCBImpl(options); +function tree_nodeLength(node) { + /** + * To determine the length of a node node, switch on node: + * - DocumentType + * Zero. + * - Text + * - ProcessingInstruction + * - Comment + * Its data’s length. + * - Any other node + * Its number of children. + */ + if (util_1.Guard.isDocumentTypeNode(node)) { + return 0; + } + else if (util_1.Guard.isCharacterDataNode(node)) { + return node._data.length; + } + else { + return node._children.size; + } } -exports.createCB = createCB; +exports.tree_nodeLength = tree_nodeLength; /** - * Creates an XML builder which serializes the fragment in chunks. - * - * @param options - callback builder options + * Determines if a node is empty. * - * @returns callback builder + * @param node - a node to check */ -function fragmentCB(options) { - return new _1.XMLBuilderCBImpl(options, true); +function tree_isEmpty(node) { + /** + * A node is considered empty if its length is zero. + */ + return (tree_nodeLength(node) === 0); } -exports.fragmentCB = fragmentCB; -//# sourceMappingURL=BuilderFunctionsCB.js.map - -/***/ }), -/* 296 */, -/* 297 */, -/* 298 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const compare = __webpack_require__(874) -const eq = (a, b, loose) => compare(a, b, loose) === 0 -module.exports = eq - - -/***/ }), -/* 299 */, -/* 300 */, -/* 301 */, -/* 302 */, -/* 303 */, -/* 304 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var TreeAlgorithm_1 = __webpack_require__(873); -var util_1 = __webpack_require__(918); -var ShadowTreeAlgorithm_1 = __webpack_require__(180); -var supportedTokens = new Map(); +exports.tree_isEmpty = tree_isEmpty; /** - * Runs removing steps for node. + * Returns the root node of a tree. The root of an object is itself, + * if its parent is `null`, or else it is the root of its parent. + * The root of a tree is any object participating in that tree + * whose parent is `null`. * - * @param removedNode - removed node - * @param oldParent - old parent node + * @param node - a node of the tree + * @param shadow - `true` to return shadow-including root, otherwise + * `false` */ -function dom_runRemovingSteps(removedNode, oldParent) { - // No steps defined -} -exports.dom_runRemovingSteps = dom_runRemovingSteps; -/** - * Runs cloning steps for node. - * - * @param copy - node clone - * @param node - node - * @param document - document to own the cloned node - * @param cloneChildrenFlag - whether child nodes are cloned - */ -function dom_runCloningSteps(copy, node, document, cloneChildrenFlag) { - // No steps defined +function tree_rootNode(node, shadow) { + if (shadow === void 0) { shadow = false; } + /** + * The root of an object is itself, if its parent is null, or else it is the + * root of its parent. The root of a tree is any object participating in + * that tree whose parent is null. + */ + if (shadow) { + var root = tree_rootNode(node, false); + if (util_1.Guard.isShadowRoot(root)) + return tree_rootNode(root._host, true); + else + return root; + } + else { + if (!node._parent) + return node; + else + return tree_rootNode(node._parent); + } } -exports.dom_runCloningSteps = dom_runCloningSteps; +exports.tree_rootNode = tree_rootNode; /** - * Runs adopting steps for node. + * Determines whether `other` is a descendant of `node`. An object + * A is called a descendant of an object B, if either A is a child + * of B or A is a child of an object C that is a descendant of B. * - * @param node - node - * @param oldDocument - old document + * @param node - a node + * @param other - the node to check + * @param self - if `true`, traversal includes `node` itself + * @param shadow - if `true`, traversal includes the + * node's and its descendant's shadow trees as well. */ -function dom_runAdoptingSteps(node, oldDocument) { - // No steps defined +function tree_isDescendantOf(node, other, self, shadow) { + if (self === void 0) { self = false; } + if (shadow === void 0) { shadow = false; } + /** + * An object A is called a descendant of an object B, if either A is a + * child of B or A is a child of an object C that is a descendant of B. + * + * An inclusive descendant is an object or one of its descendants. + */ + var child = tree_getFirstDescendantNode(node, self, shadow); + while (child !== null) { + if (child === other) { + return true; + } + child = tree_getNextDescendantNode(node, child, self, shadow); + } + return false; } -exports.dom_runAdoptingSteps = dom_runAdoptingSteps; +exports.tree_isDescendantOf = tree_isDescendantOf; /** - * Runs attribute change steps for an element node. + * Determines whether `other` is an ancestor of `node`. An object A + * is called an ancestor of an object B if and only if B is a + * descendant of A. * - * @param element - element node owning the attribute - * @param localName - attribute's local name - * @param oldValue - attribute's old value - * @param value - attribute's new value - * @param namespace - attribute's namespace + * @param node - a node + * @param other - the node to check + * @param self - if `true`, traversal includes `node` itself + * @param shadow - if `true`, traversal includes the + * node's and its descendant's shadow trees as well. */ -function dom_runAttributeChangeSteps(element, localName, oldValue, value, namespace) { - var e_1, _a; - // run default steps - if (DOMImpl_1.dom.features.slots) { - updateASlotablesName.call(element, element, localName, oldValue, value, namespace); - updateASlotsName.call(element, element, localName, oldValue, value, namespace); - } - updateAnElementID.call(element, element, localName, value, namespace); - try { - // run custom steps - for (var _b = __values(element._attributeChangeSteps), _c = _b.next(); !_c.done; _c = _b.next()) { - var step = _c.value; - step.call(element, element, localName, oldValue, value, namespace); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } +function tree_isAncestorOf(node, other, self, shadow) { + if (self === void 0) { self = false; } + if (shadow === void 0) { shadow = false; } + var ancestor = self ? node : shadow && util_1.Guard.isShadowRoot(node) ? + node._host : node._parent; + while (ancestor !== null) { + if (ancestor === other) + return true; + ancestor = shadow && util_1.Guard.isShadowRoot(ancestor) ? + ancestor._host : ancestor._parent; } + return false; } -exports.dom_runAttributeChangeSteps = dom_runAttributeChangeSteps; +exports.tree_isAncestorOf = tree_isAncestorOf; /** - * Runs insertion steps for a node. + * Determines whether `other` is a host-including ancestor of `node`. An + * object A is a host-including inclusive ancestor of an object B, if either + * A is an inclusive ancestor of B, or if B’s root has a non-null host and + * A is a host-including inclusive ancestor of B’s root’s host. * - * @param insertedNode - inserted node + * @param node - a node + * @param other - the node to check + * @param self - if `true`, traversal includes `node` itself */ -function dom_runInsertionSteps(insertedNode) { - // No steps defined +function tree_isHostIncludingAncestorOf(node, other, self) { + if (self === void 0) { self = false; } + if (tree_isAncestorOf(node, other, self)) + return true; + var root = tree_rootNode(node); + if (util_1.Guard.isDocumentFragmentNode(root) && root._host !== null && + tree_isHostIncludingAncestorOf(root._host, other, self)) + return true; + return false; } -exports.dom_runInsertionSteps = dom_runInsertionSteps; +exports.tree_isHostIncludingAncestorOf = tree_isHostIncludingAncestorOf; /** - * Runs pre-removing steps for a node iterator and node. + * Determines whether `other` is a sibling of `node`. An object A is + * called a sibling of an object B, if and only if B and A share + * the same non-null parent. * - * @param nodeIterator - a node iterator - * @param toBeRemoved - node to be removed + * @param node - a node + * @param other - the node to check + * @param self - if `true`, traversal includes `node` itself */ -function dom_runNodeIteratorPreRemovingSteps(nodeIterator, toBeRemoved) { - removeNodeIterator.call(nodeIterator, nodeIterator, toBeRemoved); +function tree_isSiblingOf(node, other, self) { + if (self === void 0) { self = false; } + /** + * An object A is called a sibling of an object B, if and only if B and A + * share the same non-null parent. + * + * An inclusive sibling is an object or one of its siblings. + */ + if (node === other) { + if (self) + return true; + } + else { + return (node._parent !== null && node._parent === other._parent); + } + return false; } -exports.dom_runNodeIteratorPreRemovingSteps = dom_runNodeIteratorPreRemovingSteps; +exports.tree_isSiblingOf = tree_isSiblingOf; /** - * Determines if there are any supported tokens defined for the given - * attribute name. + * Determines whether `other` is preceding `node`. An object A is + * preceding an object B if A and B are in the same tree and A comes + * before B in tree order. * - * @param attributeName - an attribute name + * @param node - a node + * @param other - the node to check */ -function dom_hasSupportedTokens(attributeName) { - return supportedTokens.has(attributeName); +function tree_isPreceding(node, other) { + /** + * An object A is preceding an object B if A and B are in the same tree and + * A comes before B in tree order. + */ + var nodePos = tree_treePosition(node); + var otherPos = tree_treePosition(other); + if (nodePos === -1 || otherPos === -1) + return false; + else if (tree_rootNode(node) !== tree_rootNode(other)) + return false; + else + return otherPos < nodePos; } -exports.dom_hasSupportedTokens = dom_hasSupportedTokens; +exports.tree_isPreceding = tree_isPreceding; /** - * Returns the set of supported tokens defined for the given attribute name. + * Determines whether `other` is following `node`. An object A is + * following an object B if A and B are in the same tree and A comes + * after B in tree order. * - * @param attributeName - an attribute name + * @param node - a node + * @param other - the node to check */ -function dom_getSupportedTokens(attributeName) { - return supportedTokens.get(attributeName) || new Set(); +function tree_isFollowing(node, other) { + /** + * An object A is following an object B if A and B are in the same tree and + * A comes after B in tree order. + */ + var nodePos = tree_treePosition(node); + var otherPos = tree_treePosition(other); + if (nodePos === -1 || otherPos === -1) + return false; + else if (tree_rootNode(node) !== tree_rootNode(other)) + return false; + else + return otherPos > nodePos; } -exports.dom_getSupportedTokens = dom_getSupportedTokens; +exports.tree_isFollowing = tree_isFollowing; /** - * Runs event construction steps. + * Determines whether `other` is the parent node of `node`. * - * @param event - an event + * @param node - a node + * @param other - the node to check */ -function dom_runEventConstructingSteps(event) { - // No steps defined +function tree_isParentOf(node, other) { + /** + * An object that participates in a tree has a parent, which is either + * null or an object, and has children, which is an ordered set of objects. + * An object A whose parent is object B is a child of B. + */ + return (node._parent === other); } -exports.dom_runEventConstructingSteps = dom_runEventConstructingSteps; +exports.tree_isParentOf = tree_isParentOf; /** - * Runs child text content change steps for a parent node. + * Determines whether `other` is a child node of `node`. * - * @param parent - parent node with text node child nodes + * @param node - a node + * @param other - the node to check */ -function dom_runChildTextContentChangeSteps(parent) { - // No steps defined +function tree_isChildOf(node, other) { + /** + * An object that participates in a tree has a parent, which is either + * null or an object, and has children, which is an ordered set of objects. + * An object A whose parent is object B is a child of B. + */ + return (other._parent === node); } -exports.dom_runChildTextContentChangeSteps = dom_runChildTextContentChangeSteps; +exports.tree_isChildOf = tree_isChildOf; /** - * Defines pre-removing steps for a node iterator. + * Returns the previous sibling node of `node` or null if it has no + * preceding sibling. + * + * @param node */ -function removeNodeIterator(nodeIterator, toBeRemovedNode) { +function tree_previousSibling(node) { /** - * 1. If toBeRemovedNode is not an inclusive ancestor of nodeIterator’s - * reference, or toBeRemovedNode is nodeIterator’s root, then return. - */ - if (toBeRemovedNode === nodeIterator._root || - !TreeAlgorithm_1.tree_isAncestorOf(nodeIterator._reference, toBeRemovedNode, true)) { - return; - } + * The previous sibling of an object is its first preceding sibling or null + * if it has no preceding sibling. + */ + return node._previousSibling; +} +exports.tree_previousSibling = tree_previousSibling; +/** + * Returns the next sibling node of `node` or null if it has no + * following sibling. + * + * @param node + */ +function tree_nextSibling(node) { /** - * 2. If nodeIterator’s pointer before reference is true, then: - */ - if (nodeIterator._pointerBeforeReference) { - /** - * 2.1. Let next be toBeRemovedNode’s first following node that is an - * inclusive descendant of nodeIterator’s root and is not an inclusive - * descendant of toBeRemovedNode, and null if there is no such node. - */ - while (true) { - var nextNode = TreeAlgorithm_1.tree_getFollowingNode(nodeIterator._root, toBeRemovedNode); - if (nextNode !== null && - TreeAlgorithm_1.tree_isDescendantOf(nodeIterator._root, nextNode, true) && - !TreeAlgorithm_1.tree_isDescendantOf(toBeRemovedNode, nextNode, true)) { - /** - * 2.2. If next is non-null, then set nodeIterator’s reference to next - * and return. - */ - nodeIterator._reference = nextNode; - return; - } - else if (nextNode === null) { - /** - * 2.3. Otherwise, set nodeIterator’s pointer before reference to false. - */ - nodeIterator._pointerBeforeReference = false; - return; - } - } - } + * The next sibling of an object is its first following sibling or null + * if it has no following sibling. + */ + return node._nextSibling; +} +exports.tree_nextSibling = tree_nextSibling; +/** + * Returns the first child node of `node` or null if it has no + * children. + * + * @param node + */ +function tree_firstChild(node) { /** - * 3. Set nodeIterator’s reference to toBeRemovedNode’s parent, if - * toBeRemovedNode’s previous sibling is null, and to the inclusive - * descendant of toBeRemovedNode’s previous sibling that appears last in - * tree order otherwise. - */ - if (toBeRemovedNode._previousSibling === null) { - if (toBeRemovedNode._parent !== null) { - nodeIterator._reference = toBeRemovedNode._parent; - } - } - else { - var referenceNode = toBeRemovedNode._previousSibling; - var childNode = TreeAlgorithm_1.tree_getFirstDescendantNode(toBeRemovedNode._previousSibling, true, false); - while (childNode !== null) { - if (childNode !== null) { - referenceNode = childNode; - } - // loop through to get the last descendant node - childNode = TreeAlgorithm_1.tree_getNextDescendantNode(toBeRemovedNode._previousSibling, childNode, true, false); - } - nodeIterator._reference = referenceNode; - } + * The first child of an object is its first child or null if it has no + * children. + */ + return node._firstChild; } +exports.tree_firstChild = tree_firstChild; /** - * Defines attribute change steps to update a slot’s name. + * Returns the last child node of `node` or null if it has no + * children. + * + * @param node */ -function updateASlotsName(element, localName, oldValue, value, namespace) { +function tree_lastChild(node) { /** - * 1. If element is a slot, localName is name, and namespace is null, then: - * 1.1. If value is oldValue, then return. - * 1.2. If value is null and oldValue is the empty string, then return. - * 1.3. If value is the empty string and oldValue is null, then return. - * 1.4. If value is null or the empty string, then set element’s name to the - * empty string. - * 1.5. Otherwise, set element’s name to value. - * 1.6. Run assign slotables for a tree with element’s root. - */ - if (util_1.Guard.isSlot(element) && localName === "name" && namespace === null) { - if (value === oldValue) - return; - if (value === null && oldValue === '') - return; - if (value === '' && oldValue === null) - return; - if ((value === null || value === '')) { - element._name = ''; - } - else { - element._name = value; - } - ShadowTreeAlgorithm_1.shadowTree_assignSlotablesForATree(TreeAlgorithm_1.tree_rootNode(element)); + * The last child of an object is its last child or null if it has no + * children. + */ + return node._lastChild; +} +exports.tree_lastChild = tree_lastChild; +/** + * Returns the zero-based index of `node` when counted preorder in + * the tree rooted at `root`. Returns `-1` if `node` is not in + * the tree. + * + * @param node - the node to get the index of + */ +function tree_treePosition(node) { + var root = tree_rootNode(node); + var pos = 0; + var childNode = tree_getFirstDescendantNode(root); + while (childNode !== null) { + pos++; + if (childNode === node) + return pos; + childNode = tree_getNextDescendantNode(root, childNode); } + return -1; } +exports.tree_treePosition = tree_treePosition; /** - * Defines attribute change steps to update a slotable’s name. + * Determines the index of `node`. The index of an object is its number of + * preceding siblings, or 0 if it has none. + * + * @param node - a node + * @param other - the node to check */ -function updateASlotablesName(element, localName, oldValue, value, namespace) { +function tree_index(node) { /** - * 1. If localName is slot and namespace is null, then: - * 1.1. If value is oldValue, then return. - * 1.2. If value is null and oldValue is the empty string, then return. - * 1.3. If value is the empty string and oldValue is null, then return. - * 1.4. If value is null or the empty string, then set element’s name to - * the empty string. - * 1.5. Otherwise, set element’s name to value. - * 1.6. If element is assigned, then run assign slotables for element’s - * assigned slot. - * 1.7. Run assign a slot for element. - */ - if (util_1.Guard.isSlotable(element) && localName === "slot" && namespace === null) { - if (value === oldValue) - return; - if (value === null && oldValue === '') - return; - if (value === '' && oldValue === null) - return; - if ((value === null || value === '')) { - element._name = ''; - } - else { - element._name = value; - } - if (ShadowTreeAlgorithm_1.shadowTree_isAssigned(element)) { - ShadowTreeAlgorithm_1.shadowTree_assignSlotables(element._assignedSlot); - } - ShadowTreeAlgorithm_1.shadowTree_assignASlot(element); + * The index of an object is its number of preceding siblings, or 0 if it + * has none. + */ + var n = 0; + while (node._previousSibling !== null) { + n++; + node = node._previousSibling; } + return n; } +exports.tree_index = tree_index; /** - * Defines attribute change steps to update an element's ID. + * Retargets an object against another object. + * + * @param a - an object to retarget + * @param b - an object to retarget against */ -function updateAnElementID(element, localName, value, namespace) { +function tree_retarget(a, b) { /** - * 1. If localName is id, namespace is null, and value is null or the empty - * string, then unset element’s ID. - * 2. Otherwise, if localName is id, namespace is null, then set element’s - * ID to value. - */ - if (localName === "id" && namespace === null) { - if (!value) - element._uniqueIdentifier = undefined; - else - element._uniqueIdentifier = value; + * To retarget an object A against an object B, repeat these steps until + * they return an object: + * 1. If one of the following is true + * - A is not a node + * - A's root is not a shadow root + * - B is a node and A's root is a shadow-including inclusive ancestor + * of B + * then return A. + * 2. Set A to A's root's host. + */ + while (true) { + if (!a || !util_1.Guard.isNode(a)) { + return a; + } + var rootOfA = tree_rootNode(a); + if (!util_1.Guard.isShadowRoot(rootOfA)) { + return a; + } + if (b && util_1.Guard.isNode(b) && tree_isAncestorOf(rootOfA, b, true, true)) { + return a; + } + a = rootOfA.host; } } -//# sourceMappingURL=DOMAlgorithm.js.map +exports.tree_retarget = tree_retarget; +//# sourceMappingURL=TreeAlgorithm.js.map /***/ }), -/* 305 */ -/***/ (function(__unusedmodule, exports) { + +/***/ 4962: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7305); +var TraversalAlgorithm_1 = __nccwpck_require__(998); /** - * Pre-serializes XML nodes. + * Returns the first or last child node, or `null` if there are none. + * + * @param walker - the `TreeWalker` instance + * @param first - `true` to return the first child node, or `false` to + * return the last child node. */ -var BaseReader = /** @class */ (function () { +function treeWalker_traverseChildren(walker, first) { /** - * Initializes a new instance of `BaseReader`. - * - * @param builderOptions - XML builder options + * 1. Let node be walker’s current. + * 2. Set node to node’s first child if type is first, and node’s last child + * if type is last. + * 3. While node is non-null: */ - function BaseReader(builderOptions) { - this._builderOptions = builderOptions; - if (builderOptions.parser) { - Object.assign(this, builderOptions.parser); + var node = (first ? walker._current._firstChild : walker._current._lastChild); + while (node !== null) { + /** + * 3.1. Let result be the result of filtering node within walker. + */ + var result = TraversalAlgorithm_1.traversal_filter(walker, node); + if (result === interfaces_1.FilterResult.Accept) { + /** + * 3.2. If result is FILTER_ACCEPT, then set walker’s current to node and + * return node. + */ + walker._current = node; + return node; } - } - BaseReader.prototype._docType = function (parent, name, publicId, systemId) { - return parent.dtd({ name: name, pubID: publicId, sysID: systemId }); - }; - BaseReader.prototype._comment = function (parent, data) { - return parent.com(data); - }; - BaseReader.prototype._text = function (parent, data) { - return parent.txt(data); - }; - BaseReader.prototype._instruction = function (parent, target, data) { - return parent.ins(target, data); - }; - BaseReader.prototype._cdata = function (parent, data) { - return parent.dat(data); - }; - BaseReader.prototype._element = function (parent, namespace, name) { - return (namespace === undefined ? parent.ele(name) : parent.ele(namespace, name)); - }; - BaseReader.prototype._attribute = function (parent, namespace, name, value) { - return (namespace === undefined ? parent.att(name, value) : parent.att(namespace, name, value)); - }; - /** - * Main parser function which parses the given object and returns an XMLBuilder. - * - * @param node - node to recieve parsed content - * @param obj - object to parse - */ - BaseReader.prototype.parse = function (node, obj) { - return this._parse(node, obj); - }; - /** - * Creates a DocType node. - * The node will be skipped if the function returns `undefined`. - * - * @param name - node name - * @param publicId - public identifier - * @param systemId - system identifier - */ - BaseReader.prototype.docType = function (parent, name, publicId, systemId) { - return this._docType(parent, name, publicId, systemId); - }; - /** - * Creates a comment node. - * The node will be skipped if the function returns `undefined`. - * - * @param parent - parent node - * @param data - node data - */ - BaseReader.prototype.comment = function (parent, data) { - return this._comment(parent, data); - }; - /** - * Creates a text node. - * The node will be skipped if the function returns `undefined`. - * - * @param parent - parent node - * @param data - node data - */ - BaseReader.prototype.text = function (parent, data) { - return this._text(parent, data); - }; - /** - * Creates a processing instruction node. - * The node will be skipped if the function returns `undefined`. - * - * @param parent - parent node - * @param target - instruction target - * @param data - node data - */ - BaseReader.prototype.instruction = function (parent, target, data) { - return this._instruction(parent, target, data); - }; - /** - * Creates a CData section node. - * The node will be skipped if the function returns `undefined`. - * - * @param parent - parent node - * @param data - node data - */ - BaseReader.prototype.cdata = function (parent, data) { - return this._cdata(parent, data); - }; + else if (result === interfaces_1.FilterResult.Skip) { + /** + * 3.3. If result is FILTER_SKIP, then: + * 3.3.1. Let child be node’s first child if type is first, and node’s + * last child if type is last. + * 3.3.2. If child is non-null, then set node to child and continue. + */ + var child = (first ? node._firstChild : node._lastChild); + if (child !== null) { + node = child; + continue; + } + } + /** + * 3.4. While node is non-null: + */ + while (node !== null) { + /** + * 3.4.1. Let sibling be node’s next sibling if type is first, and + * node’s previous sibling if type is last. + * 3.4.2. If sibling is non-null, then set node to sibling and break. + */ + var sibling = (first ? node._nextSibling : node._previousSibling); + if (sibling !== null) { + node = sibling; + break; + } + /** + * 3.4.3. Let parent be node’s parent. + * 3.4.4. If parent is null, walker’s root, or walker’s current, then + * return null. + */ + var parent = node._parent; + if (parent === null || parent === walker._root || parent === walker._current) { + return null; + } + /** + * 3.4.5. Set node to parent. + */ + node = parent; + } + } /** - * Creates an element node. - * The node will be skipped if the function returns `undefined`. - * - * @param parent - parent node - * @param namespace - node namespace - * @param name - node name + * 5. Return null */ - BaseReader.prototype.element = function (parent, namespace, name) { - return this._element(parent, namespace, name); - }; + return null; +} +exports.treeWalker_traverseChildren = treeWalker_traverseChildren; +/** + * Returns the next or previous sibling node, or `null` if there are none. + * + * @param walker - the `TreeWalker` instance + * @param next - `true` to return the next sibling node, or `false` to + * return the previous sibling node. + */ +function treeWalker_traverseSiblings(walker, next) { /** - * Creates an attribute or namespace declaration. - * The node will be skipped if the function returns `undefined`. - * - * @param parent - parent node - * @param namespace - node namespace - * @param name - node name - * @param value - node value + * 1. Let node be walker’s current. + * 2. If node is root, then return null. + * 3. While node is non-null: */ - BaseReader.prototype.attribute = function (parent, namespace, name, value) { - return this._attribute(parent, namespace, name, value); - }; - return BaseReader; -}()); -exports.BaseReader = BaseReader; -//# sourceMappingURL=BaseReader.js.map + var node = walker._current; + if (node === walker._root) + return null; + while (true) { + /** + * 3.1. Let sibling be node’s next sibling if type is next, and node’s + * previous sibling if type is previous. + * 3.2. While sibling is non-null: + */ + var sibling = (next ? node._nextSibling : node._previousSibling); + while (sibling !== null) { + /** + * 3.2.1. Set node to sibling. + * 3.2.2. Let result be the result of filtering node within walker. + * 3.2.3. If result is FILTER_ACCEPT, then set walker’s current to node + * and return node. + */ + node = sibling; + var result = TraversalAlgorithm_1.traversal_filter(walker, node); + if (result === interfaces_1.FilterResult.Accept) { + walker._current = node; + return node; + } + /** + * 3.2.4. Set sibling to node’s first child if type is next, and node’s + * last child if type is previous. + * 3.2.5. If result is FILTER_REJECT or sibling is null, then set + * sibling to node’s next sibling if type is next, and node’s previous + * sibling if type is previous. + */ + sibling = (next ? node._firstChild : node._lastChild); + if (result === interfaces_1.FilterResult.Reject || sibling === null) { + sibling = (next ? node._nextSibling : node._previousSibling); + } + } + /** + * 3.3. Set node to node’s parent. + * 3.4. If node is null or walker’s root, then return null. + */ + node = node._parent; + if (node === null || node === walker._root) { + return null; + } + /** + * 3.5. If the return value of filtering node within walker is FILTER_ACCEPT, + * then return null. + */ + if (TraversalAlgorithm_1.traversal_filter(walker, node) === interfaces_1.FilterResult.Accept) { + return null; + } + } +} +exports.treeWalker_traverseSiblings = treeWalker_traverseSiblings; +//# sourceMappingURL=TreeWalkerAlgorithm.js.map /***/ }), -/* 306 */, -/* 307 */, -/* 308 */, -/* 309 */, -/* 310 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const Range = __webpack_require__(124) -const satisfies = (version, range, options) => { - try { - range = new Range(range, options) - } catch (er) { - return false - } - return range.test(version) -} -module.exports = satisfies +/***/ 5457: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Defines a WebIDL `Const` property on the given object. + * + * @param o - object on which to add the property + * @param name - property name + * @param value - property value + */ +function idl_defineConst(o, name, value) { + Object.defineProperty(o, name, { writable: false, enumerable: true, configurable: false, value: value }); +} +exports.idl_defineConst = idl_defineConst; +//# sourceMappingURL=WebIDLAlgorithm.js.map /***/ }), -/* 311 */, -/* 312 */, -/* 313 */, -/* 314 */, -/* 315 */, -/* 316 */, -/* 317 */, -/* 318 */, -/* 319 */, -/* 320 */, -/* 321 */, -/* 322 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 7030: +/***/ ((__unused_webpack_module, exports) => { "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.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.getToolcachePath = exports.isVersionSatisfies = exports.getDownloadArchiveExtension = exports.extractJdkFile = exports.getVersionFromToolcachePath = exports.getBooleanInput = exports.getTempDir = void 0; -const os_1 = __importDefault(__webpack_require__(87)); -const path_1 = __importDefault(__webpack_require__(622)); -const fs = __importStar(__webpack_require__(747)); -const semver = __importStar(__webpack_require__(876)); -const core = __importStar(__webpack_require__(470)); -const tc = __importStar(__webpack_require__(139)); -function getTempDir() { - let tempDirectory = process.env['RUNNER_TEMP'] || os_1.default.tmpdir(); - return tempDirectory; -} -exports.getTempDir = getTempDir; -function getBooleanInput(inputName, defaultValue = false) { - return (core.getInput(inputName) || String(defaultValue)).toUpperCase() === 'TRUE'; -} -exports.getBooleanInput = getBooleanInput; -function getVersionFromToolcachePath(toolPath) { - if (toolPath) { - return path_1.default.basename(path_1.default.dirname(toolPath)); +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Determines if the given string is valid for a `"Name"` construct. + * + * @param name - name string to test + */ +function xml_isName(name) { + for (var i = 0; i < name.length; i++) { + var n = name.charCodeAt(i); + // NameStartChar + if ((n >= 97 && n <= 122) || // [a-z] + (n >= 65 && n <= 90) || // [A-Z] + n === 58 || n === 95 || // ':' or '_' + (n >= 0xC0 && n <= 0xD6) || + (n >= 0xD8 && n <= 0xF6) || + (n >= 0xF8 && n <= 0x2FF) || + (n >= 0x370 && n <= 0x37D) || + (n >= 0x37F && n <= 0x1FFF) || + (n >= 0x200C && n <= 0x200D) || + (n >= 0x2070 && n <= 0x218F) || + (n >= 0x2C00 && n <= 0x2FEF) || + (n >= 0x3001 && n <= 0xD7FF) || + (n >= 0xF900 && n <= 0xFDCF) || + (n >= 0xFDF0 && n <= 0xFFFD)) { + continue; + } + else if (i !== 0 && + (n === 45 || n === 46 || // '-' or '.' + (n >= 48 && n <= 57) || // [0-9] + (n === 0xB7) || + (n >= 0x0300 && n <= 0x036F) || + (n >= 0x203F && n <= 0x2040))) { + continue; + } + if (n >= 0xD800 && n <= 0xDBFF && i < name.length - 1) { + var n2 = name.charCodeAt(i + 1); + if (n2 >= 0xDC00 && n2 <= 0xDFFF) { + n = (n - 0xD800) * 0x400 + n2 - 0xDC00 + 0x10000; + i++; + if (n >= 0x10000 && n <= 0xEFFFF) { + continue; + } + } + } + return false; } - return toolPath; + return true; } -exports.getVersionFromToolcachePath = getVersionFromToolcachePath; -function extractJdkFile(toolPath, extension) { - return __awaiter(this, void 0, void 0, function* () { - if (!extension) { - extension = toolPath.endsWith('.tar.gz') ? 'tar.gz' : path_1.default.extname(toolPath); - if (extension.startsWith('.')) { - extension = extension.substring(1); - } +exports.xml_isName = xml_isName; +/** + * Determines if the given string is valid for a `"QName"` construct. + * + * @param name - name string to test + */ +function xml_isQName(name) { + var colonFound = false; + for (var i = 0; i < name.length; i++) { + var n = name.charCodeAt(i); + // NameStartChar + if ((n >= 97 && n <= 122) || // [a-z] + (n >= 65 && n <= 90) || // [A-Z] + n === 95 || // '_' + (n >= 0xC0 && n <= 0xD6) || + (n >= 0xD8 && n <= 0xF6) || + (n >= 0xF8 && n <= 0x2FF) || + (n >= 0x370 && n <= 0x37D) || + (n >= 0x37F && n <= 0x1FFF) || + (n >= 0x200C && n <= 0x200D) || + (n >= 0x2070 && n <= 0x218F) || + (n >= 0x2C00 && n <= 0x2FEF) || + (n >= 0x3001 && n <= 0xD7FF) || + (n >= 0xF900 && n <= 0xFDCF) || + (n >= 0xFDF0 && n <= 0xFFFD)) { + continue; } - switch (extension) { - case 'tar.gz': - case 'tar': - return yield tc.extractTar(toolPath); - case 'zip': - return yield tc.extractZip(toolPath); - default: - return yield tc.extract7z(toolPath); + else if (i !== 0 && + (n === 45 || n === 46 || // '-' or '.' + (n >= 48 && n <= 57) || // [0-9] + (n === 0xB7) || + (n >= 0x0300 && n <= 0x036F) || + (n >= 0x203F && n <= 0x2040))) { + continue; } - }); -} -exports.extractJdkFile = extractJdkFile; -function getDownloadArchiveExtension() { - return process.platform === 'win32' ? 'zip' : 'tar.gz'; + else if (i !== 0 && n === 58) { // : + if (colonFound) + return false; // multiple colons in qname + if (i === name.length - 1) + return false; // colon at the end of qname + colonFound = true; + continue; + } + if (n >= 0xD800 && n <= 0xDBFF && i < name.length - 1) { + var n2 = name.charCodeAt(i + 1); + if (n2 >= 0xDC00 && n2 <= 0xDFFF) { + n = (n - 0xD800) * 0x400 + n2 - 0xDC00 + 0x10000; + i++; + if (n >= 0x10000 && n <= 0xEFFFF) { + continue; + } + } + } + return false; + } + return true; } -exports.getDownloadArchiveExtension = getDownloadArchiveExtension; -function isVersionSatisfies(range, version) { - var _a; - if (semver.valid(range)) { - // if full version with build digit is provided as a range (such as '1.2.3+4') - // we should check for exact equal via compareBuild - // since semver.satisfies doesn't handle 4th digit - const semRange = semver.parse(range); - if (semRange && ((_a = semRange.build) === null || _a === void 0 ? void 0 : _a.length) > 0) { - return semver.compareBuild(range, version) === 0; +exports.xml_isQName = xml_isQName; +/** + * Determines if the given string contains legal characters. + * + * @param chars - sequence of characters to test + */ +function xml_isLegalChar(chars) { + for (var i = 0; i < chars.length; i++) { + var n = chars.charCodeAt(i); + // #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] + if (n === 0x9 || n === 0xA || n === 0xD || + (n >= 0x20 && n <= 0xD7FF) || + (n >= 0xE000 && n <= 0xFFFD)) { + continue; + } + if (n >= 0xD800 && n <= 0xDBFF && i < chars.length - 1) { + var n2 = chars.charCodeAt(i + 1); + if (n2 >= 0xDC00 && n2 <= 0xDFFF) { + n = (n - 0xD800) * 0x400 + n2 - 0xDC00 + 0x10000; + i++; + if (n >= 0x10000 && n <= 0x10FFFF) { + continue; + } + } } + return false; } - return semver.satisfies(version, range); + return true; } -exports.isVersionSatisfies = isVersionSatisfies; -function getToolcachePath(toolName, version, architecture) { - var _a; - const toolcacheRoot = (_a = process.env['RUNNER_TOOL_CACHE']) !== null && _a !== void 0 ? _a : ''; - const fullPath = path_1.default.join(toolcacheRoot, toolName, version, architecture); - if (fs.existsSync(fullPath)) { - return fullPath; +exports.xml_isLegalChar = xml_isLegalChar; +/** + * Determines if the given string contains legal characters for a public + * identifier. + * + * @param chars - sequence of characters to test + */ +function xml_isPubidChar(chars) { + for (var i = 0; i < chars.length; i++) { + // PubId chars are all in the ASCII range, no need to check surrogates + var n = chars.charCodeAt(i); + // #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%] + if ((n >= 97 && n <= 122) || // [a-z] + (n >= 65 && n <= 90) || // [A-Z] + (n >= 39 && n <= 59) || // ['()*+,-./] | [0-9] | [:;] + n === 0x20 || n === 0xD || n === 0xA || // #x20 | #xD | #xA + (n >= 35 && n <= 37) || // [#$%] + n === 33 || // ! + n === 61 || n === 63 || n === 64 || n === 95) { // [=?@_] + continue; + } + else { + return false; + } } - return null; + return true; } -exports.getToolcachePath = getToolcachePath; +exports.xml_isPubidChar = xml_isPubidChar; +//# sourceMappingURL=XMLAlgorithm.js.map + +/***/ }), + +/***/ 61: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; +function __export(m) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; +} +Object.defineProperty(exports, "__esModule", ({ value: true })); +__export(__nccwpck_require__(2206)); +__export(__nccwpck_require__(4309)); +__export(__nccwpck_require__(1054)); +__export(__nccwpck_require__(9461)); +__export(__nccwpck_require__(7339)); +__export(__nccwpck_require__(5648)); +__export(__nccwpck_require__(2793)); +__export(__nccwpck_require__(9628)); +__export(__nccwpck_require__(3261)); +__export(__nccwpck_require__(1849)); +__export(__nccwpck_require__(8217)); +__export(__nccwpck_require__(1312)); +__export(__nccwpck_require__(5463)); +__export(__nccwpck_require__(8157)); +__export(__nccwpck_require__(5856)); +__export(__nccwpck_require__(4924)); +__export(__nccwpck_require__(3973)); +__export(__nccwpck_require__(3670)); +__export(__nccwpck_require__(2328)); +__export(__nccwpck_require__(457)); +__export(__nccwpck_require__(1853)); +__export(__nccwpck_require__(8733)); +__export(__nccwpck_require__(3512)); +__export(__nccwpck_require__(998)); +__export(__nccwpck_require__(6620)); +__export(__nccwpck_require__(4962)); +__export(__nccwpck_require__(5457)); +__export(__nccwpck_require__(7030)); +//# sourceMappingURL=index.js.map /***/ }), -/* 323 */ -/***/ (function(module, __unusedexports, __webpack_require__) { -const outside = __webpack_require__(881) -// Determine if version is less than all the versions possible in the range -const ltr = (version, range, options) => outside(version, range, '<', options) -module.exports = ltr +/***/ 6461: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var algorithm_1 = __nccwpck_require__(61); +/** + * Represents a controller that allows to abort DOM requests. + */ +var AbortControllerImpl = /** @class */ (function () { + /** + * Initializes a new instance of `AbortController`. + */ + function AbortControllerImpl() { + /** + * 1. Let signal be a new AbortSignal object. + * 2. Let controller be a new AbortController object whose signal is signal. + * 3. Return controller. + */ + this._signal = algorithm_1.create_abortSignal(); + } + Object.defineProperty(AbortControllerImpl.prototype, "signal", { + /** @inheritdoc */ + get: function () { return this._signal; }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + AbortControllerImpl.prototype.abort = function () { + algorithm_1.abort_signalAbort(this._signal); + }; + return AbortControllerImpl; +}()); +exports.AbortControllerImpl = AbortControllerImpl; +//# sourceMappingURL=AbortControllerImpl.js.map /***/ }), -/* 324 */, -/* 325 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 22: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -13079,1297 +12851,627 @@ var __extends = (this && this.__extends) || (function () { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var ObjectWriter_1 = __webpack_require__(419); -var util_1 = __webpack_require__(592); -var BaseWriter_1 = __webpack_require__(462); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var EventTargetImpl_1 = __nccwpck_require__(9968); +var algorithm_1 = __nccwpck_require__(61); /** - * Serializes XML nodes into a YAML string. + * Represents a signal object that communicates with a DOM request and abort + * it through an AbortController. */ -var YAMLWriter = /** @class */ (function (_super) { - __extends(YAMLWriter, _super); +var AbortSignalImpl = /** @class */ (function (_super) { + __extends(AbortSignalImpl, _super); /** - * Initializes a new instance of `YAMLWriter`. - * - * @param builderOptions - XML builder options - * @param writerOptions - serialization options + * Initializes a new instance of `AbortSignal`. */ - function YAMLWriter(builderOptions, writerOptions) { - var _this = _super.call(this, builderOptions) || this; - // provide default options - _this._writerOptions = util_1.applyDefaults(writerOptions, { - wellFormed: false, - noDoubleEncoding: false, - indent: ' ', - newline: '\n', - offset: 0, - group: false, - verbose: false - }); - if (_this._writerOptions.indent.length < 2) { - throw new Error("YAML indententation string must be at least two characters long."); - } - if (_this._writerOptions.offset < 0) { - throw new Error("YAML offset should be zero or a positive number."); - } + function AbortSignalImpl() { + var _this = _super.call(this) || this; + _this._abortedFlag = false; + _this._abortAlgorithms = new Set(); return _this; } + Object.defineProperty(AbortSignalImpl.prototype, "aborted", { + /** @inheritdoc */ + get: function () { return this._abortedFlag; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AbortSignalImpl.prototype, "onabort", { + /** @inheritdoc */ + get: function () { + return algorithm_1.event_getterEventHandlerIDLAttribute(this, "onabort"); + }, + set: function (val) { + algorithm_1.event_setterEventHandlerIDLAttribute(this, "onabort", val); + }, + enumerable: true, + configurable: true + }); /** - * Produces an XML serialization of the given node. - * - * @param node - node to serialize - * @param writerOptions - serialization options - */ - YAMLWriter.prototype.serialize = function (node) { - // convert to object - var objectWriterOptions = util_1.applyDefaults(this._writerOptions, { - format: "object", - wellFormed: false, - noDoubleEncoding: false, - }); - var objectWriter = new ObjectWriter_1.ObjectWriter(this._builderOptions, objectWriterOptions); - var val = objectWriter.serialize(node); - var markup = this._beginLine(this._writerOptions, 0) + '---' + this._endLine(this._writerOptions) + - this._convertObject(val, this._writerOptions, 0); - // remove trailing newline - /* istanbul ignore else */ - if (markup.slice(-this._writerOptions.newline.length) === this._writerOptions.newline) { - markup = markup.slice(0, -this._writerOptions.newline.length); - } - return markup; - }; - /** - * Produces an XML serialization of the given object. - * - * @param obj - object to serialize - * @param options - serialization options - * @param level - depth of the XML tree - * @param indentLeaf - indents leaf nodes - */ - YAMLWriter.prototype._convertObject = function (obj, options, level, suppressIndent) { - var e_1, _a; - var _this = this; - if (suppressIndent === void 0) { suppressIndent = false; } - var markup = ''; - if (util_1.isArray(obj)) { - try { - for (var obj_1 = __values(obj), obj_1_1 = obj_1.next(); !obj_1_1.done; obj_1_1 = obj_1.next()) { - var val = obj_1_1.value; - markup += this._beginLine(options, level, true); - if (!util_1.isObject(val)) { - markup += this._val(val) + this._endLine(options); - } - else if (util_1.isEmpty(val)) { - markup += '""' + this._endLine(options); - } - else { - markup += this._convertObject(val, options, level, true); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (obj_1_1 && !obj_1_1.done && (_a = obj_1.return)) _a.call(obj_1); - } - finally { if (e_1) throw e_1.error; } - } - } - else /* if (isObject(obj)) */ { - util_1.forEachObject(obj, function (key, val) { - if (suppressIndent) { - markup += _this._key(key); - suppressIndent = false; - } - else { - markup += _this._beginLine(options, level) + _this._key(key); - } - if (!util_1.isObject(val)) { - markup += ' ' + _this._val(val) + _this._endLine(options); - } - else if (util_1.isEmpty(val)) { - markup += ' ""' + _this._endLine(options); - } - else { - markup += _this._endLine(options) + - _this._convertObject(val, options, level + 1); - } - }, this); - } - return markup; - }; - /** - * Produces characters to be prepended to a line of string in pretty-print - * mode. - * - * @param options - serialization options - * @param level - current depth of the XML tree - * @param isArray - whether this line is an array item - */ - YAMLWriter.prototype._beginLine = function (options, level, isArray) { - if (isArray === void 0) { isArray = false; } - var indentLevel = options.offset + level + 1; - var chars = new Array(indentLevel).join(options.indent); - if (isArray) { - return chars.substr(0, chars.length - 2) + '-' + chars.substr(-1, 1); - } - else { - return chars; - } - }; - /** - * Produces characters to be appended to a line of string in pretty-print - * mode. - * - * @param options - serialization options - */ - YAMLWriter.prototype._endLine = function (options) { - return options.newline; - }; - /** - * Produces a YAML key string delimited with double quotes. - */ - YAMLWriter.prototype._key = function (key) { - return "\"" + key + "\":"; - }; - /** - * Produces a YAML value string delimited with double quotes. + * Creates a new `AbortSignal`. */ - YAMLWriter.prototype._val = function (val) { - return JSON.stringify(val); + AbortSignalImpl._create = function () { + return new AbortSignalImpl(); }; - return YAMLWriter; -}(BaseWriter_1.BaseWriter)); -exports.YAMLWriter = YAMLWriter; -//# sourceMappingURL=YAMLWriter.js.map + return AbortSignalImpl; +}(EventTargetImpl_1.EventTargetImpl)); +exports.AbortSignalImpl = AbortSignalImpl; +//# sourceMappingURL=AbortSignalImpl.js.map /***/ }), -/* 326 */, -/* 327 */, -/* 328 */, -/* 329 */, -/* 330 */, -/* 331 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 7126: +/***/ ((__unused_webpack_module, exports) => { "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.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 })); +/** + * Represents an abstract range with a start and end boundary point. + */ +var AbstractRangeImpl = /** @class */ (function () { + function AbstractRangeImpl() { + } + Object.defineProperty(AbstractRangeImpl.prototype, "_startNode", { + get: function () { return this._start[0]; }, + enumerable: true, + configurable: true }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.generate = exports.createAuthenticationSettings = exports.configureAuthentication = exports.SETTINGS_FILE = exports.M2_DIR = void 0; -const path = __importStar(__webpack_require__(622)); -const core = __importStar(__webpack_require__(470)); -const io = __importStar(__webpack_require__(1)); -const fs = __importStar(__webpack_require__(747)); -const os = __importStar(__webpack_require__(87)); -const xmlbuilder2_1 = __webpack_require__(255); -const constants = __importStar(__webpack_require__(211)); -const gpg = __importStar(__webpack_require__(884)); -const util_1 = __webpack_require__(322); -exports.M2_DIR = '.m2'; -exports.SETTINGS_FILE = 'settings.xml'; -function configureAuthentication() { - return __awaiter(this, void 0, void 0, function* () { - const id = core.getInput(constants.INPUT_SERVER_ID); - const username = core.getInput(constants.INPUT_SERVER_USERNAME); - const password = core.getInput(constants.INPUT_SERVER_PASSWORD); - const settingsDirectory = core.getInput(constants.INPUT_SETTINGS_PATH) || path.join(os.homedir(), exports.M2_DIR); - const overwriteSettings = util_1.getBooleanInput(constants.INPUT_OVERWRITE_SETTINGS, true); - const gpgPrivateKey = core.getInput(constants.INPUT_GPG_PRIVATE_KEY) || constants.INPUT_DEFAULT_GPG_PRIVATE_KEY; - const gpgPassphrase = core.getInput(constants.INPUT_GPG_PASSPHRASE) || - (gpgPrivateKey ? constants.INPUT_DEFAULT_GPG_PASSPHRASE : undefined); - if (gpgPrivateKey) { - core.setSecret(gpgPrivateKey); - } - yield createAuthenticationSettings(id, username, password, settingsDirectory, overwriteSettings, gpgPassphrase); - if (gpgPrivateKey) { - core.info('Importing private gpg key'); - const keyFingerprint = (yield gpg.importKey(gpgPrivateKey)) || ''; - core.saveState(constants.STATE_GPG_PRIVATE_KEY_FINGERPRINT, keyFingerprint); - } + Object.defineProperty(AbstractRangeImpl.prototype, "_startOffset", { + get: function () { return this._start[1]; }, + enumerable: true, + configurable: true }); -} -exports.configureAuthentication = configureAuthentication; -function createAuthenticationSettings(id, username, password, settingsDirectory, overwriteSettings, gpgPassphrase = undefined) { - return __awaiter(this, void 0, void 0, function* () { - core.info(`Creating ${exports.SETTINGS_FILE} with server-id: ${id}`); - // when an alternate m2 location is specified use only that location (no .m2 directory) - // otherwise use the home/.m2/ path - yield io.mkdirP(settingsDirectory); - yield write(settingsDirectory, generate(id, username, password, gpgPassphrase), overwriteSettings); + Object.defineProperty(AbstractRangeImpl.prototype, "_endNode", { + get: function () { return this._end[0]; }, + enumerable: true, + configurable: true }); -} -exports.createAuthenticationSettings = createAuthenticationSettings; -// only exported for testing purposes -function generate(id, username, password, gpgPassphrase) { - const xmlObj = { - settings: { - '@xmlns': 'http://maven.apache.org/SETTINGS/1.0.0', - '@xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance', - '@xsi:schemaLocation': 'http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd', - servers: { - server: [ - { - id: id, - username: `\${env.${username}}`, - password: `\${env.${password}}` - } - ] - } - } - }; - if (gpgPassphrase) { - const gpgServer = { - id: 'gpg.passphrase', - passphrase: `\${env.${gpgPassphrase}}` - }; - xmlObj.settings.servers.server.push(gpgServer); - } - return xmlbuilder2_1.create(xmlObj).end({ - headless: true, - prettyPrint: true, - width: 80 + Object.defineProperty(AbstractRangeImpl.prototype, "_endOffset", { + get: function () { return this._end[1]; }, + enumerable: true, + configurable: true }); -} -exports.generate = generate; -function write(directory, settings, overwriteSettings) { - return __awaiter(this, void 0, void 0, function* () { - const location = path.join(directory, exports.SETTINGS_FILE); - const settingsExists = fs.existsSync(location); - if (settingsExists && overwriteSettings) { - core.info(`Overwriting existing file ${location}`); - } - else if (!settingsExists) { - core.info(`Writing to ${location}`); - } - else { - core.info(`Skipping generation ${location} because file already exists and overwriting is not required`); - return; - } - return fs.writeFileSync(location, settings, { - encoding: 'utf-8', - flag: 'w' - }); + Object.defineProperty(AbstractRangeImpl.prototype, "_collapsed", { + get: function () { + return (this._start[0] === this._end[0] && + this._start[1] === this._end[1]); + }, + enumerable: true, + configurable: true }); -} - + Object.defineProperty(AbstractRangeImpl.prototype, "startContainer", { + /** @inheritdoc */ + get: function () { return this._startNode; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AbstractRangeImpl.prototype, "startOffset", { + /** @inheritdoc */ + get: function () { return this._startOffset; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AbstractRangeImpl.prototype, "endContainer", { + /** @inheritdoc */ + get: function () { return this._endNode; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AbstractRangeImpl.prototype, "endOffset", { + /** @inheritdoc */ + get: function () { return this._endOffset; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AbstractRangeImpl.prototype, "collapsed", { + /** @inheritdoc */ + get: function () { return this._collapsed; }, + enumerable: true, + configurable: true + }); + return AbstractRangeImpl; +}()); +exports.AbstractRangeImpl = AbstractRangeImpl; +//# sourceMappingURL=AbstractRangeImpl.js.map /***/ }), -/* 332 */, -/* 333 */, -/* 334 */, -/* 335 */, -/* 336 */, -/* 337 */, -/* 338 */, -/* 339 */, -/* 340 */, -/* 341 */, -/* 342 */, -/* 343 */, -/* 344 */ -/***/ (function(__unusedmodule, exports) { + +/***/ 3717: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var PotentialCustomElementName = /[a-z]([\0-\t\x2D\._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])*-([\0-\t\x2D\._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])*/; -var NamesWithHyphen = new Set(['annotation-xml', 'color-profile', - 'font-face', 'font-face-src', 'font-face-uri', 'font-face-format', - 'font-face-name', 'missing-glyph']); -var ElementNames = new Set(['article', 'aside', 'blockquote', - 'body', 'div', 'footer', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', - 'header', 'main', 'nav', 'p', 'section', 'span']); -var VoidElementNames = new Set(['area', 'base', 'basefont', - 'bgsound', 'br', 'col', 'embed', 'frame', 'hr', 'img', 'input', 'keygen', - 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr']); -var ShadowHostNames = new Set(['article', 'aside', 'blockquote', 'body', - 'div', 'footer', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'main', - 'nav', 'p', 'section', 'span']); +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7305); +var NodeImpl_1 = __nccwpck_require__(1745); +var algorithm_1 = __nccwpck_require__(61); +var WebIDLAlgorithm_1 = __nccwpck_require__(5457); /** - * Determines if the given string is a valid custom element name. - * - * @param name - a name string + * Represents an attribute of an element node. */ -function customElement_isValidCustomElementName(name) { - if (!PotentialCustomElementName.test(name)) - return false; - if (NamesWithHyphen.has(name)) - return false; - return true; -} -exports.customElement_isValidCustomElementName = customElement_isValidCustomElementName; +var AttrImpl = /** @class */ (function (_super) { + __extends(AttrImpl, _super); + /** + * Initializes a new instance of `Attr`. + * + * @param localName - local name + */ + function AttrImpl(localName) { + var _this = _super.call(this) || this; + _this._namespace = null; + _this._namespacePrefix = null; + _this._element = null; + _this._value = ''; + _this._localName = localName; + return _this; + } + Object.defineProperty(AttrImpl.prototype, "ownerElement", { + /** @inheritdoc */ + get: function () { return this._element; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AttrImpl.prototype, "namespaceURI", { + /** @inheritdoc */ + get: function () { return this._namespace; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AttrImpl.prototype, "prefix", { + /** @inheritdoc */ + get: function () { return this._namespacePrefix; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AttrImpl.prototype, "localName", { + /** @inheritdoc */ + get: function () { return this._localName; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AttrImpl.prototype, "name", { + /** @inheritdoc */ + get: function () { return this._qualifiedName; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AttrImpl.prototype, "value", { + /** @inheritdoc */ + get: function () { return this._value; }, + set: function (value) { + /** + * The value attribute’s setter must set an existing attribute value with + * context object and the given value. + */ + algorithm_1.attr_setAnExistingAttributeValue(this, value); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(AttrImpl.prototype, "_qualifiedName", { + /** + * Returns the qualified name. + */ + get: function () { + /** + * An attribute’s qualified name is its local name if its namespace prefix + * is null, and its namespace prefix, followed by ":", followed by its + * local name, otherwise. + */ + return (this._namespacePrefix !== null ? + this._namespacePrefix + ':' + this._localName : + this._localName); + }, + enumerable: true, + configurable: true + }); + /** + * Creates an `Attr`. + * + * @param document - owner document + * @param localName - local name + */ + AttrImpl._create = function (document, localName) { + var node = new AttrImpl(localName); + node._nodeDocument = document; + return node; + }; + return AttrImpl; +}(NodeImpl_1.NodeImpl)); +exports.AttrImpl = AttrImpl; /** - * Determines if the given string is a valid element name. - * - * @param name - a name string + * Initialize prototype properties */ -function customElement_isValidElementName(name) { - return (ElementNames.has(name)); -} -exports.customElement_isValidElementName = customElement_isValidElementName; +WebIDLAlgorithm_1.idl_defineConst(AttrImpl.prototype, "_nodeType", interfaces_1.NodeType.Attribute); +WebIDLAlgorithm_1.idl_defineConst(AttrImpl.prototype, "specified", true); +//# sourceMappingURL=AttrImpl.js.map + +/***/ }), + +/***/ 3977: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var TextImpl_1 = __nccwpck_require__(2191); +var interfaces_1 = __nccwpck_require__(7305); +var WebIDLAlgorithm_1 = __nccwpck_require__(5457); /** - * Determines if the given string is a void element name. - * - * @param name - a name string + * Represents a CDATA node. */ -function customElement_isVoidElementName(name) { - return (VoidElementNames.has(name)); -} -exports.customElement_isVoidElementName = customElement_isVoidElementName; +var CDATASectionImpl = /** @class */ (function (_super) { + __extends(CDATASectionImpl, _super); + /** + * Initializes a new instance of `CDATASection`. + * + * @param data - node contents + */ + function CDATASectionImpl(data) { + return _super.call(this, data) || this; + } + /** + * Creates a new `CDATASection`. + * + * @param document - owner document + * @param data - node contents + */ + CDATASectionImpl._create = function (document, data) { + if (data === void 0) { data = ''; } + var node = new CDATASectionImpl(data); + node._nodeDocument = document; + return node; + }; + return CDATASectionImpl; +}(TextImpl_1.TextImpl)); +exports.CDATASectionImpl = CDATASectionImpl; /** - * Determines if the given string is a valid shadow host element name. - * - * @param name - a name string + * Initialize prototype properties */ -function customElement_isValidShadowHostName(name) { - return (ShadowHostNames.has(name)); -} -exports.customElement_isValidShadowHostName = customElement_isValidShadowHostName; -/** - * Enqueues an upgrade reaction for a custom element. - * - * @param element - a custom element - * @param definition - a custom element definition - */ -function customElement_enqueueACustomElementUpgradeReaction(element, definition) { - // TODO: Implement in HTML DOM -} -exports.customElement_enqueueACustomElementUpgradeReaction = customElement_enqueueACustomElementUpgradeReaction; -/** - * Enqueues a callback reaction for a custom element. - * - * @param element - a custom element - * @param callbackName - name of the callback - * @param args - callback arguments - */ -function customElement_enqueueACustomElementCallbackReaction(element, callbackName, args) { - // TODO: Implement in HTML DOM -} -exports.customElement_enqueueACustomElementCallbackReaction = customElement_enqueueACustomElementCallbackReaction; -/** - * Upgrade a custom element. - * - * @param element - a custom element - */ -function customElement_upgrade(definition, element) { - // TODO: Implement in HTML DOM -} -exports.customElement_upgrade = customElement_upgrade; -/** - * Tries to upgrade a custom element. - * - * @param element - a custom element - */ -function customElement_tryToUpgrade(element) { - // TODO: Implement in HTML DOM -} -exports.customElement_tryToUpgrade = customElement_tryToUpgrade; -/** - * Looks up a custom element definition. - * - * @param document - a document - * @param namespace - element namespace - * @param localName - element local name - * @param is - an `is` value - */ -function customElement_lookUpACustomElementDefinition(document, namespace, localName, is) { - // TODO: Implement in HTML DOM - return null; -} -exports.customElement_lookUpACustomElementDefinition = customElement_lookUpACustomElementDefinition; -//# sourceMappingURL=CustomElementAlgorithm.js.map +WebIDLAlgorithm_1.idl_defineConst(CDATASectionImpl.prototype, "_nodeType", interfaces_1.NodeType.CData); +//# sourceMappingURL=CDATASectionImpl.js.map /***/ }), -/* 345 */, -/* 346 */, -/* 347 */, -/* 348 */, -/* 349 */, -/* 350 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 5330: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(970); -var TreeAlgorithm_1 = __webpack_require__(873); +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var NodeImpl_1 = __nccwpck_require__(1745); +var algorithm_1 = __nccwpck_require__(61); /** - * Defines the position of a boundary point relative to another. - * - * @param bp - a boundary point - * @param relativeTo - a boundary point to compare to + * Represents a generic text node. */ -function boundaryPoint_position(bp, relativeTo) { - var nodeA = bp[0]; - var offsetA = bp[1]; - var nodeB = relativeTo[0]; - var offsetB = relativeTo[1]; - /** - * 1. Assert: nodeA and nodeB have the same root. - */ - console.assert(TreeAlgorithm_1.tree_rootNode(nodeA) === TreeAlgorithm_1.tree_rootNode(nodeB), "Boundary points must share the same root node."); - /** - * 2. If nodeA is nodeB, then return equal if offsetA is offsetB, before - * if offsetA is less than offsetB, and after if offsetA is greater than - * offsetB. - */ - if (nodeA === nodeB) { - if (offsetA === offsetB) { - return interfaces_1.BoundaryPosition.Equal; - } - else if (offsetA < offsetB) { - return interfaces_1.BoundaryPosition.Before; - } - else { - return interfaces_1.BoundaryPosition.After; - } - } +var CharacterDataImpl = /** @class */ (function (_super) { + __extends(CharacterDataImpl, _super); /** - * 3. If nodeA is following nodeB, then if the position of (nodeB, offsetB) - * relative to (nodeA, offsetA) is before, return after, and if it is after, - * return before. + * Initializes a new instance of `CharacterData`. + * + * @param data - the text content */ - if (TreeAlgorithm_1.tree_isFollowing(nodeB, nodeA)) { - var pos = boundaryPoint_position([nodeB, offsetB], [nodeA, offsetA]); - if (pos === interfaces_1.BoundaryPosition.Before) { - return interfaces_1.BoundaryPosition.After; - } - else if (pos === interfaces_1.BoundaryPosition.After) { - return interfaces_1.BoundaryPosition.Before; - } + function CharacterDataImpl(data) { + var _this = _super.call(this) || this; + _this._data = data; + return _this; } - /** - * 4. If nodeA is an ancestor of nodeB: - */ - if (TreeAlgorithm_1.tree_isAncestorOf(nodeB, nodeA)) { + Object.defineProperty(CharacterDataImpl.prototype, "data", { + /** @inheritdoc */ + get: function () { return this._data; }, + set: function (value) { + algorithm_1.characterData_replaceData(this, 0, this._data.length, value); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CharacterDataImpl.prototype, "length", { + /** @inheritdoc */ + get: function () { return this._data.length; }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + CharacterDataImpl.prototype.substringData = function (offset, count) { /** - * 4.1. Let child be nodeB. - * 4.2. While child is not a child of nodeA, set child to its parent. - * 4.3. If child’s index is less than offsetA, then return after. + * The substringData(offset, count) method, when invoked, must return the + * result of running substring data with node context object, offset offset, and count count. */ - var child = nodeB; - while (!TreeAlgorithm_1.tree_isChildOf(nodeA, child)) { - /* istanbul ignore else */ - if (child._parent !== null) { - child = child._parent; - } + return algorithm_1.characterData_substringData(this, offset, count); + }; + /** @inheritdoc */ + CharacterDataImpl.prototype.appendData = function (data) { + /** + * The appendData(data) method, when invoked, must replace data with node + * context object, offset context object’s length, count 0, and data data. + */ + return algorithm_1.characterData_replaceData(this, this._data.length, 0, data); + }; + /** @inheritdoc */ + CharacterDataImpl.prototype.insertData = function (offset, data) { + /** + * The insertData(offset, data) method, when invoked, must replace data with + * node context object, offset offset, count 0, and data data. + */ + algorithm_1.characterData_replaceData(this, offset, 0, data); + }; + /** @inheritdoc */ + CharacterDataImpl.prototype.deleteData = function (offset, count) { + /** + * The deleteData(offset, count) method, when invoked, must replace data + * with node context object, offset offset, count count, and data the + * empty string. + */ + algorithm_1.characterData_replaceData(this, offset, count, ''); + }; + /** @inheritdoc */ + CharacterDataImpl.prototype.replaceData = function (offset, count, data) { + /** + * The replaceData(offset, count, data) method, when invoked, must replace + * data with node context object, offset offset, count count, and data data. + */ + algorithm_1.characterData_replaceData(this, offset, count, data); + }; + Object.defineProperty(CharacterDataImpl.prototype, "previousElementSibling", { + // MIXIN: NonDocumentTypeChildNode + /* istanbul ignore next */ + get: function () { throw new Error("Mixin: NonDocumentTypeChildNode not implemented."); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CharacterDataImpl.prototype, "nextElementSibling", { + /* istanbul ignore next */ + get: function () { throw new Error("Mixin: NonDocumentTypeChildNode not implemented."); }, + enumerable: true, + configurable: true + }); + // MIXIN: ChildNode + /* istanbul ignore next */ + CharacterDataImpl.prototype.before = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; } - if (TreeAlgorithm_1.tree_index(child) < offsetA) { - return interfaces_1.BoundaryPosition.After; + throw new Error("Mixin: ChildNode not implemented."); + }; + /* istanbul ignore next */ + CharacterDataImpl.prototype.after = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; } - } - /** - * 5. Return before. - */ - return interfaces_1.BoundaryPosition.Before; -} -exports.boundaryPoint_position = boundaryPoint_position; -//# sourceMappingURL=BoundaryPointAlgorithm.js.map - -/***/ }), -/* 351 */, -/* 352 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - -var esprima; - -// Browserified version does not have esprima -// -// 1. For node.js just require module as deps -// 2. For browser try to require mudule via external AMD system. -// If not found - try to fallback to window.esprima. If not -// found too - then fail to parse. -// -try { - // workaround to exclude package from browserify list. - var _require = require; - esprima = _require('esprima'); -} catch (_) { - /* eslint-disable no-redeclare */ - /* global window */ - if (typeof window !== 'undefined') esprima = window.esprima; -} - -var Type = __webpack_require__(945); - -function resolveJavascriptFunction(data) { - if (data === null) return false; - - try { - var source = '(' + data + ')', - ast = esprima.parse(source, { range: true }); - - if (ast.type !== 'Program' || - ast.body.length !== 1 || - ast.body[0].type !== 'ExpressionStatement' || - (ast.body[0].expression.type !== 'ArrowFunctionExpression' && - ast.body[0].expression.type !== 'FunctionExpression')) { - return false; - } - - return true; - } catch (err) { - return false; - } -} - -function constructJavascriptFunction(data) { - /*jslint evil:true*/ - - var source = '(' + data + ')', - ast = esprima.parse(source, { range: true }), - params = [], - body; - - if (ast.type !== 'Program' || - ast.body.length !== 1 || - ast.body[0].type !== 'ExpressionStatement' || - (ast.body[0].expression.type !== 'ArrowFunctionExpression' && - ast.body[0].expression.type !== 'FunctionExpression')) { - throw new Error('Failed to resolve function'); - } - - ast.body[0].expression.params.forEach(function (param) { - params.push(param.name); - }); - - body = ast.body[0].expression.body.range; - - // Esprima's ranges include the first '{' and the last '}' characters on - // function expressions. So cut them out. - if (ast.body[0].expression.body.type === 'BlockStatement') { - /*eslint-disable no-new-func*/ - return new Function(params, source.slice(body[0] + 1, body[1] - 1)); - } - // ES6 arrow functions can omit the BlockStatement. In that case, just return - // the body. - /*eslint-disable no-new-func*/ - return new Function(params, 'return ' + source.slice(body[0], body[1])); -} - -function representJavascriptFunction(object /*, style*/) { - return object.toString(); -} - -function isFunction(object) { - return Object.prototype.toString.call(object) === '[object Function]'; -} - -module.exports = new Type('tag:yaml.org,2002:js/function', { - kind: 'scalar', - resolve: resolveJavascriptFunction, - construct: constructJavascriptFunction, - predicate: isFunction, - represent: representJavascriptFunction -}); - - -/***/ }), -/* 353 */, -/* 354 */, -/* 355 */, -/* 356 */, -/* 357 */ -/***/ (function(module) { - -module.exports = require("assert"); - -/***/ }), -/* 358 */, -/* 359 */, -/* 360 */, -/* 361 */, -/* 362 */, -/* 363 */, -/* 364 */, -/* 365 */, -/* 366 */, -/* 367 */, -/* 368 */, -/* 369 */, -/* 370 */, -/* 371 */, -/* 372 */, -/* 373 */ -/***/ (function(module) { - -module.exports = require("crypto"); + throw new Error("Mixin: ChildNode not implemented."); + }; + /* istanbul ignore next */ + CharacterDataImpl.prototype.replaceWith = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; + } + throw new Error("Mixin: ChildNode not implemented."); + }; + /* istanbul ignore next */ + CharacterDataImpl.prototype.remove = function () { throw new Error("Mixin: ChildNode not implemented."); }; + return CharacterDataImpl; +}(NodeImpl_1.NodeImpl)); +exports.CharacterDataImpl = CharacterDataImpl; +//# sourceMappingURL=CharacterDataImpl.js.map /***/ }), -/* 374 */, -/* 375 */, -/* 376 */, -/* 377 */, -/* 378 */, -/* 379 */, -/* 380 */, -/* 381 */, -/* 382 */, -/* 383 */, -/* 384 */, -/* 385 */, -/* 386 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - -var Type = __webpack_require__(945); - -function resolveJavascriptUndefined() { - return true; -} - -function constructJavascriptUndefined() { - /*eslint-disable no-undefined*/ - return undefined; -} - -function representJavascriptUndefined() { - return ''; -} - -function isUndefined(object) { - return typeof object === 'undefined'; -} - -module.exports = new Type('tag:yaml.org,2002:js/undefined', { - kind: 'scalar', - resolve: resolveJavascriptUndefined, - construct: constructJavascriptUndefined, - predicate: isUndefined, - represent: representJavascriptUndefined -}); - -/***/ }), -/* 387 */, -/* 388 */, -/* 389 */, -/* 390 */, -/* 391 */, -/* 392 */ -/***/ (function(__unusedmodule, exports) { +/***/ 8264: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var util_1 = __nccwpck_require__(5282); +var algorithm_1 = __nccwpck_require__(61); /** - * A namespace prefix map is a map that associates namespaceURI and namespace - * prefix lists, where namespaceURI values are the map's unique keys (which can - * include the null value representing no namespace), and ordered lists of - * associated prefix values are the map's key values. The namespace prefix map - * will be populated by previously seen namespaceURIs and all their previously - * encountered prefix associations for a given node and its ancestors. - * - * _Note:_ The last seen prefix for a given namespaceURI is at the end of its - * respective list. The list is searched to find potentially matching prefixes, - * and if no matches are found for the given namespaceURI, then the last prefix - * in the list is used. See copy a namespace prefix map and retrieve a preferred - * prefix string for additional details. - * - * See: https://w3c.github.io/DOM-Parsing/#the-namespace-prefix-map + * Represents a mixin that extends child nodes that can have siblings + * including doctypes. This mixin is implemented by {@link Element}, + * {@link CharacterData} and {@link DocumentType}. */ -var NamespacePrefixMap = /** @class */ (function () { - function NamespacePrefixMap() { - this._items = {}; - this._nullItems = []; +var ChildNodeImpl = /** @class */ (function () { + function ChildNodeImpl() { } - /** - * Creates a copy of the map. - */ - NamespacePrefixMap.prototype.copy = function () { - /** - * To copy a namespace prefix map map means to copy the map's keys into a - * new empty namespace prefix map, and to copy each of the values in the - * namespace prefix list associated with each keys' value into a new list - * which should be associated with the respective key in the new map. - */ - var mapCopy = new NamespacePrefixMap(); - for (var key in this._items) { - mapCopy._items[key] = this._items[key].slice(0); + /** @inheritdoc */ + ChildNodeImpl.prototype.before = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; } - mapCopy._nullItems = this._nullItems.slice(0); - return mapCopy; - }; - /** - * Retrieves a preferred prefix string from the namespace prefix map. - * - * @param preferredPrefix - preferred prefix string - * @param ns - namespace - */ - NamespacePrefixMap.prototype.get = function (preferredPrefix, ns) { /** - * 1. Let candidates list be the result of retrieving a list from map where - * there exists a key in map that matches the value of ns or if there is no - * such key, then stop running these steps, and return the null value. + * 1. Let parent be context object’s parent. + * 2. If parent is null, then return. */ - var candidatesList = ns === null ? this._nullItems : (this._items[ns] || null); - if (candidatesList === null) { - return null; - } + var context = util_1.Cast.asNode(this); + var parent = context._parent; + if (parent === null) + return; /** - * 2. Otherwise, for each prefix value prefix in candidates list, iterating - * from beginning to end: - * - * _Note:_ There will always be at least one prefix value in the list. + * 3. Let viablePreviousSibling be context object’s first preceding + * sibling not in nodes, and null otherwise. */ - var prefix = null; - for (var i = 0; i < candidatesList.length; i++) { - prefix = candidatesList[i]; - /** - * 2.1. If prefix matches preferred prefix, then stop running these steps - * and return prefix. - */ - if (prefix === preferredPrefix) { - return prefix; + var viablePreviousSibling = context._previousSibling; + var flag = true; + while (flag && viablePreviousSibling) { + flag = false; + for (var i = 0; i < nodes.length; i++) { + var child = nodes[i]; + if (child === viablePreviousSibling) { + viablePreviousSibling = viablePreviousSibling._previousSibling; + flag = true; + break; + } } } /** - * 2.2. If prefix is the last item in the candidates list, then stop - * running these steps and return prefix. - */ - return prefix; - }; - /** - * Checks if a prefix string is found in the namespace prefix map associated - * with the given namespace. - * - * @param prefix - prefix string - * @param ns - namespace - */ - NamespacePrefixMap.prototype.has = function (prefix, ns) { + * 4. Let node be the result of converting nodes into a node, given nodes + * and context object’s node document. + */ + var node = algorithm_1.parentNode_convertNodesIntoANode(nodes, context._nodeDocument); /** - * 1. Let candidates list be the result of retrieving a list from map where - * there exists a key in map that matches the value of ns or if there is - * no such key, then stop running these steps, and return false. + * 5. If viablePreviousSibling is null, set it to parent’s first child, + * and to viablePreviousSibling’s next sibling otherwise. */ - var candidatesList = ns === null ? this._nullItems : (this._items[ns] || null); - if (candidatesList === null) { - return false; - } + if (viablePreviousSibling === null) + viablePreviousSibling = parent._firstChild; + else + viablePreviousSibling = viablePreviousSibling._nextSibling; /** - * 2. If the value of prefix occurs at least once in candidates list, - * return true, otherwise return false. + * 6. Pre-insert node into parent before viablePreviousSibling. */ - return (candidatesList.indexOf(prefix) !== -1); - }; - /** - * Checks if a prefix string is found in the namespace prefix map. - * - * @param prefix - prefix string - */ - NamespacePrefixMap.prototype.hasPrefix = function (prefix) { - if (this._nullItems.indexOf(prefix) !== -1) - return true; - for (var key in this._items) { - if (this._items[key].indexOf(prefix) !== -1) - return true; - } - return false; + algorithm_1.mutation_preInsert(node, parent, viablePreviousSibling); }; - /** - * Adds a prefix string associated with a namespace to the prefix map. - * - * @param prefix - prefix string - * @param ns - namespace - */ - NamespacePrefixMap.prototype.set = function (prefix, ns) { + /** @inheritdoc */ + ChildNodeImpl.prototype.after = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; + } /** - * 1. Let candidates list be the result of retrieving a list from map where - * there exists a key in map that matches the value of ns or if there is - * no such key, then let candidates list be null. + * 1. Let parent be context object’s parent. + * 2. If parent is null, then return. */ - var candidatesList = ns === null ? this._nullItems : (this._items[ns] || null); + var context = util_1.Cast.asNode(this); + var parent = context._parent; + if (!parent) + return; /** - * 2. If candidates list is null, then create a new list with prefix as the - * only item in the list, and associate that list with a new key ns in map. - * 3. Otherwise, append prefix to the end of candidates list. - * - * _Note:_ The steps in retrieve a preferred prefix string use the list to - * track the most recently used (MRU) prefix associated with a given - * namespace, which will be the prefix at the end of the list. This list - * may contain duplicates of the same prefix value seen earlier - * (and that's OK). + * 3. Let viableNextSibling be context object’s first following sibling not + * in nodes, and null otherwise. */ - if (ns !== null && candidatesList === null) { - this._items[ns] = [prefix]; - } - else { - candidatesList.push(prefix); - } - }; - return NamespacePrefixMap; -}()); -exports.NamespacePrefixMap = NamespacePrefixMap; -//# sourceMappingURL=NamespacePrefixMap.js.map - -/***/ }), -/* 393 */ -/***/ (function(__unusedmodule, exports, __webpack_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.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.ZuluDistribution = void 0; -const core = __importStar(__webpack_require__(470)); -const tc = __importStar(__webpack_require__(139)); -const path_1 = __importDefault(__webpack_require__(622)); -const fs_1 = __importDefault(__webpack_require__(747)); -const semver_1 = __importDefault(__webpack_require__(876)); -const base_installer_1 = __webpack_require__(83); -const util_1 = __webpack_require__(322); -class ZuluDistribution extends base_installer_1.JavaBase { - constructor(installerOptions) { - super('Zulu', installerOptions); - } - findPackageForDownload(version) { - return __awaiter(this, void 0, void 0, function* () { - const availableVersionsRaw = yield this.getAvailableVersions(); - const availableVersions = availableVersionsRaw.map(item => { - return { - version: this.convertVersionToSemver(item.jdk_version), - url: item.url, - zuluVersion: this.convertVersionToSemver(item.zulu_version) - }; - }); - const satisfiedVersions = availableVersions - .filter(item => util_1.isVersionSatisfies(version, item.version)) - .sort((a, b) => { - // Azul provides two versions: jdk_version and azul_version - // we should sort by both fields by descending - return (-semver_1.default.compareBuild(a.version, b.version) || - -semver_1.default.compareBuild(a.zuluVersion, b.zuluVersion)); - }) - .map(item => { - return { - version: item.version, - url: item.url - }; - }); - const resolvedFullVersion = satisfiedVersions.length > 0 ? satisfiedVersions[0] : null; - if (!resolvedFullVersion) { - const availableOptions = availableVersions.map(item => item.version).join(', '); - const availableOptionsMessage = availableOptions - ? `\nAvailable versions: ${availableOptions}` - : ''; - throw new Error(`Could not find satisfied version for semver ${version}. ${availableOptionsMessage}`); - } - return resolvedFullVersion; - }); - } - downloadTool(javaRelease) { - return __awaiter(this, void 0, void 0, function* () { - let extractedJavaPath; - core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`); - const javaArchivePath = yield tc.downloadTool(javaRelease.url); - core.info(`Extracting Java archive...`); - let extension = util_1.getDownloadArchiveExtension(); - extractedJavaPath = yield util_1.extractJdkFile(javaArchivePath, extension); - const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; - const archivePath = path_1.default.join(extractedJavaPath, archiveName); - const javaPath = yield tc.cacheDir(archivePath, this.toolcacheFolderName, this.getToolcacheVersionName(javaRelease.version), this.architecture); - return { version: javaRelease.version, path: javaPath }; - }); - } - getAvailableVersions() { - var _a, _b; - return __awaiter(this, void 0, void 0, function* () { - const { arch, hw_bitness, abi } = this.getArchitectureOptions(); - const [bundleType, features] = this.packageType.split('+'); - const platform = this.getPlatformOption(); - const extension = util_1.getDownloadArchiveExtension(); - const javafx = (_a = features === null || features === void 0 ? void 0 : features.includes('fx')) !== null && _a !== void 0 ? _a : false; - const releaseStatus = this.stable ? 'ga' : 'ea'; - console.time('azul-retrieve-available-versions'); - const requestArguments = [ - `os=${platform}`, - `ext=${extension}`, - `bundle_type=${bundleType}`, - `javafx=${javafx}`, - `arch=${arch}`, - `hw_bitness=${hw_bitness}`, - `release_status=${releaseStatus}`, - abi ? `abi=${abi}` : null, - features ? `features=${features}` : null - ] - .filter(Boolean) - .join('&'); - const availableVersionsUrl = `https://api.azul.com/zulu/download/community/v1.0/bundles/?${requestArguments}`; - if (core.isDebug()) { - core.debug(`Gathering available versions from '${availableVersionsUrl}'`); - } - const availableVersions = (_b = (yield this.http.getJson(availableVersionsUrl)).result) !== null && _b !== void 0 ? _b : []; - if (core.isDebug()) { - core.startGroup('Print information about available versions'); - console.timeEnd('azul-retrieve-available-versions'); - console.log(`Available versions: [${availableVersions.length}]`); - console.log(availableVersions.map(item => item.jdk_version.join('.')).join(', ')); - core.endGroup(); + var viableNextSibling = context._nextSibling; + var flag = true; + while (flag && viableNextSibling) { + flag = false; + for (var i = 0; i < nodes.length; i++) { + var child = nodes[i]; + if (child === viableNextSibling) { + viableNextSibling = viableNextSibling._nextSibling; + flag = true; + break; + } } - return availableVersions; - }); - } - getArchitectureOptions() { - if (this.architecture == 'x64') { - return { arch: 'x86', hw_bitness: '64', abi: '' }; - } - else if (this.architecture == 'x86') { - return { arch: 'x86', hw_bitness: '32', abi: '' }; } - else { - return { arch: this.architecture, hw_bitness: '', abi: '' }; - } - } - getPlatformOption() { - // Azul has own platform names so need to map them - switch (process.platform) { - case 'darwin': - return 'macos'; - case 'win32': - return 'windows'; - default: - return process.platform; + /** + * 4. Let node be the result of converting nodes into a node, given nodes + * and context object’s node document. + */ + var node = algorithm_1.parentNode_convertNodesIntoANode(nodes, context._nodeDocument); + /** + * 5. Pre-insert node into parent before viableNextSibling. + */ + algorithm_1.mutation_preInsert(node, parent, viableNextSibling); + }; + /** @inheritdoc */ + ChildNodeImpl.prototype.replaceWith = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; } - } - // Azul API returns jdk_version as array of digits like [11, 0, 2, 1] - convertVersionToSemver(version_array) { - const mainVersion = version_array.slice(0, 3).join('.'); - if (version_array.length > 3) { - // intentionally ignore more than 4 numbers because it is invalid semver - return `${mainVersion}+${version_array[3]}`; + /** + * 1. Let parent be context object’s parent. + * 2. If parent is null, then return. + */ + var context = util_1.Cast.asNode(this); + var parent = context._parent; + if (!parent) + return; + /** + * 3. Let viableNextSibling be context object’s first following sibling not + * in nodes, and null otherwise. + */ + var viableNextSibling = context._nextSibling; + var flag = true; + while (flag && viableNextSibling) { + flag = false; + for (var i = 0; i < nodes.length; i++) { + var child = nodes[i]; + if (child === viableNextSibling) { + viableNextSibling = viableNextSibling._nextSibling; + flag = true; + break; + } + } } - return mainVersion; - } -} -exports.ZuluDistribution = ZuluDistribution; - - -/***/ }), -/* 394 */, -/* 395 */, -/* 396 */ -/***/ (function(module) { - -"use strict"; - -module.exports = function (Yallist) { - Yallist.prototype[Symbol.iterator] = function* () { - for (let walker = this.head; walker; walker = walker.next) { - yield walker.value - } - } -} - - -/***/ }), -/* 397 */, -/* 398 */, -/* 399 */, -/* 400 */, -/* 401 */, -/* 402 */, -/* 403 */, -/* 404 */, -/* 405 */, -/* 406 */, -/* 407 */, -/* 408 */, -/* 409 */, -/* 410 */, -/* 411 */, -/* 412 */, -/* 413 */ -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Represents an abstract range with a start and end boundary point. - */ -var AbstractRangeImpl = /** @class */ (function () { - function AbstractRangeImpl() { - } - Object.defineProperty(AbstractRangeImpl.prototype, "_startNode", { - get: function () { return this._start[0]; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(AbstractRangeImpl.prototype, "_startOffset", { - get: function () { return this._start[1]; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(AbstractRangeImpl.prototype, "_endNode", { - get: function () { return this._end[0]; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(AbstractRangeImpl.prototype, "_endOffset", { - get: function () { return this._end[1]; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(AbstractRangeImpl.prototype, "_collapsed", { - get: function () { - return (this._start[0] === this._end[0] && - this._start[1] === this._end[1]); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(AbstractRangeImpl.prototype, "startContainer", { - /** @inheritdoc */ - get: function () { return this._startNode; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(AbstractRangeImpl.prototype, "startOffset", { - /** @inheritdoc */ - get: function () { return this._startOffset; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(AbstractRangeImpl.prototype, "endContainer", { - /** @inheritdoc */ - get: function () { return this._endNode; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(AbstractRangeImpl.prototype, "endOffset", { - /** @inheritdoc */ - get: function () { return this._endOffset; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(AbstractRangeImpl.prototype, "collapsed", { - /** @inheritdoc */ - get: function () { return this._collapsed; }, - enumerable: true, - configurable: true - }); - return AbstractRangeImpl; + /** + * 4. Let node be the result of converting nodes into a node, given nodes + * and context object’s node document. + */ + var node = algorithm_1.parentNode_convertNodesIntoANode(nodes, context._nodeDocument); + /** + * 5. If context object’s parent is parent, replace the context object with + * node within parent. + * _Note:_ Context object could have been inserted into node. + * 6. Otherwise, pre-insert node into parent before viableNextSibling. + */ + if (context._parent === parent) + algorithm_1.mutation_replace(context, node, parent); + else + algorithm_1.mutation_preInsert(node, parent, viableNextSibling); + }; + /** @inheritdoc */ + ChildNodeImpl.prototype.remove = function () { + /** + * 1. If context object’s parent is null, then return. + * 2. Remove the context object from context object’s parent. + */ + var context = util_1.Cast.asNode(this); + var parent = context._parent; + if (!parent) + return; + algorithm_1.mutation_remove(context, parent); + }; + return ChildNodeImpl; }()); -exports.AbstractRangeImpl = AbstractRangeImpl; -//# sourceMappingURL=AbstractRangeImpl.js.map - -/***/ }), -/* 414 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - - -var yaml = __webpack_require__(9); - - -module.exports = yaml; - +exports.ChildNodeImpl = ChildNodeImpl; +//# sourceMappingURL=ChildNodeImpl.js.map /***/ }), -/* 415 */, -/* 416 */, -/* 417 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - -var common = __webpack_require__(740); -var Type = __webpack_require__(945); - -var YAML_FLOAT_PATTERN = new RegExp( - // 2.5e4, 2.5 and integers - '^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + - // .2e4, .2 - // special case, seems not from spec - '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + - // 20:59 - '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*' + - // .inf - '|[-+]?\\.(?:inf|Inf|INF)' + - // .nan - '|\\.(?:nan|NaN|NAN))$'); - -function resolveYamlFloat(data) { - if (data === null) return false; - - if (!YAML_FLOAT_PATTERN.test(data) || - // Quick hack to not allow integers end with `_` - // Probably should update regexp & check speed - data[data.length - 1] === '_') { - return false; - } - - return true; -} -function constructYamlFloat(data) { - var value, sign, base, digits; - - value = data.replace(/_/g, '').toLowerCase(); - sign = value[0] === '-' ? -1 : 1; - digits = []; - - if ('+-'.indexOf(value[0]) >= 0) { - value = value.slice(1); - } - - if (value === '.inf') { - return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; - - } else if (value === '.nan') { - return NaN; - - } else if (value.indexOf(':') >= 0) { - value.split(':').forEach(function (v) { - digits.unshift(parseFloat(v, 10)); - }); - - value = 0.0; - base = 1; - - digits.forEach(function (d) { - value += d * base; - base *= 60; - }); - - return sign * value; - - } - return sign * parseFloat(value, 10); -} - - -var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; - -function representYamlFloat(object, style) { - var res; - - if (isNaN(object)) { - switch (style) { - case 'lowercase': return '.nan'; - case 'uppercase': return '.NAN'; - case 'camelcase': return '.NaN'; - } - } else if (Number.POSITIVE_INFINITY === object) { - switch (style) { - case 'lowercase': return '.inf'; - case 'uppercase': return '.INF'; - case 'camelcase': return '.Inf'; - } - } else if (Number.NEGATIVE_INFINITY === object) { - switch (style) { - case 'lowercase': return '-.inf'; - case 'uppercase': return '-.INF'; - case 'camelcase': return '-.Inf'; - } - } else if (common.isNegativeZero(object)) { - return '-0.0'; - } - - res = object.toString(10); - - // JS stringifier can build scientific format without dots: 5e-100, - // while YAML requres dot: 5.e-100. Fix it with simple hack - - return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res; -} - -function isFloat(object) { - return (Object.prototype.toString.call(object) === '[object Number]') && - (object % 1 !== 0 || common.isNegativeZero(object)); -} - -module.exports = new Type('tag:yaml.org,2002:float', { - kind: 'scalar', - resolve: resolveYamlFloat, - construct: constructYamlFloat, - predicate: isFloat, - represent: representYamlFloat, - defaultStyle: 'lowercase' -}); - - -/***/ }), -/* 418 */, -/* 419 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 930: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -14386,4848 +13488,3719 @@ var __extends = (this && this.__extends) || (function () { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var util_1 = __webpack_require__(592); -var interfaces_1 = __webpack_require__(970); -var BaseWriter_1 = __webpack_require__(462); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7305); +var CharacterDataImpl_1 = __nccwpck_require__(5330); +var WebIDLAlgorithm_1 = __nccwpck_require__(5457); /** - * Serializes XML nodes into objects and arrays. + * Represents a comment node. */ -var ObjectWriter = /** @class */ (function (_super) { - __extends(ObjectWriter, _super); +var CommentImpl = /** @class */ (function (_super) { + __extends(CommentImpl, _super); /** - * Initializes a new instance of `ObjectWriter`. + * Initializes a new instance of `Comment`. * - * @param builderOptions - XML builder options - * @param writerOptions - serialization options + * @param data - the text content */ - function ObjectWriter(builderOptions, writerOptions) { - var _this = _super.call(this, builderOptions) || this; - _this._writerOptions = util_1.applyDefaults(writerOptions, { - format: "object", - wellFormed: false, - noDoubleEncoding: false, - group: false, - verbose: false - }); - return _this; + function CommentImpl(data) { + if (data === void 0) { data = ''; } + return _super.call(this, data) || this; } /** - * Produces an XML serialization of the given node. + * Creates a new `Comment`. * - * @param node - node to serialize + * @param document - owner document + * @param data - node contents */ - ObjectWriter.prototype.serialize = function (node) { - this._currentList = []; - this._currentIndex = 0; - this._listRegister = [this._currentList]; - /** - * First pass, serialize nodes - * This creates a list of nodes grouped under node types while preserving - * insertion order. For example: - * [ - * root: [ - * node: [ - * { "@" : { "att1": "val1", "att2": "val2" } - * { "#": "node text" } - * { childNode: [] } - * { "#": "more text" } - * ], - * node: [ - * { "@" : { "att": "val" } - * { "#": [ "text line1", "text line2" ] } - * ] - * ] - * ] - */ - this.serializeNode(node, this._writerOptions.wellFormed, this._writerOptions.noDoubleEncoding); - /** - * Second pass, process node lists. Above example becomes: - * { - * root: { - * node: [ - * { - * "@att1": "val1", - * "@att2": "val2", - * "#1": "node text", - * childNode: {}, - * "#2": "more text" - * }, - * { - * "@att": "val", - * "#": [ "text line1", "text line2" ] - * } - * ] - * } - * } - */ - return this._process(this._currentList, this._writerOptions); - }; - ObjectWriter.prototype._process = function (items, options) { - var _a, _b, _c, _d, _e, _f, _g; - if (items.length === 0) - return {}; - // determine if there are non-unique element names - var namesSeen = {}; - var hasNonUniqueNames = false; - var textCount = 0; - var commentCount = 0; - var instructionCount = 0; - var cdataCount = 0; - for (var i = 0; i < items.length; i++) { - var item = items[i]; - var key = Object.keys(item)[0]; - switch (key) { - case "@": - continue; - case "#": - textCount++; - break; - case "!": - commentCount++; - break; - case "?": - instructionCount++; - break; - case "$": - cdataCount++; - break; - default: - if (namesSeen[key]) { - hasNonUniqueNames = true; - } - else { - namesSeen[key] = true; - } - break; - } - } - var defAttrKey = this._getAttrKey(); - var defTextKey = this._getNodeKey(interfaces_1.NodeType.Text); - var defCommentKey = this._getNodeKey(interfaces_1.NodeType.Comment); - var defInstructionKey = this._getNodeKey(interfaces_1.NodeType.ProcessingInstruction); - var defCdataKey = this._getNodeKey(interfaces_1.NodeType.CData); - if (textCount === 1 && items.length === 1 && util_1.isString(items[0]["#"])) { - // special case of an element node with a single text node - return items[0]["#"]; - } - else if (hasNonUniqueNames) { - var obj = {}; - // process attributes first - for (var i = 0; i < items.length; i++) { - var item = items[i]; - var key = Object.keys(item)[0]; - if (key === "@") { - var attrs = item["@"]; - var attrKeys = Object.keys(attrs); - if (attrKeys.length === 1) { - obj[defAttrKey + attrKeys[0]] = attrs[attrKeys[0]]; - } - else { - obj[defAttrKey] = item["@"]; - } - } - } - // list contains element nodes with non-unique names - // return an array with mixed content notation - var result = []; - for (var i = 0; i < items.length; i++) { - var item = items[i]; - var key = Object.keys(item)[0]; - switch (key) { - case "@": - // attributes were processed above - break; - case "#": - result.push((_a = {}, _a[defTextKey] = item["#"], _a)); - break; - case "!": - result.push((_b = {}, _b[defCommentKey] = item["!"], _b)); - break; - case "?": - result.push((_c = {}, _c[defInstructionKey] = item["?"], _c)); - break; - case "$": - result.push((_d = {}, _d[defCdataKey] = item["$"], _d)); - break; - default: - // element node - var ele = item; - if (ele[key].length !== 0 && util_1.isArray(ele[key][0])) { - // group of element nodes - var eleGroup = []; - var listOfLists = ele[key]; - for (var i_1 = 0; i_1 < listOfLists.length; i_1++) { - eleGroup.push(this._process(listOfLists[i_1], options)); - } - result.push((_e = {}, _e[key] = eleGroup, _e)); - } - else { - // single element node - if (options.verbose) { - result.push((_f = {}, _f[key] = [this._process(ele[key], options)], _f)); - } - else { - result.push((_g = {}, _g[key] = this._process(ele[key], options), _g)); - } - } - break; - } - } - obj[defTextKey] = result; - return obj; - } - else { - // all element nodes have unique names - // return an object while prefixing data node keys - var textId = 1; - var commentId = 1; - var instructionId = 1; - var cdataId = 1; - var obj = {}; - for (var i = 0; i < items.length; i++) { - var item = items[i]; - var key = Object.keys(item)[0]; - switch (key) { - case "@": - var attrs = item["@"]; - var attrKeys = Object.keys(attrs); - if (!options.group || attrKeys.length === 1) { - for (var attrName in attrs) { - obj[defAttrKey + attrName] = attrs[attrName]; - } - } - else { - obj[defAttrKey] = attrs; - } - break; - case "#": - textId = this._processSpecItem(item["#"], obj, options.group, defTextKey, textCount, textId); - break; - case "!": - commentId = this._processSpecItem(item["!"], obj, options.group, defCommentKey, commentCount, commentId); - break; - case "?": - instructionId = this._processSpecItem(item["?"], obj, options.group, defInstructionKey, instructionCount, instructionId); - break; - case "$": - cdataId = this._processSpecItem(item["$"], obj, options.group, defCdataKey, cdataCount, cdataId); - break; - default: - // element node - var ele = item; - if (ele[key].length !== 0 && util_1.isArray(ele[key][0])) { - // group of element nodes - var eleGroup = []; - var listOfLists = ele[key]; - for (var i_2 = 0; i_2 < listOfLists.length; i_2++) { - eleGroup.push(this._process(listOfLists[i_2], options)); - } - obj[key] = eleGroup; - } - else { - // single element node - if (options.verbose) { - obj[key] = [this._process(ele[key], options)]; - } - else { - obj[key] = this._process(ele[key], options); - } - } - break; - } - } - return obj; - } - }; - ObjectWriter.prototype._processSpecItem = function (item, obj, group, defKey, count, id) { - var e_1, _a; - if (!group && util_1.isArray(item) && count + item.length > 2) { - try { - for (var item_1 = __values(item), item_1_1 = item_1.next(); !item_1_1.done; item_1_1 = item_1.next()) { - var subItem = item_1_1.value; - var key = defKey + (id++).toString(); - obj[key] = subItem; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (item_1_1 && !item_1_1.done && (_a = item_1.return)) _a.call(item_1); - } - finally { if (e_1) throw e_1.error; } - } - } - else { - var key = count > 1 ? defKey + (id++).toString() : defKey; - obj[key] = item; - } - return id; - }; - /** @inheritdoc */ - ObjectWriter.prototype.beginElement = function (name) { - var _a, _b; - var childItems = []; - if (this._currentList.length === 0) { - this._currentList.push((_a = {}, _a[name] = childItems, _a)); - } - else { - var lastItem = this._currentList[this._currentList.length - 1]; - if (this._isElementNode(lastItem, name)) { - if (lastItem[name].length !== 0 && util_1.isArray(lastItem[name][0])) { - var listOfLists = lastItem[name]; - listOfLists.push(childItems); - } - else { - lastItem[name] = [lastItem[name], childItems]; - } - } - else { - this._currentList.push((_b = {}, _b[name] = childItems, _b)); - } - } - this._currentIndex++; - if (this._listRegister.length > this._currentIndex) { - this._listRegister[this._currentIndex] = childItems; - } - else { - this._listRegister.push(childItems); - } - this._currentList = childItems; - }; - /** @inheritdoc */ - ObjectWriter.prototype.endElement = function () { - this._currentList = this._listRegister[--this._currentIndex]; - }; - /** @inheritdoc */ - ObjectWriter.prototype.attribute = function (name, value) { - var _a, _b; - if (this._currentList.length === 0) { - this._currentList.push({ "@": (_a = {}, _a[name] = value, _a) }); - } - else { - var lastItem = this._currentList[this._currentList.length - 1]; - /* istanbul ignore else */ - if (this._isAttrNode(lastItem)) { - lastItem["@"][name] = value; - } - else { - this._currentList.push({ "@": (_b = {}, _b[name] = value, _b) }); - } - } - }; - /** @inheritdoc */ - ObjectWriter.prototype.comment = function (data) { - if (this._currentList.length === 0) { - this._currentList.push({ "!": data }); - } - else { - var lastItem = this._currentList[this._currentList.length - 1]; - if (this._isCommentNode(lastItem)) { - if (util_1.isArray(lastItem["!"])) { - lastItem["!"].push(data); - } - else { - lastItem["!"] = [lastItem["!"], data]; - } - } - else { - this._currentList.push({ "!": data }); - } - } - }; - /** @inheritdoc */ - ObjectWriter.prototype.text = function (data) { - if (this._currentList.length === 0) { - this._currentList.push({ "#": data }); - } - else { - var lastItem = this._currentList[this._currentList.length - 1]; - if (this._isTextNode(lastItem)) { - if (util_1.isArray(lastItem["#"])) { - lastItem["#"].push(data); - } - else { - lastItem["#"] = [lastItem["#"], data]; - } - } - else { - this._currentList.push({ "#": data }); - } - } - }; - /** @inheritdoc */ - ObjectWriter.prototype.instruction = function (target, data) { - var value = (data === "" ? target : target + " " + data); - if (this._currentList.length === 0) { - this._currentList.push({ "?": value }); - } - else { - var lastItem = this._currentList[this._currentList.length - 1]; - if (this._isInstructionNode(lastItem)) { - if (util_1.isArray(lastItem["?"])) { - lastItem["?"].push(value); - } - else { - lastItem["?"] = [lastItem["?"], value]; - } - } - else { - this._currentList.push({ "?": value }); - } - } - }; - /** @inheritdoc */ - ObjectWriter.prototype.cdata = function (data) { - if (this._currentList.length === 0) { - this._currentList.push({ "$": data }); - } - else { - var lastItem = this._currentList[this._currentList.length - 1]; - if (this._isCDATANode(lastItem)) { - if (util_1.isArray(lastItem["$"])) { - lastItem["$"].push(data); - } - else { - lastItem["$"] = [lastItem["$"], data]; - } - } - else { - this._currentList.push({ "$": data }); - } - } - }; - ObjectWriter.prototype._isAttrNode = function (x) { - return "@" in x; - }; - ObjectWriter.prototype._isTextNode = function (x) { - return "#" in x; - }; - ObjectWriter.prototype._isCommentNode = function (x) { - return "!" in x; - }; - ObjectWriter.prototype._isInstructionNode = function (x) { - return "?" in x; - }; - ObjectWriter.prototype._isCDATANode = function (x) { - return "$" in x; - }; - ObjectWriter.prototype._isElementNode = function (x, name) { - return name in x; - }; - /** - * Returns an object key for an attribute or namespace declaration. - */ - ObjectWriter.prototype._getAttrKey = function () { - return this._builderOptions.convert.att; - }; - /** - * Returns an object key for the given node type. - * - * @param nodeType - node type to get a key for - */ - ObjectWriter.prototype._getNodeKey = function (nodeType) { - switch (nodeType) { - case interfaces_1.NodeType.Comment: - return this._builderOptions.convert.comment; - case interfaces_1.NodeType.Text: - return this._builderOptions.convert.text; - case interfaces_1.NodeType.ProcessingInstruction: - return this._builderOptions.convert.ins; - case interfaces_1.NodeType.CData: - return this._builderOptions.convert.cdata; - /* istanbul ignore next */ - default: - throw new Error("Invalid node type."); - } + CommentImpl._create = function (document, data) { + if (data === void 0) { data = ''; } + var node = new CommentImpl(data); + node._nodeDocument = document; + return node; }; - return ObjectWriter; -}(BaseWriter_1.BaseWriter)); -exports.ObjectWriter = ObjectWriter; -//# sourceMappingURL=ObjectWriter.js.map + return CommentImpl; +}(CharacterDataImpl_1.CharacterDataImpl)); +exports.CommentImpl = CommentImpl; +/** + * Initialize prototype properties + */ +WebIDLAlgorithm_1.idl_defineConst(CommentImpl.prototype, "_nodeType", interfaces_1.NodeType.Comment); +//# sourceMappingURL=CommentImpl.js.map /***/ }), -/* 420 */, -/* 421 */, -/* 422 */, -/* 423 */, -/* 424 */, -/* 425 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 9857: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var DOMException_1 = __webpack_require__(35); -var infra_1 = __webpack_require__(23); -var algorithm_1 = __webpack_require__(163); + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var EventImpl_1 = __nccwpck_require__(8245); +var algorithm_1 = __nccwpck_require__(61); /** - * Represents a token set. + * Represents and event that carries custom data. */ -var DOMTokenListImpl = /** @class */ (function () { +var CustomEventImpl = /** @class */ (function (_super) { + __extends(CustomEventImpl, _super); /** - * Initializes a new instance of `DOMTokenList`. - * - * @param element - associated element - * @param attribute - associated attribute + * Initializes a new instance of `CustomEvent`. */ - function DOMTokenListImpl(element, attribute) { + function CustomEventImpl(type, eventInit) { + var _this = _super.call(this, type, eventInit) || this; + _this._detail = null; + _this._detail = (eventInit && eventInit.detail) || null; + return _this; + } + Object.defineProperty(CustomEventImpl.prototype, "detail", { + /** @inheritdoc */ + get: function () { return this._detail; }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + CustomEventImpl.prototype.initCustomEvent = function (type, bubbles, cancelable, detail) { + if (bubbles === void 0) { bubbles = false; } + if (cancelable === void 0) { cancelable = false; } + if (detail === void 0) { detail = null; } /** - * 1. Let element be associated element. - * 2. Let localName be associated attribute’s local name. - * 3. Let value be the result of getting an attribute value given element - * and localName. - * 4. Run the attribute change steps for element, localName, value, value, - * and null. + * 1. If the context object’s dispatch flag is set, then return. */ - this._element = element; - this._attribute = attribute; - this._tokenSet = new Set(); - var localName = attribute._localName; - var value = algorithm_1.element_getAnAttributeValue(element, localName); - // define a closure to be called when the associated attribute's value changes - var thisObj = this; - function updateTokenSet(element, localName, oldValue, value, namespace) { - /** - * 1. If localName is associated attribute’s local name, namespace is null, - * and value is null, then empty token set. - * 2. Otherwise, if localName is associated attribute’s local name, - * namespace is null, then set token set to value, parsed. - */ - if (localName === thisObj._attribute._localName && namespace === null) { - if (!value) - thisObj._tokenSet.clear(); - else - thisObj._tokenSet = algorithm_1.orderedSet_parse(value); - } - } - // add the closure to the associated element's attribute change steps - this._element._attributeChangeSteps.push(updateTokenSet); - if (DOMImpl_1.dom.features.steps) { - algorithm_1.dom_runAttributeChangeSteps(element, localName, value, value, null); - } - } - Object.defineProperty(DOMTokenListImpl.prototype, "length", { - /** @inheritdoc */ - get: function () { - /** - * The length attribute' getter must return context object’s token set’s - * size. - */ - return this._tokenSet.size; - }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - DOMTokenListImpl.prototype.item = function (index) { - var e_1, _a; - /** - * 1. If index is equal to or greater than context object’s token set’s - * size, then return null. - * 2. Return context object’s token set[index]. - */ - var i = 0; - try { - for (var _b = __values(this._tokenSet), _c = _b.next(); !_c.done; _c = _b.next()) { - var token = _c.value; - if (i === index) - return token; - i++; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - return null; - }; - /** @inheritdoc */ - DOMTokenListImpl.prototype.contains = function (token) { - /** - * The contains(token) method, when invoked, must return true if context - * object’s token set[token] exists, and false otherwise. - */ - return this._tokenSet.has(token); - }; - /** @inheritdoc */ - DOMTokenListImpl.prototype.add = function () { - var e_2, _a; - var tokens = []; - for (var _i = 0; _i < arguments.length; _i++) { - tokens[_i] = arguments[_i]; - } - try { - /** - * 1. For each token in tokens: - * 1.1. If token is the empty string, then throw a "SyntaxError" - * DOMException. - * 1.2. If token contains any ASCII whitespace, then throw an - * "InvalidCharacterError" DOMException. - * 2. For each token in tokens, append token to context object’s token set. - * 3. Run the update steps. - */ - for (var tokens_1 = __values(tokens), tokens_1_1 = tokens_1.next(); !tokens_1_1.done; tokens_1_1 = tokens_1.next()) { - var token = tokens_1_1.value; - if (token === '') { - throw new DOMException_1.SyntaxError("Cannot add an empty token."); - } - else if (infra_1.codePoint.ASCIIWhiteSpace.test(token)) { - throw new DOMException_1.InvalidCharacterError("Token cannot contain whitespace."); - } - else { - this._tokenSet.add(token); - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (tokens_1_1 && !tokens_1_1.done && (_a = tokens_1.return)) _a.call(tokens_1); - } - finally { if (e_2) throw e_2.error; } - } - algorithm_1.tokenList_updateSteps(this); - }; - /** @inheritdoc */ - DOMTokenListImpl.prototype.remove = function () { - var e_3, _a; - var tokens = []; - for (var _i = 0; _i < arguments.length; _i++) { - tokens[_i] = arguments[_i]; - } - try { - /** - * 1. For each token in tokens: - * 1.1. If token is the empty string, then throw a "SyntaxError" - * DOMException. - * 1.2. If token contains any ASCII whitespace, then throw an - * "InvalidCharacterError" DOMException. - * 2. For each token in tokens, remove token from context object’s token set. - * 3. Run the update steps. - */ - for (var tokens_2 = __values(tokens), tokens_2_1 = tokens_2.next(); !tokens_2_1.done; tokens_2_1 = tokens_2.next()) { - var token = tokens_2_1.value; - if (token === '') { - throw new DOMException_1.SyntaxError("Cannot remove an empty token."); - } - else if (infra_1.codePoint.ASCIIWhiteSpace.test(token)) { - throw new DOMException_1.InvalidCharacterError("Token cannot contain whitespace."); - } - else { - this._tokenSet.delete(token); - } - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (tokens_2_1 && !tokens_2_1.done && (_a = tokens_2.return)) _a.call(tokens_2); - } - finally { if (e_3) throw e_3.error; } - } - algorithm_1.tokenList_updateSteps(this); - }; - /** @inheritdoc */ - DOMTokenListImpl.prototype.toggle = function (token, force) { - if (force === void 0) { force = undefined; } - /** - * 1. If token is the empty string, then throw a "SyntaxError" DOMException. - * 2. If token contains any ASCII whitespace, then throw an - * "InvalidCharacterError" DOMException. - */ - if (token === '') { - throw new DOMException_1.SyntaxError("Cannot toggle an empty token."); - } - else if (infra_1.codePoint.ASCIIWhiteSpace.test(token)) { - throw new DOMException_1.InvalidCharacterError("Token cannot contain whitespace."); - } - /** - * 3. If context object’s token set[token] exists, then: - */ - if (this._tokenSet.has(token)) { - /** - * 3.1. If force is either not given or is false, then remove token from - * context object’s token set, run the update steps and return false. - * 3.2. Return true. - */ - if (force === undefined || force === false) { - this._tokenSet.delete(token); - algorithm_1.tokenList_updateSteps(this); - return false; - } - return true; - } - /** - * 4. Otherwise, if force not given or is true, append token to context - * object’s token set, run the update steps, and return true. - */ - if (force === undefined || force === true) { - this._tokenSet.add(token); - algorithm_1.tokenList_updateSteps(this); - return true; - } - /** - * 5. Return false. - */ - return false; - }; - /** @inheritdoc */ - DOMTokenListImpl.prototype.replace = function (token, newToken) { - /** - * 1. If either token or newToken is the empty string, then throw a - * "SyntaxError" DOMException. - * 2. If either token or newToken contains any ASCII whitespace, then throw - * an "InvalidCharacterError" DOMException. - */ - if (token === '' || newToken === '') { - throw new DOMException_1.SyntaxError("Cannot replace an empty token."); - } - else if (infra_1.codePoint.ASCIIWhiteSpace.test(token) || infra_1.codePoint.ASCIIWhiteSpace.test(newToken)) { - throw new DOMException_1.InvalidCharacterError("Token cannot contain whitespace."); - } - /** - * 3. If context object’s token set does not contain token, then return - * false. - */ - if (!this._tokenSet.has(token)) - return false; + if (this._dispatchFlag) + return; /** - * 4. Replace token in context object’s token set with newToken. - * 5. Run the update steps. - * 6. Return true. + * 2. Initialize the context object with type, bubbles, and cancelable. */ - infra_1.set.replace(this._tokenSet, token, newToken); - algorithm_1.tokenList_updateSteps(this); - return true; - }; - /** @inheritdoc */ - DOMTokenListImpl.prototype.supports = function (token) { + algorithm_1.event_initialize(this, type, bubbles, cancelable); /** - * 1. Let result be the return value of validation steps called with token. - * 2. Return result. + * 3. Set the context object’s detail attribute to detail. */ - return algorithm_1.tokenList_validationSteps(this, token); - }; - Object.defineProperty(DOMTokenListImpl.prototype, "value", { - /** @inheritdoc */ - get: function () { - /** - * The value attribute must return the result of running context object’s - * serialize steps. - */ - return algorithm_1.tokenList_serializeSteps(this); - }, - set: function (value) { - /** - * Setting the value attribute must set an attribute value for the - * associated element using associated attribute’s local name and the given - * value. - */ - algorithm_1.element_setAnAttributeValue(this._element, this._attribute._localName, value); - }, - enumerable: true, - configurable: true - }); - /** - * Returns an iterator for the token set. - */ - DOMTokenListImpl.prototype[Symbol.iterator] = function () { - var it = this._tokenSet[Symbol.iterator](); - return { - next: function () { - return it.next(); - } - }; - }; - /** - * Creates a new `DOMTokenList`. - * - * @param element - associated element - * @param attribute - associated attribute - */ - DOMTokenListImpl._create = function (element, attribute) { - return new DOMTokenListImpl(element, attribute); + this._detail = detail; }; - return DOMTokenListImpl; -}()); -exports.DOMTokenListImpl = DOMTokenListImpl; -//# sourceMappingURL=DOMTokenListImpl.js.map + return CustomEventImpl; +}(EventImpl_1.EventImpl)); +exports.CustomEventImpl = CustomEventImpl; +//# sourceMappingURL=CustomEventImpl.js.map /***/ }), -/* 426 */, -/* 427 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 3166: +/***/ (function(__unused_webpack_module, exports) { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(970); -var algorithm_1 = __webpack_require__(163); -var WebIDLAlgorithm_1 = __webpack_require__(495); +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); /** - * Represents a DOM event. + * Represents the base class of `Error` objects used by this module. */ -var EventImpl = /** @class */ (function () { +var DOMException = /** @class */ (function (_super) { + __extends(DOMException, _super); /** - * Initializes a new instance of `Event`. + * + * @param name - message name + * @param message - error message */ - function EventImpl(type, eventInit) { - this._target = null; - this._relatedTarget = null; - this._touchTargetList = []; - this._path = []; - this._currentTarget = null; - this._eventPhase = interfaces_1.EventPhase.None; - this._stopPropagationFlag = false; - this._stopImmediatePropagationFlag = false; - this._canceledFlag = false; - this._inPassiveListenerFlag = false; - this._composedFlag = false; - this._initializedFlag = false; - this._dispatchFlag = false; - this._isTrusted = false; - this._bubbles = false; - this._cancelable = false; - /** - * When a constructor of the Event interface, or of an interface that - * inherits from the Event interface, is invoked, these steps must be run, - * given the arguments type and eventInitDict: - * 1. Let event be the result of running the inner event creation steps with - * this interface, null, now, and eventInitDict. - * 2. Initialize event’s type attribute to type. - * 3. Return event. - */ - this._type = type; - if (eventInit) { - this._bubbles = eventInit.bubbles || false; - this._cancelable = eventInit.cancelable || false; - this._composedFlag = eventInit.composed || false; - } - this._initializedFlag = true; - this._timeStamp = new Date().getTime(); + function DOMException(name, message) { + if (message === void 0) { message = ""; } + var _this = _super.call(this, message) || this; + _this.name = name; + return _this; } - Object.defineProperty(EventImpl.prototype, "type", { - /** @inheritdoc */ - get: function () { return this._type; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(EventImpl.prototype, "target", { - /** @inheritdoc */ - get: function () { return this._target; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(EventImpl.prototype, "srcElement", { - /** @inheritdoc */ - get: function () { return this._target; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(EventImpl.prototype, "currentTarget", { - /** @inheritdoc */ - get: function () { return this._currentTarget; }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - EventImpl.prototype.composedPath = function () { - /** - * 1. Let composedPath be an empty list. - * 2. Let path be the context object’s path. - * 3. If path is empty, then return composedPath. - * 4. Let currentTarget be the context object’s currentTarget attribute - * value. - * 5. Append currentTarget to composedPath. - * 6. Let currentTargetIndex be 0. - * 7. Let currentTargetHiddenSubtreeLevel be 0. - */ - var composedPath = []; - var path = this._path; - if (path.length === 0) - return composedPath; - var currentTarget = this._currentTarget; - if (currentTarget === null) { - throw new Error("Event currentTarget is null."); - } - composedPath.push(currentTarget); - var currentTargetIndex = 0; - var currentTargetHiddenSubtreeLevel = 0; - /** - * 8. Let index be path’s size − 1. - * 9. While index is greater than or equal to 0: - */ - var index = path.length - 1; - while (index >= 0) { - /** - * 9.1. If path[index]'s root-of-closed-tree is true, then increase - * currentTargetHiddenSubtreeLevel by 1. - * 9.2. If path[index]'s invocation target is currentTarget, then set - * currentTargetIndex to index and break. - * 9.3. If path[index]'s slot-in-closed-tree is true, then decrease - * currentTargetHiddenSubtreeLevel by 1. - * 9.4. Decrease index by 1. - */ - if (path[index].rootOfClosedTree) { - currentTargetHiddenSubtreeLevel++; - } - if (path[index].invocationTarget === currentTarget) { - currentTargetIndex = index; - break; - } - if (path[index].slotInClosedTree) { - currentTargetHiddenSubtreeLevel--; - } - index--; - } - /** - * 10. Let currentHiddenLevel and maxHiddenLevel be - * currentTargetHiddenSubtreeLevel. - */ - var currentHiddenLevel = currentTargetHiddenSubtreeLevel; - var maxHiddenLevel = currentTargetHiddenSubtreeLevel; - /** - * 11. Set index to currentTargetIndex − 1. - * 12. While index is greater than or equal to 0: - */ - index = currentTargetIndex - 1; - while (index >= 0) { - /** - * 12.1. If path[index]'s root-of-closed-tree is true, then increase - * currentHiddenLevel by 1. - * 12.2. If currentHiddenLevel is less than or equal to maxHiddenLevel, - * then prepend path[index]'s invocation target to composedPath. - */ - if (path[index].rootOfClosedTree) { - currentHiddenLevel++; - } - if (currentHiddenLevel <= maxHiddenLevel) { - composedPath.unshift(path[index].invocationTarget); - } - /** - * 12.3. If path[index]'s slot-in-closed-tree is true, then: - */ - if (path[index].slotInClosedTree) { - /** - * 12.3.1. Decrease currentHiddenLevel by 1. - * 12.3.2. If currentHiddenLevel is less than maxHiddenLevel, then set - * maxHiddenLevel to currentHiddenLevel. - */ - currentHiddenLevel--; - if (currentHiddenLevel < maxHiddenLevel) { - maxHiddenLevel = currentHiddenLevel; - } - } - /** - * 12.4. Decrease index by 1. - */ - index--; - } - /** - * 13. Set currentHiddenLevel and maxHiddenLevel to - * currentTargetHiddenSubtreeLevel. - */ - currentHiddenLevel = currentTargetHiddenSubtreeLevel; - maxHiddenLevel = currentTargetHiddenSubtreeLevel; - /** - * 14. Set index to currentTargetIndex + 1. - * 15. While index is less than path’s size: - */ - index = currentTargetIndex + 1; - while (index < path.length) { - /** - * 15.1. If path[index]'s slot-in-closed-tree is true, then increase - * currentHiddenLevel by 1. - * 15.2. If currentHiddenLevel is less than or equal to maxHiddenLevel, - * then append path[index]'s invocation target to composedPath. - */ - if (path[index].slotInClosedTree) { - currentHiddenLevel++; - } - if (currentHiddenLevel <= maxHiddenLevel) { - composedPath.push(path[index].invocationTarget); - } - /** - * 15.3. If path[index]'s root-of-closed-tree is true, then: - */ - if (path[index].rootOfClosedTree) { - /** - * 15.3.1. Decrease currentHiddenLevel by 1. - * 15.3.2. If currentHiddenLevel is less than maxHiddenLevel, then set - * maxHiddenLevel to currentHiddenLevel. - */ - currentHiddenLevel--; - if (currentHiddenLevel < maxHiddenLevel) { - maxHiddenLevel = currentHiddenLevel; - } - } - /** - * 15.4. Increase index by 1. - */ - index++; - } - /** - * 16. Return composedPath. - */ - return composedPath; - }; - Object.defineProperty(EventImpl.prototype, "eventPhase", { - /** @inheritdoc */ - get: function () { return this._eventPhase; }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - EventImpl.prototype.stopPropagation = function () { this._stopPropagationFlag = true; }; - Object.defineProperty(EventImpl.prototype, "cancelBubble", { - /** @inheritdoc */ - get: function () { return this._stopPropagationFlag; }, - set: function (value) { if (value) - this.stopPropagation(); }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - EventImpl.prototype.stopImmediatePropagation = function () { - this._stopPropagationFlag = true; - this._stopImmediatePropagationFlag = true; + return DOMException; +}(Error)); +exports.DOMException = DOMException; +var DOMStringSizeError = /** @class */ (function (_super) { + __extends(DOMStringSizeError, _super); + /** + * @param message - error message + */ + function DOMStringSizeError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "DOMStringSizeError", message) || this; + } + return DOMStringSizeError; +}(DOMException)); +exports.DOMStringSizeError = DOMStringSizeError; +var WrongDocumentError = /** @class */ (function (_super) { + __extends(WrongDocumentError, _super); + /** + * @param message - error message + */ + function WrongDocumentError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "WrongDocumentError", "The object is in the wrong document. " + message) || this; + } + return WrongDocumentError; +}(DOMException)); +exports.WrongDocumentError = WrongDocumentError; +var NoDataAllowedError = /** @class */ (function (_super) { + __extends(NoDataAllowedError, _super); + /** + * @param message - error message + */ + function NoDataAllowedError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "NoDataAllowedError", message) || this; + } + return NoDataAllowedError; +}(DOMException)); +exports.NoDataAllowedError = NoDataAllowedError; +var NoModificationAllowedError = /** @class */ (function (_super) { + __extends(NoModificationAllowedError, _super); + /** + * @param message - error message + */ + function NoModificationAllowedError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "NoModificationAllowedError", "The object can not be modified. " + message) || this; + } + return NoModificationAllowedError; +}(DOMException)); +exports.NoModificationAllowedError = NoModificationAllowedError; +var NotSupportedError = /** @class */ (function (_super) { + __extends(NotSupportedError, _super); + /** + * @param message - error message + */ + function NotSupportedError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "NotSupportedError", "The operation is not supported. " + message) || this; + } + return NotSupportedError; +}(DOMException)); +exports.NotSupportedError = NotSupportedError; +var InUseAttributeError = /** @class */ (function (_super) { + __extends(InUseAttributeError, _super); + /** + * @param message - error message + */ + function InUseAttributeError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "InUseAttributeError", message) || this; + } + return InUseAttributeError; +}(DOMException)); +exports.InUseAttributeError = InUseAttributeError; +var InvalidStateError = /** @class */ (function (_super) { + __extends(InvalidStateError, _super); + /** + * @param message - error message + */ + function InvalidStateError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "InvalidStateError", "The object is in an invalid state. " + message) || this; + } + return InvalidStateError; +}(DOMException)); +exports.InvalidStateError = InvalidStateError; +var InvalidModificationError = /** @class */ (function (_super) { + __extends(InvalidModificationError, _super); + /** + * @param message - error message + */ + function InvalidModificationError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "InvalidModificationError", "The object can not be modified in this way. " + message) || this; + } + return InvalidModificationError; +}(DOMException)); +exports.InvalidModificationError = InvalidModificationError; +var NamespaceError = /** @class */ (function (_super) { + __extends(NamespaceError, _super); + /** + * @param message - error message + */ + function NamespaceError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "NamespaceError", "The operation is not allowed by Namespaces in XML. [XMLNS] " + message) || this; + } + return NamespaceError; +}(DOMException)); +exports.NamespaceError = NamespaceError; +var InvalidAccessError = /** @class */ (function (_super) { + __extends(InvalidAccessError, _super); + /** + * @param message - error message + */ + function InvalidAccessError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "InvalidAccessError", "The object does not support the operation or argument. " + message) || this; + } + return InvalidAccessError; +}(DOMException)); +exports.InvalidAccessError = InvalidAccessError; +var ValidationError = /** @class */ (function (_super) { + __extends(ValidationError, _super); + /** + * @param message - error message + */ + function ValidationError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "ValidationError", message) || this; + } + return ValidationError; +}(DOMException)); +exports.ValidationError = ValidationError; +var TypeMismatchError = /** @class */ (function (_super) { + __extends(TypeMismatchError, _super); + /** + * @param message - error message + */ + function TypeMismatchError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "TypeMismatchError", message) || this; + } + return TypeMismatchError; +}(DOMException)); +exports.TypeMismatchError = TypeMismatchError; +var SecurityError = /** @class */ (function (_super) { + __extends(SecurityError, _super); + /** + * @param message - error message + */ + function SecurityError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "SecurityError", "The operation is insecure. " + message) || this; + } + return SecurityError; +}(DOMException)); +exports.SecurityError = SecurityError; +var NetworkError = /** @class */ (function (_super) { + __extends(NetworkError, _super); + /** + * @param message - error message + */ + function NetworkError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "NetworkError", "A network error occurred. " + message) || this; + } + return NetworkError; +}(DOMException)); +exports.NetworkError = NetworkError; +var AbortError = /** @class */ (function (_super) { + __extends(AbortError, _super); + /** + * @param message - error message + */ + function AbortError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "AbortError", "The operation was aborted. " + message) || this; + } + return AbortError; +}(DOMException)); +exports.AbortError = AbortError; +var URLMismatchError = /** @class */ (function (_super) { + __extends(URLMismatchError, _super); + /** + * @param message - error message + */ + function URLMismatchError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "URLMismatchError", "The given URL does not match another URL. " + message) || this; + } + return URLMismatchError; +}(DOMException)); +exports.URLMismatchError = URLMismatchError; +var QuotaExceededError = /** @class */ (function (_super) { + __extends(QuotaExceededError, _super); + /** + * @param message - error message + */ + function QuotaExceededError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "QuotaExceededError", "The quota has been exceeded. " + message) || this; + } + return QuotaExceededError; +}(DOMException)); +exports.QuotaExceededError = QuotaExceededError; +var TimeoutError = /** @class */ (function (_super) { + __extends(TimeoutError, _super); + /** + * @param message - error message + */ + function TimeoutError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "TimeoutError", "The operation timed out. " + message) || this; + } + return TimeoutError; +}(DOMException)); +exports.TimeoutError = TimeoutError; +var InvalidNodeTypeError = /** @class */ (function (_super) { + __extends(InvalidNodeTypeError, _super); + /** + * @param message - error message + */ + function InvalidNodeTypeError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "InvalidNodeTypeError", "The supplied node is incorrect or has an incorrect ancestor for this operation. " + message) || this; + } + return InvalidNodeTypeError; +}(DOMException)); +exports.InvalidNodeTypeError = InvalidNodeTypeError; +var DataCloneError = /** @class */ (function (_super) { + __extends(DataCloneError, _super); + /** + * @param message - error message + */ + function DataCloneError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "DataCloneError", "The object can not be cloned. " + message) || this; + } + return DataCloneError; +}(DOMException)); +exports.DataCloneError = DataCloneError; +var NotImplementedError = /** @class */ (function (_super) { + __extends(NotImplementedError, _super); + /** + * @param message - error message + */ + function NotImplementedError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "NotImplementedError", "The DOM method is not implemented by this module. " + message) || this; + } + return NotImplementedError; +}(DOMException)); +exports.NotImplementedError = NotImplementedError; +var HierarchyRequestError = /** @class */ (function (_super) { + __extends(HierarchyRequestError, _super); + /** + * @param message - error message + */ + function HierarchyRequestError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "HierarchyRequestError", "The operation would yield an incorrect node tree. " + message) || this; + } + return HierarchyRequestError; +}(DOMException)); +exports.HierarchyRequestError = HierarchyRequestError; +var NotFoundError = /** @class */ (function (_super) { + __extends(NotFoundError, _super); + /** + * @param message - error message + */ + function NotFoundError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "NotFoundError", "The object can not be found here. " + message) || this; + } + return NotFoundError; +}(DOMException)); +exports.NotFoundError = NotFoundError; +var IndexSizeError = /** @class */ (function (_super) { + __extends(IndexSizeError, _super); + /** + * @param message - error message + */ + function IndexSizeError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "IndexSizeError", "The index is not in the allowed range. " + message) || this; + } + return IndexSizeError; +}(DOMException)); +exports.IndexSizeError = IndexSizeError; +var SyntaxError = /** @class */ (function (_super) { + __extends(SyntaxError, _super); + /** + * @param message - error message + */ + function SyntaxError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "SyntaxError", "The string did not match the expected pattern. " + message) || this; + } + return SyntaxError; +}(DOMException)); +exports.SyntaxError = SyntaxError; +var InvalidCharacterError = /** @class */ (function (_super) { + __extends(InvalidCharacterError, _super); + /** + * @param message - error message + */ + function InvalidCharacterError(message) { + if (message === void 0) { message = ""; } + return _super.call(this, "InvalidCharacterError", "The string contains invalid characters. " + message) || this; + } + return InvalidCharacterError; +}(DOMException)); +exports.InvalidCharacterError = InvalidCharacterError; +//# sourceMappingURL=DOMException.js.map + +/***/ }), + +/***/ 4177: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var util_1 = __nccwpck_require__(6195); +var CreateAlgorithm_1 = __nccwpck_require__(7339); +/** + * Represents an object implementing DOM algorithms. + */ +var DOMImpl = /** @class */ (function () { + /** + * Initializes a new instance of `DOM`. + */ + function DOMImpl() { + this._features = { + mutationObservers: true, + customElements: true, + slots: true, + steps: true + }; + this._window = null; + this._compareCache = new util_1.CompareCache(); + this._rangeList = new util_1.FixedSizeSet(); + } + /** + * Sets DOM algorithm features. + * + * @param features - DOM features supported by algorithms. All features are + * enabled by default unless explicity disabled. + */ + DOMImpl.prototype.setFeatures = function (features) { + if (features === undefined) + features = true; + if (util_1.isObject(features)) { + for (var key in features) { + this._features[key] = features[key] || false; + } + } + else { + // enable/disable all features + for (var key in this._features) { + this._features[key] = features; + } + } }; - Object.defineProperty(EventImpl.prototype, "bubbles", { - /** @inheritdoc */ - get: function () { return this._bubbles; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(EventImpl.prototype, "cancelable", { - /** @inheritdoc */ - get: function () { return this._cancelable; }, + Object.defineProperty(DOMImpl.prototype, "features", { + /** + * Gets DOM algorithm features. + */ + get: function () { return this._features; }, enumerable: true, configurable: true }); - Object.defineProperty(EventImpl.prototype, "returnValue", { - /** @inheritdoc */ - get: function () { return !this._canceledFlag; }, - set: function (value) { - if (!value) { - algorithm_1.event_setTheCanceledFlag(this); + Object.defineProperty(DOMImpl.prototype, "window", { + /** + * Gets the DOM window. + */ + get: function () { + if (this._window === null) { + this._window = CreateAlgorithm_1.create_window(); } + return this._window; }, enumerable: true, configurable: true }); - /** @inheritdoc */ - EventImpl.prototype.preventDefault = function () { - algorithm_1.event_setTheCanceledFlag(this); - }; - Object.defineProperty(EventImpl.prototype, "defaultPrevented", { - /** @inheritdoc */ - get: function () { return this._canceledFlag; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(EventImpl.prototype, "composed", { - /** @inheritdoc */ - get: function () { return this._composedFlag; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(EventImpl.prototype, "isTrusted", { - /** @inheritdoc */ - get: function () { return this._isTrusted; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(EventImpl.prototype, "timeStamp", { - /** @inheritdoc */ - get: function () { return this._timeStamp; }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - EventImpl.prototype.initEvent = function (type, bubbles, cancelable) { - if (bubbles === void 0) { bubbles = false; } - if (cancelable === void 0) { cancelable = false; } - /** - * 1. If the context object’s dispatch flag is set, then return. - */ - if (this._dispatchFlag) - return; + Object.defineProperty(DOMImpl.prototype, "compareCache", { /** - * 2. Initialize the context object with type, bubbles, and cancelable. + * Gets the global node compare cache. */ - algorithm_1.event_initialize(this, type, bubbles, cancelable); - }; - EventImpl.NONE = 0; - EventImpl.CAPTURING_PHASE = 1; - EventImpl.AT_TARGET = 2; - EventImpl.BUBBLING_PHASE = 3; - return EventImpl; -}()); -exports.EventImpl = EventImpl; -/** - * Define constants on prototype. - */ -WebIDLAlgorithm_1.idl_defineConst(EventImpl.prototype, "NONE", 0); -WebIDLAlgorithm_1.idl_defineConst(EventImpl.prototype, "CAPTURING_PHASE", 1); -WebIDLAlgorithm_1.idl_defineConst(EventImpl.prototype, "AT_TARGET", 2); -WebIDLAlgorithm_1.idl_defineConst(EventImpl.prototype, "BUBBLING_PHASE", 3); -//# sourceMappingURL=EventImpl.js.map - -/***/ }), -/* 428 */, -/* 429 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var algorithm_1 = __webpack_require__(163); -/** - * Represents a mixin that allows nodes to become the contents of - * a element. This mixin is implemented by {@link Element} and - * {@link Text}. - */ -var SlotableImpl = /** @class */ (function () { - function SlotableImpl() { - } - Object.defineProperty(SlotableImpl.prototype, "_name", { - get: function () { return this.__name || ''; }, - set: function (val) { this.__name = val; }, + get: function () { return this._compareCache; }, enumerable: true, configurable: true }); - Object.defineProperty(SlotableImpl.prototype, "_assignedSlot", { - get: function () { return this.__assignedSlot || null; }, - set: function (val) { this.__assignedSlot = val; }, + Object.defineProperty(DOMImpl.prototype, "rangeList", { + /** + * Gets the global range list. + */ + get: function () { return this._rangeList; }, enumerable: true, configurable: true }); - Object.defineProperty(SlotableImpl.prototype, "assignedSlot", { - /** @inheritdoc */ + Object.defineProperty(DOMImpl, "instance", { + /** + * Returns the instance of `DOM`. + */ get: function () { - return algorithm_1.shadowTree_findASlot(this, true); + if (!DOMImpl._instance) { + DOMImpl._instance = new DOMImpl(); + } + return DOMImpl._instance; }, enumerable: true, configurable: true }); - return SlotableImpl; + return DOMImpl; }()); -exports.SlotableImpl = SlotableImpl; -//# sourceMappingURL=SlotableImpl.js.map +/** + * Represents an object implementing DOM algorithms. + */ +exports.dom = DOMImpl.instance; +//# sourceMappingURL=DOMImpl.js.map /***/ }), -/* 430 */, -/* 431 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 2197: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const os = __importStar(__webpack_require__(87)); -const utils_1 = __webpack_require__(82); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var infra_1 = __nccwpck_require__(4251); +var algorithm_1 = __nccwpck_require__(61); +var WebIDLAlgorithm_1 = __nccwpck_require__(5457); /** - * Commands - * - * Command Format: - * ::name key=value,key=value::message - * - * Examples: - * ::warning::This is the message - * ::set-env name=MY_VAR::some value + * Represents an object providing methods which are not dependent on + * any particular document. */ -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; +var DOMImplementationImpl = /** @class */ (function () { + /** + * Initializes a new instance of `DOMImplementation`. + * + * @param document - the associated document + */ + function DOMImplementationImpl(document) { + this._associatedDocument = document || DOMImpl_1.dom.window.document; } - 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)}`; - } - } - } + /** @inheritdoc */ + DOMImplementationImpl.prototype.createDocumentType = function (qualifiedName, publicId, systemId) { + /** + * 1. Validate qualifiedName. + * 2. Return a new doctype, with qualifiedName as its name, publicId as its + * public ID, and systemId as its system ID, and with its node document set + * to the associated document of the context object. + */ + algorithm_1.namespace_validate(qualifiedName); + return algorithm_1.create_documentType(this._associatedDocument, qualifiedName, publicId, systemId); + }; + /** @inheritdoc */ + DOMImplementationImpl.prototype.createDocument = function (namespace, qualifiedName, doctype) { + if (doctype === void 0) { doctype = null; } + /** + * 1. Let document be a new XMLDocument. + */ + var document = algorithm_1.create_xmlDocument(); + /** + * 2. Let element be null. + * 3. If qualifiedName is not the empty string, then set element to + * the result of running the internal createElementNS steps, given document, + * namespace, qualifiedName, and an empty dictionary. + */ + var element = null; + if (qualifiedName) { + element = algorithm_1.document_internalCreateElementNS(document, namespace, qualifiedName); } - 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 + /** + * 4. If doctype is non-null, append doctype to document. + * 5. If element is non-null, append element to document. + */ + if (doctype) + document.appendChild(doctype); + if (element) + document.appendChild(element); + /** + * 6. document’s origin is context object’s associated document’s origin. + */ + document._origin = this._associatedDocument._origin; + /** + * 7. document’s content type is determined by namespace: + * - HTML namespace + * application/xhtml+xml + * - SVG namespace + * image/svg+xml + * - Any other namespace + * application/xml + */ + if (namespace === infra_1.namespace.HTML) + document._contentType = "application/xhtml+xml"; + else if (namespace === infra_1.namespace.SVG) + document._contentType = "image/svg+xml"; + else + document._contentType = "application/xml"; + /** + * 8. Return document. + */ + return document; + }; + /** @inheritdoc */ + DOMImplementationImpl.prototype.createHTMLDocument = function (title) { + /** + * 1. Let doc be a new document that is an HTML document. + * 2. Set doc’s content type to "text/html". + */ + var doc = algorithm_1.create_document(); + doc._type = "html"; + doc._contentType = "text/html"; + /** + * 3. Append a new doctype, with "html" as its name and with its node + * document set to doc, to doc. + */ + doc.appendChild(algorithm_1.create_documentType(doc, "html", "", "")); + /** + * 4. Append the result of creating an element given doc, html, and the + * HTML namespace, to doc. + */ + var htmlElement = algorithm_1.element_createAnElement(doc, "html", infra_1.namespace.HTML); + doc.appendChild(htmlElement); + /** + * 5. Append the result of creating an element given doc, head, and the + * HTML namespace, to the html element created earlier. + */ + var headElement = algorithm_1.element_createAnElement(doc, "head", infra_1.namespace.HTML); + htmlElement.appendChild(headElement); + /** + * 6. If title is given: + * 6.1. Append the result of creating an element given doc, title, and + * the HTML namespace, to the head element created earlier. + * 6.2. Append a new Text node, with its data set to title (which could + * be the empty string) and its node document set to doc, to the title + * element created earlier. + */ + if (title !== undefined) { + var titleElement = algorithm_1.element_createAnElement(doc, "title", infra_1.namespace.HTML); + headElement.appendChild(titleElement); + var textElement = algorithm_1.create_text(doc, title); + titleElement.appendChild(textElement); + } + /** + * 7. Append the result of creating an element given doc, body, and the + * HTML namespace, to the html element created earlier. + */ + var bodyElement = algorithm_1.element_createAnElement(doc, "body", infra_1.namespace.HTML); + htmlElement.appendChild(bodyElement); + /** + * 8. doc’s origin is context object’s associated document’s origin. + */ + doc._origin = this._associatedDocument._origin; + /** + * 9. Return doc. + */ + return doc; + }; + /** @inheritdoc */ + DOMImplementationImpl.prototype.hasFeature = function () { return true; }; + /** + * Creates a new `DOMImplementation`. + * + * @param document - owner document + */ + DOMImplementationImpl._create = function (document) { + return new DOMImplementationImpl(document); + }; + return DOMImplementationImpl; +}()); +exports.DOMImplementationImpl = DOMImplementationImpl; +WebIDLAlgorithm_1.idl_defineConst(DOMImplementationImpl.prototype, "_ID", "@oozcitak/dom"); +//# sourceMappingURL=DOMImplementationImpl.js.map /***/ }), -/* 432 */, -/* 433 */, -/* 434 */, -/* 435 */, -/* 436 */, -/* 437 */, -/* 438 */, -/* 439 */, -/* 440 */, -/* 441 */, -/* 442 */ -/***/ (function(__unusedmodule, exports) { + +/***/ 5096: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var DOMException_1 = __nccwpck_require__(3166); +var infra_1 = __nccwpck_require__(4251); +var algorithm_1 = __nccwpck_require__(61); /** - * Determines if the given string is valid for a `"Name"` construct. - * - * @param name - name string to test + * Represents a token set. */ -function xml_isName(name) { - for (var i = 0; i < name.length; i++) { - var n = name.charCodeAt(i); - // NameStartChar - if ((n >= 97 && n <= 122) || // [a-z] - (n >= 65 && n <= 90) || // [A-Z] - n === 58 || n === 95 || // ':' or '_' - (n >= 0xC0 && n <= 0xD6) || - (n >= 0xD8 && n <= 0xF6) || - (n >= 0xF8 && n <= 0x2FF) || - (n >= 0x370 && n <= 0x37D) || - (n >= 0x37F && n <= 0x1FFF) || - (n >= 0x200C && n <= 0x200D) || - (n >= 0x2070 && n <= 0x218F) || - (n >= 0x2C00 && n <= 0x2FEF) || - (n >= 0x3001 && n <= 0xD7FF) || - (n >= 0xF900 && n <= 0xFDCF) || - (n >= 0xFDF0 && n <= 0xFFFD)) { - continue; +var DOMTokenListImpl = /** @class */ (function () { + /** + * Initializes a new instance of `DOMTokenList`. + * + * @param element - associated element + * @param attribute - associated attribute + */ + function DOMTokenListImpl(element, attribute) { + /** + * 1. Let element be associated element. + * 2. Let localName be associated attribute’s local name. + * 3. Let value be the result of getting an attribute value given element + * and localName. + * 4. Run the attribute change steps for element, localName, value, value, + * and null. + */ + this._element = element; + this._attribute = attribute; + this._tokenSet = new Set(); + var localName = attribute._localName; + var value = algorithm_1.element_getAnAttributeValue(element, localName); + // define a closure to be called when the associated attribute's value changes + var thisObj = this; + function updateTokenSet(element, localName, oldValue, value, namespace) { + /** + * 1. If localName is associated attribute’s local name, namespace is null, + * and value is null, then empty token set. + * 2. Otherwise, if localName is associated attribute’s local name, + * namespace is null, then set token set to value, parsed. + */ + if (localName === thisObj._attribute._localName && namespace === null) { + if (!value) + thisObj._tokenSet.clear(); + else + thisObj._tokenSet = algorithm_1.orderedSet_parse(value); + } } - else if (i !== 0 && - (n === 45 || n === 46 || // '-' or '.' - (n >= 48 && n <= 57) || // [0-9] - (n === 0xB7) || - (n >= 0x0300 && n <= 0x036F) || - (n >= 0x203F && n <= 0x2040))) { - continue; + // add the closure to the associated element's attribute change steps + this._element._attributeChangeSteps.push(updateTokenSet); + if (DOMImpl_1.dom.features.steps) { + algorithm_1.dom_runAttributeChangeSteps(element, localName, value, value, null); } - if (n >= 0xD800 && n <= 0xDBFF && i < name.length - 1) { - var n2 = name.charCodeAt(i + 1); - if (n2 >= 0xDC00 && n2 <= 0xDFFF) { - n = (n - 0xD800) * 0x400 + n2 - 0xDC00 + 0x10000; + } + Object.defineProperty(DOMTokenListImpl.prototype, "length", { + /** @inheritdoc */ + get: function () { + /** + * The length attribute' getter must return context object’s token set’s + * size. + */ + return this._tokenSet.size; + }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + DOMTokenListImpl.prototype.item = function (index) { + var e_1, _a; + /** + * 1. If index is equal to or greater than context object’s token set’s + * size, then return null. + * 2. Return context object’s token set[index]. + */ + var i = 0; + try { + for (var _b = __values(this._tokenSet), _c = _b.next(); !_c.done; _c = _b.next()) { + var token = _c.value; + if (i === index) + return token; i++; - if (n >= 0x10000 && n <= 0xEFFFF) { - continue; - } } } - return false; - } - return true; -} -exports.xml_isName = xml_isName; -/** - * Determines if the given string is valid for a `"QName"` construct. - * - * @param name - name string to test - */ -function xml_isQName(name) { - var colonFound = false; - for (var i = 0; i < name.length; i++) { - var n = name.charCodeAt(i); - // NameStartChar - if ((n >= 97 && n <= 122) || // [a-z] - (n >= 65 && n <= 90) || // [A-Z] - n === 95 || // '_' - (n >= 0xC0 && n <= 0xD6) || - (n >= 0xD8 && n <= 0xF6) || - (n >= 0xF8 && n <= 0x2FF) || - (n >= 0x370 && n <= 0x37D) || - (n >= 0x37F && n <= 0x1FFF) || - (n >= 0x200C && n <= 0x200D) || - (n >= 0x2070 && n <= 0x218F) || - (n >= 0x2C00 && n <= 0x2FEF) || - (n >= 0x3001 && n <= 0xD7FF) || - (n >= 0xF900 && n <= 0xFDCF) || - (n >= 0xFDF0 && n <= 0xFFFD)) { - continue; - } - else if (i !== 0 && - (n === 45 || n === 46 || // '-' or '.' - (n >= 48 && n <= 57) || // [0-9] - (n === 0xB7) || - (n >= 0x0300 && n <= 0x036F) || - (n >= 0x203F && n <= 0x2040))) { - continue; + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } } - else if (i !== 0 && n === 58) { // : - if (colonFound) - return false; // multiple colons in qname - if (i === name.length - 1) - return false; // colon at the end of qname - colonFound = true; - continue; + return null; + }; + /** @inheritdoc */ + DOMTokenListImpl.prototype.contains = function (token) { + /** + * The contains(token) method, when invoked, must return true if context + * object’s token set[token] exists, and false otherwise. + */ + return this._tokenSet.has(token); + }; + /** @inheritdoc */ + DOMTokenListImpl.prototype.add = function () { + var e_2, _a; + var tokens = []; + for (var _i = 0; _i < arguments.length; _i++) { + tokens[_i] = arguments[_i]; } - if (n >= 0xD800 && n <= 0xDBFF && i < name.length - 1) { - var n2 = name.charCodeAt(i + 1); - if (n2 >= 0xDC00 && n2 <= 0xDFFF) { - n = (n - 0xD800) * 0x400 + n2 - 0xDC00 + 0x10000; - i++; - if (n >= 0x10000 && n <= 0xEFFFF) { - continue; + try { + /** + * 1. For each token in tokens: + * 1.1. If token is the empty string, then throw a "SyntaxError" + * DOMException. + * 1.2. If token contains any ASCII whitespace, then throw an + * "InvalidCharacterError" DOMException. + * 2. For each token in tokens, append token to context object’s token set. + * 3. Run the update steps. + */ + for (var tokens_1 = __values(tokens), tokens_1_1 = tokens_1.next(); !tokens_1_1.done; tokens_1_1 = tokens_1.next()) { + var token = tokens_1_1.value; + if (token === '') { + throw new DOMException_1.SyntaxError("Cannot add an empty token."); + } + else if (infra_1.codePoint.ASCIIWhiteSpace.test(token)) { + throw new DOMException_1.InvalidCharacterError("Token cannot contain whitespace."); + } + else { + this._tokenSet.add(token); } } } - return false; - } - return true; -} -exports.xml_isQName = xml_isQName; -/** - * Determines if the given string contains legal characters. - * - * @param chars - sequence of characters to test - */ -function xml_isLegalChar(chars) { - for (var i = 0; i < chars.length; i++) { - var n = chars.charCodeAt(i); - // #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] - if (n === 0x9 || n === 0xA || n === 0xD || - (n >= 0x20 && n <= 0xD7FF) || - (n >= 0xE000 && n <= 0xFFFD)) { - continue; + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (tokens_1_1 && !tokens_1_1.done && (_a = tokens_1.return)) _a.call(tokens_1); + } + finally { if (e_2) throw e_2.error; } } - if (n >= 0xD800 && n <= 0xDBFF && i < chars.length - 1) { - var n2 = chars.charCodeAt(i + 1); - if (n2 >= 0xDC00 && n2 <= 0xDFFF) { - n = (n - 0xD800) * 0x400 + n2 - 0xDC00 + 0x10000; - i++; - if (n >= 0x10000 && n <= 0x10FFFF) { - continue; + algorithm_1.tokenList_updateSteps(this); + }; + /** @inheritdoc */ + DOMTokenListImpl.prototype.remove = function () { + var e_3, _a; + var tokens = []; + for (var _i = 0; _i < arguments.length; _i++) { + tokens[_i] = arguments[_i]; + } + try { + /** + * 1. For each token in tokens: + * 1.1. If token is the empty string, then throw a "SyntaxError" + * DOMException. + * 1.2. If token contains any ASCII whitespace, then throw an + * "InvalidCharacterError" DOMException. + * 2. For each token in tokens, remove token from context object’s token set. + * 3. Run the update steps. + */ + for (var tokens_2 = __values(tokens), tokens_2_1 = tokens_2.next(); !tokens_2_1.done; tokens_2_1 = tokens_2.next()) { + var token = tokens_2_1.value; + if (token === '') { + throw new DOMException_1.SyntaxError("Cannot remove an empty token."); + } + else if (infra_1.codePoint.ASCIIWhiteSpace.test(token)) { + throw new DOMException_1.InvalidCharacterError("Token cannot contain whitespace."); + } + else { + this._tokenSet.delete(token); } } } - return false; - } - return true; -} -exports.xml_isLegalChar = xml_isLegalChar; -/** - * Determines if the given string contains legal characters for a public - * identifier. - * - * @param chars - sequence of characters to test - */ -function xml_isPubidChar(chars) { - for (var i = 0; i < chars.length; i++) { - // PubId chars are all in the ASCII range, no need to check surrogates - var n = chars.charCodeAt(i); - // #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%] - if ((n >= 97 && n <= 122) || // [a-z] - (n >= 65 && n <= 90) || // [A-Z] - (n >= 39 && n <= 59) || // ['()*+,-./] | [0-9] | [:;] - n === 0x20 || n === 0xD || n === 0xA || // #x20 | #xD | #xA - (n >= 35 && n <= 37) || // [#$%] - n === 33 || // ! - n === 61 || n === 63 || n === 64 || n === 95) { // [=?@_] - continue; + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (tokens_2_1 && !tokens_2_1.done && (_a = tokens_2.return)) _a.call(tokens_2); + } + finally { if (e_3) throw e_3.error; } } - else { - return false; + algorithm_1.tokenList_updateSteps(this); + }; + /** @inheritdoc */ + DOMTokenListImpl.prototype.toggle = function (token, force) { + if (force === void 0) { force = undefined; } + /** + * 1. If token is the empty string, then throw a "SyntaxError" DOMException. + * 2. If token contains any ASCII whitespace, then throw an + * "InvalidCharacterError" DOMException. + */ + if (token === '') { + throw new DOMException_1.SyntaxError("Cannot toggle an empty token."); } - } - return true; -} -exports.xml_isPubidChar = xml_isPubidChar; -//# sourceMappingURL=XMLAlgorithm.js.map - -/***/ }), -/* 443 */, -/* 444 */, -/* 445 */, -/* 446 */, -/* 447 */, -/* 448 */, -/* 449 */, -/* 450 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - -var Type = __webpack_require__(945); - -module.exports = new Type('tag:yaml.org,2002:str', { - kind: 'scalar', - construct: function (data) { return data !== null ? data : ''; } -}); - + else if (infra_1.codePoint.ASCIIWhiteSpace.test(token)) { + throw new DOMException_1.InvalidCharacterError("Token cannot contain whitespace."); + } + /** + * 3. If context object’s token set[token] exists, then: + */ + if (this._tokenSet.has(token)) { + /** + * 3.1. If force is either not given or is false, then remove token from + * context object’s token set, run the update steps and return false. + * 3.2. Return true. + */ + if (force === undefined || force === false) { + this._tokenSet.delete(token); + algorithm_1.tokenList_updateSteps(this); + return false; + } + return true; + } + /** + * 4. Otherwise, if force not given or is true, append token to context + * object’s token set, run the update steps, and return true. + */ + if (force === undefined || force === true) { + this._tokenSet.add(token); + algorithm_1.tokenList_updateSteps(this); + return true; + } + /** + * 5. Return false. + */ + return false; + }; + /** @inheritdoc */ + DOMTokenListImpl.prototype.replace = function (token, newToken) { + /** + * 1. If either token or newToken is the empty string, then throw a + * "SyntaxError" DOMException. + * 2. If either token or newToken contains any ASCII whitespace, then throw + * an "InvalidCharacterError" DOMException. + */ + if (token === '' || newToken === '') { + throw new DOMException_1.SyntaxError("Cannot replace an empty token."); + } + else if (infra_1.codePoint.ASCIIWhiteSpace.test(token) || infra_1.codePoint.ASCIIWhiteSpace.test(newToken)) { + throw new DOMException_1.InvalidCharacterError("Token cannot contain whitespace."); + } + /** + * 3. If context object’s token set does not contain token, then return + * false. + */ + if (!this._tokenSet.has(token)) + return false; + /** + * 4. Replace token in context object’s token set with newToken. + * 5. Run the update steps. + * 6. Return true. + */ + infra_1.set.replace(this._tokenSet, token, newToken); + algorithm_1.tokenList_updateSteps(this); + return true; + }; + /** @inheritdoc */ + DOMTokenListImpl.prototype.supports = function (token) { + /** + * 1. Let result be the return value of validation steps called with token. + * 2. Return result. + */ + return algorithm_1.tokenList_validationSteps(this, token); + }; + Object.defineProperty(DOMTokenListImpl.prototype, "value", { + /** @inheritdoc */ + get: function () { + /** + * The value attribute must return the result of running context object’s + * serialize steps. + */ + return algorithm_1.tokenList_serializeSteps(this); + }, + set: function (value) { + /** + * Setting the value attribute must set an attribute value for the + * associated element using associated attribute’s local name and the given + * value. + */ + algorithm_1.element_setAnAttributeValue(this._element, this._attribute._localName, value); + }, + enumerable: true, + configurable: true + }); + /** + * Returns an iterator for the token set. + */ + DOMTokenListImpl.prototype[Symbol.iterator] = function () { + var it = this._tokenSet[Symbol.iterator](); + return { + next: function () { + return it.next(); + } + }; + }; + /** + * Creates a new `DOMTokenList`. + * + * @param element - associated element + * @param attribute - associated attribute + */ + DOMTokenListImpl._create = function (element, attribute) { + return new DOMTokenListImpl(element, attribute); + }; + return DOMTokenListImpl; +}()); +exports.DOMTokenListImpl = DOMTokenListImpl; +//# sourceMappingURL=DOMTokenListImpl.js.map /***/ }), -/* 451 */, -/* 452 */, -/* 453 */, -/* 454 */, -/* 455 */, -/* 456 */, -/* 457 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - -/*eslint-disable max-len,no-use-before-define*/ - -var common = __webpack_require__(740); -var YAMLException = __webpack_require__(556); -var Mark = __webpack_require__(93); -var DEFAULT_SAFE_SCHEMA = __webpack_require__(723); -var DEFAULT_FULL_SCHEMA = __webpack_require__(910); - - -var _hasOwnProperty = Object.prototype.hasOwnProperty; - - -var CONTEXT_FLOW_IN = 1; -var CONTEXT_FLOW_OUT = 2; -var CONTEXT_BLOCK_IN = 3; -var CONTEXT_BLOCK_OUT = 4; - - -var CHOMPING_CLIP = 1; -var CHOMPING_STRIP = 2; -var CHOMPING_KEEP = 3; - - -var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; -var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; -var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; -var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; -var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; - - -function _class(obj) { return Object.prototype.toString.call(obj); } - -function is_EOL(c) { - return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); -} - -function is_WHITE_SPACE(c) { - return (c === 0x09/* Tab */) || (c === 0x20/* Space */); -} - -function is_WS_OR_EOL(c) { - return (c === 0x09/* Tab */) || - (c === 0x20/* Space */) || - (c === 0x0A/* LF */) || - (c === 0x0D/* CR */); -} - -function is_FLOW_INDICATOR(c) { - return c === 0x2C/* , */ || - c === 0x5B/* [ */ || - c === 0x5D/* ] */ || - c === 0x7B/* { */ || - c === 0x7D/* } */; -} - -function fromHexCode(c) { - var lc; - - if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { - return c - 0x30; - } - - /*eslint-disable no-bitwise*/ - lc = c | 0x20; - - if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) { - return lc - 0x61 + 10; - } - - return -1; -} - -function escapedHexLen(c) { - if (c === 0x78/* x */) { return 2; } - if (c === 0x75/* u */) { return 4; } - if (c === 0x55/* U */) { return 8; } - return 0; -} - -function fromDecimalCode(c) { - if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { - return c - 0x30; - } - - return -1; -} - -function simpleEscapeSequence(c) { - /* eslint-disable indent */ - return (c === 0x30/* 0 */) ? '\x00' : - (c === 0x61/* a */) ? '\x07' : - (c === 0x62/* b */) ? '\x08' : - (c === 0x74/* t */) ? '\x09' : - (c === 0x09/* Tab */) ? '\x09' : - (c === 0x6E/* n */) ? '\x0A' : - (c === 0x76/* v */) ? '\x0B' : - (c === 0x66/* f */) ? '\x0C' : - (c === 0x72/* r */) ? '\x0D' : - (c === 0x65/* e */) ? '\x1B' : - (c === 0x20/* Space */) ? ' ' : - (c === 0x22/* " */) ? '\x22' : - (c === 0x2F/* / */) ? '/' : - (c === 0x5C/* \ */) ? '\x5C' : - (c === 0x4E/* N */) ? '\x85' : - (c === 0x5F/* _ */) ? '\xA0' : - (c === 0x4C/* L */) ? '\u2028' : - (c === 0x50/* P */) ? '\u2029' : ''; -} - -function charFromCodepoint(c) { - if (c <= 0xFFFF) { - return String.fromCharCode(c); - } - // Encode UTF-16 surrogate pair - // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF - return String.fromCharCode( - ((c - 0x010000) >> 10) + 0xD800, - ((c - 0x010000) & 0x03FF) + 0xDC00 - ); -} - -var simpleEscapeCheck = new Array(256); // integer, for fast access -var simpleEscapeMap = new Array(256); -for (var i = 0; i < 256; i++) { - simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; - simpleEscapeMap[i] = simpleEscapeSequence(i); -} - - -function State(input, options) { - this.input = input; - - this.filename = options['filename'] || null; - this.schema = options['schema'] || DEFAULT_FULL_SCHEMA; - this.onWarning = options['onWarning'] || null; - this.legacy = options['legacy'] || false; - this.json = options['json'] || false; - this.listener = options['listener'] || null; - - this.implicitTypes = this.schema.compiledImplicit; - this.typeMap = this.schema.compiledTypeMap; - - this.length = input.length; - this.position = 0; - this.line = 0; - this.lineStart = 0; - this.lineIndent = 0; - - this.documents = []; - - /* - this.version; - this.checkLineBreaks; - this.tagMap; - this.anchorMap; - this.tag; - this.anchor; - this.kind; - this.result;*/ - -} - - -function generateError(state, message) { - return new YAMLException( - message, - new Mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart))); -} - -function throwError(state, message) { - throw generateError(state, message); -} - -function throwWarning(state, message) { - if (state.onWarning) { - state.onWarning.call(null, generateError(state, message)); - } -} - - -var directiveHandlers = { - - YAML: function handleYamlDirective(state, name, args) { - - var match, major, minor; - - if (state.version !== null) { - throwError(state, 'duplication of %YAML directive'); - } - - if (args.length !== 1) { - throwError(state, 'YAML directive accepts exactly one argument'); - } - - match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); - - if (match === null) { - throwError(state, 'ill-formed argument of the YAML directive'); - } - - major = parseInt(match[1], 10); - minor = parseInt(match[2], 10); - - if (major !== 1) { - throwError(state, 'unacceptable YAML version of the document'); - } - - state.version = args[0]; - state.checkLineBreaks = (minor < 2); - - if (minor !== 1 && minor !== 2) { - throwWarning(state, 'unsupported YAML version of the document'); - } - }, - TAG: function handleTagDirective(state, name, args) { +/***/ 2585: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - var handle, prefix; +"use strict"; - if (args.length !== 2) { - throwError(state, 'TAG directive accepts exactly two arguments'); +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7305); +var NodeImpl_1 = __nccwpck_require__(1745); +var WebIDLAlgorithm_1 = __nccwpck_require__(5457); +/** + * Represents a document fragment in the XML tree. + */ +var DocumentFragmentImpl = /** @class */ (function (_super) { + __extends(DocumentFragmentImpl, _super); + /** + * Initializes a new instance of `DocumentFragment`. + * + * @param host - shadow root's host element + */ + function DocumentFragmentImpl(host) { + if (host === void 0) { host = null; } + var _this = _super.call(this) || this; + _this._children = new Set(); + _this._host = host; + return _this; } + // MIXIN: NonElementParentNode + /* istanbul ignore next */ + DocumentFragmentImpl.prototype.getElementById = function (elementId) { throw new Error("Mixin: NonElementParentNode not implemented."); }; + Object.defineProperty(DocumentFragmentImpl.prototype, "children", { + // MIXIN: ParentNode + /* istanbul ignore next */ + get: function () { throw new Error("Mixin: ParentNode not implemented."); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentFragmentImpl.prototype, "firstElementChild", { + /* istanbul ignore next */ + get: function () { throw new Error("Mixin: ParentNode not implemented."); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentFragmentImpl.prototype, "lastElementChild", { + /* istanbul ignore next */ + get: function () { throw new Error("Mixin: ParentNode not implemented."); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentFragmentImpl.prototype, "childElementCount", { + /* istanbul ignore next */ + get: function () { throw new Error("Mixin: ParentNode not implemented."); }, + enumerable: true, + configurable: true + }); + /* istanbul ignore next */ + DocumentFragmentImpl.prototype.prepend = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; + } + throw new Error("Mixin: ParentNode not implemented."); + }; + /* istanbul ignore next */ + DocumentFragmentImpl.prototype.append = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; + } + throw new Error("Mixin: ParentNode not implemented."); + }; + /* istanbul ignore next */ + DocumentFragmentImpl.prototype.querySelector = function (selectors) { throw new Error("Mixin: ParentNode not implemented."); }; + /* istanbul ignore next */ + DocumentFragmentImpl.prototype.querySelectorAll = function (selectors) { throw new Error("Mixin: ParentNode not implemented."); }; + /** + * Creates a new `DocumentFragment`. + * + * @param document - owner document + * @param host - shadow root's host element + */ + DocumentFragmentImpl._create = function (document, host) { + if (host === void 0) { host = null; } + var node = new DocumentFragmentImpl(host); + node._nodeDocument = document; + return node; + }; + return DocumentFragmentImpl; +}(NodeImpl_1.NodeImpl)); +exports.DocumentFragmentImpl = DocumentFragmentImpl; +/** + * Initialize prototype properties + */ +WebIDLAlgorithm_1.idl_defineConst(DocumentFragmentImpl.prototype, "_nodeType", interfaces_1.NodeType.DocumentFragment); +//# sourceMappingURL=DocumentFragmentImpl.js.map - handle = args[0]; - prefix = args[1]; - - if (!PATTERN_TAG_HANDLE.test(handle)) { - throwError(state, 'ill-formed tag handle (first argument) of the TAG directive'); - } +/***/ }), - if (_hasOwnProperty.call(state.tagMap, handle)) { - throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); - } +/***/ 4333: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - if (!PATTERN_TAG_URI.test(prefix)) { - throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive'); - } +"use strict"; - state.tagMap[handle] = prefix; - } +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; - - -function captureSegment(state, start, end, checkJson) { - var _position, _length, _character, _result; - - if (start < end) { - _result = state.input.slice(start, end); - - if (checkJson) { - for (_position = 0, _length = _result.length; _position < _length; _position += 1) { - _character = _result.charCodeAt(_position); - if (!(_character === 0x09 || - (0x20 <= _character && _character <= 0x10FFFF))) { - throwError(state, 'expected valid JSON character'); +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); } - } - } else if (PATTERN_NON_PRINTABLE.test(_result)) { - throwError(state, 'the stream contains non-printable characters'); + finally { if (e) throw e.error; } } + return ar; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var interfaces_1 = __nccwpck_require__(7305); +var DOMException_1 = __nccwpck_require__(3166); +var NodeImpl_1 = __nccwpck_require__(1745); +var util_1 = __nccwpck_require__(5282); +var util_2 = __nccwpck_require__(6195); +var infra_1 = __nccwpck_require__(4251); +var URLAlgorithm_1 = __nccwpck_require__(3568); +var algorithm_1 = __nccwpck_require__(61); +var WebIDLAlgorithm_1 = __nccwpck_require__(5457); +/** + * Represents a document node. + */ +var DocumentImpl = /** @class */ (function (_super) { + __extends(DocumentImpl, _super); + /** + * Initializes a new instance of `Document`. + */ + function DocumentImpl() { + var _this = _super.call(this) || this; + _this._children = new Set(); + _this._encoding = { + name: "UTF-8", + labels: ["unicode-1-1-utf-8", "utf-8", "utf8"] + }; + _this._contentType = 'application/xml'; + _this._URL = { + scheme: "about", + username: "", + password: "", + host: null, + port: null, + path: ["blank"], + query: null, + fragment: null, + _cannotBeABaseURLFlag: true, + _blobURLEntry: null + }; + _this._origin = null; + _this._type = "xml"; + _this._mode = "no-quirks"; + _this._documentElement = null; + _this._hasNamespaces = false; + _this._nodeDocumentOverwrite = null; + return _this; + } + Object.defineProperty(DocumentImpl.prototype, "_nodeDocument", { + get: function () { return this._nodeDocumentOverwrite || this; }, + set: function (val) { this._nodeDocumentOverwrite = val; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentImpl.prototype, "implementation", { + /** @inheritdoc */ + get: function () { + /** + * The implementation attribute’s getter must return the DOMImplementation + * object that is associated with the document. + */ + return this._implementation || (this._implementation = algorithm_1.create_domImplementation(this)); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentImpl.prototype, "URL", { + /** @inheritdoc */ + get: function () { + /** + * The URL attribute’s getter and documentURI attribute’s getter must return + * the URL, serialized. + * See: https://url.spec.whatwg.org/#concept-url-serializer + */ + return URLAlgorithm_1.urlSerializer(this._URL); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentImpl.prototype, "documentURI", { + /** @inheritdoc */ + get: function () { return this.URL; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentImpl.prototype, "origin", { + /** @inheritdoc */ + get: function () { + return "null"; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentImpl.prototype, "compatMode", { + /** @inheritdoc */ + get: function () { + /** + * The compatMode attribute’s getter must return "BackCompat" if context + * object’s mode is "quirks", and "CSS1Compat" otherwise. + */ + return this._mode === "quirks" ? "BackCompat" : "CSS1Compat"; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentImpl.prototype, "characterSet", { + /** @inheritdoc */ + get: function () { + /** + * The characterSet attribute’s getter, charset attribute’s getter, and + * inputEncoding attribute’s getter, must return context object’s + * encoding’s name. + */ + return this._encoding.name; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentImpl.prototype, "charset", { + /** @inheritdoc */ + get: function () { return this._encoding.name; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentImpl.prototype, "inputEncoding", { + /** @inheritdoc */ + get: function () { return this._encoding.name; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentImpl.prototype, "contentType", { + /** @inheritdoc */ + get: function () { + /** + * The contentType attribute’s getter must return the content type. + */ + return this._contentType; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentImpl.prototype, "doctype", { + /** @inheritdoc */ + get: function () { + var e_1, _a; + try { + /** + * The doctype attribute’s getter must return the child of the document + * that is a doctype, and null otherwise. + */ + for (var _b = __values(this._children), _c = _b.next(); !_c.done; _c = _b.next()) { + var child = _c.value; + if (util_1.Guard.isDocumentTypeNode(child)) + return child; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + return null; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentImpl.prototype, "documentElement", { + /** @inheritdoc */ + get: function () { + /** + * The documentElement attribute’s getter must return the document element. + */ + return this._documentElement; + }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + DocumentImpl.prototype.getElementsByTagName = function (qualifiedName) { + /** + * The getElementsByTagName(qualifiedName) method, when invoked, must return + * the list of elements with qualified name qualifiedName for the context object. + */ + return algorithm_1.node_listOfElementsWithQualifiedName(qualifiedName, this); + }; + /** @inheritdoc */ + DocumentImpl.prototype.getElementsByTagNameNS = function (namespace, localName) { + /** + * The getElementsByTagNameNS(namespace, localName) method, when invoked, + * must return the list of elements with namespace namespace and local name + * localName for the context object. + */ + return algorithm_1.node_listOfElementsWithNamespace(namespace, localName, this); + }; + /** @inheritdoc */ + DocumentImpl.prototype.getElementsByClassName = function (classNames) { + /** + * The getElementsByClassName(classNames) method, when invoked, must return + * the list of elements with class names classNames for the context object. + */ + return algorithm_1.node_listOfElementsWithClassNames(classNames, this); + }; + /** @inheritdoc */ + DocumentImpl.prototype.createElement = function (localName, options) { + /** + * 1. If localName does not match the Name production, then throw an + * "InvalidCharacterError" DOMException. + * 2. If the context object is an HTML document, then set localName to + * localName in ASCII lowercase. + * 3. Let is be null. + * 4. If options is a dictionary and options’s is is present, then set is + * to it. + * 5. Let namespace be the HTML namespace, if the context object is an + * HTML document or context object’s content type is + * "application/xhtml+xml", and null otherwise. + * 6. Return the result of creating an element given the context object, + * localName, namespace, null, is, and with the synchronous custom elements + * flag set. + */ + if (!algorithm_1.xml_isName(localName)) + throw new DOMException_1.InvalidCharacterError(); + if (this._type === "html") + localName = localName.toLowerCase(); + var is = null; + if (options !== undefined) { + if (util_2.isString(options)) { + is = options; + } + else { + is = options.is; + } + } + var namespace = (this._type === "html" || this._contentType === "application/xhtml+xml") ? + infra_1.namespace.HTML : null; + return algorithm_1.element_createAnElement(this, localName, namespace, null, is, true); + }; + /** @inheritdoc */ + DocumentImpl.prototype.createElementNS = function (namespace, qualifiedName, options) { + /** + * The createElementNS(namespace, qualifiedName, options) method, when + * invoked, must return the result of running the internal createElementNS + * steps, given context object, namespace, qualifiedName, and options. + */ + return algorithm_1.document_internalCreateElementNS(this, namespace, qualifiedName, options); + }; + /** @inheritdoc */ + DocumentImpl.prototype.createDocumentFragment = function () { + /** + * The createDocumentFragment() method, when invoked, must return a new + * DocumentFragment node with its node document set to the context object. + */ + return algorithm_1.create_documentFragment(this); + }; + /** @inheritdoc */ + DocumentImpl.prototype.createTextNode = function (data) { + /** + * The createTextNode(data) method, when invoked, must return a new Text + * node with its data set to data and node document set to the context object. + */ + return algorithm_1.create_text(this, data); + }; + /** @inheritdoc */ + DocumentImpl.prototype.createCDATASection = function (data) { + /** + * 1. If context object is an HTML document, then throw a + * "NotSupportedError" DOMException. + * 2. If data contains the string "]]>", then throw an + * "InvalidCharacterError" DOMException. + * 3. Return a new CDATASection node with its data set to data and node + * document set to the context object. + */ + if (this._type === "html") + throw new DOMException_1.NotSupportedError(); + if (data.indexOf(']]>') !== -1) + throw new DOMException_1.InvalidCharacterError(); + return algorithm_1.create_cdataSection(this, data); + }; + /** @inheritdoc */ + DocumentImpl.prototype.createComment = function (data) { + /** + * The createComment(data) method, when invoked, must return a new Comment + * node with its data set to data and node document set to the context object. + */ + return algorithm_1.create_comment(this, data); + }; + /** @inheritdoc */ + DocumentImpl.prototype.createProcessingInstruction = function (target, data) { + /** + * 1. If target does not match the Name production, then throw an + * "InvalidCharacterError" DOMException. + * 2. If data contains the string "?>", then throw an + * "InvalidCharacterError" DOMException. + * 3. Return a new ProcessingInstruction node, with target set to target, + * data set to data, and node document set to the context object. + */ + if (!algorithm_1.xml_isName(target)) + throw new DOMException_1.InvalidCharacterError(); + if (data.indexOf("?>") !== -1) + throw new DOMException_1.InvalidCharacterError(); + return algorithm_1.create_processingInstruction(this, target, data); + }; + /** @inheritdoc */ + DocumentImpl.prototype.importNode = function (node, deep) { + if (deep === void 0) { deep = false; } + /** + * 1. If node is a document or shadow root, then throw a "NotSupportedError" DOMException. + */ + if (util_1.Guard.isDocumentNode(node) || util_1.Guard.isShadowRoot(node)) + throw new DOMException_1.NotSupportedError(); + /** + * 2. Return a clone of node, with context object and the clone children flag set if deep is true. + */ + return algorithm_1.node_clone(node, this, deep); + }; + /** @inheritdoc */ + DocumentImpl.prototype.adoptNode = function (node) { + /** + * 1. If node is a document, then throw a "NotSupportedError" DOMException. + */ + if (util_1.Guard.isDocumentNode(node)) + throw new DOMException_1.NotSupportedError(); + /** + * 2. If node is a shadow root, then throw a "HierarchyRequestError" DOMException. + */ + if (util_1.Guard.isShadowRoot(node)) + throw new DOMException_1.HierarchyRequestError(); + /** + * 3. Adopt node into the context object. + * 4. Return node. + */ + algorithm_1.document_adopt(node, this); + return node; + }; + /** @inheritdoc */ + DocumentImpl.prototype.createAttribute = function (localName) { + /** + * 1. If localName does not match the Name production in XML, then throw + * an "InvalidCharacterError" DOMException. + * 2. If the context object is an HTML document, then set localName to + * localName in ASCII lowercase. + * 3. Return a new attribute whose local name is localName and node document + * is context object. + */ + if (!algorithm_1.xml_isName(localName)) + throw new DOMException_1.InvalidCharacterError(); + if (this._type === "html") { + localName = localName.toLowerCase(); + } + var attr = algorithm_1.create_attr(this, localName); + return attr; + }; + /** @inheritdoc */ + DocumentImpl.prototype.createAttributeNS = function (namespace, qualifiedName) { + /** + * 1. Let namespace, prefix, and localName be the result of passing + * namespace and qualifiedName to validate and extract. + * 2. Return a new attribute whose namespace is namespace, namespace prefix + * is prefix, local name is localName, and node document is context object. + */ + var _a = __read(algorithm_1.namespace_validateAndExtract(namespace, qualifiedName), 3), ns = _a[0], prefix = _a[1], localName = _a[2]; + var attr = algorithm_1.create_attr(this, localName); + attr._namespace = ns; + attr._namespacePrefix = prefix; + return attr; + }; + /** @inheritdoc */ + DocumentImpl.prototype.createEvent = function (eventInterface) { + return algorithm_1.event_createLegacyEvent(eventInterface); + }; + /** @inheritdoc */ + DocumentImpl.prototype.createRange = function () { + /** + * The createRange() method, when invoked, must return a new live range + * with (context object, 0) as its start and end. + */ + var range = algorithm_1.create_range(); + range._start = [this, 0]; + range._end = [this, 0]; + return range; + }; + /** @inheritdoc */ + DocumentImpl.prototype.createNodeIterator = function (root, whatToShow, filter) { + if (whatToShow === void 0) { whatToShow = interfaces_1.WhatToShow.All; } + if (filter === void 0) { filter = null; } + /** + * 1. Let iterator be a new NodeIterator object. + * 2. Set iterator’s root and iterator’s reference to root. + * 3. Set iterator’s pointer before reference to true. + * 4. Set iterator’s whatToShow to whatToShow. + * 5. Set iterator’s filter to filter. + * 6. Return iterator. + */ + var iterator = algorithm_1.create_nodeIterator(root, root, true); + iterator._whatToShow = whatToShow; + iterator._iteratorCollection = algorithm_1.create_nodeList(root); + if (util_2.isFunction(filter)) { + iterator._filter = algorithm_1.create_nodeFilter(); + iterator._filter.acceptNode = filter; + } + else { + iterator._filter = filter; + } + return iterator; + }; + /** @inheritdoc */ + DocumentImpl.prototype.createTreeWalker = function (root, whatToShow, filter) { + if (whatToShow === void 0) { whatToShow = interfaces_1.WhatToShow.All; } + if (filter === void 0) { filter = null; } + /** + * 1. Let walker be a new TreeWalker object. + * 2. Set walker’s root and walker’s current to root. + * 3. Set walker’s whatToShow to whatToShow. + * 4. Set walker’s filter to filter. + * 5. Return walker. + */ + var walker = algorithm_1.create_treeWalker(root, root); + walker._whatToShow = whatToShow; + if (util_2.isFunction(filter)) { + walker._filter = algorithm_1.create_nodeFilter(); + walker._filter.acceptNode = filter; + } + else { + walker._filter = filter; + } + return walker; + }; + /** + * Gets the parent event target for the given event. + * + * @param event - an event + */ + DocumentImpl.prototype._getTheParent = function (event) { + /** + * TODO: Implement realms + * A document’s get the parent algorithm, given an event, returns null if + * event’s type attribute value is "load" or document does not have a + * browsing context, and the document’s relevant global object otherwise. + */ + if (event._type === "load") { + return null; + } + else { + return DOMImpl_1.dom.window; + } + }; + // MIXIN: NonElementParentNode + /* istanbul ignore next */ + DocumentImpl.prototype.getElementById = function (elementId) { throw new Error("Mixin: NonElementParentNode not implemented."); }; + Object.defineProperty(DocumentImpl.prototype, "children", { + // MIXIN: DocumentOrShadowRoot + // No elements + // MIXIN: ParentNode + /* istanbul ignore next */ + get: function () { throw new Error("Mixin: ParentNode not implemented."); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentImpl.prototype, "firstElementChild", { + /* istanbul ignore next */ + get: function () { throw new Error("Mixin: ParentNode not implemented."); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentImpl.prototype, "lastElementChild", { + /* istanbul ignore next */ + get: function () { throw new Error("Mixin: ParentNode not implemented."); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentImpl.prototype, "childElementCount", { + /* istanbul ignore next */ + get: function () { throw new Error("Mixin: ParentNode not implemented."); }, + enumerable: true, + configurable: true + }); + /* istanbul ignore next */ + DocumentImpl.prototype.prepend = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; + } + throw new Error("Mixin: ParentNode not implemented."); + }; + /* istanbul ignore next */ + DocumentImpl.prototype.append = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; + } + throw new Error("Mixin: ParentNode not implemented."); + }; + /* istanbul ignore next */ + DocumentImpl.prototype.querySelector = function (selectors) { throw new Error("Mixin: ParentNode not implemented."); }; + /* istanbul ignore next */ + DocumentImpl.prototype.querySelectorAll = function (selectors) { throw new Error("Mixin: ParentNode not implemented."); }; + return DocumentImpl; +}(NodeImpl_1.NodeImpl)); +exports.DocumentImpl = DocumentImpl; +/** + * Initialize prototype properties + */ +WebIDLAlgorithm_1.idl_defineConst(DocumentImpl.prototype, "_nodeType", interfaces_1.NodeType.Document); +//# sourceMappingURL=DocumentImpl.js.map - state.result += _result; - } -} - -function mergeMappings(state, destination, source, overridableKeys) { - var sourceKeys, key, index, quantity; - - if (!common.isObject(source)) { - throwError(state, 'cannot merge mappings; the provided source object is unacceptable'); - } - - sourceKeys = Object.keys(source); +/***/ }), - for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { - key = sourceKeys[index]; +/***/ 5274: +/***/ ((__unused_webpack_module, exports) => { - if (!_hasOwnProperty.call(destination, key)) { - destination[key] = source[key]; - overridableKeys[key] = true; - } - } -} +"use strict"; -function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startPos) { - var index, quantity; - - // The output is a plain object here, so keys can only be strings. - // We need to convert keyNode to a string, but doing so can hang the process - // (deeply nested arrays that explode exponentially using aliases). - if (Array.isArray(keyNode)) { - keyNode = Array.prototype.slice.call(keyNode); - - for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { - if (Array.isArray(keyNode[index])) { - throwError(state, 'nested arrays are not supported inside keys'); - } - - if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') { - keyNode[index] = '[object Object]'; - } - } - } - - // Avoid code execution in load() via toString property - // (still use its own toString for arrays, timestamps, - // and whatever user schema extensions happen to have @@toStringTag) - if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') { - keyNode = '[object Object]'; - } - - - keyNode = String(keyNode); - - if (_result === null) { - _result = {}; - } - - if (keyTag === 'tag:yaml.org,2002:merge') { - if (Array.isArray(valueNode)) { - for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { - mergeMappings(state, _result, valueNode[index], overridableKeys); - } - } else { - mergeMappings(state, _result, valueNode, overridableKeys); - } - } else { - if (!state.json && - !_hasOwnProperty.call(overridableKeys, keyNode) && - _hasOwnProperty.call(_result, keyNode)) { - state.line = startLine || state.line; - state.position = startPos || state.position; - throwError(state, 'duplicated mapping key'); - } - _result[keyNode] = valueNode; - delete overridableKeys[keyNode]; - } - - return _result; -} - -function readLineBreak(state) { - var ch; - - ch = state.input.charCodeAt(state.position); - - if (ch === 0x0A/* LF */) { - state.position++; - } else if (ch === 0x0D/* CR */) { - state.position++; - if (state.input.charCodeAt(state.position) === 0x0A/* LF */) { - state.position++; - } - } else { - throwError(state, 'a line break is expected'); - } - - state.line += 1; - state.lineStart = state.position; -} - -function skipSeparationSpace(state, allowComments, checkIndent) { - var lineBreaks = 0, - ch = state.input.charCodeAt(state.position); - - while (ch !== 0) { - while (is_WHITE_SPACE(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - if (allowComments && ch === 0x23/* # */) { - do { - ch = state.input.charCodeAt(++state.position); - } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0); - } - - if (is_EOL(ch)) { - readLineBreak(state); - - ch = state.input.charCodeAt(state.position); - lineBreaks++; - state.lineIndent = 0; - - while (ch === 0x20/* Space */) { - state.lineIndent++; - ch = state.input.charCodeAt(++state.position); - } - } else { - break; - } - } - - if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { - throwWarning(state, 'deficient indentation'); - } - - return lineBreaks; -} - -function testDocumentSeparator(state) { - var _position = state.position, - ch; - - ch = state.input.charCodeAt(_position); - - // Condition state.position === state.lineStart is tested - // in parent on each call, for efficiency. No needs to test here again. - if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) && - ch === state.input.charCodeAt(_position + 1) && - ch === state.input.charCodeAt(_position + 2)) { - - _position += 3; - - ch = state.input.charCodeAt(_position); - - if (ch === 0 || is_WS_OR_EOL(ch)) { - return true; +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Represents a mixin for an interface to be used to share APIs between + * documents and shadow roots. This mixin is implemented by + * {@link Document} and {@link ShadowRoot}. + * + * _Note:_ The DocumentOrShadowRoot mixin is expected to be used by other + * standards that want to define APIs shared between documents and shadow roots. + */ +var DocumentOrShadowRootImpl = /** @class */ (function () { + function DocumentOrShadowRootImpl() { } - } - - return false; -} - -function writeFoldedLines(state, count) { - if (count === 1) { - state.result += ' '; - } else if (count > 1) { - state.result += common.repeat('\n', count - 1); - } -} - - -function readPlainScalar(state, nodeIndent, withinFlowCollection) { - var preceding, - following, - captureStart, - captureEnd, - hasPendingContent, - _line, - _lineStart, - _lineIndent, - _kind = state.kind, - _result = state.result, - ch; + return DocumentOrShadowRootImpl; +}()); +exports.DocumentOrShadowRootImpl = DocumentOrShadowRootImpl; +//# sourceMappingURL=DocumentOrShadowRootImpl.js.map - ch = state.input.charCodeAt(state.position); +/***/ }), - if (is_WS_OR_EOL(ch) || - is_FLOW_INDICATOR(ch) || - ch === 0x23/* # */ || - ch === 0x26/* & */ || - ch === 0x2A/* * */ || - ch === 0x21/* ! */ || - ch === 0x7C/* | */ || - ch === 0x3E/* > */ || - ch === 0x27/* ' */ || - ch === 0x22/* " */ || - ch === 0x25/* % */ || - ch === 0x40/* @ */ || - ch === 0x60/* ` */) { - return false; - } +/***/ 3173: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) { - following = state.input.charCodeAt(state.position + 1); +"use strict"; - if (is_WS_OR_EOL(following) || - withinFlowCollection && is_FLOW_INDICATOR(following)) { - return false; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7305); +var NodeImpl_1 = __nccwpck_require__(1745); +var WebIDLAlgorithm_1 = __nccwpck_require__(5457); +/** + * Represents an object providing methods which are not dependent on + * any particular document + */ +var DocumentTypeImpl = /** @class */ (function (_super) { + __extends(DocumentTypeImpl, _super); + /** + * Initializes a new instance of `DocumentType`. + * + * @param name - name of the node + * @param publicId - `PUBLIC` identifier + * @param systemId - `SYSTEM` identifier + */ + function DocumentTypeImpl(name, publicId, systemId) { + var _this = _super.call(this) || this; + _this._name = ''; + _this._publicId = ''; + _this._systemId = ''; + _this._name = name; + _this._publicId = publicId; + _this._systemId = systemId; + return _this; } - } - - state.kind = 'scalar'; - state.result = ''; - captureStart = captureEnd = state.position; - hasPendingContent = false; - - while (ch !== 0) { - if (ch === 0x3A/* : */) { - following = state.input.charCodeAt(state.position + 1); - - if (is_WS_OR_EOL(following) || - withinFlowCollection && is_FLOW_INDICATOR(following)) { - break; - } - - } else if (ch === 0x23/* # */) { - preceding = state.input.charCodeAt(state.position - 1); - - if (is_WS_OR_EOL(preceding)) { - break; - } + Object.defineProperty(DocumentTypeImpl.prototype, "name", { + /** @inheritdoc */ + get: function () { return this._name; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentTypeImpl.prototype, "publicId", { + /** @inheritdoc */ + get: function () { return this._publicId; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(DocumentTypeImpl.prototype, "systemId", { + /** @inheritdoc */ + get: function () { return this._systemId; }, + enumerable: true, + configurable: true + }); + // MIXIN: ChildNode + /* istanbul ignore next */ + DocumentTypeImpl.prototype.before = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; + } + throw new Error("Mixin: ChildNode not implemented."); + }; + /* istanbul ignore next */ + DocumentTypeImpl.prototype.after = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; + } + throw new Error("Mixin: ChildNode not implemented."); + }; + /* istanbul ignore next */ + DocumentTypeImpl.prototype.replaceWith = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; + } + throw new Error("Mixin: ChildNode not implemented."); + }; + /* istanbul ignore next */ + DocumentTypeImpl.prototype.remove = function () { throw new Error("Mixin: ChildNode not implemented."); }; + /** + * Creates a new `DocumentType`. + * + * @param document - owner document + * @param name - name of the node + * @param publicId - `PUBLIC` identifier + * @param systemId - `SYSTEM` identifier + */ + DocumentTypeImpl._create = function (document, name, publicId, systemId) { + if (publicId === void 0) { publicId = ''; } + if (systemId === void 0) { systemId = ''; } + var node = new DocumentTypeImpl(name, publicId, systemId); + node._nodeDocument = document; + return node; + }; + return DocumentTypeImpl; +}(NodeImpl_1.NodeImpl)); +exports.DocumentTypeImpl = DocumentTypeImpl; +/** + * Initialize prototype properties + */ +WebIDLAlgorithm_1.idl_defineConst(DocumentTypeImpl.prototype, "_nodeType", interfaces_1.NodeType.DocumentType); +//# sourceMappingURL=DocumentTypeImpl.js.map - } else if ((state.position === state.lineStart && testDocumentSeparator(state)) || - withinFlowCollection && is_FLOW_INDICATOR(ch)) { - break; +/***/ }), - } else if (is_EOL(ch)) { - _line = state.line; - _lineStart = state.lineStart; - _lineIndent = state.lineIndent; - skipSeparationSpace(state, false, -1); +/***/ 5975: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - if (state.lineIndent >= nodeIndent) { - hasPendingContent = true; - ch = state.input.charCodeAt(state.position); - continue; - } else { - state.position = captureEnd; - state.line = _line; - state.lineStart = _lineStart; - state.lineIndent = _lineIndent; - break; - } - } +"use strict"; - if (hasPendingContent) { - captureSegment(state, captureStart, captureEnd, false); - writeFoldedLines(state, state.line - _line); - captureStart = captureEnd = state.position; - hasPendingContent = false; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } - - if (!is_WHITE_SPACE(ch)) { - captureEnd = state.position + 1; + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } } - - ch = state.input.charCodeAt(++state.position); - } - - captureSegment(state, captureStart, captureEnd, false); - - if (state.result) { - return true; - } - - state.kind = _kind; - state.result = _result; - return false; -} - -function readSingleQuotedScalar(state, nodeIndent) { - var ch, - captureStart, captureEnd; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x27/* ' */) { - return false; - } - - state.kind = 'scalar'; - state.result = ''; - state.position++; - captureStart = captureEnd = state.position; - - while ((ch = state.input.charCodeAt(state.position)) !== 0) { - if (ch === 0x27/* ' */) { - captureSegment(state, captureStart, state.position, true); - ch = state.input.charCodeAt(++state.position); - - if (ch === 0x27/* ' */) { - captureStart = state.position; - state.position++; - captureEnd = state.position; - } else { - return true; - } - - } else if (is_EOL(ch)) { - captureSegment(state, captureStart, captureEnd, true); - writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); - captureStart = captureEnd = state.position; - - } else if (state.position === state.lineStart && testDocumentSeparator(state)) { - throwError(state, 'unexpected end of the document within a single quoted scalar'); - - } else { - state.position++; - captureEnd = state.position; + return ar; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7305); +var NodeImpl_1 = __nccwpck_require__(1745); +var DOMException_1 = __nccwpck_require__(3166); +var infra_1 = __nccwpck_require__(4251); +var algorithm_1 = __nccwpck_require__(61); +var WebIDLAlgorithm_1 = __nccwpck_require__(5457); +/** + * Represents an element node. + */ +var ElementImpl = /** @class */ (function (_super) { + __extends(ElementImpl, _super); + /** + * Initializes a new instance of `Element`. + */ + function ElementImpl() { + var _this = _super.call(this) || this; + _this._children = new Set(); + _this._namespace = null; + _this._namespacePrefix = null; + _this._localName = ""; + _this._customElementState = "undefined"; + _this._customElementDefinition = null; + _this._is = null; + _this._shadowRoot = null; + _this._attributeList = algorithm_1.create_namedNodeMap(_this); + _this._attributeChangeSteps = []; + _this._name = ''; + _this._assignedSlot = null; + return _this; } - } - - throwError(state, 'unexpected end of the stream within a single quoted scalar'); -} - -function readDoubleQuotedScalar(state, nodeIndent) { - var captureStart, - captureEnd, - hexLength, - hexResult, - tmp, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x22/* " */) { - return false; - } - - state.kind = 'scalar'; - state.result = ''; - state.position++; - captureStart = captureEnd = state.position; - - while ((ch = state.input.charCodeAt(state.position)) !== 0) { - if (ch === 0x22/* " */) { - captureSegment(state, captureStart, state.position, true); - state.position++; - return true; - - } else if (ch === 0x5C/* \ */) { - captureSegment(state, captureStart, state.position, true); - ch = state.input.charCodeAt(++state.position); - - if (is_EOL(ch)) { - skipSeparationSpace(state, false, nodeIndent); - - // TODO: rework to inline fn with no type cast? - } else if (ch < 256 && simpleEscapeCheck[ch]) { - state.result += simpleEscapeMap[ch]; - state.position++; - - } else if ((tmp = escapedHexLen(ch)) > 0) { - hexLength = tmp; - hexResult = 0; - - for (; hexLength > 0; hexLength--) { - ch = state.input.charCodeAt(++state.position); - - if ((tmp = fromHexCode(ch)) >= 0) { - hexResult = (hexResult << 4) + tmp; - - } else { - throwError(state, 'expected hexadecimal character'); - } + Object.defineProperty(ElementImpl.prototype, "namespaceURI", { + /** @inheritdoc */ + get: function () { return this._namespace; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ElementImpl.prototype, "prefix", { + /** @inheritdoc */ + get: function () { return this._namespacePrefix; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ElementImpl.prototype, "localName", { + /** @inheritdoc */ + get: function () { return this._localName; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ElementImpl.prototype, "tagName", { + /** @inheritdoc */ + get: function () { return this._htmlUppercasedQualifiedName; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ElementImpl.prototype, "id", { + /** @inheritdoc */ + get: function () { + return algorithm_1.element_getAnAttributeValue(this, "id"); + }, + set: function (value) { + algorithm_1.element_setAnAttributeValue(this, "id", value); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ElementImpl.prototype, "className", { + /** @inheritdoc */ + get: function () { + return algorithm_1.element_getAnAttributeValue(this, "class"); + }, + set: function (value) { + algorithm_1.element_setAnAttributeValue(this, "class", value); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ElementImpl.prototype, "classList", { + /** @inheritdoc */ + get: function () { + var attr = algorithm_1.element_getAnAttributeByName("class", this); + if (attr === null) { + attr = algorithm_1.create_attr(this._nodeDocument, "class"); + } + return algorithm_1.create_domTokenList(this, attr); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ElementImpl.prototype, "slot", { + /** @inheritdoc */ + get: function () { + return algorithm_1.element_getAnAttributeValue(this, "slot"); + }, + set: function (value) { + algorithm_1.element_setAnAttributeValue(this, "slot", value); + }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + ElementImpl.prototype.hasAttributes = function () { + return this._attributeList.length !== 0; + }; + Object.defineProperty(ElementImpl.prototype, "attributes", { + /** @inheritdoc */ + get: function () { return this._attributeList; }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + ElementImpl.prototype.getAttributeNames = function () { + var e_1, _a; + /** + * The getAttributeNames() method, when invoked, must return the qualified + * names of the attributes in context object’s attribute list, in order, + * and a new list otherwise. + */ + var names = []; + try { + for (var _b = __values(this._attributeList), _c = _b.next(); !_c.done; _c = _b.next()) { + var attr = _c.value; + names.push(attr._qualifiedName); + } } - - state.result += charFromCodepoint(hexResult); - - state.position++; - - } else { - throwError(state, 'unknown escape sequence'); - } - - captureStart = captureEnd = state.position; - - } else if (is_EOL(ch)) { - captureSegment(state, captureStart, captureEnd, true); - writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); - captureStart = captureEnd = state.position; - - } else if (state.position === state.lineStart && testDocumentSeparator(state)) { - throwError(state, 'unexpected end of the document within a double quoted scalar'); - - } else { - state.position++; - captureEnd = state.position; - } - } - - throwError(state, 'unexpected end of the stream within a double quoted scalar'); -} - -function readFlowCollection(state, nodeIndent) { - var readNext = true, - _line, - _tag = state.tag, - _result, - _anchor = state.anchor, - following, - terminator, - isPair, - isExplicitPair, - isMapping, - overridableKeys = {}, - keyNode, - keyTag, - valueNode, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch === 0x5B/* [ */) { - terminator = 0x5D;/* ] */ - isMapping = false; - _result = []; - } else if (ch === 0x7B/* { */) { - terminator = 0x7D;/* } */ - isMapping = true; - _result = {}; - } else { - return false; - } - - if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; - } - - ch = state.input.charCodeAt(++state.position); - - while (ch !== 0) { - skipSeparationSpace(state, true, nodeIndent); - - ch = state.input.charCodeAt(state.position); - - if (ch === terminator) { - state.position++; - state.tag = _tag; - state.anchor = _anchor; - state.kind = isMapping ? 'mapping' : 'sequence'; - state.result = _result; - return true; - } else if (!readNext) { - throwError(state, 'missed comma between flow collection entries'); - } - - keyTag = keyNode = valueNode = null; - isPair = isExplicitPair = false; - - if (ch === 0x3F/* ? */) { - following = state.input.charCodeAt(state.position + 1); - - if (is_WS_OR_EOL(following)) { - isPair = isExplicitPair = true; - state.position++; - skipSeparationSpace(state, true, nodeIndent); - } - } - - _line = state.line; - composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); - keyTag = state.tag; - keyNode = state.result; - skipSeparationSpace(state, true, nodeIndent); - - ch = state.input.charCodeAt(state.position); - - if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) { - isPair = true; - ch = state.input.charCodeAt(++state.position); - skipSeparationSpace(state, true, nodeIndent); - composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); - valueNode = state.result; - } - - if (isMapping) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode); - } else if (isPair) { - _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode)); - } else { - _result.push(keyNode); - } - - skipSeparationSpace(state, true, nodeIndent); - - ch = state.input.charCodeAt(state.position); - - if (ch === 0x2C/* , */) { - readNext = true; - ch = state.input.charCodeAt(++state.position); - } else { - readNext = false; - } - } - - throwError(state, 'unexpected end of the stream within a flow collection'); -} - -function readBlockScalar(state, nodeIndent) { - var captureStart, - folding, - chomping = CHOMPING_CLIP, - didReadContent = false, - detectedIndent = false, - textIndent = nodeIndent, - emptyLines = 0, - atMoreIndented = false, - tmp, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch === 0x7C/* | */) { - folding = false; - } else if (ch === 0x3E/* > */) { - folding = true; - } else { - return false; - } - - state.kind = 'scalar'; - state.result = ''; - - while (ch !== 0) { - ch = state.input.charCodeAt(++state.position); - - if (ch === 0x2B/* + */ || ch === 0x2D/* - */) { - if (CHOMPING_CLIP === chomping) { - chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP; - } else { - throwError(state, 'repeat of a chomping mode identifier'); - } - - } else if ((tmp = fromDecimalCode(ch)) >= 0) { - if (tmp === 0) { - throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); - } else if (!detectedIndent) { - textIndent = nodeIndent + tmp - 1; - detectedIndent = true; - } else { - throwError(state, 'repeat of an indentation width identifier'); - } - - } else { - break; - } - } - - if (is_WHITE_SPACE(ch)) { - do { ch = state.input.charCodeAt(++state.position); } - while (is_WHITE_SPACE(ch)); - - if (ch === 0x23/* # */) { - do { ch = state.input.charCodeAt(++state.position); } - while (!is_EOL(ch) && (ch !== 0)); - } - } - - while (ch !== 0) { - readLineBreak(state); - state.lineIndent = 0; - - ch = state.input.charCodeAt(state.position); - - while ((!detectedIndent || state.lineIndent < textIndent) && - (ch === 0x20/* Space */)) { - state.lineIndent++; - ch = state.input.charCodeAt(++state.position); - } - - if (!detectedIndent && state.lineIndent > textIndent) { - textIndent = state.lineIndent; - } - - if (is_EOL(ch)) { - emptyLines++; - continue; - } - - // End of the scalar. - if (state.lineIndent < textIndent) { - - // Perform the chomping. - if (chomping === CHOMPING_KEEP) { - state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); - } else if (chomping === CHOMPING_CLIP) { - if (didReadContent) { // i.e. only if the scalar is not empty. - state.result += '\n'; + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } } - } - - // Break this `while` cycle and go to the funciton's epilogue. - break; - } - - // Folded style: use fancy rules to handle line breaks. - if (folding) { - - // Lines starting with white space characters (more-indented lines) are not folded. - if (is_WHITE_SPACE(ch)) { - atMoreIndented = true; - // except for the first content line (cf. Example 8.1) - state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); - - // End of more-indented block. - } else if (atMoreIndented) { - atMoreIndented = false; - state.result += common.repeat('\n', emptyLines + 1); - - // Just one line break - perceive as the same line. - } else if (emptyLines === 0) { - if (didReadContent) { // i.e. only if we have already read some scalar content. - state.result += ' '; + return names; + }; + /** @inheritdoc */ + ElementImpl.prototype.getAttribute = function (qualifiedName) { + /** + * 1. Let attr be the result of getting an attribute given qualifiedName + * and the context object. + * 2. If attr is null, return null. + * 3. Return attr’s value. + */ + var attr = algorithm_1.element_getAnAttributeByName(qualifiedName, this); + return (attr ? attr._value : null); + }; + /** @inheritdoc */ + ElementImpl.prototype.getAttributeNS = function (namespace, localName) { + /** + * 1. Let attr be the result of getting an attribute given namespace, + * localName, and the context object. + * 2. If attr is null, return null. + * 3. Return attr’s value. + */ + var attr = algorithm_1.element_getAnAttributeByNamespaceAndLocalName(namespace, localName, this); + return (attr ? attr._value : null); + }; + /** @inheritdoc */ + ElementImpl.prototype.setAttribute = function (qualifiedName, value) { + /** + * 1. If qualifiedName does not match the Name production in XML, then + * throw an "InvalidCharacterError" DOMException. + */ + if (!algorithm_1.xml_isName(qualifiedName)) + throw new DOMException_1.InvalidCharacterError(); + /** + * 2. If the context object is in the HTML namespace and its node document + * is an HTML document, then set qualifiedName to qualifiedName in ASCII + * lowercase. + */ + if (this._namespace === infra_1.namespace.HTML && this._nodeDocument._type === "html") { + qualifiedName = qualifiedName.toLowerCase(); } - - // Several line breaks - perceive as different lines. - } else { - state.result += common.repeat('\n', emptyLines); - } - - // Literal style: just add exact number of line breaks between content lines. - } else { - // Keep all line breaks except the header line break. - state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); - } - - didReadContent = true; - detectedIndent = true; - emptyLines = 0; - captureStart = state.position; - - while (!is_EOL(ch) && (ch !== 0)) { - ch = state.input.charCodeAt(++state.position); - } - - captureSegment(state, captureStart, state.position, false); - } - - return true; -} - -function readBlockSequence(state, nodeIndent) { - var _line, - _tag = state.tag, - _anchor = state.anchor, - _result = [], - following, - detected = false, - ch; - - if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; - } - - ch = state.input.charCodeAt(state.position); - - while (ch !== 0) { - - if (ch !== 0x2D/* - */) { - break; - } - - following = state.input.charCodeAt(state.position + 1); - - if (!is_WS_OR_EOL(following)) { - break; - } - - detected = true; - state.position++; - - if (skipSeparationSpace(state, true, -1)) { - if (state.lineIndent <= nodeIndent) { - _result.push(null); - ch = state.input.charCodeAt(state.position); - continue; - } - } - - _line = state.line; - composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); - _result.push(state.result); - skipSeparationSpace(state, true, -1); - - ch = state.input.charCodeAt(state.position); - - if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { - throwError(state, 'bad indentation of a sequence entry'); - } else if (state.lineIndent < nodeIndent) { - break; - } - } - - if (detected) { - state.tag = _tag; - state.anchor = _anchor; - state.kind = 'sequence'; - state.result = _result; - return true; - } - return false; -} - -function readBlockMapping(state, nodeIndent, flowIndent) { - var following, - allowCompact, - _line, - _pos, - _tag = state.tag, - _anchor = state.anchor, - _result = {}, - overridableKeys = {}, - keyTag = null, - keyNode = null, - valueNode = null, - atExplicitKey = false, - detected = false, - ch; - - if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; - } - - ch = state.input.charCodeAt(state.position); - - while (ch !== 0) { - following = state.input.charCodeAt(state.position + 1); - _line = state.line; // Save the current line. - _pos = state.position; - - // - // Explicit notation case. There are two separate blocks: - // first for the key (denoted by "?") and second for the value (denoted by ":") - // - if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { - - if (ch === 0x3F/* ? */) { - if (atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); - keyTag = keyNode = valueNode = null; + /** + * 3. Let attribute be the first attribute in context object’s attribute + * list whose qualified name is qualifiedName, and null otherwise. + */ + var attribute = null; + for (var i = 0; i < this._attributeList.length; i++) { + var attr = this._attributeList[i]; + if (attr._qualifiedName === qualifiedName) { + attribute = attr; + break; + } } - - detected = true; - atExplicitKey = true; - allowCompact = true; - - } else if (atExplicitKey) { - // i.e. 0x3A/* : */ === character after the explicit key. - atExplicitKey = false; - allowCompact = true; - - } else { - throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); - } - - state.position += 1; - ch = following; - - // - // Implicit notation case. Flow-style node as the key first, then ":", and the value. - // - } else if (composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { - - if (state.line === _line) { - ch = state.input.charCodeAt(state.position); - - while (is_WHITE_SPACE(ch)) { - ch = state.input.charCodeAt(++state.position); + /** + * 4. If attribute is null, create an attribute whose local name is + * qualifiedName, value is value, and node document is context object’s + * node document, then append this attribute to context object, and + * then return. + */ + if (attribute === null) { + attribute = algorithm_1.create_attr(this._nodeDocument, qualifiedName); + attribute._value = value; + algorithm_1.element_append(attribute, this); + return; } - - if (ch === 0x3A/* : */) { - ch = state.input.charCodeAt(++state.position); - - if (!is_WS_OR_EOL(ch)) { - throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping'); - } - - if (atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); - keyTag = keyNode = valueNode = null; - } - - detected = true; - atExplicitKey = false; - allowCompact = false; - keyTag = state.tag; - keyNode = state.result; - - } else if (detected) { - throwError(state, 'can not read an implicit mapping pair; a colon is missed'); - - } else { - state.tag = _tag; - state.anchor = _anchor; - return true; // Keep the result of `composeNode`. + /** + * 5. Change attribute from context object to value. + */ + algorithm_1.element_change(attribute, this, value); + }; + /** @inheritdoc */ + ElementImpl.prototype.setAttributeNS = function (namespace, qualifiedName, value) { + /** + * 1. Let namespace, prefix, and localName be the result of passing + * namespace and qualifiedName to validate and extract. + * 2. Set an attribute value for the context object using localName, value, + * and also prefix and namespace. + */ + var _a = __read(algorithm_1.namespace_validateAndExtract(namespace, qualifiedName), 3), ns = _a[0], prefix = _a[1], localName = _a[2]; + algorithm_1.element_setAnAttributeValue(this, localName, value, prefix, ns); + }; + /** @inheritdoc */ + ElementImpl.prototype.removeAttribute = function (qualifiedName) { + /** + * The removeAttribute(qualifiedName) method, when invoked, must remove an + * attribute given qualifiedName and the context object, and then return + * undefined. + */ + algorithm_1.element_removeAnAttributeByName(qualifiedName, this); + }; + /** @inheritdoc */ + ElementImpl.prototype.removeAttributeNS = function (namespace, localName) { + /** + * The removeAttributeNS(namespace, localName) method, when invoked, must + * remove an attribute given namespace, localName, and context object, and + * then return undefined. + */ + algorithm_1.element_removeAnAttributeByNamespaceAndLocalName(namespace, localName, this); + }; + /** @inheritdoc */ + ElementImpl.prototype.hasAttribute = function (qualifiedName) { + /** + * 1. If the context object is in the HTML namespace and its node document + * is an HTML document, then set qualifiedName to qualifiedName in ASCII + * lowercase. + * 2. Return true if the context object has an attribute whose qualified + * name is qualifiedName, and false otherwise. + */ + if (this._namespace === infra_1.namespace.HTML && this._nodeDocument._type === "html") { + qualifiedName = qualifiedName.toLowerCase(); } - - } else if (detected) { - throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); - - } else { - state.tag = _tag; - state.anchor = _anchor; - return true; // Keep the result of `composeNode`. - } - - } else { - break; // Reading is done. Go to the epilogue. - } - - // - // Common reading code for both explicit and implicit notations. - // - if (state.line === _line || state.lineIndent > nodeIndent) { - if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { - if (atExplicitKey) { - keyNode = state.result; - } else { - valueNode = state.result; + for (var i = 0; i < this._attributeList.length; i++) { + var attr = this._attributeList[i]; + if (attr._qualifiedName === qualifiedName) { + return true; + } } - } - - if (!atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _pos); - keyTag = keyNode = valueNode = null; - } - - skipSeparationSpace(state, true, -1); - ch = state.input.charCodeAt(state.position); - } - - if (state.lineIndent > nodeIndent && (ch !== 0)) { - throwError(state, 'bad indentation of a mapping entry'); - } else if (state.lineIndent < nodeIndent) { - break; - } - } - - // - // Epilogue. - // - - // Special case: last mapping's node contains only the key in explicit notation. - if (atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); - } - - // Expose the resulting mapping. - if (detected) { - state.tag = _tag; - state.anchor = _anchor; - state.kind = 'mapping'; - state.result = _result; - } - - return detected; -} - -function readTagProperty(state) { - var _position, - isVerbatim = false, - isNamed = false, - tagHandle, - tagName, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x21/* ! */) return false; - - if (state.tag !== null) { - throwError(state, 'duplication of a tag property'); - } - - ch = state.input.charCodeAt(++state.position); - - if (ch === 0x3C/* < */) { - isVerbatim = true; - ch = state.input.charCodeAt(++state.position); - - } else if (ch === 0x21/* ! */) { - isNamed = true; - tagHandle = '!!'; - ch = state.input.charCodeAt(++state.position); - - } else { - tagHandle = '!'; - } - - _position = state.position; - - if (isVerbatim) { - do { ch = state.input.charCodeAt(++state.position); } - while (ch !== 0 && ch !== 0x3E/* > */); - - if (state.position < state.length) { - tagName = state.input.slice(_position, state.position); - ch = state.input.charCodeAt(++state.position); - } else { - throwError(state, 'unexpected end of the stream within a verbatim tag'); - } - } else { - while (ch !== 0 && !is_WS_OR_EOL(ch)) { - - if (ch === 0x21/* ! */) { - if (!isNamed) { - tagHandle = state.input.slice(_position - 1, state.position + 1); - - if (!PATTERN_TAG_HANDLE.test(tagHandle)) { - throwError(state, 'named tag handle cannot contain such characters'); - } - - isNamed = true; - _position = state.position + 1; - } else { - throwError(state, 'tag suffix cannot contain exclamation marks'); + return false; + }; + /** @inheritdoc */ + ElementImpl.prototype.toggleAttribute = function (qualifiedName, force) { + /** + * 1. If qualifiedName does not match the Name production in XML, then + * throw an "InvalidCharacterError" DOMException. + */ + if (!algorithm_1.xml_isName(qualifiedName)) + throw new DOMException_1.InvalidCharacterError(); + /** + * 2. If the context object is in the HTML namespace and its node document + * is an HTML document, then set qualifiedName to qualifiedName in ASCII + * lowercase. + */ + if (this._namespace === infra_1.namespace.HTML && this._nodeDocument._type === "html") { + qualifiedName = qualifiedName.toLowerCase(); } - } - - ch = state.input.charCodeAt(++state.position); - } - - tagName = state.input.slice(_position, state.position); - - if (PATTERN_FLOW_INDICATORS.test(tagName)) { - throwError(state, 'tag suffix cannot contain flow indicator characters'); - } - } - - if (tagName && !PATTERN_TAG_URI.test(tagName)) { - throwError(state, 'tag name cannot contain such characters: ' + tagName); - } - - if (isVerbatim) { - state.tag = tagName; - - } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) { - state.tag = state.tagMap[tagHandle] + tagName; - - } else if (tagHandle === '!') { - state.tag = '!' + tagName; - - } else if (tagHandle === '!!') { - state.tag = 'tag:yaml.org,2002:' + tagName; - - } else { - throwError(state, 'undeclared tag handle "' + tagHandle + '"'); - } - - return true; -} - -function readAnchorProperty(state) { - var _position, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x26/* & */) return false; - - if (state.anchor !== null) { - throwError(state, 'duplication of an anchor property'); - } - - ch = state.input.charCodeAt(++state.position); - _position = state.position; - - while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - if (state.position === _position) { - throwError(state, 'name of an anchor node must contain at least one character'); - } - - state.anchor = state.input.slice(_position, state.position); - return true; -} - -function readAlias(state) { - var _position, alias, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x2A/* * */) return false; - - ch = state.input.charCodeAt(++state.position); - _position = state.position; - - while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - if (state.position === _position) { - throwError(state, 'name of an alias node must contain at least one character'); - } - - alias = state.input.slice(_position, state.position); - - if (!state.anchorMap.hasOwnProperty(alias)) { - throwError(state, 'unidentified alias "' + alias + '"'); - } - - state.result = state.anchorMap[alias]; - skipSeparationSpace(state, true, -1); - return true; -} - -function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { - var allowBlockStyles, - allowBlockScalars, - allowBlockCollections, - indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this parentIndent) { - indentStatus = 1; - } else if (state.lineIndent === parentIndent) { - indentStatus = 0; - } else if (state.lineIndent < parentIndent) { - indentStatus = -1; - } - } - } - - if (indentStatus === 1) { - while (readTagProperty(state) || readAnchorProperty(state)) { - if (skipSeparationSpace(state, true, -1)) { - atNewLine = true; - allowBlockCollections = allowBlockStyles; - - if (state.lineIndent > parentIndent) { - indentStatus = 1; - } else if (state.lineIndent === parentIndent) { - indentStatus = 0; - } else if (state.lineIndent < parentIndent) { - indentStatus = -1; + /** + * 3. Let attribute be the first attribute in the context object’s attribute + * list whose qualified name is qualifiedName, and null otherwise. + */ + var attribute = null; + for (var i = 0; i < this._attributeList.length; i++) { + var attr = this._attributeList[i]; + if (attr._qualifiedName === qualifiedName) { + attribute = attr; + break; + } } - } else { - allowBlockCollections = false; - } - } - } - - if (allowBlockCollections) { - allowBlockCollections = atNewLine || allowCompact; - } - - if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { - if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { - flowIndent = parentIndent; - } else { - flowIndent = parentIndent + 1; - } - - blockIndent = state.position - state.lineStart; - - if (indentStatus === 1) { - if (allowBlockCollections && - (readBlockSequence(state, blockIndent) || - readBlockMapping(state, blockIndent, flowIndent)) || - readFlowCollection(state, flowIndent)) { - hasContent = true; - } else { - if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || - readSingleQuotedScalar(state, flowIndent) || - readDoubleQuotedScalar(state, flowIndent)) { - hasContent = true; - - } else if (readAlias(state)) { - hasContent = true; - - if (state.tag !== null || state.anchor !== null) { - throwError(state, 'alias node should not have any properties'); - } - - } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { - hasContent = true; - - if (state.tag === null) { - state.tag = '?'; - } + if (attribute === null) { + /** + * 4. If attribute is null, then: + * 4.1. If force is not given or is true, create an attribute whose local + * name is qualifiedName, value is the empty string, and node document is + * the context object’s node document, then append this attribute to the + * context object, and then return true. + * 4.2. Return false. + */ + if (force === undefined || force === true) { + attribute = algorithm_1.create_attr(this._nodeDocument, qualifiedName); + attribute._value = ''; + algorithm_1.element_append(attribute, this); + return true; + } + return false; } - - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } - } - } else if (indentStatus === 0) { - // Special case: block sequences are allowed to have same indentation level as the parent. - // http://www.yaml.org/spec/1.2/spec.html#id2799784 - hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); - } - } - - if (state.tag !== null && state.tag !== '!') { - if (state.tag === '?') { - // Implicit resolving is not allowed for non-scalar types, and '?' - // non-specific tag is only automatically assigned to plain scalars. - // - // We only need to check kind conformity in case user explicitly assigns '?' - // tag, for example like this: "! [0]" - // - if (state.result !== null && state.kind !== 'scalar') { - throwError(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); - } - - for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { - type = state.implicitTypes[typeIndex]; - - if (type.resolve(state.result)) { // `state.result` updated in resolver if matched - state.result = type.construct(state.result); - state.tag = type.tag; - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } - break; - } - } - } else if (_hasOwnProperty.call(state.typeMap[state.kind || 'fallback'], state.tag)) { - type = state.typeMap[state.kind || 'fallback'][state.tag]; - - if (state.result !== null && type.kind !== state.kind) { - throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); - } - - if (!type.resolve(state.result)) { // `state.result` updated in resolver if matched - throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); - } else { - state.result = type.construct(state.result); - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } - } - } else { - throwError(state, 'unknown tag !<' + state.tag + '>'); - } - } - - if (state.listener !== null) { - state.listener('close', state); - } - return state.tag !== null || state.anchor !== null || hasContent; -} - -function readDocument(state) { - var documentStart = state.position, - _position, - directiveName, - directiveArgs, - hasDirectives = false, - ch; - - state.version = null; - state.checkLineBreaks = state.legacy; - state.tagMap = {}; - state.anchorMap = {}; - - while ((ch = state.input.charCodeAt(state.position)) !== 0) { - skipSeparationSpace(state, true, -1); - - ch = state.input.charCodeAt(state.position); - - if (state.lineIndent > 0 || ch !== 0x25/* % */) { - break; - } - - hasDirectives = true; - ch = state.input.charCodeAt(++state.position); - _position = state.position; - - while (ch !== 0 && !is_WS_OR_EOL(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - directiveName = state.input.slice(_position, state.position); - directiveArgs = []; - - if (directiveName.length < 1) { - throwError(state, 'directive name must not be less than one character in length'); - } - - while (ch !== 0) { - while (is_WHITE_SPACE(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - if (ch === 0x23/* # */) { - do { ch = state.input.charCodeAt(++state.position); } - while (ch !== 0 && !is_EOL(ch)); - break; - } - - if (is_EOL(ch)) break; - - _position = state.position; - - while (ch !== 0 && !is_WS_OR_EOL(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - directiveArgs.push(state.input.slice(_position, state.position)); - } - - if (ch !== 0) readLineBreak(state); - - if (_hasOwnProperty.call(directiveHandlers, directiveName)) { - directiveHandlers[directiveName](state, directiveName, directiveArgs); - } else { - throwWarning(state, 'unknown document directive "' + directiveName + '"'); - } - } - - skipSeparationSpace(state, true, -1); - - if (state.lineIndent === 0 && - state.input.charCodeAt(state.position) === 0x2D/* - */ && - state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && - state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { - state.position += 3; - skipSeparationSpace(state, true, -1); - - } else if (hasDirectives) { - throwError(state, 'directives end mark is expected'); - } - - composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); - skipSeparationSpace(state, true, -1); - - if (state.checkLineBreaks && - PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { - throwWarning(state, 'non-ASCII line breaks are interpreted as content'); - } - - state.documents.push(state.result); - - if (state.position === state.lineStart && testDocumentSeparator(state)) { - - if (state.input.charCodeAt(state.position) === 0x2E/* . */) { - state.position += 3; - skipSeparationSpace(state, true, -1); - } - return; - } - - if (state.position < (state.length - 1)) { - throwError(state, 'end of the stream or a document separator is expected'); - } else { - return; - } -} - - -function loadDocuments(input, options) { - input = String(input); - options = options || {}; - - if (input.length !== 0) { - - // Add tailing `\n` if not exists - if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && - input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { - input += '\n'; - } - - // Strip BOM - if (input.charCodeAt(0) === 0xFEFF) { - input = input.slice(1); - } - } - - var state = new State(input, options); - - var nullpos = input.indexOf('\0'); - - if (nullpos !== -1) { - state.position = nullpos; - throwError(state, 'null byte is not allowed in input'); - } - - // Use 0 as string terminator. That significantly simplifies bounds check. - state.input += '\0'; - - while (state.input.charCodeAt(state.position) === 0x20/* Space */) { - state.lineIndent += 1; - state.position += 1; - } - - while (state.position < (state.length - 1)) { - readDocument(state); - } - - return state.documents; -} - - -function loadAll(input, iterator, options) { - if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') { - options = iterator; - iterator = null; - } - - var documents = loadDocuments(input, options); - - if (typeof iterator !== 'function') { - return documents; - } - - for (var index = 0, length = documents.length; index < length; index += 1) { - iterator(documents[index]); - } -} - - -function load(input, options) { - var documents = loadDocuments(input, options); - - if (documents.length === 0) { - /*eslint-disable no-undefined*/ - return undefined; - } else if (documents.length === 1) { - return documents[0]; - } - throw new YAMLException('expected a single document in the stream, but found more'); -} - - -function safeLoadAll(input, iterator, options) { - if (typeof iterator === 'object' && iterator !== null && typeof options === 'undefined') { - options = iterator; - iterator = null; - } - - return loadAll(input, iterator, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); -} - - -function safeLoad(input, options) { - return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); -} - - -module.exports.loadAll = loadAll; -module.exports.load = load; -module.exports.safeLoadAll = safeLoadAll; -module.exports.safeLoad = safeLoad; - - -/***/ }), -/* 458 */, -/* 459 */, -/* 460 */, -/* 461 */, -/* 462 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; + else if (force === undefined || force === false) { + /** + * 5. Otherwise, if force is not given or is false, remove an attribute + * given qualifiedName and the context object, and then return false. + */ + algorithm_1.element_removeAnAttributeByName(qualifiedName, this); + return false; } + /** + * 6. Return true. + */ + return true; }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); + /** @inheritdoc */ + ElementImpl.prototype.hasAttributeNS = function (namespace, localName) { + /** + * 1. If namespace is the empty string, set it to null. + * 2. Return true if the context object has an attribute whose namespace is + * namespace and local name is localName, and false otherwise. + */ + var ns = namespace || null; + for (var i = 0; i < this._attributeList.length; i++) { + var attr = this._attributeList[i]; + if (attr._namespace === ns && attr._localName === localName) { + return true; + } } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spread = (this && this.__spread) || function () { - for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); - return ar; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(970); -var LocalNameSet_1 = __webpack_require__(575); -var NamespacePrefixMap_1 = __webpack_require__(392); -var infra_1 = __webpack_require__(23); -var algorithm_1 = __webpack_require__(163); -/** - * Pre-serializes XML nodes. - */ -var BaseWriter = /** @class */ (function () { - /** - * Initializes a new instance of `BaseWriter`. - * - * @param builderOptions - XML builder options - */ - function BaseWriter(builderOptions) { + return false; + }; + /** @inheritdoc */ + ElementImpl.prototype.getAttributeNode = function (qualifiedName) { /** - * Gets the current depth of the XML tree. + * The getAttributeNode(qualifiedName) method, when invoked, must return the + * result of getting an attribute given qualifiedName and context object. */ - this.level = 0; - this._builderOptions = builderOptions; - } - /** - * Used by derived classes to serialize the XML declaration. - * - * @param version - a version number string - * @param encoding - encoding declaration - * @param standalone - standalone document declaration - */ - BaseWriter.prototype.declaration = function (version, encoding, standalone) { }; - /** - * Used by derived classes to serialize a DocType node. - * - * @param name - node name - * @param publicId - public identifier - * @param systemId - system identifier - */ - BaseWriter.prototype.docType = function (name, publicId, systemId) { }; - /** - * Used by derived classes to serialize a comment node. - * - * @param data - node data - */ - BaseWriter.prototype.comment = function (data) { }; - /** - * Used by derived classes to serialize a text node. - * - * @param data - node data - */ - BaseWriter.prototype.text = function (data) { }; - /** - * Used by derived classes to serialize a processing instruction node. - * - * @param target - instruction target - * @param data - node data - */ - BaseWriter.prototype.instruction = function (target, data) { }; - /** - * Used by derived classes to serialize a CData section node. - * - * @param data - node data - */ - BaseWriter.prototype.cdata = function (data) { }; - /** - * Used by derived classes to serialize the beginning of the opening tag of an - * element node. - * - * @param name - node name - */ - BaseWriter.prototype.openTagBegin = function (name) { }; - /** - * Used by derived classes to serialize the ending of the opening tag of an - * element node. - * - * @param name - node name - * @param selfClosing - whether the element node is self closing - * @param voidElement - whether the element node is a HTML void element - */ - BaseWriter.prototype.openTagEnd = function (name, selfClosing, voidElement) { }; - /** - * Used by derived classes to serialize the closing tag of an element node. - * - * @param name - node name - */ - BaseWriter.prototype.closeTag = function (name) { }; - /** - * Used by derived classes to serialize attributes or namespace declarations. - * - * @param attributes - attribute array - */ - BaseWriter.prototype.attributes = function (attributes) { - var e_1, _a; - try { - for (var attributes_1 = __values(attributes), attributes_1_1 = attributes_1.next(); !attributes_1_1.done; attributes_1_1 = attributes_1.next()) { - var attr = attributes_1_1.value; - this.attribute(attr[1] === null ? attr[2] : attr[1] + ':' + attr[2], attr[3]); + return algorithm_1.element_getAnAttributeByName(qualifiedName, this); + }; + /** @inheritdoc */ + ElementImpl.prototype.getAttributeNodeNS = function (namespace, localName) { + /** + * The getAttributeNodeNS(namespace, localName) method, when invoked, must + * return the result of getting an attribute given namespace, localName, and + * the context object. + */ + return algorithm_1.element_getAnAttributeByNamespaceAndLocalName(namespace, localName, this); + }; + /** @inheritdoc */ + ElementImpl.prototype.setAttributeNode = function (attr) { + /** + * The setAttributeNode(attr) and setAttributeNodeNS(attr) methods, when + * invoked, must return the result of setting an attribute given attr and + * the context object. + */ + return algorithm_1.element_setAnAttribute(attr, this); + }; + /** @inheritdoc */ + ElementImpl.prototype.setAttributeNodeNS = function (attr) { + return algorithm_1.element_setAnAttribute(attr, this); + }; + /** @inheritdoc */ + ElementImpl.prototype.removeAttributeNode = function (attr) { + /** + * 1. If context object’s attribute list does not contain attr, then throw + * a "NotFoundError" DOMException. + * 2. Remove attr from context object. + * 3. Return attr. + */ + var found = false; + for (var i = 0; i < this._attributeList.length; i++) { + var attribute = this._attributeList[i]; + if (attribute === attr) { + found = true; + break; } } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (attributes_1_1 && !attributes_1_1.done && (_a = attributes_1.return)) _a.call(attributes_1); + if (!found) + throw new DOMException_1.NotFoundError(); + algorithm_1.element_remove(attr, this); + return attr; + }; + /** @inheritdoc */ + ElementImpl.prototype.attachShadow = function (init) { + /** + * 1. If context object’s namespace is not the HTML namespace, then throw a + * "NotSupportedError" DOMException. + */ + if (this._namespace !== infra_1.namespace.HTML) + throw new DOMException_1.NotSupportedError(); + /** + * 2. If context object’s local name is not a valid custom element name, + * "article", "aside", "blockquote", "body", "div", "footer", "h1", "h2", + * "h3", "h4", "h5", "h6", "header", "main" "nav", "p", "section", + * or "span", then throw a "NotSupportedError" DOMException. + */ + if (!algorithm_1.customElement_isValidCustomElementName(this._localName) && + !algorithm_1.customElement_isValidShadowHostName(this._localName)) + throw new DOMException_1.NotSupportedError(); + /** + * 3. If context object’s local name is a valid custom element name, + * or context object’s is value is not null, then: + * 3.1. Let definition be the result of looking up a custom element + * definition given context object’s node document, its namespace, its + * local name, and its is value. + * 3.2. If definition is not null and definition’s disable shadow is true, + * then throw a "NotSupportedError" DOMException. + */ + if (algorithm_1.customElement_isValidCustomElementName(this._localName) || this._is !== null) { + var definition = algorithm_1.customElement_lookUpACustomElementDefinition(this._nodeDocument, this._namespace, this._localName, this._is); + if (definition !== null && definition.disableShadow === true) { + throw new DOMException_1.NotSupportedError(); } - finally { if (e_1) throw e_1.error; } } + /** + * 4. If context object is a shadow host, then throw an "NotSupportedError" + * DOMException. + */ + if (this._shadowRoot !== null) + throw new DOMException_1.NotSupportedError(); + /** + * 5. Let shadow be a new shadow root whose node document is context + * object’s node document, host is context object, and mode is init’s mode. + * 6. Set context object’s shadow root to shadow. + * 7. Return shadow. + */ + var shadow = algorithm_1.create_shadowRoot(this._nodeDocument, this); + shadow._mode = init.mode; + this._shadowRoot = shadow; + return shadow; }; - /** - * Used by derived classes to serialize an attribute or namespace declaration. - * - * @param name - node name - * @param value - node value - */ - BaseWriter.prototype.attribute = function (name, value) { }; - /** - * Used by derived classes to perform any pre-processing steps before starting - * serializing an element node. - * - * @param name - node name - */ - BaseWriter.prototype.beginElement = function (name) { }; - /** - * Used by derived classes to perform any post-processing steps after - * completing serializing an element node. - * - * @param name - node name - */ - BaseWriter.prototype.endElement = function (name) { }; - /** - * Produces an XML serialization of the given node. The pre-serializer inserts - * namespace declarations where necessary and produces qualified names for - * nodes and attributes. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance - */ - BaseWriter.prototype.serializeNode = function (node, requireWellFormed, noDoubleEncoding) { - var hasNamespaces = (node._nodeDocument !== undefined && node._nodeDocument._hasNamespaces); - this.level = 0; - this.currentNode = node; - if (hasNamespaces) { - /** From: https://w3c.github.io/DOM-Parsing/#xml-serialization - * - * 1. Let namespace be a context namespace with value null. - * The context namespace tracks the XML serialization algorithm's current - * default namespace. The context namespace is changed when either an Element - * Node has a default namespace declaration, or the algorithm generates a - * default namespace declaration for the Element Node to match its own - * namespace. The algorithm assumes no namespace (null) to start. - * 2. Let prefix map be a new namespace prefix map. - * 3. Add the XML namespace with prefix value "xml" to prefix map. - * 4. Let prefix index be a generated namespace prefix index with value 1. - * The generated namespace prefix index is used to generate a new unique - * prefix value when no suitable existing namespace prefix is available to - * serialize a node's namespaceURI (or the namespaceURI of one of node's - * attributes). See the generate a prefix algorithm. + Object.defineProperty(ElementImpl.prototype, "shadowRoot", { + /** @inheritdoc */ + get: function () { + /** + * 1. Let shadow be context object’s shadow root. + * 2. If shadow is null or its mode is "closed", then return null. + * 3. Return shadow. */ - var namespace = null; - var prefixMap = new NamespacePrefixMap_1.NamespacePrefixMap(); - prefixMap.set("xml", infra_1.namespace.XML); - var prefixIndex = { value: 1 }; + var shadow = this._shadowRoot; + if (shadow === null || shadow.mode === "closed") + return null; + else + return shadow; + }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + ElementImpl.prototype.closest = function (selectors) { + /** + * TODO: Selectors + * 1. Let s be the result of parse a selector from selectors. [SELECTORS4] + * 2. If s is failure, throw a "SyntaxError" DOMException. + * 3. Let elements be context object’s inclusive ancestors that are + * elements, in reverse tree order. + * 4. For each element in elements, if match a selector against an element, + * using s, element, and :scope element context object, returns success, + * return element. [SELECTORS4] + * 5. Return null. + */ + throw new DOMException_1.NotImplementedError(); + }; + /** @inheritdoc */ + ElementImpl.prototype.matches = function (selectors) { + /** + * TODO: Selectors + * 1. Let s be the result of parse a selector from selectors. [SELECTORS4] + * 2. If s is failure, throw a "SyntaxError" DOMException. + * 3. Return true if the result of match a selector against an element, + * using s, element, and :scope element context object, returns success, + * and false otherwise. [SELECTORS4] + */ + throw new DOMException_1.NotImplementedError(); + }; + /** @inheritdoc */ + ElementImpl.prototype.webkitMatchesSelector = function (selectors) { + return this.matches(selectors); + }; + /** @inheritdoc */ + ElementImpl.prototype.getElementsByTagName = function (qualifiedName) { + /** + * The getElementsByTagName(qualifiedName) method, when invoked, must return + * the list of elements with qualified name qualifiedName for context + * object. + */ + return algorithm_1.node_listOfElementsWithQualifiedName(qualifiedName, this); + }; + /** @inheritdoc */ + ElementImpl.prototype.getElementsByTagNameNS = function (namespace, localName) { + /** + * The getElementsByTagNameNS(namespace, localName) method, when invoked, + * must return the list of elements with namespace namespace and local name + * localName for context object. + */ + return algorithm_1.node_listOfElementsWithNamespace(namespace, localName, this); + }; + /** @inheritdoc */ + ElementImpl.prototype.getElementsByClassName = function (classNames) { + /** + * The getElementsByClassName(classNames) method, when invoked, must return + * the list of elements with class names classNames for context object. + */ + return algorithm_1.node_listOfElementsWithClassNames(classNames, this); + }; + /** @inheritdoc */ + ElementImpl.prototype.insertAdjacentElement = function (where, element) { + /** + * The insertAdjacentElement(where, element) method, when invoked, must + * return the result of running insert adjacent, given context object, + * where, and element. + */ + return algorithm_1.element_insertAdjacent(this, where, element); + }; + /** @inheritdoc */ + ElementImpl.prototype.insertAdjacentText = function (where, data) { + /** + * 1. Let text be a new Text node whose data is data and node document is + * context object’s node document. + * 2. Run insert adjacent, given context object, where, and text. + */ + var text = algorithm_1.create_text(this._nodeDocument, data); + algorithm_1.element_insertAdjacent(this, where, text); + }; + Object.defineProperty(ElementImpl.prototype, "_qualifiedName", { + /** + * Returns the qualified name. + */ + get: function () { /** - * 5. Return the result of running the XML serialization algorithm on node - * passing the context namespace namespace, namespace prefix map prefix map, - * generated namespace prefix index reference to prefix index, and the - * flag require well-formed. If an exception occurs during the execution - * of the algorithm, then catch that exception and throw an - * "InvalidStateError" DOMException. + * An element’s qualified name is its local name if its namespace prefix is + * null, and its namespace prefix, followed by ":", followed by its + * local name, otherwise. */ - this._serializeNodeNS(node, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding); + return (this._namespacePrefix ? + this._namespacePrefix + ':' + this._localName : + this._localName); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ElementImpl.prototype, "_htmlUppercasedQualifiedName", { + /** + * Returns the upper-cased qualified name for a html element. + */ + get: function () { + /** + * 1. Let qualifiedName be context object’s qualified name. + * 2. If the context object is in the HTML namespace and its node document + * is an HTML document, then set qualifiedName to qualifiedName in ASCII + * uppercase. + * 3. Return qualifiedName. + */ + var qualifiedName = this._qualifiedName; + if (this._namespace === infra_1.namespace.HTML && this._nodeDocument._type === "html") { + qualifiedName = qualifiedName.toUpperCase(); + } + return qualifiedName; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ElementImpl.prototype, "children", { + // MIXIN: ParentNode + /* istanbul ignore next */ + get: function () { throw new Error("Mixin: ParentNode not implemented."); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ElementImpl.prototype, "firstElementChild", { + /* istanbul ignore next */ + get: function () { throw new Error("Mixin: ParentNode not implemented."); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ElementImpl.prototype, "lastElementChild", { + /* istanbul ignore next */ + get: function () { throw new Error("Mixin: ParentNode not implemented."); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ElementImpl.prototype, "childElementCount", { + /* istanbul ignore next */ + get: function () { throw new Error("Mixin: ParentNode not implemented."); }, + enumerable: true, + configurable: true + }); + /* istanbul ignore next */ + ElementImpl.prototype.prepend = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; } - else { - this._serializeNode(node, requireWellFormed, noDoubleEncoding); + throw new Error("Mixin: ParentNode not implemented."); + }; + /* istanbul ignore next */ + ElementImpl.prototype.append = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; } + throw new Error("Mixin: ParentNode not implemented."); }; - /** - * Produces an XML serialization of a node. - * - * @param node - node to serialize - * @param namespace - context namespace - * @param prefixMap - namespace prefix map - * @param prefixIndex - generated namespace prefix index - * @param requireWellFormed - whether to check conformance - */ - BaseWriter.prototype._serializeNodeNS = function (node, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding) { - this.currentNode = node; - switch (node.nodeType) { - case interfaces_1.NodeType.Element: - this._serializeElementNS(node, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding); - break; - case interfaces_1.NodeType.Document: - this._serializeDocumentNS(node, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding); - break; - case interfaces_1.NodeType.Comment: - this._serializeComment(node, requireWellFormed, noDoubleEncoding); - break; - case interfaces_1.NodeType.Text: - this._serializeText(node, requireWellFormed, noDoubleEncoding); - break; - case interfaces_1.NodeType.DocumentFragment: - this._serializeDocumentFragmentNS(node, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding); - break; - case interfaces_1.NodeType.DocumentType: - this._serializeDocumentType(node, requireWellFormed, noDoubleEncoding); - break; - case interfaces_1.NodeType.ProcessingInstruction: - this._serializeProcessingInstruction(node, requireWellFormed, noDoubleEncoding); - break; - case interfaces_1.NodeType.CData: - this._serializeCData(node, requireWellFormed, noDoubleEncoding); - break; - default: - throw new Error("Unknown node type: " + node.nodeType); + /* istanbul ignore next */ + ElementImpl.prototype.querySelector = function (selectors) { throw new Error("Mixin: ParentNode not implemented."); }; + /* istanbul ignore next */ + ElementImpl.prototype.querySelectorAll = function (selectors) { throw new Error("Mixin: ParentNode not implemented."); }; + Object.defineProperty(ElementImpl.prototype, "previousElementSibling", { + // MIXIN: NonDocumentTypeChildNode + /* istanbul ignore next */ + get: function () { throw new Error("Mixin: NonDocumentTypeChildNode not implemented."); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ElementImpl.prototype, "nextElementSibling", { + /* istanbul ignore next */ + get: function () { throw new Error("Mixin: NonDocumentTypeChildNode not implemented."); }, + enumerable: true, + configurable: true + }); + // MIXIN: ChildNode + /* istanbul ignore next */ + ElementImpl.prototype.before = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; + } + throw new Error("Mixin: ChildNode not implemented."); + }; + /* istanbul ignore next */ + ElementImpl.prototype.after = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; + } + throw new Error("Mixin: ChildNode not implemented."); + }; + /* istanbul ignore next */ + ElementImpl.prototype.replaceWith = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; } + throw new Error("Mixin: ChildNode not implemented."); }; + /* istanbul ignore next */ + ElementImpl.prototype.remove = function () { throw new Error("Mixin: ChildNode not implemented."); }; + Object.defineProperty(ElementImpl.prototype, "assignedSlot", { + // MIXIN: Slotable + /* istanbul ignore next */ + get: function () { throw new Error("Mixin: Slotable not implemented."); }, + enumerable: true, + configurable: true + }); /** - * Produces an XML serialization of a node. + * Creates a new `Element`. * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance + * @param document - owner document + * @param localName - local name + * @param namespace - namespace + * @param prefix - namespace prefix */ - BaseWriter.prototype._serializeNode = function (node, requireWellFormed, noDoubleEncoding) { - this.currentNode = node; - switch (node.nodeType) { - case interfaces_1.NodeType.Element: - this._serializeElement(node, requireWellFormed, noDoubleEncoding); - break; - case interfaces_1.NodeType.Document: - this._serializeDocument(node, requireWellFormed, noDoubleEncoding); - break; - case interfaces_1.NodeType.Comment: - this._serializeComment(node, requireWellFormed, noDoubleEncoding); - break; - case interfaces_1.NodeType.Text: - this._serializeText(node, requireWellFormed, noDoubleEncoding); - break; - case interfaces_1.NodeType.DocumentFragment: - this._serializeDocumentFragment(node, requireWellFormed, noDoubleEncoding); - break; - case interfaces_1.NodeType.DocumentType: - this._serializeDocumentType(node, requireWellFormed, noDoubleEncoding); - break; - case interfaces_1.NodeType.ProcessingInstruction: - this._serializeProcessingInstruction(node, requireWellFormed, noDoubleEncoding); - break; - case interfaces_1.NodeType.CData: - this._serializeCData(node, requireWellFormed, noDoubleEncoding); - break; - default: - throw new Error("Unknown node type: " + node.nodeType); - } + ElementImpl._create = function (document, localName, namespace, namespacePrefix) { + if (namespace === void 0) { namespace = null; } + if (namespacePrefix === void 0) { namespacePrefix = null; } + var node = new ElementImpl(); + node._localName = localName; + node._namespace = namespace; + node._namespacePrefix = namespacePrefix; + node._nodeDocument = document; + return node; }; + return ElementImpl; +}(NodeImpl_1.NodeImpl)); +exports.ElementImpl = ElementImpl; +/** + * Initialize prototype properties + */ +WebIDLAlgorithm_1.idl_defineConst(ElementImpl.prototype, "_nodeType", interfaces_1.NodeType.Element); +//# sourceMappingURL=ElementImpl.js.map + +/***/ }), + +/***/ 8245: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7305); +var algorithm_1 = __nccwpck_require__(61); +var WebIDLAlgorithm_1 = __nccwpck_require__(5457); +/** + * Represents a DOM event. + */ +var EventImpl = /** @class */ (function () { /** - * Produces an XML serialization of an element node. - * - * @param node - node to serialize - * @param namespace - context namespace - * @param prefixMap - namespace prefix map - * @param prefixIndex - generated namespace prefix index - * @param requireWellFormed - whether to check conformance + * Initializes a new instance of `Event`. */ - BaseWriter.prototype._serializeElementNS = function (node, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding) { - var e_2, _a; - var attributes = []; + function EventImpl(type, eventInit) { + this._target = null; + this._relatedTarget = null; + this._touchTargetList = []; + this._path = []; + this._currentTarget = null; + this._eventPhase = interfaces_1.EventPhase.None; + this._stopPropagationFlag = false; + this._stopImmediatePropagationFlag = false; + this._canceledFlag = false; + this._inPassiveListenerFlag = false; + this._composedFlag = false; + this._initializedFlag = false; + this._dispatchFlag = false; + this._isTrusted = false; + this._bubbles = false; + this._cancelable = false; /** - * From: https://w3c.github.io/DOM-Parsing/#xml-serializing-an-element-node - * - * 1. If the require well-formed flag is set (its value is true), and this - * node's localName attribute contains the character ":" (U+003A COLON) or - * does not match the XML Name production, then throw an exception; the - * serialization of this node would not be a well-formed element. + * When a constructor of the Event interface, or of an interface that + * inherits from the Event interface, is invoked, these steps must be run, + * given the arguments type and eventInitDict: + * 1. Let event be the result of running the inner event creation steps with + * this interface, null, now, and eventInitDict. + * 2. Initialize event’s type attribute to type. + * 3. Return event. */ - if (requireWellFormed && (node.localName.indexOf(":") !== -1 || - !algorithm_1.xml_isName(node.localName))) { - throw new Error("Node local name contains invalid characters (well-formed required)."); + this._type = type; + if (eventInit) { + this._bubbles = eventInit.bubbles || false; + this._cancelable = eventInit.cancelable || false; + this._composedFlag = eventInit.composed || false; } + this._initializedFlag = true; + this._timeStamp = new Date().getTime(); + } + Object.defineProperty(EventImpl.prototype, "type", { + /** @inheritdoc */ + get: function () { return this._type; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventImpl.prototype, "target", { + /** @inheritdoc */ + get: function () { return this._target; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventImpl.prototype, "srcElement", { + /** @inheritdoc */ + get: function () { return this._target; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventImpl.prototype, "currentTarget", { + /** @inheritdoc */ + get: function () { return this._currentTarget; }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + EventImpl.prototype.composedPath = function () { /** - * 2. Let markup be the string "<" (U+003C LESS-THAN SIGN). - * 3. Let qualified name be an empty string. - * 4. Let skip end tag be a boolean flag with value false. - * 5. Let ignore namespace definition attribute be a boolean flag with value - * false. - * 6. Given prefix map, copy a namespace prefix map and let map be the - * result. - * 7. Let local prefixes map be an empty map. The map has unique Node prefix - * strings as its keys, with corresponding namespaceURI Node values as the - * map's key values (in this map, the null namespace is represented by the - * empty string). - * - * _Note:_ This map is local to each element. It is used to ensure there - * are no conflicting prefixes should a new namespace prefix attribute need - * to be generated. It is also used to enable skipping of duplicate prefix - * definitions when writing an element's attributes: the map allows the - * algorithm to distinguish between a prefix in the namespace prefix map - * that might be locally-defined (to the current Element) and one that is - * not. - * 8. Let local default namespace be the result of recording the namespace - * information for node given map and local prefixes map. - * - * _Note:_ The above step will update map with any found namespace prefix - * definitions, add the found prefix definitions to the local prefixes map - * and return a local default namespace value defined by a default namespace - * attribute if one exists. Otherwise it returns null. - * 9. Let inherited ns be a copy of namespace. - * 10. Let ns be the value of node's namespaceURI attribute. + * 1. Let composedPath be an empty list. + * 2. Let path be the context object’s path. + * 3. If path is empty, then return composedPath. + * 4. Let currentTarget be the context object’s currentTarget attribute + * value. + * 5. Append currentTarget to composedPath. + * 6. Let currentTargetIndex be 0. + * 7. Let currentTargetHiddenSubtreeLevel be 0. */ - var qualifiedName = ''; - var skipEndTag = false; - var ignoreNamespaceDefinitionAttribute = false; - var map = prefixMap.copy(); - var localPrefixesMap = {}; - var localDefaultNamespace = this._recordNamespaceInformation(node, map, localPrefixesMap); - var inheritedNS = namespace; - var ns = node.namespaceURI; - /** 11. If inherited ns is equal to ns, then: */ - if (inheritedNS === ns) { - /** - * 11.1. If local default namespace is not null, then set ignore - * namespace definition attribute to true. - */ - if (localDefaultNamespace !== null) { - ignoreNamespaceDefinitionAttribute = true; - } + var composedPath = []; + var path = this._path; + if (path.length === 0) + return composedPath; + var currentTarget = this._currentTarget; + if (currentTarget === null) { + throw new Error("Event currentTarget is null."); + } + composedPath.push(currentTarget); + var currentTargetIndex = 0; + var currentTargetHiddenSubtreeLevel = 0; + /** + * 8. Let index be path’s size − 1. + * 9. While index is greater than or equal to 0: + */ + var index = path.length - 1; + while (index >= 0) { /** - * 11.2. If ns is the XML namespace, then append to qualified name the - * concatenation of the string "xml:" and the value of node's localName. - * 11.3. Otherwise, append to qualified name the value of node's - * localName. The node's prefix if it exists, is dropped. + * 9.1. If path[index]'s root-of-closed-tree is true, then increase + * currentTargetHiddenSubtreeLevel by 1. + * 9.2. If path[index]'s invocation target is currentTarget, then set + * currentTargetIndex to index and break. + * 9.3. If path[index]'s slot-in-closed-tree is true, then decrease + * currentTargetHiddenSubtreeLevel by 1. + * 9.4. Decrease index by 1. */ - if (ns === infra_1.namespace.XML) { - qualifiedName = 'xml:' + node.localName; + if (path[index].rootOfClosedTree) { + currentTargetHiddenSubtreeLevel++; } - else { - qualifiedName = node.localName; + if (path[index].invocationTarget === currentTarget) { + currentTargetIndex = index; + break; } - /** 11.4. Append the value of qualified name to markup. */ - this.beginElement(qualifiedName); - this.openTagBegin(qualifiedName); + if (path[index].slotInClosedTree) { + currentTargetHiddenSubtreeLevel--; + } + index--; } - else { - /** - * 12. Otherwise, inherited ns is not equal to ns (the node's own - * namespace is different from the context namespace of its parent). - * Run these sub-steps: - * - * 12.1. Let prefix be the value of node's prefix attribute. - * 12.2. Let candidate prefix be the result of retrieving a preferred - * prefix string prefix from map given namespace ns. The above may return - * null if no namespace key ns exists in map. - */ - var prefix = node.prefix; + /** + * 10. Let currentHiddenLevel and maxHiddenLevel be + * currentTargetHiddenSubtreeLevel. + */ + var currentHiddenLevel = currentTargetHiddenSubtreeLevel; + var maxHiddenLevel = currentTargetHiddenSubtreeLevel; + /** + * 11. Set index to currentTargetIndex − 1. + * 12. While index is greater than or equal to 0: + */ + index = currentTargetIndex - 1; + while (index >= 0) { /** - * We don't need to run "retrieving a preferred prefix string" algorithm if - * the element has no prefix and its namespace matches to the default - * namespace. - * See: https://github.com/web-platform-tests/wpt/pull/16703 + * 12.1. If path[index]'s root-of-closed-tree is true, then increase + * currentHiddenLevel by 1. + * 12.2. If currentHiddenLevel is less than or equal to maxHiddenLevel, + * then prepend path[index]'s invocation target to composedPath. */ - var candidatePrefix = null; - if (prefix !== null || ns !== localDefaultNamespace) { - candidatePrefix = map.get(prefix, ns); + if (path[index].rootOfClosedTree) { + currentHiddenLevel++; + } + if (currentHiddenLevel <= maxHiddenLevel) { + composedPath.unshift(path[index].invocationTarget); } /** - * 12.3. If the value of prefix matches "xmlns", then run the following - * steps: + * 12.3. If path[index]'s slot-in-closed-tree is true, then: */ - if (prefix === "xmlns") { + if (path[index].slotInClosedTree) { /** - * 12.3.1. If the require well-formed flag is set, then throw an error. - * An Element with prefix "xmlns" will not legally round-trip in a - * conforming XML parser. + * 12.3.1. Decrease currentHiddenLevel by 1. + * 12.3.2. If currentHiddenLevel is less than maxHiddenLevel, then set + * maxHiddenLevel to currentHiddenLevel. */ - if (requireWellFormed) { - throw new Error("An element cannot have the 'xmlns' prefix (well-formed required)."); + currentHiddenLevel--; + if (currentHiddenLevel < maxHiddenLevel) { + maxHiddenLevel = currentHiddenLevel; } - /** - * 12.3.2. Let candidate prefix be the value of prefix. - */ - candidatePrefix = prefix; } /** - * 12.4.Found a suitable namespace prefix: if candidate prefix is not - * null (a namespace prefix is defined which maps to ns), then: + * 12.4. Decrease index by 1. */ - if (candidatePrefix !== null) { - /** - * The following may serialize a different prefix than the Element's - * existing prefix if it already had one. However, the retrieving a - * preferred prefix string algorithm already tried to match the - * existing prefix if possible. - * - * 12.4.1. Append to qualified name the concatenation of candidate - * prefix, ":" (U+003A COLON), and node's localName. There exists on - * this node or the node's ancestry a namespace prefix definition that - * defines the node's namespace. - * 12.4.2. If the local default namespace is not null (there exists a - * locally-defined default namespace declaration attribute) and its - * value is not the XML namespace, then let inherited ns get the value - * of local default namespace unless the local default namespace is the - * empty string in which case let it get null (the context namespace - * is changed to the declared default, rather than this node's own - * namespace). - * - * _Note:_ Any default namespace definitions or namespace prefixes that - * define the XML namespace are omitted when serializing this node's - * attributes. - */ - qualifiedName = candidatePrefix + ':' + node.localName; - if (localDefaultNamespace !== null && localDefaultNamespace !== infra_1.namespace.XML) { - inheritedNS = localDefaultNamespace || null; - } - /** - * 12.4.3. Append the value of qualified name to markup. - */ - this.beginElement(qualifiedName); - this.openTagBegin(qualifiedName); - /** 12.5. Otherwise, if prefix is not null, then: */ + index--; + } + /** + * 13. Set currentHiddenLevel and maxHiddenLevel to + * currentTargetHiddenSubtreeLevel. + */ + currentHiddenLevel = currentTargetHiddenSubtreeLevel; + maxHiddenLevel = currentTargetHiddenSubtreeLevel; + /** + * 14. Set index to currentTargetIndex + 1. + * 15. While index is less than path’s size: + */ + index = currentTargetIndex + 1; + while (index < path.length) { + /** + * 15.1. If path[index]'s slot-in-closed-tree is true, then increase + * currentHiddenLevel by 1. + * 15.2. If currentHiddenLevel is less than or equal to maxHiddenLevel, + * then append path[index]'s invocation target to composedPath. + */ + if (path[index].slotInClosedTree) { + currentHiddenLevel++; } - else if (prefix !== null) { - /** - * _Note:_ By this step, there is no namespace or prefix mapping - * declaration in this node (or any parent node visited by this - * algorithm) that defines prefix otherwise the step labelled Found - * a suitable namespace prefix would have been followed. The sub-steps - * that follow will create a new namespace prefix declaration for prefix - * and ensure that prefix does not conflict with an existing namespace - * prefix declaration of the same localName in node's attribute list. - * - * 12.5.1. If the local prefixes map contains a key matching prefix, - * then let prefix be the result of generating a prefix providing as - * input map, ns, and prefix index. - */ - if (prefix in localPrefixesMap) { - prefix = this._generatePrefix(ns, map, prefixIndex); - } - /** - * 12.5.2. Add prefix to map given namespace ns. - * 12.5.3. Append to qualified name the concatenation of prefix, ":" - * (U+003A COLON), and node's localName. - * 12.5.4. Append the value of qualified name to markup. - */ - map.set(prefix, ns); - qualifiedName += prefix + ':' + node.localName; - this.beginElement(qualifiedName); - this.openTagBegin(qualifiedName); - /** - * 12.5.5. Append the following to markup, in the order listed: - * - * _Note:_ The following serializes a namespace prefix declaration for - * prefix which was just added to the map. - * - * 12.5.5.1. " " (U+0020 SPACE); - * 12.5.5.2. The string "xmlns:"; - * 12.5.5.3. The value of prefix; - * 12.5.5.4. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); - * 12.5.5.5. The result of serializing an attribute value given ns and - * the require well-formed flag as input; - * 12.5.5.6. """ (U+0022 QUOTATION MARK). - */ - attributes.push([null, 'xmlns', prefix, - this._serializeAttributeValue(ns, requireWellFormed, noDoubleEncoding)]); - /** - * 12.5.5.7. If local default namespace is not null (there exists a - * locally-defined default namespace declaration attribute), then - * let inherited ns get the value of local default namespace unless the - * local default namespace is the empty string in which case let it get - * null. - */ - if (localDefaultNamespace !== null) { - inheritedNS = localDefaultNamespace || null; - } - /** - * 12.6. Otherwise, if local default namespace is null, or local - * default namespace is not null and its value is not equal to ns, then: - */ + if (currentHiddenLevel <= maxHiddenLevel) { + composedPath.push(path[index].invocationTarget); } - else if (localDefaultNamespace === null || - (localDefaultNamespace !== null && localDefaultNamespace !== ns)) { - /** - * _Note:_ At this point, the namespace for this node still needs to be - * serialized, but there's no prefix (or candidate prefix) available; the - * following uses the default namespace declaration to define the - * namespace--optionally replacing an existing default declaration - * if present. - * - * 12.6.1. Set the ignore namespace definition attribute flag to true. - * 12.6.2. Append to qualified name the value of node's localName. - * 12.6.3. Let the value of inherited ns be ns. - * - * _Note:_ The new default namespace will be used in the serialization - * to define this node's namespace and act as the context namespace for - * its children. - */ - ignoreNamespaceDefinitionAttribute = true; - qualifiedName += node.localName; - inheritedNS = ns; - /** - * 12.6.4. Append the value of qualified name to markup. - */ - this.beginElement(qualifiedName); - this.openTagBegin(qualifiedName); - /** - * 12.6.5. Append the following to markup, in the order listed: - * - * _Note:_ The following serializes the new (or replacement) default - * namespace definition. - * - * 12.6.5.1. " " (U+0020 SPACE); - * 12.6.5.2. The string "xmlns"; - * 12.6.5.3. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); - * 12.6.5.4. The result of serializing an attribute value given ns - * and the require well-formed flag as input; - * 12.6.5.5. """ (U+0022 QUOTATION MARK). - */ - attributes.push([null, null, 'xmlns', - this._serializeAttributeValue(ns, requireWellFormed, noDoubleEncoding)]); + /** + * 15.3. If path[index]'s root-of-closed-tree is true, then: + */ + if (path[index].rootOfClosedTree) { /** - * 12.7. Otherwise, the node has a local default namespace that matches - * ns. Append to qualified name the value of node's localName, let the - * value of inherited ns be ns, and append the value of qualified name - * to markup. + * 15.3.1. Decrease currentHiddenLevel by 1. + * 15.3.2. If currentHiddenLevel is less than maxHiddenLevel, then set + * maxHiddenLevel to currentHiddenLevel. */ + currentHiddenLevel--; + if (currentHiddenLevel < maxHiddenLevel) { + maxHiddenLevel = currentHiddenLevel; + } } - else { - qualifiedName += node.localName; - inheritedNS = ns; - this.beginElement(qualifiedName); - this.openTagBegin(qualifiedName); - } + /** + * 15.4. Increase index by 1. + */ + index++; } /** - * 13. Append to markup the result of the XML serialization of node's - * attributes given map, prefix index, local prefixes map, ignore namespace - * definition attribute flag, and require well-formed flag. + * 16. Return composedPath. */ - attributes.push.apply(attributes, __spread(this._serializeAttributesNS(node, map, prefixIndex, localPrefixesMap, ignoreNamespaceDefinitionAttribute, requireWellFormed, noDoubleEncoding))); - this.attributes(attributes); + return composedPath; + }; + Object.defineProperty(EventImpl.prototype, "eventPhase", { + /** @inheritdoc */ + get: function () { return this._eventPhase; }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + EventImpl.prototype.stopPropagation = function () { this._stopPropagationFlag = true; }; + Object.defineProperty(EventImpl.prototype, "cancelBubble", { + /** @inheritdoc */ + get: function () { return this._stopPropagationFlag; }, + set: function (value) { if (value) + this.stopPropagation(); }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + EventImpl.prototype.stopImmediatePropagation = function () { + this._stopPropagationFlag = true; + this._stopImmediatePropagationFlag = true; + }; + Object.defineProperty(EventImpl.prototype, "bubbles", { + /** @inheritdoc */ + get: function () { return this._bubbles; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventImpl.prototype, "cancelable", { + /** @inheritdoc */ + get: function () { return this._cancelable; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventImpl.prototype, "returnValue", { + /** @inheritdoc */ + get: function () { return !this._canceledFlag; }, + set: function (value) { + if (!value) { + algorithm_1.event_setTheCanceledFlag(this); + } + }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + EventImpl.prototype.preventDefault = function () { + algorithm_1.event_setTheCanceledFlag(this); + }; + Object.defineProperty(EventImpl.prototype, "defaultPrevented", { + /** @inheritdoc */ + get: function () { return this._canceledFlag; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventImpl.prototype, "composed", { + /** @inheritdoc */ + get: function () { return this._composedFlag; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventImpl.prototype, "isTrusted", { + /** @inheritdoc */ + get: function () { return this._isTrusted; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventImpl.prototype, "timeStamp", { + /** @inheritdoc */ + get: function () { return this._timeStamp; }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + EventImpl.prototype.initEvent = function (type, bubbles, cancelable) { + if (bubbles === void 0) { bubbles = false; } + if (cancelable === void 0) { cancelable = false; } /** - * 14. If ns is the HTML namespace, and the node's list of children is - * empty, and the node's localName matches any one of the following void - * elements: "area", "base", "basefont", "bgsound", "br", "col", "embed", - * "frame", "hr", "img", "input", "keygen", "link", "menuitem", "meta", - * "param", "source", "track", "wbr"; then append the following to markup, - * in the order listed: - * 14.1. " " (U+0020 SPACE); - * 14.2. "/" (U+002F SOLIDUS). - * and set the skip end tag flag to true. - * 15. If ns is not the HTML namespace, and the node's list of children is - * empty, then append "/" (U+002F SOLIDUS) to markup and set the skip end - * tag flag to true. - * 16. Append ">" (U+003E GREATER-THAN SIGN) to markup. + * 1. If the context object’s dispatch flag is set, then return. */ - var isHTML = (ns === infra_1.namespace.HTML); - if (isHTML && node.childNodes.length === 0 && - BaseWriter._VoidElementNames.has(node.localName)) { - this.openTagEnd(qualifiedName, true, true); - this.endElement(qualifiedName); - skipEndTag = true; - } - else if (!isHTML && node.childNodes.length === 0) { - this.openTagEnd(qualifiedName, true, false); - this.endElement(qualifiedName); - skipEndTag = true; - } - else { - this.openTagEnd(qualifiedName, false, false); - } + if (this._dispatchFlag) + return; /** - * 17. If the value of skip end tag is true, then return the value of markup - * and skip the remaining steps. The node is a leaf-node. + * 2. Initialize the context object with type, bubbles, and cancelable. */ - if (skipEndTag) - return; + algorithm_1.event_initialize(this, type, bubbles, cancelable); + }; + EventImpl.NONE = 0; + EventImpl.CAPTURING_PHASE = 1; + EventImpl.AT_TARGET = 2; + EventImpl.BUBBLING_PHASE = 3; + return EventImpl; +}()); +exports.EventImpl = EventImpl; +/** + * Define constants on prototype. + */ +WebIDLAlgorithm_1.idl_defineConst(EventImpl.prototype, "NONE", 0); +WebIDLAlgorithm_1.idl_defineConst(EventImpl.prototype, "CAPTURING_PHASE", 1); +WebIDLAlgorithm_1.idl_defineConst(EventImpl.prototype, "AT_TARGET", 2); +WebIDLAlgorithm_1.idl_defineConst(EventImpl.prototype, "BUBBLING_PHASE", 3); +//# sourceMappingURL=EventImpl.js.map + +/***/ }), + +/***/ 9968: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMException_1 = __nccwpck_require__(3166); +var util_1 = __nccwpck_require__(5282); +var algorithm_1 = __nccwpck_require__(61); +/** + * Represents a target to which an event can be dispatched. + */ +var EventTargetImpl = /** @class */ (function () { + /** + * Initializes a new instance of `EventTarget`. + */ + function EventTargetImpl() { + } + Object.defineProperty(EventTargetImpl.prototype, "_eventListenerList", { + get: function () { + return this.__eventListenerList || (this.__eventListenerList = []); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(EventTargetImpl.prototype, "_eventHandlerMap", { + get: function () { + return this.__eventHandlerMap || (this.__eventHandlerMap = {}); + }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + EventTargetImpl.prototype.addEventListener = function (type, callback, options) { + if (options === void 0) { options = { passive: false, once: false, capture: false }; } /** - * 18. If ns is the HTML namespace, and the node's localName matches the - * string "template", then this is a template element. Append to markup the - * result of XML serializing a DocumentFragment node given the template - * element's template contents (a DocumentFragment), providing inherited - * ns, map, prefix index, and the require well-formed flag. - * - * _Note:_ This allows template content to round-trip, given the rules for - * parsing XHTML documents. - * - * 19. Otherwise, append to markup the result of running the XML - * serialization algorithm on each of node's children, in tree order, - * providing inherited ns, map, prefix index, and the require well-formed - * flag. + * 1. Let capture, passive, and once be the result of flattening more options. */ - if (isHTML && node.localName === "template") { - // TODO: serialize template contents + var _a = __read(algorithm_1.eventTarget_flattenMore(options), 3), capture = _a[0], passive = _a[1], once = _a[2]; + // convert callback function to EventListener, return if null + var listenerCallback; + if (!callback) { + return; + } + else if (util_1.Guard.isEventListener(callback)) { + listenerCallback = callback; } else { - try { - for (var _b = __values(node.childNodes), _c = _b.next(); !_c.done; _c = _b.next()) { - var childNode = _c.value; - this.level++; - this._serializeNodeNS(childNode, inheritedNS, map, prefixIndex, requireWellFormed, noDoubleEncoding); - this.level--; - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_2) throw e_2.error; } - } + listenerCallback = { handleEvent: callback }; } /** - * 20. Append the following to markup, in the order listed: - * 20.1. "" (U+003E GREATER-THAN SIGN). - * 21. Return the value of markup. + * 2. Add an event listener with the context object and an event listener + * whose type is type, callback is callback, capture is capture, passive is + * passive, and once is once. */ - this.closeTag(qualifiedName); - this.endElement(qualifiedName); + algorithm_1.eventTarget_addEventListener(this, { + type: type, + callback: listenerCallback, + capture: capture, + passive: passive, + once: once, + removed: false + }); }; - /** - * Produces an XML serialization of an element node. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance - */ - BaseWriter.prototype._serializeElement = function (node, requireWellFormed, noDoubleEncoding) { - var e_3, _a; + /** @inheritdoc */ + EventTargetImpl.prototype.removeEventListener = function (type, callback, options) { /** - * From: https://w3c.github.io/DOM-Parsing/#xml-serializing-an-element-node - * - * 1. If the require well-formed flag is set (its value is true), and this - * node's localName attribute contains the character ":" (U+003A COLON) or - * does not match the XML Name production, then throw an exception; the - * serialization of this node would not be a well-formed element. - */ - if (requireWellFormed && (node.localName.indexOf(":") !== -1 || - !algorithm_1.xml_isName(node.localName))) { - throw new Error("Node local name contains invalid characters (well-formed required)."); - } - /** - * 2. Let markup be the string "<" (U+003C LESS-THAN SIGN). - * 3. Let qualified name be an empty string. - * 4. Let skip end tag be a boolean flag with value false. - * 5. Let ignore namespace definition attribute be a boolean flag with value - * false. - * 6. Given prefix map, copy a namespace prefix map and let map be the - * result. - * 7. Let local prefixes map be an empty map. The map has unique Node prefix - * strings as its keys, with corresponding namespaceURI Node values as the - * map's key values (in this map, the null namespace is represented by the - * empty string). - * - * _Note:_ This map is local to each element. It is used to ensure there - * are no conflicting prefixes should a new namespace prefix attribute need - * to be generated. It is also used to enable skipping of duplicate prefix - * definitions when writing an element's attributes: the map allows the - * algorithm to distinguish between a prefix in the namespace prefix map - * that might be locally-defined (to the current Element) and one that is - * not. - * 8. Let local default namespace be the result of recording the namespace - * information for node given map and local prefixes map. - * - * _Note:_ The above step will update map with any found namespace prefix - * definitions, add the found prefix definitions to the local prefixes map - * and return a local default namespace value defined by a default namespace - * attribute if one exists. Otherwise it returns null. - * 9. Let inherited ns be a copy of namespace. - * 10. Let ns be the value of node's namespaceURI attribute. - */ - var skipEndTag = false; - /** 11. If inherited ns is equal to ns, then: */ - /** - * 11.1. If local default namespace is not null, then set ignore - * namespace definition attribute to true. - */ - /** - * 11.2. If ns is the XML namespace, then append to qualified name the - * concatenation of the string "xml:" and the value of node's localName. - * 11.3. Otherwise, append to qualified name the value of node's - * localName. The node's prefix if it exists, is dropped. - */ - var qualifiedName = node.localName; - /** 11.4. Append the value of qualified name to markup. */ - this.beginElement(qualifiedName); - this.openTagBegin(qualifiedName); - /** - * 13. Append to markup the result of the XML serialization of node's - * attributes given map, prefix index, local prefixes map, ignore namespace - * definition attribute flag, and require well-formed flag. + * TODO: Implement realms + * 1. If the context object’s relevant global object is a + * ServiceWorkerGlobalScope object and its associated service worker’s + * script resource’s has ever been evaluated flag is set, then throw + * a TypeError. [SERVICE-WORKERS] */ - var attributes = this._serializeAttributes(node, requireWellFormed, noDoubleEncoding); - this.attributes(attributes); + if (options === void 0) { options = { capture: false }; } /** - * 14. If ns is the HTML namespace, and the node's list of children is - * empty, and the node's localName matches any one of the following void - * elements: "area", "base", "basefont", "bgsound", "br", "col", "embed", - * "frame", "hr", "img", "input", "keygen", "link", "menuitem", "meta", - * "param", "source", "track", "wbr"; then append the following to markup, - * in the order listed: - * 14.1. " " (U+0020 SPACE); - * 14.2. "/" (U+002F SOLIDUS). - * and set the skip end tag flag to true. - * 15. If ns is not the HTML namespace, and the node's list of children is - * empty, then append "/" (U+002F SOLIDUS) to markup and set the skip end - * tag flag to true. - * 16. Append ">" (U+003E GREATER-THAN SIGN) to markup. + * 2. Let capture be the result of flattening options. */ - if (!node.hasChildNodes()) { - this.openTagEnd(qualifiedName, true, false); - this.endElement(qualifiedName); - skipEndTag = true; - } - else { - this.openTagEnd(qualifiedName, false, false); - } + var capture = algorithm_1.eventTarget_flatten(options); + if (!callback) + return; /** - * 17. If the value of skip end tag is true, then return the value of markup - * and skip the remaining steps. The node is a leaf-node. + * 3. If the context object’s event listener list contains an event listener + * whose type is type, callback is callback, and capture is capture, then + * remove an event listener with the context object and that event listener. */ - if (skipEndTag) - return; - try { - /** - * 18. If ns is the HTML namespace, and the node's localName matches the - * string "template", then this is a template element. Append to markup the - * result of XML serializing a DocumentFragment node given the template - * element's template contents (a DocumentFragment), providing inherited - * ns, map, prefix index, and the require well-formed flag. - * - * _Note:_ This allows template content to round-trip, given the rules for - * parsing XHTML documents. - * - * 19. Otherwise, append to markup the result of running the XML - * serialization algorithm on each of node's children, in tree order, - * providing inherited ns, map, prefix index, and the require well-formed - * flag. - */ - for (var _b = __values(node._children), _c = _b.next(); !_c.done; _c = _b.next()) { - var childNode = _c.value; - this.level++; - this._serializeNode(childNode, requireWellFormed, noDoubleEncoding); - this.level--; + for (var i = 0; i < this._eventListenerList.length; i++) { + var entry = this._eventListenerList[i]; + if (entry.type !== type || entry.capture !== capture) + continue; + if (util_1.Guard.isEventListener(callback) && entry.callback === callback) { + algorithm_1.eventTarget_removeEventListener(this, entry, i); + break; } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + else if (callback && entry.callback.handleEvent === callback) { + algorithm_1.eventTarget_removeEventListener(this, entry, i); + break; } - finally { if (e_3) throw e_3.error; } } + }; + /** @inheritdoc */ + EventTargetImpl.prototype.dispatchEvent = function (event) { /** - * 20. Append the following to markup, in the order listed: - * 20.1. "" (U+003E GREATER-THAN SIGN). - * 21. Return the value of markup. + * 1. If event’s dispatch flag is set, or if its initialized flag is not + * set, then throw an "InvalidStateError" DOMException. + * 2. Initialize event’s isTrusted attribute to false. + * 3. Return the result of dispatching event to the context object. */ - this.closeTag(qualifiedName); - this.endElement(qualifiedName); + if (event._dispatchFlag || !event._initializedFlag) { + throw new DOMException_1.InvalidStateError(); + } + event._isTrusted = false; + return algorithm_1.event_dispatch(event, this); }; + /** @inheritdoc */ + EventTargetImpl.prototype._getTheParent = function (event) { + return null; + }; + return EventTargetImpl; +}()); +exports.EventTargetImpl = EventTargetImpl; +//# sourceMappingURL=EventTargetImpl.js.map + +/***/ }), + +/***/ 3969: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var infra_1 = __nccwpck_require__(4251); +var algorithm_1 = __nccwpck_require__(61); +var util_1 = __nccwpck_require__(5282); +var util_2 = __nccwpck_require__(6195); +/** + * Represents a collection of elements. + */ +var HTMLCollectionImpl = /** @class */ (function () { /** - * Produces an XML serialization of a document node. + * Initializes a new instance of `HTMLCollection`. * - * @param node - node to serialize - * @param namespace - context namespace - * @param prefixMap - namespace prefix map - * @param prefixIndex - generated namespace prefix index - * @param requireWellFormed - whether to check conformance + * @param root - root node + * @param filter - node filter */ - BaseWriter.prototype._serializeDocumentNS = function (node, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding) { - var e_4, _a; - /** - * If the require well-formed flag is set (its value is true), and this node - * has no documentElement (the documentElement attribute's value is null), - * then throw an exception; the serialization of this node would not be a - * well-formed document. - */ - if (requireWellFormed && node.documentElement === null) { - throw new Error("Missing document element (well-formed required)."); - } - try { + function HTMLCollectionImpl(root, filter) { + this._live = true; + this._root = root; + this._filter = filter; + return new Proxy(this, this); + } + Object.defineProperty(HTMLCollectionImpl.prototype, "length", { + /** @inheritdoc */ + get: function () { + var _this = this; /** - * Otherwise, run the following steps: - * 1. Let serialized document be an empty string. - * 2. For each child child of node, in tree order, run the XML - * serialization algorithm on the child passing along the provided - * arguments, and append the result to serialized document. - * - * _Note:_ This will serialize any number of ProcessingInstruction and - * Comment nodes both before and after the Document's documentElement node, - * including at most one DocumentType node. (Text nodes are not allowed as - * children of the Document.) - * - * 3. Return the value of serialized document. - */ - for (var _b = __values(node.childNodes), _c = _b.next(); !_c.done; _c = _b.next()) { - var childNode = _c.value; - this._serializeNodeNS(childNode, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding); - } - } - catch (e_4_1) { e_4 = { error: e_4_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + * The length attribute’s getter must return the number of nodes + * represented by the collection. + */ + var count = 0; + var node = algorithm_1.tree_getFirstDescendantNode(this._root, false, false, function (e) { return util_1.Guard.isElementNode(e) && _this._filter(e); }); + while (node !== null) { + count++; + node = algorithm_1.tree_getNextDescendantNode(this._root, node, false, false, function (e) { return util_1.Guard.isElementNode(e) && _this._filter(e); }); } - finally { if (e_4) throw e_4.error; } + return count; + }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + HTMLCollectionImpl.prototype.item = function (index) { + var _this = this; + /** + * The item(index) method, when invoked, must return the indexth element + * in the collection. If there is no indexth element in the collection, + * then the method must return null. + */ + var i = 0; + var node = algorithm_1.tree_getFirstDescendantNode(this._root, false, false, function (e) { return util_1.Guard.isElementNode(e) && _this._filter(e); }); + while (node !== null) { + if (i === index) + return node; + else + i++; + node = algorithm_1.tree_getNextDescendantNode(this._root, node, false, false, function (e) { return util_1.Guard.isElementNode(e) && _this._filter(e); }); } + return null; }; - /** - * Produces an XML serialization of a document node. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance - */ - BaseWriter.prototype._serializeDocument = function (node, requireWellFormed, noDoubleEncoding) { - var e_5, _a; + /** @inheritdoc */ + HTMLCollectionImpl.prototype.namedItem = function (key) { + var _this = this; /** - * If the require well-formed flag is set (its value is true), and this node - * has no documentElement (the documentElement attribute's value is null), - * then throw an exception; the serialization of this node would not be a - * well-formed document. + * 1. If key is the empty string, return null. + * 2. Return the first element in the collection for which at least one of + * the following is true: + * - it has an ID which is key; + * - it is in the HTML namespace and has a name attribute whose value is key; + * or null if there is no such element. */ - if (requireWellFormed && node.documentElement === null) { - throw new Error("Missing document element (well-formed required)."); - } - try { - /** - * Otherwise, run the following steps: - * 1. Let serialized document be an empty string. - * 2. For each child child of node, in tree order, run the XML - * serialization algorithm on the child passing along the provided - * arguments, and append the result to serialized document. - * - * _Note:_ This will serialize any number of ProcessingInstruction and - * Comment nodes both before and after the Document's documentElement node, - * including at most one DocumentType node. (Text nodes are not allowed as - * children of the Document.) - * - * 3. Return the value of serialized document. - */ - for (var _b = __values(node._children), _c = _b.next(); !_c.done; _c = _b.next()) { - var childNode = _c.value; - this._serializeNode(childNode, requireWellFormed, noDoubleEncoding); + if (key === '') + return null; + var ele = algorithm_1.tree_getFirstDescendantNode(this._root, false, false, function (e) { return util_1.Guard.isElementNode(e) && _this._filter(e); }); + while (ele != null) { + if (ele._uniqueIdentifier === key) { + return ele; } - } - catch (e_5_1) { e_5 = { error: e_5_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + else if (ele._namespace === infra_1.namespace.HTML) { + for (var i = 0; i < ele._attributeList.length; i++) { + var attr = ele._attributeList[i]; + if (attr._localName === "name" && attr._namespace === null && + attr._namespacePrefix === null && attr._value === key) + return ele; + } } - finally { if (e_5) throw e_5.error; } + ele = algorithm_1.tree_getNextDescendantNode(this._root, ele, false, false, function (e) { return util_1.Guard.isElementNode(e) && _this._filter(e); }); } + return null; }; - /** - * Produces an XML serialization of a comment node. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance - */ - BaseWriter.prototype._serializeComment = function (node, requireWellFormed, noDoubleEncoding) { - /** - * If the require well-formed flag is set (its value is true), and node's - * data contains characters that are not matched by the XML Char production - * or contains "--" (two adjacent U+002D HYPHEN-MINUS characters) or that - * ends with a "-" (U+002D HYPHEN-MINUS) character, then throw an exception; - * the serialization of this node's data would not be well-formed. - */ - if (requireWellFormed && (!algorithm_1.xml_isLegalChar(node.data) || - node.data.indexOf("--") !== -1 || node.data.endsWith("-"))) { - throw new Error("Comment data contains invalid characters (well-formed required)."); - } - /** - * Otherwise, return the concatenation of "". - */ - this.comment(node.data); + /** @inheritdoc */ + HTMLCollectionImpl.prototype[Symbol.iterator] = function () { + var root = this._root; + var filter = this._filter; + var currentNode = algorithm_1.tree_getFirstDescendantNode(root, false, false, function (e) { return util_1.Guard.isElementNode(e) && filter(e); }); + return { + next: function () { + if (currentNode === null) { + return { done: true, value: null }; + } + else { + var result = { done: false, value: currentNode }; + currentNode = algorithm_1.tree_getNextDescendantNode(root, currentNode, false, false, function (e) { return util_1.Guard.isElementNode(e) && filter(e); }); + return result; + } + } + }; }; /** - * Produces an XML serialization of a text node. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance - * @param level - current depth of the XML tree + * Implements a proxy get trap to provide array-like access. */ - BaseWriter.prototype._serializeText = function (node, requireWellFormed, noDoubleEncoding) { - /** - * 1. If the require well-formed flag is set (its value is true), and - * node's data contains characters that are not matched by the XML Char - * production, then throw an exception; the serialization of this node's - * data would not be well-formed. - */ - if (requireWellFormed && !algorithm_1.xml_isLegalChar(node.data)) { - throw new Error("Text data contains invalid characters (well-formed required)."); + HTMLCollectionImpl.prototype.get = function (target, key, receiver) { + if (!util_2.isString(key) || HTMLCollectionImpl.reservedNames.indexOf(key) !== -1) { + return Reflect.get(target, key, receiver); } - /** - * 2. Let markup be the value of node's data. - * 3. Replace any occurrences of "&" in markup by "&". - * 4. Replace any occurrences of "<" in markup by "<". - * 5. Replace any occurrences of ">" in markup by ">". - * 6. Return the value of markup. - */ - var markup = ""; - if (noDoubleEncoding) { - markup = node.data.replace(/(?!&(lt|gt|amp|apos|quot);)&/g, '&') - .replace(//g, '>'); + var index = Number(key); + if (isNaN(index)) { + return target.namedItem(key) || undefined; } else { - for (var i = 0; i < node.data.length; i++) { - var c = node.data[i]; - if (c === "&") - markup += "&"; - else if (c === "<") - markup += "<"; - else if (c === ">") - markup += ">"; - else - markup += c; - } + return target.item(index) || undefined; } - this.text(markup); }; /** - * Produces an XML serialization of a document fragment node. - * - * @param node - node to serialize - * @param namespace - context namespace - * @param prefixMap - namespace prefix map - * @param prefixIndex - generated namespace prefix index - * @param requireWellFormed - whether to check conformance + * Implements a proxy set trap to provide array-like access. */ - BaseWriter.prototype._serializeDocumentFragmentNS = function (node, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding) { - var e_6, _a; - try { - /** - * 1. Let markup the empty string. - * 2. For each child child of node, in tree order, run the XML serialization - * algorithm on the child given namespace, prefix map, a reference to prefix - * index, and flag require well-formed. Concatenate the result to markup. - * 3. Return the value of markup. - */ - for (var _b = __values(node.childNodes), _c = _b.next(); !_c.done; _c = _b.next()) { - var childNode = _c.value; - this._serializeNodeNS(childNode, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding); - } + HTMLCollectionImpl.prototype.set = function (target, key, value, receiver) { + if (!util_2.isString(key) || HTMLCollectionImpl.reservedNames.indexOf(key) !== -1) { + return Reflect.set(target, key, value, receiver); } - catch (e_6_1) { e_6 = { error: e_6_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_6) throw e_6.error; } + var index = Number(key); + var node = isNaN(index) ? + target.namedItem(key) || undefined : target.item(index) || undefined; + if (node && node._parent) { + algorithm_1.mutation_replace(node, value, node._parent); + return true; + } + else { + return false; } }; /** - * Produces an XML serialization of a document fragment node. + * Creates a new `HTMLCollection`. * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance + * @param root - root node + * @param filter - node filter */ - BaseWriter.prototype._serializeDocumentFragment = function (node, requireWellFormed, noDoubleEncoding) { - var e_7, _a; - try { - /** - * 1. Let markup the empty string. - * 2. For each child child of node, in tree order, run the XML serialization - * algorithm on the child given namespace, prefix map, a reference to prefix - * index, and flag require well-formed. Concatenate the result to markup. - * 3. Return the value of markup. - */ - for (var _b = __values(node._children), _c = _b.next(); !_c.done; _c = _b.next()) { - var childNode = _c.value; - this._serializeNode(childNode, requireWellFormed, noDoubleEncoding); - } - } - catch (e_7_1) { e_7 = { error: e_7_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_7) throw e_7.error; } + HTMLCollectionImpl._create = function (root, filter) { + if (filter === void 0) { filter = (function () { return true; }); } + return new HTMLCollectionImpl(root, filter); + }; + HTMLCollectionImpl.reservedNames = ['_root', '_live', '_filter', 'length', + 'item', 'namedItem', 'get', 'set']; + return HTMLCollectionImpl; +}()); +exports.HTMLCollectionImpl = HTMLCollectionImpl; +//# sourceMappingURL=HTMLCollectionImpl.js.map + +/***/ }), + +/***/ 9616: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; } }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var util_1 = __nccwpck_require__(5282); +var infra_1 = __nccwpck_require__(4251); +/** + * Represents an object that can be used to observe mutations to the tree of + * nodes. + */ +var MutationObserverImpl = /** @class */ (function () { /** - * Produces an XML serialization of a document type node. + * Initializes a new instance of `MutationObserver`. * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance + * @param callback - the callback function */ - BaseWriter.prototype._serializeDocumentType = function (node, requireWellFormed, noDoubleEncoding) { + function MutationObserverImpl(callback) { + this._nodeList = []; + this._recordQueue = []; /** - * 1. If the require well-formed flag is true and the node's publicId - * attribute contains characters that are not matched by the XML PubidChar - * production, then throw an exception; the serialization of this node - * would not be a well-formed document type declaration. + * 1. Let mo be a new MutationObserver object whose callback is callback. + * 2. Append mo to mo’s relevant agent’s mutation observers. + * 3. Return mo. */ - if (requireWellFormed && !algorithm_1.xml_isPubidChar(node.publicId)) { - throw new Error("DocType public identifier does not match PubidChar construct (well-formed required)."); - } + this._callback = callback; + var window = DOMImpl_1.dom.window; + infra_1.set.append(window._mutationObservers, this); + } + /** @inheritdoc */ + MutationObserverImpl.prototype.observe = function (target, options) { + var e_1, _a; + options = options || { + childList: false, + subtree: false + }; /** - * 2. If the require well-formed flag is true and the node's systemId - * attribute contains characters that are not matched by the XML Char - * production or that contains both a """ (U+0022 QUOTATION MARK) and a - * "'" (U+0027 APOSTROPHE), then throw an exception; the serialization - * of this node would not be a well-formed document type declaration. + * 1. If either options’s attributeOldValue or attributeFilter is present + * and options’s attributes is omitted, then set options’s attributes + * to true. + * 2. If options’s characterDataOldValue is present and options’s + * characterData is omitted, then set options’s characterData to true. + * 3. If none of options’s childList, attributes, and characterData is + * true, then throw a TypeError. + * 4. If options’s attributeOldValue is true and options’s attributes is + * false, then throw a TypeError. + * 5. If options’s attributeFilter is present and options’s attributes is + * false, then throw a TypeError. + * 6. If options’s characterDataOldValue is true and options’s characterData + * is false, then throw a TypeError. */ - if (requireWellFormed && - (!algorithm_1.xml_isLegalChar(node.systemId) || - (node.systemId.indexOf('"') !== -1 && node.systemId.indexOf("'") !== -1))) { - throw new Error("DocType system identifier contains invalid characters (well-formed required)."); + if ((options.attributeOldValue !== undefined || options.attributeFilter !== undefined) && + options.attributes === undefined) { + options.attributes = true; } - /** - * 3. Let markup be an empty string. - * 4. Append the string "" (U+003E GREATER-THAN SIGN) to markup. - * 11. Return the value of markup. - */ - this.docType(node.name, node.publicId, node.systemId); - }; - /** - * Produces an XML serialization of a processing instruction node. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance - */ - BaseWriter.prototype._serializeProcessingInstruction = function (node, requireWellFormed, noDoubleEncoding) { - /** - * 1. If the require well-formed flag is set (its value is true), and node's - * target contains a ":" (U+003A COLON) character or is an ASCII - * case-insensitive match for the string "xml", then throw an exception; - * the serialization of this node's target would not be well-formed. - */ - if (requireWellFormed && (node.target.indexOf(":") !== -1 || (/^xml$/i).test(node.target))) { - throw new Error("Processing instruction target contains invalid characters (well-formed required)."); + if (options.characterDataOldValue !== undefined && options.characterData === undefined) { + options.characterData = true; } - /** - * 2. If the require well-formed flag is set (its value is true), and node's - * data contains characters that are not matched by the XML Char production - * or contains the string "?>" (U+003F QUESTION MARK, - * U+003E GREATER-THAN SIGN), then throw an exception; the serialization of - * this node's data would not be well-formed. - */ - if (requireWellFormed && (!algorithm_1.xml_isLegalChar(node.data) || - node.data.indexOf("?>") !== -1)) { - throw new Error("Processing instruction data contains invalid characters (well-formed required)."); + if (!options.childList && !options.attributes && !options.characterData) { + throw new TypeError(); } - /** - * 3. Let markup be the concatenation of the following, in the order listed: - * 3.1. "" (U+003F QUESTION MARK, U+003E GREATER-THAN SIGN). - * 4. Return the value of markup. - */ - this.instruction(node.target, node.data); - }; - /** - * Produces an XML serialization of a CDATA node. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance - */ - BaseWriter.prototype._serializeCData = function (node, requireWellFormed, noDoubleEncoding) { - if (requireWellFormed && (node.data.indexOf("]]>") !== -1)) { - throw new Error("CDATA contains invalid characters (well-formed required)."); + if (options.attributeOldValue && !options.attributes) { + throw new TypeError(); + } + if (options.attributeFilter !== undefined && !options.attributes) { + throw new TypeError(); + } + if (options.characterDataOldValue && !options.characterData) { + throw new TypeError(); } - this.cdata(node.data); - }; - /** - * Produces an XML serialization of the attributes of an element node. - * - * @param node - node to serialize - * @param map - namespace prefix map - * @param prefixIndex - generated namespace prefix index - * @param localPrefixesMap - local prefixes map - * @param ignoreNamespaceDefinitionAttribute - whether to ignore namespace - * attributes - * @param requireWellFormed - whether to check conformance - */ - BaseWriter.prototype._serializeAttributesNS = function (node, map, prefixIndex, localPrefixesMap, ignoreNamespaceDefinitionAttribute, requireWellFormed, noDoubleEncoding) { - var e_8, _a; /** - * 1. Let result be the empty string. - * 2. Let localname set be a new empty namespace localname set. This - * localname set will contain tuples of unique attribute namespaceURI and - * localName pairs, and is populated as each attr is processed. This set is - * used to [optionally] enforce the well-formed constraint that an element - * cannot have two attributes with the same namespaceURI and localName. - * This can occur when two otherwise identical attributes on the same - * element differ only by their prefix values. + * 7. For each registered of target’s registered observer list, if + * registered’s observer is the context object: */ - var result = []; - var localNameSet = requireWellFormed ? new LocalNameSet_1.LocalNameSet() : undefined; - try { - /** - * 3. Loop: For each attribute attr in element's attributes, in the order - * they are specified in the element's attribute list: - */ - for (var _b = __values(node.attributes), _c = _b.next(); !_c.done; _c = _b.next()) { - var attr = _c.value; - // Optimize common case - if (!requireWellFormed && !ignoreNamespaceDefinitionAttribute && attr.namespaceURI === null) { - result.push([null, null, attr.localName, - this._serializeAttributeValue(attr.value, requireWellFormed, noDoubleEncoding)]); - continue; - } - /** - * 3.1. If the require well-formed flag is set (its value is true), and the - * localname set contains a tuple whose values match those of a new tuple - * consisting of attr's namespaceURI attribute and localName attribute, - * then throw an exception; the serialization of this attr would fail to - * produce a well-formed element serialization. - */ - if (requireWellFormed && localNameSet && localNameSet.has(attr.namespaceURI, attr.localName)) { - throw new Error("Element contains duplicate attributes (well-formed required)."); - } - /** - * 3.2. Create a new tuple consisting of attr's namespaceURI attribute and - * localName attribute, and add it to the localname set. - * 3.3. Let attribute namespace be the value of attr's namespaceURI value. - * 3.4. Let candidate prefix be null. - */ - if (requireWellFormed && localNameSet) - localNameSet.set(attr.namespaceURI, attr.localName); - var attributeNamespace = attr.namespaceURI; - var candidatePrefix = null; - /** 3.5. If attribute namespace is not null, then run these sub-steps: */ - if (attributeNamespace !== null) { - /** - * 3.5.1. Let candidate prefix be the result of retrieving a preferred - * prefix string from map given namespace attribute namespace with - * preferred prefix being attr's prefix value. - */ - candidatePrefix = map.get(attr.prefix, attributeNamespace); + var isRegistered = false; + var coptions = options; + var _loop_1 = function (registered) { + var e_2, _a; + if (registered.observer === this_1) { + isRegistered = true; + try { /** - * 3.5.2. If the value of attribute namespace is the XMLNS namespace, - * then run these steps: + * 7.1. For each node of the context object’s node list, remove all + * transient registered observers whose source is registered from node’s + * registered observer list. */ - if (attributeNamespace === infra_1.namespace.XMLNS) { - /** - * 3.5.2.1. If any of the following are true, then stop running these - * steps and goto Loop to visit the next attribute: - * - the attr's value is the XML namespace; - * _Note:_ The XML namespace cannot be redeclared and survive - * round-tripping (unless it defines the prefix "xml"). To avoid this - * problem, this algorithm always prefixes elements in the XML - * namespace with "xml" and drops any related definitions as seen - * in the above condition. - * - the attr's prefix is null and the ignore namespace definition - * attribute flag is true (the Element's default namespace attribute - * should be skipped); - * - the attr's prefix is not null and either - * * the attr's localName is not a key contained in the local - * prefixes map, or - * * the attr's localName is present in the local prefixes map but - * the value of the key does not match attr's value - * and furthermore that the attr's localName (as the prefix to find) - * is found in the namespace prefix map given the namespace consisting - * of the attr's value (the current namespace prefix definition was - * exactly defined previously--on an ancestor element not the current - * element whose attributes are being processed). - */ - if (attr.value === infra_1.namespace.XML || - (attr.prefix === null && ignoreNamespaceDefinitionAttribute) || - (attr.prefix !== null && (!(attr.localName in localPrefixesMap) || - localPrefixesMap[attr.localName] !== attr.value) && - map.has(attr.localName, attr.value))) - continue; - /** - * 3.5.2.2. If the require well-formed flag is set (its value is true), - * and the value of attr's value attribute matches the XMLNS - * namespace, then throw an exception; the serialization of this - * attribute would produce invalid XML because the XMLNS namespace - * is reserved and cannot be applied as an element's namespace via - * XML parsing. - * - * _Note:_ DOM APIs do allow creation of elements in the XMLNS - * namespace but with strict qualifications. - */ - if (requireWellFormed && attr.value === infra_1.namespace.XMLNS) { - throw new Error("XMLNS namespace is reserved (well-formed required)."); - } - /** - * 3.5.2.3. If the require well-formed flag is set (its value is true), - * and the value of attr's value attribute is the empty string, then - * throw an exception; namespace prefix declarations cannot be used - * to undeclare a namespace (use a default namespace declaration - * instead). - */ - if (requireWellFormed && attr.value === '') { - throw new Error("Namespace prefix declarations cannot be used to undeclare a namespace (well-formed required)."); - } - /** - * 3.5.2.4. the attr's prefix matches the string "xmlns", then let - * candidate prefix be the string "xmlns". - */ - if (attr.prefix === 'xmlns') - candidatePrefix = 'xmlns'; - /** - * 3.5.3. Otherwise, the attribute namespace is not the XMLNS namespace. - * Run these steps: - * - * _Note:_ The (candidatePrefix === null) check is not in the spec. - * We deviate from the spec here. Otherwise a prefix is generated for - * all attributes with namespaces. - */ - } - else if (candidatePrefix === null) { - if (attr.prefix !== null && - (!map.hasPrefix(attr.prefix) || - map.has(attr.prefix, attributeNamespace))) { - /** - * Check if we can use the attribute's own prefix. - * We deviate from the spec here. - * TODO: This is not an efficient way of searching for prefixes. - * Follow developments to the spec. - */ - candidatePrefix = attr.prefix; - } - else { - /** - * 3.5.3.1. Let candidate prefix be the result of generating a prefix - * providing map, attribute namespace, and prefix index as input. - */ - candidatePrefix = this._generatePrefix(attributeNamespace, map, prefixIndex); - } - /** - * 3.5.3.2. Append the following to result, in the order listed: - * 3.5.3.2.1. " " (U+0020 SPACE); - * 3.5.3.2.2. The string "xmlns:"; - * 3.5.3.2.3. The value of candidate prefix; - * 3.5.3.2.4. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); - * 3.5.3.2.5. The result of serializing an attribute value given - * attribute namespace and the require well-formed flag as input; - * 3.5.3.2.6. """ (U+0022 QUOTATION MARK). - */ - result.push([null, "xmlns", candidatePrefix, - this._serializeAttributeValue(attributeNamespace, requireWellFormed, noDoubleEncoding)]); + for (var _b = (e_2 = void 0, __values(this_1._nodeList)), _c = _b.next(); !_c.done; _c = _b.next()) { + var node = _c.value; + infra_1.list.remove(node._registeredObserverList, function (ob) { + return util_1.Guard.isTransientRegisteredObserver(ob) && ob.source === registered; + }); } } - /** - * 3.6. Append a " " (U+0020 SPACE) to result. - * 3.7. If candidate prefix is not null, then append to result the - * concatenation of candidate prefix with ":" (U+003A COLON). - */ - var attrName = ''; - if (candidatePrefix !== null) { - attrName = candidatePrefix; - } - /** - * 3.8. If the require well-formed flag is set (its value is true), and - * this attr's localName attribute contains the character - * ":" (U+003A COLON) or does not match the XML Name production or - * equals "xmlns" and attribute namespace is null, then throw an - * exception; the serialization of this attr would not be a - * well-formed attribute. - */ - if (requireWellFormed && (attr.localName.indexOf(":") !== -1 || - !algorithm_1.xml_isName(attr.localName) || - (attr.localName === "xmlns" && attributeNamespace === null))) { - throw new Error("Attribute local name contains invalid characters (well-formed required)."); + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_2) throw e_2.error; } } /** - * 3.9. Append the following strings to result, in the order listed: - * 3.9.1. The value of attr's localName; - * 3.9.2. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); - * 3.9.3. The result of serializing an attribute value given attr's value - * attribute and the require well-formed flag as input; - * 3.9.4. """ (U+0022 QUOTATION MARK). + * 7.2. Set registered’s options to options. */ - result.push([attributeNamespace, candidatePrefix, attr.localName, - this._serializeAttributeValue(attr.value, requireWellFormed, noDoubleEncoding)]); + registered.options = coptions; + } + }; + var this_1 = this; + try { + for (var _b = __values(target._registeredObserverList), _c = _b.next(); !_c.done; _c = _b.next()) { + var registered = _c.value; + _loop_1(registered); } } - catch (e_8_1) { e_8 = { error: e_8_1 }; } + catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } - finally { if (e_8) throw e_8.error; } + finally { if (e_1) throw e_1.error; } } /** - * 4. Return the value of result. + * 8. Otherwise: + * 8.1. Append a new registered observer whose observer is the context + * object and options is options to target’s registered observer list. + * 8.2. Append target to the context object’s node list. */ - return result; + if (!isRegistered) { + target._registeredObserverList.push({ observer: this, options: options }); + this._nodeList.push(target); + } }; - /** - * Produces an XML serialization of the attributes of an element node. - * - * @param node - node to serialize - * @param requireWellFormed - whether to check conformance - */ - BaseWriter.prototype._serializeAttributes = function (node, requireWellFormed, noDoubleEncoding) { - var e_9, _a; - /** - * 1. Let result be the empty string. - * 2. Let localname set be a new empty namespace localname set. This - * localname set will contain tuples of unique attribute namespaceURI and - * localName pairs, and is populated as each attr is processed. This set is - * used to [optionally] enforce the well-formed constraint that an element - * cannot have two attributes with the same namespaceURI and localName. - * This can occur when two otherwise identical attributes on the same - * element differ only by their prefix values. - */ - var result = []; - var localNameSet = requireWellFormed ? {} : undefined; + /** @inheritdoc */ + MutationObserverImpl.prototype.disconnect = function () { + var e_3, _a; + var _this = this; try { /** - * 3. Loop: For each attribute attr in element's attributes, in the order - * they are specified in the element's attribute list: + * 1. For each node of the context object’s node list, remove any + * registered observer from node’s registered observer list for which the + * context object is the observer. */ - for (var _b = __values(node.attributes), _c = _b.next(); !_c.done; _c = _b.next()) { - var attr = _c.value; - // Optimize common case - if (!requireWellFormed) { - result.push([null, null, attr.localName, - this._serializeAttributeValue(attr.value, requireWellFormed, noDoubleEncoding)]); - continue; - } - /** - * 3.1. If the require well-formed flag is set (its value is true), and the - * localname set contains a tuple whose values match those of a new tuple - * consisting of attr's namespaceURI attribute and localName attribute, - * then throw an exception; the serialization of this attr would fail to - * produce a well-formed element serialization. - */ - if (requireWellFormed && localNameSet && (attr.localName in localNameSet)) { - throw new Error("Element contains duplicate attributes (well-formed required)."); - } - /** - * 3.2. Create a new tuple consisting of attr's namespaceURI attribute and - * localName attribute, and add it to the localname set. - * 3.3. Let attribute namespace be the value of attr's namespaceURI value. - * 3.4. Let candidate prefix be null. - */ - /* istanbul ignore else */ - if (requireWellFormed && localNameSet) - localNameSet[attr.localName] = true; - /** 3.5. If attribute namespace is not null, then run these sub-steps: */ - /** - * 3.6. Append a " " (U+0020 SPACE) to result. - * 3.7. If candidate prefix is not null, then append to result the - * concatenation of candidate prefix with ":" (U+003A COLON). - */ - /** - * 3.8. If the require well-formed flag is set (its value is true), and - * this attr's localName attribute contains the character - * ":" (U+003A COLON) or does not match the XML Name production or - * equals "xmlns" and attribute namespace is null, then throw an - * exception; the serialization of this attr would not be a - * well-formed attribute. - */ - if (requireWellFormed && (attr.localName.indexOf(":") !== -1 || - !algorithm_1.xml_isName(attr.localName))) { - throw new Error("Attribute local name contains invalid characters (well-formed required)."); - } - /** - * 3.9. Append the following strings to result, in the order listed: - * 3.9.1. The value of attr's localName; - * 3.9.2. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); - * 3.9.3. The result of serializing an attribute value given attr's value - * attribute and the require well-formed flag as input; - * 3.9.4. """ (U+0022 QUOTATION MARK). - */ - result.push([null, null, attr.localName, - this._serializeAttributeValue(attr.value, requireWellFormed, noDoubleEncoding)]); + for (var _b = __values(this._nodeList), _c = _b.next(); !_c.done; _c = _b.next()) { + var node = _c.value; + infra_1.list.remove((node)._registeredObserverList, function (ob) { + return ob.observer === _this; + }); } } - catch (e_9_1) { e_9 = { error: e_9_1 }; } + catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } - finally { if (e_9) throw e_9.error; } + finally { if (e_3) throw e_3.error; } } /** - * 4. Return the value of result. + * 2. Empty the context object’s record queue. */ - return result; + this._recordQueue = []; }; - /** - * Records namespace information for the given element and returns the - * default namespace attribute value. - * - * @param node - element node to process - * @param map - namespace prefix map - * @param localPrefixesMap - local prefixes map - */ - BaseWriter.prototype._recordNamespaceInformation = function (node, map, localPrefixesMap) { - var e_10, _a; + /** @inheritdoc */ + MutationObserverImpl.prototype.takeRecords = function () { /** - * 1. Let default namespace attr value be null. + * 1. Let records be a clone of the context object’s record queue. + * 2. Empty the context object’s record queue. + * 3. Return records. */ - var defaultNamespaceAttrValue = null; - try { - /** - * 2. Main: For each attribute attr in element's attributes, in the order - * they are specified in the element's attribute list: - */ - for (var _b = __values(node.attributes), _c = _b.next(); !_c.done; _c = _b.next()) { - var attr = _c.value; - /** - * _Note:_ The following conditional steps find namespace prefixes. Only - * attributes in the XMLNS namespace are considered (e.g., attributes made - * to look like namespace declarations via - * setAttribute("xmlns:pretend-prefix", "pretend-namespace") are not - * included). - */ - /** 2.1. Let attribute namespace be the value of attr's namespaceURI value. */ - var attributeNamespace = attr.namespaceURI; - /** 2.2. Let attribute prefix be the value of attr's prefix. */ - var attributePrefix = attr.prefix; - /** 2.3. If the attribute namespace is the XMLNS namespace, then: */ - if (attributeNamespace === infra_1.namespace.XMLNS) { - /** - * 2.3.1. If attribute prefix is null, then attr is a default namespace - * declaration. Set the default namespace attr value to attr's value and - * stop running these steps, returning to Main to visit the next - * attribute. - */ - if (attributePrefix === null) { - defaultNamespaceAttrValue = attr.value; - continue; - /** - * 2.3.2. Otherwise, the attribute prefix is not null and attr is a - * namespace prefix definition. Run the following steps: - */ - } - else { - /** 2.3.2.1. Let prefix definition be the value of attr's localName. */ - var prefixDefinition = attr.localName; - /** 2.3.2.2. Let namespace definition be the value of attr's value. */ - var namespaceDefinition = attr.value; - /** - * 2.3.2.3. If namespace definition is the XML namespace, then stop - * running these steps, and return to Main to visit the next - * attribute. - * - * _Note:_ XML namespace definitions in prefixes are completely - * ignored (in order to avoid unnecessary work when there might be - * prefix conflicts). XML namespaced elements are always handled - * uniformly by prefixing (and overriding if necessary) the element's - * localname with the reserved "xml" prefix. - */ - if (namespaceDefinition === infra_1.namespace.XML) { - continue; - } - /** - * 2.3.2.4. If namespace definition is the empty string (the - * declarative form of having no namespace), then let namespace - * definition be null instead. - */ - if (namespaceDefinition === '') { - namespaceDefinition = null; - } - /** - * 2.3.2.5. If prefix definition is found in map given the namespace - * namespace definition, then stop running these steps, and return to - * Main to visit the next attribute. - * - * _Note:_ This step avoids adding duplicate prefix definitions for - * the same namespace in the map. This has the side-effect of avoiding - * later serialization of duplicate namespace prefix declarations in - * any descendant nodes. - */ - if (map.has(prefixDefinition, namespaceDefinition)) { - continue; - } - /** - * 2.3.2.6. Add the prefix prefix definition to map given namespace - * namespace definition. - */ - map.set(prefixDefinition, namespaceDefinition); - /** - * 2.3.2.7. Add the value of prefix definition as a new key to the - * local prefixes map, with the namespace definition as the key's - * value replacing the value of null with the empty string if - * applicable. - */ - localPrefixesMap[prefixDefinition] = namespaceDefinition || ''; - } - } - } - } - catch (e_10_1) { e_10 = { error: e_10_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_10) throw e_10.error; } - } - /** - * 3. Return the value of default namespace attr value. - * - * _Note:_ The empty string is a legitimate return value and is not - * converted to null. - */ - return defaultNamespaceAttrValue; + var records = this._recordQueue; + this._recordQueue = []; + return records; }; + return MutationObserverImpl; +}()); +exports.MutationObserverImpl = MutationObserverImpl; +//# sourceMappingURL=MutationObserverImpl.js.map + +/***/ }), + +/***/ 6219: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Represents a mutation record. + */ +var MutationRecordImpl = /** @class */ (function () { /** - * Generates a new prefix for the given namespace. - * - * @param newNamespace - a namespace to generate prefix for - * @param prefixMap - namespace prefix map - * @param prefixIndex - generated namespace prefix index - */ - BaseWriter.prototype._generatePrefix = function (newNamespace, prefixMap, prefixIndex) { - /** - * 1. Let generated prefix be the concatenation of the string "ns" and the - * current numerical value of prefix index. - * 2. Let the value of prefix index be incremented by one. - * 3. Add to map the generated prefix given the new namespace namespace. - * 4. Return the value of generated prefix. - */ - var generatedPrefix = "ns" + prefixIndex.value.toString(); - prefixIndex.value++; - prefixMap.set(generatedPrefix, newNamespace); - return generatedPrefix; + * Initializes a new instance of `MutationRecord`. + * + * @param type - type of mutation: `"attributes"` for an attribute + * mutation, `"characterData"` for a mutation to a CharacterData node + * and `"childList"` for a mutation to the tree of nodes. + * @param target - node affected by the mutation. + * @param addedNodes - list of added nodes. + * @param removedNodes - list of removed nodes. + * @param previousSibling - previous sibling of added or removed nodes. + * @param nextSibling - next sibling of added or removed nodes. + * @param attributeName - local name of the changed attribute, + * and `null` otherwise. + * @param attributeNamespace - namespace of the changed attribute, + * and `null` otherwise. + * @param oldValue - value before mutation: attribute value for an attribute + * mutation, node `data` for a mutation to a CharacterData node and `null` + * for a mutation to the tree of nodes. + */ + function MutationRecordImpl(type, target, addedNodes, removedNodes, previousSibling, nextSibling, attributeName, attributeNamespace, oldValue) { + this._type = type; + this._target = target; + this._addedNodes = addedNodes; + this._removedNodes = removedNodes; + this._previousSibling = previousSibling; + this._nextSibling = nextSibling; + this._attributeName = attributeName; + this._attributeNamespace = attributeNamespace; + this._oldValue = oldValue; + } + Object.defineProperty(MutationRecordImpl.prototype, "type", { + /** @inheritdoc */ + get: function () { return this._type; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MutationRecordImpl.prototype, "target", { + /** @inheritdoc */ + get: function () { return this._target; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MutationRecordImpl.prototype, "addedNodes", { + /** @inheritdoc */ + get: function () { return this._addedNodes; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MutationRecordImpl.prototype, "removedNodes", { + /** @inheritdoc */ + get: function () { return this._removedNodes; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MutationRecordImpl.prototype, "previousSibling", { + /** @inheritdoc */ + get: function () { return this._previousSibling; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MutationRecordImpl.prototype, "nextSibling", { + /** @inheritdoc */ + get: function () { return this._nextSibling; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MutationRecordImpl.prototype, "attributeName", { + /** @inheritdoc */ + get: function () { return this._attributeName; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MutationRecordImpl.prototype, "attributeNamespace", { + /** @inheritdoc */ + get: function () { return this._attributeNamespace; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MutationRecordImpl.prototype, "oldValue", { + /** @inheritdoc */ + get: function () { return this._oldValue; }, + enumerable: true, + configurable: true + }); + /** + * Creates a new `MutationRecord`. + * + * @param type - type of mutation: `"attributes"` for an attribute + * mutation, `"characterData"` for a mutation to a CharacterData node + * and `"childList"` for a mutation to the tree of nodes. + * @param target - node affected by the mutation. + * @param addedNodes - list of added nodes. + * @param removedNodes - list of removed nodes. + * @param previousSibling - previous sibling of added or removed nodes. + * @param nextSibling - next sibling of added or removed nodes. + * @param attributeName - local name of the changed attribute, + * and `null` otherwise. + * @param attributeNamespace - namespace of the changed attribute, + * and `null` otherwise. + * @param oldValue - value before mutation: attribute value for an attribute + * mutation, node `data` for a mutation to a CharacterData node and `null` + * for a mutation to the tree of nodes. + */ + MutationRecordImpl._create = function (type, target, addedNodes, removedNodes, previousSibling, nextSibling, attributeName, attributeNamespace, oldValue) { + return new MutationRecordImpl(type, target, addedNodes, removedNodes, previousSibling, nextSibling, attributeName, attributeNamespace, oldValue); + }; + return MutationRecordImpl; +}()); +exports.MutationRecordImpl = MutationRecordImpl; +//# sourceMappingURL=MutationRecordImpl.js.map + +/***/ }), + +/***/ 7206: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMException_1 = __nccwpck_require__(3166); +var algorithm_1 = __nccwpck_require__(61); +/** + * Represents a collection of attributes. + */ +var NamedNodeMapImpl = /** @class */ (function (_super) { + __extends(NamedNodeMapImpl, _super); /** - * Produces an XML serialization of an attribute value. + * Initializes a new instance of `NamedNodeMap`. * - * @param value - attribute value - * @param requireWellFormed - whether to check conformance + * @param element - parent element */ - BaseWriter.prototype._serializeAttributeValue = function (value, requireWellFormed, noDoubleEncoding) { + function NamedNodeMapImpl(element) { + var _this = _super.call(this) || this; + _this._element = element; + // TODO: This workaround is needed to extend Array in ES5 + Object.setPrototypeOf(_this, NamedNodeMapImpl.prototype); + return _this; + } + NamedNodeMapImpl.prototype._asArray = function () { return this; }; + /** @inheritdoc */ + NamedNodeMapImpl.prototype.item = function (index) { /** - * From: https://w3c.github.io/DOM-Parsing/#dfn-serializing-an-attribute-value + * 1. If index is equal to or greater than context object’s attribute list’s + * size, then return null. + * 2. Otherwise, return context object’s attribute list[index]. * - * 1. If the require well-formed flag is set (its value is true), and - * attribute value contains characters that are not matched by the XML Char - * production, then throw an exception; the serialization of this attribute - * value would fail to produce a well-formed element serialization. */ - if (requireWellFormed && value !== null && !algorithm_1.xml_isLegalChar(value)) { - throw new Error("Invalid characters in attribute value."); - } + return this[index] || null; + }; + /** @inheritdoc */ + NamedNodeMapImpl.prototype.getNamedItem = function (qualifiedName) { /** - * 2. If attribute value is null, then return the empty string. + * The getNamedItem(qualifiedName) method, when invoked, must return the + * result of getting an attribute given qualifiedName and element. */ - if (value === null) - return ""; + return algorithm_1.element_getAnAttributeByName(qualifiedName, this._element); + }; + /** @inheritdoc */ + NamedNodeMapImpl.prototype.getNamedItemNS = function (namespace, localName) { /** - * 3. Otherwise, attribute value is a string. Return the value of attribute - * value, first replacing any occurrences of the following: - * - "&" with "&" - * - """ with """ - * - "<" with "<" - * - ">" with ">" - * NOTE - * This matches behavior present in browsers, and goes above and beyond the - * grammar requirement in the XML specification's AttValue production by - * also replacing ">" characters. + * The getNamedItemNS(namespace, localName) method, when invoked, must + * return the result of getting an attribute given namespace, localName, + * and element. */ - if (noDoubleEncoding) { - return value.replace(/(?!&(lt|gt|amp|apos|quot);)&/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); - } - else { - var result = ""; - for (var i = 0; i < value.length; i++) { - var c = value[i]; - if (c === "\"") - result += """; - else if (c === "&") - result += "&"; - else if (c === "<") - result += "<"; - else if (c === ">") - result += ">"; - else - result += c; - } - return result; - } + return algorithm_1.element_getAnAttributeByNamespaceAndLocalName(namespace || '', localName, this._element); }; - BaseWriter._VoidElementNames = new Set(['area', 'base', 'basefont', - 'bgsound', 'br', 'col', 'embed', 'frame', 'hr', 'img', 'input', 'keygen', - 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr']); - return BaseWriter; -}()); -exports.BaseWriter = BaseWriter; -//# sourceMappingURL=BaseWriter.js.map + /** @inheritdoc */ + NamedNodeMapImpl.prototype.setNamedItem = function (attr) { + /** + * The setNamedItem(attr) and setNamedItemNS(attr) methods, when invoked, + * must return the result of setting an attribute given attr and element. + */ + return algorithm_1.element_setAnAttribute(attr, this._element); + }; + /** @inheritdoc */ + NamedNodeMapImpl.prototype.setNamedItemNS = function (attr) { + return algorithm_1.element_setAnAttribute(attr, this._element); + }; + /** @inheritdoc */ + NamedNodeMapImpl.prototype.removeNamedItem = function (qualifiedName) { + /** + * 1. Let attr be the result of removing an attribute given qualifiedName + * and element. + * 2. If attr is null, then throw a "NotFoundError" DOMException. + * 3. Return attr. + */ + var attr = algorithm_1.element_removeAnAttributeByName(qualifiedName, this._element); + if (attr === null) + throw new DOMException_1.NotFoundError(); + return attr; + }; + /** @inheritdoc */ + NamedNodeMapImpl.prototype.removeNamedItemNS = function (namespace, localName) { + /** + * 1. Let attr be the result of removing an attribute given namespace, + * localName, and element. + * 2. If attr is null, then throw a "NotFoundError" DOMException. + * 3. Return attr. + */ + var attr = algorithm_1.element_removeAnAttributeByNamespaceAndLocalName(namespace || '', localName, this._element); + if (attr === null) + throw new DOMException_1.NotFoundError(); + return attr; + }; + /** + * Creates a new `NamedNodeMap`. + * + * @param element - parent element + */ + NamedNodeMapImpl._create = function (element) { + return new NamedNodeMapImpl(element); + }; + return NamedNodeMapImpl; +}(Array)); +exports.NamedNodeMapImpl = NamedNodeMapImpl; +//# sourceMappingURL=NamedNodeMapImpl.js.map /***/ }), -/* 463 */, -/* 464 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 2355: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(970); -var DOMException_1 = __webpack_require__(35); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7305); +var WebIDLAlgorithm_1 = __nccwpck_require__(5457); /** - * Applies the filter to the given node and returns the result. - * - * @param traverser - the `NodeIterator` or `TreeWalker` instance - * @param node - the node to filter + * Represents a node filter. */ -function traversal_filter(traverser, node) { - /** - * 1. If traverser’s active flag is set, then throw an "InvalidStateError" - * DOMException. - */ - if (traverser._activeFlag) { - throw new DOMException_1.InvalidStateError(); - } - /** - * 2. Let n be node’s nodeType attribute value − 1. - */ - var n = node._nodeType - 1; +var NodeFilterImpl = /** @class */ (function () { /** - * 3. If the nth bit (where 0 is the least significant bit) of traverser’s - * whatToShow is not set, then return FILTER_SKIP. + * Initializes a new instance of `NodeFilter`. */ - var mask = 1 << n; - if ((traverser.whatToShow & mask) === 0) { - return interfaces_1.FilterResult.Skip; + function NodeFilterImpl() { } /** - * 4. If traverser’s filter is null, then return FILTER_ACCEPT. + * Callback function. */ - if (!traverser.filter) { + NodeFilterImpl.prototype.acceptNode = function (node) { return interfaces_1.FilterResult.Accept; - } - /** - * 5. Set traverser’s active flag. - */ - traverser._activeFlag = true; - /** - * 6. Let result be the return value of call a user object’s operation with - * traverser’s filter, "acceptNode", and « node ». If this throws an - * exception, then unset traverser’s active flag and rethrow the exception. - */ - var result = interfaces_1.FilterResult.Reject; - try { - result = traverser.filter.acceptNode(node); - } - catch (err) { - traverser._activeFlag = false; - throw err; - } + }; /** - * 7. Unset traverser’s active flag. - * 8. Return result. + * Creates a new `NodeFilter`. */ - traverser._activeFlag = false; - return result; -} -exports.traversal_filter = traversal_filter; -//# sourceMappingURL=TraversalAlgorithm.js.map + NodeFilterImpl._create = function () { + return new NodeFilterImpl(); + }; + NodeFilterImpl.FILTER_ACCEPT = 1; + NodeFilterImpl.FILTER_REJECT = 2; + NodeFilterImpl.FILTER_SKIP = 3; + NodeFilterImpl.SHOW_ALL = 0xffffffff; + NodeFilterImpl.SHOW_ELEMENT = 0x1; + NodeFilterImpl.SHOW_ATTRIBUTE = 0x2; + NodeFilterImpl.SHOW_TEXT = 0x4; + NodeFilterImpl.SHOW_CDATA_SECTION = 0x8; + NodeFilterImpl.SHOW_ENTITY_REFERENCE = 0x10; + NodeFilterImpl.SHOW_ENTITY = 0x20; + NodeFilterImpl.SHOW_PROCESSING_INSTRUCTION = 0x40; + NodeFilterImpl.SHOW_COMMENT = 0x80; + NodeFilterImpl.SHOW_DOCUMENT = 0x100; + NodeFilterImpl.SHOW_DOCUMENT_TYPE = 0x200; + NodeFilterImpl.SHOW_DOCUMENT_FRAGMENT = 0x400; + NodeFilterImpl.SHOW_NOTATION = 0x800; + return NodeFilterImpl; +}()); +exports.NodeFilterImpl = NodeFilterImpl; +/** + * Define constants on prototype. + */ +WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "FILTER_ACCEPT", 1); +WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "FILTER_REJECT", 2); +WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "FILTER_SKIP", 3); +WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_ALL", 0xffffffff); +WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_ELEMENT", 0x1); +WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_ATTRIBUTE", 0x2); +WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_TEXT", 0x4); +WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_CDATA_SECTION", 0x8); +WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_ENTITY_REFERENCE", 0x10); +WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_ENTITY", 0x20); +WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_PROCESSING_INSTRUCTION", 0x40); +WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_COMMENT", 0x80); +WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_DOCUMENT", 0x100); +WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_DOCUMENT_TYPE", 0x200); +WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_DOCUMENT_FRAGMENT", 0x400); +WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_NOTATION", 0x800); +//# sourceMappingURL=NodeFilterImpl.js.map /***/ }), -/* 465 */, -/* 466 */, -/* 467 */, -/* 468 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 1745: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); var __values = (this && this.__values) || function(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); @@ -19239,455 +17212,970 @@ var __values = (this && this.__values) || function(o) { }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; -Object.defineProperty(exports, "__esModule", { value: true }); -var XMLStringLexer_1 = __webpack_require__(911); -var interfaces_1 = __webpack_require__(172); -var infra_1 = __webpack_require__(23); -var algorithm_1 = __webpack_require__(163); -var LocalNameSet_1 = __webpack_require__(575); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var interfaces_1 = __nccwpck_require__(7305); +var EventTargetImpl_1 = __nccwpck_require__(9968); +var util_1 = __nccwpck_require__(5282); +var DOMException_1 = __nccwpck_require__(3166); +var algorithm_1 = __nccwpck_require__(61); +var URLAlgorithm_1 = __nccwpck_require__(3568); +var WebIDLAlgorithm_1 = __nccwpck_require__(5457); /** - * Represents a parser for XML content. - * - * See: https://html.spec.whatwg.org/#xml-parser + * Represents a generic XML node. */ -var XMLParserImpl = /** @class */ (function () { - function XMLParserImpl() { +var NodeImpl = /** @class */ (function (_super) { + __extends(NodeImpl, _super); + /** + * Initializes a new instance of `Node`. + */ + function NodeImpl() { + var _this = _super.call(this) || this; + _this._parent = null; + _this._firstChild = null; + _this._lastChild = null; + _this._previousSibling = null; + _this._nextSibling = null; + return _this; } + Object.defineProperty(NodeImpl.prototype, "_childNodes", { + get: function () { + return this.__childNodes || (this.__childNodes = algorithm_1.create_nodeList(this)); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NodeImpl.prototype, "_nodeDocument", { + get: function () { return this._nodeDocumentOverride || DOMImpl_1.dom.window._associatedDocument; }, + set: function (val) { this._nodeDocumentOverride = val; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NodeImpl.prototype, "_registeredObserverList", { + get: function () { + return this.__registeredObserverList || (this.__registeredObserverList = []); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NodeImpl.prototype, "nodeType", { + /** @inheritdoc */ + get: function () { return this._nodeType; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NodeImpl.prototype, "nodeName", { + /** + * Returns a string appropriate for the type of node. + */ + get: function () { + if (util_1.Guard.isElementNode(this)) { + return this._htmlUppercasedQualifiedName; + } + else if (util_1.Guard.isAttrNode(this)) { + return this._qualifiedName; + } + else if (util_1.Guard.isExclusiveTextNode(this)) { + return "#text"; + } + else if (util_1.Guard.isCDATASectionNode(this)) { + return "#cdata-section"; + } + else if (util_1.Guard.isProcessingInstructionNode(this)) { + return this._target; + } + else if (util_1.Guard.isCommentNode(this)) { + return "#comment"; + } + else if (util_1.Guard.isDocumentNode(this)) { + return "#document"; + } + else if (util_1.Guard.isDocumentTypeNode(this)) { + return this._name; + } + else if (util_1.Guard.isDocumentFragmentNode(this)) { + return "#document-fragment"; + } + else { + return ""; + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NodeImpl.prototype, "baseURI", { + /** + * Gets the absolute base URL of the node. + */ + get: function () { + /** + * The baseURI attribute’s getter must return node document’s document + * base URL, serialized. + * TODO: Implement in HTML DOM + * https://html.spec.whatwg.org/multipage/urls-and-fetching.html#document-base-url + */ + return URLAlgorithm_1.urlSerializer(this._nodeDocument._URL); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NodeImpl.prototype, "isConnected", { + /** + * Returns whether the node is rooted to a document node. + */ + get: function () { + /** + * The isConnected attribute’s getter must return true, if context object + * is connected, and false otherwise. + */ + return util_1.Guard.isElementNode(this) && algorithm_1.shadowTree_isConnected(this); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NodeImpl.prototype, "ownerDocument", { + /** + * Returns the parent document. + */ + get: function () { + /** + * The ownerDocument attribute’s getter must return null, if the context + * object is a document, and the context object’s node document otherwise. + * _Note:_ The node document of a document is that document itself. All + * nodes have a node document at all times. + */ + if (this._nodeType === interfaces_1.NodeType.Document) + return null; + else + return this._nodeDocument; + }, + enumerable: true, + configurable: true + }); /** - * Parses XML content. + * Returns the root node. * - * @param source - a string containing XML content + * @param options - if options has `composed = true` this function + * returns the node's shadow-including root, otherwise it returns + * the node's root node. */ - XMLParserImpl.prototype.parse = function (source) { + NodeImpl.prototype.getRootNode = function (options) { + /** + * The getRootNode(options) method, when invoked, must return context + * object’s shadow-including root if options’s composed is true, + * and context object’s root otherwise. + */ + return algorithm_1.tree_rootNode(this, !!options && options.composed); + }; + Object.defineProperty(NodeImpl.prototype, "parentNode", { + /** + * Returns the parent node. + */ + get: function () { + /** + * The parentNode attribute’s getter must return the context object’s parent. + * _Note:_ An Attr node has no parent. + */ + if (this._nodeType === interfaces_1.NodeType.Attribute) { + return null; + } + else { + return this._parent; + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NodeImpl.prototype, "parentElement", { + /** + * Returns the parent element. + */ + get: function () { + /** + * The parentElement attribute’s getter must return the context object’s + * parent element. + */ + if (this._parent && util_1.Guard.isElementNode(this._parent)) { + return this._parent; + } + else { + return null; + } + }, + enumerable: true, + configurable: true + }); + /** + * Determines whether a node has any children. + */ + NodeImpl.prototype.hasChildNodes = function () { + /** + * The hasChildNodes() method, when invoked, must return true if the context + * object has children, and false otherwise. + */ + return (this._firstChild !== null); + }; + Object.defineProperty(NodeImpl.prototype, "childNodes", { + /** + * Returns a {@link NodeList} of child nodes. + */ + get: function () { + /** + * The childNodes attribute’s getter must return a NodeList rooted at the + * context object matching only children. + */ + return this._childNodes; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NodeImpl.prototype, "firstChild", { + /** + * Returns the first child node. + */ + get: function () { + /** + * The firstChild attribute’s getter must return the context object’s first + * child. + */ + return this._firstChild; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NodeImpl.prototype, "lastChild", { + /** + * Returns the last child node. + */ + get: function () { + /** + * The lastChild attribute’s getter must return the context object’s last + * child. + */ + return this._lastChild; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NodeImpl.prototype, "previousSibling", { + /** + * Returns the previous sibling node. + */ + get: function () { + /** + * The previousSibling attribute’s getter must return the context object’s + * previous sibling. + * _Note:_ An Attr node has no siblings. + */ + return this._previousSibling; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NodeImpl.prototype, "nextSibling", { + /** + * Returns the next sibling node. + */ + get: function () { + /** + * The nextSibling attribute’s getter must return the context object’s + * next sibling. + */ + return this._nextSibling; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NodeImpl.prototype, "nodeValue", { + /** + * Gets or sets the data associated with a {@link CharacterData} node or the + * value of an {@link @Attr} node. For other node types returns `null`. + */ + get: function () { + if (util_1.Guard.isAttrNode(this)) { + return this._value; + } + else if (util_1.Guard.isCharacterDataNode(this)) { + return this._data; + } + else { + return null; + } + }, + set: function (value) { + if (value === null) { + value = ''; + } + if (util_1.Guard.isAttrNode(this)) { + algorithm_1.attr_setAnExistingAttributeValue(this, value); + } + else if (util_1.Guard.isCharacterDataNode(this)) { + algorithm_1.characterData_replaceData(this, 0, this._data.length, value); + } + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NodeImpl.prototype, "textContent", { + /** + * Returns the concatenation of data of all the {@link Text} + * node descendants in tree order. When set, replaces the text + * contents of the node with the given value. + */ + get: function () { + if (util_1.Guard.isDocumentFragmentNode(this) || util_1.Guard.isElementNode(this)) { + return algorithm_1.text_descendantTextContent(this); + } + else if (util_1.Guard.isAttrNode(this)) { + return this._value; + } + else if (util_1.Guard.isCharacterDataNode(this)) { + return this._data; + } + else { + return null; + } + }, + set: function (value) { + if (value === null) { + value = ''; + } + if (util_1.Guard.isDocumentFragmentNode(this) || util_1.Guard.isElementNode(this)) { + algorithm_1.node_stringReplaceAll(value, this); + } + else if (util_1.Guard.isAttrNode(this)) { + algorithm_1.attr_setAnExistingAttributeValue(this, value); + } + else if (util_1.Guard.isCharacterDataNode(this)) { + algorithm_1.characterData_replaceData(this, 0, algorithm_1.tree_nodeLength(this), value); + } + }, + enumerable: true, + configurable: true + }); + /** + * Puts all {@link Text} nodes in the full depth of the sub-tree + * underneath this node into a "normal" form where only markup + * (e.g., tags, comments, processing instructions, CDATA sections, + * and entity references) separates {@link Text} nodes, i.e., there + * are no adjacent Text nodes. + */ + NodeImpl.prototype.normalize = function () { var e_1, _a, e_2, _b; - var lexer = new XMLStringLexer_1.XMLStringLexer(source, { skipWhitespaceOnlyText: true }); - var doc = algorithm_1.create_document(); - var context = doc; - var token = lexer.nextToken(); - while (token.type !== interfaces_1.TokenType.EOF) { - switch (token.type) { - case interfaces_1.TokenType.Declaration: - var declaration = token; - if (declaration.version !== "1.0") { - throw new Error("Invalid xml version: " + declaration.version); - } - break; - case interfaces_1.TokenType.DocType: - var doctype = token; - if (!algorithm_1.xml_isPubidChar(doctype.pubId)) { - throw new Error("DocType public identifier does not match PubidChar construct."); - } - if (!algorithm_1.xml_isLegalChar(doctype.sysId) || - (doctype.sysId.indexOf('"') !== -1 && doctype.sysId.indexOf("'") !== -1)) { - throw new Error("DocType system identifier contains invalid characters."); - } - context.appendChild(doc.implementation.createDocumentType(doctype.name, doctype.pubId, doctype.sysId)); - break; - case interfaces_1.TokenType.CDATA: - var cdata = token; - if (!algorithm_1.xml_isLegalChar(cdata.data) || - cdata.data.indexOf("]]>") !== -1) { - throw new Error("CDATA contains invalid characters."); - } - context.appendChild(doc.createCDATASection(cdata.data)); - break; - case interfaces_1.TokenType.Comment: - var comment = token; - if (!algorithm_1.xml_isLegalChar(comment.data) || - comment.data.indexOf("--") !== -1 || comment.data.endsWith("-")) { - throw new Error("Comment data contains invalid characters."); - } - context.appendChild(doc.createComment(comment.data)); - break; - case interfaces_1.TokenType.PI: - var pi = token; - if (pi.target.indexOf(":") !== -1 || (/^xml$/i).test(pi.target)) { - throw new Error("Processing instruction target contains invalid characters."); - } - if (!algorithm_1.xml_isLegalChar(pi.data) || pi.data.indexOf("?>") !== -1) { - throw new Error("Processing instruction data contains invalid characters."); - } - context.appendChild(doc.createProcessingInstruction(pi.target, pi.data)); - break; - case interfaces_1.TokenType.Text: - var text = token; - if (!algorithm_1.xml_isLegalChar(text.data)) { - throw new Error("Text data contains invalid characters."); - } - context.appendChild(doc.createTextNode(text.data)); - break; - case interfaces_1.TokenType.Element: - var element = token; - // inherit namespace from parent - var _c = __read(algorithm_1.namespace_extractQName(element.name), 2), prefix = _c[0], localName = _c[1]; - if (localName.indexOf(":") !== -1 || !algorithm_1.xml_isName(localName)) { - throw new Error("Node local name contains invalid characters."); - } - if (prefix === "xmlns") { - throw new Error("An element cannot have the 'xmlns' prefix."); - } - var namespace = context.lookupNamespaceURI(prefix); - // override namespace if there is a namespace declaration - // attribute - // also lookup namespace declaration attributes - var nsDeclarations = {}; + /** + * The normalize() method, when invoked, must run these steps for each + * descendant exclusive Text node node of context object: + */ + var descendantNodes = []; + var node = algorithm_1.tree_getFirstDescendantNode(this, false, false, function (e) { return util_1.Guard.isExclusiveTextNode(e); }); + while (node !== null) { + descendantNodes.push(node); + node = algorithm_1.tree_getNextDescendantNode(this, node, false, false, function (e) { return util_1.Guard.isExclusiveTextNode(e); }); + } + for (var i = 0; i < descendantNodes.length; i++) { + var node_1 = descendantNodes[i]; + if (node_1._parent === null) + continue; + /** + * 1. Let length be node’s length. + * 2. If length is zero, then remove node and continue with the next + * exclusive Text node, if any. + */ + var length = algorithm_1.tree_nodeLength(node_1); + if (length === 0) { + algorithm_1.mutation_remove(node_1, node_1._parent); + continue; + } + /** + * 3. Let data be the concatenation of the data of node’s contiguous + * exclusive Text nodes (excluding itself), in tree order. + */ + var textSiblings = []; + var data = ''; + try { + for (var _c = (e_1 = void 0, __values(algorithm_1.text_contiguousExclusiveTextNodes(node_1))), _d = _c.next(); !_d.done; _d = _c.next()) { + var sibling = _d.value; + textSiblings.push(sibling); + data += sibling._data; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_d && !_d.done && (_a = _c.return)) _a.call(_c); + } + finally { if (e_1) throw e_1.error; } + } + /** + * 4. Replace data with node node, offset length, count 0, and data data. + */ + algorithm_1.characterData_replaceData(node_1, length, 0, data); + /** + * 5. Let currentNode be node’s next sibling. + * 6. While currentNode is an exclusive Text node: + */ + if (DOMImpl_1.dom.rangeList.size !== 0) { + var currentNode = node_1._nextSibling; + while (currentNode !== null && util_1.Guard.isExclusiveTextNode(currentNode)) { + /** + * 6.1. For each live range whose start node is currentNode, add length + * to its start offset and set its start node to node. + * 6.2. For each live range whose end node is currentNode, add length to + * its end offset and set its end node to node. + * 6.3. For each live range whose start node is currentNode’s parent and + * start offset is currentNode’s index, set its start node to node and + * its start offset to length. + * 6.4. For each live range whose end node is currentNode’s parent and + * end offset is currentNode’s index, set its end node to node and its + * end offset to length. + */ + var cn = currentNode; + var index = algorithm_1.tree_index(cn); try { - for (var _d = (e_1 = void 0, __values(element.attributes)), _e = _d.next(); !_e.done; _e = _d.next()) { - var _f = __read(_e.value, 2), attName = _f[0], attValue = _f[1]; - if (attName === "xmlns") { - namespace = attValue; + for (var _e = (e_2 = void 0, __values(DOMImpl_1.dom.rangeList)), _f = _e.next(); !_f.done; _f = _e.next()) { + var range = _f.value; + if (range._start[0] === cn) { + range._start[0] = node_1; + range._start[1] += length; } - else { - var _g = __read(algorithm_1.namespace_extractQName(attName), 2), attPrefix = _g[0], attLocalName = _g[1]; - if (attPrefix === "xmlns") { - if (attLocalName === prefix) { - namespace = attValue; - } - nsDeclarations[attLocalName] = attValue; - } + if (range._end[0] === cn) { + range._end[0] = node_1; + range._end[1] += length; + } + if (range._start[0] === cn._parent && range._start[1] === index) { + range._start[0] = node_1; + range._start[1] = length; + } + if (range._end[0] === cn._parent && range._end[1] === index) { + range._end[0] = node_1; + range._end[1] = length; } } } - catch (e_1_1) { e_1 = { error: e_1_1 }; } + catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { - if (_e && !_e.done && (_a = _d.return)) _a.call(_d); + if (_f && !_f.done && (_b = _e.return)) _b.call(_e); } - finally { if (e_1) throw e_1.error; } + finally { if (e_2) throw e_2.error; } } - // create the DOM element node - var elementNode = (namespace !== null ? - doc.createElementNS(namespace, element.name) : - doc.createElement(element.name)); - context.appendChild(elementNode); - // assign attributes - var localNameSet = new LocalNameSet_1.LocalNameSet(); - try { - for (var _h = (e_2 = void 0, __values(element.attributes)), _j = _h.next(); !_j.done; _j = _h.next()) { - var _k = __read(_j.value, 2), attName = _k[0], attValue = _k[1]; - var _l = __read(algorithm_1.namespace_extractQName(attName), 2), attPrefix = _l[0], attLocalName = _l[1]; - var attNamespace = null; - if (attPrefix === "xmlns" || (attPrefix === null && attLocalName === "xmlns")) { - // namespace declaration attribute - attNamespace = infra_1.namespace.XMLNS; - } - else { - attNamespace = elementNode.lookupNamespaceURI(attPrefix); - if (attNamespace !== null && elementNode.isDefaultNamespace(attNamespace)) { - attNamespace = null; - } - else if (attNamespace === null && attPrefix !== null) { - attNamespace = nsDeclarations[attPrefix] || null; - } - } - if (localNameSet.has(attNamespace, attLocalName)) { - throw new Error("Element contains duplicate attributes."); - } - localNameSet.set(attNamespace, attLocalName); - if (attNamespace === infra_1.namespace.XMLNS) { - if (attValue === infra_1.namespace.XMLNS) { - throw new Error("XMLNS namespace is reserved."); - } - } - if (attLocalName.indexOf(":") !== -1 || !algorithm_1.xml_isName(attLocalName)) { - throw new Error("Attribute local name contains invalid characters."); - } - if (attPrefix === "xmlns" && attValue === "") { - throw new Error("Empty XML namespace is not allowed."); - } - if (attNamespace !== null) - elementNode.setAttributeNS(attNamespace, attName, attValue); - else - elementNode.setAttribute(attName, attValue); - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_j && !_j.done && (_b = _h.return)) _b.call(_h); - } - finally { if (e_2) throw e_2.error; } - } - if (!element.selfClosing) { - context = elementNode; - } - break; - case interfaces_1.TokenType.ClosingTag: - var closingTag = token; - if (closingTag.name !== context.nodeName) { - throw new Error('Closing tag name does not match opening tag name.'); + /** + * 6.5. Add currentNode’s length to length. + * 6.6. Set currentNode to its next sibling. + */ + length += algorithm_1.tree_nodeLength(currentNode); + currentNode = currentNode._nextSibling; + } + } + /** + * 7. Remove node’s contiguous exclusive Text nodes (excluding itself), + * in tree order. + */ + for (var i_1 = 0; i_1 < textSiblings.length; i_1++) { + var sibling = textSiblings[i_1]; + if (sibling._parent === null) + continue; + algorithm_1.mutation_remove(sibling, sibling._parent); + } + } + }; + /** + * Returns a duplicate of this node, i.e., serves as a generic copy + * constructor for nodes. The duplicate node has no parent + * ({@link parentNode} returns `null`). + * + * @param deep - if `true`, recursively clone the subtree under the + * specified node. If `false`, clone only the node itself (and its + * attributes, if it is an {@link Element}). + */ + NodeImpl.prototype.cloneNode = function (deep) { + if (deep === void 0) { deep = false; } + /** + * 1. If context object is a shadow root, then throw a "NotSupportedError" + * DOMException. + * 2. Return a clone of the context object, with the clone children flag set + * if deep is true. + */ + if (util_1.Guard.isShadowRoot(this)) + throw new DOMException_1.NotSupportedError(); + return algorithm_1.node_clone(this, null, deep); + }; + /** + * Determines if the given node is equal to this one. + * + * @param node - the node to compare with + */ + NodeImpl.prototype.isEqualNode = function (node) { + if (node === void 0) { node = null; } + /** + * The isEqualNode(otherNode) method, when invoked, must return true if + * otherNode is non-null and context object equals otherNode, and false + * otherwise. + */ + return (node !== null && algorithm_1.node_equals(this, node)); + }; + /** + * Determines if the given node is reference equal to this one. + * + * @param node - the node to compare with + */ + NodeImpl.prototype.isSameNode = function (node) { + if (node === void 0) { node = null; } + /** + * The isSameNode(otherNode) method, when invoked, must return true if + * otherNode is context object, and false otherwise. + */ + return (this === node); + }; + /** + * Returns a bitmask indicating the position of the given `node` + * relative to this node. + */ + NodeImpl.prototype.compareDocumentPosition = function (other) { + /** + * 1. If context object is other, then return zero. + * 2. Let node1 be other and node2 be context object. + * 3. Let attr1 and attr2 be null. + * attr1’s element. + */ + if (other === this) + return 0; + var node1 = other; + var node2 = this; + var attr1 = null; + var attr2 = null; + /** + * 4. If node1 is an attribute, then set attr1 to node1 and node1 to + * attr1’s element. + */ + if (util_1.Guard.isAttrNode(node1)) { + attr1 = node1; + node1 = attr1._element; + } + /** + * 5. If node2 is an attribute, then: + */ + if (util_1.Guard.isAttrNode(node2)) { + /** + * 5.1. Set attr2 to node2 and node2 to attr2’s element. + */ + attr2 = node2; + node2 = attr2._element; + /** + * 5.2. If attr1 and node1 are non-null, and node2 is node1, then: + */ + if (attr1 && node1 && (node1 === node2)) { + /** + * 5.2. For each attr in node2’s attribute list: + */ + for (var i = 0; i < node2._attributeList.length; i++) { + var attr = node2._attributeList[i]; + /** + * 5.2.1. If attr equals attr1, then return the result of adding + * DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC and + * DOCUMENT_POSITION_PRECEDING. + * 5.2.2. If attr equals attr2, then return the result of adding + * DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC and + * DOCUMENT_POSITION_FOLLOWING. + */ + if (algorithm_1.node_equals(attr, attr1)) { + return interfaces_1.Position.ImplementationSpecific | interfaces_1.Position.Preceding; } - /* istanbul ignore else */ - if (context._parent) { - context = context._parent; + else if (algorithm_1.node_equals(attr, attr2)) { + return interfaces_1.Position.ImplementationSpecific | interfaces_1.Position.Following; } - break; + } } - token = lexer.nextToken(); } - return doc; + /** + * 6. If node1 or node2 is null, or node1’s root is not node2’s root, then + * return the result of adding DOCUMENT_POSITION_DISCONNECTED, + * DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, and either + * DOCUMENT_POSITION_PRECEDING or DOCUMENT_POSITION_FOLLOWING, + * with the constraint that this is to be consistent, together. + */ + if (node1 === null || node2 === null || + algorithm_1.tree_rootNode(node1) !== algorithm_1.tree_rootNode(node2)) { + // nodes are disconnected + // return a random result but cache the value for consistency + return interfaces_1.Position.Disconnected | interfaces_1.Position.ImplementationSpecific | + (DOMImpl_1.dom.compareCache.check(this, other) ? interfaces_1.Position.Preceding : interfaces_1.Position.Following); + } + /** + * 7. If node1 is an ancestor of node2 and attr1 is null, or node1 is node2 + * and attr2 is non-null, then return the result of adding + * DOCUMENT_POSITION_CONTAINS to DOCUMENT_POSITION_PRECEDING. + */ + if ((!attr1 && algorithm_1.tree_isAncestorOf(node2, node1)) || + (attr2 && (node1 === node2))) { + return interfaces_1.Position.Contains | interfaces_1.Position.Preceding; + } + /** + * 8. If node1 is a descendant of node2 and attr2 is null, or node1 is node2 + * and attr1 is non-null, then return the result of adding + * DOCUMENT_POSITION_CONTAINED_BY to DOCUMENT_POSITION_FOLLOWING. + */ + if ((!attr2 && algorithm_1.tree_isDescendantOf(node2, node1)) || + (attr1 && (node1 === node2))) { + return interfaces_1.Position.ContainedBy | interfaces_1.Position.Following; + } + /** + * 9. If node1 is preceding node2, then return DOCUMENT_POSITION_PRECEDING. + */ + if (algorithm_1.tree_isPreceding(node2, node1)) + return interfaces_1.Position.Preceding; + /** + * 10. Return DOCUMENT_POSITION_FOLLOWING. + */ + return interfaces_1.Position.Following; }; - return XMLParserImpl; -}()); -exports.XMLParserImpl = XMLParserImpl; -//# sourceMappingURL=XMLParserImpl.js.map - -/***/ }), -/* 469 */, -/* 470 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const command_1 = __webpack_require__(431); -const file_command_1 = __webpack_require__(102); -const utils_1 = __webpack_require__(82); -const os = __importStar(__webpack_require__(87)); -const path = __importStar(__webpack_require__(622)); -/** - * The code to exit an action - */ -var ExitCode; -(function (ExitCode) { /** - * A code indicating that the action was successful + * Returns `true` if given node is an inclusive descendant of this + * node, and `false` otherwise (including when other node is `null`). + * + * @param other - the node to check */ - ExitCode[ExitCode["Success"] = 0] = "Success"; + NodeImpl.prototype.contains = function (other) { + /** + * The contains(other) method, when invoked, must return true if other is an + * inclusive descendant of context object, and false otherwise (including + * when other is null). + */ + if (other === null) + return false; + return algorithm_1.tree_isDescendantOf(this, other, true); + }; /** - * A code indicating that the action was a failure + * Returns the prefix for a given namespace URI, if present, and + * `null` if not. + * + * @param namespace - the namespace to search */ - ExitCode[ExitCode["Failure"] = 1] = "Failure"; -})(ExitCode = exports.ExitCode || (exports.ExitCode = {})); -//----------------------------------------------------------------------- -// Variables -//----------------------------------------------------------------------- + NodeImpl.prototype.lookupPrefix = function (namespace) { + /** + * 1. If namespace is null or the empty string, then return null. + * 2. Switch on the context object: + */ + if (!namespace) + return null; + if (util_1.Guard.isElementNode(this)) { + /** + * Return the result of locating a namespace prefix for it using + * namespace. + */ + return algorithm_1.node_locateANamespacePrefix(this, namespace); + } + else if (util_1.Guard.isDocumentNode(this)) { + /** + * Return the result of locating a namespace prefix for its document + * element, if its document element is non-null, and null otherwise. + */ + if (this.documentElement === null) { + return null; + } + else { + return algorithm_1.node_locateANamespacePrefix(this.documentElement, namespace); + } + } + else if (util_1.Guard.isDocumentTypeNode(this) || util_1.Guard.isDocumentFragmentNode(this)) { + return null; + } + else if (util_1.Guard.isAttrNode(this)) { + /** + * Return the result of locating a namespace prefix for its element, + * if its element is non-null, and null otherwise. + */ + if (this._element === null) { + return null; + } + else { + return algorithm_1.node_locateANamespacePrefix(this._element, namespace); + } + } + else { + /** + * Return the result of locating a namespace prefix for its parent + * element, if its parent element is non-null, and null otherwise. + */ + if (this._parent !== null && util_1.Guard.isElementNode(this._parent)) { + return algorithm_1.node_locateANamespacePrefix(this._parent, namespace); + } + else { + return null; + } + } + }; + /** + * Returns the namespace URI for a given prefix if present, and `null` + * if not. + * + * @param prefix - the prefix to search + */ + NodeImpl.prototype.lookupNamespaceURI = function (prefix) { + /** + * 1. If prefix is the empty string, then set it to null. + * 2. Return the result of running locate a namespace for the context object + * using prefix. + */ + return algorithm_1.node_locateANamespace(this, prefix || null); + }; + /** + * Returns `true` if the namespace is the default namespace on this + * node or `false` if not. + * + * @param namespace - the namespace to check + */ + NodeImpl.prototype.isDefaultNamespace = function (namespace) { + /** + * 1. If namespace is the empty string, then set it to null. + * 2. Let defaultNamespace be the result of running locate a namespace for + * context object using null. + * 3. Return true if defaultNamespace is the same as namespace, and false otherwise. + */ + if (!namespace) + namespace = null; + var defaultNamespace = algorithm_1.node_locateANamespace(this, null); + return (defaultNamespace === namespace); + }; + /** + * Inserts the node `newChild` before the existing child node + * `refChild`. If `refChild` is `null`, inserts `newChild` at the end + * of the list of children. + * + * If `newChild` is a {@link DocumentFragment} object, all of its + * children are inserted, in the same order, before `refChild`. + * + * If `newChild` is already in the tree, it is first removed. + * + * @param newChild - the node to insert + * @param refChild - the node before which the new node must be + * inserted + * + * @returns the newly inserted child node + */ + NodeImpl.prototype.insertBefore = function (newChild, refChild) { + /** + * The insertBefore(node, child) method, when invoked, must return the + * result of pre-inserting node into context object before child. + */ + return algorithm_1.mutation_preInsert(newChild, this, refChild); + }; + /** + * Adds the node `newChild` to the end of the list of children of this + * node, and returns it. If `newChild` is already in the tree, it is + * first removed. + * + * If `newChild` is a {@link DocumentFragment} object, the entire + * contents of the document fragment are moved into the child list of + * this node. + * + * @param newChild - the node to add + * + * @returns the newly inserted child node + */ + NodeImpl.prototype.appendChild = function (newChild) { + /** + * The appendChild(node) method, when invoked, must return the result of + * appending node to context object. + */ + return algorithm_1.mutation_append(newChild, this); + }; + /** + * Replaces the child node `oldChild` with `newChild` in the list of + * children, and returns the `oldChild` node. If `newChild` is already + * in the tree, it is first removed. + * + * @param newChild - the new node to put in the child list + * @param oldChild - the node being replaced in the list + * + * @returns the removed child node + */ + NodeImpl.prototype.replaceChild = function (newChild, oldChild) { + /** + * The replaceChild(node, child) method, when invoked, must return the + * result of replacing child with node within context object. + */ + return algorithm_1.mutation_replace(oldChild, newChild, this); + }; + /** + * Removes the child node indicated by `oldChild` from the list of + * children, and returns it. + * + * @param oldChild - the node being removed from the list + * + * @returns the removed child node + */ + NodeImpl.prototype.removeChild = function (oldChild) { + /** + * The removeChild(child) method, when invoked, must return the result of + * pre-removing child from context object. + */ + return algorithm_1.mutation_preRemove(oldChild, this); + }; + /** + * Gets the parent event target for the given event. + * + * @param event - an event + */ + NodeImpl.prototype._getTheParent = function (event) { + /** + * A node’s get the parent algorithm, given an event, returns the node’s + * assigned slot, if node is assigned, and node’s parent otherwise. + */ + if (util_1.Guard.isSlotable(this) && algorithm_1.shadowTree_isAssigned(this)) { + return this._assignedSlot; + } + else { + return this._parent; + } + }; + NodeImpl.ELEMENT_NODE = 1; + NodeImpl.ATTRIBUTE_NODE = 2; + NodeImpl.TEXT_NODE = 3; + NodeImpl.CDATA_SECTION_NODE = 4; + NodeImpl.ENTITY_REFERENCE_NODE = 5; + NodeImpl.ENTITY_NODE = 6; + NodeImpl.PROCESSING_INSTRUCTION_NODE = 7; + NodeImpl.COMMENT_NODE = 8; + NodeImpl.DOCUMENT_NODE = 9; + NodeImpl.DOCUMENT_TYPE_NODE = 10; + NodeImpl.DOCUMENT_FRAGMENT_NODE = 11; + NodeImpl.NOTATION_NODE = 12; + NodeImpl.DOCUMENT_POSITION_DISCONNECTED = 0x01; + NodeImpl.DOCUMENT_POSITION_PRECEDING = 0x02; + NodeImpl.DOCUMENT_POSITION_FOLLOWING = 0x04; + NodeImpl.DOCUMENT_POSITION_CONTAINS = 0x08; + NodeImpl.DOCUMENT_POSITION_CONTAINED_BY = 0x10; + NodeImpl.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20; + return NodeImpl; +}(EventTargetImpl_1.EventTargetImpl)); +exports.NodeImpl = NodeImpl; /** - * 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 + * A performance tweak to share an empty set between all node classes. This will + * be overwritten by element, document and document fragment nodes to supply an + * actual set of nodes. */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -function exportVariable(name, val) { - const convertedVal = utils_1.toCommandValue(val); - process.env[name] = convertedVal; - const filePath = process.env['GITHUB_ENV'] || ''; - if (filePath) { - const delimiter = '_GitHubActionsFileCommandDelimeter_'; - const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`; - file_command_1.issueCommand('ENV', commandValue); - } - else { - command_1.issueCommand('set-env', { name }, convertedVal); - } -} -exports.exportVariable = exportVariable; +NodeImpl.prototype._children = new util_1.EmptySet(); /** - * Registers a secret which will get masked from logs - * @param secret value of the secret + * Define constants on prototype. */ -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; +WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "ELEMENT_NODE", 1); +WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "ATTRIBUTE_NODE", 2); +WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "TEXT_NODE", 3); +WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "CDATA_SECTION_NODE", 4); +WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "ENTITY_REFERENCE_NODE", 5); +WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "ENTITY_NODE", 6); +WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "PROCESSING_INSTRUCTION_NODE", 7); +WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "COMMENT_NODE", 8); +WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "DOCUMENT_NODE", 9); +WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "DOCUMENT_TYPE_NODE", 10); +WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "DOCUMENT_FRAGMENT_NODE", 11); +WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "NOTATION_NODE", 12); +WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "DOCUMENT_POSITION_DISCONNECTED", 0x01); +WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "DOCUMENT_POSITION_PRECEDING", 0x02); +WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "DOCUMENT_POSITION_FOLLOWING", 0x04); +WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "DOCUMENT_POSITION_CONTAINS", 0x08); +WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "DOCUMENT_POSITION_CONTAINED_BY", 0x10); +WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", 0x20); +//# sourceMappingURL=NodeImpl.js.map + +/***/ }), + +/***/ 1997: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var TraverserImpl_1 = __nccwpck_require__(9782); +var algorithm_1 = __nccwpck_require__(61); /** - * Gets the value of an input. The value is also trimmed. - * - * @param name name of the input to get - * @param options optional. See InputOptions. - * @returns string + * Represents an object which can be used to iterate through the nodes + * of a subtree. */ -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}`); +var NodeIteratorImpl = /** @class */ (function (_super) { + __extends(NodeIteratorImpl, _super); + /** + * Initializes a new instance of `NodeIterator`. + */ + function NodeIteratorImpl(root, reference, pointerBeforeReference) { + var _this = _super.call(this, root) || this; + _this._iteratorCollection = undefined; + _this._reference = reference; + _this._pointerBeforeReference = pointerBeforeReference; + algorithm_1.nodeIterator_iteratorList().add(_this); + return _this; } - return val.trim(); -} -exports.getInput = getInput; -/** - * Sets the value of an output. - * - * @param name name of the output to set - * @param value value to store. Non-string values will be converted to a string via JSON.stringify - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -function setOutput(name, value) { - command_1.issueCommand('set-output', { name }, value); -} -exports.setOutput = setOutput; -/** - * Enables or disables the echoing of commands into stdout for the rest of the step. - * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set. - * - */ -function setCommandEcho(enabled) { - command_1.issue('echo', enabled ? 'on' : 'off'); -} -exports.setCommandEcho = setCommandEcho; -//----------------------------------------------------------------------- -// Results -//----------------------------------------------------------------------- -/** - * Sets the action status to failed. - * When the action exits it will be with an exit code of 1 - * @param message add error issue message - */ -function setFailed(message) { - process.exitCode = ExitCode.Failure; - error(message); -} -exports.setFailed = setFailed; -//----------------------------------------------------------------------- -// Logging Commands -//----------------------------------------------------------------------- -/** - * Gets whether Actions Step Debug is on or not - */ -function isDebug() { - return process.env['RUNNER_DEBUG'] === '1'; -} -exports.isDebug = isDebug; -/** - * Writes debug message to user log - * @param message debug message - */ -function debug(message) { - command_1.issueCommand('debug', {}, message); -} -exports.debug = debug; -/** - * Adds an error issue - * @param message error issue message. Errors will be converted to string via toString() - */ -function error(message) { - command_1.issue('error', message instanceof Error ? message.toString() : message); -} -exports.error = error; -/** - * Adds an warning issue - * @param message warning issue message. Errors will be converted to string via toString() - */ -function warning(message) { - command_1.issue('warning', message instanceof Error ? message.toString() : message); -} -exports.warning = warning; -/** - * Writes info to log with console.log. - * @param message info message - */ -function info(message) { - process.stdout.write(message + os.EOL); -} -exports.info = info; -/** - * Begin an output group. - * - * Output until the next `groupEnd` will be foldable in this group - * - * @param name The name of the output group - */ -function startGroup(name) { - command_1.issue('group', name); -} -exports.startGroup = startGroup; -/** - * End an output group. - */ -function endGroup() { - command_1.issue('endgroup'); -} -exports.endGroup = endGroup; -/** - * Wrap an asynchronous function call in a group. - * - * Returns the same type as the function itself. - * - * @param name The name of the group - * @param fn The function to wrap in the group - */ -function group(name, fn) { - return __awaiter(this, void 0, void 0, function* () { - startGroup(name); - let result; - try { - result = yield fn(); - } - finally { - endGroup(); - } - return result; + Object.defineProperty(NodeIteratorImpl.prototype, "referenceNode", { + /** @inheritdoc */ + get: function () { return this._reference; }, + enumerable: true, + configurable: true }); -} -exports.group = group; -//----------------------------------------------------------------------- -// Wrapper action state -//----------------------------------------------------------------------- -/** - * Saves state for current action, the state can only be retrieved by this action's post job execution. - * - * @param name name of the state to store - * @param value value to store. Non-string values will be converted to a string via JSON.stringify - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -function saveState(name, value) { - command_1.issueCommand('save-state', { name }, value); -} -exports.saveState = saveState; -/** - * Gets the value of an state set by this action's main execution. - * - * @param name name of the state to get - * @returns string - */ -function getState(name) { - return process.env[`STATE_${name}`] || ''; -} -exports.getState = getState; -//# sourceMappingURL=core.js.map + Object.defineProperty(NodeIteratorImpl.prototype, "pointerBeforeReferenceNode", { + /** @inheritdoc */ + get: function () { return this._pointerBeforeReference; }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + NodeIteratorImpl.prototype.nextNode = function () { + /** + * The nextNode() method, when invoked, must return the result of + * traversing with the context object and next. + */ + return algorithm_1.nodeIterator_traverse(this, true); + }; + /** @inheritdoc */ + NodeIteratorImpl.prototype.previousNode = function () { + /** + * The previousNode() method, when invoked, must return the result of + * traversing with the context object and previous. + */ + return algorithm_1.nodeIterator_traverse(this, false); + }; + /** @inheritdoc */ + NodeIteratorImpl.prototype.detach = function () { + /** + * The detach() method, when invoked, must do nothing. + * + * since JS lacks weak references, we still use detach + */ + algorithm_1.nodeIterator_iteratorList().delete(this); + }; + /** + * Creates a new `NodeIterator`. + * + * @param root - iterator's root node + * @param reference - reference node + * @param pointerBeforeReference - whether the iterator is before or after the + * reference node + */ + NodeIteratorImpl._create = function (root, reference, pointerBeforeReference) { + return new NodeIteratorImpl(root, reference, pointerBeforeReference); + }; + return NodeIteratorImpl; +}(TraverserImpl_1.TraverserImpl)); +exports.NodeIteratorImpl = NodeIteratorImpl; +//# sourceMappingURL=NodeIteratorImpl.js.map /***/ }), -/* 471 */, -/* 472 */, -/* 473 */, -/* 474 */, -/* 475 */, -/* 476 */, -/* 477 */, -/* 478 */, -/* 479 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 3728: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -19702,1275 +18190,1563 @@ var __values = (this && this.__values) || function(o) { }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spread = (this && this.__spread) || function () { - for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); - return ar; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var DOMException_1 = __webpack_require__(35); -var interfaces_1 = __webpack_require__(970); -var util_1 = __webpack_require__(918); -var util_2 = __webpack_require__(592); -var infra_1 = __webpack_require__(23); -var CustomElementAlgorithm_1 = __webpack_require__(344); -var TreeAlgorithm_1 = __webpack_require__(873); -var NodeIteratorAlgorithm_1 = __webpack_require__(272); -var ShadowTreeAlgorithm_1 = __webpack_require__(180); -var MutationObserverAlgorithm_1 = __webpack_require__(151); -var DOMAlgorithm_1 = __webpack_require__(304); -var DocumentAlgorithm_1 = __webpack_require__(493); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var util_1 = __nccwpck_require__(6195); +var algorithm_1 = __nccwpck_require__(61); /** - * Ensures pre-insertion validity of a node into a parent before a - * child. - * - * @param node - node to insert - * @param parent - parent node to receive node - * @param child - child node to insert node before + * Represents an ordered set of nodes. */ -function mutation_ensurePreInsertionValidity(node, parent, child) { - var e_1, _a, e_2, _b, e_3, _c, e_4, _d; - var parentNodeType = parent._nodeType; - var nodeNodeType = node._nodeType; - var childNodeType = child ? child._nodeType : null; - /** - * 1. If parent is not a Document, DocumentFragment, or Element node, - * throw a "HierarchyRequestError" DOMException. - */ - if (parentNodeType !== interfaces_1.NodeType.Document && - parentNodeType !== interfaces_1.NodeType.DocumentFragment && - parentNodeType !== interfaces_1.NodeType.Element) - throw new DOMException_1.HierarchyRequestError("Only document, document fragment and element nodes can contain child nodes. Parent node is " + parent.nodeName + "."); +var NodeListImpl = /** @class */ (function () { /** - * 2. If node is a host-including inclusive ancestor of parent, throw a - * "HierarchyRequestError" DOMException. + * Initializes a new instance of `NodeList`. + * + * @param root - root node */ - if (TreeAlgorithm_1.tree_isHostIncludingAncestorOf(parent, node, true)) - throw new DOMException_1.HierarchyRequestError("The node to be inserted cannot be an inclusive ancestor of parent node. Node is " + node.nodeName + ", parent node is " + parent.nodeName + "."); + function NodeListImpl(root) { + this._live = true; + this._filter = null; + this._length = 0; + this._root = root; + return new Proxy(this, this); + } + Object.defineProperty(NodeListImpl.prototype, "length", { + /** @inheritdoc */ + get: function () { + /** + * The length attribute must return the number of nodes represented + * by the collection. + */ + return this._root._children.size; + }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + NodeListImpl.prototype.item = function (index) { + /** + * The item(index) method must return the indexth node in the collection. + * If there is no indexth node in the collection, then the method must + * return null. + */ + if (index < 0 || index > this.length - 1) + return null; + if (index < this.length / 2) { + var i = 0; + var node = this._root._firstChild; + while (node !== null && i !== index) { + node = node._nextSibling; + i++; + } + return node; + } + else { + var i = this.length - 1; + var node = this._root._lastChild; + while (node !== null && i !== index) { + node = node._previousSibling; + i--; + } + return node; + } + }; + /** @inheritdoc */ + NodeListImpl.prototype.keys = function () { + var _a; + return _a = {}, + _a[Symbol.iterator] = function () { + var index = 0; + return { + next: function () { + if (index === this.length) { + return { done: true, value: null }; + } + else { + return { done: false, value: index++ }; + } + }.bind(this) + }; + }.bind(this), + _a; + }; + /** @inheritdoc */ + NodeListImpl.prototype.values = function () { + var _a; + return _a = {}, + _a[Symbol.iterator] = function () { + var it = this[Symbol.iterator](); + return { + next: function () { + return it.next(); + } + }; + }.bind(this), + _a; + }; + /** @inheritdoc */ + NodeListImpl.prototype.entries = function () { + var _a; + return _a = {}, + _a[Symbol.iterator] = function () { + var it = this[Symbol.iterator](); + var index = 0; + return { + next: function () { + var itResult = it.next(); + if (itResult.done) { + return { done: true, value: null }; + } + else { + return { done: false, value: [index++, itResult.value] }; + } + } + }; + }.bind(this), + _a; + }; + /** @inheritdoc */ + NodeListImpl.prototype[Symbol.iterator] = function () { + return this._root._children[Symbol.iterator](); + }; + /** @inheritdoc */ + NodeListImpl.prototype.forEach = function (callback, thisArg) { + var e_1, _a; + if (thisArg === undefined) { + thisArg = DOMImpl_1.dom.window; + } + var index = 0; + try { + for (var _b = __values(this._root._children), _c = _b.next(); !_c.done; _c = _b.next()) { + var node = _c.value; + callback.call(thisArg, node, index++, this); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + }; /** - * 3. If child is not null and its parent is not parent, then throw a - * "NotFoundError" DOMException. + * Implements a proxy get trap to provide array-like access. */ - if (child !== null && child._parent !== parent) - throw new DOMException_1.NotFoundError("The reference child node cannot be found under parent node. Child node is " + child.nodeName + ", parent node is " + parent.nodeName + "."); + NodeListImpl.prototype.get = function (target, key, receiver) { + if (!util_1.isString(key)) { + return Reflect.get(target, key, receiver); + } + var index = Number(key); + if (isNaN(index)) { + return Reflect.get(target, key, receiver); + } + return target.item(index) || undefined; + }; /** - * 4. If node is not a DocumentFragment, DocumentType, Element, Text, - * ProcessingInstruction, or Comment node, throw a "HierarchyRequestError" - * DOMException. + * Implements a proxy set trap to provide array-like access. */ - if (nodeNodeType !== interfaces_1.NodeType.DocumentFragment && - nodeNodeType !== interfaces_1.NodeType.DocumentType && - nodeNodeType !== interfaces_1.NodeType.Element && - nodeNodeType !== interfaces_1.NodeType.Text && - nodeNodeType !== interfaces_1.NodeType.ProcessingInstruction && - nodeNodeType !== interfaces_1.NodeType.CData && - nodeNodeType !== interfaces_1.NodeType.Comment) - throw new DOMException_1.HierarchyRequestError("Only document fragment, document type, element, text, processing instruction, cdata section or comment nodes can be inserted. Node is " + node.nodeName + "."); + NodeListImpl.prototype.set = function (target, key, value, receiver) { + if (!util_1.isString(key)) { + return Reflect.set(target, key, value, receiver); + } + var index = Number(key); + if (isNaN(index)) { + return Reflect.set(target, key, value, receiver); + } + var node = target.item(index) || undefined; + if (!node) + return false; + if (node._parent) { + algorithm_1.mutation_replace(node, value, node._parent); + return true; + } + else { + return false; + } + }; /** - * 5. If either node is a Text node and parent is a document, or node is a - * doctype and parent is not a document, throw a "HierarchyRequestError" - * DOMException. + * Creates a new `NodeList`. + * + * @param root - root node */ - if (nodeNodeType === interfaces_1.NodeType.Text && - parentNodeType === interfaces_1.NodeType.Document) - throw new DOMException_1.HierarchyRequestError("Cannot insert a text node as a child of a document node. Node is " + node.nodeName + "."); - if (nodeNodeType === interfaces_1.NodeType.DocumentType && - parentNodeType !== interfaces_1.NodeType.Document) - throw new DOMException_1.HierarchyRequestError("A document type node can only be inserted under a document node. Parent node is " + parent.nodeName + "."); - /** - * 6. If parent is a document, and any of the statements below, switched on - * node, are true, throw a "HierarchyRequestError" DOMException. - * - DocumentFragment node - * If node has more than one element child or has a Text node child. - * Otherwise, if node has one element child and either parent has an element - * child, child is a doctype, or child is not null and a doctype is - * following child. - * - element - * parent has an element child, child is a doctype, or child is not null and - * a doctype is following child. - * - doctype - * parent has a doctype child, child is non-null and an element is preceding - * child, or child is null and parent has an element child. - */ - if (parentNodeType === interfaces_1.NodeType.Document) { - if (nodeNodeType === interfaces_1.NodeType.DocumentFragment) { - var eleCount = 0; - try { - for (var _e = __values(node._children), _f = _e.next(); !_f.done; _f = _e.next()) { - var childNode = _f.value; - if (childNode._nodeType === interfaces_1.NodeType.Element) - eleCount++; - else if (childNode._nodeType === interfaces_1.NodeType.Text) - throw new DOMException_1.HierarchyRequestError("Cannot insert text a node as a child of a document node. Node is " + childNode.nodeName + "."); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_f && !_f.done && (_a = _e.return)) _a.call(_e); - } - finally { if (e_1) throw e_1.error; } - } - if (eleCount > 1) { - throw new DOMException_1.HierarchyRequestError("A document node can only have one document element node. Document fragment to be inserted has " + eleCount + " element nodes."); - } - else if (eleCount === 1) { - try { - for (var _g = __values(parent._children), _h = _g.next(); !_h.done; _h = _g.next()) { - var ele = _h.value; - if (ele._nodeType === interfaces_1.NodeType.Element) - throw new DOMException_1.HierarchyRequestError("The document node already has a document element node."); - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_h && !_h.done && (_b = _g.return)) _b.call(_g); - } - finally { if (e_2) throw e_2.error; } - } - if (child) { - if (childNodeType === interfaces_1.NodeType.DocumentType) - throw new DOMException_1.HierarchyRequestError("Cannot insert an element node before a document type node."); - var doctypeChild = child._nextSibling; - while (doctypeChild) { - if (doctypeChild._nodeType === interfaces_1.NodeType.DocumentType) - throw new DOMException_1.HierarchyRequestError("Cannot insert an element node before a document type node."); - doctypeChild = doctypeChild._nextSibling; - } - } - } - } - else if (nodeNodeType === interfaces_1.NodeType.Element) { - try { - for (var _j = __values(parent._children), _k = _j.next(); !_k.done; _k = _j.next()) { - var ele = _k.value; - if (ele._nodeType === interfaces_1.NodeType.Element) - throw new DOMException_1.HierarchyRequestError("Document already has a document element node. Node is " + node.nodeName + "."); - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (_k && !_k.done && (_c = _j.return)) _c.call(_j); - } - finally { if (e_3) throw e_3.error; } - } - if (child) { - if (childNodeType === interfaces_1.NodeType.DocumentType) - throw new DOMException_1.HierarchyRequestError("Cannot insert an element node before a document type node. Node is " + node.nodeName + "."); - var doctypeChild = child._nextSibling; - while (doctypeChild) { - if (doctypeChild._nodeType === interfaces_1.NodeType.DocumentType) - throw new DOMException_1.HierarchyRequestError("Cannot insert an element node before a document type node. Node is " + node.nodeName + "."); - doctypeChild = doctypeChild._nextSibling; - } - } - } - else if (nodeNodeType === interfaces_1.NodeType.DocumentType) { - try { - for (var _l = __values(parent._children), _m = _l.next(); !_m.done; _m = _l.next()) { - var ele = _m.value; - if (ele._nodeType === interfaces_1.NodeType.DocumentType) - throw new DOMException_1.HierarchyRequestError("Document already has a document type node. Node is " + node.nodeName + "."); - } - } - catch (e_4_1) { e_4 = { error: e_4_1 }; } - finally { - try { - if (_m && !_m.done && (_d = _l.return)) _d.call(_l); - } - finally { if (e_4) throw e_4.error; } - } - if (child) { - var elementChild = child._previousSibling; - while (elementChild) { - if (elementChild._nodeType === interfaces_1.NodeType.Element) - throw new DOMException_1.HierarchyRequestError("Cannot insert a document type node before an element node. Node is " + node.nodeName + "."); - elementChild = elementChild._previousSibling; - } - } - else { - var elementChild = parent._firstChild; - while (elementChild) { - if (elementChild._nodeType === interfaces_1.NodeType.Element) - throw new DOMException_1.HierarchyRequestError("Cannot insert a document type node before an element node. Node is " + node.nodeName + "."); - elementChild = elementChild._nextSibling; - } - } + NodeListImpl._create = function (root) { + return new NodeListImpl(root); + }; + return NodeListImpl; +}()); +exports.NodeListImpl = NodeListImpl; +//# sourceMappingURL=NodeListImpl.js.map + +/***/ }), + +/***/ 5306: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; } - } -} -exports.mutation_ensurePreInsertionValidity = mutation_ensurePreInsertionValidity; + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var util_1 = __nccwpck_require__(6195); /** - * Ensures pre-insertion validity of a node into a parent before a - * child, then adopts the node to the tree and inserts it. - * - * @param node - node to insert - * @param parent - parent node to receive node - * @param child - child node to insert node before + * Represents an ordered list of nodes. + * This is a static implementation of `NodeList`. */ -function mutation_preInsert(node, parent, child) { +var NodeListStaticImpl = /** @class */ (function () { /** - * 1. Ensure pre-insertion validity of node into parent before child. - * 2. Let reference child be child. - * 3. If reference child is node, set it to node’s next sibling. - * 4. Adopt node into parent’s node document. - * 5. Insert node into parent before reference child. - * 6. Return node. + * Initializes a new instance of `NodeList`. + * + * @param root - root node */ - mutation_ensurePreInsertionValidity(node, parent, child); - var referenceChild = child; - if (referenceChild === node) - referenceChild = node._nextSibling; - DocumentAlgorithm_1.document_adopt(node, parent._nodeDocument); - mutation_insert(node, parent, referenceChild); - return node; -} -exports.mutation_preInsert = mutation_preInsert; -/** - * Inserts a node into a parent node before the given child node. - * - * @param node - node to insert - * @param parent - parent node to receive node - * @param child - child node to insert node before - * @param suppressObservers - whether to notify observers - */ -function mutation_insert(node, parent, child, suppressObservers) { - var e_5, _a; - // Optimized common case - if (child === null && node._nodeType !== interfaces_1.NodeType.DocumentFragment) { - mutation_insert_single(node, parent, suppressObservers); - return; + function NodeListStaticImpl(root) { + this._live = false; + this._items = []; + this._length = 0; + this._root = root; + this._items = []; + this._filter = function (node) { return true; }; + return new Proxy(this, this); } - /** - * 1. Let count be the number of children of node if it is a - * DocumentFragment node, and one otherwise. - */ - var count = (node._nodeType === interfaces_1.NodeType.DocumentFragment ? - node._children.size : 1); - /** - * 2. If child is non-null, then: - */ - if (child !== null) { + Object.defineProperty(NodeListStaticImpl.prototype, "length", { + /** @inheritdoc */ + get: function () { + /** + * The length attribute must return the number of nodes represented by + * the collection. + */ + return this._items.length; + }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + NodeListStaticImpl.prototype.item = function (index) { /** - * 2.1. For each live range whose start node is parent and start - * offset is greater than child's index, increase its start - * offset by count. - * 2.2. For each live range whose end node is parent and end - * offset is greater than child's index, increase its end - * offset by count. + * The item(index) method must return the indexth node in the collection. + * If there is no indexth node in the collection, then the method must + * return null. */ - if (DOMImpl_1.dom.rangeList.size !== 0) { - var index_1 = TreeAlgorithm_1.tree_index(child); - try { - for (var _b = __values(DOMImpl_1.dom.rangeList), _c = _b.next(); !_c.done; _c = _b.next()) { - var range = _c.value; - if (range._start[0] === parent && range._start[1] > index_1) { - range._start[1] += count; + if (index < 0 || index > this.length - 1) + return null; + return this._items[index]; + }; + /** @inheritdoc */ + NodeListStaticImpl.prototype.keys = function () { + var _a; + return _a = {}, + _a[Symbol.iterator] = function () { + var index = 0; + return { + next: function () { + if (index === this.length) { + return { done: true, value: null }; + } + else { + return { done: false, value: index++ }; + } + }.bind(this) + }; + }.bind(this), + _a; + }; + /** @inheritdoc */ + NodeListStaticImpl.prototype.values = function () { + var _a; + return _a = {}, + _a[Symbol.iterator] = function () { + var it = this[Symbol.iterator](); + return { + next: function () { + return it.next(); } - if (range._end[0] === parent && range._end[1] > index_1) { - range._end[1] += count; + }; + }.bind(this), + _a; + }; + /** @inheritdoc */ + NodeListStaticImpl.prototype.entries = function () { + var _a; + return _a = {}, + _a[Symbol.iterator] = function () { + var it = this[Symbol.iterator](); + var index = 0; + return { + next: function () { + var itResult = it.next(); + if (itResult.done) { + return { done: true, value: null }; + } + else { + return { done: false, value: [index++, itResult.value] }; + } } - } + }; + }.bind(this), + _a; + }; + /** @inheritdoc */ + NodeListStaticImpl.prototype[Symbol.iterator] = function () { + var it = this._items[Symbol.iterator](); + return { + next: function () { + return it.next(); } - catch (e_5_1) { e_5 = { error: e_5_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_5) throw e_5.error; } + }; + }; + /** @inheritdoc */ + NodeListStaticImpl.prototype.forEach = function (callback, thisArg) { + var e_1, _a; + if (thisArg === undefined) { + thisArg = DOMImpl_1.dom.window; + } + var index = 0; + try { + for (var _b = __values(this._items), _c = _b.next(); !_c.done; _c = _b.next()) { + var node = _c.value; + callback.call(thisArg, node, index++, this); } } - } - /** - * 3. Let nodes be node’s children, if node is a DocumentFragment node; - * otherwise « node ». - */ - var nodes = node._nodeType === interfaces_1.NodeType.DocumentFragment ? new (Array.bind.apply(Array, __spread([void 0], node._children)))() : [node]; - /** - * 4. If node is a DocumentFragment node, remove its children with the - * suppress observers flag set. - */ - if (node._nodeType === interfaces_1.NodeType.DocumentFragment) { - while (node._firstChild) { - mutation_remove(node._firstChild, node, true); + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } } - } + }; /** - * 5. If node is a DocumentFragment node, then queue a tree mutation record - * for node with « », nodes, null, and null. + * Implements a proxy get trap to provide array-like access. */ - if (DOMImpl_1.dom.features.mutationObservers) { - if (node._nodeType === interfaces_1.NodeType.DocumentFragment) { - MutationObserverAlgorithm_1.observer_queueTreeMutationRecord(node, [], nodes, null, null); + NodeListStaticImpl.prototype.get = function (target, key, receiver) { + if (!util_1.isString(key)) { + return Reflect.get(target, key, receiver); } - } - /** - * 6. Let previousSibling be child’s previous sibling or parent’s last - * child if child is null. - */ - var previousSibling = (child ? child._previousSibling : parent._lastChild); - var index = child === null ? -1 : TreeAlgorithm_1.tree_index(child); + var index = Number(key); + if (isNaN(index)) { + return Reflect.get(target, key, receiver); + } + return target._items[index] || undefined; + }; /** - * 7. For each node in nodes, in tree order: + * Implements a proxy set trap to provide array-like access. */ - for (var i = 0; i < nodes.length; i++) { - var node_1 = nodes[i]; - if (util_1.Guard.isElementNode(node_1)) { - // set document element node - if (util_1.Guard.isDocumentNode(parent)) { - parent._documentElement = node_1; - } - // mark that the document has namespaces - if (!node_1._nodeDocument._hasNamespaces && (node_1._namespace !== null || - node_1._namespacePrefix !== null)) { - node_1._nodeDocument._hasNamespaces = true; - } - } - /** - * 7.1. If child is null, then append node to parent’s children. - * 7.2. Otherwise, insert node into parent’s children before child’s - * index. - */ - node_1._parent = parent; - if (child === null) { - infra_1.set.append(parent._children, node_1); + NodeListStaticImpl.prototype.set = function (target, key, value, receiver) { + if (!util_1.isString(key)) { + return Reflect.set(target, key, value, receiver); } - else { - infra_1.set.insert(parent._children, node_1, index); - index++; + var index = Number(key); + if (isNaN(index)) { + return Reflect.set(target, key, value, receiver); } - // assign siblings and children for quick lookups - if (parent._firstChild === null) { - node_1._previousSibling = null; - node_1._nextSibling = null; - parent._firstChild = node_1; - parent._lastChild = node_1; + if (index >= 0 && index < target._items.length) { + target._items[index] = value; + return true; } else { - var prev = (child ? child._previousSibling : parent._lastChild); - var next = (child ? child : null); - node_1._previousSibling = prev; - node_1._nextSibling = next; - if (prev) - prev._nextSibling = node_1; - if (next) - next._previousSibling = node_1; - if (!prev) - parent._firstChild = node_1; - if (!next) - parent._lastChild = node_1; + return false; } + }; + /** + * Creates a new `NodeList`. + * + * @param root - root node + * @param items - a list of items to initialize the list + */ + NodeListStaticImpl._create = function (root, items) { + var list = new NodeListStaticImpl(root); + list._items = items; + return list; + }; + return NodeListStaticImpl; +}()); +exports.NodeListStaticImpl = NodeListStaticImpl; +//# sourceMappingURL=NodeListStaticImpl.js.map + +/***/ }), + +/***/ 1032: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var util_1 = __nccwpck_require__(5282); +/** + * Represents a mixin that extends child nodes that can have siblings + * other than doctypes. This mixin is implemented by {@link Element} and + * {@link CharacterData}. + */ +var NonDocumentTypeChildNodeImpl = /** @class */ (function () { + function NonDocumentTypeChildNodeImpl() { + } + Object.defineProperty(NonDocumentTypeChildNodeImpl.prototype, "previousElementSibling", { + /** @inheritdoc */ + get: function () { + /** + * The previousElementSibling attribute’s getter must return the first + * preceding sibling that is an element, and null otherwise. + */ + var node = util_1.Cast.asNode(this)._previousSibling; + while (node) { + if (util_1.Guard.isElementNode(node)) + return node; + else + node = node._previousSibling; + } + return null; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NonDocumentTypeChildNodeImpl.prototype, "nextElementSibling", { + /** @inheritdoc */ + get: function () { + /** + * The nextElementSibling attribute’s getter must return the first + * following sibling that is an element, and null otherwise. + */ + var node = util_1.Cast.asNode(this)._nextSibling; + while (node) { + if (util_1.Guard.isElementNode(node)) + return node; + else + node = node._nextSibling; + } + return null; + }, + enumerable: true, + configurable: true + }); + return NonDocumentTypeChildNodeImpl; +}()); +exports.NonDocumentTypeChildNodeImpl = NonDocumentTypeChildNodeImpl; +//# sourceMappingURL=NonDocumentTypeChildNodeImpl.js.map + +/***/ }), + +/***/ 733: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var util_1 = __nccwpck_require__(5282); +var algorithm_1 = __nccwpck_require__(61); +/** + * Represents a mixin that extends non-element parent nodes. This mixin + * is implemented by {@link Document} and {@link DocumentFragment}. + */ +var NonElementParentNodeImpl = /** @class */ (function () { + function NonElementParentNodeImpl() { + } + /** @inheritdoc */ + NonElementParentNodeImpl.prototype.getElementById = function (id) { /** - * 7.3. If parent is a shadow host and node is a slotable, then - * assign a slot for node. + * The getElementById(elementId) method, when invoked, must return the first + * element, in tree order, within the context object’s descendants, + * whose ID is elementId, and null if there is no such element otherwise. */ - if (DOMImpl_1.dom.features.slots) { - if (parent._shadowRoot !== null && util_1.Guard.isSlotable(node_1)) { - ShadowTreeAlgorithm_1.shadowTree_assignASlot(node_1); + var ele = algorithm_1.tree_getFirstDescendantNode(util_1.Cast.asNode(this), false, false, function (e) { return util_1.Guard.isElementNode(e); }); + while (ele !== null) { + if (ele._uniqueIdentifier === id) { + return ele; } + ele = algorithm_1.tree_getNextDescendantNode(util_1.Cast.asNode(this), ele, false, false, function (e) { return util_1.Guard.isElementNode(e); }); } - /** - * 7.4. If node is a Text node, run the child text content change - * steps for parent. - */ - if (DOMImpl_1.dom.features.steps) { - if (util_1.Guard.isTextNode(node_1)) { - DOMAlgorithm_1.dom_runChildTextContentChangeSteps(parent); - } + return null; + }; + return NonElementParentNodeImpl; +}()); +exports.NonElementParentNodeImpl = NonElementParentNodeImpl; +//# sourceMappingURL=NonElementParentNodeImpl.js.map + +/***/ }), + +/***/ 5988: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; } - /** - * 7.5. If parent's root is a shadow root, and parent is a slot - * whose assigned nodes is the empty list, then run signal - * a slot change for parent. - */ - if (DOMImpl_1.dom.features.slots) { - if (util_1.Guard.isShadowRoot(TreeAlgorithm_1.tree_rootNode(parent)) && - util_1.Guard.isSlot(parent) && util_2.isEmpty(parent._assignedNodes)) { - ShadowTreeAlgorithm_1.shadowTree_signalASlotChange(parent); + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var util_1 = __nccwpck_require__(5282); +var algorithm_1 = __nccwpck_require__(61); +/** + * Represents a mixin that extends parent nodes that can have children. + * This mixin is implemented by {@link Element}, {@link Document} and + * {@link DocumentFragment}. + */ +var ParentNodeImpl = /** @class */ (function () { + function ParentNodeImpl() { + } + Object.defineProperty(ParentNodeImpl.prototype, "children", { + /** @inheritdoc */ + get: function () { + /** + * The children attribute’s getter must return an HTMLCollection collection + * rooted at context object matching only element children. + */ + return algorithm_1.create_htmlCollection(util_1.Cast.asNode(this)); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ParentNodeImpl.prototype, "firstElementChild", { + /** @inheritdoc */ + get: function () { + /** + * The firstElementChild attribute’s getter must return the first child + * that is an element, and null otherwise. + */ + var node = util_1.Cast.asNode(this)._firstChild; + while (node) { + if (util_1.Guard.isElementNode(node)) + return node; + else + node = node._nextSibling; } - } - /** - * 7.6. Run assign slotables for a tree with node's root. - */ - if (DOMImpl_1.dom.features.slots) { - ShadowTreeAlgorithm_1.shadowTree_assignSlotablesForATree(TreeAlgorithm_1.tree_rootNode(node_1)); - } - /** - * 7.7. For each shadow-including inclusive descendant - * inclusiveDescendant of node, in shadow-including tree - * order: - */ - var inclusiveDescendant = TreeAlgorithm_1.tree_getFirstDescendantNode(node_1, true, true); - while (inclusiveDescendant !== null) { + return null; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ParentNodeImpl.prototype, "lastElementChild", { + /** @inheritdoc */ + get: function () { /** - * 7.7.1. Run the insertion steps with inclusiveDescendant. + * The lastElementChild attribute’s getter must return the last child that + * is an element, and null otherwise. */ - if (DOMImpl_1.dom.features.steps) { - DOMAlgorithm_1.dom_runInsertionSteps(inclusiveDescendant); + var node = util_1.Cast.asNode(this)._lastChild; + while (node) { + if (util_1.Guard.isElementNode(node)) + return node; + else + node = node._previousSibling; } - if (DOMImpl_1.dom.features.customElements) { - /** - * 7.7.2. If inclusiveDescendant is connected, then: - */ - if (util_1.Guard.isElementNode(inclusiveDescendant) && - ShadowTreeAlgorithm_1.shadowTree_isConnected(inclusiveDescendant)) { - if (util_1.Guard.isCustomElementNode(inclusiveDescendant)) { - /** - * 7.7.2.1. If inclusiveDescendant is custom, then enqueue a custom - * element callback reaction with inclusiveDescendant, callback name - * "connectedCallback", and an empty argument list. - */ - CustomElementAlgorithm_1.customElement_enqueueACustomElementCallbackReaction(inclusiveDescendant, "connectedCallback", []); - } - else { - /** - * 7.7.2.2. Otherwise, try to upgrade inclusiveDescendant. - */ - CustomElementAlgorithm_1.customElement_tryToUpgrade(inclusiveDescendant); - } + return null; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ParentNodeImpl.prototype, "childElementCount", { + /** @inheritdoc */ + get: function () { + var e_1, _a; + /** + * The childElementCount attribute’s getter must return the number of + * children of context object that are elements. + */ + var count = 0; + try { + for (var _b = __values(util_1.Cast.asNode(this)._children), _c = _b.next(); !_c.done; _c = _b.next()) { + var childNode = _c.value; + if (util_1.Guard.isElementNode(childNode)) + count++; } } - inclusiveDescendant = TreeAlgorithm_1.tree_getNextDescendantNode(node_1, inclusiveDescendant, true, true); + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + return count; + }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + ParentNodeImpl.prototype.prepend = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; } - } - /** - * 8. If suppress observers flag is unset, then queue a tree mutation record - * for parent with nodes, « », previousSibling, and child. - */ - if (DOMImpl_1.dom.features.mutationObservers) { - if (!suppressObservers) { - MutationObserverAlgorithm_1.observer_queueTreeMutationRecord(parent, nodes, [], previousSibling, child); + /** + * 1. Let node be the result of converting nodes into a node given nodes + * and context object’s node document. + * 2. Pre-insert node into context object before the context object’s first + * child. + */ + var node = util_1.Cast.asNode(this); + var childNode = algorithm_1.parentNode_convertNodesIntoANode(nodes, node._nodeDocument); + algorithm_1.mutation_preInsert(childNode, node, node._firstChild); + }; + /** @inheritdoc */ + ParentNodeImpl.prototype.append = function () { + var nodes = []; + for (var _i = 0; _i < arguments.length; _i++) { + nodes[_i] = arguments[_i]; } - } -} -exports.mutation_insert = mutation_insert; + /** + * 1. Let node be the result of converting nodes into a node given nodes + * and context object’s node document. + * 2. Append node to context object. + */ + var node = util_1.Cast.asNode(this); + var childNode = algorithm_1.parentNode_convertNodesIntoANode(nodes, node._nodeDocument); + algorithm_1.mutation_append(childNode, node); + }; + /** @inheritdoc */ + ParentNodeImpl.prototype.querySelector = function (selectors) { + /** + * The querySelector(selectors) method, when invoked, must return the first + * result of running scope-match a selectors string selectors against + * context object, if the result is not an empty list, and null otherwise. + */ + var node = util_1.Cast.asNode(this); + var result = algorithm_1.selectors_scopeMatchASelectorsString(selectors, node); + return (result.length === 0 ? null : result[0]); + }; + /** @inheritdoc */ + ParentNodeImpl.prototype.querySelectorAll = function (selectors) { + /** + * The querySelectorAll(selectors) method, when invoked, must return the + * static result of running scope-match a selectors string selectors against + * context object. + */ + var node = util_1.Cast.asNode(this); + var result = algorithm_1.selectors_scopeMatchASelectorsString(selectors, node); + return algorithm_1.create_nodeListStatic(node, result); + }; + return ParentNodeImpl; +}()); +exports.ParentNodeImpl = ParentNodeImpl; +//# sourceMappingURL=ParentNodeImpl.js.map + +/***/ }), + +/***/ 9430: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7305); +var CharacterDataImpl_1 = __nccwpck_require__(5330); +var WebIDLAlgorithm_1 = __nccwpck_require__(5457); /** - * Inserts a node into a parent node. Optimized routine for the common case where - * node is not a document fragment node and it has no child nodes. - * - * @param node - node to insert - * @param parent - parent node to receive node - * @param suppressObservers - whether to notify observers + * Represents a processing instruction node. */ -function mutation_insert_single(node, parent, suppressObservers) { - /** - * 1. Let count be the number of children of node if it is a - * DocumentFragment node, and one otherwise. - * 2. If child is non-null, then: - * 2.1. For each live range whose start node is parent and start - * offset is greater than child's index, increase its start - * offset by count. - * 2.2. For each live range whose end node is parent and end - * offset is greater than child's index, increase its end - * offset by count. - * 3. Let nodes be node’s children, if node is a DocumentFragment node; - * otherwise « node ». - * 4. If node is a DocumentFragment node, remove its children with the - * suppress observers flag set. - * 5. If node is a DocumentFragment node, then queue a tree mutation record - * for node with « », nodes, null, and null. - */ - /** - * 6. Let previousSibling be child’s previous sibling or parent’s last - * child if child is null. - */ - var previousSibling = parent._lastChild; - // set document element node - if (util_1.Guard.isElementNode(node)) { - // set document element node - if (util_1.Guard.isDocumentNode(parent)) { - parent._documentElement = node; - } - // mark that the document has namespaces - if (!node._nodeDocument._hasNamespaces && (node._namespace !== null || - node._namespacePrefix !== null)) { - node._nodeDocument._hasNamespaces = true; - } - } - /** - * 7. For each node in nodes, in tree order: - * 7.1. If child is null, then append node to parent’s children. - * 7.2. Otherwise, insert node into parent’s children before child’s - * index. - */ - node._parent = parent; - parent._children.add(node); - // assign siblings and children for quick lookups - if (parent._firstChild === null) { - node._previousSibling = null; - node._nextSibling = null; - parent._firstChild = node; - parent._lastChild = node; - } - else { - var prev = parent._lastChild; - node._previousSibling = prev; - node._nextSibling = null; - if (prev) - prev._nextSibling = node; - if (!prev) - parent._firstChild = node; - parent._lastChild = node; - } - /** - * 7.3. If parent is a shadow host and node is a slotable, then - * assign a slot for node. - */ - if (DOMImpl_1.dom.features.slots) { - if (parent._shadowRoot !== null && util_1.Guard.isSlotable(node)) { - ShadowTreeAlgorithm_1.shadowTree_assignASlot(node); - } - } - /** - * 7.4. If node is a Text node, run the child text content change - * steps for parent. - */ - if (DOMImpl_1.dom.features.steps) { - if (util_1.Guard.isTextNode(node)) { - DOMAlgorithm_1.dom_runChildTextContentChangeSteps(parent); - } - } - /** - * 7.5. If parent's root is a shadow root, and parent is a slot - * whose assigned nodes is the empty list, then run signal - * a slot change for parent. - */ - if (DOMImpl_1.dom.features.slots) { - if (util_1.Guard.isShadowRoot(TreeAlgorithm_1.tree_rootNode(parent)) && - util_1.Guard.isSlot(parent) && util_2.isEmpty(parent._assignedNodes)) { - ShadowTreeAlgorithm_1.shadowTree_signalASlotChange(parent); - } - } - /** - * 7.6. Run assign slotables for a tree with node's root. - */ - if (DOMImpl_1.dom.features.slots) { - ShadowTreeAlgorithm_1.shadowTree_assignSlotablesForATree(TreeAlgorithm_1.tree_rootNode(node)); - } +var ProcessingInstructionImpl = /** @class */ (function (_super) { + __extends(ProcessingInstructionImpl, _super); /** - * 7.7. For each shadow-including inclusive descendant - * inclusiveDescendant of node, in shadow-including tree - * order: - * 7.7.1. Run the insertion steps with inclusiveDescendant. + * Initializes a new instance of `ProcessingInstruction`. */ - if (DOMImpl_1.dom.features.steps) { - DOMAlgorithm_1.dom_runInsertionSteps(node); + function ProcessingInstructionImpl(target, data) { + var _this = _super.call(this, data) || this; + _this._target = target; + return _this; } - if (DOMImpl_1.dom.features.customElements) { + Object.defineProperty(ProcessingInstructionImpl.prototype, "target", { /** - * 7.7.2. If inclusiveDescendant is connected, then: + * Gets the target of the {@link ProcessingInstruction} node. */ - if (util_1.Guard.isElementNode(node) && - ShadowTreeAlgorithm_1.shadowTree_isConnected(node)) { - if (util_1.Guard.isCustomElementNode(node)) { - /** - * 7.7.2.1. If inclusiveDescendant is custom, then enqueue a custom - * element callback reaction with inclusiveDescendant, callback name - * "connectedCallback", and an empty argument list. - */ - CustomElementAlgorithm_1.customElement_enqueueACustomElementCallbackReaction(node, "connectedCallback", []); - } - else { - /** - * 7.7.2.2. Otherwise, try to upgrade inclusiveDescendant. - */ - CustomElementAlgorithm_1.customElement_tryToUpgrade(node); - } - } - } + get: function () { return this._target; }, + enumerable: true, + configurable: true + }); /** - * 8. If suppress observers flag is unset, then queue a tree mutation record - * for parent with nodes, « », previousSibling, and child. + * Creates a new `ProcessingInstruction`. + * + * @param document - owner document + * @param target - instruction target + * @param data - node contents */ - if (DOMImpl_1.dom.features.mutationObservers) { - if (!suppressObservers) { - MutationObserverAlgorithm_1.observer_queueTreeMutationRecord(parent, [node], [], previousSibling, null); - } - } -} + ProcessingInstructionImpl._create = function (document, target, data) { + var node = new ProcessingInstructionImpl(target, data); + node._nodeDocument = document; + return node; + }; + return ProcessingInstructionImpl; +}(CharacterDataImpl_1.CharacterDataImpl)); +exports.ProcessingInstructionImpl = ProcessingInstructionImpl; /** - * Appends a node to the children of a parent node. - * - * @param node - a node - * @param parent - the parent to receive node + * Initialize prototype properties */ -function mutation_append(node, parent) { - /** - * To append a node to a parent, pre-insert node into parent before null. - */ - return mutation_preInsert(node, parent, null); -} -exports.mutation_append = mutation_append; +WebIDLAlgorithm_1.idl_defineConst(ProcessingInstructionImpl.prototype, "_nodeType", interfaces_1.NodeType.ProcessingInstruction); +//# sourceMappingURL=ProcessingInstructionImpl.js.map + +/***/ }), + +/***/ 166: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DOMImpl_1 = __nccwpck_require__(4177); +var interfaces_1 = __nccwpck_require__(7305); +var AbstractRangeImpl_1 = __nccwpck_require__(7126); +var DOMException_1 = __nccwpck_require__(3166); +var algorithm_1 = __nccwpck_require__(61); +var WebIDLAlgorithm_1 = __nccwpck_require__(5457); +var util_1 = __nccwpck_require__(5282); /** - * Replaces a node with another node. - * - * @param child - child node to remove - * @param node - node to insert - * @param parent - parent node to receive node + * Represents a live range. */ -function mutation_replace(child, node, parent) { - var e_6, _a, e_7, _b, e_8, _c, e_9, _d; - /** - * 1. If parent is not a Document, DocumentFragment, or Element node, - * throw a "HierarchyRequestError" DOMException. - */ - if (parent._nodeType !== interfaces_1.NodeType.Document && - parent._nodeType !== interfaces_1.NodeType.DocumentFragment && - parent._nodeType !== interfaces_1.NodeType.Element) - throw new DOMException_1.HierarchyRequestError("Only document, document fragment and element nodes can contain child nodes. Parent node is " + parent.nodeName + "."); - /** - * 2. If node is a host-including inclusive ancestor of parent, throw a - * "HierarchyRequestError" DOMException. - */ - if (TreeAlgorithm_1.tree_isHostIncludingAncestorOf(parent, node, true)) - throw new DOMException_1.HierarchyRequestError("The node to be inserted cannot be an ancestor of parent node. Node is " + node.nodeName + ", parent node is " + parent.nodeName + "."); - /** - * 3. If child’s parent is not parent, then throw a "NotFoundError" - * DOMException. - */ - if (child._parent !== parent) - throw new DOMException_1.NotFoundError("The reference child node cannot be found under parent node. Child node is " + child.nodeName + ", parent node is " + parent.nodeName + "."); - /** - * 4. If node is not a DocumentFragment, DocumentType, Element, Text, - * ProcessingInstruction, or Comment node, throw a "HierarchyRequestError" - * DOMException. - */ - if (node._nodeType !== interfaces_1.NodeType.DocumentFragment && - node._nodeType !== interfaces_1.NodeType.DocumentType && - node._nodeType !== interfaces_1.NodeType.Element && - node._nodeType !== interfaces_1.NodeType.Text && - node._nodeType !== interfaces_1.NodeType.ProcessingInstruction && - node._nodeType !== interfaces_1.NodeType.CData && - node._nodeType !== interfaces_1.NodeType.Comment) - throw new DOMException_1.HierarchyRequestError("Only document fragment, document type, element, text, processing instruction, cdata section or comment nodes can be inserted. Node is " + node.nodeName + "."); +var RangeImpl = /** @class */ (function (_super) { + __extends(RangeImpl, _super); /** - * 5. If either node is a Text node and parent is a document, or node is a - * doctype and parent is not a document, throw a "HierarchyRequestError" - * DOMException. + * Initializes a new instance of `Range`. */ - if (node._nodeType === interfaces_1.NodeType.Text && - parent._nodeType === interfaces_1.NodeType.Document) - throw new DOMException_1.HierarchyRequestError("Cannot insert a text node as a child of a document node. Node is " + node.nodeName + "."); - if (node._nodeType === interfaces_1.NodeType.DocumentType && - parent._nodeType !== interfaces_1.NodeType.Document) - throw new DOMException_1.HierarchyRequestError("A document type node can only be inserted under a document node. Parent node is " + parent.nodeName + "."); - /** - * 6. If parent is a document, and any of the statements below, switched on - * node, are true, throw a "HierarchyRequestError" DOMException. - * - DocumentFragment node - * If node has more than one element child or has a Text node child. - * Otherwise, if node has one element child and either parent has an element - * child that is not child or a doctype is following child. - * - element - * parent has an element child that is not child or a doctype is - * following child. - * - doctype - * parent has a doctype child that is not child, or an element is - * preceding child. - */ - if (parent._nodeType === interfaces_1.NodeType.Document) { - if (node._nodeType === interfaces_1.NodeType.DocumentFragment) { - var eleCount = 0; - try { - for (var _e = __values(node._children), _f = _e.next(); !_f.done; _f = _e.next()) { - var childNode = _f.value; - if (childNode._nodeType === interfaces_1.NodeType.Element) - eleCount++; - else if (childNode._nodeType === interfaces_1.NodeType.Text) - throw new DOMException_1.HierarchyRequestError("Cannot insert text a node as a child of a document node. Node is " + childNode.nodeName + "."); - } - } - catch (e_6_1) { e_6 = { error: e_6_1 }; } - finally { - try { - if (_f && !_f.done && (_a = _e.return)) _a.call(_e); - } - finally { if (e_6) throw e_6.error; } - } - if (eleCount > 1) { - throw new DOMException_1.HierarchyRequestError("A document node can only have one document element node. Document fragment to be inserted has " + eleCount + " element nodes."); - } - else if (eleCount === 1) { - try { - for (var _g = __values(parent._children), _h = _g.next(); !_h.done; _h = _g.next()) { - var ele = _h.value; - if (ele._nodeType === interfaces_1.NodeType.Element && ele !== child) - throw new DOMException_1.HierarchyRequestError("The document node already has a document element node."); - } - } - catch (e_7_1) { e_7 = { error: e_7_1 }; } - finally { - try { - if (_h && !_h.done && (_b = _g.return)) _b.call(_g); - } - finally { if (e_7) throw e_7.error; } - } - var doctypeChild = child._nextSibling; - while (doctypeChild) { - if (doctypeChild._nodeType === interfaces_1.NodeType.DocumentType) - throw new DOMException_1.HierarchyRequestError("Cannot insert an element node before a document type node."); - doctypeChild = doctypeChild._nextSibling; - } - } - } - else if (node._nodeType === interfaces_1.NodeType.Element) { - try { - for (var _j = __values(parent._children), _k = _j.next(); !_k.done; _k = _j.next()) { - var ele = _k.value; - if (ele._nodeType === interfaces_1.NodeType.Element && ele !== child) - throw new DOMException_1.HierarchyRequestError("Document already has a document element node. Node is " + node.nodeName + "."); - } - } - catch (e_8_1) { e_8 = { error: e_8_1 }; } - finally { - try { - if (_k && !_k.done && (_c = _j.return)) _c.call(_j); + function RangeImpl() { + var _this = _super.call(this) || this; + /** + * The Range() constructor, when invoked, must return a new live range with + * (current global object’s associated Document, 0) as its start and end. + */ + var doc = DOMImpl_1.dom.window._associatedDocument; + _this._start = [doc, 0]; + _this._end = [doc, 0]; + DOMImpl_1.dom.rangeList.add(_this); + return _this; + } + Object.defineProperty(RangeImpl.prototype, "commonAncestorContainer", { + /** @inheritdoc */ + get: function () { + /** + * 1. Let container be start node. + * 2. While container is not an inclusive ancestor of end node, let + * container be container’s parent. + * 3. Return container. + */ + var container = this._start[0]; + while (!algorithm_1.tree_isAncestorOf(this._end[0], container, true)) { + if (container._parent === null) { + throw new Error("Parent node is null."); } - finally { if (e_8) throw e_8.error; } - } - var doctypeChild = child._nextSibling; - while (doctypeChild) { - if (doctypeChild._nodeType === interfaces_1.NodeType.DocumentType) - throw new DOMException_1.HierarchyRequestError("Cannot insert an element node before a document type node. Node is " + node.nodeName + "."); - doctypeChild = doctypeChild._nextSibling; + container = container._parent; } + return container; + }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + RangeImpl.prototype.setStart = function (node, offset) { + /** + * The setStart(node, offset) method, when invoked, must set the start of + * context object to boundary point (node, offset). + */ + algorithm_1.range_setTheStart(this, node, offset); + }; + /** @inheritdoc */ + RangeImpl.prototype.setEnd = function (node, offset) { + /** + * The setEnd(node, offset) method, when invoked, must set the end of + * context object to boundary point (node, offset). + */ + algorithm_1.range_setTheEnd(this, node, offset); + }; + /** @inheritdoc */ + RangeImpl.prototype.setStartBefore = function (node) { + /** + * 1. Let parent be node’s parent. + * 2. If parent is null, then throw an "InvalidNodeTypeError" DOMException. + * 3. Set the start of the context object to boundary point + * (parent, node’s index). + */ + var parent = node._parent; + if (parent === null) + throw new DOMException_1.InvalidNodeTypeError(); + algorithm_1.range_setTheStart(this, parent, algorithm_1.tree_index(node)); + }; + /** @inheritdoc */ + RangeImpl.prototype.setStartAfter = function (node) { + /** + * 1. Let parent be node’s parent. + * 2. If parent is null, then throw an "InvalidNodeTypeError" DOMException. + * 3. Set the start of the context object to boundary point + * (parent, node’s index plus 1). + */ + var parent = node._parent; + if (parent === null) + throw new DOMException_1.InvalidNodeTypeError(); + algorithm_1.range_setTheStart(this, parent, algorithm_1.tree_index(node) + 1); + }; + /** @inheritdoc */ + RangeImpl.prototype.setEndBefore = function (node) { + /** + * 1. Let parent be node’s parent. + * 2. If parent is null, then throw an "InvalidNodeTypeError" DOMException. + * 3. Set the end of the context object to boundary point + * (parent, node’s index). + */ + var parent = node._parent; + if (parent === null) + throw new DOMException_1.InvalidNodeTypeError(); + algorithm_1.range_setTheEnd(this, parent, algorithm_1.tree_index(node)); + }; + /** @inheritdoc */ + RangeImpl.prototype.setEndAfter = function (node) { + /** + * 1. Let parent be node’s parent. + * 2. If parent is null, then throw an "InvalidNodeTypeError" DOMException. + * 3. Set the end of the context object to boundary point + * (parent, node’s index plus 1). + */ + var parent = node._parent; + if (parent === null) + throw new DOMException_1.InvalidNodeTypeError(); + algorithm_1.range_setTheEnd(this, parent, algorithm_1.tree_index(node) + 1); + }; + /** @inheritdoc */ + RangeImpl.prototype.collapse = function (toStart) { + /** + * The collapse(toStart) method, when invoked, must if toStart is true, + * set end to start, and set start to end otherwise. + */ + if (toStart) { + this._end = this._start; } - else if (node._nodeType === interfaces_1.NodeType.DocumentType) { - try { - for (var _l = __values(parent._children), _m = _l.next(); !_m.done; _m = _l.next()) { - var ele = _m.value; - if (ele._nodeType === interfaces_1.NodeType.DocumentType && ele !== child) - throw new DOMException_1.HierarchyRequestError("Document already has a document type node. Node is " + node.nodeName + "."); - } - } - catch (e_9_1) { e_9 = { error: e_9_1 }; } - finally { - try { - if (_m && !_m.done && (_d = _l.return)) _d.call(_l); - } - finally { if (e_9) throw e_9.error; } - } - var elementChild = child._previousSibling; - while (elementChild) { - if (elementChild._nodeType === interfaces_1.NodeType.Element) - throw new DOMException_1.HierarchyRequestError("Cannot insert a document type node before an element node. Node is " + node.nodeName + "."); - elementChild = elementChild._previousSibling; - } + else { + this._start = this._end; } - } - /** - * 7. Let reference child be child’s next sibling. - * 8. If reference child is node, set it to node’s next sibling. - * 8. Let previousSibling be child’s previous sibling. - */ - var referenceChild = child._nextSibling; - if (referenceChild === node) - referenceChild = node._nextSibling; - var previousSibling = child._previousSibling; - /** - * 10. Adopt node into parent’s node document. - * 11. Let removedNodes be the empty list. - */ - DocumentAlgorithm_1.document_adopt(node, parent._nodeDocument); - var removedNodes = []; - /** - * 12. If child’s parent is not null, then: - */ - if (child._parent !== null) { + }; + /** @inheritdoc */ + RangeImpl.prototype.selectNode = function (node) { /** - * 12.1. Set removedNodes to [child]. - * 12.2. Remove child from its parent with the suppress observers flag - * set. + * The selectNode(node) method, when invoked, must select node within + * context object. */ - removedNodes.push(child); - mutation_remove(child, child._parent, true); - } - /** - * 13. Let nodes be node’s children if node is a DocumentFragment node; - * otherwise [node]. - */ - var nodes = []; - if (node._nodeType === interfaces_1.NodeType.DocumentFragment) { - nodes = Array.from(node._children); - } - else { - nodes.push(node); - } - /** - * 14. Insert node into parent before reference child with the suppress - * observers flag set. - */ - mutation_insert(node, parent, referenceChild, true); - /** - * 15. Queue a tree mutation record for parent with nodes, removedNodes, - * previousSibling, and reference child. - */ - if (DOMImpl_1.dom.features.mutationObservers) { - MutationObserverAlgorithm_1.observer_queueTreeMutationRecord(parent, nodes, removedNodes, previousSibling, referenceChild); - } - /** - * 16. Return child. - */ - return child; -} -exports.mutation_replace = mutation_replace; -/** - * Replaces all nodes of a parent with the given node. - * - * @param node - node to insert - * @param parent - parent node to receive node - */ -function mutation_replaceAll(node, parent) { - var e_10, _a; - /** - * 1. If node is not null, adopt node into parent’s node document. - */ - if (node !== null) { - DocumentAlgorithm_1.document_adopt(node, parent._nodeDocument); - } - /** - * 2. Let removedNodes be parent’s children. - */ - var removedNodes = Array.from(parent._children); - /** - * 3. Let addedNodes be the empty list. - * 4. If node is DocumentFragment node, then set addedNodes to node’s - * children. - * 5. Otherwise, if node is non-null, set addedNodes to [node]. - */ - var addedNodes = []; - if (node && node._nodeType === interfaces_1.NodeType.DocumentFragment) { - addedNodes = Array.from(node._children); - } - else if (node !== null) { - addedNodes.push(node); - } - try { + algorithm_1.range_select(node, this); + }; + /** @inheritdoc */ + RangeImpl.prototype.selectNodeContents = function (node) { /** - * 6. Remove all parent’s children, in tree order, with the suppress - * observers flag set. + * 1. If node is a doctype, throw an "InvalidNodeTypeError" DOMException. + * 2. Let length be the length of node. + * 3. Set start to the boundary point (node, 0). + * 4. Set end to the boundary point (node, length). */ - for (var removedNodes_1 = __values(removedNodes), removedNodes_1_1 = removedNodes_1.next(); !removedNodes_1_1.done; removedNodes_1_1 = removedNodes_1.next()) { - var childNode = removedNodes_1_1.value; - mutation_remove(childNode, parent, true); + if (util_1.Guard.isDocumentTypeNode(node)) + throw new DOMException_1.InvalidNodeTypeError(); + var length = algorithm_1.tree_nodeLength(node); + this._start = [node, 0]; + this._end = [node, length]; + }; + /** @inheritdoc */ + RangeImpl.prototype.compareBoundaryPoints = function (how, sourceRange) { + /** + * 1. If how is not one of + * - START_TO_START, + * - START_TO_END, + * - END_TO_END, and + * - END_TO_START, + * then throw a "NotSupportedError" DOMException. + */ + if (how !== interfaces_1.HowToCompare.StartToStart && how !== interfaces_1.HowToCompare.StartToEnd && + how !== interfaces_1.HowToCompare.EndToEnd && how !== interfaces_1.HowToCompare.EndToStart) + throw new DOMException_1.NotSupportedError(); + /** + * 2. If context object’s root is not the same as sourceRange’s root, + * then throw a "WrongDocumentError" DOMException. + */ + if (algorithm_1.range_root(this) !== algorithm_1.range_root(sourceRange)) + throw new DOMException_1.WrongDocumentError(); + /** + * 3. If how is: + * - START_TO_START: + * Let this point be the context object’s start. Let other point be + * sourceRange’s start. + * - START_TO_END: + * Let this point be the context object’s end. Let other point be + * sourceRange’s start. + * - END_TO_END: + * Let this point be the context object’s end. Let other point be + * sourceRange’s end. + * - END_TO_START: + * Let this point be the context object’s start. Let other point be + * sourceRange’s end. + */ + var thisPoint; + var otherPoint; + switch (how) { + case interfaces_1.HowToCompare.StartToStart: + thisPoint = this._start; + otherPoint = sourceRange._start; + break; + case interfaces_1.HowToCompare.StartToEnd: + thisPoint = this._end; + otherPoint = sourceRange._start; + break; + case interfaces_1.HowToCompare.EndToEnd: + thisPoint = this._end; + otherPoint = sourceRange._end; + break; + case interfaces_1.HowToCompare.EndToStart: + thisPoint = this._start; + otherPoint = sourceRange._end; + break; + /* istanbul ignore next */ + default: + throw new DOMException_1.NotSupportedError(); } - } - catch (e_10_1) { e_10 = { error: e_10_1 }; } - finally { - try { - if (removedNodes_1_1 && !removedNodes_1_1.done && (_a = removedNodes_1.return)) _a.call(removedNodes_1); + /** + * 4. If the position of this point relative to other point is + * - before + * Return −1. + * - equal + * Return 0. + * - after + * Return 1. + */ + var position = algorithm_1.boundaryPoint_position(thisPoint, otherPoint); + if (position === interfaces_1.BoundaryPosition.Before) { + return -1; } - finally { if (e_10) throw e_10.error; } - } - /** - * 7. If node is not null, then insert node into parent before null with the - * suppress observers flag set. - */ - if (node !== null) { - mutation_insert(node, parent, null, true); - } - /** - * 8. Queue a tree mutation record for parent with addedNodes, removedNodes, - * null, and null. - */ - if (DOMImpl_1.dom.features.mutationObservers) { - MutationObserverAlgorithm_1.observer_queueTreeMutationRecord(parent, addedNodes, removedNodes, null, null); - } -} -exports.mutation_replaceAll = mutation_replaceAll; -/** - * Ensures pre-removal validity of a child node from a parent, then - * removes it. - * - * @param child - child node to remove - * @param parent - parent node - */ -function mutation_preRemove(child, parent) { - /** - * 1. If child’s parent is not parent, then throw a "NotFoundError" - * DOMException. - * 2. Remove child from parent. - * 3. Return child. - */ - if (child._parent !== parent) - throw new DOMException_1.NotFoundError("The child node cannot be found under parent node. Child node is " + child.nodeName + ", parent node is " + parent.nodeName + "."); - mutation_remove(child, parent); - return child; -} -exports.mutation_preRemove = mutation_preRemove; -/** - * Removes a child node from its parent. - * - * @param node - node to remove - * @param parent - parent node - * @param suppressObservers - whether to notify observers - */ -function mutation_remove(node, parent, suppressObservers) { - var e_11, _a, e_12, _b, e_13, _c, e_14, _d; - if (DOMImpl_1.dom.rangeList.size !== 0) { + else if (position === interfaces_1.BoundaryPosition.After) { + return 1; + } + else { + return 0; + } + }; + /** @inheritdoc */ + RangeImpl.prototype.deleteContents = function () { + var e_1, _a, e_2, _b; /** - * 1. Let index be node’s index. + * 1. If the context object is collapsed, then return. + * 2. Let original start node, original start offset, original end node, + * and original end offset be the context object’s start node, + * start offset, end node, and end offset, respectively. */ - var index = TreeAlgorithm_1.tree_index(node); + if (algorithm_1.range_collapsed(this)) + return; + var originalStartNode = this._startNode; + var originalStartOffset = this._startOffset; + var originalEndNode = this._endNode; + var originalEndOffset = this._endOffset; + /** + * 3. If original start node and original end node are the same, and they + * are a Text, ProcessingInstruction, or Comment node, replace data with + * node original start node, offset original start offset, count original + * end offset minus original start offset, and data the empty string, + * and then return. + */ + if (originalStartNode === originalEndNode && + util_1.Guard.isCharacterDataNode(originalStartNode)) { + algorithm_1.characterData_replaceData(originalStartNode, originalStartOffset, originalEndOffset - originalStartOffset, ''); + return; + } + /** + * 4. Let nodes to remove be a list of all the nodes that are contained in + * the context object, in tree order, omitting any node whose parent is also + * contained in the context object. + */ + var nodesToRemove = []; try { - /** - * 2. For each live range whose start node is an inclusive descendant of - * node, set its start to (parent, index). - * 3. For each live range whose end node is an inclusive descendant of - * node, set its end to (parent, index). - */ - for (var _e = __values(DOMImpl_1.dom.rangeList), _f = _e.next(); !_f.done; _f = _e.next()) { - var range = _f.value; - if (TreeAlgorithm_1.tree_isDescendantOf(node, range._start[0], true)) { - range._start = [parent, index]; - } - if (TreeAlgorithm_1.tree_isDescendantOf(node, range._end[0], true)) { - range._end = [parent, index]; - } - if (range._start[0] === parent && range._start[1] > index) { - range._start[1]--; - } - if (range._end[0] === parent && range._end[1] > index) { - range._end[1]--; + for (var _c = __values(algorithm_1.range_getContainedNodes(this)), _d = _c.next(); !_d.done; _d = _c.next()) { + var node = _d.value; + var parent = node._parent; + if (parent !== null && algorithm_1.range_isContained(parent, this)) { + continue; } + nodesToRemove.push(node); } } - catch (e_11_1) { e_11 = { error: e_11_1 }; } + catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (_f && !_f.done && (_a = _e.return)) _a.call(_e); + if (_d && !_d.done && (_a = _c.return)) _a.call(_c); } - finally { if (e_11) throw e_11.error; } + finally { if (e_1) throw e_1.error; } } - try { + var newNode; + var newOffset; + if (algorithm_1.tree_isAncestorOf(originalEndNode, originalStartNode, true)) { /** - * 4. For each live range whose start node is parent and start offset is - * greater than index, decrease its start offset by 1. - * 5. For each live range whose end node is parent and end offset is greater - * than index, decrease its end offset by 1. + * 5. If original start node is an inclusive ancestor of original end + * node, set new node to original start node and new offset to original + * start offset. */ - for (var _g = __values(DOMImpl_1.dom.rangeList), _h = _g.next(); !_h.done; _h = _g.next()) { - var range = _h.value; - if (range._start[0] === parent && range._start[1] > index) { - range._start[1] -= 1; - } - if (range._end[0] === parent && range._end[1] > index) { - range._end[1] -= 1; + newNode = originalStartNode; + newOffset = originalStartOffset; + } + else { + /** + * 6. Otherwise: + * 6.1. Let reference node equal original start node. + * 6.2. While reference node’s parent is not null and is not an inclusive + * ancestor of original end node, set reference node to its parent. + * 6.3. Set new node to the parent of reference node, and new offset to + * one plus the index of reference node. + */ + var referenceNode = originalStartNode; + while (referenceNode._parent !== null && + !algorithm_1.tree_isAncestorOf(originalEndNode, referenceNode._parent, true)) { + referenceNode = referenceNode._parent; + } + /* istanbul ignore next */ + if (referenceNode._parent === null) { + throw new Error("Parent node is null."); + } + newNode = referenceNode._parent; + newOffset = algorithm_1.tree_index(referenceNode) + 1; + } + /** + * 7. If original start node is a Text, ProcessingInstruction, or Comment + * node, replace data with node original start node, offset original start + * offset, count original start node’s length minus original start offset, + * data the empty string. + */ + if (util_1.Guard.isCharacterDataNode(originalStartNode)) { + algorithm_1.characterData_replaceData(originalStartNode, originalStartOffset, algorithm_1.tree_nodeLength(originalStartNode) - originalStartOffset, ''); + } + try { + /** + * 8. For each node in nodes to remove, in tree order, remove node from its + * parent. + */ + for (var nodesToRemove_1 = __values(nodesToRemove), nodesToRemove_1_1 = nodesToRemove_1.next(); !nodesToRemove_1_1.done; nodesToRemove_1_1 = nodesToRemove_1.next()) { + var node = nodesToRemove_1_1.value; + /* istanbul ignore else */ + if (node._parent) { + algorithm_1.mutation_remove(node, node._parent); } } } - catch (e_12_1) { e_12 = { error: e_12_1 }; } + catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { - if (_h && !_h.done && (_b = _g.return)) _b.call(_g); + if (nodesToRemove_1_1 && !nodesToRemove_1_1.done && (_b = nodesToRemove_1.return)) _b.call(nodesToRemove_1); } - finally { if (e_12) throw e_12.error; } + finally { if (e_2) throw e_2.error; } } - } - /** - * 6. For each NodeIterator object iterator whose root’s node document is - * node’s node document, run the NodeIterator pre-removing steps given node - * and iterator. - */ - if (DOMImpl_1.dom.features.steps) { + /** + * 9. If original end node is a Text, ProcessingInstruction, or Comment + * node, replace data with node original end node, offset 0, count original + * end offset and data the empty string. + */ + if (util_1.Guard.isCharacterDataNode(originalEndNode)) { + algorithm_1.characterData_replaceData(originalEndNode, 0, originalEndOffset, ''); + } + /** + * 10. Set start and end to (new node, new offset). + */ + this._start = [newNode, newOffset]; + this._end = [newNode, newOffset]; + }; + /** @inheritdoc */ + RangeImpl.prototype.extractContents = function () { + /** + * The extractContents() method, when invoked, must return the result of + * extracting the context object. + */ + return algorithm_1.range_extract(this); + }; + /** @inheritdoc */ + RangeImpl.prototype.cloneContents = function () { + /** + * The cloneContents() method, when invoked, must return the result of + * cloning the contents of the context object. + */ + return algorithm_1.range_cloneTheContents(this); + }; + /** @inheritdoc */ + RangeImpl.prototype.insertNode = function (node) { + /** + * The insertNode(node) method, when invoked, must insert node into the + * context object. + */ + return algorithm_1.range_insert(node, this); + }; + /** @inheritdoc */ + RangeImpl.prototype.surroundContents = function (newParent) { + var e_3, _a; try { - for (var _j = __values(NodeIteratorAlgorithm_1.nodeIterator_iteratorList()), _k = _j.next(); !_k.done; _k = _j.next()) { - var iterator = _k.value; - if (iterator._root._nodeDocument === node._nodeDocument) { - DOMAlgorithm_1.dom_runNodeIteratorPreRemovingSteps(iterator, node); + /** + * 1. If a non-Text node is partially contained in the context object, then + * throw an "InvalidStateError" DOMException. + */ + for (var _b = __values(algorithm_1.range_getPartiallyContainedNodes(this)), _c = _b.next(); !_c.done; _c = _b.next()) { + var node = _c.value; + if (!util_1.Guard.isTextNode(node)) { + throw new DOMException_1.InvalidStateError(); } } } - catch (e_13_1) { e_13 = { error: e_13_1 }; } + catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { - if (_k && !_k.done && (_c = _j.return)) _c.call(_j); + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } - finally { if (e_13) throw e_13.error; } + finally { if (e_3) throw e_3.error; } } - } - /** - * 7. Let oldPreviousSibling be node’s previous sibling. - * 8. Let oldNextSibling be node’s next sibling. - */ - var oldPreviousSibling = node._previousSibling; - var oldNextSibling = node._nextSibling; - // set document element node - if (util_1.Guard.isDocumentNode(parent) && util_1.Guard.isElementNode(node)) { - parent._documentElement = null; - } - /** - * 9. Remove node from its parent’s children. - */ - node._parent = null; - parent._children.delete(node); - // assign siblings and children for quick lookups - var prev = node._previousSibling; - var next = node._nextSibling; - node._previousSibling = null; - node._nextSibling = null; - if (prev) - prev._nextSibling = next; - if (next) - next._previousSibling = prev; - if (!prev) - parent._firstChild = next; - if (!next) - parent._lastChild = prev; - /** - * 10. If node is assigned, then run assign slotables for node’s assigned - * slot. - */ - if (DOMImpl_1.dom.features.slots) { - if (util_1.Guard.isSlotable(node) && node._assignedSlot !== null && ShadowTreeAlgorithm_1.shadowTree_isAssigned(node)) { - ShadowTreeAlgorithm_1.shadowTree_assignSlotables(node._assignedSlot); + /** + * 2. If newParent is a Document, DocumentType, or DocumentFragment node, + * then throw an "InvalidNodeTypeError" DOMException. + */ + if (util_1.Guard.isDocumentNode(newParent) || + util_1.Guard.isDocumentTypeNode(newParent) || + util_1.Guard.isDocumentFragmentNode(newParent)) { + throw new DOMException_1.InvalidNodeTypeError(); } - } - /** - * 11. If parent’s root is a shadow root, and parent is a slot whose - * assigned nodes is the empty list, then run signal a slot change for - * parent. - */ - if (DOMImpl_1.dom.features.slots) { - if (util_1.Guard.isShadowRoot(TreeAlgorithm_1.tree_rootNode(parent)) && - util_1.Guard.isSlot(parent) && util_2.isEmpty(parent._assignedNodes)) { - ShadowTreeAlgorithm_1.shadowTree_signalASlotChange(parent); + /** + * 3. Let fragment be the result of extracting the context object. + */ + var fragment = algorithm_1.range_extract(this); + /** + * 4. If newParent has children, then replace all with null within newParent. + */ + if ((newParent)._children.size !== 0) { + algorithm_1.mutation_replaceAll(null, newParent); } - } - /** - * 12. If node has an inclusive descendant that is a slot, then: - * 12.1. Run assign slotables for a tree with parent's root. - * 12.2. Run assign slotables for a tree with node. - */ - if (DOMImpl_1.dom.features.slots) { - var descendant_1 = TreeAlgorithm_1.tree_getFirstDescendantNode(node, true, false, function (e) { return util_1.Guard.isSlot(e); }); - if (descendant_1 !== null) { - ShadowTreeAlgorithm_1.shadowTree_assignSlotablesForATree(TreeAlgorithm_1.tree_rootNode(parent)); - ShadowTreeAlgorithm_1.shadowTree_assignSlotablesForATree(node); + /** + * 5. Insert newParent into the context object. + * 6. Append fragment to newParent. + */ + algorithm_1.range_insert(newParent, this); + algorithm_1.mutation_append(fragment, newParent); + /** + * 7. Select newParent within the context object. + */ + algorithm_1.range_select(newParent, this); + }; + /** @inheritdoc */ + RangeImpl.prototype.cloneRange = function () { + /** + * The cloneRange() method, when invoked, must return a new live range with + * the same start and end as the context object. + */ + return algorithm_1.create_range(this._start, this._end); + }; + /** @inheritdoc */ + RangeImpl.prototype.detach = function () { + /** + * The detach() method, when invoked, must do nothing. + * + * since JS lacks weak references, we still use detach + */ + DOMImpl_1.dom.rangeList.delete(this); + }; + /** @inheritdoc */ + RangeImpl.prototype.isPointInRange = function (node, offset) { + /** + * 1. If node’s root is different from the context object’s root, return false. + */ + if (algorithm_1.tree_rootNode(node) !== algorithm_1.range_root(this)) { + return false; } - } - /** - * 13. Run the removing steps with node and parent. - */ - if (DOMImpl_1.dom.features.steps) { - DOMAlgorithm_1.dom_runRemovingSteps(node, parent); - } - /** - * 14. If node is custom, then enqueue a custom element callback - * reaction with node, callback name "disconnectedCallback", - * and an empty argument list. - */ - if (DOMImpl_1.dom.features.customElements) { - if (util_1.Guard.isCustomElementNode(node)) { - CustomElementAlgorithm_1.customElement_enqueueACustomElementCallbackReaction(node, "disconnectedCallback", []); + /** + * 2. If node is a doctype, then throw an "InvalidNodeTypeError" DOMException. + * 3. If offset is greater than node’s length, then throw an + * "IndexSizeError" DOMException. + */ + if (util_1.Guard.isDocumentTypeNode(node)) + throw new DOMException_1.InvalidNodeTypeError(); + if (offset > algorithm_1.tree_nodeLength(node)) + throw new DOMException_1.IndexSizeError(); + /** + * 4. If (node, offset) is before start or after end, return false. + */ + var bp = [node, offset]; + if (algorithm_1.boundaryPoint_position(bp, this._start) === interfaces_1.BoundaryPosition.Before || + algorithm_1.boundaryPoint_position(bp, this._end) === interfaces_1.BoundaryPosition.After) { + return false; } - } - /** - * 15. For each shadow-including descendant descendant of node, - * in shadow-including tree order, then: - */ - var descendant = TreeAlgorithm_1.tree_getFirstDescendantNode(node, false, true); - while (descendant !== null) { /** - * 15.1. Run the removing steps with descendant. + * 5. Return true. */ - if (DOMImpl_1.dom.features.steps) { - DOMAlgorithm_1.dom_runRemovingSteps(descendant, node); + return true; + }; + /** @inheritdoc */ + RangeImpl.prototype.comparePoint = function (node, offset) { + /** + * 1. If node’s root is different from the context object’s root, then throw + * a "WrongDocumentError" DOMException. + * 2. If node is a doctype, then throw an "InvalidNodeTypeError" DOMException. + * 3. If offset is greater than node’s length, then throw an + * "IndexSizeError" DOMException. + */ + if (algorithm_1.tree_rootNode(node) !== algorithm_1.range_root(this)) + throw new DOMException_1.WrongDocumentError(); + if (util_1.Guard.isDocumentTypeNode(node)) + throw new DOMException_1.InvalidNodeTypeError(); + if (offset > algorithm_1.tree_nodeLength(node)) + throw new DOMException_1.IndexSizeError(); + /** + * 4. If (node, offset) is before start, return −1. + * 5. If (node, offset) is after end, return 1. + * 6. Return 0. + */ + var bp = [node, offset]; + if (algorithm_1.boundaryPoint_position(bp, this._start) === interfaces_1.BoundaryPosition.Before) { + return -1; + } + else if (algorithm_1.boundaryPoint_position(bp, this._end) === interfaces_1.BoundaryPosition.After) { + return 1; } + else { + return 0; + } + }; + /** @inheritdoc */ + RangeImpl.prototype.intersectsNode = function (node) { /** - * 15.2. If descendant is custom, then enqueue a custom element - * callback reaction with descendant, callback name - * "disconnectedCallback", and an empty argument list. + * 1. If node’s root is different from the context object’s root, return false. */ - if (DOMImpl_1.dom.features.customElements) { - if (util_1.Guard.isCustomElementNode(descendant)) { - CustomElementAlgorithm_1.customElement_enqueueACustomElementCallbackReaction(descendant, "disconnectedCallback", []); - } + if (algorithm_1.tree_rootNode(node) !== algorithm_1.range_root(this)) { + return false; } - descendant = TreeAlgorithm_1.tree_getNextDescendantNode(node, descendant, false, true); - } - /** - * 16. For each inclusive ancestor inclusiveAncestor of parent, and - * then for each registered of inclusiveAncestor's registered - * observer list, if registered's options's subtree is true, - * then append a new transient registered observer whose - * observer is registered's observer, options is registered's - * options, and source is registered to node's registered - * observer list. - */ - if (DOMImpl_1.dom.features.mutationObservers) { - var inclusiveAncestor = TreeAlgorithm_1.tree_getFirstAncestorNode(parent, true); - while (inclusiveAncestor !== null) { - try { - for (var _l = (e_14 = void 0, __values(inclusiveAncestor._registeredObserverList)), _m = _l.next(); !_m.done; _m = _l.next()) { - var registered = _m.value; - if (registered.options.subtree) { - node._registeredObserverList.push({ - observer: registered.observer, - options: registered.options, - source: registered - }); - } + /** + * 2. Let parent be node’s parent. + * 3. If parent is null, return true. + */ + var parent = node._parent; + if (parent === null) + return true; + /** + * 4. Let offset be node’s index. + */ + var offset = algorithm_1.tree_index(node); + /** + * 5. If (parent, offset) is before end and (parent, offset plus 1) is + * after start, return true. + */ + if (algorithm_1.boundaryPoint_position([parent, offset], this._end) === interfaces_1.BoundaryPosition.Before && + algorithm_1.boundaryPoint_position([parent, offset + 1], this._start) === interfaces_1.BoundaryPosition.After) { + return true; + } + /** + * 6. Return false. + */ + return false; + }; + RangeImpl.prototype.toString = function () { + var e_4, _a; + /** + * 1. Let s be the empty string. + */ + var s = ''; + /** + * 2. If the context object’s start node is the context object’s end node + * and it is a Text node, then return the substring of that Text node’s data + * beginning at the context object’s start offset and ending at the context + * object’s end offset. + */ + if (this._startNode === this._endNode && util_1.Guard.isTextNode(this._startNode)) { + return this._startNode._data.substring(this._startOffset, this._endOffset); + } + /** + * 3. If the context object’s start node is a Text node, then append the + * substring of that node’s data from the context object’s start offset + * until the end to s. + */ + if (util_1.Guard.isTextNode(this._startNode)) { + s += this._startNode._data.substring(this._startOffset); + } + try { + /** + * 4. Append the concatenation of the data of all Text nodes that are + * contained in the context object, in tree order, to s. + */ + for (var _b = __values(algorithm_1.range_getContainedNodes(this)), _c = _b.next(); !_c.done; _c = _b.next()) { + var child = _c.value; + if (util_1.Guard.isTextNode(child)) { + s += child._data; } } - catch (e_14_1) { e_14 = { error: e_14_1 }; } - finally { - try { - if (_m && !_m.done && (_d = _l.return)) _d.call(_l); - } - finally { if (e_14) throw e_14.error; } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } - inclusiveAncestor = TreeAlgorithm_1.tree_getNextAncestorNode(parent, inclusiveAncestor, true); + finally { if (e_4) throw e_4.error; } } - } - /** - * 17. If suppress observers flag is unset, then queue a tree mutation - * record for parent with « », « node », oldPreviousSibling, and - * oldNextSibling. - */ - if (DOMImpl_1.dom.features.mutationObservers) { - if (!suppressObservers) { - MutationObserverAlgorithm_1.observer_queueTreeMutationRecord(parent, [], [node], oldPreviousSibling, oldNextSibling); + /** + * 5. If the context object’s end node is a Text node, then append the + * substring of that node’s data from its start until the context object’s + * end offset to s. + */ + if (util_1.Guard.isTextNode(this._endNode)) { + s += this._endNode._data.substring(0, this._endOffset); } - } + /** + * 6. Return s. + */ + return s; + }; /** - * 18. If node is a Text node, then run the child text content change steps - * for parent. + * Creates a new `Range`. + * + * @param start - start point + * @param end - end point */ - if (DOMImpl_1.dom.features.steps) { - if (util_1.Guard.isTextNode(node)) { - DOMAlgorithm_1.dom_runChildTextContentChangeSteps(parent); - } - } -} -exports.mutation_remove = mutation_remove; -//# sourceMappingURL=MutationAlgorithm.js.map + RangeImpl._create = function (start, end) { + var range = new RangeImpl(); + if (start) + range._start = start; + if (end) + range._end = end; + return range; + }; + RangeImpl.START_TO_START = 0; + RangeImpl.START_TO_END = 1; + RangeImpl.END_TO_END = 2; + RangeImpl.END_TO_START = 3; + return RangeImpl; +}(AbstractRangeImpl_1.AbstractRangeImpl)); +exports.RangeImpl = RangeImpl; +/** + * Define constants on prototype. + */ +WebIDLAlgorithm_1.idl_defineConst(RangeImpl.prototype, "START_TO_START", 0); +WebIDLAlgorithm_1.idl_defineConst(RangeImpl.prototype, "START_TO_END", 1); +WebIDLAlgorithm_1.idl_defineConst(RangeImpl.prototype, "END_TO_END", 2); +WebIDLAlgorithm_1.idl_defineConst(RangeImpl.prototype, "END_TO_START", 3); +//# sourceMappingURL=RangeImpl.js.map /***/ }), -/* 480 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const Range = __webpack_require__(124) -const validRange = (range, options) => { - try { - // Return '*' instead of '' so that truthiness works. - // This will throw if it's invalid anyway - return new Range(range, options).range || '*' - } catch (er) { - return null - } -} -module.exports = validRange - -/***/ }), -/* 481 */, -/* 482 */, -/* 483 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 1911: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMException_1 = __webpack_require__(35); +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DocumentFragmentImpl_1 = __nccwpck_require__(2585); +var util_1 = __nccwpck_require__(6195); +var algorithm_1 = __nccwpck_require__(61); /** - * Matches elements with the given selectors. - * - * @param selectors - selectors - * @param node - the node to match against + * Represents a shadow root. */ -function selectors_scopeMatchASelectorsString(selectors, node) { +var ShadowRootImpl = /** @class */ (function (_super) { + __extends(ShadowRootImpl, _super); /** - * TODO: Selectors - * 1. Let s be the result of parse a selector selectors. [SELECTORS4] - * 2. If s is failure, then throw a "SyntaxError" DOMException. - * 3. Return the result of match a selector against a tree with s and node’s - * root using scoping root node. [SELECTORS4]. + * Initializes a new instance of `ShadowRoot`. + * + * @param host - shadow root's host element + * @param mode - shadow root's mode */ - throw new DOMException_1.NotSupportedError(); -} -exports.selectors_scopeMatchASelectorsString = selectors_scopeMatchASelectorsString; -//# sourceMappingURL=SelectorsAlgorithm.js.map + function ShadowRootImpl(host, mode) { + var _this = _super.call(this) || this; + _this._host = host; + _this._mode = mode; + return _this; + } + Object.defineProperty(ShadowRootImpl.prototype, "mode", { + /** @inheritdoc */ + get: function () { return this._mode; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ShadowRootImpl.prototype, "host", { + /** @inheritdoc */ + get: function () { return this._host; }, + enumerable: true, + configurable: true + }); + /** + * Gets the parent event target for the given event. + * + * @param event - an event + */ + ShadowRootImpl.prototype._getTheParent = function (event) { + /** + * A shadow root’s get the parent algorithm, given an event, returns null + * if event’s composed flag is unset and shadow root is the root of + * event’s path’s first struct’s invocation target, and shadow root’s host + * otherwise. + */ + if (!event._composedFlag && !util_1.isEmpty(event._path) && + algorithm_1.tree_rootNode(event._path[0].invocationTarget) === this) { + return null; + } + else { + return this._host; + } + }; + // MIXIN: DocumentOrShadowRoot + // No elements + /** + * Creates a new `ShadowRoot`. + * + * @param document - owner document + * @param host - shadow root's host element + */ + ShadowRootImpl._create = function (document, host) { + return new ShadowRootImpl(host, "closed"); + }; + return ShadowRootImpl; +}(DocumentFragmentImpl_1.DocumentFragmentImpl)); +exports.ShadowRootImpl = ShadowRootImpl; +//# sourceMappingURL=ShadowRootImpl.js.map /***/ }), -/* 484 */, -/* 485 */, -/* 486 */ -/***/ (function(module, __unusedexports, __webpack_require__) { -const compare = __webpack_require__(874) -const gt = (a, b, loose) => compare(a, b, loose) > 0 -module.exports = gt - - -/***/ }), -/* 487 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 1964: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(970); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var algorithm_1 = __nccwpck_require__(61); /** - * Represents an object which can be used to iterate through the nodes - * of a subtree. + * Represents a mixin that allows nodes to become the contents of + * a element. This mixin is implemented by {@link Element} and + * {@link Text}. */ -var TraverserImpl = /** @class */ (function () { - /** - * Initializes a new instance of `Traverser`. - * - * @param root - root node - */ - function TraverserImpl(root) { - this._activeFlag = false; - this._root = root; - this._whatToShow = interfaces_1.WhatToShow.All; - this._filter = null; +var SlotableImpl = /** @class */ (function () { + function SlotableImpl() { } - Object.defineProperty(TraverserImpl.prototype, "root", { - /** @inheritdoc */ - get: function () { return this._root; }, + Object.defineProperty(SlotableImpl.prototype, "_name", { + get: function () { return this.__name || ''; }, + set: function (val) { this.__name = val; }, enumerable: true, configurable: true }); - Object.defineProperty(TraverserImpl.prototype, "whatToShow", { - /** @inheritdoc */ - get: function () { return this._whatToShow; }, + Object.defineProperty(SlotableImpl.prototype, "_assignedSlot", { + get: function () { return this.__assignedSlot || null; }, + set: function (val) { this.__assignedSlot = val; }, enumerable: true, configurable: true }); - Object.defineProperty(TraverserImpl.prototype, "filter", { + Object.defineProperty(SlotableImpl.prototype, "assignedSlot", { /** @inheritdoc */ - get: function () { return this._filter; }, + get: function () { + return algorithm_1.shadowTree_findASlot(this, true); + }, enumerable: true, configurable: true }); - return TraverserImpl; + return SlotableImpl; }()); -exports.TraverserImpl = TraverserImpl; -//# sourceMappingURL=TraverserImpl.js.map +exports.SlotableImpl = SlotableImpl; +//# sourceMappingURL=SlotableImpl.js.map + +/***/ }), + +/***/ 6357: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var AbstractRangeImpl_1 = __nccwpck_require__(7126); +var DOMException_1 = __nccwpck_require__(3166); +var util_1 = __nccwpck_require__(5282); +/** + * Represents a static range. + */ +var StaticRangeImpl = /** @class */ (function (_super) { + __extends(StaticRangeImpl, _super); + /** + * Initializes a new instance of `StaticRange`. + */ + function StaticRangeImpl(init) { + var _this = _super.call(this) || this; + /** + * 1. If init’s startContainer or endContainer is a DocumentType or Attr + * node, then throw an "InvalidNodeTypeError" DOMException. + * 2. Let staticRange be a new StaticRange object. + * 3. Set staticRange’s start to (init’s startContainer, init’s startOffset) + * and end to (init’s endContainer, init’s endOffset). + * 4. Return staticRange. + */ + if (util_1.Guard.isDocumentTypeNode(init.startContainer) || util_1.Guard.isAttrNode(init.startContainer) || + util_1.Guard.isDocumentTypeNode(init.endContainer) || util_1.Guard.isAttrNode(init.endContainer)) { + throw new DOMException_1.InvalidNodeTypeError(); + } + _this._start = [init.startContainer, init.startOffset]; + _this._end = [init.endContainer, init.endOffset]; + return _this; + } + return StaticRangeImpl; +}(AbstractRangeImpl_1.AbstractRangeImpl)); +exports.StaticRangeImpl = StaticRangeImpl; +//# sourceMappingURL=StaticRangeImpl.js.map /***/ }), -/* 488 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 2191: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -20998,805 +19774,773 @@ var __values = (this && this.__values) || function(o) { }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var interfaces_1 = __webpack_require__(970); -var DOMException_1 = __webpack_require__(35); -var NodeImpl_1 = __webpack_require__(935); -var util_1 = __webpack_require__(918); -var util_2 = __webpack_require__(592); -var infra_1 = __webpack_require__(23); -var URLAlgorithm_1 = __webpack_require__(813); -var algorithm_1 = __webpack_require__(163); -var WebIDLAlgorithm_1 = __webpack_require__(495); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7305); +var CharacterDataImpl_1 = __nccwpck_require__(5330); +var algorithm_1 = __nccwpck_require__(61); +var WebIDLAlgorithm_1 = __nccwpck_require__(5457); /** - * Represents a document node. + * Represents a text node. */ -var DocumentImpl = /** @class */ (function (_super) { - __extends(DocumentImpl, _super); +var TextImpl = /** @class */ (function (_super) { + __extends(TextImpl, _super); /** - * Initializes a new instance of `Document`. + * Initializes a new instance of `Text`. + * + * @param data - the text content */ - function DocumentImpl() { - var _this = _super.call(this) || this; - _this._children = new Set(); - _this._encoding = { - name: "UTF-8", - labels: ["unicode-1-1-utf-8", "utf-8", "utf8"] - }; - _this._contentType = 'application/xml'; - _this._URL = { - scheme: "about", - username: "", - password: "", - host: null, - port: null, - path: ["blank"], - query: null, - fragment: null, - _cannotBeABaseURLFlag: true, - _blobURLEntry: null - }; - _this._origin = null; - _this._type = "xml"; - _this._mode = "no-quirks"; - _this._documentElement = null; - _this._hasNamespaces = false; - _this._nodeDocumentOverwrite = null; + function TextImpl(data) { + if (data === void 0) { data = ''; } + var _this = _super.call(this, data) || this; + _this._name = ''; + _this._assignedSlot = null; return _this; } - Object.defineProperty(DocumentImpl.prototype, "_nodeDocument", { - get: function () { return this._nodeDocumentOverwrite || this; }, - set: function (val) { this._nodeDocumentOverwrite = val; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DocumentImpl.prototype, "implementation", { - /** @inheritdoc */ - get: function () { - /** - * The implementation attribute’s getter must return the DOMImplementation - * object that is associated with the document. - */ - return this._implementation || (this._implementation = algorithm_1.create_domImplementation(this)); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DocumentImpl.prototype, "URL", { + Object.defineProperty(TextImpl.prototype, "wholeText", { /** @inheritdoc */ get: function () { + var e_1, _a; /** - * The URL attribute’s getter and documentURI attribute’s getter must return - * the URL, serialized. - * See: https://url.spec.whatwg.org/#concept-url-serializer + * The wholeText attribute’s getter must return the concatenation of the + * data of the contiguous Text nodes of the context object, in tree order. */ - return URLAlgorithm_1.urlSerializer(this._URL); + var text = ''; + try { + for (var _b = __values(algorithm_1.text_contiguousTextNodes(this, true)), _c = _b.next(); !_c.done; _c = _b.next()) { + var node = _c.value; + text = text + node._data; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } + } + return text; }, enumerable: true, configurable: true }); - Object.defineProperty(DocumentImpl.prototype, "documentURI", { - /** @inheritdoc */ - get: function () { return this.URL; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DocumentImpl.prototype, "origin", { - /** @inheritdoc */ - get: function () { - return "null"; - }, + /** @inheritdoc */ + TextImpl.prototype.splitText = function (offset) { + /** + * The splitText(offset) method, when invoked, must split context object + * with offset offset. + */ + return algorithm_1.text_split(this, offset); + }; + Object.defineProperty(TextImpl.prototype, "assignedSlot", { + // MIXIN: Slotable + /* istanbul ignore next */ + get: function () { throw new Error("Mixin: Slotable not implemented."); }, enumerable: true, configurable: true }); - Object.defineProperty(DocumentImpl.prototype, "compatMode", { + /** + * Creates a `Text`. + * + * @param document - owner document + * @param data - the text content + */ + TextImpl._create = function (document, data) { + if (data === void 0) { data = ''; } + var node = new TextImpl(data); + node._nodeDocument = document; + return node; + }; + return TextImpl; +}(CharacterDataImpl_1.CharacterDataImpl)); +exports.TextImpl = TextImpl; +/** + * Initialize prototype properties + */ +WebIDLAlgorithm_1.idl_defineConst(TextImpl.prototype, "_nodeType", interfaces_1.NodeType.Text); +//# sourceMappingURL=TextImpl.js.map + +/***/ }), + +/***/ 9782: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7305); +/** + * Represents an object which can be used to iterate through the nodes + * of a subtree. + */ +var TraverserImpl = /** @class */ (function () { + /** + * Initializes a new instance of `Traverser`. + * + * @param root - root node + */ + function TraverserImpl(root) { + this._activeFlag = false; + this._root = root; + this._whatToShow = interfaces_1.WhatToShow.All; + this._filter = null; + } + Object.defineProperty(TraverserImpl.prototype, "root", { /** @inheritdoc */ - get: function () { - /** - * The compatMode attribute’s getter must return "BackCompat" if context - * object’s mode is "quirks", and "CSS1Compat" otherwise. - */ - return this._mode === "quirks" ? "BackCompat" : "CSS1Compat"; - }, + get: function () { return this._root; }, enumerable: true, configurable: true }); - Object.defineProperty(DocumentImpl.prototype, "characterSet", { + Object.defineProperty(TraverserImpl.prototype, "whatToShow", { /** @inheritdoc */ - get: function () { - /** - * The characterSet attribute’s getter, charset attribute’s getter, and - * inputEncoding attribute’s getter, must return context object’s - * encoding’s name. - */ - return this._encoding.name; - }, + get: function () { return this._whatToShow; }, enumerable: true, configurable: true }); - Object.defineProperty(DocumentImpl.prototype, "charset", { + Object.defineProperty(TraverserImpl.prototype, "filter", { /** @inheritdoc */ - get: function () { return this._encoding.name; }, + get: function () { return this._filter; }, enumerable: true, configurable: true }); - Object.defineProperty(DocumentImpl.prototype, "inputEncoding", { + return TraverserImpl; +}()); +exports.TraverserImpl = TraverserImpl; +//# sourceMappingURL=TraverserImpl.js.map + +/***/ }), + +/***/ 9261: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7305); +var TraverserImpl_1 = __nccwpck_require__(9782); +var algorithm_1 = __nccwpck_require__(61); +/** + * Represents the nodes of a subtree and a position within them. + */ +var TreeWalkerImpl = /** @class */ (function (_super) { + __extends(TreeWalkerImpl, _super); + /** + * Initializes a new instance of `TreeWalker`. + */ + function TreeWalkerImpl(root, current) { + var _this = _super.call(this, root) || this; + _this._current = current; + return _this; + } + Object.defineProperty(TreeWalkerImpl.prototype, "currentNode", { /** @inheritdoc */ - get: function () { return this._encoding.name; }, + get: function () { return this._current; }, + set: function (value) { this._current = value; }, enumerable: true, configurable: true }); - Object.defineProperty(DocumentImpl.prototype, "contentType", { - /** @inheritdoc */ - get: function () { + /** @inheritdoc */ + TreeWalkerImpl.prototype.parentNode = function () { + /** + * 1. Let node be the context object’s current. + * 2. While node is non-null and is not the context object’s root: + */ + var node = this._current; + while (node !== null && node !== this._root) { /** - * The contentType attribute’s getter must return the content type. + * 2.1. Set node to node’s parent. + * 2.2. If node is non-null and filtering node within the context object + * returns FILTER_ACCEPT, then set the context object’s current to node + * and return node. */ - return this._contentType; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DocumentImpl.prototype, "doctype", { - /** @inheritdoc */ - get: function () { - var e_1, _a; - try { - /** - * The doctype attribute’s getter must return the child of the document - * that is a doctype, and null otherwise. - */ - for (var _b = __values(this._children), _c = _b.next(); !_c.done; _c = _b.next()) { - var child = _c.value; - if (util_1.Guard.isDocumentTypeNode(child)) - return child; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } + node = node._parent; + if (node !== null && + algorithm_1.traversal_filter(this, node) === interfaces_1.FilterResult.Accept) { + this._current = node; + return node; } - return null; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DocumentImpl.prototype, "documentElement", { - /** @inheritdoc */ - get: function () { - /** - * The documentElement attribute’s getter must return the document element. - */ - return this._documentElement; - }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - DocumentImpl.prototype.getElementsByTagName = function (qualifiedName) { + } /** - * The getElementsByTagName(qualifiedName) method, when invoked, must return - * the list of elements with qualified name qualifiedName for the context object. + * 3. Return null. */ - return algorithm_1.node_listOfElementsWithQualifiedName(qualifiedName, this); + return null; }; /** @inheritdoc */ - DocumentImpl.prototype.getElementsByTagNameNS = function (namespace, localName) { + TreeWalkerImpl.prototype.firstChild = function () { /** - * The getElementsByTagNameNS(namespace, localName) method, when invoked, - * must return the list of elements with namespace namespace and local name - * localName for the context object. + * The firstChild() method, when invoked, must traverse children with the + * context object and first. */ - return algorithm_1.node_listOfElementsWithNamespace(namespace, localName, this); + return algorithm_1.treeWalker_traverseChildren(this, true); }; /** @inheritdoc */ - DocumentImpl.prototype.getElementsByClassName = function (classNames) { + TreeWalkerImpl.prototype.lastChild = function () { /** - * The getElementsByClassName(classNames) method, when invoked, must return - * the list of elements with class names classNames for the context object. + * The lastChild() method, when invoked, must traverse children with the + * context object and last. */ - return algorithm_1.node_listOfElementsWithClassNames(classNames, this); + return algorithm_1.treeWalker_traverseChildren(this, false); }; /** @inheritdoc */ - DocumentImpl.prototype.createElement = function (localName, options) { + TreeWalkerImpl.prototype.nextSibling = function () { /** - * 1. If localName does not match the Name production, then throw an - * "InvalidCharacterError" DOMException. - * 2. If the context object is an HTML document, then set localName to - * localName in ASCII lowercase. - * 3. Let is be null. - * 4. If options is a dictionary and options’s is is present, then set is - * to it. - * 5. Let namespace be the HTML namespace, if the context object is an - * HTML document or context object’s content type is - * "application/xhtml+xml", and null otherwise. - * 6. Return the result of creating an element given the context object, - * localName, namespace, null, is, and with the synchronous custom elements - * flag set. + * The nextSibling() method, when invoked, must traverse siblings with the + * context object and next. */ - if (!algorithm_1.xml_isName(localName)) - throw new DOMException_1.InvalidCharacterError(); - if (this._type === "html") - localName = localName.toLowerCase(); - var is = null; - if (options !== undefined) { - if (util_2.isString(options)) { - is = options; - } - else { - is = options.is; - } - } - var namespace = (this._type === "html" || this._contentType === "application/xhtml+xml") ? - infra_1.namespace.HTML : null; - return algorithm_1.element_createAnElement(this, localName, namespace, null, is, true); + return algorithm_1.treeWalker_traverseSiblings(this, true); }; /** @inheritdoc */ - DocumentImpl.prototype.createElementNS = function (namespace, qualifiedName, options) { + TreeWalkerImpl.prototype.previousNode = function () { /** - * The createElementNS(namespace, qualifiedName, options) method, when - * invoked, must return the result of running the internal createElementNS - * steps, given context object, namespace, qualifiedName, and options. + * 1. Let node be the context object’s current. + * 2. While node is not the context object’s root: */ - return algorithm_1.document_internalCreateElementNS(this, namespace, qualifiedName, options); - }; - /** @inheritdoc */ - DocumentImpl.prototype.createDocumentFragment = function () { - /** - * The createDocumentFragment() method, when invoked, must return a new - * DocumentFragment node with its node document set to the context object. - */ - return algorithm_1.create_documentFragment(this); - }; - /** @inheritdoc */ - DocumentImpl.prototype.createTextNode = function (data) { - /** - * The createTextNode(data) method, when invoked, must return a new Text - * node with its data set to data and node document set to the context object. - */ - return algorithm_1.create_text(this, data); - }; - /** @inheritdoc */ - DocumentImpl.prototype.createCDATASection = function (data) { - /** - * 1. If context object is an HTML document, then throw a - * "NotSupportedError" DOMException. - * 2. If data contains the string "]]>", then throw an - * "InvalidCharacterError" DOMException. - * 3. Return a new CDATASection node with its data set to data and node - * document set to the context object. - */ - if (this._type === "html") - throw new DOMException_1.NotSupportedError(); - if (data.indexOf(']]>') !== -1) - throw new DOMException_1.InvalidCharacterError(); - return algorithm_1.create_cdataSection(this, data); - }; - /** @inheritdoc */ - DocumentImpl.prototype.createComment = function (data) { - /** - * The createComment(data) method, when invoked, must return a new Comment - * node with its data set to data and node document set to the context object. - */ - return algorithm_1.create_comment(this, data); - }; - /** @inheritdoc */ - DocumentImpl.prototype.createProcessingInstruction = function (target, data) { - /** - * 1. If target does not match the Name production, then throw an - * "InvalidCharacterError" DOMException. - * 2. If data contains the string "?>", then throw an - * "InvalidCharacterError" DOMException. - * 3. Return a new ProcessingInstruction node, with target set to target, - * data set to data, and node document set to the context object. - */ - if (!algorithm_1.xml_isName(target)) - throw new DOMException_1.InvalidCharacterError(); - if (data.indexOf("?>") !== -1) - throw new DOMException_1.InvalidCharacterError(); - return algorithm_1.create_processingInstruction(this, target, data); - }; - /** @inheritdoc */ - DocumentImpl.prototype.importNode = function (node, deep) { - if (deep === void 0) { deep = false; } - /** - * 1. If node is a document or shadow root, then throw a "NotSupportedError" DOMException. - */ - if (util_1.Guard.isDocumentNode(node) || util_1.Guard.isShadowRoot(node)) - throw new DOMException_1.NotSupportedError(); - /** - * 2. Return a clone of node, with context object and the clone children flag set if deep is true. - */ - return algorithm_1.node_clone(node, this, deep); - }; - /** @inheritdoc */ - DocumentImpl.prototype.adoptNode = function (node) { - /** - * 1. If node is a document, then throw a "NotSupportedError" DOMException. - */ - if (util_1.Guard.isDocumentNode(node)) - throw new DOMException_1.NotSupportedError(); - /** - * 2. If node is a shadow root, then throw a "HierarchyRequestError" DOMException. - */ - if (util_1.Guard.isShadowRoot(node)) - throw new DOMException_1.HierarchyRequestError(); - /** - * 3. Adopt node into the context object. - * 4. Return node. - */ - algorithm_1.document_adopt(node, this); - return node; - }; - /** @inheritdoc */ - DocumentImpl.prototype.createAttribute = function (localName) { - /** - * 1. If localName does not match the Name production in XML, then throw - * an "InvalidCharacterError" DOMException. - * 2. If the context object is an HTML document, then set localName to - * localName in ASCII lowercase. - * 3. Return a new attribute whose local name is localName and node document - * is context object. - */ - if (!algorithm_1.xml_isName(localName)) - throw new DOMException_1.InvalidCharacterError(); - if (this._type === "html") { - localName = localName.toLowerCase(); + var node = this._current; + while (node !== this._root) { + /** + * 2.1. Let sibling be node’s previous sibling. + * 2.2. While sibling is non-null: + */ + var sibling = node._previousSibling; + while (sibling) { + /** + * 2.2.1. Set node to sibling. + * 2.2.2. Let result be the result of filtering node within the context + * object. + */ + node = sibling; + var result = algorithm_1.traversal_filter(this, node); + /** + * 2.2.3. While result is not FILTER_REJECT and node has a child: + */ + while (result !== interfaces_1.FilterResult.Reject && node._lastChild) { + /** + * 2.2.3.1. Set node to node’s last child. + * 2.2.3.2. Set result to the result of filtering node within the + * context object. + */ + node = node._lastChild; + result = algorithm_1.traversal_filter(this, node); + } + /** + * 2.2.4. If result is FILTER_ACCEPT, then set the context object’s + * current to node and return node. + */ + if (result === interfaces_1.FilterResult.Accept) { + this._current = node; + return node; + } + /** + * 2.2.5. Set sibling to node’s previous sibling. + */ + sibling = node._previousSibling; + } + /** + * 2.3. If node is the context object’s root or node’s parent is null, + * then return null. + */ + if (node === this._root || node._parent === null) { + return null; + } + /** + * 2.4. Set node to node’s parent. + */ + node = node._parent; + /** + * 2.5. If the return value of filtering node within the context object is + * FILTER_ACCEPT, then set the context object’s current to node and + * return node. + */ + if (algorithm_1.traversal_filter(this, node) === interfaces_1.FilterResult.Accept) { + this._current = node; + return node; + } } - var attr = algorithm_1.create_attr(this, localName); - return attr; - }; - /** @inheritdoc */ - DocumentImpl.prototype.createAttributeNS = function (namespace, qualifiedName) { - /** - * 1. Let namespace, prefix, and localName be the result of passing - * namespace and qualifiedName to validate and extract. - * 2. Return a new attribute whose namespace is namespace, namespace prefix - * is prefix, local name is localName, and node document is context object. - */ - var _a = __read(algorithm_1.namespace_validateAndExtract(namespace, qualifiedName), 3), ns = _a[0], prefix = _a[1], localName = _a[2]; - var attr = algorithm_1.create_attr(this, localName); - attr._namespace = ns; - attr._namespacePrefix = prefix; - return attr; - }; - /** @inheritdoc */ - DocumentImpl.prototype.createEvent = function (eventInterface) { - return algorithm_1.event_createLegacyEvent(eventInterface); - }; - /** @inheritdoc */ - DocumentImpl.prototype.createRange = function () { /** - * The createRange() method, when invoked, must return a new live range - * with (context object, 0) as its start and end. + * 3. Return null. */ - var range = algorithm_1.create_range(); - range._start = [this, 0]; - range._end = [this, 0]; - return range; + return null; }; /** @inheritdoc */ - DocumentImpl.prototype.createNodeIterator = function (root, whatToShow, filter) { - if (whatToShow === void 0) { whatToShow = interfaces_1.WhatToShow.All; } - if (filter === void 0) { filter = null; } + TreeWalkerImpl.prototype.previousSibling = function () { /** - * 1. Let iterator be a new NodeIterator object. - * 2. Set iterator’s root and iterator’s reference to root. - * 3. Set iterator’s pointer before reference to true. - * 4. Set iterator’s whatToShow to whatToShow. - * 5. Set iterator’s filter to filter. - * 6. Return iterator. + * The previousSibling() method, when invoked, must traverse siblings with + * the context object and previous. */ - var iterator = algorithm_1.create_nodeIterator(root, root, true); - iterator._whatToShow = whatToShow; - iterator._iteratorCollection = algorithm_1.create_nodeList(root); - if (util_2.isFunction(filter)) { - iterator._filter = algorithm_1.create_nodeFilter(); - iterator._filter.acceptNode = filter; - } - else { - iterator._filter = filter; - } - return iterator; + return algorithm_1.treeWalker_traverseSiblings(this, false); }; /** @inheritdoc */ - DocumentImpl.prototype.createTreeWalker = function (root, whatToShow, filter) { - if (whatToShow === void 0) { whatToShow = interfaces_1.WhatToShow.All; } - if (filter === void 0) { filter = null; } + TreeWalkerImpl.prototype.nextNode = function () { /** - * 1. Let walker be a new TreeWalker object. - * 2. Set walker’s root and walker’s current to root. - * 3. Set walker’s whatToShow to whatToShow. - * 4. Set walker’s filter to filter. - * 5. Return walker. + * 1. Let node be the context object’s current. + * 2. Let result be FILTER_ACCEPT. + * 3. While true: */ - var walker = algorithm_1.create_treeWalker(root, root); - walker._whatToShow = whatToShow; - if (util_2.isFunction(filter)) { - walker._filter = algorithm_1.create_nodeFilter(); - walker._filter.acceptNode = filter; - } - else { - walker._filter = filter; + var node = this._current; + var result = interfaces_1.FilterResult.Accept; + while (true) { + /** + * 3.1. While result is not FILTER_REJECT and node has a child: + */ + while (result !== interfaces_1.FilterResult.Reject && node._firstChild) { + /** + * 3.1.1. Set node to its first child. + * 3.1.2. Set result to the result of filtering node within the context + * object. + * 3.1.3. If result is FILTER_ACCEPT, then set the context object’s + * current to node and return node. + */ + node = node._firstChild; + result = algorithm_1.traversal_filter(this, node); + if (result === interfaces_1.FilterResult.Accept) { + this._current = node; + return node; + } + } + /** + * 3.2. Let sibling be null. + * 3.3. Let temporary be node. + * 3.4. While temporary is non-null: + */ + var sibling = null; + var temporary = node; + while (temporary !== null) { + /** + * 3.4.1. If temporary is the context object’s root, then return null. + */ + if (temporary === this._root) { + return null; + } + /** + * 3.4.2. Set sibling to temporary’s next sibling. + * 3.4.3. If sibling is non-null, then break. + */ + sibling = temporary._nextSibling; + if (sibling !== null) { + node = sibling; + break; + } + /** + * 3.4.4. Set temporary to temporary’s parent. + */ + temporary = temporary._parent; + } + /** + * 3.5. Set result to the result of filtering node within the context object. + * 3.6. If result is FILTER_ACCEPT, then set the context object’s current + * to node and return node. + */ + result = algorithm_1.traversal_filter(this, node); + if (result === interfaces_1.FilterResult.Accept) { + this._current = node; + return node; + } } - return walker; }; /** - * Gets the parent event target for the given event. + * Creates a new `TreeWalker`. * - * @param event - an event + * @param root - iterator's root node + * @param current - current node */ - DocumentImpl.prototype._getTheParent = function (event) { - /** - * TODO: Implement realms - * A document’s get the parent algorithm, given an event, returns null if - * event’s type attribute value is "load" or document does not have a - * browsing context, and the document’s relevant global object otherwise. - */ - if (event._type === "load") { - return null; - } - else { - return DOMImpl_1.dom.window; - } + TreeWalkerImpl._create = function (root, current) { + return new TreeWalkerImpl(root, current); }; - // MIXIN: NonElementParentNode - /* istanbul ignore next */ - DocumentImpl.prototype.getElementById = function (elementId) { throw new Error("Mixin: NonElementParentNode not implemented."); }; - Object.defineProperty(DocumentImpl.prototype, "children", { - // MIXIN: DocumentOrShadowRoot - // No elements - // MIXIN: ParentNode - /* istanbul ignore next */ - get: function () { throw new Error("Mixin: ParentNode not implemented."); }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DocumentImpl.prototype, "firstElementChild", { - /* istanbul ignore next */ - get: function () { throw new Error("Mixin: ParentNode not implemented."); }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DocumentImpl.prototype, "lastElementChild", { - /* istanbul ignore next */ - get: function () { throw new Error("Mixin: ParentNode not implemented."); }, + return TreeWalkerImpl; +}(TraverserImpl_1.TraverserImpl)); +exports.TreeWalkerImpl = TreeWalkerImpl; +//# sourceMappingURL=TreeWalkerImpl.js.map + +/***/ }), + +/***/ 9067: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var EventTargetImpl_1 = __nccwpck_require__(9968); +var util_1 = __nccwpck_require__(6195); +var algorithm_1 = __nccwpck_require__(61); +/** + * Represents a window containing a DOM document. + */ +var WindowImpl = /** @class */ (function (_super) { + __extends(WindowImpl, _super); + /** + * Initializes a new instance of `Window`. + */ + function WindowImpl() { + var _this = _super.call(this) || this; + _this._signalSlots = new Set(); + _this._mutationObserverMicrotaskQueued = false; + _this._mutationObservers = new Set(); + _this._iteratorList = new util_1.FixedSizeSet(); + _this._associatedDocument = algorithm_1.create_document(); + return _this; + } + Object.defineProperty(WindowImpl.prototype, "document", { + /** @inheritdoc */ + get: function () { return this._associatedDocument; }, enumerable: true, configurable: true }); - Object.defineProperty(DocumentImpl.prototype, "childElementCount", { - /* istanbul ignore next */ - get: function () { throw new Error("Mixin: ParentNode not implemented."); }, + Object.defineProperty(WindowImpl.prototype, "event", { + /** @inheritdoc */ + get: function () { return this._currentEvent; }, enumerable: true, configurable: true }); - /* istanbul ignore next */ - DocumentImpl.prototype.prepend = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; - } - throw new Error("Mixin: ParentNode not implemented."); - }; - /* istanbul ignore next */ - DocumentImpl.prototype.append = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; - } - throw new Error("Mixin: ParentNode not implemented."); + /** + * Creates a new window with a blank document. + */ + WindowImpl._create = function () { + return new WindowImpl(); }; - /* istanbul ignore next */ - DocumentImpl.prototype.querySelector = function (selectors) { throw new Error("Mixin: ParentNode not implemented."); }; - /* istanbul ignore next */ - DocumentImpl.prototype.querySelectorAll = function (selectors) { throw new Error("Mixin: ParentNode not implemented."); }; - return DocumentImpl; -}(NodeImpl_1.NodeImpl)); -exports.DocumentImpl = DocumentImpl; -/** - * Initialize prototype properties - */ -WebIDLAlgorithm_1.idl_defineConst(DocumentImpl.prototype, "_nodeType", interfaces_1.NodeType.Document); -//# sourceMappingURL=DocumentImpl.js.map + return WindowImpl; +}(EventTargetImpl_1.EventTargetImpl)); +exports.WindowImpl = WindowImpl; +//# sourceMappingURL=WindowImpl.js.map /***/ }), -/* 489 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const SemVer = __webpack_require__(65) -const patch = (a, loose) => new SemVer(a, loose).patch -module.exports = patch - -/***/ }), -/* 490 */, -/* 491 */, -/* 492 */, -/* 493 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 1685: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var util_1 = __webpack_require__(918); -var util_2 = __webpack_require__(592); -var ElementImpl_1 = __webpack_require__(695); -var CustomElementAlgorithm_1 = __webpack_require__(344); -var TreeAlgorithm_1 = __webpack_require__(873); -var NamespaceAlgorithm_1 = __webpack_require__(664); -var DOMAlgorithm_1 = __webpack_require__(304); -var ElementAlgorithm_1 = __webpack_require__(33); -var MutationAlgorithm_1 = __webpack_require__(479); -/** - * Returns an element interface for the given name and namespace. - * - * @param name - element name - * @param namespace - namespace - */ -function document_elementInterface(name, namespace) { - return ElementImpl_1.ElementImpl; -} -exports.document_elementInterface = document_elementInterface; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var DocumentImpl_1 = __nccwpck_require__(4333); /** - * Creates a new element node. - * See: https://dom.spec.whatwg.org/#internal-createelementns-steps - * - * @param document - owner document - * @param namespace - element namespace - * @param qualifiedName - qualified name - * @param options - element options + * Represents an XML document. */ -function document_internalCreateElementNS(document, namespace, qualifiedName, options) { +var XMLDocumentImpl = /** @class */ (function (_super) { + __extends(XMLDocumentImpl, _super); /** - * 1. Let namespace, prefix, and localName be the result of passing - * namespace and qualifiedName to validate and extract. - * 2. Let is be null. - * 3. If options is a dictionary and options’s is is present, then set - * is to it. - * 4. Return the result of creating an element given document, localName, - * namespace, prefix, is, and with the synchronous custom elements flag set. + * Initializes a new instance of `XMLDocument`. */ - var _a = __read(NamespaceAlgorithm_1.namespace_validateAndExtract(namespace, qualifiedName), 3), ns = _a[0], prefix = _a[1], localName = _a[2]; - var is = null; - if (options !== undefined) { - if (util_2.isString(options)) { - is = options; - } - else { - is = options.is; - } + function XMLDocumentImpl() { + return _super.call(this) || this; } - return ElementAlgorithm_1.element_createAnElement(document, localName, ns, prefix, is, true); -} -exports.document_internalCreateElementNS = document_internalCreateElementNS; -/** - * Removes `node` and its subtree from its document and changes - * its owner document to `document` so that it can be inserted - * into `document`. - * - * @param node - the node to move - * @param document - document to receive the node and its subtree - */ -function document_adopt(node, document) { - var e_1, _a; - // Optimize for common case of inserting a fresh node - if (node._nodeDocument === document && node._parent === null) { - return; - } - /** - * 1. Let oldDocument be node’s node document. - * 2. If node’s parent is not null, remove node from its parent. - */ - var oldDocument = node._nodeDocument; - if (node._parent) - MutationAlgorithm_1.mutation_remove(node, node._parent); - /** - * 3. If document is not oldDocument, then: - */ - if (document !== oldDocument) { - /** - * 3.1. For each inclusiveDescendant in node’s shadow-including inclusive - * descendants: - */ - var inclusiveDescendant = TreeAlgorithm_1.tree_getFirstDescendantNode(node, true, true); - while (inclusiveDescendant !== null) { - /** - * 3.1.1. Set inclusiveDescendant’s node document to document. - * 3.1.2. If inclusiveDescendant is an element, then set the node - * document of each attribute in inclusiveDescendant’s attribute list - * to document. - */ - inclusiveDescendant._nodeDocument = document; - if (util_1.Guard.isElementNode(inclusiveDescendant)) { - try { - for (var _b = (e_1 = void 0, __values(inclusiveDescendant._attributeList._asArray())), _c = _b.next(); !_c.done; _c = _b.next()) { - var attr = _c.value; - attr._nodeDocument = document; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - /** - * 3.2. For each inclusiveDescendant in node's shadow-including - * inclusive descendants that is custom, enqueue a custom - * element callback reaction with inclusiveDescendant, - * callback name "adoptedCallback", and an argument list - * containing oldDocument and document. - */ - if (DOMImpl_1.dom.features.customElements) { - if (util_1.Guard.isElementNode(inclusiveDescendant) && - inclusiveDescendant._customElementState === "custom") { - CustomElementAlgorithm_1.customElement_enqueueACustomElementCallbackReaction(inclusiveDescendant, "adoptedCallback", [oldDocument, document]); - } - } - /** - * 3.3. For each inclusiveDescendant in node’s shadow-including - * inclusive descendants, in shadow-including tree order, run the - * adopting steps with inclusiveDescendant and oldDocument. - */ - if (DOMImpl_1.dom.features.steps) { - DOMAlgorithm_1.dom_runAdoptingSteps(inclusiveDescendant, oldDocument); - } - inclusiveDescendant = TreeAlgorithm_1.tree_getNextDescendantNode(node, inclusiveDescendant, true, true); - } - } -} -exports.document_adopt = document_adopt; -//# sourceMappingURL=DocumentAlgorithm.js.map + return XMLDocumentImpl; +}(DocumentImpl_1.DocumentImpl)); +exports.XMLDocumentImpl = XMLDocumentImpl; +//# sourceMappingURL=XMLDocumentImpl.js.map /***/ }), -/* 494 */ -/***/ (function(module, __unusedexports, __webpack_require__) { -var rng = __webpack_require__(58); -var bytesToUuid = __webpack_require__(722); +/***/ 633: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -function v4(options, buf, offset) { - var i = buf && offset || 0; +"use strict"; - if (typeof(options) == 'string') { - buf = options === 'binary' ? new Array(16) : null; - options = null; - } - options = options || {}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var util_1 = __nccwpck_require__(6195); +// Import implementation classes +var AbortControllerImpl_1 = __nccwpck_require__(6461); +exports.AbortController = AbortControllerImpl_1.AbortControllerImpl; +var AbortSignalImpl_1 = __nccwpck_require__(22); +exports.AbortSignal = AbortSignalImpl_1.AbortSignalImpl; +var AbstractRangeImpl_1 = __nccwpck_require__(7126); +exports.AbstractRange = AbstractRangeImpl_1.AbstractRangeImpl; +var AttrImpl_1 = __nccwpck_require__(3717); +exports.Attr = AttrImpl_1.AttrImpl; +var CDATASectionImpl_1 = __nccwpck_require__(3977); +exports.CDATASection = CDATASectionImpl_1.CDATASectionImpl; +var CharacterDataImpl_1 = __nccwpck_require__(5330); +exports.CharacterData = CharacterDataImpl_1.CharacterDataImpl; +var ChildNodeImpl_1 = __nccwpck_require__(8264); +var CommentImpl_1 = __nccwpck_require__(930); +exports.Comment = CommentImpl_1.CommentImpl; +var CustomEventImpl_1 = __nccwpck_require__(9857); +exports.CustomEvent = CustomEventImpl_1.CustomEventImpl; +var DocumentFragmentImpl_1 = __nccwpck_require__(2585); +exports.DocumentFragment = DocumentFragmentImpl_1.DocumentFragmentImpl; +var DocumentImpl_1 = __nccwpck_require__(4333); +exports.Document = DocumentImpl_1.DocumentImpl; +var DocumentOrShadowRootImpl_1 = __nccwpck_require__(5274); +var DocumentTypeImpl_1 = __nccwpck_require__(3173); +exports.DocumentType = DocumentTypeImpl_1.DocumentTypeImpl; +var DOMImpl_1 = __nccwpck_require__(4177); +exports.dom = DOMImpl_1.dom; +var DOMImplementationImpl_1 = __nccwpck_require__(2197); +exports.DOMImplementation = DOMImplementationImpl_1.DOMImplementationImpl; +var DOMTokenListImpl_1 = __nccwpck_require__(5096); +exports.DOMTokenList = DOMTokenListImpl_1.DOMTokenListImpl; +var ElementImpl_1 = __nccwpck_require__(5975); +exports.Element = ElementImpl_1.ElementImpl; +var EventImpl_1 = __nccwpck_require__(8245); +exports.Event = EventImpl_1.EventImpl; +var EventTargetImpl_1 = __nccwpck_require__(9968); +exports.EventTarget = EventTargetImpl_1.EventTargetImpl; +var HTMLCollectionImpl_1 = __nccwpck_require__(3969); +exports.HTMLCollection = HTMLCollectionImpl_1.HTMLCollectionImpl; +var MutationObserverImpl_1 = __nccwpck_require__(9616); +exports.MutationObserver = MutationObserverImpl_1.MutationObserverImpl; +var MutationRecordImpl_1 = __nccwpck_require__(6219); +exports.MutationRecord = MutationRecordImpl_1.MutationRecordImpl; +var NamedNodeMapImpl_1 = __nccwpck_require__(7206); +exports.NamedNodeMap = NamedNodeMapImpl_1.NamedNodeMapImpl; +var NodeFilterImpl_1 = __nccwpck_require__(2355); +exports.NodeFilter = NodeFilterImpl_1.NodeFilterImpl; +var NodeImpl_1 = __nccwpck_require__(1745); +exports.Node = NodeImpl_1.NodeImpl; +var NodeIteratorImpl_1 = __nccwpck_require__(1997); +exports.NodeIterator = NodeIteratorImpl_1.NodeIteratorImpl; +var NodeListImpl_1 = __nccwpck_require__(3728); +exports.NodeList = NodeListImpl_1.NodeListImpl; +var NodeListStaticImpl_1 = __nccwpck_require__(5306); +exports.NodeListStatic = NodeListStaticImpl_1.NodeListStaticImpl; +var NonDocumentTypeChildNodeImpl_1 = __nccwpck_require__(1032); +var NonElementParentNodeImpl_1 = __nccwpck_require__(733); +var ParentNodeImpl_1 = __nccwpck_require__(5988); +var ProcessingInstructionImpl_1 = __nccwpck_require__(9430); +exports.ProcessingInstruction = ProcessingInstructionImpl_1.ProcessingInstructionImpl; +var RangeImpl_1 = __nccwpck_require__(166); +exports.Range = RangeImpl_1.RangeImpl; +var ShadowRootImpl_1 = __nccwpck_require__(1911); +exports.ShadowRoot = ShadowRootImpl_1.ShadowRootImpl; +var SlotableImpl_1 = __nccwpck_require__(1964); +var StaticRangeImpl_1 = __nccwpck_require__(6357); +exports.StaticRange = StaticRangeImpl_1.StaticRangeImpl; +var TextImpl_1 = __nccwpck_require__(2191); +exports.Text = TextImpl_1.TextImpl; +var TraverserImpl_1 = __nccwpck_require__(9782); +exports.Traverser = TraverserImpl_1.TraverserImpl; +var TreeWalkerImpl_1 = __nccwpck_require__(9261); +exports.TreeWalker = TreeWalkerImpl_1.TreeWalkerImpl; +var WindowImpl_1 = __nccwpck_require__(9067); +exports.Window = WindowImpl_1.WindowImpl; +var XMLDocumentImpl_1 = __nccwpck_require__(1685); +exports.XMLDocument = XMLDocumentImpl_1.XMLDocumentImpl; +// Apply mixins +// ChildNode +util_1.applyMixin(ElementImpl_1.ElementImpl, ChildNodeImpl_1.ChildNodeImpl); +util_1.applyMixin(CharacterDataImpl_1.CharacterDataImpl, ChildNodeImpl_1.ChildNodeImpl); +util_1.applyMixin(DocumentTypeImpl_1.DocumentTypeImpl, ChildNodeImpl_1.ChildNodeImpl); +// DocumentOrShadowRoot +util_1.applyMixin(DocumentImpl_1.DocumentImpl, DocumentOrShadowRootImpl_1.DocumentOrShadowRootImpl); +util_1.applyMixin(ShadowRootImpl_1.ShadowRootImpl, DocumentOrShadowRootImpl_1.DocumentOrShadowRootImpl); +// NonDocumentTypeChildNode +util_1.applyMixin(ElementImpl_1.ElementImpl, NonDocumentTypeChildNodeImpl_1.NonDocumentTypeChildNodeImpl); +util_1.applyMixin(CharacterDataImpl_1.CharacterDataImpl, NonDocumentTypeChildNodeImpl_1.NonDocumentTypeChildNodeImpl); +// NonElementParentNode +util_1.applyMixin(DocumentImpl_1.DocumentImpl, NonElementParentNodeImpl_1.NonElementParentNodeImpl); +util_1.applyMixin(DocumentFragmentImpl_1.DocumentFragmentImpl, NonElementParentNodeImpl_1.NonElementParentNodeImpl); +// ParentNode +util_1.applyMixin(DocumentImpl_1.DocumentImpl, ParentNodeImpl_1.ParentNodeImpl); +util_1.applyMixin(DocumentFragmentImpl_1.DocumentFragmentImpl, ParentNodeImpl_1.ParentNodeImpl); +util_1.applyMixin(ElementImpl_1.ElementImpl, ParentNodeImpl_1.ParentNodeImpl); +// Slotable +util_1.applyMixin(TextImpl_1.TextImpl, SlotableImpl_1.SlotableImpl); +util_1.applyMixin(ElementImpl_1.ElementImpl, SlotableImpl_1.SlotableImpl); +//# sourceMappingURL=index.js.map - var rnds = options.random || (options.rng || rng)(); +/***/ }), - // 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; +/***/ 7305: +/***/ ((__unused_webpack_module, exports) => { - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ++ii) { - buf[i + ii] = rnds[ii]; - } - } +"use strict"; - return buf || bytesToUuid(rnds); -} +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Defines the position of a boundary point relative to another. + */ +var BoundaryPosition; +(function (BoundaryPosition) { + BoundaryPosition[BoundaryPosition["Before"] = 0] = "Before"; + BoundaryPosition[BoundaryPosition["Equal"] = 1] = "Equal"; + BoundaryPosition[BoundaryPosition["After"] = 2] = "After"; +})(BoundaryPosition = exports.BoundaryPosition || (exports.BoundaryPosition = {})); +/** + * Defines the event phase. + */ +var EventPhase; +(function (EventPhase) { + EventPhase[EventPhase["None"] = 0] = "None"; + EventPhase[EventPhase["Capturing"] = 1] = "Capturing"; + EventPhase[EventPhase["AtTarget"] = 2] = "AtTarget"; + EventPhase[EventPhase["Bubbling"] = 3] = "Bubbling"; +})(EventPhase = exports.EventPhase || (exports.EventPhase = {})); +/** + * Defines the type of a node object. + */ +var NodeType; +(function (NodeType) { + NodeType[NodeType["Element"] = 1] = "Element"; + NodeType[NodeType["Attribute"] = 2] = "Attribute"; + NodeType[NodeType["Text"] = 3] = "Text"; + NodeType[NodeType["CData"] = 4] = "CData"; + NodeType[NodeType["EntityReference"] = 5] = "EntityReference"; + NodeType[NodeType["Entity"] = 6] = "Entity"; + NodeType[NodeType["ProcessingInstruction"] = 7] = "ProcessingInstruction"; + NodeType[NodeType["Comment"] = 8] = "Comment"; + NodeType[NodeType["Document"] = 9] = "Document"; + NodeType[NodeType["DocumentType"] = 10] = "DocumentType"; + NodeType[NodeType["DocumentFragment"] = 11] = "DocumentFragment"; + NodeType[NodeType["Notation"] = 12] = "Notation"; // historical +})(NodeType = exports.NodeType || (exports.NodeType = {})); +/** + * Defines the position of a node in the document relative to another + * node. + */ +var Position; +(function (Position) { + Position[Position["Disconnected"] = 1] = "Disconnected"; + Position[Position["Preceding"] = 2] = "Preceding"; + Position[Position["Following"] = 4] = "Following"; + Position[Position["Contains"] = 8] = "Contains"; + Position[Position["ContainedBy"] = 16] = "ContainedBy"; + Position[Position["ImplementationSpecific"] = 32] = "ImplementationSpecific"; +})(Position = exports.Position || (exports.Position = {})); +/** + * Defines the return value of a filter callback. + */ +var FilterResult; +(function (FilterResult) { + FilterResult[FilterResult["Accept"] = 1] = "Accept"; + FilterResult[FilterResult["Reject"] = 2] = "Reject"; + FilterResult[FilterResult["Skip"] = 3] = "Skip"; +})(FilterResult = exports.FilterResult || (exports.FilterResult = {})); +/** + * Defines what to show in node filter. + */ +var WhatToShow; +(function (WhatToShow) { + WhatToShow[WhatToShow["All"] = 4294967295] = "All"; + WhatToShow[WhatToShow["Element"] = 1] = "Element"; + WhatToShow[WhatToShow["Attribute"] = 2] = "Attribute"; + WhatToShow[WhatToShow["Text"] = 4] = "Text"; + WhatToShow[WhatToShow["CDataSection"] = 8] = "CDataSection"; + WhatToShow[WhatToShow["EntityReference"] = 16] = "EntityReference"; + WhatToShow[WhatToShow["Entity"] = 32] = "Entity"; + WhatToShow[WhatToShow["ProcessingInstruction"] = 64] = "ProcessingInstruction"; + WhatToShow[WhatToShow["Comment"] = 128] = "Comment"; + WhatToShow[WhatToShow["Document"] = 256] = "Document"; + WhatToShow[WhatToShow["DocumentType"] = 512] = "DocumentType"; + WhatToShow[WhatToShow["DocumentFragment"] = 1024] = "DocumentFragment"; + WhatToShow[WhatToShow["Notation"] = 2048] = "Notation"; +})(WhatToShow = exports.WhatToShow || (exports.WhatToShow = {})); +/** + * Defines how boundary points are compared. + */ +var HowToCompare; +(function (HowToCompare) { + HowToCompare[HowToCompare["StartToStart"] = 0] = "StartToStart"; + HowToCompare[HowToCompare["StartToEnd"] = 1] = "StartToEnd"; + HowToCompare[HowToCompare["EndToEnd"] = 2] = "EndToEnd"; + HowToCompare[HowToCompare["EndToStart"] = 3] = "EndToStart"; +})(HowToCompare = exports.HowToCompare || (exports.HowToCompare = {})); +//# sourceMappingURL=interfaces.js.map -module.exports = v4; +/***/ }), + +/***/ 4646: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var dom_1 = __nccwpck_require__(633); +dom_1.dom.setFeatures(true); +var dom_2 = __nccwpck_require__(633); +exports.DOMImplementation = dom_2.DOMImplementation; +var parser_1 = __nccwpck_require__(6216); +exports.DOMParser = parser_1.DOMParser; +var serializer_1 = __nccwpck_require__(7119); +exports.XMLSerializer = serializer_1.XMLSerializer; +//# sourceMappingURL=index.js.map /***/ }), -/* 495 */ -/***/ (function(__unusedmodule, exports) { + +/***/ 8845: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var algorithm_1 = __nccwpck_require__(61); +var XMLParserImpl_1 = __nccwpck_require__(4126); /** - * Defines a WebIDL `Const` property on the given object. + * Represents a parser for XML and HTML content. * - * @param o - object on which to add the property - * @param name - property name - * @param value - property value + * See: https://w3c.github.io/DOM-Parsing/#the-domparser-interface */ -function idl_defineConst(o, name, value) { - Object.defineProperty(o, name, { writable: false, enumerable: true, configurable: false, value: value }); -} -exports.idl_defineConst = idl_defineConst; -//# sourceMappingURL=WebIDLAlgorithm.js.map +var DOMParserImpl = /** @class */ (function () { + function DOMParserImpl() { + } + /** @inheritdoc */ + DOMParserImpl.prototype.parseFromString = function (source, mimeType) { + if (mimeType === "text/html") + throw new Error('HTML parser not implemented.'); + try { + var parser = new XMLParserImpl_1.XMLParserImpl(); + var doc = parser.parse(source); + doc._contentType = mimeType; + return doc; + } + catch (e) { + var errorNS = "http://www.mozilla.org/newlayout/xml/parsererror.xml"; + var doc = algorithm_1.create_xmlDocument(); + var root = doc.createElementNS(errorNS, "parsererror"); + var ele = doc.createElementNS(errorNS, "error"); + ele.setAttribute("message", e.message); + root.appendChild(ele); + doc.appendChild(root); + return doc; + } + }; + return DOMParserImpl; +}()); +exports.DOMParserImpl = DOMParserImpl; +//# sourceMappingURL=DOMParserImpl.js.map /***/ }), -/* 496 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 4126: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; @@ -21813,3876 +20557,4516 @@ var __read = (this && this.__read) || function (o, n) { } return ar; }; -var __spread = (this && this.__spread) || function () { - for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); - return ar; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var util_1 = __webpack_require__(592); -/** - * Adds the given item to the end of the set. - * - * @param set - a set - * @param item - an item - */ -function append(set, item) { - set.add(item); -} -exports.append = append; -/** - * Extends a set by appending all items from another set. - * - * @param setA - a list to extend - * @param setB - a list containing items to append to `setA` - */ -function extend(setA, setB) { - setB.forEach(setA.add, setA); -} -exports.extend = extend; -/** - * Inserts the given item to the start of the set. - * - * @param set - a set - * @param item - an item - */ -function prepend(set, item) { - var cloned = new Set(set); - set.clear(); - set.add(item); - cloned.forEach(set.add, set); -} -exports.prepend = prepend; -/** - * Replaces the given item or all items matching condition with a new item. - * - * @param set - a set - * @param conditionOrItem - an item to replace or a condition matching items - * to replace - * @param item - an item - */ -function replace(set, conditionOrItem, newItem) { - var e_1, _a; - var newSet = new Set(); - try { - for (var set_1 = __values(set), set_1_1 = set_1.next(); !set_1_1.done; set_1_1 = set_1.next()) { - var oldItem = set_1_1.value; - if (util_1.isFunction(conditionOrItem)) { - if (!!conditionOrItem.call(null, oldItem)) { - newSet.add(newItem); - } - else { - newSet.add(oldItem); - } - } - else if (oldItem === conditionOrItem) { - newSet.add(newItem); - } - else { - newSet.add(oldItem); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (set_1_1 && !set_1_1.done && (_a = set_1.return)) _a.call(set_1); - } - finally { if (e_1) throw e_1.error; } - } - set.clear(); - newSet.forEach(set.add, set); -} -exports.replace = replace; -/** - * Inserts the given item before the given index. - * - * @param set - a set - * @param item - an item - */ -function insert(set, item, index) { - var e_2, _a; - var newSet = new Set(); - var i = 0; - try { - for (var set_2 = __values(set), set_2_1 = set_2.next(); !set_2_1.done; set_2_1 = set_2.next()) { - var oldItem = set_2_1.value; - if (i === index) - newSet.add(item); - newSet.add(oldItem); - i++; - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (set_2_1 && !set_2_1.done && (_a = set_2.return)) _a.call(set_2); +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; } - finally { if (e_2) throw e_2.error; } - } - set.clear(); - newSet.forEach(set.add, set); -} -exports.insert = insert; + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var XMLStringLexer_1 = __nccwpck_require__(7061); +var interfaces_1 = __nccwpck_require__(7707); +var infra_1 = __nccwpck_require__(4251); +var algorithm_1 = __nccwpck_require__(61); +var LocalNameSet_1 = __nccwpck_require__(9049); /** - * Removes the given item or all items matching condition. + * Represents a parser for XML content. * - * @param set - a set - * @param conditionOrItem - an item to remove or a condition matching items - * to remove + * See: https://html.spec.whatwg.org/#xml-parser */ -function remove(set, conditionOrItem) { - var e_3, _a, e_4, _b; - if (!util_1.isFunction(conditionOrItem)) { - set.delete(conditionOrItem); - } - else { - var toRemove = []; - try { - for (var set_3 = __values(set), set_3_1 = set_3.next(); !set_3_1.done; set_3_1 = set_3.next()) { - var item = set_3_1.value; - if (!!conditionOrItem.call(null, item)) { - toRemove.push(item); - } - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (set_3_1 && !set_3_1.done && (_a = set_3.return)) _a.call(set_3); - } - finally { if (e_3) throw e_3.error; } - } - try { - for (var toRemove_1 = __values(toRemove), toRemove_1_1 = toRemove_1.next(); !toRemove_1_1.done; toRemove_1_1 = toRemove_1.next()) { - var oldItem = toRemove_1_1.value; - set.delete(oldItem); - } - } - catch (e_4_1) { e_4 = { error: e_4_1 }; } - finally { - try { - if (toRemove_1_1 && !toRemove_1_1.done && (_b = toRemove_1.return)) _b.call(toRemove_1); - } - finally { if (e_4) throw e_4.error; } - } +var XMLParserImpl = /** @class */ (function () { + function XMLParserImpl() { } -} -exports.remove = remove; -/** - * Removes all items from the set. - */ -function empty(set) { - set.clear(); -} -exports.empty = empty; -/** - * Determines if the set contains the given item or any items matching - * condition. - * - * @param set - a set - * @param conditionOrItem - an item to a condition to match - */ -function contains(set, conditionOrItem) { - var e_5, _a; - if (!util_1.isFunction(conditionOrItem)) { - return set.has(conditionOrItem); - } - else { - try { - for (var set_4 = __values(set), set_4_1 = set_4.next(); !set_4_1.done; set_4_1 = set_4.next()) { - var oldItem = set_4_1.value; - if (!!conditionOrItem.call(null, oldItem)) { - return true; - } - } - } - catch (e_5_1) { e_5 = { error: e_5_1 }; } - finally { - try { - if (set_4_1 && !set_4_1.done && (_a = set_4.return)) _a.call(set_4); - } - finally { if (e_5) throw e_5.error; } - } - } - return false; -} -exports.contains = contains; -/** - * Returns the count of items in the set matching the given condition. - * - * @param set - a set - * @param condition - an optional condition to match - */ -function size(set, condition) { - var e_6, _a; - if (condition === undefined) { - return set.size; - } - else { - var count = 0; - try { - for (var set_5 = __values(set), set_5_1 = set_5.next(); !set_5_1.done; set_5_1 = set_5.next()) { - var item = set_5_1.value; - if (!!condition.call(null, item)) { - count++; - } - } - } - catch (e_6_1) { e_6 = { error: e_6_1 }; } - finally { - try { - if (set_5_1 && !set_5_1.done && (_a = set_5.return)) _a.call(set_5); + /** + * Parses XML content. + * + * @param source - a string containing XML content + */ + XMLParserImpl.prototype.parse = function (source) { + var e_1, _a, e_2, _b; + var lexer = new XMLStringLexer_1.XMLStringLexer(source, { skipWhitespaceOnlyText: true }); + var doc = algorithm_1.create_document(); + var context = doc; + var token = lexer.nextToken(); + while (token.type !== interfaces_1.TokenType.EOF) { + switch (token.type) { + case interfaces_1.TokenType.Declaration: + var declaration = token; + if (declaration.version !== "1.0") { + throw new Error("Invalid xml version: " + declaration.version); + } + break; + case interfaces_1.TokenType.DocType: + var doctype = token; + if (!algorithm_1.xml_isPubidChar(doctype.pubId)) { + throw new Error("DocType public identifier does not match PubidChar construct."); + } + if (!algorithm_1.xml_isLegalChar(doctype.sysId) || + (doctype.sysId.indexOf('"') !== -1 && doctype.sysId.indexOf("'") !== -1)) { + throw new Error("DocType system identifier contains invalid characters."); + } + context.appendChild(doc.implementation.createDocumentType(doctype.name, doctype.pubId, doctype.sysId)); + break; + case interfaces_1.TokenType.CDATA: + var cdata = token; + if (!algorithm_1.xml_isLegalChar(cdata.data) || + cdata.data.indexOf("]]>") !== -1) { + throw new Error("CDATA contains invalid characters."); + } + context.appendChild(doc.createCDATASection(cdata.data)); + break; + case interfaces_1.TokenType.Comment: + var comment = token; + if (!algorithm_1.xml_isLegalChar(comment.data) || + comment.data.indexOf("--") !== -1 || comment.data.endsWith("-")) { + throw new Error("Comment data contains invalid characters."); + } + context.appendChild(doc.createComment(comment.data)); + break; + case interfaces_1.TokenType.PI: + var pi = token; + if (pi.target.indexOf(":") !== -1 || (/^xml$/i).test(pi.target)) { + throw new Error("Processing instruction target contains invalid characters."); + } + if (!algorithm_1.xml_isLegalChar(pi.data) || pi.data.indexOf("?>") !== -1) { + throw new Error("Processing instruction data contains invalid characters."); + } + context.appendChild(doc.createProcessingInstruction(pi.target, pi.data)); + break; + case interfaces_1.TokenType.Text: + var text = token; + if (!algorithm_1.xml_isLegalChar(text.data)) { + throw new Error("Text data contains invalid characters."); + } + context.appendChild(doc.createTextNode(text.data)); + break; + case interfaces_1.TokenType.Element: + var element = token; + // inherit namespace from parent + var _c = __read(algorithm_1.namespace_extractQName(element.name), 2), prefix = _c[0], localName = _c[1]; + if (localName.indexOf(":") !== -1 || !algorithm_1.xml_isName(localName)) { + throw new Error("Node local name contains invalid characters."); + } + if (prefix === "xmlns") { + throw new Error("An element cannot have the 'xmlns' prefix."); + } + var namespace = context.lookupNamespaceURI(prefix); + // override namespace if there is a namespace declaration + // attribute + // also lookup namespace declaration attributes + var nsDeclarations = {}; + try { + for (var _d = (e_1 = void 0, __values(element.attributes)), _e = _d.next(); !_e.done; _e = _d.next()) { + var _f = __read(_e.value, 2), attName = _f[0], attValue = _f[1]; + if (attName === "xmlns") { + namespace = attValue; + } + else { + var _g = __read(algorithm_1.namespace_extractQName(attName), 2), attPrefix = _g[0], attLocalName = _g[1]; + if (attPrefix === "xmlns") { + if (attLocalName === prefix) { + namespace = attValue; + } + nsDeclarations[attLocalName] = attValue; + } + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_e && !_e.done && (_a = _d.return)) _a.call(_d); + } + finally { if (e_1) throw e_1.error; } + } + // create the DOM element node + var elementNode = (namespace !== null ? + doc.createElementNS(namespace, element.name) : + doc.createElement(element.name)); + context.appendChild(elementNode); + // assign attributes + var localNameSet = new LocalNameSet_1.LocalNameSet(); + try { + for (var _h = (e_2 = void 0, __values(element.attributes)), _j = _h.next(); !_j.done; _j = _h.next()) { + var _k = __read(_j.value, 2), attName = _k[0], attValue = _k[1]; + var _l = __read(algorithm_1.namespace_extractQName(attName), 2), attPrefix = _l[0], attLocalName = _l[1]; + var attNamespace = null; + if (attPrefix === "xmlns" || (attPrefix === null && attLocalName === "xmlns")) { + // namespace declaration attribute + attNamespace = infra_1.namespace.XMLNS; + } + else { + attNamespace = elementNode.lookupNamespaceURI(attPrefix); + if (attNamespace !== null && elementNode.isDefaultNamespace(attNamespace)) { + attNamespace = null; + } + else if (attNamespace === null && attPrefix !== null) { + attNamespace = nsDeclarations[attPrefix] || null; + } + } + if (localNameSet.has(attNamespace, attLocalName)) { + throw new Error("Element contains duplicate attributes."); + } + localNameSet.set(attNamespace, attLocalName); + if (attNamespace === infra_1.namespace.XMLNS) { + if (attValue === infra_1.namespace.XMLNS) { + throw new Error("XMLNS namespace is reserved."); + } + } + if (attLocalName.indexOf(":") !== -1 || !algorithm_1.xml_isName(attLocalName)) { + throw new Error("Attribute local name contains invalid characters."); + } + if (attPrefix === "xmlns" && attValue === "") { + throw new Error("Empty XML namespace is not allowed."); + } + if (attNamespace !== null) + elementNode.setAttributeNS(attNamespace, attName, attValue); + else + elementNode.setAttribute(attName, attValue); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_j && !_j.done && (_b = _h.return)) _b.call(_h); + } + finally { if (e_2) throw e_2.error; } + } + if (!element.selfClosing) { + context = elementNode; + } + break; + case interfaces_1.TokenType.ClosingTag: + var closingTag = token; + if (closingTag.name !== context.nodeName) { + throw new Error('Closing tag name does not match opening tag name.'); + } + /* istanbul ignore else */ + if (context._parent) { + context = context._parent; + } + break; } - finally { if (e_6) throw e_6.error; } - } - return count; - } -} -exports.size = size; -/** - * Determines if the set is empty. - * - * @param set - a set - */ -function isEmpty(set) { - return set.size === 0; -} -exports.isEmpty = isEmpty; -/** - * Returns an iterator for the items of the set. - * - * @param set - a set - * @param condition - an optional condition to match - */ -function forEach(set, condition) { - var set_6, set_6_1, item, e_7_1; - var e_7, _a; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - if (!(condition === undefined)) return [3 /*break*/, 2]; - return [5 /*yield**/, __values(set)]; - case 1: - _b.sent(); - return [3 /*break*/, 9]; - case 2: - _b.trys.push([2, 7, 8, 9]); - set_6 = __values(set), set_6_1 = set_6.next(); - _b.label = 3; - case 3: - if (!!set_6_1.done) return [3 /*break*/, 6]; - item = set_6_1.value; - if (!!!condition.call(null, item)) return [3 /*break*/, 5]; - return [4 /*yield*/, item]; - case 4: - _b.sent(); - _b.label = 5; - case 5: - set_6_1 = set_6.next(); - return [3 /*break*/, 3]; - case 6: return [3 /*break*/, 9]; - case 7: - e_7_1 = _b.sent(); - e_7 = { error: e_7_1 }; - return [3 /*break*/, 9]; - case 8: - try { - if (set_6_1 && !set_6_1.done && (_a = set_6.return)) _a.call(set_6); - } - finally { if (e_7) throw e_7.error; } - return [7 /*endfinally*/]; - case 9: return [2 /*return*/]; + token = lexer.nextToken(); } - }); -} -exports.forEach = forEach; -/** - * Creates and returns a shallow clone of set. - * - * @param set - a set - */ -function clone(set) { - return new Set(set); -} -exports.clone = clone; -/** - * Returns a new set containing items from the set sorted in ascending - * order. - * - * @param set - a set - * @param lessThanAlgo - a function that returns `true` if its first argument - * is less than its second argument, and `false` otherwise. - */ -function sortInAscendingOrder(set, lessThanAlgo) { - var list = new (Array.bind.apply(Array, __spread([void 0], set)))(); - list.sort(function (itemA, itemB) { - return lessThanAlgo.call(null, itemA, itemB) ? -1 : 1; - }); - return new Set(list); -} -exports.sortInAscendingOrder = sortInAscendingOrder; -/** - * Returns a new set containing items from the set sorted in descending - * order. - * - * @param set - a set - * @param lessThanAlgo - a function that returns `true` if its first argument - * is less than its second argument, and `false` otherwise. - */ -function sortInDescendingOrder(set, lessThanAlgo) { - var list = new (Array.bind.apply(Array, __spread([void 0], set)))(); - list.sort(function (itemA, itemB) { - return lessThanAlgo.call(null, itemA, itemB) ? 1 : -1; - }); - return new Set(list); -} -exports.sortInDescendingOrder = sortInDescendingOrder; -/** - * Determines if a set is a subset of another set. - * - * @param subset - a set - * @param superset - a superset possibly containing all items from `subset`. - */ -function isSubsetOf(subset, superset) { - var e_8, _a; + return doc; + }; + return XMLParserImpl; +}()); +exports.XMLParserImpl = XMLParserImpl; +//# sourceMappingURL=XMLParserImpl.js.map + +/***/ }), + +/***/ 7061: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; try { - for (var subset_1 = __values(subset), subset_1_1 = subset_1.next(); !subset_1_1.done; subset_1_1 = subset_1.next()) { - var item = subset_1_1.value; - if (!superset.has(item)) - return false; - } + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } - catch (e_8_1) { e_8 = { error: e_8_1 }; } + catch (error) { e = { error: error }; } finally { try { - if (subset_1_1 && !subset_1_1.done && (_a = subset_1.return)) _a.call(subset_1); + if (r && !r.done && (m = i["return"])) m.call(i); } - finally { if (e_8) throw e_8.error; } + finally { if (e) throw e.error; } } - return true; -} -exports.isSubsetOf = isSubsetOf; -/** - * Determines if a set is a superset of another set. - * - * @param superset - a set - * @param subset - a subset possibly contained within `superset`. - */ -function isSupersetOf(superset, subset) { - return isSubsetOf(subset, superset); -} -exports.isSupersetOf = isSupersetOf; + return ar; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7707); /** - * Returns a new set with items that are contained in both sets. - * - * @param setA - a set - * @param setB - a set + * Represents a lexer for XML content in a string. */ -function intersection(setA, setB) { - var e_9, _a; - var newSet = new Set(); - try { - for (var setA_1 = __values(setA), setA_1_1 = setA_1.next(); !setA_1_1.done; setA_1_1 = setA_1.next()) { - var item = setA_1_1.value; - if (setB.has(item)) - newSet.add(item); - } - } - catch (e_9_1) { e_9 = { error: e_9_1 }; } - finally { - try { - if (setA_1_1 && !setA_1_1.done && (_a = setA_1.return)) _a.call(setA_1); +var XMLStringLexer = /** @class */ (function () { + /** + * Initializes a new instance of `XMLStringLexer`. + * + * @param str - the string to tokenize and lex + * @param options - lexer options + */ + function XMLStringLexer(str, options) { + this._options = { + skipWhitespaceOnlyText: false + }; + this.err = { line: -1, col: -1, index: -1, str: "" }; + this._str = str; + this._index = 0; + this._length = str.length; + if (options) { + this._options.skipWhitespaceOnlyText = options.skipWhitespaceOnlyText || false; } - finally { if (e_9) throw e_9.error; } } - return newSet; -} -exports.intersection = intersection; -/** - * Returns a new set with items from both sets. - * - * @param setA - a set - * @param setB - a set - */ -function union(setA, setB) { - var newSet = new Set(setA); - setB.forEach(newSet.add, newSet); - return newSet; -} -exports.union = union; -/** - * Returns a set of integers from `n` to `m` inclusive. - * - * @param n - starting number - * @param m - ending number - */ -function range(n, m) { - var newSet = new Set(); - for (var i = n; i <= m; i++) { - newSet.add(i); - } - return newSet; -} -exports.range = range; -//# sourceMappingURL=Set.js.map - -/***/ }), -/* 497 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var BaseCBWriter_1 = __webpack_require__(512); -/** - * Serializes XML nodes. - */ -var YAMLCBWriter = /** @class */ (function (_super) { - __extends(YAMLCBWriter, _super); /** - * Initializes a new instance of `BaseCBWriter`. - * - * @param builderOptions - XML builder options + * Returns the next token. */ - function YAMLCBWriter(builderOptions) { - var _this = _super.call(this, builderOptions) || this; - _this._rootWritten = false; - _this._additionalLevel = 0; - if (builderOptions.indent.length < 2) { - throw new Error("YAML indententation string must be at least two characters long."); + XMLStringLexer.prototype.nextToken = function () { + if (this.eof()) { + return { type: interfaces_1.TokenType.EOF }; } - if (builderOptions.offset < 0) { - throw new Error("YAML offset should be zero or a positive number."); + var token = (this.skipIfStartsWith('<') ? this.openBracket() : this.text()); + if (this._options.skipWhitespaceOnlyText) { + if (token.type === interfaces_1.TokenType.Text && + XMLStringLexer.isWhiteSpaceToken(token)) { + token = this.nextToken(); + } } - return _this; - } - /** @inheritdoc */ - YAMLCBWriter.prototype.frontMatter = function () { - return this._beginLine() + "---"; - }; - /** @inheritdoc */ - YAMLCBWriter.prototype.declaration = function (version, encoding, standalone) { - return ""; - }; - /** @inheritdoc */ - YAMLCBWriter.prototype.docType = function (name, publicId, systemId) { - return ""; - }; - /** @inheritdoc */ - YAMLCBWriter.prototype.comment = function (data) { - // "!": "hello" - return this._beginLine() + - this._key(this._builderOptions.convert.comment) + " " + - this._val(data); + return token; }; - /** @inheritdoc */ - YAMLCBWriter.prototype.text = function (data) { - // "#": "hello" - return this._beginLine() + - this._key(this._builderOptions.convert.text) + " " + - this._val(data); - }; - /** @inheritdoc */ - YAMLCBWriter.prototype.instruction = function (target, data) { - // "?": "target hello" - return this._beginLine() + - this._key(this._builderOptions.convert.ins) + " " + - this._val(data ? target + " " + data : target); - }; - /** @inheritdoc */ - YAMLCBWriter.prototype.cdata = function (data) { - // "$": "hello" - return this._beginLine() + - this._key(this._builderOptions.convert.cdata) + " " + - this._val(data); + /** + * Branches from an opening bracket (`<`). + */ + XMLStringLexer.prototype.openBracket = function () { + if (this.skipIfStartsWith('?')) { + if (this.skipIfStartsWith('xml')) { + if (XMLStringLexer.isSpace(this._str[this._index])) { + return this.declaration(); + } + else { + // a processing instruction starting with xml. e.g. + this.seek(-3); + return this.pi(); + } + } + else { + return this.pi(); + } + } + else if (this.skipIfStartsWith('!')) { + if (this.skipIfStartsWith('--')) { + return this.comment(); + } + else if (this.skipIfStartsWith('[CDATA[')) { + return this.cdata(); + } + else if (this.skipIfStartsWith('DOCTYPE')) { + return this.doctype(); + } + else { + this.throwError("Invalid '!' in opening tag."); + } + } + else if (this.skipIfStartsWith('/')) { + return this.closeTag(); + } + else { + return this.openTag(); + } }; - /** @inheritdoc */ - YAMLCBWriter.prototype.attribute = function (name, value) { - // "@name": "val" - this._additionalLevel++; - var str = this._beginLine() + - this._key(this._builderOptions.convert.att + name) + " " + - this._val(value); - this._additionalLevel--; - return str; + /** + * Produces an XML declaration token. + */ + XMLStringLexer.prototype.declaration = function () { + var version = ''; + var encoding = ''; + var standalone = ''; + while (!this.eof()) { + this.skipSpace(); + if (this.skipIfStartsWith('?>')) { + return { type: interfaces_1.TokenType.Declaration, version: version, encoding: encoding, standalone: standalone }; + } + else { + // attribute name + var _a = __read(this.attribute(), 2), attName = _a[0], attValue = _a[1]; + if (attName === 'version') + version = attValue; + else if (attName === 'encoding') + encoding = attValue; + else if (attName === 'standalone') + standalone = attValue; + else + this.throwError('Invalid attribute name: ' + attName); + } + } + this.throwError('Missing declaration end symbol `?>`'); }; - /** @inheritdoc */ - YAMLCBWriter.prototype.openTagBegin = function (name) { - // "node": - // "#": - // - - var str = this._beginLine() + this._key(name); - if (!this._rootWritten) { - this._rootWritten = true; + /** + * Produces a doc type token. + */ + XMLStringLexer.prototype.doctype = function () { + var pubId = ''; + var sysId = ''; + // name + this.skipSpace(); + var name = this.takeUntil2('[', '>', true); + this.skipSpace(); + if (this.skipIfStartsWith('PUBLIC')) { + pubId = this.quotedString(); + sysId = this.quotedString(); } - this.hasData = true; - this._additionalLevel++; - str += this._beginLine(true) + this._key(this._builderOptions.convert.text); - return str; + else if (this.skipIfStartsWith('SYSTEM')) { + sysId = this.quotedString(); + } + // skip internal subset + this.skipSpace(); + if (this.skipIfStartsWith('[')) { + // skip internal subset nodes + this.skipUntil(']'); + if (!this.skipIfStartsWith(']')) { + this.throwError('Missing end bracket of DTD internal subset'); + } + } + this.skipSpace(); + if (!this.skipIfStartsWith('>')) { + this.throwError('Missing doctype end symbol `>`'); + } + return { type: interfaces_1.TokenType.DocType, name: name, pubId: pubId, sysId: sysId }; }; - /** @inheritdoc */ - YAMLCBWriter.prototype.openTagEnd = function (name, selfClosing, voidElement) { - if (selfClosing) { - return " " + this._val(""); + /** + * Produces a processing instruction token. + */ + XMLStringLexer.prototype.pi = function () { + var target = this.takeUntilStartsWith('?>', true); + if (this.eof()) { + this.throwError('Missing processing instruction end symbol `?>`'); } - return ""; + this.skipSpace(); + if (this.skipIfStartsWith('?>')) { + return { type: interfaces_1.TokenType.PI, target: target, data: '' }; + } + var data = this.takeUntilStartsWith('?>'); + if (this.eof()) { + this.throwError('Missing processing instruction end symbol `?>`'); + } + this.seek(2); + return { type: interfaces_1.TokenType.PI, target: target, data: data }; }; - /** @inheritdoc */ - YAMLCBWriter.prototype.closeTag = function (name) { - this._additionalLevel--; - return ""; + /** + * Produces a text token. + * + */ + XMLStringLexer.prototype.text = function () { + var data = this.takeUntil('<'); + return { type: interfaces_1.TokenType.Text, data: data }; }; - /** @inheritdoc */ - YAMLCBWriter.prototype.beginElement = function (name) { }; - /** @inheritdoc */ - YAMLCBWriter.prototype.endElement = function (name) { }; /** - * Produces characters to be prepended to a line of string in pretty-print - * mode. + * Produces a comment token. + * */ - YAMLCBWriter.prototype._beginLine = function (suppressArray) { - if (suppressArray === void 0) { suppressArray = false; } - return (this.hasData ? this._writerOptions.newline : "") + - this._indent(this._writerOptions.offset + this.level, suppressArray); + XMLStringLexer.prototype.comment = function () { + var data = this.takeUntilStartsWith('-->'); + if (this.eof()) { + this.throwError('Missing comment end symbol `-->`'); + } + this.seek(3); + return { type: interfaces_1.TokenType.Comment, data: data }; }; /** - * Produces an indentation string. + * Produces a CDATA token. * - * @param level - depth of the tree - * @param suppressArray - whether the suppress array marker */ - YAMLCBWriter.prototype._indent = function (level, suppressArray) { - if (level + this._additionalLevel <= 0) { - return ""; + XMLStringLexer.prototype.cdata = function () { + var data = this.takeUntilStartsWith(']]>'); + if (this.eof()) { + this.throwError('Missing CDATA end symbol `]>`'); } - else { - var chars = this._writerOptions.indent.repeat(level + this._additionalLevel); - if (!suppressArray && this._rootWritten) { - return chars.substr(0, chars.length - 2) + '-' + chars.substr(-1, 1); + this.seek(3); + return { type: interfaces_1.TokenType.CDATA, data: data }; + }; + /** + * Produces an element token. + */ + XMLStringLexer.prototype.openTag = function () { + // element name + this.skipSpace(); + var name = this.takeUntil2('>', '/', true); + this.skipSpace(); + if (this.skipIfStartsWith('>')) { + return { type: interfaces_1.TokenType.Element, name: name, attributes: [], selfClosing: false }; + } + else if (this.skipIfStartsWith('/>')) { + return { type: interfaces_1.TokenType.Element, name: name, attributes: [], selfClosing: true }; + } + // attributes + var attributes = []; + while (!this.eof()) { + // end tag + this.skipSpace(); + if (this.skipIfStartsWith('>')) { + return { type: interfaces_1.TokenType.Element, name: name, attributes: attributes, selfClosing: false }; } - return chars; + else if (this.skipIfStartsWith('/>')) { + return { type: interfaces_1.TokenType.Element, name: name, attributes: attributes, selfClosing: true }; + } + var attr = this.attribute(); + attributes.push(attr); } + this.throwError('Missing opening element tag end symbol `>`'); }; /** - * Produces a YAML key string delimited with double quotes. + * Produces a closing tag token. + * */ - YAMLCBWriter.prototype._key = function (key) { - return "\"" + key + "\":"; + XMLStringLexer.prototype.closeTag = function () { + this.skipSpace(); + var name = this.takeUntil('>', true); + this.skipSpace(); + if (!this.skipIfStartsWith('>')) { + this.throwError('Missing closing element tag end symbol `>`'); + } + return { type: interfaces_1.TokenType.ClosingTag, name: name }; }; /** - * Produces a YAML value string delimited with double quotes. + * Reads an attribute name, value pair */ - YAMLCBWriter.prototype._val = function (val) { - return JSON.stringify(val); + XMLStringLexer.prototype.attribute = function () { + // attribute name + this.skipSpace(); + var name = this.takeUntil('=', true); + this.skipSpace(); + if (!this.skipIfStartsWith('=')) { + this.throwError('Missing equals sign before attribute value'); + } + // attribute value + var value = this.quotedString(); + return [name, value]; }; - return YAMLCBWriter; -}(BaseCBWriter_1.BaseCBWriter)); -exports.YAMLCBWriter = YAMLCBWriter; -//# sourceMappingURL=YAMLCBWriter.js.map - -/***/ }), -/* 498 */, -/* 499 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const SemVer = __webpack_require__(65) -const parse = __webpack_require__(830) -const {re, t} = __webpack_require__(976) - -const coerce = (version, options) => { - if (version instanceof SemVer) { - return version - } - - if (typeof version === 'number') { - version = String(version) - } - - if (typeof version !== 'string') { - return null - } - - options = options || {} - - let match = null - if (!options.rtl) { - match = version.match(re[t.COERCE]) - } else { - // Find the right-most coercible string that does not share - // a terminus with a more left-ward coercible string. - // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' - // - // Walk through the string checking with a /g regexp - // Manually set the index so as to pick up overlapping matches. - // Stop when we get a match that ends at the string end, since no - // coercible string can be more right-ward without the same terminus. - let next - while ((next = re[t.COERCERTL].exec(version)) && - (!match || match.index + match[0].length !== version.length) - ) { - if (!match || - next.index + next[0].length !== match.index + match[0].length) { - match = next - } - re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length - } - // leave it in a clean state - re[t.COERCERTL].lastIndex = -1 - } - - if (match === null) - return null - - return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options) -} -module.exports = coerce - - -/***/ }), -/* 500 */, -/* 501 */ -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Appends the given item to the queue. - * - * @param list - a list - * @param item - an item - */ -function enqueue(list, item) { - list.push(item); -} -exports.enqueue = enqueue; -/** - * Removes and returns an item from the queue. - * - * @param list - a list - */ -function dequeue(list) { - return list.shift() || null; -} -exports.dequeue = dequeue; -//# sourceMappingURL=Queue.js.map - -/***/ }), -/* 502 */, -/* 503 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const parse = __webpack_require__(830) -const clean = (version, options) => { - const s = parse(version.trim().replace(/^[=v]+/, ''), options) - return s ? s.version : null -} -module.exports = clean - - -/***/ }), -/* 504 */, -/* 505 */, -/* 506 */, -/* 507 */, -/* 508 */, -/* 509 */, -/* 510 */, -/* 511 */, -/* 512 */ -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Pre-serializes XML nodes. - */ -var BaseCBWriter = /** @class */ (function () { /** - * Initializes a new instance of `BaseCBWriter`. - * - * @param builderOptions - XML builder options + * Reads a string between double or single quotes. */ - function BaseCBWriter(builderOptions) { - /** - * Gets the current depth of the XML tree. - */ - this.level = 0; - this._builderOptions = builderOptions; - this._writerOptions = builderOptions; - } - return BaseCBWriter; -}()); -exports.BaseCBWriter = BaseCBWriter; -//# sourceMappingURL=BaseCBWriter.js.map - -/***/ }), -/* 513 */, -/* 514 */, -/* 515 */, -/* 516 */, -/* 517 */, -/* 518 */, -/* 519 */, -/* 520 */, -/* 521 */, -/* 522 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; + XMLStringLexer.prototype.quotedString = function () { + this.skipSpace(); + var startQuote = this.take(1); + if (!XMLStringLexer.isQuote(startQuote)) { + this.throwError('Missing start quote character before quoted value'); + } + var value = this.takeUntil(startQuote); + if (!this.skipIfStartsWith(startQuote)) { + this.throwError('Missing end quote character after quoted value'); } + return value; }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var util_1 = __webpack_require__(592); -/** - * Parses the given byte sequence representing a JSON string into an object. - * - * @param bytes - a byte sequence - */ -function parseJSONFromBytes(bytes) { /** - * 1. Let jsonText be the result of running UTF-8 decode on bytes. [ENCODING] - * 2. Return ? Call(%JSONParse%, undefined, « jsonText »). + * Determines if the current index is at or past the end of input string. */ - var jsonText = util_1.utf8Decode(bytes); - return JSON.parse.call(undefined, jsonText); -} -exports.parseJSONFromBytes = parseJSONFromBytes; -/** - * Serialize the given JavaScript value into a byte sequence. - * - * @param value - a JavaScript value - */ -function serializeJSONToBytes(value) { + XMLStringLexer.prototype.eof = function () { return this._index >= this._length; }; /** - * 1. Let jsonString be ? Call(%JSONStringify%, undefined, « value »). - * 2. Return the result of running UTF-8 encode on jsonString. [ENCODING] + * Skips the length of the given string if the string from current position + * starts with the given string. + * + * @param str - the string to match */ - var jsonString = JSON.stringify.call(undefined, value); - return util_1.utf8Encode(jsonString); -} -exports.serializeJSONToBytes = serializeJSONToBytes; -/** - * Parses the given JSON string into a Realm-independent JavaScript value. - * - * @param jsonText - a JSON string - */ -function parseJSONIntoInfraValues(jsonText) { + XMLStringLexer.prototype.skipIfStartsWith = function (str) { + var strLength = str.length; + if (strLength === 1) { + if (this._str[this._index] === str) { + this._index++; + return true; + } + else { + return false; + } + } + for (var i = 0; i < strLength; i++) { + if (this._str[this._index + i] !== str[i]) + return false; + } + this._index += strLength; + return true; + }; /** - * 1. Let jsValue be ? Call(%JSONParse%, undefined, « jsonText »). - * 2. Return the result of converting a JSON-derived JavaScript value to an - * Infra value, given jsValue. + * Seeks a number of character codes. + * + * @param count - number of characters to skip */ - var jsValue = JSON.parse.call(undefined, jsonText); - return convertAJSONDerivedJavaScriptValueToAnInfraValue(jsValue); -} -exports.parseJSONIntoInfraValues = parseJSONIntoInfraValues; -/** - * Parses the value into a Realm-independent JavaScript value. - * - * @param jsValue - a JavaScript value - */ -function convertAJSONDerivedJavaScriptValueToAnInfraValue(jsValue) { - var e_1, _a; + XMLStringLexer.prototype.seek = function (count) { + this._index += count; + if (this._index < 0) + this._index = 0; + if (this._index > this._length) + this._index = this._length; + }; /** - * 1. If Type(jsValue) is Null, String, or Number, then return jsValue. + * Skips space characters. */ - if (jsValue === null || util_1.isString(jsValue) || util_1.isNumber(jsValue)) - return jsValue; + XMLStringLexer.prototype.skipSpace = function () { + while (!this.eof() && (XMLStringLexer.isSpace(this._str[this._index]))) { + this._index++; + } + }; /** - * 2. If IsArray(jsValue) is true, then: - * 2.1. Let result be an empty list. - * 2.2. Let length be ! ToLength(! Get(jsValue, "length")). - * 2.3. For each index of the range 0 to length − 1, inclusive: - * 2.3.1. Let indexName be ! ToString(index). - * 2.3.2. Let jsValueAtIndex be ! Get(jsValue, indexName). - * 2.3.3. Let infraValueAtIndex be the result of converting a JSON-derived - * JavaScript value to an Infra value, given jsValueAtIndex. - * 2.3.4. Append infraValueAtIndex to result. - * 2.8. Return result. + * Takes a given number of characters. + * + * @param count - character count */ - if (util_1.isArray(jsValue)) { - var result = new Array(); - try { - for (var jsValue_1 = __values(jsValue), jsValue_1_1 = jsValue_1.next(); !jsValue_1_1.done; jsValue_1_1 = jsValue_1.next()) { - var jsValueAtIndex = jsValue_1_1.value; - result.push(convertAJSONDerivedJavaScriptValueToAnInfraValue(jsValueAtIndex)); - } + XMLStringLexer.prototype.take = function (count) { + if (count === 1) { + return this._str[this._index++]; } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (jsValue_1_1 && !jsValue_1_1.done && (_a = jsValue_1.return)) _a.call(jsValue_1); + var startIndex = this._index; + this.seek(count); + return this._str.slice(startIndex, this._index); + }; + /** + * Takes characters until the next character matches `char`. + * + * @param char - a character to match + * @param space - whether a space character stops iteration + */ + XMLStringLexer.prototype.takeUntil = function (char, space) { + if (space === void 0) { space = false; } + var startIndex = this._index; + while (this._index < this._length) { + var c = this._str[this._index]; + if (c !== char && (!space || !XMLStringLexer.isSpace(c))) { + this._index++; + } + else { + break; } - finally { if (e_1) throw e_1.error; } } - return result; - } - else if (util_1.isObject(jsValue)) { - /** - * 3. Let result be an empty ordered map. - * 4. For each key of ! jsValue.[[OwnPropertyKeys]](): - * 4.1. Let jsValueAtKey be ! Get(jsValue, key). - * 4.2. Let infraValueAtKey be the result of converting a JSON-derived - * JavaScript value to an Infra value, given jsValueAtKey. - * 4.3. Set result[key] to infraValueAtKey. - * 5. Return result. - */ - var result = new Map(); - for (var key in jsValue) { - /* istanbul ignore else */ - if (jsValue.hasOwnProperty(key)) { - var jsValueAtKey = jsValue[key]; - result.set(key, convertAJSONDerivedJavaScriptValueToAnInfraValue(jsValueAtKey)); + return this._str.slice(startIndex, this._index); + }; + /** + * Takes characters until the next character matches `char1` or `char1`. + * + * @param char1 - a character to match + * @param char2 - a character to match + * @param space - whether a space character stops iteration + */ + XMLStringLexer.prototype.takeUntil2 = function (char1, char2, space) { + if (space === void 0) { space = false; } + var startIndex = this._index; + while (this._index < this._length) { + var c = this._str[this._index]; + if (c !== char1 && c !== char2 && (!space || !XMLStringLexer.isSpace(c))) { + this._index++; + } + else { + break; } } - return result; - } - /* istanbul ignore next */ - return jsValue; -} -exports.convertAJSONDerivedJavaScriptValueToAnInfraValue = convertAJSONDerivedJavaScriptValueToAnInfraValue; -//# sourceMappingURL=JSON.js.map - -/***/ }), -/* 523 */, -/* 524 */ -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Represents a cache for storing order between equal objects. - * - * This cache is used when an algorithm compares two objects and finds them to - * be equal but still needs to establish an order between those two objects. - * When two such objects `a` and `b` are passed to the `check` method, a random - * number is generated with `Math.random()`. If the random number is less than - * `0.5` it is assumed that `a < b` otherwise `a > b`. The random number along - * with `a` and `b` is stored in the cache, so that subsequent checks result - * in the same consistent result. - * - * The cache has a size limit which is defined on initialization. - */ -var CompareCache = /** @class */ (function () { + return this._str.slice(startIndex, this._index); + }; /** - * Initializes a new instance of `CompareCache`. + * Takes characters until the next characters matches `str`. * - * @param limit - maximum number of items to keep in the cache. When the limit - * is exceeded the first item is removed from the cache. + * @param str - a string to match + * @param space - whether a space character stops iteration */ - function CompareCache(limit) { - if (limit === void 0) { limit = 1000; } - this._items = new Map(); - this._limit = limit; - } + XMLStringLexer.prototype.takeUntilStartsWith = function (str, space) { + if (space === void 0) { space = false; } + var startIndex = this._index; + var strLength = str.length; + while (this._index < this._length) { + var match = true; + for (var i = 0; i < strLength; i++) { + var c = this._str[this._index + i]; + var char = str[i]; + if (space && XMLStringLexer.isSpace(c)) { + return this._str.slice(startIndex, this._index); + } + else if (c !== char) { + this._index++; + match = false; + break; + } + } + if (match) + return this._str.slice(startIndex, this._index); + } + this._index = this._length; + return this._str.slice(startIndex); + }; /** - * Compares and caches the given objects. Returns `true` if `objA < objB` and - * `false` otherwise. + * Skips characters until the next character matches `char`. * - * @param objA - an item to compare - * @param objB - an item to compare + * @param char - a character to match */ - CompareCache.prototype.check = function (objA, objB) { - if (this._items.get(objA) === objB) - return true; - else if (this._items.get(objB) === objA) - return false; - var result = (Math.random() < 0.5); - if (result) { - this._items.set(objA, objB); + XMLStringLexer.prototype.skipUntil = function (char) { + while (this._index < this._length) { + var c = this._str[this._index]; + if (c !== char) { + this._index++; + } + else { + break; + } } - else { - this._items.set(objB, objA); + }; + /** + * Determines if the given token is entirely whitespace. + * + * @param token - the token to check + */ + XMLStringLexer.isWhiteSpaceToken = function (token) { + var str = token.data; + for (var i = 0; i < str.length; i++) { + var c = str[i]; + if (c !== ' ' && c !== '\n' && c !== '\r' && c !== '\t' && c !== '\f') + return false; } - if (this._items.size > this._limit) { - var it_1 = this._items.keys().next(); - /* istanbul ignore else */ - if (!it_1.done) { - this._items.delete(it_1.value); + return true; + }; + /** + * Determines if the given character is whitespace. + * + * @param char - the character to check + */ + XMLStringLexer.isSpace = function (char) { + return char === ' ' || char === '\n' || char === '\r' || char === '\t'; + }; + /** + * Determines if the given character is a quote character. + * + * @param char - the character to check + */ + XMLStringLexer.isQuote = function (char) { + return (char === '"' || char === '\''); + }; + /** + * Throws a parser error and records the line and column numbers in the parsed + * string. + * + * @param msg - error message + */ + XMLStringLexer.prototype.throwError = function (msg) { + var regexp = /\r\n|\r|\n/g; + var match = null; + var line = 0; + var firstNewLineIndex = 0; + var lastNewlineIndex = this._str.length; + while ((match = regexp.exec(this._str)) !== null) { + if (match === null) + break; + line++; + if (match.index < this._index) + firstNewLineIndex = regexp.lastIndex; + if (match.index > this._index) { + lastNewlineIndex = match.index; + break; } } - return result; + this.err = { + line: line, + col: this._index - firstNewLineIndex, + index: this._index, + str: this._str.substring(firstNewLineIndex, lastNewlineIndex) + }; + throw new Error(msg + "\nIndex: " + this.err.index + + "\nLn: " + this.err.line + ", Col: " + this.err.col + + "\nInput: " + this.err.str); }; - return CompareCache; + /** + * Returns an iterator for the lexer. + */ + XMLStringLexer.prototype[Symbol.iterator] = function () { + this._index = 0; + return { + next: function () { + var token = this.nextToken(); + if (token.type === interfaces_1.TokenType.EOF) { + return { done: true, value: null }; + } + else { + return { done: false, value: token }; + } + }.bind(this) + }; + }; + return XMLStringLexer; }()); -exports.CompareCache = CompareCache; -//# sourceMappingURL=CompareCache.js.map +exports.XMLStringLexer = XMLStringLexer; +//# sourceMappingURL=XMLStringLexer.js.map /***/ }), -/* 525 */, -/* 526 */, -/* 527 */, -/* 528 */, -/* 529 */, -/* 530 */, -/* 531 */ -/***/ (function(module, __unusedexports, __webpack_require__) { -// Determine if version is greater than all the versions possible in the range. -const outside = __webpack_require__(881) -const gtr = (version, range, options) => outside(version, range, '>', options) -module.exports = gtr +/***/ 6216: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +// Export classes +var DOMParserImpl_1 = __nccwpck_require__(8845); +exports.DOMParser = DOMParserImpl_1.DOMParserImpl; +//# sourceMappingURL=index.js.map /***/ }), -/* 532 */, -/* 533 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 7707: +/***/ ((__unused_webpack_module, exports) => { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Guard_1 = __webpack_require__(783); +Object.defineProperty(exports, "__esModule", ({ value: true })); /** - * Contains type casts for DOM objects. + * Defines the type of a token. */ -var Cast = /** @class */ (function () { - function Cast() { +var TokenType; +(function (TokenType) { + TokenType[TokenType["EOF"] = 0] = "EOF"; + TokenType[TokenType["Declaration"] = 1] = "Declaration"; + TokenType[TokenType["DocType"] = 2] = "DocType"; + TokenType[TokenType["Element"] = 3] = "Element"; + TokenType[TokenType["Text"] = 4] = "Text"; + TokenType[TokenType["CDATA"] = 5] = "CDATA"; + TokenType[TokenType["PI"] = 6] = "PI"; + TokenType[TokenType["Comment"] = 7] = "Comment"; + TokenType[TokenType["ClosingTag"] = 8] = "ClosingTag"; +})(TokenType = exports.TokenType || (exports.TokenType = {})); +//# sourceMappingURL=interfaces.js.map + +/***/ }), + +/***/ 9049: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Represents a set of unique attribute namespaceURI and localName pairs. + * This set will contain tuples of unique attribute namespaceURI and + * localName pairs, and is populated as each attr is processed. This set is + * used to [optionally] enforce the well-formed constraint that an element + * cannot have two attributes with the same namespaceURI and localName. + * This can occur when two otherwise identical attributes on the same + * element differ only by their prefix values. + */ +var LocalNameSet = /** @class */ (function () { + function LocalNameSet() { + // tuple storage + this._items = {}; + this._nullItems = {}; } /** - * Casts the given object to a `Node`. + * Adds or replaces a tuple. * - * @param a - the object to cast + * @param ns - namespace URI + * @param localName - attribute local name */ - Cast.asNode = function (a) { - if (Guard_1.Guard.isNode(a)) { - return a; + LocalNameSet.prototype.set = function (ns, localName) { + if (ns === null) { + this._nullItems[localName] = true; + } + else if (this._items[ns]) { + this._items[ns][localName] = true; } else { - throw new Error("Invalid object. Node expected."); + this._items[ns] = {}; + this._items[ns][localName] = true; } }; - return Cast; + /** + * Determines if the given tuple exists in the set. + * + * @param ns - namespace URI + * @param localName - attribute local name + */ + LocalNameSet.prototype.has = function (ns, localName) { + if (ns === null) { + return this._nullItems[localName] === true; + } + else if (this._items[ns]) { + return this._items[ns][localName] === true; + } + else { + return false; + } + }; + return LocalNameSet; }()); -exports.Cast = Cast; -//# sourceMappingURL=Cast.js.map +exports.LocalNameSet = LocalNameSet; +//# sourceMappingURL=LocalNameSet.js.map /***/ }), -/* 534 */, -/* 535 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var XMLBuilderImpl_1 = __webpack_require__(595); -exports.XMLBuilderImpl = XMLBuilderImpl_1.XMLBuilderImpl; -var XMLBuilderCBImpl_1 = __webpack_require__(551); -exports.XMLBuilderCBImpl = XMLBuilderCBImpl_1.XMLBuilderCBImpl; -var BuilderFunctions_1 = __webpack_require__(961); -exports.builder = BuilderFunctions_1.builder; -exports.create = BuilderFunctions_1.create; -exports.fragment = BuilderFunctions_1.fragment; -exports.convert = BuilderFunctions_1.convert; -var BuilderFunctionsCB_1 = __webpack_require__(295); -exports.createCB = BuilderFunctionsCB_1.createCB; -exports.fragmentCB = BuilderFunctionsCB_1.fragmentCB; -//# sourceMappingURL=index.js.map -/***/ }), -/* 536 */ -/***/ (function(module, __unusedexports, __webpack_require__) { +/***/ 283: +/***/ ((__unused_webpack_module, exports) => { -const ANY = Symbol('SemVer ANY') -// hoisted class for cyclic dependency -class Comparator { - static get ANY () { - return ANY - } - constructor (comp, options) { - options = parseOptions(options) +"use strict"; - if (comp instanceof Comparator) { - if (comp.loose === !!options.loose) { - return comp - } else { - comp = comp.value - } +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * A namespace prefix map is a map that associates namespaceURI and namespace + * prefix lists, where namespaceURI values are the map's unique keys (which can + * include the null value representing no namespace), and ordered lists of + * associated prefix values are the map's key values. The namespace prefix map + * will be populated by previously seen namespaceURIs and all their previously + * encountered prefix associations for a given node and its ancestors. + * + * _Note:_ The last seen prefix for a given namespaceURI is at the end of its + * respective list. The list is searched to find potentially matching prefixes, + * and if no matches are found for the given namespaceURI, then the last prefix + * in the list is used. See copy a namespace prefix map and retrieve a preferred + * prefix string for additional details. + * + * See: https://w3c.github.io/DOM-Parsing/#the-namespace-prefix-map + */ +var NamespacePrefixMap = /** @class */ (function () { + function NamespacePrefixMap() { + this._items = {}; + this._nullItems = []; } + /** + * Creates a copy of the map. + */ + NamespacePrefixMap.prototype.copy = function () { + /** + * To copy a namespace prefix map map means to copy the map's keys into a + * new empty namespace prefix map, and to copy each of the values in the + * namespace prefix list associated with each keys' value into a new list + * which should be associated with the respective key in the new map. + */ + var mapCopy = new NamespacePrefixMap(); + for (var key in this._items) { + mapCopy._items[key] = this._items[key].slice(0); + } + mapCopy._nullItems = this._nullItems.slice(0); + return mapCopy; + }; + /** + * Retrieves a preferred prefix string from the namespace prefix map. + * + * @param preferredPrefix - preferred prefix string + * @param ns - namespace + */ + NamespacePrefixMap.prototype.get = function (preferredPrefix, ns) { + /** + * 1. Let candidates list be the result of retrieving a list from map where + * there exists a key in map that matches the value of ns or if there is no + * such key, then stop running these steps, and return the null value. + */ + var candidatesList = ns === null ? this._nullItems : (this._items[ns] || null); + if (candidatesList === null) { + return null; + } + /** + * 2. Otherwise, for each prefix value prefix in candidates list, iterating + * from beginning to end: + * + * _Note:_ There will always be at least one prefix value in the list. + */ + var prefix = null; + for (var i = 0; i < candidatesList.length; i++) { + prefix = candidatesList[i]; + /** + * 2.1. If prefix matches preferred prefix, then stop running these steps + * and return prefix. + */ + if (prefix === preferredPrefix) { + return prefix; + } + } + /** + * 2.2. If prefix is the last item in the candidates list, then stop + * running these steps and return prefix. + */ + return prefix; + }; + /** + * Checks if a prefix string is found in the namespace prefix map associated + * with the given namespace. + * + * @param prefix - prefix string + * @param ns - namespace + */ + NamespacePrefixMap.prototype.has = function (prefix, ns) { + /** + * 1. Let candidates list be the result of retrieving a list from map where + * there exists a key in map that matches the value of ns or if there is + * no such key, then stop running these steps, and return false. + */ + var candidatesList = ns === null ? this._nullItems : (this._items[ns] || null); + if (candidatesList === null) { + return false; + } + /** + * 2. If the value of prefix occurs at least once in candidates list, + * return true, otherwise return false. + */ + return (candidatesList.indexOf(prefix) !== -1); + }; + /** + * Checks if a prefix string is found in the namespace prefix map. + * + * @param prefix - prefix string + */ + NamespacePrefixMap.prototype.hasPrefix = function (prefix) { + if (this._nullItems.indexOf(prefix) !== -1) + return true; + for (var key in this._items) { + if (this._items[key].indexOf(prefix) !== -1) + return true; + } + return false; + }; + /** + * Adds a prefix string associated with a namespace to the prefix map. + * + * @param prefix - prefix string + * @param ns - namespace + */ + NamespacePrefixMap.prototype.set = function (prefix, ns) { + /** + * 1. Let candidates list be the result of retrieving a list from map where + * there exists a key in map that matches the value of ns or if there is + * no such key, then let candidates list be null. + */ + var candidatesList = ns === null ? this._nullItems : (this._items[ns] || null); + /** + * 2. If candidates list is null, then create a new list with prefix as the + * only item in the list, and associate that list with a new key ns in map. + * 3. Otherwise, append prefix to the end of candidates list. + * + * _Note:_ The steps in retrieve a preferred prefix string use the list to + * track the most recently used (MRU) prefix associated with a given + * namespace, which will be the prefix at the end of the list. This list + * may contain duplicates of the same prefix value seen earlier + * (and that's OK). + */ + if (ns !== null && candidatesList === null) { + this._items[ns] = [prefix]; + } + else { + candidatesList.push(prefix); + } + }; + return NamespacePrefixMap; +}()); +exports.NamespacePrefixMap = NamespacePrefixMap; +//# sourceMappingURL=NamespacePrefixMap.js.map - debug('comparator', comp, options) - this.options = options - this.loose = !!options.loose - this.parse(comp) +/***/ }), - if (this.semver === ANY) { - this.value = '' - } else { - this.value = this.operator + this.semver.version - } +/***/ 5039: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - debug('comp', this) - } +"use strict"; - parse (comp) { - const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] - const m = comp.match(r) - - if (!m) { - throw new TypeError(`Invalid comparator: ${comp}`) - } - - this.operator = m[1] !== undefined ? m[1] : '' - if (this.operator === '=') { - this.operator = '' - } - - // if it literally is just '>' or '' then allow anything. - if (!m[2]) { - this.semver = ANY - } else { - this.semver = new SemVer(m[2], this.options.loose) - } - } - - toString () { - return this.value - } - - test (version) { - debug('Comparator.test', version, this.options.loose) - - if (this.semver === ANY || version === ANY) { - return true - } - - if (typeof version === 'string') { - try { - version = new SemVer(version, this.options) - } catch (er) { - return false - } - } - - return cmp(version, this.operator, this.semver, this.options) - } - - intersects (comp, options) { - if (!(comp instanceof Comparator)) { - throw new TypeError('a Comparator is required') - } - - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } - - if (this.operator === '') { - if (this.value === '') { - return true - } - return new Range(comp.value, options).test(this.value) - } else if (comp.operator === '') { - if (comp.value === '') { - return true - } - return new Range(this.value, options).test(comp.semver) - } - - const sameDirectionIncreasing = - (this.operator === '>=' || this.operator === '>') && - (comp.operator === '>=' || comp.operator === '>') - const sameDirectionDecreasing = - (this.operator === '<=' || this.operator === '<') && - (comp.operator === '<=' || comp.operator === '<') - const sameSemVer = this.semver.version === comp.semver.version - const differentDirectionsInclusive = - (this.operator === '>=' || this.operator === '<=') && - (comp.operator === '>=' || comp.operator === '<=') - const oppositeDirectionsLessThan = - cmp(this.semver, '<', comp.semver, options) && - (this.operator === '>=' || this.operator === '>') && - (comp.operator === '<=' || comp.operator === '<') - const oppositeDirectionsGreaterThan = - cmp(this.semver, '>', comp.semver, options) && - (this.operator === '<=' || this.operator === '<') && - (comp.operator === '>=' || comp.operator === '>') - - return ( - sameDirectionIncreasing || - sameDirectionDecreasing || - (sameSemVer && differentDirectionsInclusive) || - oppositeDirectionsLessThan || - oppositeDirectionsGreaterThan - ) - } -} - -module.exports = Comparator - -const parseOptions = __webpack_require__(143) -const {re, t} = __webpack_require__(976) -const cmp = __webpack_require__(752) -const debug = __webpack_require__(548) -const SemVer = __webpack_require__(65) -const Range = __webpack_require__(124) - - -/***/ }), -/* 537 */, -/* 538 */, -/* 539 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -const http = __webpack_require__(605); -const https = __webpack_require__(34); -const pm = __webpack_require__(950); -let tunnel; -var HttpCodes; -(function (HttpCodes) { - HttpCodes[HttpCodes["OK"] = 200] = "OK"; - HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; - HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; - HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; - HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; - HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; - HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; - HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; - HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; - HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; - HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; - HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; - HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; - HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; - HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; - HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; - HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; - HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; - HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; - HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; - HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; - HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; - HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; - HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; - HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; - HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; - HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; -})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); -var Headers; -(function (Headers) { - Headers["Accept"] = "accept"; - Headers["ContentType"] = "content-type"; -})(Headers = exports.Headers || (exports.Headers = {})); -var MediaTypes; -(function (MediaTypes) { - MediaTypes["ApplicationJson"] = "application/json"; -})(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {})); +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7305); +var LocalNameSet_1 = __nccwpck_require__(9049); +var NamespacePrefixMap_1 = __nccwpck_require__(283); +var DOMException_1 = __nccwpck_require__(3166); +var infra_1 = __nccwpck_require__(4251); +var algorithm_1 = __nccwpck_require__(61); /** - * 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 + * Represents an XML serializer. + * + * Implements: https://www.w3.org/TR/DOM-Parsing/#serializing */ -function getProxyUrl(serverUrl) { - let 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 new Promise(async (resolve, reject) => { - let output = Buffer.alloc(0); - this.message.on('data', (chunk) => { - output = Buffer.concat([output, chunk]); - }); - this.message.on('end', () => { - resolve(output.toString()); - }); - }); - } -} -exports.HttpClientResponse = HttpClientResponse; -function isHttps(requestUrl) { - let parsedUrl = 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 this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); - } - get(requestUrl, additionalHeaders) { - return this.request('GET', requestUrl, null, additionalHeaders || {}); - } - del(requestUrl, additionalHeaders) { - return this.request('DELETE', requestUrl, null, additionalHeaders || {}); - } - post(requestUrl, data, additionalHeaders) { - return this.request('POST', requestUrl, data, additionalHeaders || {}); - } - patch(requestUrl, data, additionalHeaders) { - return this.request('PATCH', requestUrl, data, additionalHeaders || {}); - } - put(requestUrl, data, additionalHeaders) { - return this.request('PUT', requestUrl, data, additionalHeaders || {}); - } - head(requestUrl, additionalHeaders) { - return this.request('HEAD', requestUrl, null, additionalHeaders || {}); - } - sendStream(verb, requestUrl, stream, additionalHeaders) { - return this.request(verb, requestUrl, stream, additionalHeaders); - } - /** - * Gets a typed object from an endpoint - * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise - */ - async getJson(requestUrl, additionalHeaders = {}) { - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - let res = await this.get(requestUrl, additionalHeaders); - return this._processResponse(res, this.requestOptions); - } - async postJson(requestUrl, obj, additionalHeaders = {}) { - let data = JSON.stringify(obj, null, 2); - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); - let res = await this.post(requestUrl, data, additionalHeaders); - return this._processResponse(res, this.requestOptions); - } - async putJson(requestUrl, obj, additionalHeaders = {}) { - let data = JSON.stringify(obj, null, 2); - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); - let res = await this.put(requestUrl, data, additionalHeaders); - return this._processResponse(res, this.requestOptions); - } - async patchJson(requestUrl, obj, additionalHeaders = {}) { - let data = JSON.stringify(obj, null, 2); - additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); - additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); - let res = await this.patch(requestUrl, data, additionalHeaders); - return this._processResponse(res, this.requestOptions); +var XMLSerializerImpl = /** @class */ (function () { + function XMLSerializerImpl() { } + /** @inheritdoc */ + XMLSerializerImpl.prototype.serializeToString = function (root) { + /** + * The serializeToString(root) method must produce an XML serialization + * of root passing a value of false for the require well-formed parameter, + * and return the result. + */ + return this._xmlSerialization(root, false); + }; /** - * Makes a raw http request. - * All other methods such as get, post, patch, and request ultimately call this. - * Prefer get, del, post and patch + * Produces an XML serialization of the given node. + * + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance */ - async request(verb, requestUrl, data, headers) { - if (this._disposed) { - throw new Error('Client has already been disposed.'); - } - let parsedUrl = new URL(requestUrl); - let info = this._prepareRequest(verb, parsedUrl, headers); - // Only perform retries on reads since writes may not be idempotent. - let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1 - ? this._maxRetries + 1 - : 1; - let numTries = 0; - let response; - while (numTries < maxTries) { - response = await this.requestRaw(info, data); - // Check if it's an authentication challenge - if (response && - response.message && - response.message.statusCode === HttpCodes.Unauthorized) { - let authenticationHandler; - for (let i = 0; i < this.handlers.length; i++) { - if (this.handlers[i].canHandleAuthentication(response)) { - authenticationHandler = this.handlers[i]; - break; - } - } - if (authenticationHandler) { - return authenticationHandler.handleAuthentication(this, info, data); - } - else { - // We have received an unauthorized response but have no handlers to handle it. - // Let the response return to the caller. - return response; - } + XMLSerializerImpl.prototype._xmlSerialization = function (node, requireWellFormed) { + // To increase performance, use a namespace-aware serializer only if the + // document has namespaced elements + if (node._nodeDocument === undefined || node._nodeDocument._hasNamespaces) { + /** From: https://w3c.github.io/DOM-Parsing/#xml-serialization + * + * 1. Let namespace be a context namespace with value null. + * The context namespace tracks the XML serialization algorithm's current + * default namespace. The context namespace is changed when either an Element + * Node has a default namespace declaration, or the algorithm generates a + * default namespace declaration for the Element Node to match its own + * namespace. The algorithm assumes no namespace (null) to start. + * 2. Let prefix map be a new namespace prefix map. + * 3. Add the XML namespace with prefix value "xml" to prefix map. + * 4. Let prefix index be a generated namespace prefix index with value 1. + * The generated namespace prefix index is used to generate a new unique + * prefix value when no suitable existing namespace prefix is available to + * serialize a node's namespaceURI (or the namespaceURI of one of node's + * attributes). See the generate a prefix algorithm. + */ + var namespace = null; + var prefixMap = new NamespacePrefixMap_1.NamespacePrefixMap(); + prefixMap.set("xml", infra_1.namespace.XML); + var prefixIndex = { value: 1 }; + /** + * 5. Return the result of running the XML serialization algorithm on node + * passing the context namespace namespace, namespace prefix map prefix map, + * generated namespace prefix index reference to prefix index, and the + * flag require well-formed. If an exception occurs during the execution + * of the algorithm, then catch that exception and throw an + * "InvalidStateError" DOMException. + */ + try { + return this._serializeNodeNS(node, namespace, prefixMap, prefixIndex, requireWellFormed); } - let redirectsRemaining = this._maxRedirects; - while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 && - this._allowRedirects && - redirectsRemaining > 0) { - const redirectUrl = response.message.headers['location']; - if (!redirectUrl) { - // if there's no location to redirect to, we won't - break; - } - let parsedRedirectUrl = new URL(redirectUrl); - if (parsedUrl.protocol == 'https:' && - parsedUrl.protocol != parsedRedirectUrl.protocol && - !this._allowRedirectDowngrade) { - throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.'); - } - // we need to finish reading the response before reassigning response - // which will leak the open socket. - await response.readBody(); - // strip authorization header if redirected to a different hostname - if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { - for (let header in headers) { - // header names are case insensitive - if (header.toLowerCase() === 'authorization') { - delete headers[header]; - } - } - } - // let's make the request with the new redirectUrl - info = this._prepareRequest(verb, parsedRedirectUrl, headers); - response = await this.requestRaw(info, data); - redirectsRemaining--; + catch (_a) { + throw new DOMException_1.InvalidStateError(); } - if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) { - // If not a retry code, return immediately instead of retrying - return response; + } + else { + try { + return this._serializeNode(node, requireWellFormed); } - numTries += 1; - if (numTries < maxTries) { - await response.readBody(); - await this._performExponentialBackoff(numTries); + catch (_b) { + throw new DOMException_1.InvalidStateError(); } } - return response; - } + }; /** - * Needs to be called if keepAlive is set to true in request options. + * Produces an XML serialization of a node. + * + * @param node - node to serialize + * @param namespace - context namespace + * @param prefixMap - namespace prefix map + * @param prefixIndex - generated namespace prefix index + * @param requireWellFormed - whether to check conformance */ - dispose() { - if (this._agent) { - this._agent.destroy(); + XMLSerializerImpl.prototype._serializeNodeNS = function (node, namespace, prefixMap, prefixIndex, requireWellFormed) { + switch (node.nodeType) { + case interfaces_1.NodeType.Element: + return this._serializeElementNS(node, namespace, prefixMap, prefixIndex, requireWellFormed); + case interfaces_1.NodeType.Document: + return this._serializeDocumentNS(node, namespace, prefixMap, prefixIndex, requireWellFormed); + case interfaces_1.NodeType.Comment: + return this._serializeComment(node, requireWellFormed); + case interfaces_1.NodeType.Text: + return this._serializeText(node, requireWellFormed); + case interfaces_1.NodeType.DocumentFragment: + return this._serializeDocumentFragmentNS(node, namespace, prefixMap, prefixIndex, requireWellFormed); + case interfaces_1.NodeType.DocumentType: + return this._serializeDocumentType(node, requireWellFormed); + case interfaces_1.NodeType.ProcessingInstruction: + return this._serializeProcessingInstruction(node, requireWellFormed); + case interfaces_1.NodeType.CData: + return this._serializeCData(node, requireWellFormed); + default: + throw new Error("Unknown node type: " + node.nodeType); } - this._disposed = true; - } + }; /** - * Raw request. - * @param info - * @param data + * Produces an XML serialization of a node. + * + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance */ - requestRaw(info, data) { - return new Promise((resolve, reject) => { - let callbackForResult = function (err, res) { - if (err) { - reject(err); - } - resolve(res); - }; - this.requestRawWithCallback(info, data, callbackForResult); - }); - } + XMLSerializerImpl.prototype._serializeNode = function (node, requireWellFormed) { + switch (node.nodeType) { + case interfaces_1.NodeType.Element: + return this._serializeElement(node, requireWellFormed); + case interfaces_1.NodeType.Document: + return this._serializeDocument(node, requireWellFormed); + case interfaces_1.NodeType.Comment: + return this._serializeComment(node, requireWellFormed); + case interfaces_1.NodeType.Text: + return this._serializeText(node, requireWellFormed); + case interfaces_1.NodeType.DocumentFragment: + return this._serializeDocumentFragment(node, requireWellFormed); + case interfaces_1.NodeType.DocumentType: + return this._serializeDocumentType(node, requireWellFormed); + case interfaces_1.NodeType.ProcessingInstruction: + return this._serializeProcessingInstruction(node, requireWellFormed); + case interfaces_1.NodeType.CData: + return this._serializeCData(node, requireWellFormed); + default: + throw new Error("Unknown node type: " + node.nodeType); + } + }; /** - * Raw request with callback. - * @param info - * @param data - * @param onResult + * Produces an XML serialization of an element node. + * + * @param node - node to serialize + * @param namespace - context namespace + * @param prefixMap - namespace prefix map + * @param prefixIndex - generated namespace prefix index + * @param requireWellFormed - whether to check conformance */ - requestRawWithCallback(info, data, onResult) { - let socket; - if (typeof data === 'string') { - info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); + XMLSerializerImpl.prototype._serializeElementNS = function (node, namespace, prefixMap, prefixIndex, requireWellFormed) { + var e_1, _a; + /** + * From: https://w3c.github.io/DOM-Parsing/#xml-serializing-an-element-node + * + * 1. If the require well-formed flag is set (its value is true), and this + * node's localName attribute contains the character ":" (U+003A COLON) or + * does not match the XML Name production, then throw an exception; the + * serialization of this node would not be a well-formed element. + */ + if (requireWellFormed && (node.localName.indexOf(":") !== -1 || + !algorithm_1.xml_isName(node.localName))) { + throw new Error("Node local name contains invalid characters (well-formed required)."); } - let callbackCalled = false; - let handleResult = (err, res) => { - if (!callbackCalled) { - callbackCalled = true; - onResult(err, res); + /** + * 2. Let markup be the string "<" (U+003C LESS-THAN SIGN). + * 3. Let qualified name be an empty string. + * 4. Let skip end tag be a boolean flag with value false. + * 5. Let ignore namespace definition attribute be a boolean flag with value + * false. + * 6. Given prefix map, copy a namespace prefix map and let map be the + * result. + * 7. Let local prefixes map be an empty map. The map has unique Node prefix + * strings as its keys, with corresponding namespaceURI Node values as the + * map's key values (in this map, the null namespace is represented by the + * empty string). + * + * _Note:_ This map is local to each element. It is used to ensure there + * are no conflicting prefixes should a new namespace prefix attribute need + * to be generated. It is also used to enable skipping of duplicate prefix + * definitions when writing an element's attributes: the map allows the + * algorithm to distinguish between a prefix in the namespace prefix map + * that might be locally-defined (to the current Element) and one that is + * not. + * 8. Let local default namespace be the result of recording the namespace + * information for node given map and local prefixes map. + * + * _Note:_ The above step will update map with any found namespace prefix + * definitions, add the found prefix definitions to the local prefixes map + * and return a local default namespace value defined by a default namespace + * attribute if one exists. Otherwise it returns null. + * 9. Let inherited ns be a copy of namespace. + * 10. Let ns be the value of node's namespaceURI attribute. + */ + var markup = "<"; + var qualifiedName = ''; + var skipEndTag = false; + var ignoreNamespaceDefinitionAttribute = false; + var map = prefixMap.copy(); + var localPrefixesMap = {}; + var localDefaultNamespace = this._recordNamespaceInformation(node, map, localPrefixesMap); + var inheritedNS = namespace; + var ns = node.namespaceURI; + /** 11. If inherited ns is equal to ns, then: */ + if (inheritedNS === ns) { + /** + * 11.1. If local default namespace is not null, then set ignore + * namespace definition attribute to true. + */ + if (localDefaultNamespace !== null) { + ignoreNamespaceDefinitionAttribute = true; } - }; - let req = info.httpModule.request(info.options, (msg) => { - let res = new HttpClientResponse(msg); - handleResult(null, res); - }); - req.on('socket', sock => { - socket = sock; - }); - // If we ever get disconnected, we want the socket to timeout eventually - req.setTimeout(this._socketTimeout || 3 * 60000, () => { - if (socket) { - socket.end(); + /** + * 11.2. If ns is the XML namespace, then append to qualified name the + * concatenation of the string "xml:" and the value of node's localName. + * 11.3. Otherwise, append to qualified name the value of node's + * localName. The node's prefix if it exists, is dropped. + */ + if (ns === infra_1.namespace.XML) { + qualifiedName = 'xml:' + node.localName; } - handleResult(new Error('Request timeout: ' + info.options.path), null); - }); - req.on('error', function (err) { - // err has statusCode property - // res should have headers - handleResult(err, null); - }); - if (data && typeof data === 'string') { - req.write(data, 'utf8'); - } - if (data && typeof data !== 'string') { - data.on('close', function () { - req.end(); - }); - data.pipe(req); + else { + qualifiedName = node.localName; + } + /** 11.4. Append the value of qualified name to markup. */ + markup += qualifiedName; } else { - req.end(); - } - } - /** - * Gets an http agent. This function is useful when you need an http agent that handles - * routing through a proxy server - depending upon the url and proxy environment variables. - * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com - */ - getAgent(serverUrl) { - let parsedUrl = new URL(serverUrl); - return this._getAgent(parsedUrl); - } - _prepareRequest(method, requestUrl, headers) { - const info = {}; - info.parsedUrl = requestUrl; - const usingSsl = info.parsedUrl.protocol === 'https:'; - info.httpModule = usingSsl ? https : http; - const defaultPort = usingSsl ? 443 : 80; - info.options = {}; - info.options.host = info.parsedUrl.hostname; - info.options.port = info.parsedUrl.port - ? parseInt(info.parsedUrl.port) - : defaultPort; - info.options.path = - (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); - info.options.method = method; - info.options.headers = this._mergeHeaders(headers); - if (this.userAgent != null) { - info.options.headers['user-agent'] = this.userAgent; - } - info.options.agent = this._getAgent(info.parsedUrl); - // gives handlers an opportunity to participate - if (this.handlers) { - this.handlers.forEach(handler => { - handler.prepareRequest(info.options); - }); - } - return info; - } - _mergeHeaders(headers) { - const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); - if (this.requestOptions && this.requestOptions.headers) { - return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers)); - } - return lowercaseKeys(headers || {}); - } - _getExistingOrDefaultHeader(additionalHeaders, header, _default) { - const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); - let clientHeader; - if (this.requestOptions && this.requestOptions.headers) { - clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; - } - return additionalHeaders[header] || clientHeader || _default; - } - _getAgent(parsedUrl) { - let agent; - let proxyUrl = pm.getProxyUrl(parsedUrl); - let useProxy = proxyUrl && proxyUrl.hostname; - if (this._keepAlive && useProxy) { - agent = this._proxyAgent; - } - if (this._keepAlive && !useProxy) { - agent = this._agent; - } - // if agent is already assigned use that agent. - if (!!agent) { - return agent; - } - const usingSsl = parsedUrl.protocol === 'https:'; - let maxSockets = 100; - if (!!this.requestOptions) { - maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; - } - if (useProxy) { - // If using proxy, need tunnel - if (!tunnel) { - tunnel = __webpack_require__(856); + /** + * 12. Otherwise, inherited ns is not equal to ns (the node's own + * namespace is different from the context namespace of its parent). + * Run these sub-steps: + * + * 12.1. Let prefix be the value of node's prefix attribute. + * 12.2. Let candidate prefix be the result of retrieving a preferred + * prefix string prefix from map given namespace ns. The above may return + * null if no namespace key ns exists in map. + */ + var prefix = node.prefix; + /** + * We don't need to run "retrieving a preferred prefix string" algorithm if + * the element has no prefix and its namespace matches to the default + * namespace. + * See: https://github.com/web-platform-tests/wpt/pull/16703 + */ + var candidatePrefix = null; + if (prefix !== null || ns !== localDefaultNamespace) { + candidatePrefix = map.get(prefix, ns); } - const agentOptions = { - maxSockets: maxSockets, - keepAlive: this._keepAlive, - proxy: { - proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`, - host: proxyUrl.hostname, - port: proxyUrl.port + /** + * 12.3. If the value of prefix matches "xmlns", then run the following + * steps: + */ + if (prefix === "xmlns") { + /** + * 12.3.1. If the require well-formed flag is set, then throw an error. + * An Element with prefix "xmlns" will not legally round-trip in a + * conforming XML parser. + */ + if (requireWellFormed) { + throw new Error("An element cannot have the 'xmlns' prefix (well-formed required)."); } - }; - let tunnelAgent; - const overHttps = proxyUrl.protocol === 'https:'; - if (usingSsl) { - tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; + /** + * 12.3.2. Let candidate prefix be the value of prefix. + */ + candidatePrefix = prefix; + } + /** + * 12.4.Found a suitable namespace prefix: if candidate prefix is not + * null (a namespace prefix is defined which maps to ns), then: + */ + if (candidatePrefix !== null) { + /** + * The following may serialize a different prefix than the Element's + * existing prefix if it already had one. However, the retrieving a + * preferred prefix string algorithm already tried to match the + * existing prefix if possible. + * + * 12.4.1. Append to qualified name the concatenation of candidate + * prefix, ":" (U+003A COLON), and node's localName. There exists on + * this node or the node's ancestry a namespace prefix definition that + * defines the node's namespace. + * 12.4.2. If the local default namespace is not null (there exists a + * locally-defined default namespace declaration attribute) and its + * value is not the XML namespace, then let inherited ns get the value + * of local default namespace unless the local default namespace is the + * empty string in which case let it get null (the context namespace + * is changed to the declared default, rather than this node's own + * namespace). + * + * _Note:_ Any default namespace definitions or namespace prefixes that + * define the XML namespace are omitted when serializing this node's + * attributes. + */ + qualifiedName = candidatePrefix + ':' + node.localName; + if (localDefaultNamespace !== null && localDefaultNamespace !== infra_1.namespace.XML) { + inheritedNS = localDefaultNamespace || null; + } + /** + * 12.4.3. Append the value of qualified name to markup. + */ + markup += qualifiedName; + /** 12.5. Otherwise, if prefix is not null, then: */ + } + else if (prefix !== null) { + /** + * _Note:_ By this step, there is no namespace or prefix mapping + * declaration in this node (or any parent node visited by this + * algorithm) that defines prefix otherwise the step labelled Found + * a suitable namespace prefix would have been followed. The sub-steps + * that follow will create a new namespace prefix declaration for prefix + * and ensure that prefix does not conflict with an existing namespace + * prefix declaration of the same localName in node's attribute list. + * + * 12.5.1. If the local prefixes map contains a key matching prefix, + * then let prefix be the result of generating a prefix providing as + * input map, ns, and prefix index. + */ + if (prefix in localPrefixesMap) { + prefix = this._generatePrefix(ns, map, prefixIndex); + } + /** + * 12.5.2. Add prefix to map given namespace ns. + * 12.5.3. Append to qualified name the concatenation of prefix, ":" + * (U+003A COLON), and node's localName. + * 12.5.4. Append the value of qualified name to markup. + */ + map.set(prefix, ns); + qualifiedName += prefix + ':' + node.localName; + markup += qualifiedName; + /** + * 12.5.5. Append the following to markup, in the order listed: + * + * _Note:_ The following serializes a namespace prefix declaration for + * prefix which was just added to the map. + * + * 12.5.5.1. " " (U+0020 SPACE); + * 12.5.5.2. The string "xmlns:"; + * 12.5.5.3. The value of prefix; + * 12.5.5.4. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); + * 12.5.5.5. The result of serializing an attribute value given ns and + * the require well-formed flag as input; + * 12.5.5.6. """ (U+0022 QUOTATION MARK). + */ + markup += " xmlns:" + prefix + "=\"" + + this._serializeAttributeValue(ns, requireWellFormed) + "\""; + /** + * 12.5.5.7. If local default namespace is not null (there exists a + * locally-defined default namespace declaration attribute), then + * let inherited ns get the value of local default namespace unless the + * local default namespace is the empty string in which case let it get + * null. + */ + if (localDefaultNamespace !== null) { + inheritedNS = localDefaultNamespace || null; + } + /** + * 12.6. Otherwise, if local default namespace is null, or local + * default namespace is not null and its value is not equal to ns, then: + */ + } + else if (localDefaultNamespace === null || + (localDefaultNamespace !== null && localDefaultNamespace !== ns)) { + /** + * _Note:_ At this point, the namespace for this node still needs to be + * serialized, but there's no prefix (or candidate prefix) available; the + * following uses the default namespace declaration to define the + * namespace--optionally replacing an existing default declaration + * if present. + * + * 12.6.1. Set the ignore namespace definition attribute flag to true. + * 12.6.2. Append to qualified name the value of node's localName. + * 12.6.3. Let the value of inherited ns be ns. + * + * _Note:_ The new default namespace will be used in the serialization + * to define this node's namespace and act as the context namespace for + * its children. + */ + ignoreNamespaceDefinitionAttribute = true; + qualifiedName += node.localName; + inheritedNS = ns; + /** + * 12.6.4. Append the value of qualified name to markup. + */ + markup += qualifiedName; + /** + * 12.6.5. Append the following to markup, in the order listed: + * + * _Note:_ The following serializes the new (or replacement) default + * namespace definition. + * + * 12.6.5.1. " " (U+0020 SPACE); + * 12.6.5.2. The string "xmlns"; + * 12.6.5.3. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); + * 12.6.5.4. The result of serializing an attribute value given ns + * and the require well-formed flag as input; + * 12.6.5.5. """ (U+0022 QUOTATION MARK). + */ + markup += " xmlns" + "=\"" + + this._serializeAttributeValue(ns, requireWellFormed) + "\""; + /** + * 12.7. Otherwise, the node has a local default namespace that matches + * ns. Append to qualified name the value of node's localName, let the + * value of inherited ns be ns, and append the value of qualified name + * to markup. + */ } else { - tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; + qualifiedName += node.localName; + inheritedNS = ns; + markup += qualifiedName; } - agent = tunnelAgent(agentOptions); - this._proxyAgent = agent; - } - // if reusing agent across request and tunneling agent isn't assigned create a new agent - if (this._keepAlive && !agent) { - const options = { keepAlive: this._keepAlive, maxSockets: maxSockets }; - agent = usingSsl ? new https.Agent(options) : new http.Agent(options); - this._agent = agent; } - // if not using private agent and tunnel agent isn't setup then use global agent - if (!agent) { - agent = usingSsl ? https.globalAgent : http.globalAgent; + /** + * 13. Append to markup the result of the XML serialization of node's + * attributes given map, prefix index, local prefixes map, ignore namespace + * definition attribute flag, and require well-formed flag. + */ + markup += this._serializeAttributesNS(node, map, prefixIndex, localPrefixesMap, ignoreNamespaceDefinitionAttribute, requireWellFormed); + /** + * 14. If ns is the HTML namespace, and the node's list of children is + * empty, and the node's localName matches any one of the following void + * elements: "area", "base", "basefont", "bgsound", "br", "col", "embed", + * "frame", "hr", "img", "input", "keygen", "link", "menuitem", "meta", + * "param", "source", "track", "wbr"; then append the following to markup, + * in the order listed: + * 14.1. " " (U+0020 SPACE); + * 14.2. "/" (U+002F SOLIDUS). + * and set the skip end tag flag to true. + * 15. If ns is not the HTML namespace, and the node's list of children is + * empty, then append "/" (U+002F SOLIDUS) to markup and set the skip end + * tag flag to true. + * 16. Append ">" (U+003E GREATER-THAN SIGN) to markup. + */ + var isHTML = (ns === infra_1.namespace.HTML); + if (isHTML && node.childNodes.length === 0 && + XMLSerializerImpl._VoidElementNames.has(node.localName)) { + markup += " /"; + skipEndTag = true; } - 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 - }); + else if (!isHTML && node.childNodes.length === 0) { + markup += "/"; + skipEndTag = true; } - return agent; - } - _performExponentialBackoff(retryNumber) { - retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); - const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); - return new Promise(resolve => setTimeout(() => resolve(), ms)); - } - static dateTimeDeserializer(key, value) { - if (typeof value === 'string') { - let a = new Date(value); - if (!isNaN(a.valueOf())) { - return a; - } + markup += ">"; + /** + * 17. If the value of skip end tag is true, then return the value of markup + * and skip the remaining steps. The node is a leaf-node. + */ + if (skipEndTag) + return markup; + /** + * 18. If ns is the HTML namespace, and the node's localName matches the + * string "template", then this is a template element. Append to markup the + * result of XML serializing a DocumentFragment node given the template + * element's template contents (a DocumentFragment), providing inherited + * ns, map, prefix index, and the require well-formed flag. + * + * _Note:_ This allows template content to round-trip, given the rules for + * parsing XHTML documents. + * + * 19. Otherwise, append to markup the result of running the XML + * serialization algorithm on each of node's children, in tree order, + * providing inherited ns, map, prefix index, and the require well-formed + * flag. + */ + if (isHTML && node.localName === "template") { + // TODO: serialize template contents } - return value; - } - async _processResponse(res, options) { - return new Promise(async (resolve, reject) => { - const statusCode = res.message.statusCode; - const response = { - statusCode: statusCode, - result: null, - headers: {} - }; - // not found leads to null obj returned - if (statusCode == HttpCodes.NotFound) { - resolve(response); - } - let obj; - let contents; - // get the result from the body + else { try { - contents = await res.readBody(); - if (contents && contents.length > 0) { - if (options && options.deserializeDates) { - obj = JSON.parse(contents, HttpClient.dateTimeDeserializer); - } - else { - obj = JSON.parse(contents); - } - response.result = obj; + for (var _b = __values(node._children || node.childNodes), _c = _b.next(); !_c.done; _c = _b.next()) { + var childNode = _c.value; + markup += this._serializeNodeNS(childNode, inheritedNS, map, prefixIndex, requireWellFormed); } - response.headers = res.message.headers; } - catch (err) { - // Invalid resource (contents not json); leaving result obj null + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_1) throw e_1.error; } } - // note that 3xx redirects are handled by the http layer. - if (statusCode > 299) { - let msg; - // if exception/error in body, attempt to get better error - if (obj && obj.message) { - msg = obj.message; - } - else if (contents && contents.length > 0) { - // it may be the case that the exception is in the body message as string - msg = contents; - } - else { - msg = 'Failed request: (' + statusCode + ')'; - } - let err = new HttpClientError(msg, statusCode); - err.result = response.result; - reject(err); - } - else { - resolve(response); - } - }); - } -} -exports.HttpClient = HttpClient; - - -/***/ }), -/* 540 */, -/* 541 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; } + /** + * 20. Append the following to markup, in the order listed: + * 20.1. "" (U+003E GREATER-THAN SIGN). + */ + markup += ""; + /** + * 21. Return the value of markup. + */ + return markup; }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var util_1 = __webpack_require__(918); -var infra_1 = __webpack_require__(23); -var CreateAlgorithm_1 = __webpack_require__(86); -var OrderedSetAlgorithm_1 = __webpack_require__(146); -var DOMAlgorithm_1 = __webpack_require__(304); -var MutationAlgorithm_1 = __webpack_require__(479); -var ElementAlgorithm_1 = __webpack_require__(33); -/** - * Replaces the contents of the given node with a single text node. - * - * @param string - node contents - * @param parent - a node - */ -function node_stringReplaceAll(str, parent) { - /** - * 1. Let node be null. - * 2. If string is not the empty string, then set node to a new Text node - * whose data is string and node document is parent’s node document. - * 3. Replace all with node within parent. - */ - var node = null; - if (str !== '') { - node = CreateAlgorithm_1.create_text(parent._nodeDocument, str); - } - MutationAlgorithm_1.mutation_replaceAll(node, parent); -} -exports.node_stringReplaceAll = node_stringReplaceAll; -/** - * Clones a node. - * - * @param node - a node to clone - * @param document - the document to own the cloned node - * @param cloneChildrenFlag - whether to clone node's children - */ -function node_clone(node, document, cloneChildrenFlag) { - var e_1, _a, e_2, _b; - if (document === void 0) { document = null; } - if (cloneChildrenFlag === void 0) { cloneChildrenFlag = false; } /** - * 1. If document is not given, let document be node’s node document. + * Produces an XML serialization of a document node. + * + * @param node - node to serialize + * @param namespace - context namespace + * @param prefixMap - namespace prefix map + * @param prefixIndex - generated namespace prefix index + * @param requireWellFormed - whether to check conformance */ - if (document === null) - document = node._nodeDocument; - var copy; - if (util_1.Guard.isElementNode(node)) { + XMLSerializerImpl.prototype._serializeDocumentNS = function (node, namespace, prefixMap, prefixIndex, requireWellFormed) { + var e_2, _a; /** - * 2. If node is an element, then: - * 2.1. Let copy be the result of creating an element, given document, - * node’s local name, node’s namespace, node’s namespace prefix, - * and node’s is value, with the synchronous custom elements flag unset. - * 2.2. For each attribute in node’s attribute list: - * 2.2.1. Let copyAttribute be a clone of attribute. - * 2.2.2. Append copyAttribute to copy. + * If the require well-formed flag is set (its value is true), and this node + * has no documentElement (the documentElement attribute's value is null), + * then throw an exception; the serialization of this node would not be a + * well-formed document. */ - copy = ElementAlgorithm_1.element_createAnElement(document, node._localName, node._namespace, node._namespacePrefix, node._is, false); - try { - for (var _c = __values(node._attributeList), _d = _c.next(); !_d.done; _d = _c.next()) { - var attribute = _d.value; - var copyAttribute = node_clone(attribute, document); - ElementAlgorithm_1.element_append(copyAttribute, copy); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_d && !_d.done && (_a = _c.return)) _a.call(_c); - } - finally { if (e_1) throw e_1.error; } + if (requireWellFormed && node.documentElement === null) { + throw new Error("Missing document element (well-formed required)."); } - } - else { /** - * 3. Otherwise, let copy be a node that implements the same interfaces as - * node, and fulfills these additional requirements, switching on node: - * - Document - * Set copy’s encoding, content type, URL, origin, type, and mode, to those - * of node. - * - DocumentType - * Set copy’s name, public ID, and system ID, to those of node. - * - Attr - * Set copy’s namespace, namespace prefix, local name, and value, to - * those of node. - * - Text - * - Comment - * Set copy’s data, to that of node. - * - ProcessingInstruction - * Set copy’s target and data to those of node. - * - Any other node - */ - if (util_1.Guard.isDocumentNode(node)) { - var doc = CreateAlgorithm_1.create_document(); - doc._encoding = node._encoding; - doc._contentType = node._contentType; - doc._URL = node._URL; - doc._origin = node._origin; - doc._type = node._type; - doc._mode = node._mode; - copy = doc; - } - else if (util_1.Guard.isDocumentTypeNode(node)) { - var doctype = CreateAlgorithm_1.create_documentType(document, node._name, node._publicId, node._systemId); - copy = doctype; - } - else if (util_1.Guard.isAttrNode(node)) { - var attr = CreateAlgorithm_1.create_attr(document, node.localName); - attr._namespace = node._namespace; - attr._namespacePrefix = node._namespacePrefix; - attr._value = node._value; - copy = attr; - } - else if (util_1.Guard.isExclusiveTextNode(node)) { - copy = CreateAlgorithm_1.create_text(document, node._data); - } - else if (util_1.Guard.isCDATASectionNode(node)) { - copy = CreateAlgorithm_1.create_cdataSection(document, node._data); - } - else if (util_1.Guard.isCommentNode(node)) { - copy = CreateAlgorithm_1.create_comment(document, node._data); - } - else if (util_1.Guard.isProcessingInstructionNode(node)) { - copy = CreateAlgorithm_1.create_processingInstruction(document, node._target, node._data); - } - else if (util_1.Guard.isDocumentFragmentNode(node)) { - copy = CreateAlgorithm_1.create_documentFragment(document); - } - else { - copy = Object.create(node); - } - } - /** - * 4. Set copy’s node document and document to copy, if copy is a document, - * and set copy’s node document to document otherwise. - */ - if (util_1.Guard.isDocumentNode(copy)) { - copy._nodeDocument = copy; - document = copy; - } - else { - copy._nodeDocument = document; - } - /** - * 5. Run any cloning steps defined for node in other applicable - * specifications and pass copy, node, document and the clone children flag - * if set, as parameters. - */ - if (DOMImpl_1.dom.features.steps) { - DOMAlgorithm_1.dom_runCloningSteps(copy, node, document, cloneChildrenFlag); - } - /** - * 6. If the clone children flag is set, clone all the children of node and - * append them to copy, with document as specified and the clone children - * flag being set. - */ - if (cloneChildrenFlag) { + * Otherwise, run the following steps: + * 1. Let serialized document be an empty string. + * 2. For each child child of node, in tree order, run the XML + * serialization algorithm on the child passing along the provided + * arguments, and append the result to serialized document. + * + * _Note:_ This will serialize any number of ProcessingInstruction and + * Comment nodes both before and after the Document's documentElement node, + * including at most one DocumentType node. (Text nodes are not allowed as + * children of the Document.) + * + * 3. Return the value of serialized document. + */ + var serializedDocument = ""; try { - for (var _e = __values(node._children), _f = _e.next(); !_f.done; _f = _e.next()) { - var child = _f.value; - var childCopy = node_clone(child, document, true); - MutationAlgorithm_1.mutation_append(childCopy, copy); + for (var _b = __values(node._children || node.childNodes), _c = _b.next(); !_c.done; _c = _b.next()) { + var childNode = _c.value; + serializedDocument += this._serializeNodeNS(childNode, namespace, prefixMap, prefixIndex, requireWellFormed); } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { - if (_f && !_f.done && (_b = _e.return)) _b.call(_e); + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_2) throw e_2.error; } } - } - /** - * 7. Return copy. - */ - return copy; -} -exports.node_clone = node_clone; -/** - * Determines if two nodes can be considered equal. - * - * @param a - node to compare - * @param b - node to compare - */ -function node_equals(a, b) { - var e_3, _a, e_4, _b; + return serializedDocument; + }; /** - * 1. A and B’s nodeType attribute value is identical. + * Produces an XML serialization of a comment node. + * + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance */ - if (a._nodeType !== b._nodeType) - return false; + XMLSerializerImpl.prototype._serializeComment = function (node, requireWellFormed) { + /** + * If the require well-formed flag is set (its value is true), and node's + * data contains characters that are not matched by the XML Char production + * or contains "--" (two adjacent U+002D HYPHEN-MINUS characters) or that + * ends with a "-" (U+002D HYPHEN-MINUS) character, then throw an exception; + * the serialization of this node's data would not be well-formed. + */ + if (requireWellFormed && (!algorithm_1.xml_isLegalChar(node.data) || + node.data.indexOf("--") !== -1 || node.data.endsWith("-"))) { + throw new Error("Comment data contains invalid characters (well-formed required)."); + } + /** + * Otherwise, return the concatenation of "". + */ + return ""; + }; /** - * 2. The following are also equal, depending on A: - * - DocumentType - * Its name, public ID, and system ID. - * - Element - * Its namespace, namespace prefix, local name, and its attribute list’s size. - * - Attr - * Its namespace, local name, and value. - * - ProcessingInstruction - * Its target and data. - * - Text - * - Comment - * Its data. + * Produces an XML serialization of a text node. + * + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance + * @param level - current depth of the XML tree */ - if (util_1.Guard.isDocumentTypeNode(a) && util_1.Guard.isDocumentTypeNode(b)) { - if (a._name !== b._name || a._publicId !== b._publicId || - a._systemId !== b._systemId) - return false; - } - else if (util_1.Guard.isElementNode(a) && util_1.Guard.isElementNode(b)) { - if (a._namespace !== b._namespace || a._namespacePrefix !== b._namespacePrefix || - a._localName !== b._localName || - a._attributeList.length !== b._attributeList.length) - return false; - } - else if (util_1.Guard.isAttrNode(a) && util_1.Guard.isAttrNode(b)) { - if (a._namespace !== b._namespace || a._localName !== b._localName || - a._value !== b._value) - return false; - } - else if (util_1.Guard.isProcessingInstructionNode(a) && util_1.Guard.isProcessingInstructionNode(b)) { - if (a._target !== b._target || a._data !== b._data) - return false; - } - else if (util_1.Guard.isCharacterDataNode(a) && util_1.Guard.isCharacterDataNode(b)) { - if (a._data !== b._data) - return false; - } + XMLSerializerImpl.prototype._serializeText = function (node, requireWellFormed) { + /** + * 1. If the require well-formed flag is set (its value is true), and + * node's data contains characters that are not matched by the XML Char + * production, then throw an exception; the serialization of this node's + * data would not be well-formed. + */ + if (requireWellFormed && !algorithm_1.xml_isLegalChar(node.data)) { + throw new Error("Text data contains invalid characters (well-formed required)."); + } + /** + * 2. Let markup be the value of node's data. + * 3. Replace any occurrences of "&" in markup by "&". + * 4. Replace any occurrences of "<" in markup by "<". + * 5. Replace any occurrences of ">" in markup by ">". + * 6. Return the value of markup. + */ + var result = ""; + for (var i = 0; i < node.data.length; i++) { + var c = node.data[i]; + if (c === "&") + result += "&"; + else if (c === "<") + result += "<"; + else if (c === ">") + result += ">"; + else + result += c; + } + return result; + }; /** - * 3. If A is an element, each attribute in its attribute list has an attribute - * that equals an attribute in B’s attribute list. + * Produces an XML serialization of a document fragment node. + * + * @param node - node to serialize + * @param namespace - context namespace + * @param prefixMap - namespace prefix map + * @param prefixIndex - generated namespace prefix index + * @param requireWellFormed - whether to check conformance */ - if (util_1.Guard.isElementNode(a) && util_1.Guard.isElementNode(b)) { - var attrMap = {}; + XMLSerializerImpl.prototype._serializeDocumentFragmentNS = function (node, namespace, prefixMap, prefixIndex, requireWellFormed) { + var e_3, _a; + /** + * 1. Let markup the empty string. + * 2. For each child child of node, in tree order, run the XML serialization + * algorithm on the child given namespace, prefix map, a reference to prefix + * index, and flag require well-formed. Concatenate the result to markup. + * 3. Return the value of markup. + */ + var markup = ""; try { - for (var _c = __values(a._attributeList), _d = _c.next(); !_d.done; _d = _c.next()) { - var attrA = _d.value; - attrMap[attrA._localName] = attrA; + for (var _b = __values(node._children || node.childNodes), _c = _b.next(); !_c.done; _c = _b.next()) { + var childNode = _c.value; + markup += this._serializeNodeNS(childNode, namespace, prefixMap, prefixIndex, requireWellFormed); } } catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { - if (_d && !_d.done && (_a = _c.return)) _a.call(_c); + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_3) throw e_3.error; } } - try { - for (var _e = __values(b._attributeList), _f = _e.next(); !_f.done; _f = _e.next()) { - var attrB = _f.value; - var attrA = attrMap[attrB._localName]; - if (!attrA) - return false; - if (!node_equals(attrA, attrB)) - return false; - } - } - catch (e_4_1) { e_4 = { error: e_4_1 }; } - finally { - try { - if (_f && !_f.done && (_b = _e.return)) _b.call(_e); - } - finally { if (e_4) throw e_4.error; } - } - } + return markup; + }; /** - * 4. A and B have the same number of children. - * 5. Each child of A equals the child of B at the identical index. + * Produces an XML serialization of a document type node. + * + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance */ - if (a._children.size !== b._children.size) - return false; - var itA = a._children[Symbol.iterator](); - var itB = b._children[Symbol.iterator](); - var resultA = itA.next(); - var resultB = itB.next(); - while (!resultA.done && !resultB.done) { - var child1 = resultA.value; - var child2 = resultB.value; - if (!node_equals(child1, child2)) - return false; - resultA = itA.next(); - resultB = itB.next(); - } - return true; -} -exports.node_equals = node_equals; -/** - * Returns a collection of elements with the given qualified name which are - * descendants of the given root node. - * See: https://dom.spec.whatwg.org/#concept-getelementsbytagname - * - * @param qualifiedName - qualified name - * @param root - root node - */ -function node_listOfElementsWithQualifiedName(qualifiedName, root) { + XMLSerializerImpl.prototype._serializeDocumentType = function (node, requireWellFormed) { + /** + * 1. If the require well-formed flag is true and the node's publicId + * attribute contains characters that are not matched by the XML PubidChar + * production, then throw an exception; the serialization of this node + * would not be a well-formed document type declaration. + */ + if (requireWellFormed && !algorithm_1.xml_isPubidChar(node.publicId)) { + throw new Error("DocType public identifier does not match PubidChar construct (well-formed required)."); + } + /** + * 2. If the require well-formed flag is true and the node's systemId + * attribute contains characters that are not matched by the XML Char + * production or that contains both a """ (U+0022 QUOTATION MARK) and a + * "'" (U+0027 APOSTROPHE), then throw an exception; the serialization + * of this node would not be a well-formed document type declaration. + */ + if (requireWellFormed && + (!algorithm_1.xml_isLegalChar(node.systemId) || + (node.systemId.indexOf('"') !== -1 && node.systemId.indexOf("'") !== -1))) { + throw new Error("DocType system identifier contains invalid characters (well-formed required)."); + } + /** + * 3. Let markup be an empty string. + * 4. Append the string "" (U+003E GREATER-THAN SIGN) to markup. + * 11. Return the value of markup. + */ + return node.publicId && node.systemId ? + "" + : node.publicId ? + "" + : node.systemId ? + "" + : + ""; + }; /** - * 1. If qualifiedName is "*" (U+002A), return a HTMLCollection rooted at - * root, whose filter matches only descendant elements. - * 2. Otherwise, if root’s node document is an HTML document, return a - * HTMLCollection rooted at root, whose filter matches the following - * descendant elements: - * 2.1. Whose namespace is the HTML namespace and whose qualified name is - * qualifiedName, in ASCII lowercase. - * 2.2. Whose namespace is not the HTML namespace and whose qualified name - * is qualifiedName. - * 3. Otherwise, return a HTMLCollection rooted at root, whose filter - * matches descendant elements whose qualified name is qualifiedName. + * Produces an XML serialization of a processing instruction node. + * + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance */ - if (qualifiedName === "*") { - return CreateAlgorithm_1.create_htmlCollection(root); - } - else if (root._nodeDocument._type === "html") { - return CreateAlgorithm_1.create_htmlCollection(root, function (ele) { - if (ele._namespace === infra_1.namespace.HTML && - ele._qualifiedName === qualifiedName.toLowerCase()) { - return true; - } - else if (ele._namespace !== infra_1.namespace.HTML && - ele._qualifiedName === qualifiedName) { - return true; - } - else { - return false; - } - }); - } - else { - return CreateAlgorithm_1.create_htmlCollection(root, function (ele) { - return (ele._qualifiedName === qualifiedName); - }); - } -} -exports.node_listOfElementsWithQualifiedName = node_listOfElementsWithQualifiedName; -/** - * Returns a collection of elements with the given namespace which are - * descendants of the given root node. - * See: https://dom.spec.whatwg.org/#concept-getelementsbytagnamens - * - * @param namespace - element namespace - * @param localName - local name - * @param root - root node - */ -function node_listOfElementsWithNamespace(namespace, localName, root) { - /** - * 1. If namespace is the empty string, set it to null. - * 2. If both namespace and localName are "*" (U+002A), return a - * HTMLCollection rooted at root, whose filter matches descendant elements. - * 3. Otherwise, if namespace is "*" (U+002A), return a HTMLCollection - * rooted at root, whose filter matches descendant elements whose local - * name is localName. - * 4. Otherwise, if localName is "*" (U+002A), return a HTMLCollection - * rooted at root, whose filter matches descendant elements whose - * namespace is namespace. - * 5. Otherwise, return a HTMLCollection rooted at root, whose filter - * matches descendant elements whose namespace is namespace and local - * name is localName. - */ - if (namespace === '') - namespace = null; - if (namespace === "*" && localName === "*") { - return CreateAlgorithm_1.create_htmlCollection(root); - } - else if (namespace === "*") { - return CreateAlgorithm_1.create_htmlCollection(root, function (ele) { - return (ele._localName === localName); - }); - } - else if (localName === "*") { - return CreateAlgorithm_1.create_htmlCollection(root, function (ele) { - return (ele._namespace === namespace); - }); - } - else { - return CreateAlgorithm_1.create_htmlCollection(root, function (ele) { - return (ele._localName === localName && ele._namespace === namespace); - }); - } -} -exports.node_listOfElementsWithNamespace = node_listOfElementsWithNamespace; -/** - * Returns a collection of elements with the given class names which are - * descendants of the given root node. - * See: https://dom.spec.whatwg.org/#concept-getelementsbyclassname - * - * @param namespace - element namespace - * @param localName - local name - * @param root - root node - */ -function node_listOfElementsWithClassNames(classNames, root) { - /** - * 1. Let classes be the result of running the ordered set parser - * on classNames. - * 2. If classes is the empty set, return an empty HTMLCollection. - * 3. Return a HTMLCollection rooted at root, whose filter matches - * descendant elements that have all their classes in classes. - * The comparisons for the classes must be done in an ASCII case-insensitive - * manner if root’s node document’s mode is "quirks", and in a - * case-sensitive manner otherwise. - */ - var classes = OrderedSetAlgorithm_1.orderedSet_parse(classNames); - if (classes.size === 0) { - return CreateAlgorithm_1.create_htmlCollection(root, function () { return false; }); - } - var caseSensitive = (root._nodeDocument._mode !== "quirks"); - return CreateAlgorithm_1.create_htmlCollection(root, function (ele) { - var eleClasses = ele.classList; - return OrderedSetAlgorithm_1.orderedSet_contains(eleClasses._tokenSet, classes, caseSensitive); - }); -} -exports.node_listOfElementsWithClassNames = node_listOfElementsWithClassNames; -/** - * Searches for a namespace prefix associated with the given namespace - * starting from the given element through its ancestors. - * - * @param element - an element node to start searching at - * @param namespace - namespace to search for - */ -function node_locateANamespacePrefix(element, namespace) { - /** - * 1. If element’s namespace is namespace and its namespace prefix is not - * null, then return its namespace prefix. - */ - if (element._namespace === namespace && element._namespacePrefix !== null) { - return element._namespacePrefix; - } - /** - * 2. If element has an attribute whose namespace prefix is "xmlns" and - * value is namespace, then return element’s first such attribute’s - * local name. - */ - for (var i = 0; i < element._attributeList.length; i++) { - var attr = element._attributeList[i]; - if (attr._namespacePrefix === "xmlns" && attr._value === namespace) { - return attr._localName; - } - } - /** - * 3. If element’s parent element is not null, then return the result of - * running locate a namespace prefix on that element using namespace. - */ - if (element._parent && util_1.Guard.isElementNode(element._parent)) { - return node_locateANamespacePrefix(element._parent, namespace); - } - /** - * 4. Return null. - */ - return null; -} -exports.node_locateANamespacePrefix = node_locateANamespacePrefix; -/** - * Searches for a namespace associated with the given namespace prefix - * starting from the given node through its ancestors. - * - * @param node - a node to start searching at - * @param prefix - namespace prefix to search for - */ -function node_locateANamespace(node, prefix) { - if (util_1.Guard.isElementNode(node)) { + XMLSerializerImpl.prototype._serializeProcessingInstruction = function (node, requireWellFormed) { /** - * 1. If its namespace is not null and its namespace prefix is prefix, - * then return namespace. + * 1. If the require well-formed flag is set (its value is true), and node's + * target contains a ":" (U+003A COLON) character or is an ASCII + * case-insensitive match for the string "xml", then throw an exception; + * the serialization of this node's target would not be well-formed. */ - if (node._namespace !== null && node._namespacePrefix === prefix) { - return node._namespace; + if (requireWellFormed && (node.target.indexOf(":") !== -1 || (/^xml$/i).test(node.target))) { + throw new Error("Processing instruction target contains invalid characters (well-formed required)."); } /** - * 2. If it has an attribute whose namespace is the XMLNS namespace, - * namespace prefix is "xmlns", and local name is prefix, or if prefix - * is null and it has an attribute whose namespace is the XMLNS namespace, - * namespace prefix is null, and local name is "xmlns", then return its - * value if it is not the empty string, and null otherwise. + * 2. If the require well-formed flag is set (its value is true), and node's + * data contains characters that are not matched by the XML Char production + * or contains the string "?>" (U+003F QUESTION MARK, + * U+003E GREATER-THAN SIGN), then throw an exception; the serialization of + * this node's data would not be well-formed. */ - for (var i = 0; i < node._attributeList.length; i++) { - var attr = node._attributeList[i]; - if (attr._namespace === infra_1.namespace.XMLNS && - attr._namespacePrefix === "xmlns" && - attr._localName === prefix) { - return attr._value || null; - } - if (prefix === null && attr._namespace === infra_1.namespace.XMLNS && - attr._namespacePrefix === null && attr._localName === "xmlns") { - return attr._value || null; - } + if (requireWellFormed && (!algorithm_1.xml_isLegalChar(node.data) || + node.data.indexOf("?>") !== -1)) { + throw new Error("Processing instruction data contains invalid characters (well-formed required)."); } /** - * 3. If its parent element is null, then return null. - */ - if (node.parentElement === null) - return null; - /** - * 4. Return the result of running locate a namespace on its parent - * element using prefix. + * 3. Let markup be the concatenation of the following, in the order listed: + * 3.1. "" (U+003F QUESTION MARK, U+003E GREATER-THAN SIGN). + * 4. Return the value of markup. */ - return node_locateANamespace(node.parentElement, prefix); - } - else if (util_1.Guard.isDocumentNode(node)) { + return ""; + }; + /** + * Produces an XML serialization of a CDATA node. + * + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance + */ + XMLSerializerImpl.prototype._serializeCData = function (node, requireWellFormed) { + if (requireWellFormed && (node.data.indexOf("]]>") !== -1)) { + throw new Error("CDATA contains invalid characters (well-formed required)."); + } + return ""; + }; + /** + * Produces an XML serialization of the attributes of an element node. + * + * @param node - node to serialize + * @param map - namespace prefix map + * @param prefixIndex - generated namespace prefix index + * @param localPrefixesMap - local prefixes map + * @param ignoreNamespaceDefinitionAttribute - whether to ignore namespace + * attributes + * @param requireWellFormed - whether to check conformance + */ + XMLSerializerImpl.prototype._serializeAttributesNS = function (node, map, prefixIndex, localPrefixesMap, ignoreNamespaceDefinitionAttribute, requireWellFormed) { + var e_4, _a; /** - * 1. If its document element is null, then return null. - * 2. Return the result of running locate a namespace on its document - * element using prefix. + * 1. Let result be the empty string. + * 2. Let localname set be a new empty namespace localname set. This + * localname set will contain tuples of unique attribute namespaceURI and + * localName pairs, and is populated as each attr is processed. This set is + * used to [optionally] enforce the well-formed constraint that an element + * cannot have two attributes with the same namespaceURI and localName. + * This can occur when two otherwise identical attributes on the same + * element differ only by their prefix values. */ - if (node.documentElement === null) - return null; - return node_locateANamespace(node.documentElement, prefix); - } - else if (util_1.Guard.isDocumentTypeNode(node) || util_1.Guard.isDocumentFragmentNode(node)) { - return null; - } - else if (util_1.Guard.isAttrNode(node)) { + var result = ""; + var localNameSet = requireWellFormed ? new LocalNameSet_1.LocalNameSet() : undefined; + try { + /** + * 3. Loop: For each attribute attr in element's attributes, in the order + * they are specified in the element's attribute list: + */ + for (var _b = __values(node.attributes), _c = _b.next(); !_c.done; _c = _b.next()) { + var attr = _c.value; + // Optimize common case + if (!ignoreNamespaceDefinitionAttribute && !requireWellFormed && attr.namespaceURI === null) { + result += " " + attr.localName + "=\"" + + this._serializeAttributeValue(attr.value, requireWellFormed) + "\""; + continue; + } + /** + * 3.1. If the require well-formed flag is set (its value is true), and the + * localname set contains a tuple whose values match those of a new tuple + * consisting of attr's namespaceURI attribute and localName attribute, + * then throw an exception; the serialization of this attr would fail to + * produce a well-formed element serialization. + */ + if (requireWellFormed && localNameSet && localNameSet.has(attr.namespaceURI, attr.localName)) { + throw new Error("Element contains duplicate attributes (well-formed required)."); + } + /** + * 3.2. Create a new tuple consisting of attr's namespaceURI attribute and + * localName attribute, and add it to the localname set. + * 3.3. Let attribute namespace be the value of attr's namespaceURI value. + * 3.4. Let candidate prefix be null. + */ + if (requireWellFormed && localNameSet) + localNameSet.set(attr.namespaceURI, attr.localName); + var attributeNamespace = attr.namespaceURI; + var candidatePrefix = null; + /** 3.5. If attribute namespace is not null, then run these sub-steps: */ + if (attributeNamespace !== null) { + /** + * 3.5.1. Let candidate prefix be the result of retrieving a preferred + * prefix string from map given namespace attribute namespace with + * preferred prefix being attr's prefix value. + */ + candidatePrefix = map.get(attr.prefix, attributeNamespace); + /** + * 3.5.2. If the value of attribute namespace is the XMLNS namespace, + * then run these steps: + */ + if (attributeNamespace === infra_1.namespace.XMLNS) { + /** + * 3.5.2.1. If any of the following are true, then stop running these + * steps and goto Loop to visit the next attribute: + * - the attr's value is the XML namespace; + * _Note:_ The XML namespace cannot be redeclared and survive + * round-tripping (unless it defines the prefix "xml"). To avoid this + * problem, this algorithm always prefixes elements in the XML + * namespace with "xml" and drops any related definitions as seen + * in the above condition. + * - the attr's prefix is null and the ignore namespace definition + * attribute flag is true (the Element's default namespace attribute + * should be skipped); + * - the attr's prefix is not null and either + * * the attr's localName is not a key contained in the local + * prefixes map, or + * * the attr's localName is present in the local prefixes map but + * the value of the key does not match attr's value + * and furthermore that the attr's localName (as the prefix to find) + * is found in the namespace prefix map given the namespace consisting + * of the attr's value (the current namespace prefix definition was + * exactly defined previously--on an ancestor element not the current + * element whose attributes are being processed). + */ + if (attr.value === infra_1.namespace.XML || + (attr.prefix === null && ignoreNamespaceDefinitionAttribute) || + (attr.prefix !== null && (!(attr.localName in localPrefixesMap) || + localPrefixesMap[attr.localName] !== attr.value) && + map.has(attr.localName, attr.value))) + continue; + /** + * 3.5.2.2. If the require well-formed flag is set (its value is true), + * and the value of attr's value attribute matches the XMLNS + * namespace, then throw an exception; the serialization of this + * attribute would produce invalid XML because the XMLNS namespace + * is reserved and cannot be applied as an element's namespace via + * XML parsing. + * + * _Note:_ DOM APIs do allow creation of elements in the XMLNS + * namespace but with strict qualifications. + */ + if (requireWellFormed && attr.value === infra_1.namespace.XMLNS) { + throw new Error("XMLNS namespace is reserved (well-formed required)."); + } + /** + * 3.5.2.3. If the require well-formed flag is set (its value is true), + * and the value of attr's value attribute is the empty string, then + * throw an exception; namespace prefix declarations cannot be used + * to undeclare a namespace (use a default namespace declaration + * instead). + */ + if (requireWellFormed && attr.value === '') { + throw new Error("Namespace prefix declarations cannot be used to undeclare a namespace (well-formed required)."); + } + /** + * 3.5.2.4. the attr's prefix matches the string "xmlns", then let + * candidate prefix be the string "xmlns". + */ + if (attr.prefix === 'xmlns') + candidatePrefix = 'xmlns'; + /** + * 3.5.3. Otherwise, the attribute namespace is not the XMLNS namespace. + * Run these steps: + * + * _Note:_ The (candidatePrefix === null) check is not in the spec. + * We deviate from the spec here. Otherwise a prefix is generated for + * all attributes with namespaces. + */ + } + else if (candidatePrefix === null) { + if (attr.prefix !== null && + (!map.hasPrefix(attr.prefix) || + map.has(attr.prefix, attributeNamespace))) { + /** + * Check if we can use the attribute's own prefix. + * We deviate from the spec here. + * TODO: This is not an efficient way of searching for prefixes. + * Follow developments to the spec. + */ + candidatePrefix = attr.prefix; + } + else { + /** + * 3.5.3.1. Let candidate prefix be the result of generating a prefix + * providing map, attribute namespace, and prefix index as input. + */ + candidatePrefix = this._generatePrefix(attributeNamespace, map, prefixIndex); + } + /** + * 3.5.3.2. Append the following to result, in the order listed: + * 3.5.3.2.1. " " (U+0020 SPACE); + * 3.5.3.2.2. The string "xmlns:"; + * 3.5.3.2.3. The value of candidate prefix; + * 3.5.3.2.4. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); + * 3.5.3.2.5. The result of serializing an attribute value given + * attribute namespace and the require well-formed flag as input; + * 3.5.3.2.6. """ (U+0022 QUOTATION MARK). + */ + result += " xmlns:" + candidatePrefix + "=\"" + + this._serializeAttributeValue(attributeNamespace, requireWellFormed) + "\""; + } + } + /** + * 3.6. Append a " " (U+0020 SPACE) to result. + * 3.7. If candidate prefix is not null, then append to result the + * concatenation of candidate prefix with ":" (U+003A COLON). + */ + result += " "; + if (candidatePrefix !== null) { + result += candidatePrefix + ':'; + } + /** + * 3.8. If the require well-formed flag is set (its value is true), and + * this attr's localName attribute contains the character + * ":" (U+003A COLON) or does not match the XML Name production or + * equals "xmlns" and attribute namespace is null, then throw an + * exception; the serialization of this attr would not be a + * well-formed attribute. + */ + if (requireWellFormed && (attr.localName.indexOf(":") !== -1 || + !algorithm_1.xml_isName(attr.localName) || + (attr.localName === "xmlns" && attributeNamespace === null))) { + throw new Error("Attribute local name contains invalid characters (well-formed required)."); + } + /** + * 3.9. Append the following strings to result, in the order listed: + * 3.9.1. The value of attr's localName; + * 3.9.2. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); + * 3.9.3. The result of serializing an attribute value given attr's value + * attribute and the require well-formed flag as input; + * 3.9.4. """ (U+0022 QUOTATION MARK). + */ + result += attr.localName + "=\"" + + this._serializeAttributeValue(attr.value, requireWellFormed) + "\""; + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_4) throw e_4.error; } + } /** - * 1. If its element is null, then return null. - * 2. Return the result of running locate a namespace on its element - * using prefix. + * 4. Return the value of result. */ - if (node._element === null) - return null; - return node_locateANamespace(node._element, prefix); - } - else { + return result; + }; + /** + * Records namespace information for the given element and returns the + * default namespace attribute value. + * + * @param node - element node to process + * @param map - namespace prefix map + * @param localPrefixesMap - local prefixes map + */ + XMLSerializerImpl.prototype._recordNamespaceInformation = function (node, map, localPrefixesMap) { + var e_5, _a; /** - * 1. If its parent element is null, then return null. - * 2. Return the result of running locate a namespace on its parent - * element using prefix. + * 1. Let default namespace attr value be null. */ - if (!node._parent || !util_1.Guard.isElementNode(node._parent)) - return null; - return node_locateANamespace(node._parent, prefix); - } -} -exports.node_locateANamespace = node_locateANamespace; -//# sourceMappingURL=NodeAlgorithm.js.map - -/***/ }), -/* 542 */, -/* 543 */, -/* 544 */, -/* 545 */, -/* 546 */, -/* 547 */, -/* 548 */ -/***/ (function(module) { - -const debug = ( - typeof process === 'object' && - process.env && - process.env.NODE_DEBUG && - /\bsemver\b/i.test(process.env.NODE_DEBUG) -) ? (...args) => console.error('SEMVER', ...args) - : () => {} - -module.exports = debug - - -/***/ }), -/* 549 */, -/* 550 */ -/***/ (function(module, exports) { - -exports = module.exports = SemVer - -var debug -/* istanbul ignore next */ -if (typeof process === 'object' && - process.env && - process.env.NODE_DEBUG && - /\bsemver\b/i.test(process.env.NODE_DEBUG)) { - debug = function () { - var args = Array.prototype.slice.call(arguments, 0) - args.unshift('SEMVER') - console.log.apply(console, args) - } -} else { - debug = function () {} -} - -// Note: this is the semver.org version of the spec that it implements -// Not necessarily the package version of this code. -exports.SEMVER_SPEC_VERSION = '2.0.0' - -var MAX_LENGTH = 256 -var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || - /* istanbul ignore next */ 9007199254740991 - -// Max safe segment length for coercion. -var MAX_SAFE_COMPONENT_LENGTH = 16 - -// The actual regexps go on exports.re -var re = exports.re = [] -var src = exports.src = [] -var t = exports.tokens = {} -var R = 0 - -function tok (n) { - t[n] = R++ -} - -// The following Regular Expressions can be used for tokenizing, -// validating, and parsing SemVer version strings. - -// ## Numeric Identifier -// A single `0`, or a non-zero digit followed by zero or more digits. + var defaultNamespaceAttrValue = null; + try { + /** + * 2. Main: For each attribute attr in element's attributes, in the order + * they are specified in the element's attribute list: + */ + for (var _b = __values(node.attributes), _c = _b.next(); !_c.done; _c = _b.next()) { + var attr = _c.value; + /** + * _Note:_ The following conditional steps find namespace prefixes. Only + * attributes in the XMLNS namespace are considered (e.g., attributes made + * to look like namespace declarations via + * setAttribute("xmlns:pretend-prefix", "pretend-namespace") are not + * included). + */ + /** 2.1. Let attribute namespace be the value of attr's namespaceURI value. */ + var attributeNamespace = attr.namespaceURI; + /** 2.2. Let attribute prefix be the value of attr's prefix. */ + var attributePrefix = attr.prefix; + /** 2.3. If the attribute namespace is the XMLNS namespace, then: */ + if (attributeNamespace === infra_1.namespace.XMLNS) { + /** + * 2.3.1. If attribute prefix is null, then attr is a default namespace + * declaration. Set the default namespace attr value to attr's value and + * stop running these steps, returning to Main to visit the next + * attribute. + */ + if (attributePrefix === null) { + defaultNamespaceAttrValue = attr.value; + continue; + /** + * 2.3.2. Otherwise, the attribute prefix is not null and attr is a + * namespace prefix definition. Run the following steps: + */ + } + else { + /** 2.3.2.1. Let prefix definition be the value of attr's localName. */ + var prefixDefinition = attr.localName; + /** 2.3.2.2. Let namespace definition be the value of attr's value. */ + var namespaceDefinition = attr.value; + /** + * 2.3.2.3. If namespace definition is the XML namespace, then stop + * running these steps, and return to Main to visit the next + * attribute. + * + * _Note:_ XML namespace definitions in prefixes are completely + * ignored (in order to avoid unnecessary work when there might be + * prefix conflicts). XML namespaced elements are always handled + * uniformly by prefixing (and overriding if necessary) the element's + * localname with the reserved "xml" prefix. + */ + if (namespaceDefinition === infra_1.namespace.XML) { + continue; + } + /** + * 2.3.2.4. If namespace definition is the empty string (the + * declarative form of having no namespace), then let namespace + * definition be null instead. + */ + if (namespaceDefinition === '') { + namespaceDefinition = null; + } + /** + * 2.3.2.5. If prefix definition is found in map given the namespace + * namespace definition, then stop running these steps, and return to + * Main to visit the next attribute. + * + * _Note:_ This step avoids adding duplicate prefix definitions for + * the same namespace in the map. This has the side-effect of avoiding + * later serialization of duplicate namespace prefix declarations in + * any descendant nodes. + */ + if (map.has(prefixDefinition, namespaceDefinition)) { + continue; + } + /** + * 2.3.2.6. Add the prefix prefix definition to map given namespace + * namespace definition. + */ + map.set(prefixDefinition, namespaceDefinition); + /** + * 2.3.2.7. Add the value of prefix definition as a new key to the + * local prefixes map, with the namespace definition as the key's + * value replacing the value of null with the empty string if + * applicable. + */ + localPrefixesMap[prefixDefinition] = namespaceDefinition || ''; + } + } + } + } + catch (e_5_1) { e_5 = { error: e_5_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_5) throw e_5.error; } + } + /** + * 3. Return the value of default namespace attr value. + * + * _Note:_ The empty string is a legitimate return value and is not + * converted to null. + */ + return defaultNamespaceAttrValue; + }; + /** + * Generates a new prefix for the given namespace. + * + * @param newNamespace - a namespace to generate prefix for + * @param prefixMap - namespace prefix map + * @param prefixIndex - generated namespace prefix index + */ + XMLSerializerImpl.prototype._generatePrefix = function (newNamespace, prefixMap, prefixIndex) { + /** + * 1. Let generated prefix be the concatenation of the string "ns" and the + * current numerical value of prefix index. + * 2. Let the value of prefix index be incremented by one. + * 3. Add to map the generated prefix given the new namespace namespace. + * 4. Return the value of generated prefix. + */ + var generatedPrefix = "ns" + prefixIndex.value; + prefixIndex.value++; + prefixMap.set(generatedPrefix, newNamespace); + return generatedPrefix; + }; + /** + * Produces an XML serialization of an attribute value. + * + * @param value - attribute value + * @param requireWellFormed - whether to check conformance + */ + XMLSerializerImpl.prototype._serializeAttributeValue = function (value, requireWellFormed) { + /** + * From: https://w3c.github.io/DOM-Parsing/#dfn-serializing-an-attribute-value + * + * 1. If the require well-formed flag is set (its value is true), and + * attribute value contains characters that are not matched by the XML Char + * production, then throw an exception; the serialization of this attribute + * value would fail to produce a well-formed element serialization. + */ + if (requireWellFormed && value !== null && !algorithm_1.xml_isLegalChar(value)) { + throw new Error("Invalid characters in attribute value."); + } + /** + * 2. If attribute value is null, then return the empty string. + */ + if (value === null) + return ""; + /** + * 3. Otherwise, attribute value is a string. Return the value of attribute + * value, first replacing any occurrences of the following: + * - "&" with "&" + * - """ with """ + * - "<" with "<" + * - ">" with ">" + * NOTE + * This matches behavior present in browsers, and goes above and beyond the + * grammar requirement in the XML specification's AttValue production by + * also replacing ">" characters. + */ + var result = ""; + for (var i = 0; i < value.length; i++) { + var c = value[i]; + if (c === "\"") + result += """; + else if (c === "&") + result += "&"; + else if (c === "<") + result += "<"; + else if (c === ">") + result += ">"; + else + result += c; + } + return result; + }; + /** + * Produces an XML serialization of an element node. + * + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance + */ + XMLSerializerImpl.prototype._serializeElement = function (node, requireWellFormed) { + var e_6, _a; + /** + * From: https://w3c.github.io/DOM-Parsing/#xml-serializing-an-element-node + * + * 1. If the require well-formed flag is set (its value is true), and this + * node's localName attribute contains the character ":" (U+003A COLON) or + * does not match the XML Name production, then throw an exception; the + * serialization of this node would not be a well-formed element. + */ + if (requireWellFormed && (node.localName.indexOf(":") !== -1 || + !algorithm_1.xml_isName(node.localName))) { + throw new Error("Node local name contains invalid characters (well-formed required)."); + } + /** + * 2. Let markup be the string "<" (U+003C LESS-THAN SIGN). + * 3. Let qualified name be an empty string. + * 4. Let skip end tag be a boolean flag with value false. + * 5. Let ignore namespace definition attribute be a boolean flag with value + * false. + * 6. Given prefix map, copy a namespace prefix map and let map be the + * result. + * 7. Let local prefixes map be an empty map. The map has unique Node prefix + * strings as its keys, with corresponding namespaceURI Node values as the + * map's key values (in this map, the null namespace is represented by the + * empty string). + * + * _Note:_ This map is local to each element. It is used to ensure there + * are no conflicting prefixes should a new namespace prefix attribute need + * to be generated. It is also used to enable skipping of duplicate prefix + * definitions when writing an element's attributes: the map allows the + * algorithm to distinguish between a prefix in the namespace prefix map + * that might be locally-defined (to the current Element) and one that is + * not. + * 8. Let local default namespace be the result of recording the namespace + * information for node given map and local prefixes map. + * + * _Note:_ The above step will update map with any found namespace prefix + * definitions, add the found prefix definitions to the local prefixes map + * and return a local default namespace value defined by a default namespace + * attribute if one exists. Otherwise it returns null. + * 9. Let inherited ns be a copy of namespace. + * 10. Let ns be the value of node's namespaceURI attribute. + */ + var skipEndTag = false; + /** 11. If inherited ns is equal to ns, then: */ + /** + * 11.1. If local default namespace is not null, then set ignore + * namespace definition attribute to true. + * 11.2. If ns is the XML namespace, then append to qualified name the + * concatenation of the string "xml:" and the value of node's localName. + * 11.3. Otherwise, append to qualified name the value of node's + * localName. The node's prefix if it exists, is dropped. + */ + var qualifiedName = node.localName; + /** 11.4. Append the value of qualified name to markup. */ + var markup = "<" + qualifiedName; + /** + * 13. Append to markup the result of the XML serialization of node's + * attributes given map, prefix index, local prefixes map, ignore namespace + * definition attribute flag, and require well-formed flag. + */ + markup += this._serializeAttributes(node, requireWellFormed); + /** + * 14. If ns is the HTML namespace, and the node's list of children is + * empty, and the node's localName matches any one of the following void + * elements: "area", "base", "basefont", "bgsound", "br", "col", "embed", + * "frame", "hr", "img", "input", "keygen", "link", "menuitem", "meta", + * "param", "source", "track", "wbr"; then append the following to markup, + * in the order listed: + * 14.1. " " (U+0020 SPACE); + * 14.2. "/" (U+002F SOLIDUS). + * and set the skip end tag flag to true. + * 15. If ns is not the HTML namespace, and the node's list of children is + * empty, then append "/" (U+002F SOLIDUS) to markup and set the skip end + * tag flag to true. + * 16. Append ">" (U+003E GREATER-THAN SIGN) to markup. + */ + if (node._children.size === 0) { + markup += "/"; + skipEndTag = true; + } + markup += ">"; + /** + * 17. If the value of skip end tag is true, then return the value of markup + * and skip the remaining steps. The node is a leaf-node. + */ + if (skipEndTag) + return markup; + try { + /** + * 18. If ns is the HTML namespace, and the node's localName matches the + * string "template", then this is a template element. Append to markup the + * result of XML serializing a DocumentFragment node given the template + * element's template contents (a DocumentFragment), providing inherited + * ns, map, prefix index, and the require well-formed flag. + * + * _Note:_ This allows template content to round-trip, given the rules for + * parsing XHTML documents. + * + * 19. Otherwise, append to markup the result of running the XML + * serialization algorithm on each of node's children, in tree order, + * providing inherited ns, map, prefix index, and the require well-formed + * flag. + */ + for (var _b = __values(node._children), _c = _b.next(); !_c.done; _c = _b.next()) { + var childNode = _c.value; + markup += this._serializeNode(childNode, requireWellFormed); + } + } + catch (e_6_1) { e_6 = { error: e_6_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_6) throw e_6.error; } + } + /** + * 20. Append the following to markup, in the order listed: + * 20.1. "" (U+003E GREATER-THAN SIGN). + */ + markup += ""; + /** + * 21. Return the value of markup. + */ + return markup; + }; + /** + * Produces an XML serialization of a document node. + * + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance + */ + XMLSerializerImpl.prototype._serializeDocument = function (node, requireWellFormed) { + var e_7, _a; + /** + * If the require well-formed flag is set (its value is true), and this node + * has no documentElement (the documentElement attribute's value is null), + * then throw an exception; the serialization of this node would not be a + * well-formed document. + */ + if (requireWellFormed && node.documentElement === null) { + throw new Error("Missing document element (well-formed required)."); + } + /** + * Otherwise, run the following steps: + * 1. Let serialized document be an empty string. + * 2. For each child child of node, in tree order, run the XML + * serialization algorithm on the child passing along the provided + * arguments, and append the result to serialized document. + * + * _Note:_ This will serialize any number of ProcessingInstruction and + * Comment nodes both before and after the Document's documentElement node, + * including at most one DocumentType node. (Text nodes are not allowed as + * children of the Document.) + * + * 3. Return the value of serialized document. + */ + var serializedDocument = ""; + try { + for (var _b = __values(node._children), _c = _b.next(); !_c.done; _c = _b.next()) { + var childNode = _c.value; + serializedDocument += this._serializeNode(childNode, requireWellFormed); + } + } + catch (e_7_1) { e_7 = { error: e_7_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_7) throw e_7.error; } + } + return serializedDocument; + }; + /** + * Produces an XML serialization of a document fragment node. + * + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance + */ + XMLSerializerImpl.prototype._serializeDocumentFragment = function (node, requireWellFormed) { + var e_8, _a; + /** + * 1. Let markup the empty string. + * 2. For each child child of node, in tree order, run the XML serialization + * algorithm on the child given namespace, prefix map, a reference to prefix + * index, and flag require well-formed. Concatenate the result to markup. + * 3. Return the value of markup. + */ + var markup = ""; + try { + for (var _b = __values(node._children), _c = _b.next(); !_c.done; _c = _b.next()) { + var childNode = _c.value; + markup += this._serializeNode(childNode, requireWellFormed); + } + } + catch (e_8_1) { e_8 = { error: e_8_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_8) throw e_8.error; } + } + return markup; + }; + /** + * Produces an XML serialization of the attributes of an element node. + * + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance + */ + XMLSerializerImpl.prototype._serializeAttributes = function (node, requireWellFormed) { + var e_9, _a; + /** + * 1. Let result be the empty string. + * 2. Let localname set be a new empty namespace localname set. This + * localname set will contain tuples of unique attribute namespaceURI and + * localName pairs, and is populated as each attr is processed. This set is + * used to [optionally] enforce the well-formed constraint that an element + * cannot have two attributes with the same namespaceURI and localName. + * This can occur when two otherwise identical attributes on the same + * element differ only by their prefix values. + */ + var result = ""; + var localNameSet = requireWellFormed ? {} : undefined; + try { + /** + * 3. Loop: For each attribute attr in element's attributes, in the order + * they are specified in the element's attribute list: + */ + for (var _b = __values(node.attributes), _c = _b.next(); !_c.done; _c = _b.next()) { + var attr = _c.value; + /** + * 3.1. If the require well-formed flag is set (its value is true), and the + * localname set contains a tuple whose values match those of a new tuple + * consisting of attr's namespaceURI attribute and localName attribute, + * then throw an exception; the serialization of this attr would fail to + * produce a well-formed element serialization. + */ + if (requireWellFormed && localNameSet && (attr.localName in localNameSet)) { + throw new Error("Element contains duplicate attributes (well-formed required)."); + } + /** + * 3.2. Create a new tuple consisting of attr's namespaceURI attribute and + * localName attribute, and add it to the localname set. + * 3.3. Let attribute namespace be the value of attr's namespaceURI value. + * 3.4. Let candidate prefix be null. + */ + if (requireWellFormed && localNameSet) + localNameSet[attr.localName] = true; + /** 3.5. If attribute namespace is not null, then run these sub-steps: */ + /** + * 3.6. Append a " " (U+0020 SPACE) to result. + * 3.7. If candidate prefix is not null, then append to result the + * concatenation of candidate prefix with ":" (U+003A COLON). + */ + /** + * 3.8. If the require well-formed flag is set (its value is true), and + * this attr's localName attribute contains the character + * ":" (U+003A COLON) or does not match the XML Name production or + * equals "xmlns" and attribute namespace is null, then throw an + * exception; the serialization of this attr would not be a + * well-formed attribute. + */ + if (requireWellFormed && (attr.localName.indexOf(":") !== -1 || + !algorithm_1.xml_isName(attr.localName))) { + throw new Error("Attribute local name contains invalid characters (well-formed required)."); + } + /** + * 3.9. Append the following strings to result, in the order listed: + * 3.9.1. The value of attr's localName; + * 3.9.2. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); + * 3.9.3. The result of serializing an attribute value given attr's value + * attribute and the require well-formed flag as input; + * 3.9.4. """ (U+0022 QUOTATION MARK). + */ + result += " " + attr.localName + "=\"" + + this._serializeAttributeValue(attr.value, requireWellFormed) + "\""; + } + } + catch (e_9_1) { e_9 = { error: e_9_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_9) throw e_9.error; } + } + /** + * 4. Return the value of result. + */ + return result; + }; + XMLSerializerImpl._VoidElementNames = new Set(['area', 'base', 'basefont', + 'bgsound', 'br', 'col', 'embed', 'frame', 'hr', 'img', 'input', 'keygen', + 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr']); + return XMLSerializerImpl; +}()); +exports.XMLSerializerImpl = XMLSerializerImpl; +//# sourceMappingURL=XMLSerializerImpl.js.map -tok('NUMERICIDENTIFIER') -src[t.NUMERICIDENTIFIER] = '0|[1-9]\\d*' -tok('NUMERICIDENTIFIERLOOSE') -src[t.NUMERICIDENTIFIERLOOSE] = '[0-9]+' +/***/ }), -// ## Non-numeric Identifier -// Zero or more digits, followed by a letter or hyphen, and then zero or -// more letters, digits, or hyphens. +/***/ 7119: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -tok('NONNUMERICIDENTIFIER') -src[t.NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*' +"use strict"; -// ## Main Version -// Three dot-separated numeric identifiers. +Object.defineProperty(exports, "__esModule", ({ value: true })); +// Export classes +var XMLSerializerImpl_1 = __nccwpck_require__(5039); +exports.XMLSerializer = XMLSerializerImpl_1.XMLSerializerImpl; +//# sourceMappingURL=index.js.map -tok('MAINVERSION') -src[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\.' + - '(' + src[t.NUMERICIDENTIFIER] + ')\\.' + - '(' + src[t.NUMERICIDENTIFIER] + ')' +/***/ }), -tok('MAINVERSIONLOOSE') -src[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + - '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + - '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')' +/***/ 5483: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -// ## Pre-release Version Identifier -// A numeric identifier, or a non-numeric identifier. +"use strict"; -tok('PRERELEASEIDENTIFIER') -src[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] + - '|' + src[t.NONNUMERICIDENTIFIER] + ')' - -tok('PRERELEASEIDENTIFIERLOOSE') -src[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] + - '|' + src[t.NONNUMERICIDENTIFIER] + ')' - -// ## Pre-release Version -// Hyphen, followed by one or more dot-separated pre-release version -// identifiers. - -tok('PRERELEASE') -src[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] + - '(?:\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))' - -tok('PRERELEASELOOSE') -src[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] + - '(?:\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))' - -// ## Build Metadata Identifier -// Any combination of digits, letters, or hyphens. - -tok('BUILDIDENTIFIER') -src[t.BUILDIDENTIFIER] = '[0-9A-Za-z-]+' +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Guard_1 = __nccwpck_require__(6862); +/** + * Contains type casts for DOM objects. + */ +var Cast = /** @class */ (function () { + function Cast() { + } + /** + * Casts the given object to a `Node`. + * + * @param a - the object to cast + */ + Cast.asNode = function (a) { + if (Guard_1.Guard.isNode(a)) { + return a; + } + else { + throw new Error("Invalid object. Node expected."); + } + }; + return Cast; +}()); +exports.Cast = Cast; +//# sourceMappingURL=Cast.js.map -// ## Build Metadata -// Plus sign, followed by one or more period-separated build metadata -// identifiers. +/***/ }), -tok('BUILD') -src[t.BUILD] = '(?:\\+(' + src[t.BUILDIDENTIFIER] + - '(?:\\.' + src[t.BUILDIDENTIFIER] + ')*))' +/***/ 8392: +/***/ ((__unused_webpack_module, exports) => { -// ## Full Version String -// A main version, followed optionally by a pre-release version and -// build metadata. +"use strict"; -// Note that the only major, minor, patch, and pre-release sections of -// the version string are capturing groups. The build metadata is not a -// capturing group, because it should not ever be used in version -// comparison. +Object.defineProperty(exports, "__esModule", ({ value: true })); +var EmptySet = /** @class */ (function () { + function EmptySet() { + } + Object.defineProperty(EmptySet.prototype, "size", { + get: function () { + return 0; + }, + enumerable: true, + configurable: true + }); + EmptySet.prototype.add = function (value) { + throw new Error("Cannot add to an empty set."); + }; + EmptySet.prototype.clear = function () { + // no-op + }; + EmptySet.prototype.delete = function (value) { + return false; + }; + EmptySet.prototype.forEach = function (callbackfn, thisArg) { + // no-op + }; + EmptySet.prototype.has = function (value) { + return false; + }; + EmptySet.prototype[Symbol.iterator] = function () { + return new EmptySetIterator(); + }; + EmptySet.prototype.entries = function () { + return new EmptySetIterator(); + }; + EmptySet.prototype.keys = function () { + return new EmptySetIterator(); + }; + EmptySet.prototype.values = function () { + return new EmptySetIterator(); + }; + Object.defineProperty(EmptySet.prototype, Symbol.toStringTag, { + get: function () { + return "EmptySet"; + }, + enumerable: true, + configurable: true + }); + return EmptySet; +}()); +exports.EmptySet = EmptySet; +var EmptySetIterator = /** @class */ (function () { + function EmptySetIterator() { + } + EmptySetIterator.prototype[Symbol.iterator] = function () { + return this; + }; + EmptySetIterator.prototype.next = function () { + return { done: true, value: null }; + }; + return EmptySetIterator; +}()); +//# sourceMappingURL=EmptySet.js.map -tok('FULL') -tok('FULLPLAIN') -src[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] + - src[t.PRERELEASE] + '?' + - src[t.BUILD] + '?' +/***/ }), -src[t.FULL] = '^' + src[t.FULLPLAIN] + '$' +/***/ 6862: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. -// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty -// common in the npm registry. -tok('LOOSEPLAIN') -src[t.LOOSEPLAIN] = '[v=\\s]*' + src[t.MAINVERSIONLOOSE] + - src[t.PRERELEASELOOSE] + '?' + - src[t.BUILD] + '?' +"use strict"; -tok('LOOSE') -src[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$' +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7305); +/** + * Contains user-defined type guards for DOM objects. + */ +var Guard = /** @class */ (function () { + function Guard() { + } + /** + * Determines if the given object is a `Node`. + * + * @param a - the object to check + */ + Guard.isNode = function (a) { + return (!!a && a._nodeType !== undefined); + }; + /** + * Determines if the given object is a `Document`. + * + * @param a - the object to check + */ + Guard.isDocumentNode = function (a) { + return (Guard.isNode(a) && a._nodeType === interfaces_1.NodeType.Document); + }; + /** + * Determines if the given object is a `DocumentType`. + * + * @param a - the object to check + */ + Guard.isDocumentTypeNode = function (a) { + return (Guard.isNode(a) && a._nodeType === interfaces_1.NodeType.DocumentType); + }; + /** + * Determines if the given object is a `DocumentFragment`. + * + * @param a - the object to check + */ + Guard.isDocumentFragmentNode = function (a) { + return (Guard.isNode(a) && a._nodeType === interfaces_1.NodeType.DocumentFragment); + }; + /** + * Determines if the given object is a `Attr`. + * + * @param a - the object to check + */ + Guard.isAttrNode = function (a) { + return (Guard.isNode(a) && a._nodeType === interfaces_1.NodeType.Attribute); + }; + /** + * Determines if the given node is a `CharacterData` node. + * + * @param a - the object to check + */ + Guard.isCharacterDataNode = function (a) { + if (!Guard.isNode(a)) + return false; + var type = a._nodeType; + return (type === interfaces_1.NodeType.Text || + type === interfaces_1.NodeType.ProcessingInstruction || + type === interfaces_1.NodeType.Comment || + type === interfaces_1.NodeType.CData); + }; + /** + * Determines if the given object is a `Text` or a `CDATASection`. + * + * @param a - the object to check + */ + Guard.isTextNode = function (a) { + return (Guard.isNode(a) && (a._nodeType === interfaces_1.NodeType.Text || a._nodeType === interfaces_1.NodeType.CData)); + }; + /** + * Determines if the given object is a `Text`. + * + * @param a - the object to check + */ + Guard.isExclusiveTextNode = function (a) { + return (Guard.isNode(a) && a._nodeType === interfaces_1.NodeType.Text); + }; + /** + * Determines if the given object is a `CDATASection`. + * + * @param a - the object to check + */ + Guard.isCDATASectionNode = function (a) { + return (Guard.isNode(a) && a._nodeType === interfaces_1.NodeType.CData); + }; + /** + * Determines if the given object is a `Comment`. + * + * @param a - the object to check + */ + Guard.isCommentNode = function (a) { + return (Guard.isNode(a) && a._nodeType === interfaces_1.NodeType.Comment); + }; + /** + * Determines if the given object is a `ProcessingInstruction`. + * + * @param a - the object to check + */ + Guard.isProcessingInstructionNode = function (a) { + return (Guard.isNode(a) && a._nodeType === interfaces_1.NodeType.ProcessingInstruction); + }; + /** + * Determines if the given object is an `Element`. + * + * @param a - the object to check + */ + Guard.isElementNode = function (a) { + return (Guard.isNode(a) && a._nodeType === interfaces_1.NodeType.Element); + }; + /** + * Determines if the given object is a custom `Element`. + * + * @param a - the object to check + */ + Guard.isCustomElementNode = function (a) { + return (Guard.isElementNode(a) && a._customElementState === "custom"); + }; + /** + * Determines if the given object is a `ShadowRoot`. + * + * @param a - the object to check + */ + Guard.isShadowRoot = function (a) { + return (!!a && a.host !== undefined); + }; + /** + * Determines if the given object is a `MouseEvent`. + * + * @param a - the object to check + */ + Guard.isMouseEvent = function (a) { + return (!!a && a.screenX !== undefined && a.screenY != undefined); + }; + /** + * Determines if the given object is a slotable. + * + * Element and Text nodes are slotables. A slotable has an associated name + * (a string). + * + * @param a - the object to check + */ + Guard.isSlotable = function (a) { + return (!!a && a._name !== undefined && a._assignedSlot !== undefined && + (Guard.isTextNode(a) || Guard.isElementNode(a))); + }; + /** + * Determines if the given object is a slot. + * + * @param a - the object to check + */ + Guard.isSlot = function (a) { + return (!!a && a._name !== undefined && a._assignedNodes !== undefined && + Guard.isElementNode(a)); + }; + /** + * Determines if the given object is a `Window`. + * + * @param a - the object to check + */ + Guard.isWindow = function (a) { + return (!!a && a.navigator !== undefined); + }; + /** + * Determines if the given object is an `EventListener`. + * + * @param a - the object to check + */ + Guard.isEventListener = function (a) { + return (!!a && a.handleEvent !== undefined); + }; + /** + * Determines if the given object is a `RegisteredObserver`. + * + * @param a - the object to check + */ + Guard.isRegisteredObserver = function (a) { + return (!!a && a.observer !== undefined && a.options !== undefined); + }; + /** + * Determines if the given object is a `TransientRegisteredObserver`. + * + * @param a - the object to check + */ + Guard.isTransientRegisteredObserver = function (a) { + return (!!a && a.source !== undefined && Guard.isRegisteredObserver(a)); + }; + return Guard; +}()); +exports.Guard = Guard; +//# sourceMappingURL=Guard.js.map -tok('GTLT') -src[t.GTLT] = '((?:<|>)?=?)' +/***/ }), -// Something like "2.*" or "1.2.x". -// Note that "x.x" is a valid xRange identifer, meaning "any version" -// Only the first item is strictly required. -tok('XRANGEIDENTIFIERLOOSE') -src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' -tok('XRANGEIDENTIFIER') -src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\*' +/***/ 5282: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -tok('XRANGEPLAIN') -src[t.XRANGEPLAIN] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' + - '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + - '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + - '(?:' + src[t.PRERELEASE] + ')?' + - src[t.BUILD] + '?' + - ')?)?' +"use strict"; -tok('XRANGEPLAINLOOSE') -src[t.XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + - '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + - '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + - '(?:' + src[t.PRERELEASELOOSE] + ')?' + - src[t.BUILD] + '?' + - ')?)?' +Object.defineProperty(exports, "__esModule", ({ value: true })); +var Cast_1 = __nccwpck_require__(5483); +exports.Cast = Cast_1.Cast; +var Guard_1 = __nccwpck_require__(6862); +exports.Guard = Guard_1.Guard; +var EmptySet_1 = __nccwpck_require__(8392); +exports.EmptySet = EmptySet_1.EmptySet; +//# sourceMappingURL=index.js.map -tok('XRANGE') -src[t.XRANGE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAIN] + '$' -tok('XRANGELOOSE') -src[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAINLOOSE] + '$' +/***/ }), -// Coercion. -// Extract anything that could conceivably be a part of a valid semver -tok('COERCE') -src[t.COERCE] = '(^|[^\\d])' + - '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + - '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + - '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + - '(?:$|[^\\d])' -tok('COERCERTL') -re[t.COERCERTL] = new RegExp(src[t.COERCE], 'g') +/***/ 8585: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -// Tilde ranges. -// Meaning is "reasonably at or greater than" -tok('LONETILDE') -src[t.LONETILDE] = '(?:~>?)' +"use strict"; -tok('TILDETRIM') -src[t.TILDETRIM] = '(\\s*)' + src[t.LONETILDE] + '\\s+' -re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g') -var tildeTrimReplace = '$1~' +Object.defineProperty(exports, "__esModule", ({ value: true })); +var CodePoints_1 = __nccwpck_require__(8548); +/** + * Base-64 encodes the given string. + * + * @param input - a string + */ +function forgivingBase64Encode(input) { + /** + * To forgiving-base64 encode given a byte sequence data, apply the base64 + * algorithm defined in section 4 of RFC 4648 to data and return the result. + * [RFC4648] + */ + return Buffer.from(input).toString('base64'); +} +exports.forgivingBase64Encode = forgivingBase64Encode; +/** + * Decodes a base-64 string. + * + * @param input - a string + */ +function forgivingBase64Decode(input) { + if (input === "") + return ""; + /** + * 1. Remove all ASCII whitespace from data. + */ + input = input.replace(CodePoints_1.ASCIIWhiteSpace, ''); + /** + * 2. If data’s length divides by 4 leaving no remainder, then: + * 2.1. If data ends with one or two U+003D (=) code points, then remove them from data. + */ + if (input.length % 4 === 0) { + if (input.endsWith("==")) { + input = input.substr(0, input.length - 2); + } + else if (input.endsWith("=")) { + input = input.substr(0, input.length - 1); + } + } + /** + * 3. If data’s length divides by 4 leaving a remainder of 1, then return failure. + */ + if (input.length % 4 === 1) + return null; + /** + * 4. If data contains a code point that is not one of + * - U+002B (+) + * - U+002F (/) + * - ASCII alphanumeric + * then return failure. + */ + if (!/[0-9A-Za-z+/]/.test(input)) + return null; + /** + * 5. Let output be an empty byte sequence. + * 6. Let buffer be an empty buffer that can have bits appended to it. + * 7. Let position be a position variable for data, initially pointing at the + * start of data. + * 8. While position does not point past the end of data: + * 8.1. Find the code point pointed to by position in the second column of + * Table 1: The Base 64 Alphabet of RFC 4648. Let n be the number given in the + * first cell of the same row. [RFC4648] + * 8.2. Append the six bits corresponding to n, most significant bit first, + * to buffer. + * 8.3. If buffer has accumulated 24 bits, interpret them as three 8-bit + * big-endian numbers. Append three bytes with values equal to those numbers + * to output, in the same order, and then empty buffer. + * 8.4. Advance position by 1. + * 9. If buffer is not empty, it contains either 12 or 18 bits. If it contains + * 12 bits, then discard the last four and interpret the remaining eight as an + * 8-bit big-endian number. If it contains 18 bits, then discard the last two + * and interpret the remaining 16 as two 8-bit big-endian numbers. Append the + * one or two bytes with values equal to those one or two numbers to output, + * in the same order. + * 10. Return output. + */ + return Buffer.from(input, 'base64').toString('utf8'); +} +exports.forgivingBase64Decode = forgivingBase64Decode; +//# sourceMappingURL=Base64.js.map -tok('TILDE') -src[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$' -tok('TILDELOOSE') -src[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$' +/***/ }), -// Caret ranges. -// Meaning is "at least and backwards compatible with" -tok('LONECARET') -src[t.LONECARET] = '(?:\\^)' +/***/ 2460: +/***/ ((__unused_webpack_module, exports) => { -tok('CARETTRIM') -src[t.CARETTRIM] = '(\\s*)' + src[t.LONECARET] + '\\s+' -re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g') -var caretTrimReplace = '$1^' +"use strict"; -tok('CARET') -src[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$' -tok('CARETLOOSE') -src[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$' +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Determines if the given number is an ASCII byte. + * + * @param byte - a byte + */ +function isASCIIByte(byte) { + /** + * An ASCII byte is a byte in the range 0x00 (NUL) to 0x7F (DEL), inclusive. + */ + return byte >= 0x00 && byte <= 0x7F; +} +exports.isASCIIByte = isASCIIByte; +//# sourceMappingURL=Byte.js.map -// A simple gt/lt/eq thing, or just "" to indicate "any version" -tok('COMPARATORLOOSE') -src[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\s*(' + src[t.LOOSEPLAIN] + ')$|^$' -tok('COMPARATOR') -src[t.COMPARATOR] = '^' + src[t.GTLT] + '\\s*(' + src[t.FULLPLAIN] + ')$|^$' +/***/ }), -// An expression to strip any whitespace between the gtlt and the thing -// it modifies, so that `> 1.2.3` ==> `>1.2.3` -tok('COMPARATORTRIM') -src[t.COMPARATORTRIM] = '(\\s*)' + src[t.GTLT] + - '\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')' +/***/ 1627: +/***/ (function(__unused_webpack_module, exports) { -// this one has to use the /g flag -re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g') -var comparatorTrimReplace = '$1$2$3' +"use strict"; -// Something like `1.2.3 - 1.2.4` -// Note that these all use the loose form, because they'll be -// checked against either the strict or loose comparator form -// later. -tok('HYPHENRANGE') -src[t.HYPHENRANGE] = '^\\s*(' + src[t.XRANGEPLAIN] + ')' + - '\\s+-\\s+' + - '(' + src[t.XRANGEPLAIN] + ')' + - '\\s*$' - -tok('HYPHENRANGELOOSE') -src[t.HYPHENRANGELOOSE] = '^\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' + - '\\s+-\\s+' + - '(' + src[t.XRANGEPLAINLOOSE] + ')' + - '\\s*$' - -// Star ranges basically just allow anything at all. -tok('STAR') -src[t.STAR] = '(<|>)?=?\\s*\\*' - -// Compile to actual regexp objects. -// All are flag-free, unless they were created above with a flag. -for (var i = 0; i < R; i++) { - debug(i, src[i]) - if (!re[i]) { - re[i] = new RegExp(src[i]) - } +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spread = (this && this.__spread) || function () { + for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); + return ar; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Returns the count of bytes in a sequence. + * + * @param list - a byte sequence + */ +function length(list) { + /** + * A byte sequence’s length is the number of bytes it contains. + */ + return list.length; } - -exports.parse = parse -function parse (version, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false +exports.length = length; +/** + * Converts each byte to lowercase. + * + * @param list - a byte sequence + */ +function byteLowercase(list) { + /** + * To byte-lowercase a byte sequence, increase each byte it contains, in the + * range 0x41 (A) to 0x5A (Z), inclusive, by 0x20. + */ + for (var i = 0; i < list.length; i++) { + var c = list[i]; + if (c >= 0x41 && c <= 0x5A) { + list[i] = c + 0x20; + } } - } - - if (version instanceof SemVer) { - return version - } - - if (typeof version !== 'string') { - return null - } - - if (version.length > MAX_LENGTH) { - return null - } - - var r = options.loose ? re[t.LOOSE] : re[t.FULL] - if (!r.test(version)) { - return null - } - - try { - return new SemVer(version, options) - } catch (er) { - return null - } } - -exports.valid = valid -function valid (version, options) { - var v = parse(version, options) - return v ? v.version : null +exports.byteLowercase = byteLowercase; +/** + * Converts each byte to uppercase. + * + * @param list - a byte sequence + */ +function byteUppercase(list) { + /** + * To byte-uppercase a byte sequence, subtract each byte it contains, in the + * range 0x61 (a) to 0x7A (z), inclusive, by 0x20. + */ + for (var i = 0; i < list.length; i++) { + var c = list[i]; + if (c >= 0x61 && c <= 0x7A) { + list[i] = c - 0x20; + } + } } - -exports.clean = clean -function clean (version, options) { - var s = parse(version.trim().replace(/^[=v]+/, ''), options) - return s ? s.version : null +exports.byteUppercase = byteUppercase; +/** + * Compares two byte sequences. + * + * @param listA - a byte sequence + * @param listB - a byte sequence + */ +function byteCaseInsensitiveMatch(listA, listB) { + /** + * A byte sequence A is a byte-case-insensitive match for a byte sequence B, + * if the byte-lowercase of A is the byte-lowercase of B. + */ + if (listA.length !== listB.length) + return false; + for (var i = 0; i < listA.length; i++) { + var a = listA[i]; + var b = listB[i]; + if (a >= 0x41 && a <= 0x5A) + a += 0x20; + if (b >= 0x41 && b <= 0x5A) + b += 0x20; + if (a !== b) + return false; + } + return true; } - -exports.SemVer = SemVer - -function SemVer (version, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false +exports.byteCaseInsensitiveMatch = byteCaseInsensitiveMatch; +/** + * Determines if `listA` starts with `listB`. + * + * @param listA - a byte sequence + * @param listB - a byte sequence + */ +function startsWith(listA, listB) { + /** + * 1. Let i be 0. + * 2. While true: + * 2.1. Let aByte be the ith byte of a if i is less than a’s length; otherwise null. + * 2.3. Let bByte be the ith byte of b if i is less than b’s length; otherwise null. + * 2.4. If bByte is null, then return true. + * 2.5. Return false if aByte is not bByte. + * 2.6. Set i to i + 1. + */ + var i = 0; + while (true) { + if (i >= listA.length) + return false; + if (i >= listB.length) + return true; + if (listA[i] !== listB[i]) + return false; + i++; } - } - if (version instanceof SemVer) { - if (version.loose === options.loose) { - return version - } else { - version = version.version +} +exports.startsWith = startsWith; +/** + * Determines if `listA` is less than `listB`. + * + * @param listA - a byte sequence + * @param listB - a byte sequence + */ +function byteLessThan(listA, listB) { + /** + * 1. If b starts with a, then return false. + * 2. If a starts with b, then return true. + * 3. Let n be the smallest index such that the nth byte of a is different + * from the nth byte of b. (There has to be such an index, since neither byte + * sequence starts with the other.) + * 4. If the nth byte of a is less than the nth byte of b, then return true. + * 5. Return false. + */ + var i = 0; + while (true) { + if (i >= listA.length) + return false; + if (i >= listB.length) + return true; + var a = listA[i]; + var b = listB[i]; + if (a < b) + return true; + else if (a > b) + return false; + i++; } - } else if (typeof version !== 'string') { - throw new TypeError('Invalid Version: ' + version) - } - - if (version.length > MAX_LENGTH) { - throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') - } - - if (!(this instanceof SemVer)) { - return new SemVer(version, options) - } - - debug('SemVer', version, options) - this.options = options - this.loose = !!options.loose +} +exports.byteLessThan = byteLessThan; +/** + * Decodes a byte sequence into a string. + * + * @param list - a byte sequence + */ +function isomorphicDecode(list) { + /** + * To isomorphic decode a byte sequence input, return a string whose length is + * equal to input’s length and whose code points have the same values as + * input’s bytes, in the same order. + */ + return String.fromCodePoint.apply(String, __spread(list)); +} +exports.isomorphicDecode = isomorphicDecode; +//# sourceMappingURL=ByteSequence.js.map - var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) +/***/ }), - if (!m) { - throw new TypeError('Invalid Version: ' + version) - } +/***/ 8548: +/***/ ((__unused_webpack_module, exports) => { - this.raw = version +"use strict"; - // these are actually numbers - this.major = +m[1] - this.minor = +m[2] - this.patch = +m[3] +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * A surrogate is a code point that is in the range U+D800 to U+DFFF, inclusive. + */ +exports.Surrogate = /[\uD800-\uDFFF]/; +/** + * A scalar value is a code point that is not a surrogate. + */ +exports.ScalarValue = /[\uD800-\uDFFF]/; +/** + * A noncharacter is a code point that is in the range U+FDD0 to U+FDEF, + * inclusive, or U+FFFE, U+FFFF, U+1FFFE, U+1FFFF, U+2FFFE, U+2FFFF, U+3FFFE, + * U+3FFFF, U+4FFFE, U+4FFFF, U+5FFFE, U+5FFFF, U+6FFFE, U+6FFFF, U+7FFFE, + * U+7FFFF, U+8FFFE, U+8FFFF, U+9FFFE, U+9FFFF, U+AFFFE, U+AFFFF, U+BFFFE, + * U+BFFFF, U+CFFFE, U+CFFFF, U+DFFFE, U+DFFFF, U+EFFFE, U+EFFFF, U+FFFFE, + * U+FFFFF, U+10FFFE, or U+10FFFF. + */ +exports.NonCharacter = /[\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]/; +/** + * An ASCII code point is a code point in the range U+0000 NULL to U+007F + * DELETE, inclusive. + */ +exports.ASCIICodePoint = /[\u0000-\u007F]/; +/** + * An ASCII tab or newline is U+0009 TAB, U+000A LF, or U+000D CR. + */ +exports.ASCIITabOrNewLine = /[\t\n\r]/; +/** + * ASCII whitespace is U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, or + * U+0020 SPACE. + */ +exports.ASCIIWhiteSpace = /[\t\n\f\r ]/; +/** + * A C0 control is a code point in the range U+0000 NULL to U+001F + * INFORMATION SEPARATOR ONE, inclusive. + */ +exports.C0Control = /[\u0000-\u001F]/; +/** + * A C0 control or space is a C0 control or U+0020 SPACE. + */ +exports.C0ControlOrSpace = /[\u0000-\u001F ]/; +/** + * A control is a C0 control or a code point in the range U+007F DELETE to + * U+009F APPLICATION PROGRAM COMMAND, inclusive. + */ +exports.Control = /[\u0000-\u001F\u007F-\u009F]/; +/** + * An ASCII digit is a code point in the range U+0030 (0) to U+0039 (9), + * inclusive. + */ +exports.ASCIIDigit = /[0-9]/; +/** + * An ASCII upper hex digit is an ASCII digit or a code point in the range + * U+0041 (A) to U+0046 (F), inclusive. + */ +exports.ASCIIUpperHexDigit = /[0-9A-F]/; +/** + * An ASCII lower hex digit is an ASCII digit or a code point in the range + * U+0061 (a) to U+0066 (f), inclusive. + */ +exports.ASCIILowerHexDigit = /[0-9a-f]/; +/** + * An ASCII hex digit is an ASCII upper hex digit or ASCII lower hex digit. + */ +exports.ASCIIHexDigit = /[0-9A-Fa-f]/; +/** + * An ASCII upper alpha is a code point in the range U+0041 (A) to U+005A (Z), + * inclusive. + */ +exports.ASCIIUpperAlpha = /[A-Z]/; +/** + * An ASCII lower alpha is a code point in the range U+0061 (a) to U+007A (z), + * inclusive. + */ +exports.ASCIILowerAlpha = /[a-z]/; +/** + * An ASCII alpha is an ASCII upper alpha or ASCII lower alpha. + */ +exports.ASCIIAlpha = /[A-Za-z]/; +/** + * An ASCII alphanumeric is an ASCII digit or ASCII alpha. + */ +exports.ASCIIAlphanumeric = /[0-9A-Za-z]/; +//# sourceMappingURL=CodePoints.js.map - if (this.major > MAX_SAFE_INTEGER || this.major < 0) { - throw new TypeError('Invalid major version') - } +/***/ }), - if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { - throw new TypeError('Invalid minor version') - } +/***/ 9387: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { - throw new TypeError('Invalid patch version') - } +"use strict"; - // numberify any prerelease numeric ids - if (!m[4]) { - this.prerelease = [] - } else { - this.prerelease = m[4].split('.').map(function (id) { - if (/^[0-9]+$/.test(id)) { - var num = +id - if (num >= 0 && num < MAX_SAFE_INTEGER) { - return num +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; } - } - return id - }) - } - - this.build = m[5] ? m[5].split('.') : [] - this.format() + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var util_1 = __nccwpck_require__(6195); +/** + * Parses the given byte sequence representing a JSON string into an object. + * + * @param bytes - a byte sequence + */ +function parseJSONFromBytes(bytes) { + /** + * 1. Let jsonText be the result of running UTF-8 decode on bytes. [ENCODING] + * 2. Return ? Call(%JSONParse%, undefined, « jsonText »). + */ + var jsonText = util_1.utf8Decode(bytes); + return JSON.parse.call(undefined, jsonText); } - -SemVer.prototype.format = function () { - this.version = this.major + '.' + this.minor + '.' + this.patch - if (this.prerelease.length) { - this.version += '-' + this.prerelease.join('.') - } - return this.version +exports.parseJSONFromBytes = parseJSONFromBytes; +/** + * Serialize the given JavaScript value into a byte sequence. + * + * @param value - a JavaScript value + */ +function serializeJSONToBytes(value) { + /** + * 1. Let jsonString be ? Call(%JSONStringify%, undefined, « value »). + * 2. Return the result of running UTF-8 encode on jsonString. [ENCODING] + */ + var jsonString = JSON.stringify.call(undefined, value); + return util_1.utf8Encode(jsonString); } - -SemVer.prototype.toString = function () { - return this.version +exports.serializeJSONToBytes = serializeJSONToBytes; +/** + * Parses the given JSON string into a Realm-independent JavaScript value. + * + * @param jsonText - a JSON string + */ +function parseJSONIntoInfraValues(jsonText) { + /** + * 1. Let jsValue be ? Call(%JSONParse%, undefined, « jsonText »). + * 2. Return the result of converting a JSON-derived JavaScript value to an + * Infra value, given jsValue. + */ + var jsValue = JSON.parse.call(undefined, jsonText); + return convertAJSONDerivedJavaScriptValueToAnInfraValue(jsValue); } - -SemVer.prototype.compare = function (other) { - debug('SemVer.compare', this.version, this.options, other) - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } - - return this.compareMain(other) || this.comparePre(other) +exports.parseJSONIntoInfraValues = parseJSONIntoInfraValues; +/** + * Parses the value into a Realm-independent JavaScript value. + * + * @param jsValue - a JavaScript value + */ +function convertAJSONDerivedJavaScriptValueToAnInfraValue(jsValue) { + var e_1, _a; + /** + * 1. If Type(jsValue) is Null, String, or Number, then return jsValue. + */ + if (jsValue === null || util_1.isString(jsValue) || util_1.isNumber(jsValue)) + return jsValue; + /** + * 2. If IsArray(jsValue) is true, then: + * 2.1. Let result be an empty list. + * 2.2. Let length be ! ToLength(! Get(jsValue, "length")). + * 2.3. For each index of the range 0 to length − 1, inclusive: + * 2.3.1. Let indexName be ! ToString(index). + * 2.3.2. Let jsValueAtIndex be ! Get(jsValue, indexName). + * 2.3.3. Let infraValueAtIndex be the result of converting a JSON-derived + * JavaScript value to an Infra value, given jsValueAtIndex. + * 2.3.4. Append infraValueAtIndex to result. + * 2.8. Return result. + */ + if (util_1.isArray(jsValue)) { + var result = new Array(); + try { + for (var jsValue_1 = __values(jsValue), jsValue_1_1 = jsValue_1.next(); !jsValue_1_1.done; jsValue_1_1 = jsValue_1.next()) { + var jsValueAtIndex = jsValue_1_1.value; + result.push(convertAJSONDerivedJavaScriptValueToAnInfraValue(jsValueAtIndex)); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (jsValue_1_1 && !jsValue_1_1.done && (_a = jsValue_1.return)) _a.call(jsValue_1); + } + finally { if (e_1) throw e_1.error; } + } + return result; + } + else if (util_1.isObject(jsValue)) { + /** + * 3. Let result be an empty ordered map. + * 4. For each key of ! jsValue.[[OwnPropertyKeys]](): + * 4.1. Let jsValueAtKey be ! Get(jsValue, key). + * 4.2. Let infraValueAtKey be the result of converting a JSON-derived + * JavaScript value to an Infra value, given jsValueAtKey. + * 4.3. Set result[key] to infraValueAtKey. + * 5. Return result. + */ + var result = new Map(); + for (var key in jsValue) { + /* istanbul ignore else */ + if (jsValue.hasOwnProperty(key)) { + var jsValueAtKey = jsValue[key]; + result.set(key, convertAJSONDerivedJavaScriptValueToAnInfraValue(jsValueAtKey)); + } + } + return result; + } + /* istanbul ignore next */ + return jsValue; } +exports.convertAJSONDerivedJavaScriptValueToAnInfraValue = convertAJSONDerivedJavaScriptValueToAnInfraValue; +//# sourceMappingURL=JSON.js.map -SemVer.prototype.compareMain = function (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } +/***/ }), - return compareIdentifiers(this.major, other.major) || - compareIdentifiers(this.minor, other.minor) || - compareIdentifiers(this.patch, other.patch) -} - -SemVer.prototype.comparePre = function (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } +/***/ 340: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - // NOT having a prerelease is > having one - if (this.prerelease.length && !other.prerelease.length) { - return -1 - } else if (!this.prerelease.length && other.prerelease.length) { - return 1 - } else if (!this.prerelease.length && !other.prerelease.length) { - return 0 - } +"use strict"; - var i = 0 - do { - var a = this.prerelease[i] - var b = other.prerelease[i] - debug('prerelease compare', i, a, b) - if (a === undefined && b === undefined) { - return 0 - } else if (b === undefined) { - return 1 - } else if (a === undefined) { - return -1 - } else if (a === b) { - continue - } else { - return compareIdentifiers(a, b) +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } - } while (++i) -} - -SemVer.prototype.compareBuild = function (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } - - var i = 0 - do { - var a = this.build[i] - var b = other.build[i] - debug('prerelease compare', i, a, b) - if (a === undefined && b === undefined) { - return 0 - } else if (b === undefined) { - return 1 - } else if (a === undefined) { - return -1 - } else if (a === b) { - continue - } else { - return compareIdentifiers(a, b) +}; +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } - } while (++i) -} - -// preminor will bump the version up to the next minor release, and immediately -// down to pre-release. premajor and prepatch work the same way. -SemVer.prototype.inc = function (release, identifier) { - switch (release) { - case 'premajor': - this.prerelease.length = 0 - this.patch = 0 - this.minor = 0 - this.major++ - this.inc('pre', identifier) - break - case 'preminor': - this.prerelease.length = 0 - this.patch = 0 - this.minor++ - this.inc('pre', identifier) - break - case 'prepatch': - // If this is already a prerelease, it will bump to the next version - // drop any prereleases that might already exist, since they are not - // relevant at this point. - this.prerelease.length = 0 - this.inc('patch', identifier) - this.inc('pre', identifier) - break - // If the input is a non-prerelease version, this acts the same as - // prepatch. - case 'prerelease': - if (this.prerelease.length === 0) { - this.inc('patch', identifier) - } - this.inc('pre', identifier) - break - - case 'major': - // If this is a pre-major version, bump up to the same major version. - // Otherwise increment major. - // 1.0.0-5 bumps to 1.0.0 - // 1.1.0 bumps to 2.0.0 - if (this.minor !== 0 || - this.patch !== 0 || - this.prerelease.length === 0) { - this.major++ - } - this.minor = 0 - this.patch = 0 - this.prerelease = [] - break - case 'minor': - // If this is a pre-minor version, bump up to the same minor version. - // Otherwise increment minor. - // 1.2.0-5 bumps to 1.2.0 - // 1.2.1 bumps to 1.3.0 - if (this.patch !== 0 || this.prerelease.length === 0) { - this.minor++ - } - this.patch = 0 - this.prerelease = [] - break - case 'patch': - // If this is not a pre-release version, it will increment the patch. - // If it is a pre-release it will bump up to the same patch version. - // 1.2.0-5 patches to 1.2.0 - // 1.2.0 patches to 1.2.1 - if (this.prerelease.length === 0) { - this.patch++ - } - this.prerelease = [] - break - // This probably shouldn't be used publicly. - // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. - case 'pre': - if (this.prerelease.length === 0) { - this.prerelease = [0] - } else { - var i = this.prerelease.length - while (--i >= 0) { - if (typeof this.prerelease[i] === 'number') { - this.prerelease[i]++ - i = -2 - } - } - if (i === -1) { - // didn't increment anything - this.prerelease.push(0) + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); } - } - if (identifier) { - // 1.2.0-beta.1 bumps to 1.2.0-beta.2, - // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 - if (this.prerelease[0] === identifier) { - if (isNaN(this.prerelease[1])) { - this.prerelease = [identifier, 0] - } - } else { - this.prerelease = [identifier, 0] + finally { if (e) throw e.error; } + } + return ar; +}; +var __spread = (this && this.__spread) || function () { + for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); + return ar; +}; +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; } - } - break - - default: - throw new Error('invalid increment argument: ' + release) - } - this.format() - this.raw = this.version - return this + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var util_1 = __nccwpck_require__(6195); +/** + * Adds the given item to the end of the list. + * + * @param list - a list + * @param item - an item + */ +function append(list, item) { + list.push(item); } - -exports.inc = inc -function inc (version, release, loose, identifier) { - if (typeof (loose) === 'string') { - identifier = loose - loose = undefined - } - - try { - return new SemVer(version, loose).inc(release, identifier).version - } catch (er) { - return null - } +exports.append = append; +/** + * Extends a list by appending all items from another list. + * + * @param listA - a list to extend + * @param listB - a list containing items to append to `listA` + */ +function extend(listA, listB) { + listA.push.apply(listA, __spread(listB)); } - -exports.diff = diff -function diff (version1, version2) { - if (eq(version1, version2)) { - return null - } else { - var v1 = parse(version1) - var v2 = parse(version2) - var prefix = '' - if (v1.prerelease.length || v2.prerelease.length) { - prefix = 'pre' - var defaultResult = 'prerelease' +exports.extend = extend; +/** + * Inserts the given item to the start of the list. + * + * @param list - a list + * @param item - an item + */ +function prepend(list, item) { + list.unshift(item); +} +exports.prepend = prepend; +/** + * Replaces the given item or all items matching condition with a new item. + * + * @param list - a list + * @param conditionOrItem - an item to replace or a condition matching items + * to replace + * @param item - an item + */ +function replace(list, conditionOrItem, newItem) { + var e_1, _a; + var i = 0; + try { + for (var list_1 = __values(list), list_1_1 = list_1.next(); !list_1_1.done; list_1_1 = list_1.next()) { + var oldItem = list_1_1.value; + if (util_1.isFunction(conditionOrItem)) { + if (!!conditionOrItem.call(null, oldItem)) { + list[i] = newItem; + } + } + else if (oldItem === conditionOrItem) { + list[i] = newItem; + return; + } + i++; + } } - for (var key in v1) { - if (key === 'major' || key === 'minor' || key === 'patch') { - if (v1[key] !== v2[key]) { - return prefix + key + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (list_1_1 && !list_1_1.done && (_a = list_1.return)) _a.call(list_1); } - } + finally { if (e_1) throw e_1.error; } } - return defaultResult // may be undefined - } -} - -exports.compareIdentifiers = compareIdentifiers - -var numeric = /^[0-9]+$/ -function compareIdentifiers (a, b) { - var anum = numeric.test(a) - var bnum = numeric.test(b) - - if (anum && bnum) { - a = +a - b = +b - } - - return a === b ? 0 - : (anum && !bnum) ? -1 - : (bnum && !anum) ? 1 - : a < b ? -1 - : 1 } - -exports.rcompareIdentifiers = rcompareIdentifiers -function rcompareIdentifiers (a, b) { - return compareIdentifiers(b, a) +exports.replace = replace; +/** + * Inserts the given item before the given index. + * + * @param list - a list + * @param item - an item + */ +function insert(list, item, index) { + list.splice(index, 0, item); } - -exports.major = major -function major (a, loose) { - return new SemVer(a, loose).major +exports.insert = insert; +/** + * Removes the given item or all items matching condition. + * + * @param list - a list + * @param conditionOrItem - an item to remove or a condition matching items + * to remove + */ +function remove(list, conditionOrItem) { + var i = list.length; + while (i--) { + var oldItem = list[i]; + if (util_1.isFunction(conditionOrItem)) { + if (!!conditionOrItem.call(null, oldItem)) { + list.splice(i, 1); + } + } + else if (oldItem === conditionOrItem) { + list.splice(i, 1); + return; + } + } } - -exports.minor = minor -function minor (a, loose) { - return new SemVer(a, loose).minor +exports.remove = remove; +/** + * Removes all items from the list. + */ +function empty(list) { + list.length = 0; } - -exports.patch = patch -function patch (a, loose) { - return new SemVer(a, loose).patch +exports.empty = empty; +/** + * Determines if the list contains the given item or any items matching + * condition. + * + * @param list - a list + * @param conditionOrItem - an item to a condition to match + */ +function contains(list, conditionOrItem) { + var e_2, _a; + try { + for (var list_2 = __values(list), list_2_1 = list_2.next(); !list_2_1.done; list_2_1 = list_2.next()) { + var oldItem = list_2_1.value; + if (util_1.isFunction(conditionOrItem)) { + if (!!conditionOrItem.call(null, oldItem)) { + return true; + } + } + else if (oldItem === conditionOrItem) { + return true; + } + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (list_2_1 && !list_2_1.done && (_a = list_2.return)) _a.call(list_2); + } + finally { if (e_2) throw e_2.error; } + } + return false; } - -exports.compare = compare -function compare (a, b, loose) { - return new SemVer(a, loose).compare(new SemVer(b, loose)) +exports.contains = contains; +/** + * Returns the count of items in the list matching the given condition. + * + * @param list - a list + * @param condition - an optional condition to match + */ +function size(list, condition) { + var e_3, _a; + if (condition === undefined) { + return list.length; + } + else { + var count = 0; + try { + for (var list_3 = __values(list), list_3_1 = list_3.next(); !list_3_1.done; list_3_1 = list_3.next()) { + var item = list_3_1.value; + if (!!condition.call(null, item)) { + count++; + } + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (list_3_1 && !list_3_1.done && (_a = list_3.return)) _a.call(list_3); + } + finally { if (e_3) throw e_3.error; } + } + return count; + } } - -exports.compareLoose = compareLoose -function compareLoose (a, b) { - return compare(a, b, true) +exports.size = size; +/** + * Determines if the list is empty. + * + * @param list - a list + */ +function isEmpty(list) { + return list.length === 0; } - -exports.compareBuild = compareBuild -function compareBuild (a, b, loose) { - var versionA = new SemVer(a, loose) - var versionB = new SemVer(b, loose) - return versionA.compare(versionB) || versionA.compareBuild(versionB) +exports.isEmpty = isEmpty; +/** + * Returns an iterator for the items of the list. + * + * @param list - a list + * @param condition - an optional condition to match + */ +function forEach(list, condition) { + var list_4, list_4_1, item, e_4_1; + var e_4, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!(condition === undefined)) return [3 /*break*/, 2]; + return [5 /*yield**/, __values(list)]; + case 1: + _b.sent(); + return [3 /*break*/, 9]; + case 2: + _b.trys.push([2, 7, 8, 9]); + list_4 = __values(list), list_4_1 = list_4.next(); + _b.label = 3; + case 3: + if (!!list_4_1.done) return [3 /*break*/, 6]; + item = list_4_1.value; + if (!!!condition.call(null, item)) return [3 /*break*/, 5]; + return [4 /*yield*/, item]; + case 4: + _b.sent(); + _b.label = 5; + case 5: + list_4_1 = list_4.next(); + return [3 /*break*/, 3]; + case 6: return [3 /*break*/, 9]; + case 7: + e_4_1 = _b.sent(); + e_4 = { error: e_4_1 }; + return [3 /*break*/, 9]; + case 8: + try { + if (list_4_1 && !list_4_1.done && (_a = list_4.return)) _a.call(list_4); + } + finally { if (e_4) throw e_4.error; } + return [7 /*endfinally*/]; + case 9: return [2 /*return*/]; + } + }); } - -exports.rcompare = rcompare -function rcompare (a, b, loose) { - return compare(b, a, loose) +exports.forEach = forEach; +/** + * Creates and returns a shallow clone of list. + * + * @param list - a list + */ +function clone(list) { + return new (Array.bind.apply(Array, __spread([void 0], list)))(); } - -exports.sort = sort -function sort (list, loose) { - return list.sort(function (a, b) { - return exports.compareBuild(a, b, loose) - }) +exports.clone = clone; +/** + * Returns a new list containing items from the list sorted in ascending + * order. + * + * @param list - a list + * @param lessThanAlgo - a function that returns `true` if its first argument + * is less than its second argument, and `false` otherwise. + */ +function sortInAscendingOrder(list, lessThanAlgo) { + return list.sort(function (itemA, itemB) { + return lessThanAlgo.call(null, itemA, itemB) ? -1 : 1; + }); } - -exports.rsort = rsort -function rsort (list, loose) { - return list.sort(function (a, b) { - return exports.compareBuild(b, a, loose) - }) +exports.sortInAscendingOrder = sortInAscendingOrder; +/** + * Returns a new list containing items from the list sorted in descending + * order. + * + * @param list - a list + * @param lessThanAlgo - a function that returns `true` if its first argument + * is less than its second argument, and `false` otherwise. + */ +function sortInDescendingOrder(list, lessThanAlgo) { + return list.sort(function (itemA, itemB) { + return lessThanAlgo.call(null, itemA, itemB) ? 1 : -1; + }); } +exports.sortInDescendingOrder = sortInDescendingOrder; +//# sourceMappingURL=List.js.map -exports.gt = gt -function gt (a, b, loose) { - return compare(a, b, loose) > 0 -} +/***/ }), -exports.lt = lt -function lt (a, b, loose) { - return compare(a, b, loose) < 0 -} +/***/ 2298: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { -exports.eq = eq -function eq (a, b, loose) { - return compare(a, b, loose) === 0 -} +"use strict"; -exports.neq = neq -function neq (a, b, loose) { - return compare(a, b, loose) !== 0 +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +}; +var __spread = (this && this.__spread) || function () { + for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); + return ar; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var util_1 = __nccwpck_require__(6195); +/** + * Gets the value corresponding to the given key. + * + * @param map - a map + * @param key - a key + */ +function get(map, key) { + return map.get(key); } - -exports.gte = gte -function gte (a, b, loose) { - return compare(a, b, loose) >= 0 +exports.get = get; +/** + * Sets the value corresponding to the given key. + * + * @param map - a map + * @param key - a key + * @param val - a value + */ +function set(map, key, val) { + map.set(key, val); } - -exports.lte = lte -function lte (a, b, loose) { - return compare(a, b, loose) <= 0 +exports.set = set; +/** + * Removes the item with the given key or all items matching condition. + * + * @param map - a map + * @param conditionOrItem - the key of an item to remove or a condition matching + * items to remove + */ +function remove(map, conditionOrItem) { + var e_1, _a, e_2, _b; + if (!util_1.isFunction(conditionOrItem)) { + map.delete(conditionOrItem); + } + else { + var toRemove = []; + try { + for (var map_1 = __values(map), map_1_1 = map_1.next(); !map_1_1.done; map_1_1 = map_1.next()) { + var item = map_1_1.value; + if (!!conditionOrItem.call(null, item)) { + toRemove.push(item[0]); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (map_1_1 && !map_1_1.done && (_a = map_1.return)) _a.call(map_1); + } + finally { if (e_1) throw e_1.error; } + } + try { + for (var toRemove_1 = __values(toRemove), toRemove_1_1 = toRemove_1.next(); !toRemove_1_1.done; toRemove_1_1 = toRemove_1.next()) { + var key = toRemove_1_1.value; + map.delete(key); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (toRemove_1_1 && !toRemove_1_1.done && (_b = toRemove_1.return)) _b.call(toRemove_1); + } + finally { if (e_2) throw e_2.error; } + } + } } - -exports.cmp = cmp -function cmp (a, op, b, loose) { - switch (op) { - case '===': - if (typeof a === 'object') - a = a.version - if (typeof b === 'object') - b = b.version - return a === b - - case '!==': - if (typeof a === 'object') - a = a.version - if (typeof b === 'object') - b = b.version - return a !== b - - case '': - case '=': - case '==': - return eq(a, b, loose) - - case '!=': - return neq(a, b, loose) - - case '>': - return gt(a, b, loose) - - case '>=': - return gte(a, b, loose) - - case '<': - return lt(a, b, loose) - - case '<=': - return lte(a, b, loose) - - default: - throw new TypeError('Invalid operator: ' + op) - } +exports.remove = remove; +/** + * Determines if the map contains a value with the given key. + * + * @param map - a map + * @param conditionOrItem - the key of an item to match or a condition matching + * items + */ +function contains(map, conditionOrItem) { + var e_3, _a; + if (!util_1.isFunction(conditionOrItem)) { + return map.has(conditionOrItem); + } + else { + try { + for (var map_2 = __values(map), map_2_1 = map_2.next(); !map_2_1.done; map_2_1 = map_2.next()) { + var item = map_2_1.value; + if (!!conditionOrItem.call(null, item)) { + return true; + } + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (map_2_1 && !map_2_1.done && (_a = map_2.return)) _a.call(map_2); + } + finally { if (e_3) throw e_3.error; } + } + return false; + } } - -exports.Comparator = Comparator -function Comparator (comp, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false +exports.contains = contains; +/** + * Gets the keys of the map. + * + * @param map - a map + */ +function keys(map) { + return new Set(map.keys()); +} +exports.keys = keys; +/** + * Gets the values of the map. + * + * @param map - a map + */ +function values(map) { + return __spread(map.values()); +} +exports.values = values; +/** + * Gets the size of the map. + * + * @param map - a map + * @param condition - an optional condition to match + */ +function size(map, condition) { + var e_4, _a; + if (condition === undefined) { + return map.size; } - } - - if (comp instanceof Comparator) { - if (comp.loose === !!options.loose) { - return comp - } else { - comp = comp.value + else { + var count = 0; + try { + for (var map_3 = __values(map), map_3_1 = map_3.next(); !map_3_1.done; map_3_1 = map_3.next()) { + var item = map_3_1.value; + if (!!condition.call(null, item)) { + count++; + } + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (map_3_1 && !map_3_1.done && (_a = map_3.return)) _a.call(map_3); + } + finally { if (e_4) throw e_4.error; } + } + return count; } - } +} +exports.size = size; +/** + * Determines if the map is empty. + * + * @param map - a map + */ +function isEmpty(map) { + return map.size === 0; +} +exports.isEmpty = isEmpty; +/** + * Returns an iterator for the items of the map. + * + * @param map - a map + * @param condition - an optional condition to match + */ +function forEach(map, condition) { + var map_4, map_4_1, item, e_5_1; + var e_5, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!(condition === undefined)) return [3 /*break*/, 2]; + return [5 /*yield**/, __values(map)]; + case 1: + _b.sent(); + return [3 /*break*/, 9]; + case 2: + _b.trys.push([2, 7, 8, 9]); + map_4 = __values(map), map_4_1 = map_4.next(); + _b.label = 3; + case 3: + if (!!map_4_1.done) return [3 /*break*/, 6]; + item = map_4_1.value; + if (!!!condition.call(null, item)) return [3 /*break*/, 5]; + return [4 /*yield*/, item]; + case 4: + _b.sent(); + _b.label = 5; + case 5: + map_4_1 = map_4.next(); + return [3 /*break*/, 3]; + case 6: return [3 /*break*/, 9]; + case 7: + e_5_1 = _b.sent(); + e_5 = { error: e_5_1 }; + return [3 /*break*/, 9]; + case 8: + try { + if (map_4_1 && !map_4_1.done && (_a = map_4.return)) _a.call(map_4); + } + finally { if (e_5) throw e_5.error; } + return [7 /*endfinally*/]; + case 9: return [2 /*return*/]; + } + }); +} +exports.forEach = forEach; +/** + * Creates and returns a shallow clone of map. + * + * @param map - a map + */ +function clone(map) { + return new Map(map); +} +exports.clone = clone; +/** + * Returns a new map containing items from the map sorted in ascending + * order. + * + * @param map - a map + * @param lessThanAlgo - a function that returns `true` if its first argument + * is less than its second argument, and `false` otherwise. + */ +function sortInAscendingOrder(map, lessThanAlgo) { + var list = new (Array.bind.apply(Array, __spread([void 0], map)))(); + list.sort(function (itemA, itemB) { + return lessThanAlgo.call(null, itemA, itemB) ? -1 : 1; + }); + return new Map(list); +} +exports.sortInAscendingOrder = sortInAscendingOrder; +/** + * Returns a new map containing items from the map sorted in descending + * order. + * + * @param map - a map + * @param lessThanAlgo - a function that returns `true` if its first argument + * is less than its second argument, and `false` otherwise. + */ +function sortInDescendingOrder(map, lessThanAlgo) { + var list = new (Array.bind.apply(Array, __spread([void 0], map)))(); + list.sort(function (itemA, itemB) { + return lessThanAlgo.call(null, itemA, itemB) ? 1 : -1; + }); + return new Map(list); +} +exports.sortInDescendingOrder = sortInDescendingOrder; +//# sourceMappingURL=Map.js.map - if (!(this instanceof Comparator)) { - return new Comparator(comp, options) - } +/***/ }), - debug('comparator', comp, options) - this.options = options - this.loose = !!options.loose - this.parse(comp) +/***/ 3764: +/***/ ((__unused_webpack_module, exports) => { - if (this.semver === ANY) { - this.value = '' - } else { - this.value = this.operator + this.semver.version - } +"use strict"; - debug('comp', this) -} +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.HTML = "http://www.w3.org/1999/xhtml"; +exports.XML = "http://www.w3.org/XML/1998/namespace"; +exports.XMLNS = "http://www.w3.org/2000/xmlns/"; +exports.MathML = "http://www.w3.org/1998/Math/MathML"; +exports.SVG = "http://www.w3.org/2000/svg"; +exports.XLink = "http://www.w3.org/1999/xlink"; +//# sourceMappingURL=Namespace.js.map -var ANY = {} -Comparator.prototype.parse = function (comp) { - var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] - var m = comp.match(r) +/***/ }), - if (!m) { - throw new TypeError('Invalid comparator: ' + comp) - } +/***/ 9201: +/***/ ((__unused_webpack_module, exports) => { - this.operator = m[1] !== undefined ? m[1] : '' - if (this.operator === '=') { - this.operator = '' - } +"use strict"; - // if it literally is just '>' or '' then allow anything. - if (!m[2]) { - this.semver = ANY - } else { - this.semver = new SemVer(m[2], this.options.loose) - } +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Appends the given item to the queue. + * + * @param list - a list + * @param item - an item + */ +function enqueue(list, item) { + list.push(item); } - -Comparator.prototype.toString = function () { - return this.value +exports.enqueue = enqueue; +/** + * Removes and returns an item from the queue. + * + * @param list - a list + */ +function dequeue(list) { + return list.shift() || null; } +exports.dequeue = dequeue; +//# sourceMappingURL=Queue.js.map -Comparator.prototype.test = function (version) { - debug('Comparator.test', version, this.options.loose) - - if (this.semver === ANY || version === ANY) { - return true - } +/***/ }), - if (typeof version === 'string') { - try { - version = new SemVer(version, this.options) - } catch (er) { - return false - } - } +/***/ 5931: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - return cmp(version, this.operator, this.semver, this.options) -} +"use strict"; -Comparator.prototype.intersects = function (comp, options) { - if (!(comp instanceof Comparator)) { - throw new TypeError('a Comparator is required') - } - - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } - - var rangeTmp - - if (this.operator === '') { - if (this.value === '') { - return true - } - rangeTmp = new Range(comp.value, options) - return satisfies(this.value, rangeTmp, options) - } else if (comp.operator === '') { - if (comp.value === '') { - return true +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } - rangeTmp = new Range(this.value, options) - return satisfies(comp.semver, rangeTmp, options) - } - - var sameDirectionIncreasing = - (this.operator === '>=' || this.operator === '>') && - (comp.operator === '>=' || comp.operator === '>') - var sameDirectionDecreasing = - (this.operator === '<=' || this.operator === '<') && - (comp.operator === '<=' || comp.operator === '<') - var sameSemVer = this.semver.version === comp.semver.version - var differentDirectionsInclusive = - (this.operator === '>=' || this.operator === '<=') && - (comp.operator === '>=' || comp.operator === '<=') - var oppositeDirectionsLessThan = - cmp(this.semver, '<', comp.semver, options) && - ((this.operator === '>=' || this.operator === '>') && - (comp.operator === '<=' || comp.operator === '<')) - var oppositeDirectionsGreaterThan = - cmp(this.semver, '>', comp.semver, options) && - ((this.operator === '<=' || this.operator === '<') && - (comp.operator === '>=' || comp.operator === '>')) - - return sameDirectionIncreasing || sameDirectionDecreasing || - (sameSemVer && differentDirectionsInclusive) || - oppositeDirectionsLessThan || oppositeDirectionsGreaterThan -} - -exports.Range = Range -function Range (range, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false +}; +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } - } - - if (range instanceof Range) { - if (range.loose === !!options.loose && - range.includePrerelease === !!options.includePrerelease) { - return range - } else { - return new Range(range.raw, options) + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } } - } - - if (range instanceof Comparator) { - return new Range(range.value, options) - } - - if (!(this instanceof Range)) { - return new Range(range, options) - } - - this.options = options - this.loose = !!options.loose - this.includePrerelease = !!options.includePrerelease - - // First, split based on boolean or || - this.raw = range - this.set = range.split(/\s*\|\|\s*/).map(function (range) { - return this.parseRange(range.trim()) - }, this).filter(function (c) { - // throw out any that are not relevant for whatever reason - return c.length - }) - - if (!this.set.length) { - throw new TypeError('Invalid SemVer Range: ' + range) - } - - this.format() -} - -Range.prototype.format = function () { - this.range = this.set.map(function (comps) { - return comps.join(' ').trim() - }).join('||').trim() - return this.range -} - -Range.prototype.toString = function () { - return this.range -} - -Range.prototype.parseRange = function (range) { - var loose = this.options.loose - range = range.trim() - // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` - var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] - range = range.replace(hr, hyphenReplace) - debug('hyphen replace', range) - // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` - range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) - debug('comparator trim', range, re[t.COMPARATORTRIM]) - - // `~ 1.2.3` => `~1.2.3` - range = range.replace(re[t.TILDETRIM], tildeTrimReplace) - - // `^ 1.2.3` => `^1.2.3` - range = range.replace(re[t.CARETTRIM], caretTrimReplace) - - // normalize spaces - range = range.split(/\s+/).join(' ') - - // At this point, the range is completely trimmed and - // ready to be split into comparators. - - var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] - var set = range.split(' ').map(function (comp) { - return parseComparator(comp, this.options) - }, this).join(' ').split(/\s+/) - if (this.options.loose) { - // in loose mode, throw out any that are not valid comparators - set = set.filter(function (comp) { - return !!comp.match(compRe) - }) - } - set = set.map(function (comp) { - return new Comparator(comp, this.options) - }, this) - - return set -} - -Range.prototype.intersects = function (range, options) { - if (!(range instanceof Range)) { - throw new TypeError('a Range is required') - } - - return this.set.some(function (thisComparators) { - return ( - isSatisfiable(thisComparators, options) && - range.set.some(function (rangeComparators) { - return ( - isSatisfiable(rangeComparators, options) && - thisComparators.every(function (thisComparator) { - return rangeComparators.every(function (rangeComparator) { - return thisComparator.intersects(rangeComparator, options) - }) - }) - ) - }) - ) - }) -} - -// take a set of comparators and determine whether there -// exists a version which can satisfy it -function isSatisfiable (comparators, options) { - var result = true - var remainingComparators = comparators.slice() - var testComparator = remainingComparators.pop() - - while (result && remainingComparators.length) { - result = remainingComparators.every(function (otherComparator) { - return testComparator.intersects(otherComparator, options) - }) - - testComparator = remainingComparators.pop() - } - - return result -} - -// Mostly just for testing and legacy API reasons -exports.toComparators = toComparators -function toComparators (range, options) { - return new Range(range, options).set.map(function (comp) { - return comp.map(function (c) { - return c.value - }).join(' ').trim().split(' ') - }) -} - -// comprised of xranges, tildes, stars, and gtlt's at this point. -// already replaced the hyphen ranges -// turn into a set of JUST comparators. -function parseComparator (comp, options) { - debug('comp', comp, options) - comp = replaceCarets(comp, options) - debug('caret', comp) - comp = replaceTildes(comp, options) - debug('tildes', comp) - comp = replaceXRanges(comp, options) - debug('xrange', comp) - comp = replaceStars(comp, options) - debug('stars', comp) - return comp + return ar; +}; +var __spread = (this && this.__spread) || function () { + for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); + return ar; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var util_1 = __nccwpck_require__(6195); +/** + * Adds the given item to the end of the set. + * + * @param set - a set + * @param item - an item + */ +function append(set, item) { + set.add(item); } - -function isX (id) { - return !id || id.toLowerCase() === 'x' || id === '*' +exports.append = append; +/** + * Extends a set by appending all items from another set. + * + * @param setA - a list to extend + * @param setB - a list containing items to append to `setA` + */ +function extend(setA, setB) { + setB.forEach(setA.add, setA); } - -// ~, ~> --> * (any, kinda silly) -// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 -// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 -// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 -// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 -// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 -function replaceTildes (comp, options) { - return comp.trim().split(/\s+/).map(function (comp) { - return replaceTilde(comp, options) - }).join(' ') +exports.extend = extend; +/** + * Inserts the given item to the start of the set. + * + * @param set - a set + * @param item - an item + */ +function prepend(set, item) { + var cloned = new Set(set); + set.clear(); + set.add(item); + cloned.forEach(set.add, set); } - -function replaceTilde (comp, options) { - var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] - return comp.replace(r, function (_, M, m, p, pr) { - debug('tilde', comp, _, M, m, p, pr) - var ret - - if (isX(M)) { - ret = '' - } else if (isX(m)) { - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' - } else if (isX(p)) { - // ~1.2 == >=1.2.0 <1.3.0 - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' - } else if (pr) { - debug('replaceTilde pr', pr) - ret = '>=' + M + '.' + m + '.' + p + '-' + pr + - ' <' + M + '.' + (+m + 1) + '.0' - } else { - // ~1.2.3 == >=1.2.3 <1.3.0 - ret = '>=' + M + '.' + m + '.' + p + - ' <' + M + '.' + (+m + 1) + '.0' +exports.prepend = prepend; +/** + * Replaces the given item or all items matching condition with a new item. + * + * @param set - a set + * @param conditionOrItem - an item to replace or a condition matching items + * to replace + * @param item - an item + */ +function replace(set, conditionOrItem, newItem) { + var e_1, _a; + var newSet = new Set(); + try { + for (var set_1 = __values(set), set_1_1 = set_1.next(); !set_1_1.done; set_1_1 = set_1.next()) { + var oldItem = set_1_1.value; + if (util_1.isFunction(conditionOrItem)) { + if (!!conditionOrItem.call(null, oldItem)) { + newSet.add(newItem); + } + else { + newSet.add(oldItem); + } + } + else if (oldItem === conditionOrItem) { + newSet.add(newItem); + } + else { + newSet.add(oldItem); + } + } } - - debug('tilde return', ret) - return ret - }) + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (set_1_1 && !set_1_1.done && (_a = set_1.return)) _a.call(set_1); + } + finally { if (e_1) throw e_1.error; } + } + set.clear(); + newSet.forEach(set.add, set); } - -// ^ --> * (any, kinda silly) -// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 -// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 -// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 -// ^1.2.3 --> >=1.2.3 <2.0.0 -// ^1.2.0 --> >=1.2.0 <2.0.0 -function replaceCarets (comp, options) { - return comp.trim().split(/\s+/).map(function (comp) { - return replaceCaret(comp, options) - }).join(' ') +exports.replace = replace; +/** + * Inserts the given item before the given index. + * + * @param set - a set + * @param item - an item + */ +function insert(set, item, index) { + var e_2, _a; + var newSet = new Set(); + var i = 0; + try { + for (var set_2 = __values(set), set_2_1 = set_2.next(); !set_2_1.done; set_2_1 = set_2.next()) { + var oldItem = set_2_1.value; + if (i === index) + newSet.add(item); + newSet.add(oldItem); + i++; + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (set_2_1 && !set_2_1.done && (_a = set_2.return)) _a.call(set_2); + } + finally { if (e_2) throw e_2.error; } + } + set.clear(); + newSet.forEach(set.add, set); } - -function replaceCaret (comp, options) { - debug('caret', comp, options) - var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] - return comp.replace(r, function (_, M, m, p, pr) { - debug('caret', comp, _, M, m, p, pr) - var ret - - if (isX(M)) { - ret = '' - } else if (isX(m)) { - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' - } else if (isX(p)) { - if (M === '0') { - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' - } else { - ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0' - } - } else if (pr) { - debug('replaceCaret pr', pr) - if (M === '0') { - if (m === '0') { - ret = '>=' + M + '.' + m + '.' + p + '-' + pr + - ' <' + M + '.' + m + '.' + (+p + 1) - } else { - ret = '>=' + M + '.' + m + '.' + p + '-' + pr + - ' <' + M + '.' + (+m + 1) + '.0' +exports.insert = insert; +/** + * Removes the given item or all items matching condition. + * + * @param set - a set + * @param conditionOrItem - an item to remove or a condition matching items + * to remove + */ +function remove(set, conditionOrItem) { + var e_3, _a, e_4, _b; + if (!util_1.isFunction(conditionOrItem)) { + set.delete(conditionOrItem); + } + else { + var toRemove = []; + try { + for (var set_3 = __values(set), set_3_1 = set_3.next(); !set_3_1.done; set_3_1 = set_3.next()) { + var item = set_3_1.value; + if (!!conditionOrItem.call(null, item)) { + toRemove.push(item); + } + } } - } else { - ret = '>=' + M + '.' + m + '.' + p + '-' + pr + - ' <' + (+M + 1) + '.0.0' - } - } else { - debug('no pr') - if (M === '0') { - if (m === '0') { - ret = '>=' + M + '.' + m + '.' + p + - ' <' + M + '.' + m + '.' + (+p + 1) - } else { - ret = '>=' + M + '.' + m + '.' + p + - ' <' + M + '.' + (+m + 1) + '.0' + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (set_3_1 && !set_3_1.done && (_a = set_3.return)) _a.call(set_3); + } + finally { if (e_3) throw e_3.error; } + } + try { + for (var toRemove_1 = __values(toRemove), toRemove_1_1 = toRemove_1.next(); !toRemove_1_1.done; toRemove_1_1 = toRemove_1.next()) { + var oldItem = toRemove_1_1.value; + set.delete(oldItem); + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (toRemove_1_1 && !toRemove_1_1.done && (_b = toRemove_1.return)) _b.call(toRemove_1); + } + finally { if (e_4) throw e_4.error; } } - } else { - ret = '>=' + M + '.' + m + '.' + p + - ' <' + (+M + 1) + '.0.0' - } } - - debug('caret return', ret) - return ret - }) } - -function replaceXRanges (comp, options) { - debug('replaceXRanges', comp, options) - return comp.split(/\s+/).map(function (comp) { - return replaceXRange(comp, options) - }).join(' ') +exports.remove = remove; +/** + * Removes all items from the set. + */ +function empty(set) { + set.clear(); } - -function replaceXRange (comp, options) { - comp = comp.trim() - var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] - return comp.replace(r, function (ret, gtlt, M, m, p, pr) { - debug('xRange', comp, ret, gtlt, M, m, p, pr) - var xM = isX(M) - var xm = xM || isX(m) - var xp = xm || isX(p) - var anyX = xp - - if (gtlt === '=' && anyX) { - gtlt = '' +exports.empty = empty; +/** + * Determines if the set contains the given item or any items matching + * condition. + * + * @param set - a set + * @param conditionOrItem - an item to a condition to match + */ +function contains(set, conditionOrItem) { + var e_5, _a; + if (!util_1.isFunction(conditionOrItem)) { + return set.has(conditionOrItem); } - - // if we're including prereleases in the match, then we need - // to fix this to -0, the lowest possible prerelease value - pr = options.includePrerelease ? '-0' : '' - - if (xM) { - if (gtlt === '>' || gtlt === '<') { - // nothing is allowed - ret = '<0.0.0-0' - } else { - // nothing is forbidden - ret = '*' - } - } else if (gtlt && anyX) { - // we know patch is an x, because we have any x at all. - // replace X with 0 - if (xm) { - m = 0 - } - p = 0 - - if (gtlt === '>') { - // >1 => >=2.0.0 - // >1.2 => >=1.3.0 - // >1.2.3 => >= 1.2.4 - gtlt = '>=' - if (xm) { - M = +M + 1 - m = 0 - p = 0 - } else { - m = +m + 1 - p = 0 + else { + try { + for (var set_4 = __values(set), set_4_1 = set_4.next(); !set_4_1.done; set_4_1 = set_4.next()) { + var oldItem = set_4_1.value; + if (!!conditionOrItem.call(null, oldItem)) { + return true; + } + } } - } else if (gtlt === '<=') { - // <=0.7.x is actually <0.8.0, since any 0.7.x should - // pass. Similarly, <=7.x is actually <8.0.0, etc. - gtlt = '<' - if (xm) { - M = +M + 1 - } else { - m = +m + 1 + catch (e_5_1) { e_5 = { error: e_5_1 }; } + finally { + try { + if (set_4_1 && !set_4_1.done && (_a = set_4.return)) _a.call(set_4); + } + finally { if (e_5) throw e_5.error; } } - } - - ret = gtlt + M + '.' + m + '.' + p + pr - } else if (xm) { - ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr - } else if (xp) { - ret = '>=' + M + '.' + m + '.0' + pr + - ' <' + M + '.' + (+m + 1) + '.0' + pr } - - debug('xRange return', ret) - - return ret - }) + return false; } - -// Because * is AND-ed with everything else in the comparator, -// and '' means "any version", just remove the *s entirely. -function replaceStars (comp, options) { - debug('replaceStars', comp, options) - // Looseness is ignored here. star is always as loose as it gets! - return comp.trim().replace(re[t.STAR], '') +exports.contains = contains; +/** + * Returns the count of items in the set matching the given condition. + * + * @param set - a set + * @param condition - an optional condition to match + */ +function size(set, condition) { + var e_6, _a; + if (condition === undefined) { + return set.size; + } + else { + var count = 0; + try { + for (var set_5 = __values(set), set_5_1 = set_5.next(); !set_5_1.done; set_5_1 = set_5.next()) { + var item = set_5_1.value; + if (!!condition.call(null, item)) { + count++; + } + } + } + catch (e_6_1) { e_6 = { error: e_6_1 }; } + finally { + try { + if (set_5_1 && !set_5_1.done && (_a = set_5.return)) _a.call(set_5); + } + finally { if (e_6) throw e_6.error; } + } + return count; + } } - -// This function is passed to string.replace(re[t.HYPHENRANGE]) -// M, m, patch, prerelease, build -// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 -// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do -// 1.2 - 3.4 => >=1.2.0 <3.5.0 -function hyphenReplace ($0, - from, fM, fm, fp, fpr, fb, - to, tM, tm, tp, tpr, tb) { - if (isX(fM)) { - from = '' - } else if (isX(fm)) { - from = '>=' + fM + '.0.0' - } else if (isX(fp)) { - from = '>=' + fM + '.' + fm + '.0' - } else { - from = '>=' + from - } - - if (isX(tM)) { - to = '' - } else if (isX(tm)) { - to = '<' + (+tM + 1) + '.0.0' - } else if (isX(tp)) { - to = '<' + tM + '.' + (+tm + 1) + '.0' - } else if (tpr) { - to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr - } else { - to = '<=' + to - } - - return (from + ' ' + to).trim() +exports.size = size; +/** + * Determines if the set is empty. + * + * @param set - a set + */ +function isEmpty(set) { + return set.size === 0; } - -// if ANY of the sets match ALL of its comparators, then pass -Range.prototype.test = function (version) { - if (!version) { - return false - } - - if (typeof version === 'string') { +exports.isEmpty = isEmpty; +/** + * Returns an iterator for the items of the set. + * + * @param set - a set + * @param condition - an optional condition to match + */ +function forEach(set, condition) { + var set_6, set_6_1, item, e_7_1; + var e_7, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!(condition === undefined)) return [3 /*break*/, 2]; + return [5 /*yield**/, __values(set)]; + case 1: + _b.sent(); + return [3 /*break*/, 9]; + case 2: + _b.trys.push([2, 7, 8, 9]); + set_6 = __values(set), set_6_1 = set_6.next(); + _b.label = 3; + case 3: + if (!!set_6_1.done) return [3 /*break*/, 6]; + item = set_6_1.value; + if (!!!condition.call(null, item)) return [3 /*break*/, 5]; + return [4 /*yield*/, item]; + case 4: + _b.sent(); + _b.label = 5; + case 5: + set_6_1 = set_6.next(); + return [3 /*break*/, 3]; + case 6: return [3 /*break*/, 9]; + case 7: + e_7_1 = _b.sent(); + e_7 = { error: e_7_1 }; + return [3 /*break*/, 9]; + case 8: + try { + if (set_6_1 && !set_6_1.done && (_a = set_6.return)) _a.call(set_6); + } + finally { if (e_7) throw e_7.error; } + return [7 /*endfinally*/]; + case 9: return [2 /*return*/]; + } + }); +} +exports.forEach = forEach; +/** + * Creates and returns a shallow clone of set. + * + * @param set - a set + */ +function clone(set) { + return new Set(set); +} +exports.clone = clone; +/** + * Returns a new set containing items from the set sorted in ascending + * order. + * + * @param set - a set + * @param lessThanAlgo - a function that returns `true` if its first argument + * is less than its second argument, and `false` otherwise. + */ +function sortInAscendingOrder(set, lessThanAlgo) { + var list = new (Array.bind.apply(Array, __spread([void 0], set)))(); + list.sort(function (itemA, itemB) { + return lessThanAlgo.call(null, itemA, itemB) ? -1 : 1; + }); + return new Set(list); +} +exports.sortInAscendingOrder = sortInAscendingOrder; +/** + * Returns a new set containing items from the set sorted in descending + * order. + * + * @param set - a set + * @param lessThanAlgo - a function that returns `true` if its first argument + * is less than its second argument, and `false` otherwise. + */ +function sortInDescendingOrder(set, lessThanAlgo) { + var list = new (Array.bind.apply(Array, __spread([void 0], set)))(); + list.sort(function (itemA, itemB) { + return lessThanAlgo.call(null, itemA, itemB) ? 1 : -1; + }); + return new Set(list); +} +exports.sortInDescendingOrder = sortInDescendingOrder; +/** + * Determines if a set is a subset of another set. + * + * @param subset - a set + * @param superset - a superset possibly containing all items from `subset`. + */ +function isSubsetOf(subset, superset) { + var e_8, _a; try { - version = new SemVer(version, this.options) - } catch (er) { - return false + for (var subset_1 = __values(subset), subset_1_1 = subset_1.next(); !subset_1_1.done; subset_1_1 = subset_1.next()) { + var item = subset_1_1.value; + if (!superset.has(item)) + return false; + } } - } - - for (var i = 0; i < this.set.length; i++) { - if (testSet(this.set[i], version, this.options)) { - return true + catch (e_8_1) { e_8 = { error: e_8_1 }; } + finally { + try { + if (subset_1_1 && !subset_1_1.done && (_a = subset_1.return)) _a.call(subset_1); + } + finally { if (e_8) throw e_8.error; } } - } - return false + return true; } - -function testSet (set, version, options) { - for (var i = 0; i < set.length; i++) { - if (!set[i].test(version)) { - return false +exports.isSubsetOf = isSubsetOf; +/** + * Determines if a set is a superset of another set. + * + * @param superset - a set + * @param subset - a subset possibly contained within `superset`. + */ +function isSupersetOf(superset, subset) { + return isSubsetOf(subset, superset); +} +exports.isSupersetOf = isSupersetOf; +/** + * Returns a new set with items that are contained in both sets. + * + * @param setA - a set + * @param setB - a set + */ +function intersection(setA, setB) { + var e_9, _a; + var newSet = new Set(); + try { + for (var setA_1 = __values(setA), setA_1_1 = setA_1.next(); !setA_1_1.done; setA_1_1 = setA_1.next()) { + var item = setA_1_1.value; + if (setB.has(item)) + newSet.add(item); + } } - } - - if (version.prerelease.length && !options.includePrerelease) { - // Find the set of versions that are allowed to have prereleases - // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 - // That should allow `1.2.3-pr.2` to pass. - // However, `1.2.4-alpha.notready` should NOT be allowed, - // even though it's within the range set by the comparators. - for (i = 0; i < set.length; i++) { - debug(set[i].semver) - if (set[i].semver === ANY) { - continue - } - - if (set[i].semver.prerelease.length > 0) { - var allowed = set[i].semver - if (allowed.major === version.major && - allowed.minor === version.minor && - allowed.patch === version.patch) { - return true + catch (e_9_1) { e_9 = { error: e_9_1 }; } + finally { + try { + if (setA_1_1 && !setA_1_1.done && (_a = setA_1.return)) _a.call(setA_1); } - } + finally { if (e_9) throw e_9.error; } } - - // Version has a -pre, but it's not one of the ones we like. - return false - } - - return true -} - -exports.satisfies = satisfies -function satisfies (version, range, options) { - try { - range = new Range(range, options) - } catch (er) { - return false - } - return range.test(version) + return newSet; } - -exports.maxSatisfying = maxSatisfying -function maxSatisfying (versions, range, options) { - var max = null - var maxSV = null - try { - var rangeObj = new Range(range, options) - } catch (er) { - return null - } - versions.forEach(function (v) { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!max || maxSV.compare(v) === -1) { - // compare(max, v, true) - max = v - maxSV = new SemVer(max, options) - } - } - }) - return max +exports.intersection = intersection; +/** + * Returns a new set with items from both sets. + * + * @param setA - a set + * @param setB - a set + */ +function union(setA, setB) { + var newSet = new Set(setA); + setB.forEach(newSet.add, newSet); + return newSet; } - -exports.minSatisfying = minSatisfying -function minSatisfying (versions, range, options) { - var min = null - var minSV = null - try { - var rangeObj = new Range(range, options) - } catch (er) { - return null - } - versions.forEach(function (v) { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!min || minSV.compare(v) === 1) { - // compare(min, v, true) - min = v - minSV = new SemVer(min, options) - } +exports.union = union; +/** + * Returns a set of integers from `n` to `m` inclusive. + * + * @param n - starting number + * @param m - ending number + */ +function range(n, m) { + var newSet = new Set(); + for (var i = n; i <= m; i++) { + newSet.add(i); } - }) - return min + return newSet; } +exports.range = range; +//# sourceMappingURL=Set.js.map -exports.minVersion = minVersion -function minVersion (range, loose) { - range = new Range(range, loose) +/***/ }), - var minver = new SemVer('0.0.0') - if (range.test(minver)) { - return minver - } +/***/ 8784: +/***/ ((__unused_webpack_module, exports) => { - minver = new SemVer('0.0.0-0') - if (range.test(minver)) { - return minver - } +"use strict"; - minver = null - for (var i = 0; i < range.set.length; ++i) { - var comparators = range.set[i] +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Pushes the given item to the stack. + * + * @param list - a list + * @param item - an item + */ +function push(list, item) { + list.push(item); +} +exports.push = push; +/** + * Pops and returns an item from the stack. + * + * @param list - a list + */ +function pop(list) { + return list.pop() || null; +} +exports.pop = pop; +//# sourceMappingURL=Stack.js.map - comparators.forEach(function (comparator) { - // Clone to avoid manipulating the comparator's semver object. - var compver = new SemVer(comparator.semver.version) - switch (comparator.operator) { - case '>': - if (compver.prerelease.length === 0) { - compver.patch++ - } else { - compver.prerelease.push(0) - } - compver.raw = compver.format() - /* fallthrough */ - case '': - case '>=': - if (!minver || gt(minver, compver)) { - minver = compver - } - break - case '<': - case '<=': - /* Ignore maximum versions */ - break - /* istanbul ignore next */ - default: - throw new Error('Unexpected operation: ' + comparator.operator) - } - }) - } +/***/ }), - if (minver && range.test(minver)) { - return minver - } +/***/ 3203: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { - return null -} +"use strict"; -exports.validRange = validRange -function validRange (range, options) { - try { - // Return '*' instead of '' so that truthiness works. - // This will throw if it's invalid anyway - return new Range(range, options).range || '*' - } catch (er) { - return null - } -} - -// Determine if version is less than all the versions possible in the range -exports.ltr = ltr -function ltr (version, range, options) { - return outside(version, range, '<', options) -} - -// Determine if version is greater than all the versions possible in the range. -exports.gtr = gtr -function gtr (version, range, options) { - return outside(version, range, '>', options) -} - -exports.outside = outside -function outside (version, range, hilo, options) { - version = new SemVer(version, options) - range = new Range(range, options) - - var gtfn, ltefn, ltfn, comp, ecomp - switch (hilo) { - case '>': - gtfn = gt - ltefn = lte - ltfn = lt - comp = '>' - ecomp = '>=' - break - case '<': - gtfn = lt - ltefn = gte - ltfn = gt - comp = '<' - ecomp = '<=' - break - default: - throw new TypeError('Must provide a hilo val of "<" or ">"') - } - - // If it satisifes the range it is not outside - if (satisfies(version, range, options)) { - return false - } - - // From now on, variable terms are as if we're in "gtr" mode. - // but note that everything is flipped for the "ltr" function. - - for (var i = 0; i < range.set.length; ++i) { - var comparators = range.set[i] - - var high = null - var low = null - - comparators.forEach(function (comparator) { - if (comparator.semver === ANY) { - comparator = new Comparator('>=0.0.0') - } - high = high || comparator - low = low || comparator - if (gtfn(comparator.semver, high.semver, options)) { - high = comparator - } else if (ltfn(comparator.semver, low.semver, options)) { - low = comparator - } - }) - - // If the edge version comparator has a operator then our version - // isn't outside it - if (high.operator === comp || high.operator === ecomp) { - return false - } - - // If the lowest version comparator has an operator and our version - // is less than it then it isn't higher than the range - if ((!low.operator || low.operator === comp) && - ltefn(version, low.semver)) { - return false - } else if (low.operator === ecomp && ltfn(version, low.semver)) { - return false - } - } - return true -} - -exports.prerelease = prerelease -function prerelease (version, options) { - var parsed = parse(version, options) - return (parsed && parsed.prerelease.length) ? parsed.prerelease : null -} - -exports.intersects = intersects -function intersects (r1, r2, options) { - r1 = new Range(r1, options) - r2 = new Range(r2, options) - return r1.intersects(r2) -} - -exports.coerce = coerce -function coerce (version, options) { - if (version instanceof SemVer) { - return version - } - - if (typeof version === 'number') { - version = String(version) - } - - if (typeof version !== 'string') { - return null - } - - options = options || {} - - var match = null - if (!options.rtl) { - match = version.match(re[t.COERCE]) - } else { - // Find the right-most coercible string that does not share - // a terminus with a more left-ward coercible string. - // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' - // - // Walk through the string checking with a /g regexp - // Manually set the index so as to pick up overlapping matches. - // Stop when we get a match that ends at the string end, since no - // coercible string can be more right-ward without the same terminus. - var next - while ((next = re[t.COERCERTL].exec(version)) && - (!match || match.index + match[0].length !== version.length) - ) { - if (!match || - next.index + next[0].length !== match.index + match[0].length) { - match = next - } - re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length - } - // leave it in a clean state - re[t.COERCERTL].lastIndex = -1 - } - - if (match === null) { - return null - } - - return parse(match[2] + - '.' + (match[3] || '0') + - '.' + (match[4] || '0'), options) -} - - -/***/ }), -/* 551 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); var __values = (this && this.__values) || function(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); @@ -25694,10712 +25078,1173 @@ var __values = (this && this.__values) || function(o) { }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var CodePoints_1 = __nccwpck_require__(8548); +var ByteSequence_1 = __nccwpck_require__(1627); +var Byte_1 = __nccwpck_require__(2460); +var util_1 = __nccwpck_require__(6195); +/** + * Determines if the string `a` is a code unit prefix of string `b`. + * + * @param a - a string + * @param b - a string + */ +function isCodeUnitPrefix(a, b) { + /** + * 1. Let i be 0. + * 2. While true: + * 2.1. Let aCodeUnit be the ith code unit of a if i is less than a’s length; + * otherwise null. + * 2.2. Let bCodeUnit be the ith code unit of b if i is less than b’s length; + * otherwise null. + * 2.3. If bCodeUnit is null, then return true. + * 2.4. Return false if aCodeUnit is different from bCodeUnit. + * 2.5. Set i to i + 1. + */ + var i = 0; + while (true) { + var aCodeUnit = i < a.length ? a.charCodeAt(i) : null; + var bCodeUnit = i < b.length ? b.charCodeAt(i) : null; + if (aCodeUnit === null) + return true; + if (aCodeUnit !== bCodeUnit) + return false; + i++; + } +} +exports.isCodeUnitPrefix = isCodeUnitPrefix; +/** + * Determines if the string `a` is a code unit less than string `b`. + * + * @param a - a string + * @param b - a string + */ +function isCodeUnitLessThan(a, b) { + /** + * 1. If b is a code unit prefix of a, then return false. + * 2. If a is a code unit prefix of b, then return true. + * 3. Let n be the smallest index such that the nth code unit of a is + * different from the nth code unit of b. (There has to be such an index, + * since neither string is a prefix of the other.) + * 4. If the nth code unit of a is less than the nth code unit of b, then + * return true. + * 5. Return false. + */ + if (isCodeUnitPrefix(b, a)) + return false; + if (isCodeUnitPrefix(a, b)) + return true; + for (var i = 0; i < Math.min(a.length, b.length); i++) { + var aCodeUnit = a.charCodeAt(i); + var bCodeUnit = b.charCodeAt(i); + if (aCodeUnit === bCodeUnit) + continue; + return (aCodeUnit < bCodeUnit); + } + /* istanbul ignore next */ + return false; +} +exports.isCodeUnitLessThan = isCodeUnitLessThan; +/** + * Isomorphic encodes the given string. + * + * @param str - a string + */ +function isomorphicEncode(str) { + var e_1, _a; + /** + * 1. Assert: input contains no code points greater than U+00FF. + * 2. Return a byte sequence whose length is equal to input’s length and whose + * bytes have the same values as input’s code points, in the same order. + */ + var codePoints = Array.from(str); + var bytes = new Uint8Array(codePoints.length); + var i = 0; try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + for (var str_1 = __values(str), str_1_1 = str_1.next(); !str_1_1.done; str_1_1 = str_1.next()) { + var codePoint = str_1_1.value; + var byte = codePoint.codePointAt(0); + console.assert(byte !== undefined && byte <= 0x00FF, "isomorphicEncode requires string bytes to be less than or equal to 0x00FF."); + if (byte !== undefined && byte <= 0x00FF) { + bytes[i++] = byte; + } + } } - catch (error) { e = { error: error }; } + catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (r && !r.done && (m = i["return"])) m.call(i); + if (str_1_1 && !str_1_1.done && (_a = str_1.return)) _a.call(str_1); } - finally { if (e) throw e.error; } + finally { if (e_1) throw e_1.error; } } - return ar; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(625); -var util_1 = __webpack_require__(592); -var BuilderFunctions_1 = __webpack_require__(961); -var algorithm_1 = __webpack_require__(163); -var infra_1 = __webpack_require__(23); -var NamespacePrefixMap_1 = __webpack_require__(392); -var LocalNameSet_1 = __webpack_require__(575); -var util_2 = __webpack_require__(918); -var XMLCBWriter_1 = __webpack_require__(190); -var JSONCBWriter_1 = __webpack_require__(781); -var YAMLCBWriter_1 = __webpack_require__(497); -var events_1 = __webpack_require__(614); + return bytes; +} +exports.isomorphicEncode = isomorphicEncode; /** - * Represents a readable XML document stream. + * Determines if the given string is An ASCII string. + * + * @param str - a string */ -var XMLBuilderCBImpl = /** @class */ (function (_super) { - __extends(XMLBuilderCBImpl, _super); +function isASCIIString(str) { /** - * Initializes a new instance of `XMLStream`. - * - * @param options - stream writer options - * @param fragment - whether to create fragment stream or a document stream - * - * @returns XML stream + * An ASCII string is a string whose code points are all ASCII code points. */ - function XMLBuilderCBImpl(options, fragment) { - if (fragment === void 0) { fragment = false; } - var _this = _super.call(this) || this; - _this._hasDeclaration = false; - _this._docTypeName = ""; - _this._hasDocumentElement = false; - _this._currentElementSerialized = false; - _this._openTags = []; - _this._ended = false; - _this._fragment = fragment; - // provide default options - _this._options = util_1.applyDefaults(options || {}, interfaces_1.DefaultXMLBuilderCBOptions); - _this._builderOptions = { - defaultNamespace: _this._options.defaultNamespace, - namespaceAlias: _this._options.namespaceAlias - }; - if (_this._options.format === "json") { - _this._writer = new JSONCBWriter_1.JSONCBWriter(_this._options); - } - else if (_this._options.format === "yaml") { - _this._writer = new YAMLCBWriter_1.YAMLCBWriter(_this._options); - } - else { - _this._writer = new XMLCBWriter_1.XMLCBWriter(_this._options); - } - // automatically create listeners for callbacks passed via options - if (_this._options.data !== undefined) { - _this.on("data", _this._options.data); - } - if (_this._options.end !== undefined) { - _this.on("end", _this._options.end); - } - if (_this._options.error !== undefined) { - _this.on("error", _this._options.error); - } - _this._prefixMap = new NamespacePrefixMap_1.NamespacePrefixMap(); - _this._prefixMap.set("xml", infra_1.namespace.XML); - _this._prefixIndex = { value: 1 }; - _this._push(_this._writer.frontMatter()); - return _this; - } - /** @inheritdoc */ - XMLBuilderCBImpl.prototype.ele = function (p1, p2, p3) { - var e_1, _a; - // parse if JS object or XML or JSON string - if (util_1.isObject(p1) || (util_1.isString(p1) && (/^\s*= 0x41 && code <= 0x5A) { + result += String.fromCodePoint(code + 0x20); } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } + else { + result += c; } - return this; - } - this._serializeOpenTag(true); - if (!this._fragment && this._hasDocumentElement && this._writer.level === 0) { - this.emit("error", new Error("Document cannot have multiple document element nodes.")); - return this; } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { try { - this._currentElement = BuilderFunctions_1.fragment(this._builderOptions).ele(p1, p2, p3); - } - catch (err) { - this.emit("error", err); - return this; - } - if (!this._fragment && !this._hasDocumentElement && this._docTypeName !== "" - && this._currentElement.node._qualifiedName !== this._docTypeName) { - this.emit("error", new Error("Document element name does not match DocType declaration name.")); - return this; - } - this._currentElementSerialized = false; - if (!this._fragment) { - this._hasDocumentElement = true; + if (str_2_1 && !str_2_1.done && (_a = str_2.return)) _a.call(str_2); } - return this; - }; - /** @inheritdoc */ - XMLBuilderCBImpl.prototype.att = function (p1, p2, p3) { - if (this._currentElement === undefined) { - this.emit("error", new Error("Cannot insert an attribute node as child of a document node.")); - return this; + finally { if (e_2) throw e_2.error; } + } + return result; +} +exports.asciiLowercase = asciiLowercase; +/** + * Converts all uppercase ASCII code points to uppercase. + * + * @param str - a string + */ +function asciiUppercase(str) { + var e_3, _a; + /** + * To ASCII uppercase a string, replace all ASCII lower alphas in the string + * with their corresponding code point in ASCII upper alpha. + */ + var result = ""; + try { + for (var str_3 = __values(str), str_3_1 = str_3.next(); !str_3_1.done; str_3_1 = str_3.next()) { + var c = str_3_1.value; + var code = c.codePointAt(0); + if (code !== undefined && code >= 0x61 && code <= 0x7A) { + result += String.fromCodePoint(code - 0x20); + } + else { + result += c; + } } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { try { - this._currentElement.att(p1, p2, p3); + if (str_3_1 && !str_3_1.done && (_a = str_3.return)) _a.call(str_3); } - catch (err) { - this.emit("error", err); - return this; + finally { if (e_3) throw e_3.error; } + } + return result; +} +exports.asciiUppercase = asciiUppercase; +/** + * Compares two ASCII strings case-insensitively. + * + * @param a - a string + * @param b - a string + */ +function asciiCaseInsensitiveMatch(a, b) { + /** + * A string A is an ASCII case-insensitive match for a string B, if the ASCII + * lowercase of A is the ASCII lowercase of B. + */ + return asciiLowercase(a) === asciiLowercase(b); +} +exports.asciiCaseInsensitiveMatch = asciiCaseInsensitiveMatch; +/** + * ASCII encodes a string. + * + * @param str - a string + */ +function asciiEncode(str) { + /** + * 1. Assert: input is an ASCII string. + * 2. Return the isomorphic encoding of input. + */ + console.assert(isASCIIString(str), "asciiEncode requires an ASCII string."); + return isomorphicEncode(str); +} +exports.asciiEncode = asciiEncode; +/** + * ASCII decodes a byte sequence. + * + * @param bytes - a byte sequence + */ +function asciiDecode(bytes) { + var e_4, _a; + try { + /** + * 1. Assert: All bytes in input are ASCII bytes. + * 2. Return the isomorphic decoding of input. + */ + for (var bytes_1 = __values(bytes), bytes_1_1 = bytes_1.next(); !bytes_1_1.done; bytes_1_1 = bytes_1.next()) { + var byte = bytes_1_1.value; + console.assert(Byte_1.isASCIIByte(byte), "asciiDecode requires an ASCII byte sequence."); } - return this; - }; - /** @inheritdoc */ - XMLBuilderCBImpl.prototype.com = function (content) { - this._serializeOpenTag(true); - var node; + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { try { - node = BuilderFunctions_1.fragment(this._builderOptions).com(content).first().node; - } - catch (err) { - /* istanbul ignore next */ - this.emit("error", err); - /* istanbul ignore next */ - return this; + if (bytes_1_1 && !bytes_1_1.done && (_a = bytes_1.return)) _a.call(bytes_1); } - if (this._options.wellFormed && (!algorithm_1.xml_isLegalChar(node.data) || - node.data.indexOf("--") !== -1 || node.data.endsWith("-"))) { - this.emit("error", new Error("Comment data contains invalid characters (well-formed required).")); - return this; - } - this._push(this._writer.comment(node.data)); - return this; - }; - /** @inheritdoc */ - XMLBuilderCBImpl.prototype.txt = function (content) { - if (!this._fragment && this._currentElement === undefined) { - this.emit("error", new Error("Cannot insert a text node as child of a document node.")); - return this; - } - this._serializeOpenTag(true); - var node; - try { - node = BuilderFunctions_1.fragment(this._builderOptions).txt(content).first().node; - } - catch (err) { - /* istanbul ignore next */ - this.emit("error", err); - /* istanbul ignore next */ - return this; - } - if (this._options.wellFormed && !algorithm_1.xml_isLegalChar(node.data)) { - this.emit("error", new Error("Text data contains invalid characters (well-formed required).")); - return this; - } - var markup = ""; - if (this._options.noDoubleEncoding) { - markup = node.data.replace(/(?!&(lt|gt|amp|apos|quot);)&/g, '&') - .replace(//g, '>'); - } - else { - for (var i = 0; i < node.data.length; i++) { - var c = node.data[i]; - if (c === "&") - markup += "&"; - else if (c === "<") - markup += "<"; - else if (c === ">") - markup += ">"; - else - markup += c; - } - } - this._push(this._writer.text(markup)); - return this; - }; - /** @inheritdoc */ - XMLBuilderCBImpl.prototype.ins = function (target, content) { - if (content === void 0) { content = ''; } - this._serializeOpenTag(true); - var node; - try { - node = BuilderFunctions_1.fragment(this._builderOptions).ins(target, content).first().node; - } - catch (err) { - /* istanbul ignore next */ - this.emit("error", err); - /* istanbul ignore next */ - return this; - } - if (this._options.wellFormed && (node.target.indexOf(":") !== -1 || (/^xml$/i).test(node.target))) { - this.emit("error", new Error("Processing instruction target contains invalid characters (well-formed required).")); - return this; - } - if (this._options.wellFormed && !algorithm_1.xml_isLegalChar(node.data)) { - this.emit("error", Error("Processing instruction data contains invalid characters (well-formed required).")); - return this; - } - this._push(this._writer.instruction(node.target, node.data)); - return this; - }; - /** @inheritdoc */ - XMLBuilderCBImpl.prototype.dat = function (content) { - this._serializeOpenTag(true); - var node; - try { - node = BuilderFunctions_1.fragment(this._builderOptions).dat(content).first().node; - } - catch (err) { - this.emit("error", err); - return this; - } - this._push(this._writer.cdata(node.data)); - return this; - }; - /** @inheritdoc */ - XMLBuilderCBImpl.prototype.dec = function (options) { - if (options === void 0) { options = { version: "1.0" }; } - if (this._fragment) { - this.emit("error", Error("Cannot insert an XML declaration into a document fragment.")); - return this; - } - if (this._hasDeclaration) { - this.emit("error", Error("XML declaration is already inserted.")); - return this; - } - this._push(this._writer.declaration(options.version || "1.0", options.encoding, options.standalone)); - this._hasDeclaration = true; - return this; - }; - /** @inheritdoc */ - XMLBuilderCBImpl.prototype.dtd = function (options) { - if (this._fragment) { - this.emit("error", Error("Cannot insert a DocType declaration into a document fragment.")); - return this; - } - if (this._docTypeName !== "") { - this.emit("error", new Error("DocType declaration is already inserted.")); - return this; - } - if (this._hasDocumentElement) { - this.emit("error", new Error("Cannot insert DocType declaration after document element.")); - return this; - } - var node; - try { - node = BuilderFunctions_1.create().dtd(options).first().node; - } - catch (err) { - this.emit("error", err); - return this; - } - if (this._options.wellFormed && !algorithm_1.xml_isPubidChar(node.publicId)) { - this.emit("error", new Error("DocType public identifier does not match PubidChar construct (well-formed required).")); - return this; - } - if (this._options.wellFormed && - (!algorithm_1.xml_isLegalChar(node.systemId) || - (node.systemId.indexOf('"') !== -1 && node.systemId.indexOf("'") !== -1))) { - this.emit("error", new Error("DocType system identifier contains invalid characters (well-formed required).")); - return this; - } - this._docTypeName = options.name; - this._push(this._writer.docType(options.name, node.publicId, node.systemId)); - return this; - }; - /** @inheritdoc */ - XMLBuilderCBImpl.prototype.up = function () { - this._serializeOpenTag(false); - this._serializeCloseTag(); - return this; - }; - /** @inheritdoc */ - XMLBuilderCBImpl.prototype.end = function () { - this._serializeOpenTag(false); - while (this._openTags.length > 0) { - this._serializeCloseTag(); - } - this._push(null); - return this; - }; + finally { if (e_4) throw e_4.error; } + } + return ByteSequence_1.isomorphicDecode(bytes); +} +exports.asciiDecode = asciiDecode; +/** + * Strips newline characters from a string. + * + * @param str - a string + */ +function stripNewlines(str) { /** - * Serializes the opening tag of an element node. - * - * @param hasChildren - whether the element node has child nodes + * To strip newlines from a string, remove any U+000A LF and U+000D CR code + * points from the string. */ - XMLBuilderCBImpl.prototype._serializeOpenTag = function (hasChildren) { - if (this._currentElementSerialized) - return; - if (this._currentElement === undefined) - return; - var node = this._currentElement.node; - if (this._options.wellFormed && (node.localName.indexOf(":") !== -1 || - !algorithm_1.xml_isName(node.localName))) { - this.emit("error", new Error("Node local name contains invalid characters (well-formed required).")); - return; - } - var qualifiedName = ""; - var ignoreNamespaceDefinitionAttribute = false; - var map = this._prefixMap.copy(); - var localPrefixesMap = {}; - var localDefaultNamespace = this._recordNamespaceInformation(node, map, localPrefixesMap); - var inheritedNS = this._openTags.length === 0 ? null : this._openTags[this._openTags.length - 1][1]; - var ns = node.namespaceURI; - if (ns === null) - ns = inheritedNS; - if (inheritedNS === ns) { - if (localDefaultNamespace !== null) { - ignoreNamespaceDefinitionAttribute = true; - } - if (ns === infra_1.namespace.XML) { - qualifiedName = "xml:" + node.localName; - } - else { - qualifiedName = node.localName; - } - this._writer.beginElement(qualifiedName); - this._push(this._writer.openTagBegin(qualifiedName)); - } - else { - var prefix = node.prefix; - var candidatePrefix = null; - if (prefix !== null || ns !== localDefaultNamespace) { - candidatePrefix = map.get(prefix, ns); - } - if (prefix === "xmlns") { - if (this._options.wellFormed) { - this.emit("error", new Error("An element cannot have the 'xmlns' prefix (well-formed required).")); - return; - } - candidatePrefix = prefix; - } - if (candidatePrefix !== null) { - qualifiedName = candidatePrefix + ':' + node.localName; - if (localDefaultNamespace !== null && localDefaultNamespace !== infra_1.namespace.XML) { - inheritedNS = localDefaultNamespace || null; - } - this._writer.beginElement(qualifiedName); - this._push(this._writer.openTagBegin(qualifiedName)); - } - else if (prefix !== null) { - if (prefix in localPrefixesMap) { - prefix = this._generatePrefix(ns, map, this._prefixIndex); - } - map.set(prefix, ns); - qualifiedName += prefix + ':' + node.localName; - this._writer.beginElement(qualifiedName); - this._push(this._writer.openTagBegin(qualifiedName)); - this._push(this._writer.attribute("xmlns:" + prefix, this._serializeAttributeValue(ns, this._options.wellFormed))); - if (localDefaultNamespace !== null) { - inheritedNS = localDefaultNamespace || null; - } - } - else if (localDefaultNamespace === null || - (localDefaultNamespace !== null && localDefaultNamespace !== ns)) { - ignoreNamespaceDefinitionAttribute = true; - qualifiedName += node.localName; - inheritedNS = ns; - this._writer.beginElement(qualifiedName); - this._push(this._writer.openTagBegin(qualifiedName)); - this._push(this._writer.attribute("xmlns", this._serializeAttributeValue(ns, this._options.wellFormed))); - } - else { - qualifiedName += node.localName; - inheritedNS = ns; - this._writer.beginElement(qualifiedName); - this._push(this._writer.openTagBegin(qualifiedName)); - } - } - this._serializeAttributes(node, map, this._prefixIndex, localPrefixesMap, ignoreNamespaceDefinitionAttribute, this._options.wellFormed); - var isHTML = (ns === infra_1.namespace.HTML); - if (isHTML && !hasChildren && - XMLBuilderCBImpl._VoidElementNames.has(node.localName)) { - this._push(this._writer.openTagEnd(qualifiedName, true, true)); - this._writer.endElement(qualifiedName); - } - else if (!isHTML && !hasChildren) { - this._push(this._writer.openTagEnd(qualifiedName, true, false)); - this._writer.endElement(qualifiedName); - } - else { - this._push(this._writer.openTagEnd(qualifiedName, false, false)); - } - this._currentElementSerialized = true; - /** - * Save qualified name, original inherited ns, original prefix map, and - * hasChildren flag. - */ - this._openTags.push([qualifiedName, inheritedNS, this._prefixMap, hasChildren]); - /** - * New values of inherited namespace and prefix map will be used while - * serializing child nodes. They will be returned to their original values - * when this node is closed using the _openTags array item we saved above. - */ - if (this._isPrefixMapModified(this._prefixMap, map)) { - this._prefixMap = map; - } - /** - * Calls following this will either serialize child nodes or close this tag. - */ - this._writer.level++; - }; + return str.replace(/[\n\r]/g, ""); +} +exports.stripNewlines = stripNewlines; +/** + * Normalizes newline characters in a string by converting consecutive + * carriage-return newline characters and also single carriage return characters + * into a single newline. + * + * @param str - a string + */ +function normalizeNewlines(str) { /** - * Serializes the closing tag of an element node. + * To normalize newlines in a string, replace every U+000D CR U+000A LF code + * point pair with a single U+000A LF code point, and then replace every + * remaining U+000D CR code point with a U+000A LF code point. */ - XMLBuilderCBImpl.prototype._serializeCloseTag = function () { - this._writer.level--; - var lastEle = this._openTags.pop(); - /* istanbul ignore next */ - if (lastEle === undefined) { - this.emit("error", new Error("Last element is undefined.")); - return; - } - var _a = __read(lastEle, 4), qualifiedName = _a[0], ns = _a[1], map = _a[2], hasChildren = _a[3]; - /** - * Restore original values of inherited namespace and prefix map. - */ - this._prefixMap = map; - if (!hasChildren) - return; - this._push(this._writer.closeTag(qualifiedName)); - this._writer.endElement(qualifiedName); - }; + return str.replace(/\r\n/g, "\n").replace(/\r/g, "\n"); +} +exports.normalizeNewlines = normalizeNewlines; +/** + * Removes leading and trailing whitespace characters from a string. + * + * @param str - a string + */ +function stripLeadingAndTrailingASCIIWhitespace(str) { /** - * Pushes data to internal buffer. - * - * @param data - data + * To strip leading and trailing ASCII whitespace from a string, remove all + * ASCII whitespace that are at the start or the end of the string. */ - XMLBuilderCBImpl.prototype._push = function (data) { - if (data === null) { - this._ended = true; - this.emit("end"); - } - else if (this._ended) { - this.emit("error", new Error("Cannot push to ended stream.")); - } - else if (data.length !== 0) { - this._writer.hasData = true; - this.emit("data", data, this._writer.level); - } - }; + return str.replace(/^[\t\n\f\r ]+/, "").replace(/[\t\n\f\r ]+$/, ""); +} +exports.stripLeadingAndTrailingASCIIWhitespace = stripLeadingAndTrailingASCIIWhitespace; +/** + * Removes consecutive newline characters from a string. + * + * @param str - a string + */ +function stripAndCollapseASCIIWhitespace(str) { /** - * Reads and serializes an XML tree. - * - * @param node - root node + * To strip and collapse ASCII whitespace in a string, replace any sequence of + * one or more consecutive code points that are ASCII whitespace in the string + * with a single U+0020 SPACE code point, and then remove any leading and + * trailing ASCII whitespace from that string. */ - XMLBuilderCBImpl.prototype._fromNode = function (node) { - var e_2, _a, e_3, _b; - if (util_2.Guard.isElementNode(node)) { - var name = node.prefix ? node.prefix + ":" + node.localName : node.localName; - if (node.namespaceURI !== null) { - this.ele(node.namespaceURI, name); - } - else { - this.ele(name); - } - try { - for (var _c = __values(node.attributes), _d = _c.next(); !_d.done; _d = _c.next()) { - var attr = _d.value; - var name_1 = attr.prefix ? attr.prefix + ":" + attr.localName : attr.localName; - if (attr.namespaceURI !== null) { - this.att(attr.namespaceURI, name_1, attr.value); - } - else { - this.att(name_1, attr.value); - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_d && !_d.done && (_a = _c.return)) _a.call(_c); - } - finally { if (e_2) throw e_2.error; } - } - try { - for (var _e = __values(node.childNodes), _f = _e.next(); !_f.done; _f = _e.next()) { - var child = _f.value; - this._fromNode(child); - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (_f && !_f.done && (_b = _e.return)) _b.call(_e); - } - finally { if (e_3) throw e_3.error; } - } - this.up(); - } - else if (util_2.Guard.isExclusiveTextNode(node) && node.data) { - this.txt(node.data); - } - else if (util_2.Guard.isCommentNode(node)) { - this.com(node.data); - } - else if (util_2.Guard.isCDATASectionNode(node)) { - this.dat(node.data); - } - else if (util_2.Guard.isProcessingInstructionNode(node)) { - this.ins(node.target, node.data); - } - }; + return stripLeadingAndTrailingASCIIWhitespace(str.replace(/[\t\n\f\r ]{2,}/g, " ")); +} +exports.stripAndCollapseASCIIWhitespace = stripAndCollapseASCIIWhitespace; +/** + * Collects a sequence of code points matching a given condition from the input + * string. + * + * @param condition - a condition to match + * @param input - a string + * @param options - starting position + */ +function collectASequenceOfCodePoints(condition, input, options) { /** - * Produces an XML serialization of the attributes of an element node. - * - * @param node - node to serialize - * @param map - namespace prefix map - * @param prefixIndex - generated namespace prefix index - * @param localPrefixesMap - local prefixes map - * @param ignoreNamespaceDefinitionAttribute - whether to ignore namespace - * attributes - * @param requireWellFormed - whether to check conformance + * 1. Let result be the empty string. + * 2. While position doesn’t point past the end of input and the code point at + * position within input meets the condition condition: + * 2.1. Append that code point to the end of result. + * 2.2. Advance position by 1. + * 3. Return result. */ - XMLBuilderCBImpl.prototype._serializeAttributes = function (node, map, prefixIndex, localPrefixesMap, ignoreNamespaceDefinitionAttribute, requireWellFormed) { - var e_4, _a; - var localNameSet = requireWellFormed ? new LocalNameSet_1.LocalNameSet() : undefined; - try { - for (var _b = __values(node.attributes), _c = _b.next(); !_c.done; _c = _b.next()) { - var attr = _c.value; - // Optimize common case - if (!requireWellFormed && !ignoreNamespaceDefinitionAttribute && attr.namespaceURI === null) { - this._push(this._writer.attribute(attr.localName, this._serializeAttributeValue(attr.value, this._options.wellFormed))); - continue; - } - if (requireWellFormed && localNameSet && localNameSet.has(attr.namespaceURI, attr.localName)) { - this.emit("error", new Error("Element contains duplicate attributes (well-formed required).")); - return; - } - if (requireWellFormed && localNameSet) - localNameSet.set(attr.namespaceURI, attr.localName); - var attributeNamespace = attr.namespaceURI; - var candidatePrefix = null; - if (attributeNamespace !== null) { - candidatePrefix = map.get(attr.prefix, attributeNamespace); - if (attributeNamespace === infra_1.namespace.XMLNS) { - if (attr.value === infra_1.namespace.XML || - (attr.prefix === null && ignoreNamespaceDefinitionAttribute) || - (attr.prefix !== null && (!(attr.localName in localPrefixesMap) || - localPrefixesMap[attr.localName] !== attr.value) && - map.has(attr.localName, attr.value))) - continue; - if (requireWellFormed && attr.value === infra_1.namespace.XMLNS) { - this.emit("error", new Error("XMLNS namespace is reserved (well-formed required).")); - return; - } - if (requireWellFormed && attr.value === '') { - this.emit("error", new Error("Namespace prefix declarations cannot be used to undeclare a namespace (well-formed required).")); - return; - } - if (attr.prefix === 'xmlns') - candidatePrefix = 'xmlns'; - /** - * _Note:_ The (candidatePrefix === null) check is not in the spec. - * We deviate from the spec here. Otherwise a prefix is generated for - * all attributes with namespaces. - */ - } - else if (candidatePrefix === null) { - if (attr.prefix !== null && - (!map.hasPrefix(attr.prefix) || - map.has(attr.prefix, attributeNamespace))) { - /** - * Check if we can use the attribute's own prefix. - * We deviate from the spec here. - * TODO: This is not an efficient way of searching for prefixes. - * Follow developments to the spec. - */ - candidatePrefix = attr.prefix; - } - else { - candidatePrefix = this._generatePrefix(attributeNamespace, map, prefixIndex); - } - this._push(this._writer.attribute("xmlns:" + candidatePrefix, this._serializeAttributeValue(attributeNamespace, this._options.wellFormed))); - } - } - if (requireWellFormed && (attr.localName.indexOf(":") !== -1 || - !algorithm_1.xml_isName(attr.localName) || - (attr.localName === "xmlns" && attributeNamespace === null))) { - this.emit("error", new Error("Attribute local name contains invalid characters (well-formed required).")); - return; - } - this._push(this._writer.attribute((candidatePrefix !== null ? candidatePrefix + ":" : "") + attr.localName, this._serializeAttributeValue(attr.value, this._options.wellFormed))); - } - } - catch (e_4_1) { e_4 = { error: e_4_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_4) throw e_4.error; } - } - }; - /** - * Produces an XML serialization of an attribute value. - * - * @param value - attribute value - * @param requireWellFormed - whether to check conformance - */ - XMLBuilderCBImpl.prototype._serializeAttributeValue = function (value, requireWellFormed) { - if (requireWellFormed && value !== null && !algorithm_1.xml_isLegalChar(value)) { - this.emit("error", new Error("Invalid characters in attribute value.")); - return ""; - } - if (value === null) - return ""; - if (this._options.noDoubleEncoding) { - return value.replace(/(?!&(lt|gt|amp|apos|quot);)&/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); - } - else { - var result = ""; - for (var i = 0; i < value.length; i++) { - var c = value[i]; - if (c === "\"") - result += """; - else if (c === "&") - result += "&"; - else if (c === "<") - result += "<"; - else if (c === ">") - result += ">"; - else - result += c; - } - return result; - } - }; - /** - * Records namespace information for the given element and returns the - * default namespace attribute value. - * - * @param node - element node to process - * @param map - namespace prefix map - * @param localPrefixesMap - local prefixes map - */ - XMLBuilderCBImpl.prototype._recordNamespaceInformation = function (node, map, localPrefixesMap) { - var e_5, _a; - var defaultNamespaceAttrValue = null; - try { - for (var _b = __values(node.attributes), _c = _b.next(); !_c.done; _c = _b.next()) { - var attr = _c.value; - var attributeNamespace = attr.namespaceURI; - var attributePrefix = attr.prefix; - if (attributeNamespace === infra_1.namespace.XMLNS) { - if (attributePrefix === null) { - defaultNamespaceAttrValue = attr.value; - continue; - } - else { - var prefixDefinition = attr.localName; - var namespaceDefinition = attr.value; - if (namespaceDefinition === infra_1.namespace.XML) { - continue; - } - if (namespaceDefinition === '') { - namespaceDefinition = null; - } - if (map.has(prefixDefinition, namespaceDefinition)) { - continue; - } - map.set(prefixDefinition, namespaceDefinition); - localPrefixesMap[prefixDefinition] = namespaceDefinition || ''; - } - } - } - } - catch (e_5_1) { e_5 = { error: e_5_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_5) throw e_5.error; } - } - return defaultNamespaceAttrValue; - }; + if (!util_1.isArray(input)) + return collectASequenceOfCodePoints(condition, Array.from(input), options); + var result = ""; + while (options.position < input.length && !!condition.call(null, input[options.position])) { + result += input[options.position]; + options.position++; + } + return result; +} +exports.collectASequenceOfCodePoints = collectASequenceOfCodePoints; +/** + * Skips over ASCII whitespace. + * + * @param input - input string + * @param options - starting position + */ +function skipASCIIWhitespace(input, options) { /** - * Generates a new prefix for the given namespace. - * - * @param newNamespace - a namespace to generate prefix for - * @param prefixMap - namespace prefix map - * @param prefixIndex - generated namespace prefix index + * To skip ASCII whitespace within a string input given a position variable + * position, collect a sequence of code points that are ASCII whitespace from + * input given position. The collected code points are not used, but position + * is still updated. */ - XMLBuilderCBImpl.prototype._generatePrefix = function (newNamespace, prefixMap, prefixIndex) { - var generatedPrefix = "ns" + prefixIndex.value; - prefixIndex.value++; - prefixMap.set(generatedPrefix, newNamespace); - return generatedPrefix; - }; + collectASequenceOfCodePoints(function (str) { return CodePoints_1.ASCIIWhiteSpace.test(str); }, input, options); +} +exports.skipASCIIWhitespace = skipASCIIWhitespace; +/** + * Solits a string at the given delimiter. + * + * @param input - input string + * @param delimiter - a delimiter string + */ +function strictlySplit(input, delimiter) { /** - * Determines if the namespace prefix map was modified from its original. - * - * @param originalMap - original namespace prefix map - * @param newMap - new namespace prefix map + * 1. Let position be a position variable for input, initially pointing at the + * start of input. + * 2. Let tokens be a list of strings, initially empty. + * 3. Let token be the result of collecting a sequence of code points that are + * not equal to delimiter from input, given position. + * 4. Append token to tokens. + * 5. While position is not past the end of input: + * 5.1. Assert: the code point at position within input is delimiter. + * 5.2. Advance position by 1. + * 5.3. Let token be the result of collecting a sequence of code points that + * are not equal to delimiter from input, given position. + * 5.4. Append token to tokens. + * 6. Return tokens. */ - XMLBuilderCBImpl.prototype._isPrefixMapModified = function (originalMap, newMap) { - var items1 = originalMap._items; - var items2 = newMap._items; - var nullItems1 = originalMap._nullItems; - var nullItems2 = newMap._nullItems; - for (var key in items2) { - var arr1 = items1[key]; - if (arr1 === undefined) - return true; - var arr2 = items2[key]; - if (arr1.length !== arr2.length) - return true; - for (var i = 0; i < arr1.length; i++) { - if (arr1[i] !== arr2[i]) - return true; - } - } - if (nullItems1.length !== nullItems2.length) - return true; - for (var i = 0; i < nullItems1.length; i++) { - if (nullItems1[i] !== nullItems2[i]) - return true; - } - return false; - }; - XMLBuilderCBImpl._VoidElementNames = new Set(['area', 'base', 'basefont', - 'bgsound', 'br', 'col', 'embed', 'frame', 'hr', 'img', 'input', 'keygen', - 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr']); - return XMLBuilderCBImpl; -}(events_1.EventEmitter)); -exports.XMLBuilderCBImpl = XMLBuilderCBImpl; -//# sourceMappingURL=XMLBuilderCBImpl.js.map - -/***/ }), -/* 552 */, -/* 553 */, -/* 554 */, -/* 555 */, -/* 556 */ -/***/ (function(module) { - -"use strict"; -// YAML error class. http://stackoverflow.com/questions/8458984 -// - - -function YAMLException(reason, mark) { - // Super constructor - Error.call(this); - - this.name = 'YAMLException'; - this.reason = reason; - this.mark = mark; - this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : ''); - - // Include stack trace in error object - if (Error.captureStackTrace) { - // Chrome and NodeJS - Error.captureStackTrace(this, this.constructor); - } else { - // FF, IE 10+ and Safari 6+. Fallback for others - this.stack = (new Error()).stack || ''; - } + if (!util_1.isArray(input)) + return strictlySplit(Array.from(input), delimiter); + var options = { position: 0 }; + var tokens = []; + var token = collectASequenceOfCodePoints(function (str) { return delimiter !== str; }, input, options); + tokens.push(token); + while (options.position < input.length) { + console.assert(input[options.position] === delimiter, "strictlySplit found no delimiter in input string."); + options.position++; + token = collectASequenceOfCodePoints(function (str) { return delimiter !== str; }, input, options); + tokens.push(token); + } + return tokens; } - - -// Inherit from Error -YAMLException.prototype = Object.create(Error.prototype); -YAMLException.prototype.constructor = YAMLException; - - -YAMLException.prototype.toString = function toString(compact) { - var result = this.name + ': '; - - result += this.reason || '(unknown reason)'; - - if (!compact && this.mark) { - result += ' ' + this.mark.toString(); - } - - return result; -}; - - -module.exports = YAMLException; - - -/***/ }), -/* 557 */, -/* 558 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(970); -var NodeImpl_1 = __webpack_require__(935); -var WebIDLAlgorithm_1 = __webpack_require__(495); +exports.strictlySplit = strictlySplit; /** - * Represents an object providing methods which are not dependent on - * any particular document + * Splits a string on ASCII whitespace. + * + * @param input - a string */ -var DocumentTypeImpl = /** @class */ (function (_super) { - __extends(DocumentTypeImpl, _super); +function splitAStringOnASCIIWhitespace(input) { /** - * Initializes a new instance of `DocumentType`. - * - * @param name - name of the node - * @param publicId - `PUBLIC` identifier - * @param systemId - `SYSTEM` identifier + * 1. Let position be a position variable for input, initially pointing at the + * start of input. + * 2. Let tokens be a list of strings, initially empty. + * 3. Skip ASCII whitespace within input given position. + * 4. While position is not past the end of input: + * 4.1. Let token be the result of collecting a sequence of code points that + * are not ASCII whitespace from input, given position. + * 4.2. Append token to tokens. + * 4.3. Skip ASCII whitespace within input given position. + * 5. Return tokens. */ - function DocumentTypeImpl(name, publicId, systemId) { - var _this = _super.call(this) || this; - _this._name = ''; - _this._publicId = ''; - _this._systemId = ''; - _this._name = name; - _this._publicId = publicId; - _this._systemId = systemId; - return _this; + if (!util_1.isArray(input)) + return splitAStringOnASCIIWhitespace(Array.from(input)); + var options = { position: 0 }; + var tokens = []; + skipASCIIWhitespace(input, options); + while (options.position < input.length) { + var token = collectASequenceOfCodePoints(function (str) { return !CodePoints_1.ASCIIWhiteSpace.test(str); }, input, options); + tokens.push(token); + skipASCIIWhitespace(input, options); } - Object.defineProperty(DocumentTypeImpl.prototype, "name", { - /** @inheritdoc */ - get: function () { return this._name; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DocumentTypeImpl.prototype, "publicId", { - /** @inheritdoc */ - get: function () { return this._publicId; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DocumentTypeImpl.prototype, "systemId", { - /** @inheritdoc */ - get: function () { return this._systemId; }, - enumerable: true, - configurable: true - }); - // MIXIN: ChildNode - /* istanbul ignore next */ - DocumentTypeImpl.prototype.before = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; - } - throw new Error("Mixin: ChildNode not implemented."); - }; - /* istanbul ignore next */ - DocumentTypeImpl.prototype.after = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; - } - throw new Error("Mixin: ChildNode not implemented."); - }; - /* istanbul ignore next */ - DocumentTypeImpl.prototype.replaceWith = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; - } - throw new Error("Mixin: ChildNode not implemented."); - }; - /* istanbul ignore next */ - DocumentTypeImpl.prototype.remove = function () { throw new Error("Mixin: ChildNode not implemented."); }; + return tokens; +} +exports.splitAStringOnASCIIWhitespace = splitAStringOnASCIIWhitespace; +/** + * Splits a string on commas. + * + * @param input - a string + */ +function splitAStringOnCommas(input) { /** - * Creates a new `DocumentType`. - * - * @param document - owner document - * @param name - name of the node - * @param publicId - `PUBLIC` identifier - * @param systemId - `SYSTEM` identifier + * 1. Let position be a position variable for input, initially pointing at the + * start of input. + * 2. Let tokens be a list of strings, initially empty. + * 3. While position is not past the end of input: + * 3.1. Let token be the result of collecting a sequence of code points that + * are not U+002C (,) from input, given position. + * 3.2. Strip leading and trailing ASCII whitespace from token. + * 3.3. Append token to tokens. + * 3.4. If position is not past the end of input, then: + * 3.4.1. Assert: the code point at position within input is U+002C (,). + * 3.4.2. Advance position by 1. + * 4. Return tokens. */ - DocumentTypeImpl._create = function (document, name, publicId, systemId) { - if (publicId === void 0) { publicId = ''; } - if (systemId === void 0) { systemId = ''; } - var node = new DocumentTypeImpl(name, publicId, systemId); - node._nodeDocument = document; - return node; - }; - return DocumentTypeImpl; -}(NodeImpl_1.NodeImpl)); -exports.DocumentTypeImpl = DocumentTypeImpl; + if (!util_1.isArray(input)) + return splitAStringOnCommas(Array.from(input)); + var options = { position: 0 }; + var tokens = []; + while (options.position < input.length) { + var token = collectASequenceOfCodePoints(function (str) { return str !== ','; }, input, options); + tokens.push(stripLeadingAndTrailingASCIIWhitespace(token)); + if (options.position < input.length) { + console.assert(input[options.position] === ',', "splitAStringOnCommas found no delimiter in input string."); + options.position++; + } + } + return tokens; +} +exports.splitAStringOnCommas = splitAStringOnCommas; /** - * Initialize prototype properties + * Concatenates a list of strings with the given separator. + * + * @param list - a list of strings + * @param separator - a separator string */ -WebIDLAlgorithm_1.idl_defineConst(DocumentTypeImpl.prototype, "_nodeType", interfaces_1.NodeType.DocumentType); -//# sourceMappingURL=DocumentTypeImpl.js.map +function concatenate(list, separator) { + if (separator === void 0) { separator = ""; } + /** + * 1. If list is empty, then return the empty string. + * 2. If separator is not given, then set separator to the empty string. + * 3. Return a string whose contents are list’s items, in order, separated + * from each other by separator. + */ + if (list.length === 0) + return ""; + return list.join(separator); +} +exports.concatenate = concatenate; +//# sourceMappingURL=String.js.map /***/ }), -/* 559 */, -/* 560 */, -/* 561 */, -/* 562 */, -/* 563 */, -/* 564 */, -/* 565 */, -/* 566 */, -/* 567 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 4251: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var XMLReader_1 = __webpack_require__(771); -exports.XMLReader = XMLReader_1.XMLReader; -var ObjectReader_1 = __webpack_require__(50); -exports.ObjectReader = ObjectReader_1.ObjectReader; -var JSONReader_1 = __webpack_require__(112); -exports.JSONReader = JSONReader_1.JSONReader; -var YAMLReader_1 = __webpack_require__(865); -exports.YAMLReader = YAMLReader_1.YAMLReader; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var base64 = __importStar(__nccwpck_require__(8585)); +exports.base64 = base64; +var byte = __importStar(__nccwpck_require__(2460)); +exports.byte = byte; +var byteSequence = __importStar(__nccwpck_require__(1627)); +exports.byteSequence = byteSequence; +var codePoint = __importStar(__nccwpck_require__(8548)); +exports.codePoint = codePoint; +var json = __importStar(__nccwpck_require__(9387)); +exports.json = json; +var list = __importStar(__nccwpck_require__(340)); +exports.list = list; +var map = __importStar(__nccwpck_require__(2298)); +exports.map = map; +var namespace = __importStar(__nccwpck_require__(3764)); +exports.namespace = namespace; +var queue = __importStar(__nccwpck_require__(9201)); +exports.queue = queue; +var set = __importStar(__nccwpck_require__(5931)); +exports.set = set; +var stack = __importStar(__nccwpck_require__(8784)); +exports.stack = stack; +var string = __importStar(__nccwpck_require__(3203)); +exports.string = string; //# sourceMappingURL=index.js.map /***/ }), -/* 568 */, -/* 569 */, -/* 570 */, -/* 571 */, -/* 572 */, -/* 573 */, -/* 574 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 3568: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var util_1 = __webpack_require__(918); -var algorithm_1 = __webpack_require__(163); -/** - * Represents a mixin that extends non-element parent nodes. This mixin - * is implemented by {@link Document} and {@link DocumentFragment}. - */ -var NonElementParentNodeImpl = /** @class */ (function () { - function NonElementParentNodeImpl() { - } - /** @inheritdoc */ - NonElementParentNodeImpl.prototype.getElementById = function (id) { - /** - * The getElementById(elementId) method, when invoked, must return the first - * element, in tree order, within the context object’s descendants, - * whose ID is elementId, and null if there is no such element otherwise. - */ - var ele = algorithm_1.tree_getFirstDescendantNode(util_1.Cast.asNode(this), false, false, function (e) { return util_1.Guard.isElementNode(e); }); - while (ele !== null) { - if (ele._uniqueIdentifier === id) { - return ele; - } - ele = algorithm_1.tree_getNextDescendantNode(util_1.Cast.asNode(this), ele, false, false, function (e) { return util_1.Guard.isElementNode(e); }); +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; } - return null; }; - return NonElementParentNodeImpl; -}()); -exports.NonElementParentNodeImpl = NonElementParentNodeImpl; -//# sourceMappingURL=NonElementParentNodeImpl.js.map - -/***/ }), -/* 575 */ -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Represents a set of unique attribute namespaceURI and localName pairs. - * This set will contain tuples of unique attribute namespaceURI and - * localName pairs, and is populated as each attr is processed. This set is - * used to [optionally] enforce the well-formed constraint that an element - * cannot have two attributes with the same namespaceURI and localName. - * This can occur when two otherwise identical attributes on the same - * element differ only by their prefix values. - */ -var LocalNameSet = /** @class */ (function () { - function LocalNameSet() { - // tuple storage - this._items = {}; - this._nullItems = {}; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } - /** - * Adds or replaces a tuple. - * - * @param ns - namespace URI - * @param localName - attribute local name - */ - LocalNameSet.prototype.set = function (ns, localName) { - if (ns === null) { - this._nullItems[localName] = true; - } - else if (this._items[ns]) { - this._items[ns][localName] = true; - } - else { - this._items[ns] = {}; - this._items[ns][localName] = true; - } - }; - /** - * Determines if the given tuple exists in the set. - * - * @param ns - namespace URI - * @param localName - attribute local name - */ - LocalNameSet.prototype.has = function (ns, localName) { - if (ns === null) { - return this._nullItems[localName] === true; - } - else if (this._items[ns]) { - return this._items[ns][localName] === true; - } - else { - return false; + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); } - }; - return LocalNameSet; -}()); -exports.LocalNameSet = LocalNameSet; -//# sourceMappingURL=LocalNameSet.js.map - -/***/ }), -/* 576 */, -/* 577 */, -/* 578 */, -/* 579 */, -/* 580 */, -/* 581 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var DocumentFragmentImpl_1 = __webpack_require__(796); -var util_1 = __webpack_require__(592); -var algorithm_1 = __webpack_require__(163); -/** - * Represents a shadow root. - */ -var ShadowRootImpl = /** @class */ (function (_super) { - __extends(ShadowRootImpl, _super); - /** - * Initializes a new instance of `ShadowRoot`. - * - * @param host - shadow root's host element - * @param mode - shadow root's mode - */ - function ShadowRootImpl(host, mode) { - var _this = _super.call(this) || this; - _this._host = host; - _this._mode = mode; - return _this; + finally { if (e) throw e.error; } } - Object.defineProperty(ShadowRootImpl.prototype, "mode", { - /** @inheritdoc */ - get: function () { return this._mode; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ShadowRootImpl.prototype, "host", { - /** @inheritdoc */ - get: function () { return this._host; }, - enumerable: true, - configurable: true - }); - /** - * Gets the parent event target for the given event. - * - * @param event - an event - */ - ShadowRootImpl.prototype._getTheParent = function (event) { - /** - * A shadow root’s get the parent algorithm, given an event, returns null - * if event’s composed flag is unset and shadow root is the root of - * event’s path’s first struct’s invocation target, and shadow root’s host - * otherwise. - */ - if (!event._composedFlag && !util_1.isEmpty(event._path) && - algorithm_1.tree_rootNode(event._path[0].invocationTarget) === this) { - return null; - } - else { - return this._host; - } - }; - // MIXIN: DocumentOrShadowRoot - // No elements - /** - * Creates a new `ShadowRoot`. - * - * @param document - owner document - * @param host - shadow root's host element - */ - ShadowRootImpl._create = function (document, host) { - return new ShadowRootImpl(host, "closed"); - }; - return ShadowRootImpl; -}(DocumentFragmentImpl_1.DocumentFragmentImpl)); -exports.ShadowRootImpl = ShadowRootImpl; -//# sourceMappingURL=ShadowRootImpl.js.map - -/***/ }), -/* 582 */, -/* 583 */, -/* 584 */ -/***/ (function(__unusedmodule, exports, __webpack_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.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 }; + return ar; }; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AdoptDistribution = exports.AdoptImplementation = void 0; -const core = __importStar(__webpack_require__(470)); -const tc = __importStar(__webpack_require__(139)); -const fs_1 = __importDefault(__webpack_require__(747)); -const path_1 = __importDefault(__webpack_require__(622)); -const semver_1 = __importDefault(__webpack_require__(876)); -const base_installer_1 = __webpack_require__(83); -const util_1 = __webpack_require__(322); -var AdoptImplementation; -(function (AdoptImplementation) { - AdoptImplementation["Hotspot"] = "Hotspot"; - AdoptImplementation["OpenJ9"] = "OpenJ9"; -})(AdoptImplementation = exports.AdoptImplementation || (exports.AdoptImplementation = {})); -class AdoptDistribution extends base_installer_1.JavaBase { - constructor(installerOptions, jvmImpl) { - super(`Adopt-${jvmImpl}`, installerOptions); - this.jvmImpl = jvmImpl; - } - findPackageForDownload(version) { - return __awaiter(this, void 0, void 0, function* () { - const availableVersionsRaw = yield this.getAvailableVersions(); - const availableVersionsWithBinaries = availableVersionsRaw - .filter(item => item.binaries.length > 0) - .map(item => { - return { - version: item.version_data.semver, - url: item.binaries[0].package.link - }; - }); - const satisfiedVersions = availableVersionsWithBinaries - .filter(item => util_1.isVersionSatisfies(version, item.version)) - .sort((a, b) => { - return -semver_1.default.compareBuild(a.version, b.version); - }); - const resolvedFullVersion = satisfiedVersions.length > 0 ? satisfiedVersions[0] : null; - if (!resolvedFullVersion) { - const availableOptions = availableVersionsWithBinaries.map(item => item.version).join(', '); - const availableOptionsMessage = availableOptions - ? `\nAvailable versions: ${availableOptions}` - : ''; - throw new Error(`Could not find satisfied version for SemVer '${version}'. ${availableOptionsMessage}`); - } - return resolvedFullVersion; - }); - } - downloadTool(javaRelease) { - return __awaiter(this, void 0, void 0, function* () { - let javaPath; - let extractedJavaPath; - core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`); - const javaArchivePath = yield tc.downloadTool(javaRelease.url); - core.info(`Extracting Java archive...`); - let extension = util_1.getDownloadArchiveExtension(); - extractedJavaPath = yield util_1.extractJdkFile(javaArchivePath, extension); - const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0]; - const archivePath = path_1.default.join(extractedJavaPath, archiveName); - const version = this.getToolcacheVersionName(javaRelease.version); - javaPath = yield tc.cacheDir(archivePath, this.toolcacheFolderName, version, this.architecture); - return { version: javaRelease.version, path: javaPath }; - }); - } - get toolcacheFolderName() { - if (this.jvmImpl === AdoptImplementation.Hotspot) { - // exclude Hotspot postfix from distribution name because Hosted runners have pre-cached Adopt OpenJDK under "Java_Adopt_jdk" - // for more information see: https://github.com/actions/setup-java/pull/155#discussion_r610451063 - return `Java_Adopt_${this.packageType}`; - } - return super.toolcacheFolderName; - } - getAvailableVersions() { - return __awaiter(this, void 0, void 0, function* () { - const platform = this.getPlatformOption(); - const arch = this.architecture; - const imageType = this.packageType; - const versionRange = encodeURI('[1.0,100.0]'); // retrieve all available versions - const releaseType = this.stable ? 'ga' : 'ea'; - console.time('adopt-retrieve-available-versions'); - const baseRequestArguments = [ - `project=jdk`, - 'vendor=adoptopenjdk', - `heap_size=normal`, - 'sort_method=DEFAULT', - 'sort_order=DESC', - `os=${platform}`, - `architecture=${arch}`, - `image_type=${imageType}`, - `release_type=${releaseType}`, - `jvm_impl=${this.jvmImpl.toLowerCase()}` - ].join('&'); - // need to iterate through all pages to retrieve the list of all versions - // Adopt API doesn't provide way to retrieve the count of pages to iterate so infinity loop - let page_index = 0; - const availableVersions = []; - while (true) { - const requestArguments = `${baseRequestArguments}&page_size=20&page=${page_index}`; - const availableVersionsUrl = `https://api.adoptopenjdk.net/v3/assets/version/${versionRange}?${requestArguments}`; - if (core.isDebug() && page_index === 0) { - // url is identical except page_index so print it once for debug - core.debug(`Gathering available versions from '${availableVersionsUrl}'`); - } - const paginationPage = (yield this.http.getJson(availableVersionsUrl)).result; - if (paginationPage === null || paginationPage.length === 0) { - // break infinity loop because we have reached end of pagination - break; - } - availableVersions.push(...paginationPage); - page_index++; - } - if (core.isDebug()) { - core.startGroup('Print information about available versions'); - console.timeEnd('adopt-retrieve-available-versions'); - console.log(`Available versions: [${availableVersions.length}]`); - console.log(availableVersions.map(item => item.version_data.semver).join(', ')); - core.endGroup(); - } - return availableVersions; - }); - } - getPlatformOption() { - // Adopt has own platform names so need to map them - switch (process.platform) { - case 'darwin': - return 'mac'; - case 'win32': - return 'windows'; - default: - return process.platform; - } - } -} -exports.AdoptDistribution = AdoptDistribution; - - -/***/ }), -/* 585 */, -/* 586 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const compare = __webpack_require__(874) -const lt = (a, b, loose) => compare(a, b, loose) < 0 -module.exports = lt - - -/***/ }), -/* 587 */, -/* 588 */, -/* 589 */, -/* 590 */, -/* 591 */, -/* 592 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var util_1 = __nccwpck_require__(6195); +var interfaces_1 = __nccwpck_require__(1752); +var infra_1 = __nccwpck_require__(4251); +var url_1 = __nccwpck_require__(8835); +var _validationErrorCallback; +/** + * Default ports for a special URL scheme. + */ +var _defaultPorts = { + "ftp": 21, + "file": null, + "http": 80, + "https": 443, + "ws": 80, + "wss": 443 }; -Object.defineProperty(exports, "__esModule", { value: true }); -var FixedSizeSet_1 = __webpack_require__(704); -exports.FixedSizeSet = FixedSizeSet_1.FixedSizeSet; -var ObjectCache_1 = __webpack_require__(889); -exports.ObjectCache = ObjectCache_1.ObjectCache; -var CompareCache_1 = __webpack_require__(524); -exports.CompareCache = CompareCache_1.CompareCache; -var Lazy_1 = __webpack_require__(947); -exports.Lazy = Lazy_1.Lazy; -var StringWalker_1 = __webpack_require__(47); -exports.StringWalker = StringWalker_1.StringWalker; /** - * Applies the mixin to a given class. + * The C0 control percent-encode set are the C0 controls and all code points + * greater than U+007E (~). + */ +var _c0ControlPercentEncodeSet = /[\0-\x1F\x7F-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +/** + * The fragment percent-encode set is the C0 control percent-encode set and + * U+0020 SPACE, U+0022 ("), U+003C (<), U+003E (>), and U+0060 (`). + */ +var _fragmentPercentEncodeSet = /[ "<>`]|[\0-\x1F\x7F-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +/** + * The path percent-encode set is the fragment percent-encode set and + * U+0023 (#), U+003F (?), U+007B ({), and U+007D (}). + */ +var _pathPercentEncodeSet = /[ "<>`#?{}]|[\0-\x1F\x7F-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +/** + * The userinfo percent-encode set is the path percent-encode set and + * U+002F (/), U+003A (:), U+003B (;), U+003D (=), U+0040 (@), U+005B ([), + * U+005C (\), U+005D (]), U+005E (^), and U+007C (|). + */ +var _userInfoPercentEncodeSet = /[ "<>`#?{}/:;=@\[\]\\\^\|]|[\0-\x1F\x7F-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +/** + * The URL code points are ASCII alphanumeric, U+0021 (!), U+0024 ($), + * U+0026 (&), U+0027 ('), U+0028 LEFT PARENTHESIS, U+0029 RIGHT PARENTHESIS, + * U+002A (*), U+002B (+), U+002C (,), U+002D (-), U+002E (.), U+002F (/), + * U+003A (:), U+003B (;), U+003D (=), U+003F (?), U+0040 (@), U+005F (_), + * U+007E (~), and code points in the range U+00A0 to U+10FFFD, inclusive, + * excluding surrogates and noncharacters. + */ +var _urlCodePoints = /[0-9A-Za-z!\$&-\/:;=\?@_~\xA0-\uD7FF\uE000-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uD83E\uD840-\uD87E\uD880-\uD8BE\uD8C0-\uD8FE\uD900-\uD93E\uD940-\uD97E\uD980-\uD9BE\uD9C0-\uD9FE\uDA00-\uDA3E\uDA40-\uDA7E\uDA80-\uDABE\uDAC0-\uDAFE\uDB00-\uDB3E\uDB40-\uDB7E\uDB80-\uDBBE\uDBC0-\uDBFE][\uDC00-\uDFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDC00-\uDFFD]/; +/** + * A forbidden host code point is U+0000 NULL, U+0009 TAB, U+000A LF, + * U+000D CR, U+0020 SPACE, U+0023 (#), U+0025 (%), U+002F (/), U+003A (:), + * U+003F (?), U+0040 (@), U+005B ([), U+005C (\), or U+005D (]). + */ +var _forbiddenHostCodePoint = /[\0\t\f\r #%/:?@\[\\\]]/; +/** + * Sets the callback function for validation errors. * - * @param baseClass - class to receive the mixin - * @param mixinClass - mixin class - * @param overrides - an array with names of function overrides. Base class - * functions whose names are in this array will be kept by prepending an - * underscore to their names. + * @param validationErrorCallback - a callback function to be called when a + * validation error occurs */ -function applyMixin(baseClass, mixinClass) { - var overrides = []; - for (var _i = 2; _i < arguments.length; _i++) { - overrides[_i - 2] = arguments[_i]; - } - Object.getOwnPropertyNames(mixinClass.prototype).forEach(function (name) { - if (name !== "constructor") { - if (overrides.indexOf(name) !== -1) { - var orgPropDesc = Object.getOwnPropertyDescriptor(baseClass.prototype, name); - /* istanbul ignore else */ - if (orgPropDesc) { - Object.defineProperty(baseClass.prototype, "_" + name, orgPropDesc); - } - } - var propDesc = Object.getOwnPropertyDescriptor(mixinClass.prototype, name); - /* istanbul ignore else */ - if (propDesc) { - Object.defineProperty(baseClass.prototype, name, propDesc); - } - } - }); +function setValidationErrorCallback(validationErrorCallback) { + _validationErrorCallback = validationErrorCallback; } -exports.applyMixin = applyMixin; +exports.setValidationErrorCallback = setValidationErrorCallback; /** - * Applies default values to the given object. + * Generates a validation error. * - * @param obj - an object - * @param defaults - an object with default values - * @param overwrite - if set to `true` defaults object always overwrites object - * values, whether they are `undefined` or not. + * @param message - error message */ -function applyDefaults(obj, defaults, overwrite) { - if (overwrite === void 0) { overwrite = false; } - var result = clone(obj || {}); - forEachObject(defaults, function (key, val) { - if (isPlainObject(val)) { - result[key] = applyDefaults(result[key], val, overwrite); - } - else if (overwrite || result[key] === undefined) { - result[key] = val; - } - }); - return result; +function validationError(message) { + if (_validationErrorCallback !== undefined) { + _validationErrorCallback.call(null, "Validation Error: " + message); + } } -exports.applyDefaults = applyDefaults; /** - * Iterates over items of an array or set. - * - * @param arr - array or set to iterate - * @param callback - a callback function which receives each array item as its - * single argument - * @param thisArg - the value of this inside callback + * Creates a new URL. */ -function forEachArray(arr, callback, thisArg) { - arr.forEach(callback, thisArg); +function newURL() { + return { + scheme: '', + username: '', + password: '', + host: null, + port: null, + path: [], + query: null, + fragment: null, + _cannotBeABaseURLFlag: false, + _blobURLEntry: null + }; } -exports.forEachArray = forEachArray; +exports.newURL = newURL; /** - * Iterates over key/value pairs of a map or object. + * Determines if the scheme is a special scheme. * - * @param obj - map or object to iterate - * @param callback - a callback function which receives object key as its first - * argument and object value as its second argument - * @param thisArg - the value of this inside callback + * @param scheme - a scheme */ -function forEachObject(obj, callback, thisArg) { - if (isMap(obj)) { - obj.forEach(function (value, key) { return callback.call(thisArg, key, value); }); - } - else { - for (var key in obj) { - /* istanbul ignore else */ - if (obj.hasOwnProperty(key)) { - callback.call(thisArg, key, obj[key]); - } - } - } +function isSpecialScheme(scheme) { + return (scheme in _defaultPorts); } -exports.forEachObject = forEachObject; +exports.isSpecialScheme = isSpecialScheme; /** - * Returns the number of entries in an array or set. + * Determines if the URL has a special scheme. * - * @param arr - array or set + * @param url - an URL */ -function arrayLength(obj) { - if (isSet(obj)) { - return obj.size; - } - else { - return obj.length; - } +function isSpecial(url) { + return isSpecialScheme(url.scheme); } -exports.arrayLength = arrayLength; +exports.isSpecial = isSpecial; /** - * Returns the number of entries in a map or object. + * Returns the default port for a special scheme. * - * @param obj - map or object + * @param scheme - a scheme */ -function objectLength(obj) { - if (isMap(obj)) { - return obj.size; - } - else { - return Object.keys(obj).length; - } +function defaultPort(scheme) { + return _defaultPorts[scheme] || null; } -exports.objectLength = objectLength; +exports.defaultPort = defaultPort; /** - * Gets the value of a key from a map or object. + * Determines if the URL has credentials. * - * @param obj - map or object - * @param key - the key to retrieve + * @param url - an URL */ -function getObjectValue(obj, key) { - if (isMap(obj)) { - return obj.get(key); - } - else { - return obj[key]; - } +function includesCredentials(url) { + return url.username !== '' || url.password !== ''; } -exports.getObjectValue = getObjectValue; +exports.includesCredentials = includesCredentials; /** - * Removes a property from a map or object. + * Determines if an URL cannot have credentials. * - * @param obj - map or object - * @param key - the key to remove + * @param url - an URL */ -function removeObjectValue(obj, key) { - if (isMap(obj)) { - obj.delete(key); - } - else { - delete obj[key]; - } +function cannotHaveAUsernamePasswordPort(url) { + /** + * A URL cannot have a username/password/port if its host is null or the + * empty string, its cannot-be-a-base-URL flag is set, or its scheme is + * "file". + */ + return (url.host === null || url.host === "" || url._cannotBeABaseURLFlag || + url.scheme === "file"); } -exports.removeObjectValue = removeObjectValue; +exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort; /** - * Deep clones the given object. + * Serializes an URL into a string. * - * @param obj - an object + * @param url - an URL */ -function clone(obj) { +function urlSerializer(url, excludeFragmentFlag) { var e_1, _a; - if (isFunction(obj)) { - return obj; - } - else if (isArray(obj)) { - var result = []; + if (excludeFragmentFlag === void 0) { excludeFragmentFlag = false; } + /** + * 1. Let output be url’s scheme and U+003A (:) concatenated. + */ + var output = url.scheme + ':'; + /** + * 2. If url’s host is non-null: + */ + if (url.host !== null) { + /** + * 2.1. Append "//" to output. + */ + output += '//'; + /** + * 2.2. If url includes credentials, then: + */ + if (includesCredentials(url)) { + /** + * 2.2.1. Append url’s username to output. + * 2.2.2. If url’s password is not the empty string, then append U+003A (:), + * followed by url’s password, to output. + * 2.2.3. Append U+0040 (@) to output. + */ + output += url.username; + if (url.password !== '') { + output += ':' + url.password; + } + output += '@'; + } + /** + * 2.3. Append url’s host, serialized, to output. + * 2.4. If url’s port is non-null, append U+003A (:) followed by url’s port, + * serialized, to output. + */ + output += hostSerializer(url.host); + if (url.port !== null) { + output += ':' + url.port; + } + } + else if (url.host === null && url.scheme === "file") { + /** + * 3. Otherwise, if url’s host is null and url’s scheme is "file", append "//" to output. + */ + output += '//'; + } + /** + * 4. If url’s cannot-be-a-base-URL flag is set, append url’s path[0] to + * output. + * 5. Otherwise, then for each string in url’s path, append U+002F (/) + * followed by the string to output. + */ + if (url._cannotBeABaseURLFlag) { + output += url.path[0]; + } + else { try { - for (var obj_1 = __values(obj), obj_1_1 = obj_1.next(); !obj_1_1.done; obj_1_1 = obj_1.next()) { - var item = obj_1_1.value; - result.push(clone(item)); + for (var _b = __values(url.path), _c = _b.next(); !_c.done; _c = _b.next()) { + var str = _c.value; + output += '/' + str; } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (obj_1_1 && !obj_1_1.done && (_a = obj_1.return)) _a.call(obj_1); + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } finally { if (e_1) throw e_1.error; } } - return result; } - else if (isObject(obj)) { - var result = {}; - for (var key in obj) { - /* istanbul ignore next */ - if (obj.hasOwnProperty(key)) { - var val = obj[key]; - result[key] = clone(val); - } - } - return result; + /** + * 6. If url’s query is non-null, append U+003F (?), followed by url’s + * query, to output. + * 7. If the exclude fragment flag is unset and url’s fragment is non-null, + * append U+0023 (#), followed by url’s fragment, to output. + * 8. Return output. + */ + if (url.query !== null) { + output += '?' + url.query; } - else { - return obj; + if (!excludeFragmentFlag && url.fragment !== null) { + output += '#' + url.fragment; } + return output; } -exports.clone = clone; -/** - * Type guard for boolean types - * - * @param x - a variable to type check - */ -function isBoolean(x) { - return typeof x === "boolean"; -} -exports.isBoolean = isBoolean; -/** - * Type guard for numeric types - * - * @param x - a variable to type check - */ -function isNumber(x) { - return typeof x === "number"; -} -exports.isNumber = isNumber; -/** - * Type guard for strings - * - * @param x - a variable to type check - */ -function isString(x) { - return typeof x === "string"; -} -exports.isString = isString; -/** - * Type guard for function objects - * - * @param x - a variable to type check - */ -function isFunction(x) { - return !!x && Object.prototype.toString.call(x) === '[object Function]'; -} -exports.isFunction = isFunction; -/** - * Type guard for JS objects - * - * _Note:_ Functions are objects too - * - * @param x - a variable to type check - */ -function isObject(x) { - var type = typeof x; - return !!x && (type === 'function' || type === 'object'); -} -exports.isObject = isObject; -/** - * Type guard for arrays - * - * @param x - a variable to type check - */ -function isArray(x) { - return Array.isArray(x); -} -exports.isArray = isArray; -/** - * Type guard for sets. - * - * @param x - a variable to check - */ -function isSet(x) { - return x instanceof Set; -} -exports.isSet = isSet; -/** - * Type guard for maps. - * - * @param x - a variable to check - */ -function isMap(x) { - return x instanceof Map; -} -exports.isMap = isMap; +exports.urlSerializer = urlSerializer; /** - * Determines if `x` is an empty Array or an Object with no own properties. + * Serializes a host into a string. * - * @param x - a variable to check + * @param host - a host */ -function isEmpty(x) { - if (isArray(x)) { - return !x.length; - } - else if (isSet(x)) { - return !x.size; - } - else if (isMap(x)) { - return !x.size; +function hostSerializer(host) { + /** + * 1. If host is an IPv4 address, return the result of running the IPv4 + * serializer on host. + * 2. Otherwise, if host is an IPv6 address, return U+005B ([), followed + * by the result of running the IPv6 serializer on host, followed by + * U+005D (]). + * 3. Otherwise, host is a domain, opaque host, or empty host, return host. + */ + if (util_1.isNumber(host)) { + return iPv4Serializer(host); } - else if (isObject(x)) { - for (var key in x) { - if (x.hasOwnProperty(key)) { - return false; - } - } - return true; + else if (util_1.isArray(host)) { + return '[' + iPv6Serializer(host) + ']'; } - return false; -} -exports.isEmpty = isEmpty; -/** - * Determines if `x` is a plain Object. - * - * @param x - a variable to check - */ -function isPlainObject(x) { - if (isObject(x)) { - var proto = Object.getPrototypeOf(x); - var ctor = proto.constructor; - return proto && ctor && - (typeof ctor === 'function') && (ctor instanceof ctor) && - (Function.prototype.toString.call(ctor) === Function.prototype.toString.call(Object)); + else { + return host; } - return false; } -exports.isPlainObject = isPlainObject; +exports.hostSerializer = hostSerializer; /** - * Determines if `x` is an iterable Object. + * Serializes an IPv4 address into a string. * - * @param x - a variable to check - */ -function isIterable(x) { - return x && (typeof x[Symbol.iterator] === 'function'); -} -exports.isIterable = isIterable; -/** - * Gets the primitive value of an object. + * @param address - an IPv4 address */ -function getValue(obj) { - if (isFunction(obj.valueOf)) { - return obj.valueOf(); - } - else { - return obj; +function iPv4Serializer(address) { + /** + * 1. Let output be the empty string. + * 2. Let n be the value of address. + * 3. For each i in the range 1 to 4, inclusive: + * 3.1. Prepend n % 256, serialized, to output. + * 3.2. If i is not 4, then prepend U+002E (.) to output. + * 3.3. Set n to floor(n / 256). + * 4. Return output. + */ + var output = ""; + var n = address; + for (var i = 1; i <= 4; i++) { + output = (n % 256).toString() + output; + if (i !== 4) { + output = '.' + output; + } + n = Math.floor(n / 256); } + return output; } -exports.getValue = getValue; +exports.iPv4Serializer = iPv4Serializer; /** - * UTF-8 encodes the given string. + * Serializes an IPv6 address into a string. * - * @param input - a string + * @param address - an IPv6 address represented as a list of eight numbers */ -function utf8Encode(input) { - var bytes = new Uint8Array(input.length * 4); - var byteIndex = 0; - for (var i = 0; i < input.length; i++) { - var char = input.charCodeAt(i); - if (char < 128) { - bytes[byteIndex++] = char; +function iPv6Serializer(address) { + /** + * 1. Let output be the empty string. + * 2. Let compress be an index to the first IPv6 piece in the first longest + * sequences of address’s IPv6 pieces that are 0. + * In 0:f:0:0:f:f:0:0 it would point to the second 0. + * 3. If there is no sequence of address’s IPv6 pieces that are 0 that is + * longer than 1, then set compress to null. + */ + var output = ""; + var compress = null; + var lastIndex = -1; + var count = 0; + var lastCount = 0; + for (var i = 0; i < 8; i++) { + if (address[i] !== 0) + continue; + count = 1; + for (var j = i + 1; j < 8; j++) { + if (address[j] !== 0) + break; + count++; continue; } - else if (char < 2048) { - bytes[byteIndex++] = char >> 6 | 192; + if (count > lastCount) { + lastCount = count; + lastIndex = i; } - else { - if (char > 0xd7ff && char < 0xdc00) { - if (++i >= input.length) { - throw new Error("Incomplete surrogate pair."); - } - var c2 = input.charCodeAt(i); - if (c2 < 0xdc00 || c2 > 0xdfff) { - throw new Error("Invalid surrogate character."); - } - char = 0x10000 + ((char & 0x03ff) << 10) + (c2 & 0x03ff); - bytes[byteIndex++] = char >> 18 | 240; - bytes[byteIndex++] = char >> 12 & 63 | 128; - } - else { - bytes[byteIndex++] = char >> 12 | 224; - } - bytes[byteIndex++] = char >> 6 & 63 | 128; + } + if (lastCount > 1) + compress = lastIndex; + /** + * 4. Let ignore0 be false. + * 5. For each pieceIndex in the range 0 to 7, inclusive: + */ + var ignore0 = false; + for (var pieceIndex = 0; pieceIndex < 8; pieceIndex++) { + /** + * 5.1. If ignore0 is true and address[pieceIndex] is 0, then continue. + * 5.2. Otherwise, if ignore0 is true, set ignore0 to false. + * 5.3. If compress is pieceIndex, then: + */ + if (ignore0 && address[pieceIndex] === 0) + continue; + if (ignore0) + ignore0 = false; + if (compress === pieceIndex) { + /** + * 5.3.1. Let separator be "::" if pieceIndex is 0, and U+003A (:) otherwise. + * 5.3.2. Append separator to output. + * 5.3.3. Set ignore0 to true and continue. + */ + output += (pieceIndex === 0 ? '::' : ':'); + ignore0 = true; + continue; } - bytes[byteIndex++] = char & 63 | 128; + /** + * 5.4. Append address[pieceIndex], represented as the shortest possible + * lowercase hexadecimal number, to output. + * 5.5. If pieceIndex is not 7, then append U+003A (:) to output. + */ + output += address[pieceIndex].toString(16); + if (pieceIndex !== 7) + output += ':'; } - return bytes.subarray(0, byteIndex); + /** + * 6. Return output. + */ + return output; } -exports.utf8Encode = utf8Encode; +exports.iPv6Serializer = iPv6Serializer; /** - * UTF-8 decodes the given byte sequence into a string. + * Parses an URL string. * - * @param bytes - a byte sequence + * @param input - input string + * @param baseURL - base URL + * @param encodingOverride - encoding override */ -function utf8Decode(bytes) { - var result = ""; - var i = 0; - while (i < bytes.length) { - var c = bytes[i++]; - if (c > 127) { - if (c > 191 && c < 224) { - if (i >= bytes.length) { - throw new Error("Incomplete 2-byte sequence."); - } - c = (c & 31) << 6 | bytes[i++] & 63; - } - else if (c > 223 && c < 240) { - if (i + 1 >= bytes.length) { - throw new Error("Incomplete 3-byte sequence."); - } - c = (c & 15) << 12 | (bytes[i++] & 63) << 6 | bytes[i++] & 63; - } - else if (c > 239 && c < 248) { - if (i + 2 >= bytes.length) { - throw new Error("Incomplete 4-byte sequence."); - } - c = (c & 7) << 18 | (bytes[i++] & 63) << 12 | (bytes[i++] & 63) << 6 | bytes[i++] & 63; - } - else { - throw new Error("Unknown multi-byte start."); - } - } - if (c <= 0xffff) { - result += String.fromCharCode(c); - } - else if (c <= 0x10ffff) { - c -= 0x10000; - result += String.fromCharCode(c >> 10 | 0xd800); - result += String.fromCharCode(c & 0x3FF | 0xdc00); - } - else { - throw new Error("Code point exceeds UTF-16 limit."); - } - } - return result; -} -exports.utf8Decode = utf8Decode; -//# sourceMappingURL=index.js.map - -/***/ }), -/* 593 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const compareBuild = __webpack_require__(16) -const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose)) -module.exports = rsort - - -/***/ }), -/* 594 */, -/* 595 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); +function urlParser(input, baseURL, encodingOverride) { + /** + * 1. Let url be the result of running the basic URL parser on input with + * base, and encoding override as provided. + * 2. If url is failure, return failure. + * 3. If url’s scheme is not "blob", return url. + * 4. Set url’s blob URL entry to the result of resolving the blob URL url, + * if that did not return failure, and null otherwise. + * 5. Return url. + */ + var url = basicURLParser(input, baseURL, encodingOverride); + if (url === null) + return null; + if (url.scheme !== "blob") + return url; + var entry = resolveABlobURL(url); + if (entry !== null) { + url._blobURLEntry = entry; } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } + else { + url._blobURLEntry = null; } - return ar; -}; -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(625); -var util_1 = __webpack_require__(592); -var writers_1 = __webpack_require__(95); -var interfaces_2 = __webpack_require__(970); -var util_2 = __webpack_require__(918); -var algorithm_1 = __webpack_require__(163); -var dom_1 = __webpack_require__(743); -var infra_1 = __webpack_require__(23); -var readers_1 = __webpack_require__(567); + return url; +} +exports.urlParser = urlParser; /** - * Represents a wrapper that extends XML nodes to implement easy to use and - * chainable document builder methods. + * Parses an URL string. + * + * @param input - input string + * @param baseURL - base URL + * @param encodingOverride - encoding override */ -var XMLBuilderImpl = /** @class */ (function () { +function basicURLParser(input, baseURL, encodingOverride, url, stateOverride) { + var e_2, _a, e_3, _b; /** - * Initializes a new instance of `XMLBuilderNodeImpl`. - * - * @param domNode - the DOM node to wrap + * 1. If url is not given: + * 1.1. Set url to a new URL. + * 1.2. If input contains any leading or trailing C0 control or space, + * validation error. + * 1.3. Remove any leading and trailing C0 control or space from input. */ - function XMLBuilderImpl(domNode) { - this._domNode = domNode; + if (url === undefined) { + url = newURL(); + // leading + var leadingControlOrSpace = /^[\u0000-\u001F\u0020]+/; + var trailingControlOrSpace = /[\u0000-\u001F\u0020]+$/; + if (leadingControlOrSpace.test(input) || trailingControlOrSpace.test(input)) { + validationError("Input string contains leading or trailing control characters or space."); + } + input = input.replace(leadingControlOrSpace, ''); + input = input.replace(trailingControlOrSpace, ''); } - Object.defineProperty(XMLBuilderImpl.prototype, "node", { - /** @inheritdoc */ - get: function () { return this._domNode; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(XMLBuilderImpl.prototype, "options", { - /** @inheritdoc */ - get: function () { return this._options; }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - XMLBuilderImpl.prototype.set = function (options) { - this._options = util_1.applyDefaults(util_1.applyDefaults(this._options, options, true), // apply user settings - interfaces_1.DefaultBuilderOptions); // provide defaults - return this; - }; - /** @inheritdoc */ - XMLBuilderImpl.prototype.ele = function (p1, p2, p3) { - var _a, _b, _c; - var namespace; - var name; - var attributes; - if (util_1.isObject(p1)) { - // ele(obj: ExpandObject) - return new readers_1.ObjectReader(this._options).parse(this, p1); - } - else if (p1 !== null && /^\s* 0) { - if (namespace === undefined) - namespace = name.slice(atIndex + 1); - name = name.slice(0, atIndex); - } - if (namespace === undefined) { - // look-up default namespace - namespace = (ele ? this._options.defaultNamespace.ele : this._options.defaultNamespace.att); - } - else if (namespace !== null && namespace[0] === "@") { - // look-up namespace aliases - var alias = namespace.slice(1); - namespace = this._options.namespaceAlias[alias]; - if (namespace === undefined) { - throw new Error("Namespace alias `" + alias + "` is not defined. " + this._debugInfo()); - } - } - return [namespace, name]; - }; + var buffer = ""; + var atFlag = false; + var arrayFlag = false; + var passwordTokenSeenFlag = false; + var EOF = ""; + var walker = new util_1.StringWalker(input); /** - * Updates the element's namespace. - * - * @param ns - new namespace + * 11. Keep running the following state machine by switching on state. If + * after a run pointer points to the EOF code point, go to the next step. + * Otherwise, increase pointer by one and continue with the state machine. */ - XMLBuilderImpl.prototype._updateNamespace = function (ns) { - var e_2, _a, e_3, _b; - var ele = this._domNode; - if (util_2.Guard.isElementNode(ele) && ns !== null && ele.namespaceURI !== ns) { - var _c = __read(algorithm_1.namespace_extractQName(ele.prefix ? ele.prefix + ':' + ele.localName : ele.localName), 2), elePrefix = _c[0], eleLocalName = _c[1]; - // re-create the element node if its namespace changed - // we can't simply change the namespaceURI since its read-only - var newEle = algorithm_1.create_element(this._doc, eleLocalName, ns, elePrefix); - try { - for (var _d = __values(ele.attributes), _e = _d.next(); !_e.done; _e = _d.next()) { - var attr = _e.value; - var attrQName = attr.prefix ? attr.prefix + ':' + attr.localName : attr.localName; - var _f = __read(algorithm_1.namespace_extractQName(attrQName), 1), attrPrefix = _f[0]; - var newAttrNS = attr.namespaceURI; - if (newAttrNS === null && attrPrefix !== null) { - newAttrNS = ele.lookupNamespaceURI(attrPrefix); + while (true) { + switch (state) { + case interfaces_1.ParserState.SchemeStart: + /** + * 1. If c is an ASCII alpha, append c, lowercased, to buffer, and set + * state to scheme state. + * 2. Otherwise, if state override is not given, set state to no scheme + * state, and decrease pointer by one. + * 3. Otherwise, validation error, return failure. + */ + if (infra_1.codePoint.ASCIIAlpha.test(walker.c())) { + buffer += walker.c().toLowerCase(); + state = interfaces_1.ParserState.Scheme; + } + else if (stateOverride === undefined) { + state = interfaces_1.ParserState.NoScheme; + walker.pointer--; + } + else { + validationError("Invalid scheme start character."); + return null; + } + break; + case interfaces_1.ParserState.Scheme: + /** + * 1. If c is an ASCII alphanumeric, U+002B (+), U+002D (-), or U+002E + * (.), append c, lowercased, to buffer. + */ + if (infra_1.codePoint.ASCIIAlphanumeric.test(walker.c()) || + walker.c() === '+' || walker.c() === '-' || walker.c() === '.') { + buffer += walker.c().toLowerCase(); + } + else if (walker.c() === ':') { + /** + * 2. Otherwise, if c is U+003A (:), then: + * 2.1. If state override is given, then: + * 2.1.1. If url’s scheme is a special scheme and buffer is not a + * special scheme, then return. + * 2.1.2. If url’s scheme is not a special scheme and buffer is a + * special scheme, then return. + * 2.1.3. If url includes credentials or has a non-null port, and + * buffer is "file", then return. + * 2.1.4. If url’s scheme is "file" and its host is an empty host or + * null, then return. + */ + if (stateOverride !== undefined) { + if (isSpecialScheme(url.scheme) && !isSpecialScheme(buffer)) + return url; + if (!isSpecialScheme(url.scheme) && isSpecialScheme(buffer)) + return url; + if ((includesCredentials(url) || url.port !== null) && buffer === "file") + return url; + if (url.scheme === "file" && (url.host === "" || url.host === null)) + return url; } - if (newAttrNS === null) { - newEle.setAttribute(attrQName, attr.value); + /** + * 2.2. Set url’s scheme to buffer. + */ + url.scheme = buffer; + /** + * 2.3. If state override is given, then: + * 2.3.1. If url’s port is url’s scheme’s default port, then set + * url’s port to null. + * 2.3.2. Return. + */ + if (stateOverride !== undefined) { + if (url.port === defaultPort(url.scheme)) { + url.port = null; + } + return url; + } + /** + * 2.4. Set buffer to the empty string. + */ + buffer = ""; + if (url.scheme === "file") { + /** + * 2.5. If url’s scheme is "file", then: + * 2.5.1. If remaining does not start with "//", validation error. + * 2.5.2. Set state to file state. + */ + if (!walker.remaining().startsWith("//")) { + validationError("Invalid file URL scheme, '//' expected."); + } + state = interfaces_1.ParserState.File; + } + else if (isSpecial(url) && baseURL !== null && baseURL.scheme === url.scheme) { + /** + * 2.6. Otherwise, if url is special, base is non-null, and base’s + * scheme is equal to url’s scheme, set state to special relative + * or authority state. + */ + state = interfaces_1.ParserState.SpecialRelativeOrAuthority; + } + else if (isSpecial(url)) { + /** + * 2.7. Otherwise, if url is special, set state to special + * authority slashes state. + */ + state = interfaces_1.ParserState.SpecialAuthoritySlashes; + } + else if (walker.remaining().startsWith("/")) { + /** + * 2.8. Otherwise, if remaining starts with an U+002F (/), set state + * to path or authority state and increase pointer by one. + */ + state = interfaces_1.ParserState.PathOrAuthority; + walker.pointer++; } else { - newEle.setAttributeNS(newAttrNS, attrQName, attr.value); + /** + * 2.9. Otherwise, set url’s cannot-be-a-base-URL flag, append an + * empty string to url’s path, and set state to + * cannot-be-a-base-URL path state. + */ + url._cannotBeABaseURLFlag = true; + url.path.push(""); + state = interfaces_1.ParserState.CannotBeABaseURLPath; } } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_e && !_e.done && (_a = _d.return)) _a.call(_d); - } - finally { if (e_2) throw e_2.error; } - } - // replace the new node in parent node - var parent = ele.parentNode; - /* istanbul ignore next */ - if (parent === null) { - throw new Error("Parent node is null." + this._debugInfo()); - } - parent.replaceChild(newEle, ele); - this._domNode = newEle; - try { - // check child nodes - for (var _g = __values(ele.childNodes), _h = _g.next(); !_h.done; _h = _g.next()) { - var childNode = _h.value; - var newChildNode = childNode.cloneNode(true); - newEle.appendChild(newChildNode); - if (util_2.Guard.isElementNode(newChildNode)) { - var _j = __read(algorithm_1.namespace_extractQName(newChildNode.prefix ? newChildNode.prefix + ':' + newChildNode.localName : newChildNode.localName), 1), newChildNodePrefix = _j[0]; - var newChildNodeNS = newEle.lookupNamespaceURI(newChildNodePrefix); - new XMLBuilderImpl(newChildNode)._updateNamespace(newChildNodeNS); - } + else if (stateOverride === undefined) { + /** + * 3. Otherwise, if state override is not given, set buffer to the + * empty string, state to no scheme state, and start over (from the + * first code point in input). + */ + buffer = ""; + state = interfaces_1.ParserState.NoScheme; + walker.pointer = 0; + continue; } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (_h && !_h.done && (_b = _g.return)) _b.call(_g); + else { + /** + * 4. Otherwise, validation error, return failure. + */ + validationError("Invalid input string."); + return null; } - finally { if (e_3) throw e_3.error; } - } - } - }; - Object.defineProperty(XMLBuilderImpl.prototype, "_doc", { - /** - * Returns the document owning this node. - */ - get: function () { - var node = this.node; - if (util_2.Guard.isDocumentNode(node)) { - return node; - } - else { - var docNode = node.ownerDocument; - /* istanbul ignore next */ - if (!docNode) - throw new Error("Owner document is null. " + this._debugInfo()); - return docNode; - } - }, - enumerable: true, - configurable: true - }); - /** - * Returns debug information for this node. - * - * @param name - node name - */ - XMLBuilderImpl.prototype._debugInfo = function (name) { - var node = this.node; - var parentNode = node.parentNode; - name = name || node.nodeName; - var parentName = parentNode ? parentNode.nodeName : ''; - if (!parentName) { - return "node: <" + name + ">"; - } - else { - return "node: <" + name + ">, parent: <" + parentName + ">"; - } - }; - Object.defineProperty(XMLBuilderImpl.prototype, "_options", { - /** - * Gets or sets builder options. - */ - get: function () { - var doc = this._doc; - /* istanbul ignore next */ - if (doc._xmlBuilderOptions === undefined) { - throw new Error("Builder options is not set."); - } - return doc._xmlBuilderOptions; - }, - set: function (value) { - var doc = this._doc; - doc._xmlBuilderOptions = value; - }, - enumerable: true, - configurable: true - }); - return XMLBuilderImpl; -}()); -exports.XMLBuilderImpl = XMLBuilderImpl; -//# sourceMappingURL=XMLBuilderImpl.js.map - -/***/ }), -/* 596 */, -/* 597 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMException_1 = __webpack_require__(35); -var util_1 = __webpack_require__(918); -var algorithm_1 = __webpack_require__(163); -/** - * Represents a target to which an event can be dispatched. - */ -var EventTargetImpl = /** @class */ (function () { - /** - * Initializes a new instance of `EventTarget`. - */ - function EventTargetImpl() { - } - Object.defineProperty(EventTargetImpl.prototype, "_eventListenerList", { - get: function () { - return this.__eventListenerList || (this.__eventListenerList = []); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(EventTargetImpl.prototype, "_eventHandlerMap", { - get: function () { - return this.__eventHandlerMap || (this.__eventHandlerMap = {}); - }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - EventTargetImpl.prototype.addEventListener = function (type, callback, options) { - if (options === void 0) { options = { passive: false, once: false, capture: false }; } - /** - * 1. Let capture, passive, and once be the result of flattening more options. - */ - var _a = __read(algorithm_1.eventTarget_flattenMore(options), 3), capture = _a[0], passive = _a[1], once = _a[2]; - // convert callback function to EventListener, return if null - var listenerCallback; - if (!callback) { - return; - } - else if (util_1.Guard.isEventListener(callback)) { - listenerCallback = callback; - } - else { - listenerCallback = { handleEvent: callback }; - } - /** - * 2. Add an event listener with the context object and an event listener - * whose type is type, callback is callback, capture is capture, passive is - * passive, and once is once. - */ - algorithm_1.eventTarget_addEventListener(this, { - type: type, - callback: listenerCallback, - capture: capture, - passive: passive, - once: once, - removed: false - }); - }; - /** @inheritdoc */ - EventTargetImpl.prototype.removeEventListener = function (type, callback, options) { - /** - * TODO: Implement realms - * 1. If the context object’s relevant global object is a - * ServiceWorkerGlobalScope object and its associated service worker’s - * script resource’s has ever been evaluated flag is set, then throw - * a TypeError. [SERVICE-WORKERS] - */ - if (options === void 0) { options = { capture: false }; } - /** - * 2. Let capture be the result of flattening options. - */ - var capture = algorithm_1.eventTarget_flatten(options); - if (!callback) - return; - /** - * 3. If the context object’s event listener list contains an event listener - * whose type is type, callback is callback, and capture is capture, then - * remove an event listener with the context object and that event listener. - */ - for (var i = 0; i < this._eventListenerList.length; i++) { - var entry = this._eventListenerList[i]; - if (entry.type !== type || entry.capture !== capture) - continue; - if (util_1.Guard.isEventListener(callback) && entry.callback === callback) { - algorithm_1.eventTarget_removeEventListener(this, entry, i); break; - } - else if (callback && entry.callback.handleEvent === callback) { - algorithm_1.eventTarget_removeEventListener(this, entry, i); - break; - } - } - }; - /** @inheritdoc */ - EventTargetImpl.prototype.dispatchEvent = function (event) { - /** - * 1. If event’s dispatch flag is set, or if its initialized flag is not - * set, then throw an "InvalidStateError" DOMException. - * 2. Initialize event’s isTrusted attribute to false. - * 3. Return the result of dispatching event to the context object. - */ - if (event._dispatchFlag || !event._initializedFlag) { - throw new DOMException_1.InvalidStateError(); - } - event._isTrusted = false; - return algorithm_1.event_dispatch(event, this); - }; - /** @inheritdoc */ - EventTargetImpl.prototype._getTheParent = function (event) { - return null; - }; - return EventTargetImpl; -}()); -exports.EventTargetImpl = EventTargetImpl; -//# sourceMappingURL=EventTargetImpl.js.map - -/***/ }), -/* 598 */, -/* 599 */, -/* 600 */, -/* 601 */, -/* 602 */, -/* 603 */, -/* 604 */, -/* 605 */ -/***/ (function(module) { - -module.exports = require("http"); - -/***/ }), -/* 606 */, -/* 607 */, -/* 608 */, -/* 609 */, -/* 610 */, -/* 611 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; -// Standard YAML's Core schema. -// http://www.yaml.org/spec/1.2/spec.html#id2804923 -// -// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. -// So, Core schema has no distinctions from JSON schema is JS-YAML. - - - - - -var Schema = __webpack_require__(733); - - -module.exports = new Schema({ - include: [ - __webpack_require__(720) - ] -}); - - -/***/ }), -/* 612 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - -module.exports = Yallist - -Yallist.Node = Node -Yallist.create = Yallist - -function Yallist (list) { - var self = this - if (!(self instanceof Yallist)) { - self = new Yallist() - } - - self.tail = null - self.head = null - self.length = 0 - - if (list && typeof list.forEach === 'function') { - list.forEach(function (item) { - self.push(item) - }) - } else if (arguments.length > 0) { - for (var i = 0, l = arguments.length; i < l; i++) { - self.push(arguments[i]) - } - } - - return self -} - -Yallist.prototype.removeNode = function (node) { - if (node.list !== this) { - throw new Error('removing node which does not belong to this list') - } - - var next = node.next - var prev = node.prev - - if (next) { - next.prev = prev - } - - if (prev) { - prev.next = next - } - - if (node === this.head) { - this.head = next - } - if (node === this.tail) { - this.tail = prev - } - - node.list.length-- - node.next = null - node.prev = null - node.list = null - - return next -} - -Yallist.prototype.unshiftNode = function (node) { - if (node === this.head) { - return - } - - if (node.list) { - node.list.removeNode(node) - } - - var head = this.head - node.list = this - node.next = head - if (head) { - head.prev = node - } - - this.head = node - if (!this.tail) { - this.tail = node - } - this.length++ -} - -Yallist.prototype.pushNode = function (node) { - if (node === this.tail) { - return - } - - if (node.list) { - node.list.removeNode(node) - } - - var tail = this.tail - node.list = this - node.prev = tail - if (tail) { - tail.next = node - } - - this.tail = node - if (!this.head) { - this.head = node - } - this.length++ -} - -Yallist.prototype.push = function () { - for (var i = 0, l = arguments.length; i < l; i++) { - push(this, arguments[i]) - } - return this.length -} - -Yallist.prototype.unshift = function () { - for (var i = 0, l = arguments.length; i < l; i++) { - unshift(this, arguments[i]) - } - return this.length -} - -Yallist.prototype.pop = function () { - if (!this.tail) { - return undefined - } - - var res = this.tail.value - this.tail = this.tail.prev - if (this.tail) { - this.tail.next = null - } else { - this.head = null - } - this.length-- - return res -} - -Yallist.prototype.shift = function () { - if (!this.head) { - return undefined - } - - var res = this.head.value - this.head = this.head.next - if (this.head) { - this.head.prev = null - } else { - this.tail = null - } - this.length-- - return res -} - -Yallist.prototype.forEach = function (fn, thisp) { - thisp = thisp || this - for (var walker = this.head, i = 0; walker !== null; i++) { - fn.call(thisp, walker.value, i, this) - walker = walker.next - } -} - -Yallist.prototype.forEachReverse = function (fn, thisp) { - thisp = thisp || this - for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { - fn.call(thisp, walker.value, i, this) - walker = walker.prev - } -} - -Yallist.prototype.get = function (n) { - for (var i = 0, walker = this.head; walker !== null && i < n; i++) { - // abort out of the list early if we hit a cycle - walker = walker.next - } - if (i === n && walker !== null) { - return walker.value - } -} - -Yallist.prototype.getReverse = function (n) { - for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { - // abort out of the list early if we hit a cycle - walker = walker.prev - } - if (i === n && walker !== null) { - return walker.value - } -} - -Yallist.prototype.map = function (fn, thisp) { - thisp = thisp || this - var res = new Yallist() - for (var walker = this.head; walker !== null;) { - res.push(fn.call(thisp, walker.value, this)) - walker = walker.next - } - return res -} - -Yallist.prototype.mapReverse = function (fn, thisp) { - thisp = thisp || this - var res = new Yallist() - for (var walker = this.tail; walker !== null;) { - res.push(fn.call(thisp, walker.value, this)) - walker = walker.prev - } - return res -} - -Yallist.prototype.reduce = function (fn, initial) { - var acc - var walker = this.head - if (arguments.length > 1) { - acc = initial - } else if (this.head) { - walker = this.head.next - acc = this.head.value - } else { - throw new TypeError('Reduce of empty list with no initial value') - } - - for (var i = 0; walker !== null; i++) { - acc = fn(acc, walker.value, i) - walker = walker.next - } - - return acc -} - -Yallist.prototype.reduceReverse = function (fn, initial) { - var acc - var walker = this.tail - if (arguments.length > 1) { - acc = initial - } else if (this.tail) { - walker = this.tail.prev - acc = this.tail.value - } else { - throw new TypeError('Reduce of empty list with no initial value') - } - - for (var i = this.length - 1; walker !== null; i--) { - acc = fn(acc, walker.value, i) - walker = walker.prev - } - - return acc -} - -Yallist.prototype.toArray = function () { - var arr = new Array(this.length) - for (var i = 0, walker = this.head; walker !== null; i++) { - arr[i] = walker.value - walker = walker.next - } - return arr -} - -Yallist.prototype.toArrayReverse = function () { - var arr = new Array(this.length) - for (var i = 0, walker = this.tail; walker !== null; i++) { - arr[i] = walker.value - walker = walker.prev - } - return arr -} - -Yallist.prototype.slice = function (from, to) { - to = to || this.length - if (to < 0) { - to += this.length - } - from = from || 0 - if (from < 0) { - from += this.length - } - var ret = new Yallist() - if (to < from || to < 0) { - return ret - } - if (from < 0) { - from = 0 - } - if (to > this.length) { - to = this.length - } - for (var i = 0, walker = this.head; walker !== null && i < from; i++) { - walker = walker.next - } - for (; walker !== null && i < to; i++, walker = walker.next) { - ret.push(walker.value) - } - return ret -} - -Yallist.prototype.sliceReverse = function (from, to) { - to = to || this.length - if (to < 0) { - to += this.length - } - from = from || 0 - if (from < 0) { - from += this.length - } - var ret = new Yallist() - if (to < from || to < 0) { - return ret - } - if (from < 0) { - from = 0 - } - if (to > this.length) { - to = this.length - } - for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { - walker = walker.prev - } - for (; walker !== null && i > from; i--, walker = walker.prev) { - ret.push(walker.value) - } - return ret -} - -Yallist.prototype.splice = function (start, deleteCount, ...nodes) { - if (start > this.length) { - start = this.length - 1 - } - if (start < 0) { - start = this.length + start; - } - - for (var i = 0, walker = this.head; walker !== null && i < start; i++) { - walker = walker.next - } - - var ret = [] - for (var i = 0; walker && i < deleteCount; i++) { - ret.push(walker.value) - walker = this.removeNode(walker) - } - if (walker === null) { - walker = this.tail - } - - if (walker !== this.head && walker !== this.tail) { - walker = walker.prev - } - - for (var i = 0; i < nodes.length; i++) { - walker = insert(this, walker, nodes[i]) - } - return ret; -} - -Yallist.prototype.reverse = function () { - var head = this.head - var tail = this.tail - for (var walker = head; walker !== null; walker = walker.prev) { - var p = walker.prev - walker.prev = walker.next - walker.next = p - } - this.head = tail - this.tail = head - return this -} - -function insert (self, node, value) { - var inserted = node === self.head ? - new Node(value, null, node, self) : - new Node(value, node, node.next, self) - - if (inserted.next === null) { - self.tail = inserted - } - if (inserted.prev === null) { - self.head = inserted - } - - self.length++ - - return inserted -} - -function push (self, item) { - self.tail = new Node(item, self.tail, null, self) - if (!self.head) { - self.head = self.tail - } - self.length++ -} - -function unshift (self, item) { - self.head = new Node(item, null, self.head, self) - if (!self.tail) { - self.tail = self.head - } - self.length++ -} - -function Node (value, prev, next, list) { - if (!(this instanceof Node)) { - return new Node(value, prev, next, list) - } - - this.list = list - this.value = value - - if (prev) { - prev.next = this - this.prev = prev - } else { - this.prev = null - } - - if (next) { - next.prev = this - this.next = next - } else { - this.next = null - } -} - -try { - // add if support for Symbol.iterator is present - __webpack_require__(396)(Yallist) -} catch (er) {} - - -/***/ }), -/* 613 */, -/* 614 */ -/***/ (function(module) { - -module.exports = require("events"); - -/***/ }), -/* 615 */, -/* 616 */, -/* 617 */, -/* 618 */, -/* 619 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(970); -var CharacterDataImpl_1 = __webpack_require__(43); -var WebIDLAlgorithm_1 = __webpack_require__(495); -/** - * Represents a processing instruction node. - */ -var ProcessingInstructionImpl = /** @class */ (function (_super) { - __extends(ProcessingInstructionImpl, _super); - /** - * Initializes a new instance of `ProcessingInstruction`. - */ - function ProcessingInstructionImpl(target, data) { - var _this = _super.call(this, data) || this; - _this._target = target; - return _this; - } - Object.defineProperty(ProcessingInstructionImpl.prototype, "target", { - /** - * Gets the target of the {@link ProcessingInstruction} node. - */ - get: function () { return this._target; }, - enumerable: true, - configurable: true - }); - /** - * Creates a new `ProcessingInstruction`. - * - * @param document - owner document - * @param target - instruction target - * @param data - node contents - */ - ProcessingInstructionImpl._create = function (document, target, data) { - var node = new ProcessingInstructionImpl(target, data); - node._nodeDocument = document; - return node; - }; - return ProcessingInstructionImpl; -}(CharacterDataImpl_1.CharacterDataImpl)); -exports.ProcessingInstructionImpl = ProcessingInstructionImpl; -/** - * Initialize prototype properties - */ -WebIDLAlgorithm_1.idl_defineConst(ProcessingInstructionImpl.prototype, "_nodeType", interfaces_1.NodeType.ProcessingInstruction); -//# sourceMappingURL=ProcessingInstructionImpl.js.map - -/***/ }), -/* 620 */, -/* 621 */, -/* 622 */ -/***/ (function(module) { - -module.exports = require("path"); - -/***/ }), -/* 623 */, -/* 624 */, -/* 625 */ -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Defines default values for builder options. - */ -exports.DefaultBuilderOptions = { - version: "1.0", - encoding: undefined, - standalone: undefined, - keepNullNodes: false, - keepNullAttributes: false, - ignoreConverters: false, - convert: { - att: "@", - ins: "?", - text: "#", - cdata: "$", - comment: "!" - }, - defaultNamespace: { - ele: undefined, - att: undefined - }, - namespaceAlias: { - html: "http://www.w3.org/1999/xhtml", - xml: "http://www.w3.org/XML/1998/namespace", - xmlns: "http://www.w3.org/2000/xmlns/", - mathml: "http://www.w3.org/1998/Math/MathML", - svg: "http://www.w3.org/2000/svg", - xlink: "http://www.w3.org/1999/xlink" - }, - invalidCharReplacement: undefined, - parser: undefined -}; -/** - * Contains keys of `XMLBuilderOptions`. - */ -exports.XMLBuilderOptionKeys = new Set(Object.keys(exports.DefaultBuilderOptions)); -/** - * Defines default values for builder options. - */ -exports.DefaultXMLBuilderCBOptions = { - format: "xml", - wellFormed: false, - prettyPrint: false, - indent: " ", - newline: "\n", - offset: 0, - width: 0, - allowEmptyTags: false, - spaceBeforeSlash: false, - keepNullNodes: false, - keepNullAttributes: false, - ignoreConverters: false, - convert: { - att: "@", - ins: "?", - text: "#", - cdata: "$", - comment: "!" - }, - defaultNamespace: { - ele: undefined, - att: undefined - }, - namespaceAlias: { - html: "http://www.w3.org/1999/xhtml", - xml: "http://www.w3.org/XML/1998/namespace", - xmlns: "http://www.w3.org/2000/xmlns/", - mathml: "http://www.w3.org/1998/Math/MathML", - svg: "http://www.w3.org/2000/svg", - xlink: "http://www.w3.org/1999/xlink" - } -}; -//# sourceMappingURL=interfaces.js.map - -/***/ }), -/* 626 */, -/* 627 */, -/* 628 */, -/* 629 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - -var Type = __webpack_require__(945); - -function resolveJavascriptRegExp(data) { - if (data === null) return false; - if (data.length === 0) return false; - - var regexp = data, - tail = /\/([gim]*)$/.exec(data), - modifiers = ''; - - // if regexp starts with '/' it can have modifiers and must be properly closed - // `/foo/gim` - modifiers tail can be maximum 3 chars - if (regexp[0] === '/') { - if (tail) modifiers = tail[1]; - - if (modifiers.length > 3) return false; - // if expression starts with /, is should be properly terminated - if (regexp[regexp.length - modifiers.length - 1] !== '/') return false; - } - - return true; -} - -function constructJavascriptRegExp(data) { - var regexp = data, - tail = /\/([gim]*)$/.exec(data), - modifiers = ''; - - // `/foo/gim` - tail can be maximum 4 chars - if (regexp[0] === '/') { - if (tail) modifiers = tail[1]; - regexp = regexp.slice(1, regexp.length - modifiers.length - 1); - } - - return new RegExp(regexp, modifiers); -} - -function representJavascriptRegExp(object /*, style*/) { - var result = '/' + object.source + '/'; - - if (object.global) result += 'g'; - if (object.multiline) result += 'm'; - if (object.ignoreCase) result += 'i'; - - return result; -} - -function isRegExp(object) { - return Object.prototype.toString.call(object) === '[object RegExp]'; -} - -module.exports = new Type('tag:yaml.org,2002:js/regexp', { - kind: 'scalar', - resolve: resolveJavascriptRegExp, - construct: constructJavascriptRegExp, - predicate: isRegExp, - represent: representJavascriptRegExp -}); - - -/***/ }), -/* 630 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const compare = __webpack_require__(874) -const rcompare = (a, b, loose) => compare(b, a, loose) -module.exports = rcompare - - -/***/ }), -/* 631 */ -/***/ (function(module) { - -module.exports = require("net"); - -/***/ }), -/* 632 */, -/* 633 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - -var Type = __webpack_require__(945); - -function resolveYamlMerge(data) { - return data === '<<' || data === null; -} - -module.exports = new Type('tag:yaml.org,2002:merge', { - kind: 'scalar', - resolve: resolveYamlMerge -}); - - -/***/ }), -/* 634 */, -/* 635 */, -/* 636 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var util_1 = __webpack_require__(592); -var algorithm_1 = __webpack_require__(163); -/** - * Represents an ordered set of nodes. - */ -var NodeListImpl = /** @class */ (function () { - /** - * Initializes a new instance of `NodeList`. - * - * @param root - root node - */ - function NodeListImpl(root) { - this._live = true; - this._filter = null; - this._length = 0; - this._root = root; - return new Proxy(this, this); - } - Object.defineProperty(NodeListImpl.prototype, "length", { - /** @inheritdoc */ - get: function () { - /** - * The length attribute must return the number of nodes represented - * by the collection. - */ - return this._root._children.size; - }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - NodeListImpl.prototype.item = function (index) { - /** - * The item(index) method must return the indexth node in the collection. - * If there is no indexth node in the collection, then the method must - * return null. - */ - if (index < 0 || index > this.length - 1) - return null; - if (index < this.length / 2) { - var i = 0; - var node = this._root._firstChild; - while (node !== null && i !== index) { - node = node._nextSibling; - i++; - } - return node; - } - else { - var i = this.length - 1; - var node = this._root._lastChild; - while (node !== null && i !== index) { - node = node._previousSibling; - i--; - } - return node; - } - }; - /** @inheritdoc */ - NodeListImpl.prototype.keys = function () { - var _a; - return _a = {}, - _a[Symbol.iterator] = function () { - var index = 0; - return { - next: function () { - if (index === this.length) { - return { done: true, value: null }; - } - else { - return { done: false, value: index++ }; - } - }.bind(this) - }; - }.bind(this), - _a; - }; - /** @inheritdoc */ - NodeListImpl.prototype.values = function () { - var _a; - return _a = {}, - _a[Symbol.iterator] = function () { - var it = this[Symbol.iterator](); - return { - next: function () { - return it.next(); - } - }; - }.bind(this), - _a; - }; - /** @inheritdoc */ - NodeListImpl.prototype.entries = function () { - var _a; - return _a = {}, - _a[Symbol.iterator] = function () { - var it = this[Symbol.iterator](); - var index = 0; - return { - next: function () { - var itResult = it.next(); - if (itResult.done) { - return { done: true, value: null }; - } - else { - return { done: false, value: [index++, itResult.value] }; - } - } - }; - }.bind(this), - _a; - }; - /** @inheritdoc */ - NodeListImpl.prototype[Symbol.iterator] = function () { - return this._root._children[Symbol.iterator](); - }; - /** @inheritdoc */ - NodeListImpl.prototype.forEach = function (callback, thisArg) { - var e_1, _a; - if (thisArg === undefined) { - thisArg = DOMImpl_1.dom.window; - } - var index = 0; - try { - for (var _b = __values(this._root._children), _c = _b.next(); !_c.done; _c = _b.next()) { - var node = _c.value; - callback.call(thisArg, node, index++, this); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - }; - /** - * Implements a proxy get trap to provide array-like access. - */ - NodeListImpl.prototype.get = function (target, key, receiver) { - if (!util_1.isString(key)) { - return Reflect.get(target, key, receiver); - } - var index = Number(key); - if (isNaN(index)) { - return Reflect.get(target, key, receiver); - } - return target.item(index) || undefined; - }; - /** - * Implements a proxy set trap to provide array-like access. - */ - NodeListImpl.prototype.set = function (target, key, value, receiver) { - if (!util_1.isString(key)) { - return Reflect.set(target, key, value, receiver); - } - var index = Number(key); - if (isNaN(index)) { - return Reflect.set(target, key, value, receiver); - } - var node = target.item(index) || undefined; - if (!node) - return false; - if (node._parent) { - algorithm_1.mutation_replace(node, value, node._parent); - return true; - } - else { - return false; - } - }; - /** - * Creates a new `NodeList`. - * - * @param root - root node - */ - NodeListImpl._create = function (root) { - return new NodeListImpl(root); - }; - return NodeListImpl; -}()); -exports.NodeListImpl = NodeListImpl; -//# sourceMappingURL=NodeListImpl.js.map - -/***/ }), -/* 637 */, -/* 638 */, -/* 639 */, -/* 640 */, -/* 641 */, -/* 642 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var algorithm_1 = __webpack_require__(163); -var XMLParserImpl_1 = __webpack_require__(468); -/** - * Represents a parser for XML and HTML content. - * - * See: https://w3c.github.io/DOM-Parsing/#the-domparser-interface - */ -var DOMParserImpl = /** @class */ (function () { - function DOMParserImpl() { - } - /** @inheritdoc */ - DOMParserImpl.prototype.parseFromString = function (source, mimeType) { - if (mimeType === "text/html") - throw new Error('HTML parser not implemented.'); - try { - var parser = new XMLParserImpl_1.XMLParserImpl(); - var doc = parser.parse(source); - doc._contentType = mimeType; - return doc; - } - catch (e) { - var errorNS = "http://www.mozilla.org/newlayout/xml/parsererror.xml"; - var doc = algorithm_1.create_xmlDocument(); - var root = doc.createElementNS(errorNS, "parsererror"); - var ele = doc.createElementNS(errorNS, "error"); - ele.setAttribute("message", e.message); - root.appendChild(ele); - doc.appendChild(root); - return doc; - } - }; - return DOMParserImpl; -}()); -exports.DOMParserImpl = DOMParserImpl; -//# sourceMappingURL=DOMParserImpl.js.map - -/***/ }), -/* 643 */, -/* 644 */, -/* 645 */, -/* 646 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(970); -var TraverserImpl_1 = __webpack_require__(487); -var algorithm_1 = __webpack_require__(163); -/** - * Represents the nodes of a subtree and a position within them. - */ -var TreeWalkerImpl = /** @class */ (function (_super) { - __extends(TreeWalkerImpl, _super); - /** - * Initializes a new instance of `TreeWalker`. - */ - function TreeWalkerImpl(root, current) { - var _this = _super.call(this, root) || this; - _this._current = current; - return _this; - } - Object.defineProperty(TreeWalkerImpl.prototype, "currentNode", { - /** @inheritdoc */ - get: function () { return this._current; }, - set: function (value) { this._current = value; }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - TreeWalkerImpl.prototype.parentNode = function () { - /** - * 1. Let node be the context object’s current. - * 2. While node is non-null and is not the context object’s root: - */ - var node = this._current; - while (node !== null && node !== this._root) { - /** - * 2.1. Set node to node’s parent. - * 2.2. If node is non-null and filtering node within the context object - * returns FILTER_ACCEPT, then set the context object’s current to node - * and return node. - */ - node = node._parent; - if (node !== null && - algorithm_1.traversal_filter(this, node) === interfaces_1.FilterResult.Accept) { - this._current = node; - return node; - } - } - /** - * 3. Return null. - */ - return null; - }; - /** @inheritdoc */ - TreeWalkerImpl.prototype.firstChild = function () { - /** - * The firstChild() method, when invoked, must traverse children with the - * context object and first. - */ - return algorithm_1.treeWalker_traverseChildren(this, true); - }; - /** @inheritdoc */ - TreeWalkerImpl.prototype.lastChild = function () { - /** - * The lastChild() method, when invoked, must traverse children with the - * context object and last. - */ - return algorithm_1.treeWalker_traverseChildren(this, false); - }; - /** @inheritdoc */ - TreeWalkerImpl.prototype.nextSibling = function () { - /** - * The nextSibling() method, when invoked, must traverse siblings with the - * context object and next. - */ - return algorithm_1.treeWalker_traverseSiblings(this, true); - }; - /** @inheritdoc */ - TreeWalkerImpl.prototype.previousNode = function () { - /** - * 1. Let node be the context object’s current. - * 2. While node is not the context object’s root: - */ - var node = this._current; - while (node !== this._root) { - /** - * 2.1. Let sibling be node’s previous sibling. - * 2.2. While sibling is non-null: - */ - var sibling = node._previousSibling; - while (sibling) { - /** - * 2.2.1. Set node to sibling. - * 2.2.2. Let result be the result of filtering node within the context - * object. - */ - node = sibling; - var result = algorithm_1.traversal_filter(this, node); - /** - * 2.2.3. While result is not FILTER_REJECT and node has a child: - */ - while (result !== interfaces_1.FilterResult.Reject && node._lastChild) { - /** - * 2.2.3.1. Set node to node’s last child. - * 2.2.3.2. Set result to the result of filtering node within the - * context object. - */ - node = node._lastChild; - result = algorithm_1.traversal_filter(this, node); - } - /** - * 2.2.4. If result is FILTER_ACCEPT, then set the context object’s - * current to node and return node. - */ - if (result === interfaces_1.FilterResult.Accept) { - this._current = node; - return node; - } - /** - * 2.2.5. Set sibling to node’s previous sibling. - */ - sibling = node._previousSibling; - } - /** - * 2.3. If node is the context object’s root or node’s parent is null, - * then return null. - */ - if (node === this._root || node._parent === null) { - return null; - } - /** - * 2.4. Set node to node’s parent. - */ - node = node._parent; - /** - * 2.5. If the return value of filtering node within the context object is - * FILTER_ACCEPT, then set the context object’s current to node and - * return node. - */ - if (algorithm_1.traversal_filter(this, node) === interfaces_1.FilterResult.Accept) { - this._current = node; - return node; - } - } - /** - * 3. Return null. - */ - return null; - }; - /** @inheritdoc */ - TreeWalkerImpl.prototype.previousSibling = function () { - /** - * The previousSibling() method, when invoked, must traverse siblings with - * the context object and previous. - */ - return algorithm_1.treeWalker_traverseSiblings(this, false); - }; - /** @inheritdoc */ - TreeWalkerImpl.prototype.nextNode = function () { - /** - * 1. Let node be the context object’s current. - * 2. Let result be FILTER_ACCEPT. - * 3. While true: - */ - var node = this._current; - var result = interfaces_1.FilterResult.Accept; - while (true) { - /** - * 3.1. While result is not FILTER_REJECT and node has a child: - */ - while (result !== interfaces_1.FilterResult.Reject && node._firstChild) { - /** - * 3.1.1. Set node to its first child. - * 3.1.2. Set result to the result of filtering node within the context - * object. - * 3.1.3. If result is FILTER_ACCEPT, then set the context object’s - * current to node and return node. - */ - node = node._firstChild; - result = algorithm_1.traversal_filter(this, node); - if (result === interfaces_1.FilterResult.Accept) { - this._current = node; - return node; - } - } - /** - * 3.2. Let sibling be null. - * 3.3. Let temporary be node. - * 3.4. While temporary is non-null: - */ - var sibling = null; - var temporary = node; - while (temporary !== null) { - /** - * 3.4.1. If temporary is the context object’s root, then return null. - */ - if (temporary === this._root) { - return null; - } - /** - * 3.4.2. Set sibling to temporary’s next sibling. - * 3.4.3. If sibling is non-null, then break. - */ - sibling = temporary._nextSibling; - if (sibling !== null) { - node = sibling; - break; - } - /** - * 3.4.4. Set temporary to temporary’s parent. - */ - temporary = temporary._parent; - } - /** - * 3.5. Set result to the result of filtering node within the context object. - * 3.6. If result is FILTER_ACCEPT, then set the context object’s current - * to node and return node. - */ - result = algorithm_1.traversal_filter(this, node); - if (result === interfaces_1.FilterResult.Accept) { - this._current = node; - return node; - } - } - }; - /** - * Creates a new `TreeWalker`. - * - * @param root - iterator's root node - * @param current - current node - */ - TreeWalkerImpl._create = function (root, current) { - return new TreeWalkerImpl(root, current); - }; - return TreeWalkerImpl; -}(TraverserImpl_1.TraverserImpl)); -exports.TreeWalkerImpl = TreeWalkerImpl; -//# sourceMappingURL=TreeWalkerImpl.js.map - -/***/ }), -/* 647 */, -/* 648 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var util_1 = __webpack_require__(592); -var CreateAlgorithm_1 = __webpack_require__(86); -/** - * Represents an object implementing DOM algorithms. - */ -var DOMImpl = /** @class */ (function () { - /** - * Initializes a new instance of `DOM`. - */ - function DOMImpl() { - this._features = { - mutationObservers: true, - customElements: true, - slots: true, - steps: true - }; - this._window = null; - this._compareCache = new util_1.CompareCache(); - this._rangeList = new util_1.FixedSizeSet(); - } - /** - * Sets DOM algorithm features. - * - * @param features - DOM features supported by algorithms. All features are - * enabled by default unless explicity disabled. - */ - DOMImpl.prototype.setFeatures = function (features) { - if (features === undefined) - features = true; - if (util_1.isObject(features)) { - for (var key in features) { - this._features[key] = features[key] || false; - } - } - else { - // enable/disable all features - for (var key in this._features) { - this._features[key] = features; - } - } - }; - Object.defineProperty(DOMImpl.prototype, "features", { - /** - * Gets DOM algorithm features. - */ - get: function () { return this._features; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DOMImpl.prototype, "window", { - /** - * Gets the DOM window. - */ - get: function () { - if (this._window === null) { - this._window = CreateAlgorithm_1.create_window(); - } - return this._window; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DOMImpl.prototype, "compareCache", { - /** - * Gets the global node compare cache. - */ - get: function () { return this._compareCache; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DOMImpl.prototype, "rangeList", { - /** - * Gets the global range list. - */ - get: function () { return this._rangeList; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DOMImpl, "instance", { - /** - * Returns the instance of `DOM`. - */ - get: function () { - if (!DOMImpl._instance) { - DOMImpl._instance = new DOMImpl(); - } - return DOMImpl._instance; - }, - enumerable: true, - configurable: true - }); - return DOMImpl; -}()); -/** - * Represents an object implementing DOM algorithms. - */ -exports.dom = DOMImpl.instance; -//# sourceMappingURL=DOMImpl.js.map - -/***/ }), -/* 649 */, -/* 650 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const parse = __webpack_require__(830) -const prerelease = (version, options) => { - const parsed = parse(version, options) - return (parsed && parsed.prerelease.length) ? parsed.prerelease : null -} -module.exports = prerelease - - -/***/ }), -/* 651 */, -/* 652 */, -/* 653 */, -/* 654 */, -/* 655 */, -/* 656 */, -/* 657 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spread = (this && this.__spread) || function () { - for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); - return ar; -}; -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var util_1 = __webpack_require__(592); -/** - * Adds the given item to the end of the list. - * - * @param list - a list - * @param item - an item - */ -function append(list, item) { - list.push(item); -} -exports.append = append; -/** - * Extends a list by appending all items from another list. - * - * @param listA - a list to extend - * @param listB - a list containing items to append to `listA` - */ -function extend(listA, listB) { - listA.push.apply(listA, __spread(listB)); -} -exports.extend = extend; -/** - * Inserts the given item to the start of the list. - * - * @param list - a list - * @param item - an item - */ -function prepend(list, item) { - list.unshift(item); -} -exports.prepend = prepend; -/** - * Replaces the given item or all items matching condition with a new item. - * - * @param list - a list - * @param conditionOrItem - an item to replace or a condition matching items - * to replace - * @param item - an item - */ -function replace(list, conditionOrItem, newItem) { - var e_1, _a; - var i = 0; - try { - for (var list_1 = __values(list), list_1_1 = list_1.next(); !list_1_1.done; list_1_1 = list_1.next()) { - var oldItem = list_1_1.value; - if (util_1.isFunction(conditionOrItem)) { - if (!!conditionOrItem.call(null, oldItem)) { - list[i] = newItem; - } - } - else if (oldItem === conditionOrItem) { - list[i] = newItem; - return; - } - i++; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (list_1_1 && !list_1_1.done && (_a = list_1.return)) _a.call(list_1); - } - finally { if (e_1) throw e_1.error; } - } -} -exports.replace = replace; -/** - * Inserts the given item before the given index. - * - * @param list - a list - * @param item - an item - */ -function insert(list, item, index) { - list.splice(index, 0, item); -} -exports.insert = insert; -/** - * Removes the given item or all items matching condition. - * - * @param list - a list - * @param conditionOrItem - an item to remove or a condition matching items - * to remove - */ -function remove(list, conditionOrItem) { - var i = list.length; - while (i--) { - var oldItem = list[i]; - if (util_1.isFunction(conditionOrItem)) { - if (!!conditionOrItem.call(null, oldItem)) { - list.splice(i, 1); - } - } - else if (oldItem === conditionOrItem) { - list.splice(i, 1); - return; - } - } -} -exports.remove = remove; -/** - * Removes all items from the list. - */ -function empty(list) { - list.length = 0; -} -exports.empty = empty; -/** - * Determines if the list contains the given item or any items matching - * condition. - * - * @param list - a list - * @param conditionOrItem - an item to a condition to match - */ -function contains(list, conditionOrItem) { - var e_2, _a; - try { - for (var list_2 = __values(list), list_2_1 = list_2.next(); !list_2_1.done; list_2_1 = list_2.next()) { - var oldItem = list_2_1.value; - if (util_1.isFunction(conditionOrItem)) { - if (!!conditionOrItem.call(null, oldItem)) { - return true; - } - } - else if (oldItem === conditionOrItem) { - return true; - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (list_2_1 && !list_2_1.done && (_a = list_2.return)) _a.call(list_2); - } - finally { if (e_2) throw e_2.error; } - } - return false; -} -exports.contains = contains; -/** - * Returns the count of items in the list matching the given condition. - * - * @param list - a list - * @param condition - an optional condition to match - */ -function size(list, condition) { - var e_3, _a; - if (condition === undefined) { - return list.length; - } - else { - var count = 0; - try { - for (var list_3 = __values(list), list_3_1 = list_3.next(); !list_3_1.done; list_3_1 = list_3.next()) { - var item = list_3_1.value; - if (!!condition.call(null, item)) { - count++; - } - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (list_3_1 && !list_3_1.done && (_a = list_3.return)) _a.call(list_3); - } - finally { if (e_3) throw e_3.error; } - } - return count; - } -} -exports.size = size; -/** - * Determines if the list is empty. - * - * @param list - a list - */ -function isEmpty(list) { - return list.length === 0; -} -exports.isEmpty = isEmpty; -/** - * Returns an iterator for the items of the list. - * - * @param list - a list - * @param condition - an optional condition to match - */ -function forEach(list, condition) { - var list_4, list_4_1, item, e_4_1; - var e_4, _a; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - if (!(condition === undefined)) return [3 /*break*/, 2]; - return [5 /*yield**/, __values(list)]; - case 1: - _b.sent(); - return [3 /*break*/, 9]; - case 2: - _b.trys.push([2, 7, 8, 9]); - list_4 = __values(list), list_4_1 = list_4.next(); - _b.label = 3; - case 3: - if (!!list_4_1.done) return [3 /*break*/, 6]; - item = list_4_1.value; - if (!!!condition.call(null, item)) return [3 /*break*/, 5]; - return [4 /*yield*/, item]; - case 4: - _b.sent(); - _b.label = 5; - case 5: - list_4_1 = list_4.next(); - return [3 /*break*/, 3]; - case 6: return [3 /*break*/, 9]; - case 7: - e_4_1 = _b.sent(); - e_4 = { error: e_4_1 }; - return [3 /*break*/, 9]; - case 8: - try { - if (list_4_1 && !list_4_1.done && (_a = list_4.return)) _a.call(list_4); - } - finally { if (e_4) throw e_4.error; } - return [7 /*endfinally*/]; - case 9: return [2 /*return*/]; - } - }); -} -exports.forEach = forEach; -/** - * Creates and returns a shallow clone of list. - * - * @param list - a list - */ -function clone(list) { - return new (Array.bind.apply(Array, __spread([void 0], list)))(); -} -exports.clone = clone; -/** - * Returns a new list containing items from the list sorted in ascending - * order. - * - * @param list - a list - * @param lessThanAlgo - a function that returns `true` if its first argument - * is less than its second argument, and `false` otherwise. - */ -function sortInAscendingOrder(list, lessThanAlgo) { - return list.sort(function (itemA, itemB) { - return lessThanAlgo.call(null, itemA, itemB) ? -1 : 1; - }); -} -exports.sortInAscendingOrder = sortInAscendingOrder; -/** - * Returns a new list containing items from the list sorted in descending - * order. - * - * @param list - a list - * @param lessThanAlgo - a function that returns `true` if its first argument - * is less than its second argument, and `false` otherwise. - */ -function sortInDescendingOrder(list, lessThanAlgo) { - return list.sort(function (itemA, itemB) { - return lessThanAlgo.call(null, itemA, itemB) ? 1 : -1; - }); -} -exports.sortInDescendingOrder = sortInDescendingOrder; -//# sourceMappingURL=List.js.map - -/***/ }), -/* 658 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const os = __importStar(__webpack_require__(87)); -const events = __importStar(__webpack_require__(614)); -const child = __importStar(__webpack_require__(129)); -const path = __importStar(__webpack_require__(622)); -const io = __importStar(__webpack_require__(1)); -const ioUtil = __importStar(__webpack_require__(672)); -/* 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); - } - strBuffer = s; - } - catch (err) { - // streaming lines to console is best effort. Don't fail a build. - this._debug(`error processing line. Failed with error ${err}`); - } - } - _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) => { - 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); - }); - const fileName = this._getSpawnFileName(); - const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName)); - const 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); - } - this._processLineBuffer(data, stdbuffer, (line) => { - if (this.options.listeners && this.options.listeners.stdline) { - this.options.listeners.stdline(line); - } - }); - }); - } - const 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); - } - 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 = 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 - -/***/ }), -/* 659 */, -/* 660 */, -/* 661 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var DocumentImpl_1 = __webpack_require__(488); -/** - * Represents an XML document. - */ -var XMLDocumentImpl = /** @class */ (function (_super) { - __extends(XMLDocumentImpl, _super); - /** - * Initializes a new instance of `XMLDocument`. - */ - function XMLDocumentImpl() { - return _super.call(this) || this; - } - return XMLDocumentImpl; -}(DocumentImpl_1.DocumentImpl)); -exports.XMLDocumentImpl = XMLDocumentImpl; -//# sourceMappingURL=XMLDocumentImpl.js.map - -/***/ }), -/* 662 */, -/* 663 */, -/* 664 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMException_1 = __webpack_require__(35); -var infra_1 = __webpack_require__(23); -var XMLAlgorithm_1 = __webpack_require__(442); -/** - * Validates the given qualified name. - * - * @param qualifiedName - qualified name - */ -function namespace_validate(qualifiedName) { - /** - * To validate a qualifiedName, throw an "InvalidCharacterError" - * DOMException if qualifiedName does not match the Name or QName - * production. - */ - if (!XMLAlgorithm_1.xml_isName(qualifiedName)) - throw new DOMException_1.InvalidCharacterError("Invalid XML name: " + qualifiedName); - if (!XMLAlgorithm_1.xml_isQName(qualifiedName)) - throw new DOMException_1.InvalidCharacterError("Invalid XML qualified name: " + qualifiedName + "."); -} -exports.namespace_validate = namespace_validate; -/** - * Validates and extracts a namespace, prefix and localName from the - * given namespace and qualified name. - * See: https://dom.spec.whatwg.org/#validate-and-extract. - * - * @param namespace - namespace - * @param qualifiedName - qualified name - * - * @returns a tuple with `namespace`, `prefix` and `localName`. - */ -function namespace_validateAndExtract(namespace, qualifiedName) { - /** - * 1. If namespace is the empty string, set it to null. - * 2. Validate qualifiedName. - * 3. Let prefix be null. - * 4. Let localName be qualifiedName. - * 5. If qualifiedName contains a ":" (U+003E), then split the string on it - * and set prefix to the part before and localName to the part after. - * 6. If prefix is non-null and namespace is null, then throw a - * "NamespaceError" DOMException. - * 7. If prefix is "xml" and namespace is not the XML namespace, then throw - * a "NamespaceError" DOMException. - * 8. If either qualifiedName or prefix is "xmlns" and namespace is not the - * XMLNS namespace, then throw a "NamespaceError" DOMException. - * 9. If namespace is the XMLNS namespace and neither qualifiedName nor - * prefix is "xmlns", then throw a "NamespaceError" DOMException. - * 10. Return namespace, prefix, and localName. - */ - if (!namespace) - namespace = null; - namespace_validate(qualifiedName); - var parts = qualifiedName.split(':'); - var prefix = (parts.length === 2 ? parts[0] : null); - var localName = (parts.length === 2 ? parts[1] : qualifiedName); - if (prefix && namespace === null) - throw new DOMException_1.NamespaceError("Qualified name includes a prefix but the namespace is null."); - if (prefix === "xml" && namespace !== infra_1.namespace.XML) - throw new DOMException_1.NamespaceError("Qualified name includes the \"xml\" prefix but the namespace is not the XML namespace."); - if (namespace !== infra_1.namespace.XMLNS && - (prefix === "xmlns" || qualifiedName === "xmlns")) - throw new DOMException_1.NamespaceError("Qualified name includes the \"xmlns\" prefix but the namespace is not the XMLNS namespace."); - if (namespace === infra_1.namespace.XMLNS && - (prefix !== "xmlns" && qualifiedName !== "xmlns")) - throw new DOMException_1.NamespaceError("Qualified name does not include the \"xmlns\" prefix but the namespace is the XMLNS namespace."); - return [namespace, prefix, localName]; -} -exports.namespace_validateAndExtract = namespace_validateAndExtract; -/** - * Extracts a prefix and localName from the given qualified name. - * - * @param qualifiedName - qualified name - * - * @returns an tuple with `prefix` and `localName`. - */ -function namespace_extractQName(qualifiedName) { - namespace_validate(qualifiedName); - var parts = qualifiedName.split(':'); - var prefix = (parts.length === 2 ? parts[0] : null); - var localName = (parts.length === 2 ? parts[1] : qualifiedName); - return [prefix, localName]; -} -exports.namespace_extractQName = namespace_extractQName; -//# sourceMappingURL=NamespaceAlgorithm.js.map - -/***/ }), -/* 665 */, -/* 666 */, -/* 667 */, -/* 668 */, -/* 669 */ -/***/ (function(module) { - -module.exports = require("util"); - -/***/ }), -/* 670 */, -/* 671 */, -/* 672 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var _a; -Object.defineProperty(exports, "__esModule", { value: true }); -const assert_1 = __webpack_require__(357); -const fs = __webpack_require__(747); -const path = __webpack_require__(622); -_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; -/** - * Recursively create a directory at `fsPath`. - * - * This implementation is optimistic, meaning it attempts to create the full - * path first, and backs up the path stack from there. - * - * @param fsPath The path to create - * @param maxDepth The maximum recursion depth - * @param depth The current recursion depth - */ -function mkdirP(fsPath, maxDepth = 1000, depth = 1) { - return __awaiter(this, void 0, void 0, function* () { - assert_1.ok(fsPath, 'a path argument must be provided'); - fsPath = path.resolve(fsPath); - if (depth >= maxDepth) - return exports.mkdir(fsPath); - try { - yield exports.mkdir(fsPath); - return; - } - catch (err) { - switch (err.code) { - case 'ENOENT': { - yield mkdirP(path.dirname(fsPath), maxDepth, depth + 1); - yield exports.mkdir(fsPath); - return; - } - default: { - let stats; - try { - stats = yield exports.stat(fsPath); - } - catch (err2) { - throw err; - } - if (!stats.isDirectory()) - throw err; - } - } - } - }); -} -exports.mkdirP = mkdirP; -/** - * 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())); -} -//# sourceMappingURL=io-util.js.map - -/***/ }), -/* 673 */, -/* 674 */, -/* 675 */, -/* 676 */, -/* 677 */, -/* 678 */, -/* 679 */, -/* 680 */, -/* 681 */, -/* 682 */, -/* 683 */, -/* 684 */, -/* 685 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - -/*eslint-disable no-use-before-define*/ - -var common = __webpack_require__(740); -var YAMLException = __webpack_require__(556); -var DEFAULT_FULL_SCHEMA = __webpack_require__(910); -var DEFAULT_SAFE_SCHEMA = __webpack_require__(723); - -var _toString = Object.prototype.toString; -var _hasOwnProperty = Object.prototype.hasOwnProperty; - -var CHAR_TAB = 0x09; /* Tab */ -var CHAR_LINE_FEED = 0x0A; /* LF */ -var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */ -var CHAR_SPACE = 0x20; /* Space */ -var CHAR_EXCLAMATION = 0x21; /* ! */ -var CHAR_DOUBLE_QUOTE = 0x22; /* " */ -var CHAR_SHARP = 0x23; /* # */ -var CHAR_PERCENT = 0x25; /* % */ -var CHAR_AMPERSAND = 0x26; /* & */ -var CHAR_SINGLE_QUOTE = 0x27; /* ' */ -var CHAR_ASTERISK = 0x2A; /* * */ -var CHAR_COMMA = 0x2C; /* , */ -var CHAR_MINUS = 0x2D; /* - */ -var CHAR_COLON = 0x3A; /* : */ -var CHAR_EQUALS = 0x3D; /* = */ -var CHAR_GREATER_THAN = 0x3E; /* > */ -var CHAR_QUESTION = 0x3F; /* ? */ -var CHAR_COMMERCIAL_AT = 0x40; /* @ */ -var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ -var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ -var CHAR_GRAVE_ACCENT = 0x60; /* ` */ -var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ -var CHAR_VERTICAL_LINE = 0x7C; /* | */ -var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ - -var ESCAPE_SEQUENCES = {}; - -ESCAPE_SEQUENCES[0x00] = '\\0'; -ESCAPE_SEQUENCES[0x07] = '\\a'; -ESCAPE_SEQUENCES[0x08] = '\\b'; -ESCAPE_SEQUENCES[0x09] = '\\t'; -ESCAPE_SEQUENCES[0x0A] = '\\n'; -ESCAPE_SEQUENCES[0x0B] = '\\v'; -ESCAPE_SEQUENCES[0x0C] = '\\f'; -ESCAPE_SEQUENCES[0x0D] = '\\r'; -ESCAPE_SEQUENCES[0x1B] = '\\e'; -ESCAPE_SEQUENCES[0x22] = '\\"'; -ESCAPE_SEQUENCES[0x5C] = '\\\\'; -ESCAPE_SEQUENCES[0x85] = '\\N'; -ESCAPE_SEQUENCES[0xA0] = '\\_'; -ESCAPE_SEQUENCES[0x2028] = '\\L'; -ESCAPE_SEQUENCES[0x2029] = '\\P'; - -var DEPRECATED_BOOLEANS_SYNTAX = [ - 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', - 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' -]; - -function compileStyleMap(schema, map) { - var result, keys, index, length, tag, style, type; - - if (map === null) return {}; - - result = {}; - keys = Object.keys(map); - - for (index = 0, length = keys.length; index < length; index += 1) { - tag = keys[index]; - style = String(map[tag]); - - if (tag.slice(0, 2) === '!!') { - tag = 'tag:yaml.org,2002:' + tag.slice(2); - } - type = schema.compiledTypeMap['fallback'][tag]; - - if (type && _hasOwnProperty.call(type.styleAliases, style)) { - style = type.styleAliases[style]; - } - - result[tag] = style; - } - - return result; -} - -function encodeHex(character) { - var string, handle, length; - - string = character.toString(16).toUpperCase(); - - if (character <= 0xFF) { - handle = 'x'; - length = 2; - } else if (character <= 0xFFFF) { - handle = 'u'; - length = 4; - } else if (character <= 0xFFFFFFFF) { - handle = 'U'; - length = 8; - } else { - throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF'); - } - - return '\\' + handle + common.repeat('0', length - string.length) + string; -} - -function State(options) { - this.schema = options['schema'] || DEFAULT_FULL_SCHEMA; - this.indent = Math.max(1, (options['indent'] || 2)); - this.noArrayIndent = options['noArrayIndent'] || false; - this.skipInvalid = options['skipInvalid'] || false; - this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); - this.styleMap = compileStyleMap(this.schema, options['styles'] || null); - this.sortKeys = options['sortKeys'] || false; - this.lineWidth = options['lineWidth'] || 80; - this.noRefs = options['noRefs'] || false; - this.noCompatMode = options['noCompatMode'] || false; - this.condenseFlow = options['condenseFlow'] || false; - - this.implicitTypes = this.schema.compiledImplicit; - this.explicitTypes = this.schema.compiledExplicit; - - this.tag = null; - this.result = ''; - - this.duplicates = []; - this.usedDuplicates = null; -} - -// Indents every line in a string. Empty lines (\n only) are not indented. -function indentString(string, spaces) { - var ind = common.repeat(' ', spaces), - position = 0, - next = -1, - result = '', - line, - length = string.length; - - while (position < length) { - next = string.indexOf('\n', position); - if (next === -1) { - line = string.slice(position); - position = length; - } else { - line = string.slice(position, next + 1); - position = next + 1; - } - - if (line.length && line !== '\n') result += ind; - - result += line; - } - - return result; -} - -function generateNextLine(state, level) { - return '\n' + common.repeat(' ', state.indent * level); -} - -function testImplicitResolving(state, str) { - var index, length, type; - - for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { - type = state.implicitTypes[index]; - - if (type.resolve(str)) { - return true; - } - } - - return false; -} - -// [33] s-white ::= s-space | s-tab -function isWhitespace(c) { - return c === CHAR_SPACE || c === CHAR_TAB; -} - -// Returns true if the character can be printed without escaping. -// From YAML 1.2: "any allowed characters known to be non-printable -// should also be escaped. [However,] This isn’t mandatory" -// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. -function isPrintable(c) { - return (0x00020 <= c && c <= 0x00007E) - || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) - || ((0x0E000 <= c && c <= 0x00FFFD) && c !== 0xFEFF /* BOM */) - || (0x10000 <= c && c <= 0x10FFFF); -} - -// [34] ns-char ::= nb-char - s-white -// [27] nb-char ::= c-printable - b-char - c-byte-order-mark -// [26] b-char ::= b-line-feed | b-carriage-return -// [24] b-line-feed ::= #xA /* LF */ -// [25] b-carriage-return ::= #xD /* CR */ -// [3] c-byte-order-mark ::= #xFEFF -function isNsChar(c) { - return isPrintable(c) && !isWhitespace(c) - // byte-order-mark - && c !== 0xFEFF - // b-char - && c !== CHAR_CARRIAGE_RETURN - && c !== CHAR_LINE_FEED; -} - -// Simplified test for values allowed after the first character in plain style. -function isPlainSafe(c, prev) { - // Uses a subset of nb-char - c-flow-indicator - ":" - "#" - // where nb-char ::= c-printable - b-char - c-byte-order-mark. - return isPrintable(c) && c !== 0xFEFF - // - c-flow-indicator - && c !== CHAR_COMMA - && c !== CHAR_LEFT_SQUARE_BRACKET - && c !== CHAR_RIGHT_SQUARE_BRACKET - && c !== CHAR_LEFT_CURLY_BRACKET - && c !== CHAR_RIGHT_CURLY_BRACKET - // - ":" - "#" - // /* An ns-char preceding */ "#" - && c !== CHAR_COLON - && ((c !== CHAR_SHARP) || (prev && isNsChar(prev))); -} - -// Simplified test for values allowed as the first character in plain style. -function isPlainSafeFirst(c) { - // Uses a subset of ns-char - c-indicator - // where ns-char = nb-char - s-white. - return isPrintable(c) && c !== 0xFEFF - && !isWhitespace(c) // - s-white - // - (c-indicator ::= - // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” - && c !== CHAR_MINUS - && c !== CHAR_QUESTION - && c !== CHAR_COLON - && c !== CHAR_COMMA - && c !== CHAR_LEFT_SQUARE_BRACKET - && c !== CHAR_RIGHT_SQUARE_BRACKET - && c !== CHAR_LEFT_CURLY_BRACKET - && c !== CHAR_RIGHT_CURLY_BRACKET - // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” - && c !== CHAR_SHARP - && c !== CHAR_AMPERSAND - && c !== CHAR_ASTERISK - && c !== CHAR_EXCLAMATION - && c !== CHAR_VERTICAL_LINE - && c !== CHAR_EQUALS - && c !== CHAR_GREATER_THAN - && c !== CHAR_SINGLE_QUOTE - && c !== CHAR_DOUBLE_QUOTE - // | “%” | “@” | “`”) - && c !== CHAR_PERCENT - && c !== CHAR_COMMERCIAL_AT - && c !== CHAR_GRAVE_ACCENT; -} - -// Determines whether block indentation indicator is required. -function needIndentIndicator(string) { - var leadingSpaceRe = /^\n* /; - return leadingSpaceRe.test(string); -} - -var STYLE_PLAIN = 1, - STYLE_SINGLE = 2, - STYLE_LITERAL = 3, - STYLE_FOLDED = 4, - STYLE_DOUBLE = 5; - -// Determines which scalar styles are possible and returns the preferred style. -// lineWidth = -1 => no limit. -// Pre-conditions: str.length > 0. -// Post-conditions: -// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. -// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). -// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). -function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) { - var i; - var char, prev_char; - var hasLineBreak = false; - var hasFoldableLine = false; // only checked if shouldTrackWidth - var shouldTrackWidth = lineWidth !== -1; - var previousLineBreak = -1; // count the first line correctly - var plain = isPlainSafeFirst(string.charCodeAt(0)) - && !isWhitespace(string.charCodeAt(string.length - 1)); - - if (singleLineOnly) { - // Case: no block styles. - // Check for disallowed characters to rule out plain and single. - for (i = 0; i < string.length; i++) { - char = string.charCodeAt(i); - if (!isPrintable(char)) { - return STYLE_DOUBLE; - } - prev_char = i > 0 ? string.charCodeAt(i - 1) : null; - plain = plain && isPlainSafe(char, prev_char); - } - } else { - // Case: block styles permitted. - for (i = 0; i < string.length; i++) { - char = string.charCodeAt(i); - if (char === CHAR_LINE_FEED) { - hasLineBreak = true; - // Check if any line can be folded. - if (shouldTrackWidth) { - hasFoldableLine = hasFoldableLine || - // Foldable line = too long, and not more-indented. - (i - previousLineBreak - 1 > lineWidth && - string[previousLineBreak + 1] !== ' '); - previousLineBreak = i; - } - } else if (!isPrintable(char)) { - return STYLE_DOUBLE; - } - prev_char = i > 0 ? string.charCodeAt(i - 1) : null; - plain = plain && isPlainSafe(char, prev_char); - } - // in case the end is missing a \n - hasFoldableLine = hasFoldableLine || (shouldTrackWidth && - (i - previousLineBreak - 1 > lineWidth && - string[previousLineBreak + 1] !== ' ')); - } - // Although every style can represent \n without escaping, prefer block styles - // for multiline, since they're more readable and they don't add empty lines. - // Also prefer folding a super-long line. - if (!hasLineBreak && !hasFoldableLine) { - // Strings interpretable as another type have to be quoted; - // e.g. the string 'true' vs. the boolean true. - return plain && !testAmbiguousType(string) - ? STYLE_PLAIN : STYLE_SINGLE; - } - // Edge case: block indentation indicator can only have one digit. - if (indentPerLevel > 9 && needIndentIndicator(string)) { - return STYLE_DOUBLE; - } - // At this point we know block styles are valid. - // Prefer literal style unless we want to fold. - return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; -} - -// Note: line breaking/folding is implemented for only the folded style. -// NB. We drop the last trailing newline (if any) of a returned block scalar -// since the dumper adds its own newline. This always works: -// • No ending newline => unaffected; already using strip "-" chomping. -// • Ending newline => removed then restored. -// Importantly, this keeps the "+" chomp indicator from gaining an extra line. -function writeScalar(state, string, level, iskey) { - state.dump = (function () { - if (string.length === 0) { - return "''"; - } - if (!state.noCompatMode && - DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1) { - return "'" + string + "'"; - } - - var indent = state.indent * Math.max(1, level); // no 0-indent scalars - // As indentation gets deeper, let the width decrease monotonically - // to the lower bound min(state.lineWidth, 40). - // Note that this implies - // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. - // state.lineWidth > 40 + state.indent: width decreases until the lower bound. - // This behaves better than a constant minimum width which disallows narrower options, - // or an indent threshold which causes the width to suddenly increase. - var lineWidth = state.lineWidth === -1 - ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); - - // Without knowing if keys are implicit/explicit, assume implicit for safety. - var singleLineOnly = iskey - // No block styles in flow mode. - || (state.flowLevel > -1 && level >= state.flowLevel); - function testAmbiguity(string) { - return testImplicitResolving(state, string); - } - - switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity)) { - case STYLE_PLAIN: - return string; - case STYLE_SINGLE: - return "'" + string.replace(/'/g, "''") + "'"; - case STYLE_LITERAL: - return '|' + blockHeader(string, state.indent) - + dropEndingNewline(indentString(string, indent)); - case STYLE_FOLDED: - return '>' + blockHeader(string, state.indent) - + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); - case STYLE_DOUBLE: - return '"' + escapeString(string, lineWidth) + '"'; - default: - throw new YAMLException('impossible error: invalid scalar style'); - } - }()); -} - -// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. -function blockHeader(string, indentPerLevel) { - var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; - - // note the special case: the string '\n' counts as a "trailing" empty line. - var clip = string[string.length - 1] === '\n'; - var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); - var chomp = keep ? '+' : (clip ? '' : '-'); - - return indentIndicator + chomp + '\n'; -} - -// (See the note for writeScalar.) -function dropEndingNewline(string) { - return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; -} - -// Note: a long line without a suitable break point will exceed the width limit. -// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. -function foldString(string, width) { - // In folded style, $k$ consecutive newlines output as $k+1$ newlines— - // unless they're before or after a more-indented line, or at the very - // beginning or end, in which case $k$ maps to $k$. - // Therefore, parse each chunk as newline(s) followed by a content line. - var lineRe = /(\n+)([^\n]*)/g; - - // first line (possibly an empty line) - var result = (function () { - var nextLF = string.indexOf('\n'); - nextLF = nextLF !== -1 ? nextLF : string.length; - lineRe.lastIndex = nextLF; - return foldLine(string.slice(0, nextLF), width); - }()); - // If we haven't reached the first content line yet, don't add an extra \n. - var prevMoreIndented = string[0] === '\n' || string[0] === ' '; - var moreIndented; - - // rest of the lines - var match; - while ((match = lineRe.exec(string))) { - var prefix = match[1], line = match[2]; - moreIndented = (line[0] === ' '); - result += prefix - + (!prevMoreIndented && !moreIndented && line !== '' - ? '\n' : '') - + foldLine(line, width); - prevMoreIndented = moreIndented; - } - - return result; -} - -// Greedy line breaking. -// Picks the longest line under the limit each time, -// otherwise settles for the shortest line over the limit. -// NB. More-indented lines *cannot* be folded, as that would add an extra \n. -function foldLine(line, width) { - if (line === '' || line[0] === ' ') return line; - - // Since a more-indented line adds a \n, breaks can't be followed by a space. - var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. - var match; - // start is an inclusive index. end, curr, and next are exclusive. - var start = 0, end, curr = 0, next = 0; - var result = ''; - - // Invariants: 0 <= start <= length-1. - // 0 <= curr <= next <= max(0, length-2). curr - start <= width. - // Inside the loop: - // A match implies length >= 2, so curr and next are <= length-2. - while ((match = breakRe.exec(line))) { - next = match.index; - // maintain invariant: curr - start <= width - if (next - start > width) { - end = (curr > start) ? curr : next; // derive end <= length-2 - result += '\n' + line.slice(start, end); - // skip the space that was output as \n - start = end + 1; // derive start <= length-1 - } - curr = next; - } - - // By the invariants, start <= length-1, so there is something left over. - // It is either the whole string or a part starting from non-whitespace. - result += '\n'; - // Insert a break if the remainder is too long and there is a break available. - if (line.length - start > width && curr > start) { - result += line.slice(start, curr) + '\n' + line.slice(curr + 1); - } else { - result += line.slice(start); - } - - return result.slice(1); // drop extra \n joiner -} - -// Escapes a double-quoted string. -function escapeString(string) { - var result = ''; - var char, nextChar; - var escapeSeq; - - for (var i = 0; i < string.length; i++) { - char = string.charCodeAt(i); - // Check for surrogate pairs (reference Unicode 3.0 section "3.7 Surrogates"). - if (char >= 0xD800 && char <= 0xDBFF/* high surrogate */) { - nextChar = string.charCodeAt(i + 1); - if (nextChar >= 0xDC00 && nextChar <= 0xDFFF/* low surrogate */) { - // Combine the surrogate pair and store it escaped. - result += encodeHex((char - 0xD800) * 0x400 + nextChar - 0xDC00 + 0x10000); - // Advance index one extra since we already used that char here. - i++; continue; - } - } - escapeSeq = ESCAPE_SEQUENCES[char]; - result += !escapeSeq && isPrintable(char) - ? string[i] - : escapeSeq || encodeHex(char); - } - - return result; -} - -function writeFlowSequence(state, level, object) { - var _result = '', - _tag = state.tag, - index, - length; - - for (index = 0, length = object.length; index < length; index += 1) { - // Write only valid elements. - if (writeNode(state, level, object[index], false, false)) { - if (index !== 0) _result += ',' + (!state.condenseFlow ? ' ' : ''); - _result += state.dump; - } - } - - state.tag = _tag; - state.dump = '[' + _result + ']'; -} - -function writeBlockSequence(state, level, object, compact) { - var _result = '', - _tag = state.tag, - index, - length; - - for (index = 0, length = object.length; index < length; index += 1) { - // Write only valid elements. - if (writeNode(state, level + 1, object[index], true, true)) { - if (!compact || index !== 0) { - _result += generateNextLine(state, level); - } - - if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { - _result += '-'; - } else { - _result += '- '; - } - - _result += state.dump; - } - } - - state.tag = _tag; - state.dump = _result || '[]'; // Empty sequence if no valid values. -} - -function writeFlowMapping(state, level, object) { - var _result = '', - _tag = state.tag, - objectKeyList = Object.keys(object), - index, - length, - objectKey, - objectValue, - pairBuffer; - - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - - pairBuffer = ''; - if (index !== 0) pairBuffer += ', '; - - if (state.condenseFlow) pairBuffer += '"'; - - objectKey = objectKeyList[index]; - objectValue = object[objectKey]; - - if (!writeNode(state, level, objectKey, false, false)) { - continue; // Skip this pair because of invalid key; - } - - if (state.dump.length > 1024) pairBuffer += '? '; - - pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); - - if (!writeNode(state, level, objectValue, false, false)) { - continue; // Skip this pair because of invalid value. - } - - pairBuffer += state.dump; - - // Both key and value are valid. - _result += pairBuffer; - } - - state.tag = _tag; - state.dump = '{' + _result + '}'; -} - -function writeBlockMapping(state, level, object, compact) { - var _result = '', - _tag = state.tag, - objectKeyList = Object.keys(object), - index, - length, - objectKey, - objectValue, - explicitPair, - pairBuffer; - - // Allow sorting keys so that the output file is deterministic - if (state.sortKeys === true) { - // Default sorting - objectKeyList.sort(); - } else if (typeof state.sortKeys === 'function') { - // Custom sort function - objectKeyList.sort(state.sortKeys); - } else if (state.sortKeys) { - // Something is wrong - throw new YAMLException('sortKeys must be a boolean or a function'); - } - - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - pairBuffer = ''; - - if (!compact || index !== 0) { - pairBuffer += generateNextLine(state, level); - } - - objectKey = objectKeyList[index]; - objectValue = object[objectKey]; - - if (!writeNode(state, level + 1, objectKey, true, true, true)) { - continue; // Skip this pair because of invalid key. - } - - explicitPair = (state.tag !== null && state.tag !== '?') || - (state.dump && state.dump.length > 1024); - - if (explicitPair) { - if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { - pairBuffer += '?'; - } else { - pairBuffer += '? '; - } - } - - pairBuffer += state.dump; - - if (explicitPair) { - pairBuffer += generateNextLine(state, level); - } - - if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { - continue; // Skip this pair because of invalid value. - } - - if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { - pairBuffer += ':'; - } else { - pairBuffer += ': '; - } - - pairBuffer += state.dump; - - // Both key and value are valid. - _result += pairBuffer; - } - - state.tag = _tag; - state.dump = _result || '{}'; // Empty mapping if no valid pairs. -} - -function detectType(state, object, explicit) { - var _result, typeList, index, length, type, style; - - typeList = explicit ? state.explicitTypes : state.implicitTypes; - - for (index = 0, length = typeList.length; index < length; index += 1) { - type = typeList[index]; - - if ((type.instanceOf || type.predicate) && - (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && - (!type.predicate || type.predicate(object))) { - - state.tag = explicit ? type.tag : '?'; - - if (type.represent) { - style = state.styleMap[type.tag] || type.defaultStyle; - - if (_toString.call(type.represent) === '[object Function]') { - _result = type.represent(object, style); - } else if (_hasOwnProperty.call(type.represent, style)) { - _result = type.represent[style](object, style); - } else { - throw new YAMLException('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); - } - - state.dump = _result; - } - - return true; - } - } - - return false; -} - -// Serializes `object` and writes it to global `result`. -// Returns true on success, or false on invalid object. -// -function writeNode(state, level, object, block, compact, iskey) { - state.tag = null; - state.dump = object; - - if (!detectType(state, object, false)) { - detectType(state, object, true); - } - - var type = _toString.call(state.dump); - - if (block) { - block = (state.flowLevel < 0 || state.flowLevel > level); - } - - var objectOrArray = type === '[object Object]' || type === '[object Array]', - duplicateIndex, - duplicate; - - if (objectOrArray) { - duplicateIndex = state.duplicates.indexOf(object); - duplicate = duplicateIndex !== -1; - } - - if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { - compact = false; - } - - if (duplicate && state.usedDuplicates[duplicateIndex]) { - state.dump = '*ref_' + duplicateIndex; - } else { - if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { - state.usedDuplicates[duplicateIndex] = true; - } - if (type === '[object Object]') { - if (block && (Object.keys(state.dump).length !== 0)) { - writeBlockMapping(state, level, state.dump, compact); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + state.dump; - } - } else { - writeFlowMapping(state, level, state.dump); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; - } - } - } else if (type === '[object Array]') { - var arrayLevel = (state.noArrayIndent && (level > 0)) ? level - 1 : level; - if (block && (state.dump.length !== 0)) { - writeBlockSequence(state, arrayLevel, state.dump, compact); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + state.dump; - } - } else { - writeFlowSequence(state, arrayLevel, state.dump); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; - } - } - } else if (type === '[object String]') { - if (state.tag !== '?') { - writeScalar(state, state.dump, level, iskey); - } - } else { - if (state.skipInvalid) return false; - throw new YAMLException('unacceptable kind of an object to dump ' + type); - } - - if (state.tag !== null && state.tag !== '?') { - state.dump = '!<' + state.tag + '> ' + state.dump; - } - } - - return true; -} - -function getDuplicateReferences(object, state) { - var objects = [], - duplicatesIndexes = [], - index, - length; - - inspectNode(object, objects, duplicatesIndexes); - - for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { - state.duplicates.push(objects[duplicatesIndexes[index]]); - } - state.usedDuplicates = new Array(length); -} - -function inspectNode(object, objects, duplicatesIndexes) { - var objectKeyList, - index, - length; - - if (object !== null && typeof object === 'object') { - index = objects.indexOf(object); - if (index !== -1) { - if (duplicatesIndexes.indexOf(index) === -1) { - duplicatesIndexes.push(index); - } - } else { - objects.push(object); - - if (Array.isArray(object)) { - for (index = 0, length = object.length; index < length; index += 1) { - inspectNode(object[index], objects, duplicatesIndexes); - } - } else { - objectKeyList = Object.keys(object); - - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); - } - } - } - } -} - -function dump(input, options) { - options = options || {}; - - var state = new State(options); - - if (!state.noRefs) getDuplicateReferences(input, state); - - if (writeNode(state, 0, input, true, true)) return state.dump + '\n'; - - return ''; -} - -function safeDump(input, options) { - return dump(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); -} - -module.exports.dump = dump; -module.exports.safeDump = safeDump; - - -/***/ }), -/* 686 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -// Export classes -var XMLSerializerImpl_1 = __webpack_require__(98); -exports.XMLSerializer = XMLSerializerImpl_1.XMLSerializerImpl; -//# sourceMappingURL=index.js.map - -/***/ }), -/* 687 */, -/* 688 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var AbstractRangeImpl_1 = __webpack_require__(413); -var DOMException_1 = __webpack_require__(35); -var util_1 = __webpack_require__(918); -/** - * Represents a static range. - */ -var StaticRangeImpl = /** @class */ (function (_super) { - __extends(StaticRangeImpl, _super); - /** - * Initializes a new instance of `StaticRange`. - */ - function StaticRangeImpl(init) { - var _this = _super.call(this) || this; - /** - * 1. If init’s startContainer or endContainer is a DocumentType or Attr - * node, then throw an "InvalidNodeTypeError" DOMException. - * 2. Let staticRange be a new StaticRange object. - * 3. Set staticRange’s start to (init’s startContainer, init’s startOffset) - * and end to (init’s endContainer, init’s endOffset). - * 4. Return staticRange. - */ - if (util_1.Guard.isDocumentTypeNode(init.startContainer) || util_1.Guard.isAttrNode(init.startContainer) || - util_1.Guard.isDocumentTypeNode(init.endContainer) || util_1.Guard.isAttrNode(init.endContainer)) { - throw new DOMException_1.InvalidNodeTypeError(); - } - _this._start = [init.startContainer, init.startOffset]; - _this._end = [init.endContainer, init.endOffset]; - return _this; - } - return StaticRangeImpl; -}(AbstractRangeImpl_1.AbstractRangeImpl)); -exports.StaticRangeImpl = StaticRangeImpl; -//# sourceMappingURL=StaticRangeImpl.js.map - -/***/ }), -/* 689 */, -/* 690 */, -/* 691 */, -/* 692 */, -/* 693 */, -/* 694 */, -/* 695 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(970); -var NodeImpl_1 = __webpack_require__(935); -var DOMException_1 = __webpack_require__(35); -var infra_1 = __webpack_require__(23); -var algorithm_1 = __webpack_require__(163); -var WebIDLAlgorithm_1 = __webpack_require__(495); -/** - * Represents an element node. - */ -var ElementImpl = /** @class */ (function (_super) { - __extends(ElementImpl, _super); - /** - * Initializes a new instance of `Element`. - */ - function ElementImpl() { - var _this = _super.call(this) || this; - _this._children = new Set(); - _this._namespace = null; - _this._namespacePrefix = null; - _this._localName = ""; - _this._customElementState = "undefined"; - _this._customElementDefinition = null; - _this._is = null; - _this._shadowRoot = null; - _this._attributeList = algorithm_1.create_namedNodeMap(_this); - _this._attributeChangeSteps = []; - _this._name = ''; - _this._assignedSlot = null; - return _this; - } - Object.defineProperty(ElementImpl.prototype, "namespaceURI", { - /** @inheritdoc */ - get: function () { return this._namespace; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ElementImpl.prototype, "prefix", { - /** @inheritdoc */ - get: function () { return this._namespacePrefix; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ElementImpl.prototype, "localName", { - /** @inheritdoc */ - get: function () { return this._localName; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ElementImpl.prototype, "tagName", { - /** @inheritdoc */ - get: function () { return this._htmlUppercasedQualifiedName; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ElementImpl.prototype, "id", { - /** @inheritdoc */ - get: function () { - return algorithm_1.element_getAnAttributeValue(this, "id"); - }, - set: function (value) { - algorithm_1.element_setAnAttributeValue(this, "id", value); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ElementImpl.prototype, "className", { - /** @inheritdoc */ - get: function () { - return algorithm_1.element_getAnAttributeValue(this, "class"); - }, - set: function (value) { - algorithm_1.element_setAnAttributeValue(this, "class", value); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ElementImpl.prototype, "classList", { - /** @inheritdoc */ - get: function () { - var attr = algorithm_1.element_getAnAttributeByName("class", this); - if (attr === null) { - attr = algorithm_1.create_attr(this._nodeDocument, "class"); - } - return algorithm_1.create_domTokenList(this, attr); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ElementImpl.prototype, "slot", { - /** @inheritdoc */ - get: function () { - return algorithm_1.element_getAnAttributeValue(this, "slot"); - }, - set: function (value) { - algorithm_1.element_setAnAttributeValue(this, "slot", value); - }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - ElementImpl.prototype.hasAttributes = function () { - return this._attributeList.length !== 0; - }; - Object.defineProperty(ElementImpl.prototype, "attributes", { - /** @inheritdoc */ - get: function () { return this._attributeList; }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - ElementImpl.prototype.getAttributeNames = function () { - var e_1, _a; - /** - * The getAttributeNames() method, when invoked, must return the qualified - * names of the attributes in context object’s attribute list, in order, - * and a new list otherwise. - */ - var names = []; - try { - for (var _b = __values(this._attributeList), _c = _b.next(); !_c.done; _c = _b.next()) { - var attr = _c.value; - names.push(attr._qualifiedName); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - return names; - }; - /** @inheritdoc */ - ElementImpl.prototype.getAttribute = function (qualifiedName) { - /** - * 1. Let attr be the result of getting an attribute given qualifiedName - * and the context object. - * 2. If attr is null, return null. - * 3. Return attr’s value. - */ - var attr = algorithm_1.element_getAnAttributeByName(qualifiedName, this); - return (attr ? attr._value : null); - }; - /** @inheritdoc */ - ElementImpl.prototype.getAttributeNS = function (namespace, localName) { - /** - * 1. Let attr be the result of getting an attribute given namespace, - * localName, and the context object. - * 2. If attr is null, return null. - * 3. Return attr’s value. - */ - var attr = algorithm_1.element_getAnAttributeByNamespaceAndLocalName(namespace, localName, this); - return (attr ? attr._value : null); - }; - /** @inheritdoc */ - ElementImpl.prototype.setAttribute = function (qualifiedName, value) { - /** - * 1. If qualifiedName does not match the Name production in XML, then - * throw an "InvalidCharacterError" DOMException. - */ - if (!algorithm_1.xml_isName(qualifiedName)) - throw new DOMException_1.InvalidCharacterError(); - /** - * 2. If the context object is in the HTML namespace and its node document - * is an HTML document, then set qualifiedName to qualifiedName in ASCII - * lowercase. - */ - if (this._namespace === infra_1.namespace.HTML && this._nodeDocument._type === "html") { - qualifiedName = qualifiedName.toLowerCase(); - } - /** - * 3. Let attribute be the first attribute in context object’s attribute - * list whose qualified name is qualifiedName, and null otherwise. - */ - var attribute = null; - for (var i = 0; i < this._attributeList.length; i++) { - var attr = this._attributeList[i]; - if (attr._qualifiedName === qualifiedName) { - attribute = attr; - break; - } - } - /** - * 4. If attribute is null, create an attribute whose local name is - * qualifiedName, value is value, and node document is context object’s - * node document, then append this attribute to context object, and - * then return. - */ - if (attribute === null) { - attribute = algorithm_1.create_attr(this._nodeDocument, qualifiedName); - attribute._value = value; - algorithm_1.element_append(attribute, this); - return; - } - /** - * 5. Change attribute from context object to value. - */ - algorithm_1.element_change(attribute, this, value); - }; - /** @inheritdoc */ - ElementImpl.prototype.setAttributeNS = function (namespace, qualifiedName, value) { - /** - * 1. Let namespace, prefix, and localName be the result of passing - * namespace and qualifiedName to validate and extract. - * 2. Set an attribute value for the context object using localName, value, - * and also prefix and namespace. - */ - var _a = __read(algorithm_1.namespace_validateAndExtract(namespace, qualifiedName), 3), ns = _a[0], prefix = _a[1], localName = _a[2]; - algorithm_1.element_setAnAttributeValue(this, localName, value, prefix, ns); - }; - /** @inheritdoc */ - ElementImpl.prototype.removeAttribute = function (qualifiedName) { - /** - * The removeAttribute(qualifiedName) method, when invoked, must remove an - * attribute given qualifiedName and the context object, and then return - * undefined. - */ - algorithm_1.element_removeAnAttributeByName(qualifiedName, this); - }; - /** @inheritdoc */ - ElementImpl.prototype.removeAttributeNS = function (namespace, localName) { - /** - * The removeAttributeNS(namespace, localName) method, when invoked, must - * remove an attribute given namespace, localName, and context object, and - * then return undefined. - */ - algorithm_1.element_removeAnAttributeByNamespaceAndLocalName(namespace, localName, this); - }; - /** @inheritdoc */ - ElementImpl.prototype.hasAttribute = function (qualifiedName) { - /** - * 1. If the context object is in the HTML namespace and its node document - * is an HTML document, then set qualifiedName to qualifiedName in ASCII - * lowercase. - * 2. Return true if the context object has an attribute whose qualified - * name is qualifiedName, and false otherwise. - */ - if (this._namespace === infra_1.namespace.HTML && this._nodeDocument._type === "html") { - qualifiedName = qualifiedName.toLowerCase(); - } - for (var i = 0; i < this._attributeList.length; i++) { - var attr = this._attributeList[i]; - if (attr._qualifiedName === qualifiedName) { - return true; - } - } - return false; - }; - /** @inheritdoc */ - ElementImpl.prototype.toggleAttribute = function (qualifiedName, force) { - /** - * 1. If qualifiedName does not match the Name production in XML, then - * throw an "InvalidCharacterError" DOMException. - */ - if (!algorithm_1.xml_isName(qualifiedName)) - throw new DOMException_1.InvalidCharacterError(); - /** - * 2. If the context object is in the HTML namespace and its node document - * is an HTML document, then set qualifiedName to qualifiedName in ASCII - * lowercase. - */ - if (this._namespace === infra_1.namespace.HTML && this._nodeDocument._type === "html") { - qualifiedName = qualifiedName.toLowerCase(); - } - /** - * 3. Let attribute be the first attribute in the context object’s attribute - * list whose qualified name is qualifiedName, and null otherwise. - */ - var attribute = null; - for (var i = 0; i < this._attributeList.length; i++) { - var attr = this._attributeList[i]; - if (attr._qualifiedName === qualifiedName) { - attribute = attr; - break; - } - } - if (attribute === null) { - /** - * 4. If attribute is null, then: - * 4.1. If force is not given or is true, create an attribute whose local - * name is qualifiedName, value is the empty string, and node document is - * the context object’s node document, then append this attribute to the - * context object, and then return true. - * 4.2. Return false. - */ - if (force === undefined || force === true) { - attribute = algorithm_1.create_attr(this._nodeDocument, qualifiedName); - attribute._value = ''; - algorithm_1.element_append(attribute, this); - return true; - } - return false; - } - else if (force === undefined || force === false) { - /** - * 5. Otherwise, if force is not given or is false, remove an attribute - * given qualifiedName and the context object, and then return false. - */ - algorithm_1.element_removeAnAttributeByName(qualifiedName, this); - return false; - } - /** - * 6. Return true. - */ - return true; - }; - /** @inheritdoc */ - ElementImpl.prototype.hasAttributeNS = function (namespace, localName) { - /** - * 1. If namespace is the empty string, set it to null. - * 2. Return true if the context object has an attribute whose namespace is - * namespace and local name is localName, and false otherwise. - */ - var ns = namespace || null; - for (var i = 0; i < this._attributeList.length; i++) { - var attr = this._attributeList[i]; - if (attr._namespace === ns && attr._localName === localName) { - return true; - } - } - return false; - }; - /** @inheritdoc */ - ElementImpl.prototype.getAttributeNode = function (qualifiedName) { - /** - * The getAttributeNode(qualifiedName) method, when invoked, must return the - * result of getting an attribute given qualifiedName and context object. - */ - return algorithm_1.element_getAnAttributeByName(qualifiedName, this); - }; - /** @inheritdoc */ - ElementImpl.prototype.getAttributeNodeNS = function (namespace, localName) { - /** - * The getAttributeNodeNS(namespace, localName) method, when invoked, must - * return the result of getting an attribute given namespace, localName, and - * the context object. - */ - return algorithm_1.element_getAnAttributeByNamespaceAndLocalName(namespace, localName, this); - }; - /** @inheritdoc */ - ElementImpl.prototype.setAttributeNode = function (attr) { - /** - * The setAttributeNode(attr) and setAttributeNodeNS(attr) methods, when - * invoked, must return the result of setting an attribute given attr and - * the context object. - */ - return algorithm_1.element_setAnAttribute(attr, this); - }; - /** @inheritdoc */ - ElementImpl.prototype.setAttributeNodeNS = function (attr) { - return algorithm_1.element_setAnAttribute(attr, this); - }; - /** @inheritdoc */ - ElementImpl.prototype.removeAttributeNode = function (attr) { - /** - * 1. If context object’s attribute list does not contain attr, then throw - * a "NotFoundError" DOMException. - * 2. Remove attr from context object. - * 3. Return attr. - */ - var found = false; - for (var i = 0; i < this._attributeList.length; i++) { - var attribute = this._attributeList[i]; - if (attribute === attr) { - found = true; - break; - } - } - if (!found) - throw new DOMException_1.NotFoundError(); - algorithm_1.element_remove(attr, this); - return attr; - }; - /** @inheritdoc */ - ElementImpl.prototype.attachShadow = function (init) { - /** - * 1. If context object’s namespace is not the HTML namespace, then throw a - * "NotSupportedError" DOMException. - */ - if (this._namespace !== infra_1.namespace.HTML) - throw new DOMException_1.NotSupportedError(); - /** - * 2. If context object’s local name is not a valid custom element name, - * "article", "aside", "blockquote", "body", "div", "footer", "h1", "h2", - * "h3", "h4", "h5", "h6", "header", "main" "nav", "p", "section", - * or "span", then throw a "NotSupportedError" DOMException. - */ - if (!algorithm_1.customElement_isValidCustomElementName(this._localName) && - !algorithm_1.customElement_isValidShadowHostName(this._localName)) - throw new DOMException_1.NotSupportedError(); - /** - * 3. If context object’s local name is a valid custom element name, - * or context object’s is value is not null, then: - * 3.1. Let definition be the result of looking up a custom element - * definition given context object’s node document, its namespace, its - * local name, and its is value. - * 3.2. If definition is not null and definition’s disable shadow is true, - * then throw a "NotSupportedError" DOMException. - */ - if (algorithm_1.customElement_isValidCustomElementName(this._localName) || this._is !== null) { - var definition = algorithm_1.customElement_lookUpACustomElementDefinition(this._nodeDocument, this._namespace, this._localName, this._is); - if (definition !== null && definition.disableShadow === true) { - throw new DOMException_1.NotSupportedError(); - } - } - /** - * 4. If context object is a shadow host, then throw an "NotSupportedError" - * DOMException. - */ - if (this._shadowRoot !== null) - throw new DOMException_1.NotSupportedError(); - /** - * 5. Let shadow be a new shadow root whose node document is context - * object’s node document, host is context object, and mode is init’s mode. - * 6. Set context object’s shadow root to shadow. - * 7. Return shadow. - */ - var shadow = algorithm_1.create_shadowRoot(this._nodeDocument, this); - shadow._mode = init.mode; - this._shadowRoot = shadow; - return shadow; - }; - Object.defineProperty(ElementImpl.prototype, "shadowRoot", { - /** @inheritdoc */ - get: function () { - /** - * 1. Let shadow be context object’s shadow root. - * 2. If shadow is null or its mode is "closed", then return null. - * 3. Return shadow. - */ - var shadow = this._shadowRoot; - if (shadow === null || shadow.mode === "closed") - return null; - else - return shadow; - }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - ElementImpl.prototype.closest = function (selectors) { - /** - * TODO: Selectors - * 1. Let s be the result of parse a selector from selectors. [SELECTORS4] - * 2. If s is failure, throw a "SyntaxError" DOMException. - * 3. Let elements be context object’s inclusive ancestors that are - * elements, in reverse tree order. - * 4. For each element in elements, if match a selector against an element, - * using s, element, and :scope element context object, returns success, - * return element. [SELECTORS4] - * 5. Return null. - */ - throw new DOMException_1.NotImplementedError(); - }; - /** @inheritdoc */ - ElementImpl.prototype.matches = function (selectors) { - /** - * TODO: Selectors - * 1. Let s be the result of parse a selector from selectors. [SELECTORS4] - * 2. If s is failure, throw a "SyntaxError" DOMException. - * 3. Return true if the result of match a selector against an element, - * using s, element, and :scope element context object, returns success, - * and false otherwise. [SELECTORS4] - */ - throw new DOMException_1.NotImplementedError(); - }; - /** @inheritdoc */ - ElementImpl.prototype.webkitMatchesSelector = function (selectors) { - return this.matches(selectors); - }; - /** @inheritdoc */ - ElementImpl.prototype.getElementsByTagName = function (qualifiedName) { - /** - * The getElementsByTagName(qualifiedName) method, when invoked, must return - * the list of elements with qualified name qualifiedName for context - * object. - */ - return algorithm_1.node_listOfElementsWithQualifiedName(qualifiedName, this); - }; - /** @inheritdoc */ - ElementImpl.prototype.getElementsByTagNameNS = function (namespace, localName) { - /** - * The getElementsByTagNameNS(namespace, localName) method, when invoked, - * must return the list of elements with namespace namespace and local name - * localName for context object. - */ - return algorithm_1.node_listOfElementsWithNamespace(namespace, localName, this); - }; - /** @inheritdoc */ - ElementImpl.prototype.getElementsByClassName = function (classNames) { - /** - * The getElementsByClassName(classNames) method, when invoked, must return - * the list of elements with class names classNames for context object. - */ - return algorithm_1.node_listOfElementsWithClassNames(classNames, this); - }; - /** @inheritdoc */ - ElementImpl.prototype.insertAdjacentElement = function (where, element) { - /** - * The insertAdjacentElement(where, element) method, when invoked, must - * return the result of running insert adjacent, given context object, - * where, and element. - */ - return algorithm_1.element_insertAdjacent(this, where, element); - }; - /** @inheritdoc */ - ElementImpl.prototype.insertAdjacentText = function (where, data) { - /** - * 1. Let text be a new Text node whose data is data and node document is - * context object’s node document. - * 2. Run insert adjacent, given context object, where, and text. - */ - var text = algorithm_1.create_text(this._nodeDocument, data); - algorithm_1.element_insertAdjacent(this, where, text); - }; - Object.defineProperty(ElementImpl.prototype, "_qualifiedName", { - /** - * Returns the qualified name. - */ - get: function () { - /** - * An element’s qualified name is its local name if its namespace prefix is - * null, and its namespace prefix, followed by ":", followed by its - * local name, otherwise. - */ - return (this._namespacePrefix ? - this._namespacePrefix + ':' + this._localName : - this._localName); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ElementImpl.prototype, "_htmlUppercasedQualifiedName", { - /** - * Returns the upper-cased qualified name for a html element. - */ - get: function () { - /** - * 1. Let qualifiedName be context object’s qualified name. - * 2. If the context object is in the HTML namespace and its node document - * is an HTML document, then set qualifiedName to qualifiedName in ASCII - * uppercase. - * 3. Return qualifiedName. - */ - var qualifiedName = this._qualifiedName; - if (this._namespace === infra_1.namespace.HTML && this._nodeDocument._type === "html") { - qualifiedName = qualifiedName.toUpperCase(); - } - return qualifiedName; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ElementImpl.prototype, "children", { - // MIXIN: ParentNode - /* istanbul ignore next */ - get: function () { throw new Error("Mixin: ParentNode not implemented."); }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ElementImpl.prototype, "firstElementChild", { - /* istanbul ignore next */ - get: function () { throw new Error("Mixin: ParentNode not implemented."); }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ElementImpl.prototype, "lastElementChild", { - /* istanbul ignore next */ - get: function () { throw new Error("Mixin: ParentNode not implemented."); }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ElementImpl.prototype, "childElementCount", { - /* istanbul ignore next */ - get: function () { throw new Error("Mixin: ParentNode not implemented."); }, - enumerable: true, - configurable: true - }); - /* istanbul ignore next */ - ElementImpl.prototype.prepend = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; - } - throw new Error("Mixin: ParentNode not implemented."); - }; - /* istanbul ignore next */ - ElementImpl.prototype.append = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; - } - throw new Error("Mixin: ParentNode not implemented."); - }; - /* istanbul ignore next */ - ElementImpl.prototype.querySelector = function (selectors) { throw new Error("Mixin: ParentNode not implemented."); }; - /* istanbul ignore next */ - ElementImpl.prototype.querySelectorAll = function (selectors) { throw new Error("Mixin: ParentNode not implemented."); }; - Object.defineProperty(ElementImpl.prototype, "previousElementSibling", { - // MIXIN: NonDocumentTypeChildNode - /* istanbul ignore next */ - get: function () { throw new Error("Mixin: NonDocumentTypeChildNode not implemented."); }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ElementImpl.prototype, "nextElementSibling", { - /* istanbul ignore next */ - get: function () { throw new Error("Mixin: NonDocumentTypeChildNode not implemented."); }, - enumerable: true, - configurable: true - }); - // MIXIN: ChildNode - /* istanbul ignore next */ - ElementImpl.prototype.before = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; - } - throw new Error("Mixin: ChildNode not implemented."); - }; - /* istanbul ignore next */ - ElementImpl.prototype.after = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; - } - throw new Error("Mixin: ChildNode not implemented."); - }; - /* istanbul ignore next */ - ElementImpl.prototype.replaceWith = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; - } - throw new Error("Mixin: ChildNode not implemented."); - }; - /* istanbul ignore next */ - ElementImpl.prototype.remove = function () { throw new Error("Mixin: ChildNode not implemented."); }; - Object.defineProperty(ElementImpl.prototype, "assignedSlot", { - // MIXIN: Slotable - /* istanbul ignore next */ - get: function () { throw new Error("Mixin: Slotable not implemented."); }, - enumerable: true, - configurable: true - }); - /** - * Creates a new `Element`. - * - * @param document - owner document - * @param localName - local name - * @param namespace - namespace - * @param prefix - namespace prefix - */ - ElementImpl._create = function (document, localName, namespace, namespacePrefix) { - if (namespace === void 0) { namespace = null; } - if (namespacePrefix === void 0) { namespacePrefix = null; } - var node = new ElementImpl(); - node._localName = localName; - node._namespace = namespace; - node._namespacePrefix = namespacePrefix; - node._nodeDocument = document; - return node; - }; - return ElementImpl; -}(NodeImpl_1.NodeImpl)); -exports.ElementImpl = ElementImpl; -/** - * Initialize prototype properties - */ -WebIDLAlgorithm_1.idl_defineConst(ElementImpl.prototype, "_nodeType", interfaces_1.NodeType.Element); -//# sourceMappingURL=ElementImpl.js.map - -/***/ }), -/* 696 */, -/* 697 */, -/* 698 */, -/* 699 */, -/* 700 */, -/* 701 */, -/* 702 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - -// A linked list to keep track of recently-used-ness -const Yallist = __webpack_require__(612) - -const MAX = Symbol('max') -const LENGTH = Symbol('length') -const LENGTH_CALCULATOR = Symbol('lengthCalculator') -const ALLOW_STALE = Symbol('allowStale') -const MAX_AGE = Symbol('maxAge') -const DISPOSE = Symbol('dispose') -const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet') -const LRU_LIST = Symbol('lruList') -const CACHE = Symbol('cache') -const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet') - -const naiveLength = () => 1 - -// lruList is a yallist where the head is the youngest -// item, and the tail is the oldest. the list contains the Hit -// objects as the entries. -// Each Hit object has a reference to its Yallist.Node. This -// never changes. -// -// cache is a Map (or PseudoMap) that matches the keys to -// the Yallist.Node object. -class LRUCache { - constructor (options) { - if (typeof options === 'number') - options = { max: options } - - if (!options) - options = {} - - if (options.max && (typeof options.max !== 'number' || options.max < 0)) - throw new TypeError('max must be a non-negative number') - // Kind of weird to have a default max of Infinity, but oh well. - const max = this[MAX] = options.max || Infinity - - const lc = options.length || naiveLength - this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc - this[ALLOW_STALE] = options.stale || false - if (options.maxAge && typeof options.maxAge !== 'number') - throw new TypeError('maxAge must be a number') - this[MAX_AGE] = options.maxAge || 0 - this[DISPOSE] = options.dispose - this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false - this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false - this.reset() - } - - // resize the cache when the max changes. - set max (mL) { - if (typeof mL !== 'number' || mL < 0) - throw new TypeError('max must be a non-negative number') - - this[MAX] = mL || Infinity - trim(this) - } - get max () { - return this[MAX] - } - - set allowStale (allowStale) { - this[ALLOW_STALE] = !!allowStale - } - get allowStale () { - return this[ALLOW_STALE] - } - - set maxAge (mA) { - if (typeof mA !== 'number') - throw new TypeError('maxAge must be a non-negative number') - - this[MAX_AGE] = mA - trim(this) - } - get maxAge () { - return this[MAX_AGE] - } - - // resize the cache when the lengthCalculator changes. - set lengthCalculator (lC) { - if (typeof lC !== 'function') - lC = naiveLength - - if (lC !== this[LENGTH_CALCULATOR]) { - this[LENGTH_CALCULATOR] = lC - this[LENGTH] = 0 - this[LRU_LIST].forEach(hit => { - hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key) - this[LENGTH] += hit.length - }) - } - trim(this) - } - get lengthCalculator () { return this[LENGTH_CALCULATOR] } - - get length () { return this[LENGTH] } - get itemCount () { return this[LRU_LIST].length } - - rforEach (fn, thisp) { - thisp = thisp || this - for (let walker = this[LRU_LIST].tail; walker !== null;) { - const prev = walker.prev - forEachStep(this, fn, walker, thisp) - walker = prev - } - } - - forEach (fn, thisp) { - thisp = thisp || this - for (let walker = this[LRU_LIST].head; walker !== null;) { - const next = walker.next - forEachStep(this, fn, walker, thisp) - walker = next - } - } - - keys () { - return this[LRU_LIST].toArray().map(k => k.key) - } - - values () { - return this[LRU_LIST].toArray().map(k => k.value) - } - - reset () { - if (this[DISPOSE] && - this[LRU_LIST] && - this[LRU_LIST].length) { - this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value)) - } - - this[CACHE] = new Map() // hash of items by key - this[LRU_LIST] = new Yallist() // list of items in order of use recency - this[LENGTH] = 0 // length of items in the list - } - - dump () { - return this[LRU_LIST].map(hit => - isStale(this, hit) ? false : { - k: hit.key, - v: hit.value, - e: hit.now + (hit.maxAge || 0) - }).toArray().filter(h => h) - } - - dumpLru () { - return this[LRU_LIST] - } - - set (key, value, maxAge) { - maxAge = maxAge || this[MAX_AGE] - - if (maxAge && typeof maxAge !== 'number') - throw new TypeError('maxAge must be a number') - - const now = maxAge ? Date.now() : 0 - const len = this[LENGTH_CALCULATOR](value, key) - - if (this[CACHE].has(key)) { - if (len > this[MAX]) { - del(this, this[CACHE].get(key)) - return false - } - - const node = this[CACHE].get(key) - const item = node.value - - // dispose of the old one before overwriting - // split out into 2 ifs for better coverage tracking - if (this[DISPOSE]) { - if (!this[NO_DISPOSE_ON_SET]) - this[DISPOSE](key, item.value) - } - - item.now = now - item.maxAge = maxAge - item.value = value - this[LENGTH] += len - item.length - item.length = len - this.get(key) - trim(this) - return true - } - - const hit = new Entry(key, value, len, now, maxAge) - - // oversized objects fall out of cache automatically. - if (hit.length > this[MAX]) { - if (this[DISPOSE]) - this[DISPOSE](key, value) - - return false - } - - this[LENGTH] += hit.length - this[LRU_LIST].unshift(hit) - this[CACHE].set(key, this[LRU_LIST].head) - trim(this) - return true - } - - has (key) { - if (!this[CACHE].has(key)) return false - const hit = this[CACHE].get(key).value - return !isStale(this, hit) - } - - get (key) { - return get(this, key, true) - } - - peek (key) { - return get(this, key, false) - } - - pop () { - const node = this[LRU_LIST].tail - if (!node) - return null - - del(this, node) - return node.value - } - - del (key) { - del(this, this[CACHE].get(key)) - } - - load (arr) { - // reset the cache - this.reset() - - const now = Date.now() - // A previous serialized cache has the most recent items first - for (let l = arr.length - 1; l >= 0; l--) { - const hit = arr[l] - const expiresAt = hit.e || 0 - if (expiresAt === 0) - // the item was created without expiration in a non aged cache - this.set(hit.k, hit.v) - else { - const maxAge = expiresAt - now - // dont add already expired items - if (maxAge > 0) { - this.set(hit.k, hit.v, maxAge) - } - } - } - } - - prune () { - this[CACHE].forEach((value, key) => get(this, key, false)) - } -} - -const get = (self, key, doUse) => { - const node = self[CACHE].get(key) - if (node) { - const hit = node.value - if (isStale(self, hit)) { - del(self, node) - if (!self[ALLOW_STALE]) - return undefined - } else { - if (doUse) { - if (self[UPDATE_AGE_ON_GET]) - node.value.now = Date.now() - self[LRU_LIST].unshiftNode(node) - } - } - return hit.value - } -} - -const isStale = (self, hit) => { - if (!hit || (!hit.maxAge && !self[MAX_AGE])) - return false - - const diff = Date.now() - hit.now - return hit.maxAge ? diff > hit.maxAge - : self[MAX_AGE] && (diff > self[MAX_AGE]) -} - -const trim = self => { - if (self[LENGTH] > self[MAX]) { - for (let walker = self[LRU_LIST].tail; - self[LENGTH] > self[MAX] && walker !== null;) { - // We know that we're about to delete this one, and also - // what the next least recently used key will be, so just - // go ahead and set it now. - const prev = walker.prev - del(self, walker) - walker = prev - } - } -} - -const del = (self, node) => { - if (node) { - const hit = node.value - if (self[DISPOSE]) - self[DISPOSE](hit.key, hit.value) - - self[LENGTH] -= hit.length - self[CACHE].delete(hit.key) - self[LRU_LIST].removeNode(node) - } -} - -class Entry { - constructor (key, value, length, now, maxAge) { - this.key = key - this.value = value - this.length = length - this.now = now - this.maxAge = maxAge || 0 - } -} - -const forEachStep = (self, fn, node, thisp) => { - let hit = node.value - if (isStale(self, hit)) { - del(self, node) - if (!self[ALLOW_STALE]) - hit = undefined - } - if (hit) - fn.call(thisp, hit.value, hit.key, self) -} - -module.exports = LRUCache - - -/***/ }), -/* 703 */, -/* 704 */ -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Represents a set of objects with a size limit. - */ -var FixedSizeSet = /** @class */ (function () { - /** - * Initializes a new instance of `FixedSizeSet`. - * - * @param limit - maximum number of items to keep in the set. When the limit - * is exceeded the first item is removed from the set. - */ - function FixedSizeSet(limit) { - if (limit === void 0) { limit = 1000; } - this._items = new Set(); - this._limit = limit; - } - /** - * Adds a new item to the set. - * - * @param item - an item - */ - FixedSizeSet.prototype.add = function (item) { - this._items.add(item); - if (this._items.size > this._limit) { - var it_1 = this._items.values().next(); - /* istanbul ignore else */ - if (!it_1.done) { - this._items.delete(it_1.value); - } - } - return this; - }; - /** - * Removes an item from the set. - * - * @param item - an item - */ - FixedSizeSet.prototype.delete = function (item) { - return this._items.delete(item); - }; - /** - * Determines if an item is in the set. - * - * @param item - an item - */ - FixedSizeSet.prototype.has = function (item) { - return this._items.has(item); - }; - /** - * Removes all items from the set. - */ - FixedSizeSet.prototype.clear = function () { - this._items.clear(); - }; - Object.defineProperty(FixedSizeSet.prototype, "size", { - /** - * Gets the number of items in the set. - */ - get: function () { return this._items.size; }, - enumerable: true, - configurable: true - }); - /** - * Applies the given callback function to all elements of the set. - */ - FixedSizeSet.prototype.forEach = function (callback, thisArg) { - var _this = this; - this._items.forEach(function (e) { return callback.call(thisArg, e, e, _this); }); - }; - /** - * Iterates through the items in the set. - */ - FixedSizeSet.prototype.keys = function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [5 /*yield**/, __values(this._items.keys())]; - case 1: - _a.sent(); - return [2 /*return*/]; - } - }); - }; - /** - * Iterates through the items in the set. - */ - FixedSizeSet.prototype.values = function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [5 /*yield**/, __values(this._items.values())]; - case 1: - _a.sent(); - return [2 /*return*/]; - } - }); - }; - /** - * Iterates through the items in the set. - */ - FixedSizeSet.prototype.entries = function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [5 /*yield**/, __values(this._items.entries())]; - case 1: - _a.sent(); - return [2 /*return*/]; - } - }); - }; - /** - * Iterates through the items in the set. - */ - FixedSizeSet.prototype[Symbol.iterator] = function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [5 /*yield**/, __values(this._items)]; - case 1: - _a.sent(); - return [2 /*return*/]; - } - }); - }; - Object.defineProperty(FixedSizeSet.prototype, Symbol.toStringTag, { - /** - * Returns the string tag of the set. - */ - get: function () { - return "FixedSizeSet"; - }, - enumerable: true, - configurable: true - }); - return FixedSizeSet; -}()); -exports.FixedSizeSet = FixedSizeSet; -//# sourceMappingURL=FixedSizeSet.js.map - -/***/ }), -/* 705 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(970); -var TraversalAlgorithm_1 = __webpack_require__(464); -/** - * Returns the first or last child node, or `null` if there are none. - * - * @param walker - the `TreeWalker` instance - * @param first - `true` to return the first child node, or `false` to - * return the last child node. - */ -function treeWalker_traverseChildren(walker, first) { - /** - * 1. Let node be walker’s current. - * 2. Set node to node’s first child if type is first, and node’s last child - * if type is last. - * 3. While node is non-null: - */ - var node = (first ? walker._current._firstChild : walker._current._lastChild); - while (node !== null) { - /** - * 3.1. Let result be the result of filtering node within walker. - */ - var result = TraversalAlgorithm_1.traversal_filter(walker, node); - if (result === interfaces_1.FilterResult.Accept) { - /** - * 3.2. If result is FILTER_ACCEPT, then set walker’s current to node and - * return node. - */ - walker._current = node; - return node; - } - else if (result === interfaces_1.FilterResult.Skip) { - /** - * 3.3. If result is FILTER_SKIP, then: - * 3.3.1. Let child be node’s first child if type is first, and node’s - * last child if type is last. - * 3.3.2. If child is non-null, then set node to child and continue. - */ - var child = (first ? node._firstChild : node._lastChild); - if (child !== null) { - node = child; - continue; - } - } - /** - * 3.4. While node is non-null: - */ - while (node !== null) { - /** - * 3.4.1. Let sibling be node’s next sibling if type is first, and - * node’s previous sibling if type is last. - * 3.4.2. If sibling is non-null, then set node to sibling and break. - */ - var sibling = (first ? node._nextSibling : node._previousSibling); - if (sibling !== null) { - node = sibling; - break; - } - /** - * 3.4.3. Let parent be node’s parent. - * 3.4.4. If parent is null, walker’s root, or walker’s current, then - * return null. - */ - var parent = node._parent; - if (parent === null || parent === walker._root || parent === walker._current) { - return null; - } - /** - * 3.4.5. Set node to parent. - */ - node = parent; - } - } - /** - * 5. Return null - */ - return null; -} -exports.treeWalker_traverseChildren = treeWalker_traverseChildren; -/** - * Returns the next or previous sibling node, or `null` if there are none. - * - * @param walker - the `TreeWalker` instance - * @param next - `true` to return the next sibling node, or `false` to - * return the previous sibling node. - */ -function treeWalker_traverseSiblings(walker, next) { - /** - * 1. Let node be walker’s current. - * 2. If node is root, then return null. - * 3. While node is non-null: - */ - var node = walker._current; - if (node === walker._root) - return null; - while (true) { - /** - * 3.1. Let sibling be node’s next sibling if type is next, and node’s - * previous sibling if type is previous. - * 3.2. While sibling is non-null: - */ - var sibling = (next ? node._nextSibling : node._previousSibling); - while (sibling !== null) { - /** - * 3.2.1. Set node to sibling. - * 3.2.2. Let result be the result of filtering node within walker. - * 3.2.3. If result is FILTER_ACCEPT, then set walker’s current to node - * and return node. - */ - node = sibling; - var result = TraversalAlgorithm_1.traversal_filter(walker, node); - if (result === interfaces_1.FilterResult.Accept) { - walker._current = node; - return node; - } - /** - * 3.2.4. Set sibling to node’s first child if type is next, and node’s - * last child if type is previous. - * 3.2.5. If result is FILTER_REJECT or sibling is null, then set - * sibling to node’s next sibling if type is next, and node’s previous - * sibling if type is previous. - */ - sibling = (next ? node._firstChild : node._lastChild); - if (result === interfaces_1.FilterResult.Reject || sibling === null) { - sibling = (next ? node._nextSibling : node._previousSibling); - } - } - /** - * 3.3. Set node to node’s parent. - * 3.4. If node is null or walker’s root, then return null. - */ - node = node._parent; - if (node === null || node === walker._root) { - return null; - } - /** - * 3.5. If the return value of filtering node within walker is FILTER_ACCEPT, - * then return null. - */ - if (TraversalAlgorithm_1.traversal_filter(walker, node) === interfaces_1.FilterResult.Accept) { - return null; - } - } -} -exports.treeWalker_traverseSiblings = treeWalker_traverseSiblings; -//# sourceMappingURL=TreeWalkerAlgorithm.js.map - -/***/ }), -/* 706 */, -/* 707 */, -/* 708 */, -/* 709 */, -/* 710 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var EventAlgorithm_1 = __webpack_require__(826); -/** - * Adds an algorithm to the given abort signal. - * - * @param algorithm - an algorithm - * @param signal - abort signal - */ -function abort_add(algorithm, signal) { - /** - * 1. If signal’s aborted flag is set, then return. - * 2. Append algorithm to signal’s abort algorithms. - */ - if (signal._abortedFlag) - return; - signal._abortAlgorithms.add(algorithm); -} -exports.abort_add = abort_add; -/** - * Removes an algorithm from the given abort signal. - * - * @param algorithm - an algorithm - * @param signal - abort signal - */ -function abort_remove(algorithm, signal) { - /** - * To remove an algorithm algorithm from an AbortSignal signal, remove - * algorithm from signal’s abort algorithms. - */ - signal._abortAlgorithms.delete(algorithm); -} -exports.abort_remove = abort_remove; -/** - * Signals abort on the given abort signal. - * - * @param signal - abort signal - */ -function abort_signalAbort(signal) { - var e_1, _a; - /** - * 1. If signal’s aborted flag is set, then return. - * 2. Set signal’s aborted flag. - * 3. For each algorithm in signal’s abort algorithms: run algorithm. - * 4. Empty signal’s abort algorithms. - * 5. Fire an event named abort at signal. - */ - if (signal._abortedFlag) - return; - signal._abortedFlag = true; - try { - for (var _b = __values(signal._abortAlgorithms), _c = _b.next(); !_c.done; _c = _b.next()) { - var algorithm = _c.value; - algorithm.call(signal); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - signal._abortAlgorithms.clear(); - EventAlgorithm_1.event_fireAnEvent("abort", signal); -} -exports.abort_signalAbort = abort_signalAbort; -//# sourceMappingURL=AbortAlgorithm.js.map - -/***/ }), -/* 711 */, -/* 712 */, -/* 713 */, -/* 714 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const parse = __webpack_require__(830) -const valid = (version, options) => { - const v = parse(version, options) - return v ? v.version : null -} -module.exports = valid - - -/***/ }), -/* 715 */, -/* 716 */, -/* 717 */, -/* 718 */, -/* 719 */, -/* 720 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; -// Standard YAML's JSON schema. -// http://www.yaml.org/spec/1.2/spec.html#id2803231 -// -// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. -// So, this schema is not such strict as defined in the YAML specification. -// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc. - - - - - -var Schema = __webpack_require__(733); - - -module.exports = new Schema({ - include: [ - __webpack_require__(265) - ], - implicit: [ - __webpack_require__(809), - __webpack_require__(228), - __webpack_require__(44), - __webpack_require__(417) - ] -}); - - -/***/ }), -/* 721 */, -/* 722 */ -/***/ (function(module) { - -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ -var byteToHex = []; -for (var i = 0; i < 256; ++i) { - byteToHex[i] = (i + 0x100).toString(16).substr(1); -} - -function bytesToUuid(buf, offset) { - var i = offset || 0; - var bth = byteToHex; - // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4 - return ([ - bth[buf[i++]], bth[buf[i++]], - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], - bth[buf[i++]], bth[buf[i++]], - bth[buf[i++]], bth[buf[i++]] - ]).join(''); -} - -module.exports = bytesToUuid; - - -/***/ }), -/* 723 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; -// JS-YAML's default schema for `safeLoad` function. -// It is not described in the YAML specification. -// -// This schema is based on standard YAML's Core schema and includes most of -// extra types described at YAML tag repository. (http://yaml.org/type/) - - - - - -var Schema = __webpack_require__(733); - - -module.exports = new Schema({ - include: [ - __webpack_require__(611) - ], - implicit: [ - __webpack_require__(841), - __webpack_require__(633) - ], - explicit: [ - __webpack_require__(913), - __webpack_require__(842), - __webpack_require__(75), - __webpack_require__(100) - ] -}); - - -/***/ }), -/* 724 */, -/* 725 */, -/* 726 */, -/* 727 */, -/* 728 */, -/* 729 */, -/* 730 */ -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Represents a mutation record. - */ -var MutationRecordImpl = /** @class */ (function () { - /** - * Initializes a new instance of `MutationRecord`. - * - * @param type - type of mutation: `"attributes"` for an attribute - * mutation, `"characterData"` for a mutation to a CharacterData node - * and `"childList"` for a mutation to the tree of nodes. - * @param target - node affected by the mutation. - * @param addedNodes - list of added nodes. - * @param removedNodes - list of removed nodes. - * @param previousSibling - previous sibling of added or removed nodes. - * @param nextSibling - next sibling of added or removed nodes. - * @param attributeName - local name of the changed attribute, - * and `null` otherwise. - * @param attributeNamespace - namespace of the changed attribute, - * and `null` otherwise. - * @param oldValue - value before mutation: attribute value for an attribute - * mutation, node `data` for a mutation to a CharacterData node and `null` - * for a mutation to the tree of nodes. - */ - function MutationRecordImpl(type, target, addedNodes, removedNodes, previousSibling, nextSibling, attributeName, attributeNamespace, oldValue) { - this._type = type; - this._target = target; - this._addedNodes = addedNodes; - this._removedNodes = removedNodes; - this._previousSibling = previousSibling; - this._nextSibling = nextSibling; - this._attributeName = attributeName; - this._attributeNamespace = attributeNamespace; - this._oldValue = oldValue; - } - Object.defineProperty(MutationRecordImpl.prototype, "type", { - /** @inheritdoc */ - get: function () { return this._type; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MutationRecordImpl.prototype, "target", { - /** @inheritdoc */ - get: function () { return this._target; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MutationRecordImpl.prototype, "addedNodes", { - /** @inheritdoc */ - get: function () { return this._addedNodes; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MutationRecordImpl.prototype, "removedNodes", { - /** @inheritdoc */ - get: function () { return this._removedNodes; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MutationRecordImpl.prototype, "previousSibling", { - /** @inheritdoc */ - get: function () { return this._previousSibling; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MutationRecordImpl.prototype, "nextSibling", { - /** @inheritdoc */ - get: function () { return this._nextSibling; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MutationRecordImpl.prototype, "attributeName", { - /** @inheritdoc */ - get: function () { return this._attributeName; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MutationRecordImpl.prototype, "attributeNamespace", { - /** @inheritdoc */ - get: function () { return this._attributeNamespace; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MutationRecordImpl.prototype, "oldValue", { - /** @inheritdoc */ - get: function () { return this._oldValue; }, - enumerable: true, - configurable: true - }); - /** - * Creates a new `MutationRecord`. - * - * @param type - type of mutation: `"attributes"` for an attribute - * mutation, `"characterData"` for a mutation to a CharacterData node - * and `"childList"` for a mutation to the tree of nodes. - * @param target - node affected by the mutation. - * @param addedNodes - list of added nodes. - * @param removedNodes - list of removed nodes. - * @param previousSibling - previous sibling of added or removed nodes. - * @param nextSibling - next sibling of added or removed nodes. - * @param attributeName - local name of the changed attribute, - * and `null` otherwise. - * @param attributeNamespace - namespace of the changed attribute, - * and `null` otherwise. - * @param oldValue - value before mutation: attribute value for an attribute - * mutation, node `data` for a mutation to a CharacterData node and `null` - * for a mutation to the tree of nodes. - */ - MutationRecordImpl._create = function (type, target, addedNodes, removedNodes, previousSibling, nextSibling, attributeName, attributeNamespace, oldValue) { - return new MutationRecordImpl(type, target, addedNodes, removedNodes, previousSibling, nextSibling, attributeName, attributeNamespace, oldValue); - }; - return MutationRecordImpl; -}()); -exports.MutationRecordImpl = MutationRecordImpl; -//# sourceMappingURL=MutationRecordImpl.js.map - -/***/ }), -/* 731 */, -/* 732 */, -/* 733 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - -/*eslint-disable max-len*/ - -var common = __webpack_require__(740); -var YAMLException = __webpack_require__(556); -var Type = __webpack_require__(945); - - -function compileList(schema, name, result) { - var exclude = []; - - schema.include.forEach(function (includedSchema) { - result = compileList(includedSchema, name, result); - }); - - schema[name].forEach(function (currentType) { - result.forEach(function (previousType, previousIndex) { - if (previousType.tag === currentType.tag && previousType.kind === currentType.kind) { - exclude.push(previousIndex); - } - }); - - result.push(currentType); - }); - - return result.filter(function (type, index) { - return exclude.indexOf(index) === -1; - }); -} - - -function compileMap(/* lists... */) { - var result = { - scalar: {}, - sequence: {}, - mapping: {}, - fallback: {} - }, index, length; - - function collectType(type) { - result[type.kind][type.tag] = result['fallback'][type.tag] = type; - } - - for (index = 0, length = arguments.length; index < length; index += 1) { - arguments[index].forEach(collectType); - } - return result; -} - - -function Schema(definition) { - this.include = definition.include || []; - this.implicit = definition.implicit || []; - this.explicit = definition.explicit || []; - - this.implicit.forEach(function (type) { - if (type.loadKind && type.loadKind !== 'scalar') { - throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); - } - }); - - this.compiledImplicit = compileList(this, 'implicit', []); - this.compiledExplicit = compileList(this, 'explicit', []); - this.compiledTypeMap = compileMap(this.compiledImplicit, this.compiledExplicit); -} - - -Schema.DEFAULT = null; - - -Schema.create = function createSchema() { - var schemas, types; - - switch (arguments.length) { - case 1: - schemas = Schema.DEFAULT; - types = arguments[0]; - break; - - case 2: - schemas = arguments[0]; - types = arguments[1]; - break; - - default: - throw new YAMLException('Wrong number of arguments for Schema.create function'); - } - - schemas = common.toArray(schemas); - types = common.toArray(types); - - if (!schemas.every(function (schema) { return schema instanceof Schema; })) { - throw new YAMLException('Specified list of super schemas (or a single Schema object) contains a non-Schema object.'); - } - - if (!types.every(function (type) { return type instanceof Type; })) { - throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.'); - } - - return new Schema({ - include: schemas, - explicit: types - }); -}; - - -module.exports = Schema; - - -/***/ }), -/* 734 */, -/* 735 */, -/* 736 */, -/* 737 */, -/* 738 */, -/* 739 */, -/* 740 */ -/***/ (function(module) { - -"use strict"; - - - -function isNothing(subject) { - return (typeof subject === 'undefined') || (subject === null); -} - - -function isObject(subject) { - return (typeof subject === 'object') && (subject !== null); -} - - -function toArray(sequence) { - if (Array.isArray(sequence)) return sequence; - else if (isNothing(sequence)) return []; - - return [ sequence ]; -} - - -function extend(target, source) { - var index, length, key, sourceKeys; - - if (source) { - sourceKeys = Object.keys(source); - - for (index = 0, length = sourceKeys.length; index < length; index += 1) { - key = sourceKeys[index]; - target[key] = source[key]; - } - } - - return target; -} - - -function repeat(string, count) { - var result = '', cycle; - - for (cycle = 0; cycle < count; cycle += 1) { - result += string; - } - - return result; -} - - -function isNegativeZero(number) { - return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number); -} - - -module.exports.isNothing = isNothing; -module.exports.isObject = isObject; -module.exports.toArray = toArray; -module.exports.repeat = repeat; -module.exports.isNegativeZero = isNegativeZero; -module.exports.extend = extend; - - -/***/ }), -/* 741 */, -/* 742 */, -/* 743 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var dom_1 = __webpack_require__(252); -var dom_2 = __webpack_require__(113); -var util_1 = __webpack_require__(592); -dom_2.dom.setFeatures(false); -/** - * Creates an XML document without any child nodes. - */ -function createDocument() { - var impl = new dom_1.DOMImplementation(); - var doc = impl.createDocument(null, 'root', null); - /* istanbul ignore else */ - if (doc.documentElement) { - doc.removeChild(doc.documentElement); - } - return doc; -} -exports.createDocument = createDocument; -/** - * Sanitizes input strings with user supplied replacement characters. - * - * @param str - input string - * @param replacement - replacement character or function - */ -function sanitizeInput(str, replacement) { - if (str == null) { - return str; - } - else if (replacement === undefined) { - return str + ""; - } - else { - var result = ""; - str = str + ""; - for (var i = 0; i < str.length; i++) { - var n = str.charCodeAt(i); - // #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] - if (n === 0x9 || n === 0xA || n === 0xD || - (n >= 0x20 && n <= 0xD7FF) || - (n >= 0xE000 && n <= 0xFFFD)) { - // valid character - not surrogate pair - result += str.charAt(i); - } - else if (n >= 0xD800 && n <= 0xDBFF && i < str.length - 1) { - var n2 = str.charCodeAt(i + 1); - if (n2 >= 0xDC00 && n2 <= 0xDFFF) { - // valid surrogate pair - n = (n - 0xD800) * 0x400 + n2 - 0xDC00 + 0x10000; - result += String.fromCodePoint(n); - i++; - } - else { - // invalid lone surrogate - result += util_1.isString(replacement) ? replacement : replacement(str.charAt(i), i, str); - } - } - else { - // invalid character - result += util_1.isString(replacement) ? replacement : replacement(str.charAt(i), i, str); - } - } - return result; - } -} -exports.sanitizeInput = sanitizeInput; -//# sourceMappingURL=dom.js.map - -/***/ }), -/* 744 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const SemVer = __webpack_require__(65) -const major = (a, loose) => new SemVer(a, loose).major -module.exports = major - - -/***/ }), -/* 745 */, -/* 746 */, -/* 747 */ -/***/ (function(module) { - -module.exports = require("fs"); - -/***/ }), -/* 748 */, -/* 749 */, -/* 750 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var util_1 = __webpack_require__(592); -var ObjectWriter_1 = __webpack_require__(419); -var BaseWriter_1 = __webpack_require__(462); -/** - * Serializes XML nodes into ES6 maps and arrays. - */ -var MapWriter = /** @class */ (function (_super) { - __extends(MapWriter, _super); - /** - * Initializes a new instance of `MapWriter`. - * - * @param builderOptions - XML builder options - * @param writerOptions - serialization options - */ - function MapWriter(builderOptions, writerOptions) { - var _this = _super.call(this, builderOptions) || this; - // provide default options - _this._writerOptions = util_1.applyDefaults(writerOptions, { - format: "map", - wellFormed: false, - noDoubleEncoding: false, - group: false, - verbose: false - }); - return _this; - } - /** - * Produces an XML serialization of the given node. - * - * @param node - node to serialize - */ - MapWriter.prototype.serialize = function (node) { - // convert to object - var objectWriterOptions = util_1.applyDefaults(this._writerOptions, { - format: "object", - wellFormed: false, - noDoubleEncoding: false, - verbose: false - }); - var objectWriter = new ObjectWriter_1.ObjectWriter(this._builderOptions, objectWriterOptions); - var val = objectWriter.serialize(node); - // recursively convert object into Map - return this._convertObject(val); - }; - /** - * Recursively converts a JS object into an ES5 map. - * - * @param obj - a JS object - */ - MapWriter.prototype._convertObject = function (obj) { - if (util_1.isArray(obj)) { - for (var i = 0; i < obj.length; i++) { - obj[i] = this._convertObject(obj[i]); - } - return obj; - } - else if (util_1.isObject(obj)) { - var map = new Map(); - for (var key in obj) { - map.set(key, this._convertObject(obj[key])); - } - return map; - } - else { - return obj; - } - }; - return MapWriter; -}(BaseWriter_1.BaseWriter)); -exports.MapWriter = MapWriter; -//# sourceMappingURL=MapWriter.js.map - -/***/ }), -/* 751 */, -/* 752 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const eq = __webpack_require__(298) -const neq = __webpack_require__(85) -const gt = __webpack_require__(486) -const gte = __webpack_require__(167) -const lt = __webpack_require__(586) -const lte = __webpack_require__(898) - -const cmp = (a, op, b, loose) => { - switch (op) { - case '===': - if (typeof a === 'object') - a = a.version - if (typeof b === 'object') - b = b.version - return a === b - - case '!==': - if (typeof a === 'object') - a = a.version - if (typeof b === 'object') - b = b.version - return a !== b - - case '': - case '=': - case '==': - return eq(a, b, loose) - - case '!=': - return neq(a, b, loose) - - case '>': - return gt(a, b, loose) - - case '>=': - return gte(a, b, loose) - - case '<': - return lt(a, b, loose) - - case '<=': - return lte(a, b, loose) - - default: - throw new TypeError(`Invalid operator: ${op}`) - } -} -module.exports = cmp - - -/***/ }), -/* 753 */, -/* 754 */, -/* 755 */, -/* 756 */, -/* 757 */, -/* 758 */, -/* 759 */, -/* 760 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(970); -var CharacterDataImpl_1 = __webpack_require__(43); -var WebIDLAlgorithm_1 = __webpack_require__(495); -/** - * Represents a comment node. - */ -var CommentImpl = /** @class */ (function (_super) { - __extends(CommentImpl, _super); - /** - * Initializes a new instance of `Comment`. - * - * @param data - the text content - */ - function CommentImpl(data) { - if (data === void 0) { data = ''; } - return _super.call(this, data) || this; - } - /** - * Creates a new `Comment`. - * - * @param document - owner document - * @param data - node contents - */ - CommentImpl._create = function (document, data) { - if (data === void 0) { data = ''; } - var node = new CommentImpl(data); - node._nodeDocument = document; - return node; - }; - return CommentImpl; -}(CharacterDataImpl_1.CharacterDataImpl)); -exports.CommentImpl = CommentImpl; -/** - * Initialize prototype properties - */ -WebIDLAlgorithm_1.idl_defineConst(CommentImpl.prototype, "_nodeType", interfaces_1.NodeType.Comment); -//# sourceMappingURL=CommentImpl.js.map - -/***/ }), -/* 761 */, -/* 762 */, -/* 763 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var CodePoints_1 = __webpack_require__(11); -/** - * Base-64 encodes the given string. - * - * @param input - a string - */ -function forgivingBase64Encode(input) { - /** - * To forgiving-base64 encode given a byte sequence data, apply the base64 - * algorithm defined in section 4 of RFC 4648 to data and return the result. - * [RFC4648] - */ - return Buffer.from(input).toString('base64'); -} -exports.forgivingBase64Encode = forgivingBase64Encode; -/** - * Decodes a base-64 string. - * - * @param input - a string - */ -function forgivingBase64Decode(input) { - if (input === "") - return ""; - /** - * 1. Remove all ASCII whitespace from data. - */ - input = input.replace(CodePoints_1.ASCIIWhiteSpace, ''); - /** - * 2. If data’s length divides by 4 leaving no remainder, then: - * 2.1. If data ends with one or two U+003D (=) code points, then remove them from data. - */ - if (input.length % 4 === 0) { - if (input.endsWith("==")) { - input = input.substr(0, input.length - 2); - } - else if (input.endsWith("=")) { - input = input.substr(0, input.length - 1); - } - } - /** - * 3. If data’s length divides by 4 leaving a remainder of 1, then return failure. - */ - if (input.length % 4 === 1) - return null; - /** - * 4. If data contains a code point that is not one of - * - U+002B (+) - * - U+002F (/) - * - ASCII alphanumeric - * then return failure. - */ - if (!/[0-9A-Za-z+/]/.test(input)) - return null; - /** - * 5. Let output be an empty byte sequence. - * 6. Let buffer be an empty buffer that can have bits appended to it. - * 7. Let position be a position variable for data, initially pointing at the - * start of data. - * 8. While position does not point past the end of data: - * 8.1. Find the code point pointed to by position in the second column of - * Table 1: The Base 64 Alphabet of RFC 4648. Let n be the number given in the - * first cell of the same row. [RFC4648] - * 8.2. Append the six bits corresponding to n, most significant bit first, - * to buffer. - * 8.3. If buffer has accumulated 24 bits, interpret them as three 8-bit - * big-endian numbers. Append three bytes with values equal to those numbers - * to output, in the same order, and then empty buffer. - * 8.4. Advance position by 1. - * 9. If buffer is not empty, it contains either 12 or 18 bits. If it contains - * 12 bits, then discard the last four and interpret the remaining eight as an - * 8-bit big-endian number. If it contains 18 bits, then discard the last two - * and interpret the remaining 16 as two 8-bit big-endian numbers. Append the - * one or two bytes with values equal to those one or two numbers to output, - * in the same order. - * 10. Return output. - */ - return Buffer.from(input, 'base64').toString('utf8'); -} -exports.forgivingBase64Decode = forgivingBase64Decode; -//# sourceMappingURL=Base64.js.map - -/***/ }), -/* 764 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var util_1 = __webpack_require__(592); -var interfaces_1 = __webpack_require__(970); -var BaseWriter_1 = __webpack_require__(462); -var util_2 = __webpack_require__(918); -/** - * Serializes XML nodes into strings. - */ -var XMLWriter = /** @class */ (function (_super) { - __extends(XMLWriter, _super); - /** - * Initializes a new instance of `XMLWriter`. - * - * @param builderOptions - XML builder options - * @param writerOptions - serialization options - */ - function XMLWriter(builderOptions, writerOptions) { - var _this = _super.call(this, builderOptions) || this; - _this._indentation = {}; - _this._lengthToLastNewline = 0; - // provide default options - _this._writerOptions = util_1.applyDefaults(writerOptions, { - wellFormed: false, - noDoubleEncoding: false, - headless: false, - prettyPrint: false, - indent: " ", - newline: "\n", - offset: 0, - width: 0, - allowEmptyTags: false, - indentTextOnlyNodes: false, - spaceBeforeSlash: false - }); - return _this; - } - /** - * Produces an XML serialization of the given node. - * - * @param node - node to serialize - */ - XMLWriter.prototype.serialize = function (node) { - this._refs = { suppressPretty: false, emptyNode: false, markup: "" }; - // Serialize XML declaration - if (node.nodeType === interfaces_1.NodeType.Document && !this._writerOptions.headless) { - this.declaration(this._builderOptions.version, this._builderOptions.encoding, this._builderOptions.standalone); - } - // recursively serialize node - this.serializeNode(node, this._writerOptions.wellFormed, this._writerOptions.noDoubleEncoding); - // remove trailing newline - if (this._writerOptions.prettyPrint && - this._refs.markup.slice(-this._writerOptions.newline.length) === this._writerOptions.newline) { - this._refs.markup = this._refs.markup.slice(0, -this._writerOptions.newline.length); - } - return this._refs.markup; - }; - /** @inheritdoc */ - XMLWriter.prototype.declaration = function (version, encoding, standalone) { - this._beginLine(); - this._refs.markup += ""; - this._endLine(); - }; - /** @inheritdoc */ - XMLWriter.prototype.docType = function (name, publicId, systemId) { - this._beginLine(); - if (publicId && systemId) { - this._refs.markup += ""; - } - else if (publicId) { - this._refs.markup += ""; - } - else if (systemId) { - this._refs.markup += ""; - } - else { - this._refs.markup += ""; - } - this._endLine(); - }; - /** @inheritdoc */ - XMLWriter.prototype.openTagBegin = function (name) { - this._beginLine(); - this._refs.markup += "<" + name; - }; - /** @inheritdoc */ - XMLWriter.prototype.openTagEnd = function (name, selfClosing, voidElement) { - // do not indent text only elements or elements with empty text nodes - this._refs.suppressPretty = false; - this._refs.emptyNode = false; - if (this._writerOptions.prettyPrint && !selfClosing && !voidElement) { - var textOnlyNode = true; - var emptyNode = true; - var childNode = this.currentNode.firstChild; - var cdataCount = 0; - var textCount = 0; - while (childNode) { - if (util_2.Guard.isExclusiveTextNode(childNode)) { - textCount++; - } - else if (util_2.Guard.isCDATASectionNode(childNode)) { - cdataCount++; - } - else { - textOnlyNode = false; - emptyNode = false; - break; - } - if (childNode.data !== '') { - emptyNode = false; - } - childNode = childNode.nextSibling; - } - this._refs.suppressPretty = !this._writerOptions.indentTextOnlyNodes && textOnlyNode && ((cdataCount <= 1 && textCount === 0) || cdataCount === 0); - this._refs.emptyNode = emptyNode; - } - if ((voidElement || selfClosing || this._refs.emptyNode) && this._writerOptions.allowEmptyTags) { - this._refs.markup += ">"; - } - else { - this._refs.markup += voidElement ? " />" : - (selfClosing || this._refs.emptyNode) ? (this._writerOptions.spaceBeforeSlash ? " />" : "/>") : ">"; - } - this._endLine(); - }; - /** @inheritdoc */ - XMLWriter.prototype.closeTag = function (name) { - if (!this._refs.emptyNode) { - this._beginLine(); - this._refs.markup += ""; - } - this._refs.suppressPretty = false; - this._refs.emptyNode = false; - this._endLine(); - }; - /** @inheritdoc */ - XMLWriter.prototype.attribute = function (name, value) { - var str = name + "=\"" + value + "\""; - if (this._writerOptions.prettyPrint && this._writerOptions.width > 0 && - this._refs.markup.length - this._lengthToLastNewline + 1 + str.length > this._writerOptions.width) { - this._endLine(); - this._beginLine(); - this._refs.markup += this._indent(1) + str; - } - else { - this._refs.markup += " " + str; - } - }; - /** @inheritdoc */ - XMLWriter.prototype.text = function (data) { - if (data !== '') { - this._beginLine(); - this._refs.markup += data; - this._endLine(); - } - }; - /** @inheritdoc */ - XMLWriter.prototype.cdata = function (data) { - if (data !== '') { - this._beginLine(); - this._refs.markup += ""; - this._endLine(); - } - }; - /** @inheritdoc */ - XMLWriter.prototype.comment = function (data) { - this._beginLine(); - this._refs.markup += ""; - this._endLine(); - }; - /** @inheritdoc */ - XMLWriter.prototype.instruction = function (target, data) { - this._beginLine(); - this._refs.markup += ""; - this._endLine(); - }; - /** - * Produces characters to be prepended to a line of string in pretty-print - * mode. - */ - XMLWriter.prototype._beginLine = function () { - if (this._writerOptions.prettyPrint && !this._refs.suppressPretty) { - this._refs.markup += this._indent(this._writerOptions.offset + this.level); - } - }; - /** - * Produces characters to be appended to a line of string in pretty-print - * mode. - */ - XMLWriter.prototype._endLine = function () { - if (this._writerOptions.prettyPrint && !this._refs.suppressPretty) { - this._refs.markup += this._writerOptions.newline; - this._lengthToLastNewline = this._refs.markup.length; - } - }; - /** - * Produces an indentation string. - * - * @param level - depth of the tree - */ - XMLWriter.prototype._indent = function (level) { - if (level <= 0) { - return ""; - } - else if (this._indentation[level] !== undefined) { - return this._indentation[level]; - } - else { - var str = this._writerOptions.indent.repeat(level); - this._indentation[level] = str; - return str; - } - }; - return XMLWriter; -}(BaseWriter_1.BaseWriter)); -exports.XMLWriter = XMLWriter; -//# sourceMappingURL=XMLWriter.js.map - -/***/ }), -/* 765 */, -/* 766 */, -/* 767 */, -/* 768 */, -/* 769 */, -/* 770 */, -/* 771 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var XMLStringLexer_1 = __webpack_require__(911); -var interfaces_1 = __webpack_require__(172); -var infra_1 = __webpack_require__(23); -var algorithm_1 = __webpack_require__(163); -var dom_1 = __webpack_require__(743); -var BaseReader_1 = __webpack_require__(305); -/** - * Parses XML nodes from an XML document string. - */ -var XMLReader = /** @class */ (function (_super) { - __extends(XMLReader, _super); - function XMLReader() { - return _super !== null && _super.apply(this, arguments) || this; - } - /** - * Parses the given document representation. - * - * @param node - node receive parsed XML nodes - * @param str - XML document string to parse - */ - XMLReader.prototype._parse = function (node, str) { - var e_1, _a, e_2, _b; - var lexer = new XMLStringLexer_1.XMLStringLexer(str, { skipWhitespaceOnlyText: true }); - // sanitizes input characters - var invalidCharReplacement = this._builderOptions.invalidCharReplacement; - var s = function (str) { - return dom_1.sanitizeInput(str, invalidCharReplacement); - }; - var context = node; - var token = lexer.nextToken(); - while (token.type !== interfaces_1.TokenType.EOF) { - switch (token.type) { - case interfaces_1.TokenType.Declaration: - var declaration = token; - var version = s(declaration.version); - if (version !== "1.0") { - throw new Error("Invalid xml version: " + version); - } - var builderOptions = { - version: version - }; - if (declaration.encoding) { - builderOptions.encoding = s(declaration.encoding); - } - if (declaration.standalone) { - builderOptions.standalone = (s(declaration.standalone) === "yes"); - } - context.set(builderOptions); - break; - case interfaces_1.TokenType.DocType: - var doctype = token; - context = this.docType(context, s(doctype.name), s(doctype.pubId), s(doctype.sysId)) || context; - break; - case interfaces_1.TokenType.CDATA: - var cdata = token; - context = this.cdata(context, s(cdata.data)) || context; - break; - case interfaces_1.TokenType.Comment: - var comment = token; - context = this.comment(context, s(comment.data)) || context; - break; - case interfaces_1.TokenType.PI: - var pi = token; - context = this.instruction(context, s(pi.target), s(pi.data)) || context; - break; - case interfaces_1.TokenType.Text: - var text = token; - context = this.text(context, s(text.data)) || context; - break; - case interfaces_1.TokenType.Element: - var element = token; - var elementName = s(element.name); - // inherit namespace from parent - var _c = __read(algorithm_1.namespace_extractQName(elementName), 1), prefix = _c[0]; - var namespace = context.node.lookupNamespaceURI(prefix); - // override namespace if there is a namespace declaration - // attribute - // also lookup namespace declaration attributes - var nsDeclarations = {}; - try { - for (var _d = (e_1 = void 0, __values(element.attributes)), _e = _d.next(); !_e.done; _e = _d.next()) { - var _f = __read(_e.value, 2), attName = _f[0], attValue = _f[1]; - attName = s(attName); - attValue = s(attValue); - if (attName === "xmlns") { - namespace = attValue; - } - else { - var _g = __read(algorithm_1.namespace_extractQName(attName), 2), attPrefix = _g[0], attLocalName = _g[1]; - if (attPrefix === "xmlns") { - if (attLocalName === prefix) { - namespace = attValue; - } - nsDeclarations[attLocalName] = attValue; - } - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_e && !_e.done && (_a = _d.return)) _a.call(_d); - } - finally { if (e_1) throw e_1.error; } - } - // create the DOM element node - var elementNode = (namespace !== null ? - this.element(context, namespace, elementName) : - this.element(context, undefined, elementName)); - if (elementNode === undefined) - break; - try { - // assign attributes - for (var _h = (e_2 = void 0, __values(element.attributes)), _j = _h.next(); !_j.done; _j = _h.next()) { - var _k = __read(_j.value, 2), attName = _k[0], attValue = _k[1]; - attName = s(attName); - attValue = s(attValue); - var _l = __read(algorithm_1.namespace_extractQName(attName), 2), attPrefix = _l[0], attLocalName = _l[1]; - var attNamespace = null; - if (attPrefix === "xmlns" || (attPrefix === null && attLocalName === "xmlns")) { - // namespace declaration attribute - attNamespace = infra_1.namespace.XMLNS; - } - else { - attNamespace = elementNode.node.lookupNamespaceURI(attPrefix); - if (attNamespace !== null && elementNode.node.isDefaultNamespace(attNamespace)) { - attNamespace = null; - } - else if (attNamespace === null && attPrefix !== null) { - attNamespace = nsDeclarations[attPrefix] || null; - } - } - if (attNamespace !== null) - this.attribute(elementNode, attNamespace, attName, attValue); - else - this.attribute(elementNode, undefined, attName, attValue); - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_j && !_j.done && (_b = _h.return)) _b.call(_h); - } - finally { if (e_2) throw e_2.error; } - } - if (!element.selfClosing) { - context = elementNode; - } - break; - case interfaces_1.TokenType.ClosingTag: - /* istanbul ignore else */ - if (context.node.parentNode) { - context = context.up(); - } - break; - } - token = lexer.nextToken(); - } - return context; - }; - return XMLReader; -}(BaseReader_1.BaseReader)); -exports.XMLReader = XMLReader; -//# sourceMappingURL=XMLReader.js.map - -/***/ }), -/* 772 */, -/* 773 */, -/* 774 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(970); -var WebIDLAlgorithm_1 = __webpack_require__(495); -/** - * Represents a node filter. - */ -var NodeFilterImpl = /** @class */ (function () { - /** - * Initializes a new instance of `NodeFilter`. - */ - function NodeFilterImpl() { - } - /** - * Callback function. - */ - NodeFilterImpl.prototype.acceptNode = function (node) { - return interfaces_1.FilterResult.Accept; - }; - /** - * Creates a new `NodeFilter`. - */ - NodeFilterImpl._create = function () { - return new NodeFilterImpl(); - }; - NodeFilterImpl.FILTER_ACCEPT = 1; - NodeFilterImpl.FILTER_REJECT = 2; - NodeFilterImpl.FILTER_SKIP = 3; - NodeFilterImpl.SHOW_ALL = 0xffffffff; - NodeFilterImpl.SHOW_ELEMENT = 0x1; - NodeFilterImpl.SHOW_ATTRIBUTE = 0x2; - NodeFilterImpl.SHOW_TEXT = 0x4; - NodeFilterImpl.SHOW_CDATA_SECTION = 0x8; - NodeFilterImpl.SHOW_ENTITY_REFERENCE = 0x10; - NodeFilterImpl.SHOW_ENTITY = 0x20; - NodeFilterImpl.SHOW_PROCESSING_INSTRUCTION = 0x40; - NodeFilterImpl.SHOW_COMMENT = 0x80; - NodeFilterImpl.SHOW_DOCUMENT = 0x100; - NodeFilterImpl.SHOW_DOCUMENT_TYPE = 0x200; - NodeFilterImpl.SHOW_DOCUMENT_FRAGMENT = 0x400; - NodeFilterImpl.SHOW_NOTATION = 0x800; - return NodeFilterImpl; -}()); -exports.NodeFilterImpl = NodeFilterImpl; -/** - * Define constants on prototype. - */ -WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "FILTER_ACCEPT", 1); -WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "FILTER_REJECT", 2); -WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "FILTER_SKIP", 3); -WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_ALL", 0xffffffff); -WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_ELEMENT", 0x1); -WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_ATTRIBUTE", 0x2); -WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_TEXT", 0x4); -WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_CDATA_SECTION", 0x8); -WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_ENTITY_REFERENCE", 0x10); -WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_ENTITY", 0x20); -WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_PROCESSING_INSTRUCTION", 0x40); -WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_COMMENT", 0x80); -WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_DOCUMENT", 0x100); -WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_DOCUMENT_TYPE", 0x200); -WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_DOCUMENT_FRAGMENT", 0x400); -WebIDLAlgorithm_1.idl_defineConst(NodeFilterImpl.prototype, "SHOW_NOTATION", 0x800); -//# sourceMappingURL=NodeFilterImpl.js.map - -/***/ }), -/* 775 */, -/* 776 */, -/* 777 */, -/* 778 */, -/* 779 */, -/* 780 */, -/* 781 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var BaseCBWriter_1 = __webpack_require__(512); -/** - * Serializes XML nodes. - */ -var JSONCBWriter = /** @class */ (function (_super) { - __extends(JSONCBWriter, _super); - /** - * Initializes a new instance of `JSONCBWriter`. - * - * @param builderOptions - XML builder options - */ - function JSONCBWriter(builderOptions) { - var _this = _super.call(this, builderOptions) || this; - _this._hasChildren = []; - _this._additionalLevel = 0; - return _this; - } - /** @inheritdoc */ - JSONCBWriter.prototype.frontMatter = function () { - return ""; - }; - /** @inheritdoc */ - JSONCBWriter.prototype.declaration = function (version, encoding, standalone) { - return ""; - }; - /** @inheritdoc */ - JSONCBWriter.prototype.docType = function (name, publicId, systemId) { - return ""; - }; - /** @inheritdoc */ - JSONCBWriter.prototype.comment = function (data) { - // { "!": "hello" } - return this._comma() + this._beginLine() + "{" + this._sep() + - this._key(this._builderOptions.convert.comment) + this._sep() + - this._val(data) + this._sep() + "}"; - }; - /** @inheritdoc */ - JSONCBWriter.prototype.text = function (data) { - // { "#": "hello" } - return this._comma() + this._beginLine() + "{" + this._sep() + - this._key(this._builderOptions.convert.text) + this._sep() + - this._val(data) + this._sep() + "}"; - }; - /** @inheritdoc */ - JSONCBWriter.prototype.instruction = function (target, data) { - // { "?": "target hello" } - return this._comma() + this._beginLine() + "{" + this._sep() + - this._key(this._builderOptions.convert.ins) + this._sep() + - this._val(data ? target + " " + data : target) + this._sep() + "}"; - }; - /** @inheritdoc */ - JSONCBWriter.prototype.cdata = function (data) { - // { "$": "hello" } - return this._comma() + this._beginLine() + "{" + this._sep() + - this._key(this._builderOptions.convert.cdata) + this._sep() + - this._val(data) + this._sep() + "}"; - }; - /** @inheritdoc */ - JSONCBWriter.prototype.attribute = function (name, value) { - // { "@name": "val" } - return this._comma() + this._beginLine(1) + "{" + this._sep() + - this._key(this._builderOptions.convert.att + name) + this._sep() + - this._val(value) + this._sep() + "}"; - }; - /** @inheritdoc */ - JSONCBWriter.prototype.openTagBegin = function (name) { - // { "node": { "#": [ - var str = this._comma() + this._beginLine() + "{" + this._sep() + this._key(name) + this._sep() + "{"; - this._additionalLevel++; - this.hasData = true; - str += this._beginLine() + this._key(this._builderOptions.convert.text) + this._sep() + "["; - this._hasChildren.push(false); - return str; - }; - /** @inheritdoc */ - JSONCBWriter.prototype.openTagEnd = function (name, selfClosing, voidElement) { - if (selfClosing) { - var str = this._sep() + "]"; - this._additionalLevel--; - str += this._beginLine() + "}" + this._sep() + "}"; - return str; - } - else { - return ""; - } - }; - /** @inheritdoc */ - JSONCBWriter.prototype.closeTag = function (name) { - // ] } } - var str = this._beginLine() + "]"; - this._additionalLevel--; - str += this._beginLine() + "}" + this._sep() + "}"; - return str; - }; - /** @inheritdoc */ - JSONCBWriter.prototype.beginElement = function (name) { }; - /** @inheritdoc */ - JSONCBWriter.prototype.endElement = function (name) { this._hasChildren.pop(); }; - /** - * Produces characters to be prepended to a line of string in pretty-print - * mode. - */ - JSONCBWriter.prototype._beginLine = function (additionalOffset) { - if (additionalOffset === void 0) { additionalOffset = 0; } - if (this._writerOptions.prettyPrint) { - return (this.hasData ? this._writerOptions.newline : "") + - this._indent(this._writerOptions.offset + this.level + additionalOffset); - } - else { - return ""; - } - }; - /** - * Produces an indentation string. - * - * @param level - depth of the tree - */ - JSONCBWriter.prototype._indent = function (level) { - if (level + this._additionalLevel <= 0) { - return ""; - } - else { - return this._writerOptions.indent.repeat(level + this._additionalLevel); - } - }; - /** - * Produces a comma before a child node if it has previous siblings. - */ - JSONCBWriter.prototype._comma = function () { - var str = (this._hasChildren[this._hasChildren.length - 1] ? "," : ""); - if (this._hasChildren.length > 0) { - this._hasChildren[this._hasChildren.length - 1] = true; - } - return str; - }; - /** - * Produces a separator string. - */ - JSONCBWriter.prototype._sep = function () { - return (this._writerOptions.prettyPrint ? " " : ""); - }; - /** - * Produces a JSON key string delimited with double quotes. - */ - JSONCBWriter.prototype._key = function (key) { - return "\"" + key + "\":"; - }; - /** - * Produces a JSON value string delimited with double quotes. - */ - JSONCBWriter.prototype._val = function (val) { - return JSON.stringify(val); - }; - return JSONCBWriter; -}(BaseCBWriter_1.BaseCBWriter)); -exports.JSONCBWriter = JSONCBWriter; -//# sourceMappingURL=JSONCBWriter.js.map - -/***/ }), -/* 782 */ -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Determines if the given number is an ASCII byte. - * - * @param byte - a byte - */ -function isASCIIByte(byte) { - /** - * An ASCII byte is a byte in the range 0x00 (NUL) to 0x7F (DEL), inclusive. - */ - return byte >= 0x00 && byte <= 0x7F; -} -exports.isASCIIByte = isASCIIByte; -//# sourceMappingURL=Byte.js.map - -/***/ }), -/* 783 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(970); -/** - * Contains user-defined type guards for DOM objects. - */ -var Guard = /** @class */ (function () { - function Guard() { - } - /** - * Determines if the given object is a `Node`. - * - * @param a - the object to check - */ - Guard.isNode = function (a) { - return (!!a && a._nodeType !== undefined); - }; - /** - * Determines if the given object is a `Document`. - * - * @param a - the object to check - */ - Guard.isDocumentNode = function (a) { - return (Guard.isNode(a) && a._nodeType === interfaces_1.NodeType.Document); - }; - /** - * Determines if the given object is a `DocumentType`. - * - * @param a - the object to check - */ - Guard.isDocumentTypeNode = function (a) { - return (Guard.isNode(a) && a._nodeType === interfaces_1.NodeType.DocumentType); - }; - /** - * Determines if the given object is a `DocumentFragment`. - * - * @param a - the object to check - */ - Guard.isDocumentFragmentNode = function (a) { - return (Guard.isNode(a) && a._nodeType === interfaces_1.NodeType.DocumentFragment); - }; - /** - * Determines if the given object is a `Attr`. - * - * @param a - the object to check - */ - Guard.isAttrNode = function (a) { - return (Guard.isNode(a) && a._nodeType === interfaces_1.NodeType.Attribute); - }; - /** - * Determines if the given node is a `CharacterData` node. - * - * @param a - the object to check - */ - Guard.isCharacterDataNode = function (a) { - if (!Guard.isNode(a)) - return false; - var type = a._nodeType; - return (type === interfaces_1.NodeType.Text || - type === interfaces_1.NodeType.ProcessingInstruction || - type === interfaces_1.NodeType.Comment || - type === interfaces_1.NodeType.CData); - }; - /** - * Determines if the given object is a `Text` or a `CDATASection`. - * - * @param a - the object to check - */ - Guard.isTextNode = function (a) { - return (Guard.isNode(a) && (a._nodeType === interfaces_1.NodeType.Text || a._nodeType === interfaces_1.NodeType.CData)); - }; - /** - * Determines if the given object is a `Text`. - * - * @param a - the object to check - */ - Guard.isExclusiveTextNode = function (a) { - return (Guard.isNode(a) && a._nodeType === interfaces_1.NodeType.Text); - }; - /** - * Determines if the given object is a `CDATASection`. - * - * @param a - the object to check - */ - Guard.isCDATASectionNode = function (a) { - return (Guard.isNode(a) && a._nodeType === interfaces_1.NodeType.CData); - }; - /** - * Determines if the given object is a `Comment`. - * - * @param a - the object to check - */ - Guard.isCommentNode = function (a) { - return (Guard.isNode(a) && a._nodeType === interfaces_1.NodeType.Comment); - }; - /** - * Determines if the given object is a `ProcessingInstruction`. - * - * @param a - the object to check - */ - Guard.isProcessingInstructionNode = function (a) { - return (Guard.isNode(a) && a._nodeType === interfaces_1.NodeType.ProcessingInstruction); - }; - /** - * Determines if the given object is an `Element`. - * - * @param a - the object to check - */ - Guard.isElementNode = function (a) { - return (Guard.isNode(a) && a._nodeType === interfaces_1.NodeType.Element); - }; - /** - * Determines if the given object is a custom `Element`. - * - * @param a - the object to check - */ - Guard.isCustomElementNode = function (a) { - return (Guard.isElementNode(a) && a._customElementState === "custom"); - }; - /** - * Determines if the given object is a `ShadowRoot`. - * - * @param a - the object to check - */ - Guard.isShadowRoot = function (a) { - return (!!a && a.host !== undefined); - }; - /** - * Determines if the given object is a `MouseEvent`. - * - * @param a - the object to check - */ - Guard.isMouseEvent = function (a) { - return (!!a && a.screenX !== undefined && a.screenY != undefined); - }; - /** - * Determines if the given object is a slotable. - * - * Element and Text nodes are slotables. A slotable has an associated name - * (a string). - * - * @param a - the object to check - */ - Guard.isSlotable = function (a) { - return (!!a && a._name !== undefined && a._assignedSlot !== undefined && - (Guard.isTextNode(a) || Guard.isElementNode(a))); - }; - /** - * Determines if the given object is a slot. - * - * @param a - the object to check - */ - Guard.isSlot = function (a) { - return (!!a && a._name !== undefined && a._assignedNodes !== undefined && - Guard.isElementNode(a)); - }; - /** - * Determines if the given object is a `Window`. - * - * @param a - the object to check - */ - Guard.isWindow = function (a) { - return (!!a && a.navigator !== undefined); - }; - /** - * Determines if the given object is an `EventListener`. - * - * @param a - the object to check - */ - Guard.isEventListener = function (a) { - return (!!a && a.handleEvent !== undefined); - }; - /** - * Determines if the given object is a `RegisteredObserver`. - * - * @param a - the object to check - */ - Guard.isRegisteredObserver = function (a) { - return (!!a && a.observer !== undefined && a.options !== undefined); - }; - /** - * Determines if the given object is a `TransientRegisteredObserver`. - * - * @param a - the object to check - */ - Guard.isTransientRegisteredObserver = function (a) { - return (!!a && a.source !== undefined && Guard.isRegisteredObserver(a)); - }; - return Guard; -}()); -exports.Guard = Guard; -//# sourceMappingURL=Guard.js.map - -/***/ }), -/* 784 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var EventTargetImpl_1 = __webpack_require__(597); -var algorithm_1 = __webpack_require__(163); -/** - * Represents a signal object that communicates with a DOM request and abort - * it through an AbortController. - */ -var AbortSignalImpl = /** @class */ (function (_super) { - __extends(AbortSignalImpl, _super); - /** - * Initializes a new instance of `AbortSignal`. - */ - function AbortSignalImpl() { - var _this = _super.call(this) || this; - _this._abortedFlag = false; - _this._abortAlgorithms = new Set(); - return _this; - } - Object.defineProperty(AbortSignalImpl.prototype, "aborted", { - /** @inheritdoc */ - get: function () { return this._abortedFlag; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(AbortSignalImpl.prototype, "onabort", { - /** @inheritdoc */ - get: function () { - return algorithm_1.event_getterEventHandlerIDLAttribute(this, "onabort"); - }, - set: function (val) { - algorithm_1.event_setterEventHandlerIDLAttribute(this, "onabort", val); - }, - enumerable: true, - configurable: true - }); - /** - * Creates a new `AbortSignal`. - */ - AbortSignalImpl._create = function () { - return new AbortSignalImpl(); - }; - return AbortSignalImpl; -}(EventTargetImpl_1.EventTargetImpl)); -exports.AbortSignalImpl = AbortSignalImpl; -//# sourceMappingURL=AbortSignalImpl.js.map - -/***/ }), -/* 785 */, -/* 786 */, -/* 787 */, -/* 788 */, -/* 789 */, -/* 790 */, -/* 791 */, -/* 792 */, -/* 793 */, -/* 794 */ -/***/ (function(module) { - -module.exports = require("stream"); - -/***/ }), -/* 795 */, -/* 796 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(970); -var NodeImpl_1 = __webpack_require__(935); -var WebIDLAlgorithm_1 = __webpack_require__(495); -/** - * Represents a document fragment in the XML tree. - */ -var DocumentFragmentImpl = /** @class */ (function (_super) { - __extends(DocumentFragmentImpl, _super); - /** - * Initializes a new instance of `DocumentFragment`. - * - * @param host - shadow root's host element - */ - function DocumentFragmentImpl(host) { - if (host === void 0) { host = null; } - var _this = _super.call(this) || this; - _this._children = new Set(); - _this._host = host; - return _this; - } - // MIXIN: NonElementParentNode - /* istanbul ignore next */ - DocumentFragmentImpl.prototype.getElementById = function (elementId) { throw new Error("Mixin: NonElementParentNode not implemented."); }; - Object.defineProperty(DocumentFragmentImpl.prototype, "children", { - // MIXIN: ParentNode - /* istanbul ignore next */ - get: function () { throw new Error("Mixin: ParentNode not implemented."); }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DocumentFragmentImpl.prototype, "firstElementChild", { - /* istanbul ignore next */ - get: function () { throw new Error("Mixin: ParentNode not implemented."); }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DocumentFragmentImpl.prototype, "lastElementChild", { - /* istanbul ignore next */ - get: function () { throw new Error("Mixin: ParentNode not implemented."); }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DocumentFragmentImpl.prototype, "childElementCount", { - /* istanbul ignore next */ - get: function () { throw new Error("Mixin: ParentNode not implemented."); }, - enumerable: true, - configurable: true - }); - /* istanbul ignore next */ - DocumentFragmentImpl.prototype.prepend = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; - } - throw new Error("Mixin: ParentNode not implemented."); - }; - /* istanbul ignore next */ - DocumentFragmentImpl.prototype.append = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; - } - throw new Error("Mixin: ParentNode not implemented."); - }; - /* istanbul ignore next */ - DocumentFragmentImpl.prototype.querySelector = function (selectors) { throw new Error("Mixin: ParentNode not implemented."); }; - /* istanbul ignore next */ - DocumentFragmentImpl.prototype.querySelectorAll = function (selectors) { throw new Error("Mixin: ParentNode not implemented."); }; - /** - * Creates a new `DocumentFragment`. - * - * @param document - owner document - * @param host - shadow root's host element - */ - DocumentFragmentImpl._create = function (document, host) { - if (host === void 0) { host = null; } - var node = new DocumentFragmentImpl(host); - node._nodeDocument = document; - return node; - }; - return DocumentFragmentImpl; -}(NodeImpl_1.NodeImpl)); -exports.DocumentFragmentImpl = DocumentFragmentImpl; -/** - * Initialize prototype properties - */ -WebIDLAlgorithm_1.idl_defineConst(DocumentFragmentImpl.prototype, "_nodeType", interfaces_1.NodeType.DocumentFragment); -//# sourceMappingURL=DocumentFragmentImpl.js.map - -/***/ }), -/* 797 */, -/* 798 */, -/* 799 */, -/* 800 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var TraverserImpl_1 = __webpack_require__(487); -var algorithm_1 = __webpack_require__(163); -/** - * Represents an object which can be used to iterate through the nodes - * of a subtree. - */ -var NodeIteratorImpl = /** @class */ (function (_super) { - __extends(NodeIteratorImpl, _super); - /** - * Initializes a new instance of `NodeIterator`. - */ - function NodeIteratorImpl(root, reference, pointerBeforeReference) { - var _this = _super.call(this, root) || this; - _this._iteratorCollection = undefined; - _this._reference = reference; - _this._pointerBeforeReference = pointerBeforeReference; - algorithm_1.nodeIterator_iteratorList().add(_this); - return _this; - } - Object.defineProperty(NodeIteratorImpl.prototype, "referenceNode", { - /** @inheritdoc */ - get: function () { return this._reference; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeIteratorImpl.prototype, "pointerBeforeReferenceNode", { - /** @inheritdoc */ - get: function () { return this._pointerBeforeReference; }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - NodeIteratorImpl.prototype.nextNode = function () { - /** - * The nextNode() method, when invoked, must return the result of - * traversing with the context object and next. - */ - return algorithm_1.nodeIterator_traverse(this, true); - }; - /** @inheritdoc */ - NodeIteratorImpl.prototype.previousNode = function () { - /** - * The previousNode() method, when invoked, must return the result of - * traversing with the context object and previous. - */ - return algorithm_1.nodeIterator_traverse(this, false); - }; - /** @inheritdoc */ - NodeIteratorImpl.prototype.detach = function () { - /** - * The detach() method, when invoked, must do nothing. - * - * since JS lacks weak references, we still use detach - */ - algorithm_1.nodeIterator_iteratorList().delete(this); - }; - /** - * Creates a new `NodeIterator`. - * - * @param root - iterator's root node - * @param reference - reference node - * @param pointerBeforeReference - whether the iterator is before or after the - * reference node - */ - NodeIteratorImpl._create = function (root, reference, pointerBeforeReference) { - return new NodeIteratorImpl(root, reference, pointerBeforeReference); - }; - return NodeIteratorImpl; -}(TraverserImpl_1.TraverserImpl)); -exports.NodeIteratorImpl = NodeIteratorImpl; -//# sourceMappingURL=NodeIteratorImpl.js.map - -/***/ }), -/* 801 */, -/* 802 */, -/* 803 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const SemVer = __webpack_require__(65) -const minor = (a, loose) => new SemVer(a, loose).minor -module.exports = minor - - -/***/ }), -/* 804 */, -/* 805 */, -/* 806 */, -/* 807 */, -/* 808 */, -/* 809 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - -var Type = __webpack_require__(945); - -function resolveYamlNull(data) { - if (data === null) return true; - - var max = data.length; - - return (max === 1 && data === '~') || - (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); -} - -function constructYamlNull() { - return null; -} - -function isNull(object) { - return object === null; -} - -module.exports = new Type('tag:yaml.org,2002:null', { - kind: 'scalar', - resolve: resolveYamlNull, - construct: constructYamlNull, - predicate: isNull, - represent: { - canonical: function () { return '~'; }, - lowercase: function () { return 'null'; }, - uppercase: function () { return 'NULL'; }, - camelcase: function () { return 'Null'; } - }, - defaultStyle: 'lowercase' -}); - - -/***/ }), -/* 810 */, -/* 811 */ -/***/ (function(__unusedmodule, exports, __webpack_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.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(__webpack_require__(470)); -const auth = __importStar(__webpack_require__(331)); -const util_1 = __webpack_require__(322); -const constants = __importStar(__webpack_require__(211)); -const path = __importStar(__webpack_require__(622)); -const distribution_factory_1 = __webpack_require__(24); -function run() { - return __awaiter(this, void 0, void 0, function* () { - try { - const version = core.getInput(constants.INPUT_JAVA_VERSION, { required: true }); - const distributionName = core.getInput(constants.INPUT_DISTRIBUTION, { required: true }); - const architecture = core.getInput(constants.INPUT_ARCHITECTURE); - const packageType = core.getInput(constants.INPUT_JAVA_PACKAGE); - const jdkFile = core.getInput(constants.INPUT_JDK_FILE); - const checkLatest = util_1.getBooleanInput(constants.INPUT_CHECK_LATEST, false); - const installerOptions = { - architecture, - packageType, - version, - checkLatest - }; - const distribution = distribution_factory_1.getJavaDistribution(distributionName, installerOptions, jdkFile); - if (!distribution) { - throw new Error(`No supported distribution was found for input ${distributionName}`); - } - const result = yield distribution.setupJava(); - core.info(''); - core.info('Java configuration:'); - core.info(` Distribution: ${distributionName}`); - core.info(` Version: ${result.version}`); - core.info(` Path: ${result.path}`); - core.info(''); - const matchersPath = path.join(__dirname, '..', '..', '.github'); - core.info(`##[add-matcher]${path.join(matchersPath, 'java.json')}`); - yield auth.configureAuthentication(); - } - catch (error) { - core.setFailed(error.message); - } - }); -} -run(); - - -/***/ }), -/* 812 */, -/* 813 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var util_1 = __webpack_require__(592); -var interfaces_1 = __webpack_require__(286); -var infra_1 = __webpack_require__(23); -var url_1 = __webpack_require__(835); -var _validationErrorCallback; -/** - * Default ports for a special URL scheme. - */ -var _defaultPorts = { - "ftp": 21, - "file": null, - "http": 80, - "https": 443, - "ws": 80, - "wss": 443 -}; -/** - * The C0 control percent-encode set are the C0 controls and all code points - * greater than U+007E (~). - */ -var _c0ControlPercentEncodeSet = /[\0-\x1F\x7F-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; -/** - * The fragment percent-encode set is the C0 control percent-encode set and - * U+0020 SPACE, U+0022 ("), U+003C (<), U+003E (>), and U+0060 (`). - */ -var _fragmentPercentEncodeSet = /[ "<>`]|[\0-\x1F\x7F-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; -/** - * The path percent-encode set is the fragment percent-encode set and - * U+0023 (#), U+003F (?), U+007B ({), and U+007D (}). - */ -var _pathPercentEncodeSet = /[ "<>`#?{}]|[\0-\x1F\x7F-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; -/** - * The userinfo percent-encode set is the path percent-encode set and - * U+002F (/), U+003A (:), U+003B (;), U+003D (=), U+0040 (@), U+005B ([), - * U+005C (\), U+005D (]), U+005E (^), and U+007C (|). - */ -var _userInfoPercentEncodeSet = /[ "<>`#?{}/:;=@\[\]\\\^\|]|[\0-\x1F\x7F-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; -/** - * The URL code points are ASCII alphanumeric, U+0021 (!), U+0024 ($), - * U+0026 (&), U+0027 ('), U+0028 LEFT PARENTHESIS, U+0029 RIGHT PARENTHESIS, - * U+002A (*), U+002B (+), U+002C (,), U+002D (-), U+002E (.), U+002F (/), - * U+003A (:), U+003B (;), U+003D (=), U+003F (?), U+0040 (@), U+005F (_), - * U+007E (~), and code points in the range U+00A0 to U+10FFFD, inclusive, - * excluding surrogates and noncharacters. - */ -var _urlCodePoints = /[0-9A-Za-z!\$&-\/:;=\?@_~\xA0-\uD7FF\uE000-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uD83E\uD840-\uD87E\uD880-\uD8BE\uD8C0-\uD8FE\uD900-\uD93E\uD940-\uD97E\uD980-\uD9BE\uD9C0-\uD9FE\uDA00-\uDA3E\uDA40-\uDA7E\uDA80-\uDABE\uDAC0-\uDAFE\uDB00-\uDB3E\uDB40-\uDB7E\uDB80-\uDBBE\uDBC0-\uDBFE][\uDC00-\uDFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDC00-\uDFFD]/; -/** - * A forbidden host code point is U+0000 NULL, U+0009 TAB, U+000A LF, - * U+000D CR, U+0020 SPACE, U+0023 (#), U+0025 (%), U+002F (/), U+003A (:), - * U+003F (?), U+0040 (@), U+005B ([), U+005C (\), or U+005D (]). - */ -var _forbiddenHostCodePoint = /[\0\t\f\r #%/:?@\[\\\]]/; -/** - * Sets the callback function for validation errors. - * - * @param validationErrorCallback - a callback function to be called when a - * validation error occurs - */ -function setValidationErrorCallback(validationErrorCallback) { - _validationErrorCallback = validationErrorCallback; -} -exports.setValidationErrorCallback = setValidationErrorCallback; -/** - * Generates a validation error. - * - * @param message - error message - */ -function validationError(message) { - if (_validationErrorCallback !== undefined) { - _validationErrorCallback.call(null, "Validation Error: " + message); - } -} -/** - * Creates a new URL. - */ -function newURL() { - return { - scheme: '', - username: '', - password: '', - host: null, - port: null, - path: [], - query: null, - fragment: null, - _cannotBeABaseURLFlag: false, - _blobURLEntry: null - }; -} -exports.newURL = newURL; -/** - * Determines if the scheme is a special scheme. - * - * @param scheme - a scheme - */ -function isSpecialScheme(scheme) { - return (scheme in _defaultPorts); -} -exports.isSpecialScheme = isSpecialScheme; -/** - * Determines if the URL has a special scheme. - * - * @param url - an URL - */ -function isSpecial(url) { - return isSpecialScheme(url.scheme); -} -exports.isSpecial = isSpecial; -/** - * Returns the default port for a special scheme. - * - * @param scheme - a scheme - */ -function defaultPort(scheme) { - return _defaultPorts[scheme] || null; -} -exports.defaultPort = defaultPort; -/** - * Determines if the URL has credentials. - * - * @param url - an URL - */ -function includesCredentials(url) { - return url.username !== '' || url.password !== ''; -} -exports.includesCredentials = includesCredentials; -/** - * Determines if an URL cannot have credentials. - * - * @param url - an URL - */ -function cannotHaveAUsernamePasswordPort(url) { - /** - * A URL cannot have a username/password/port if its host is null or the - * empty string, its cannot-be-a-base-URL flag is set, or its scheme is - * "file". - */ - return (url.host === null || url.host === "" || url._cannotBeABaseURLFlag || - url.scheme === "file"); -} -exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort; -/** - * Serializes an URL into a string. - * - * @param url - an URL - */ -function urlSerializer(url, excludeFragmentFlag) { - var e_1, _a; - if (excludeFragmentFlag === void 0) { excludeFragmentFlag = false; } - /** - * 1. Let output be url’s scheme and U+003A (:) concatenated. - */ - var output = url.scheme + ':'; - /** - * 2. If url’s host is non-null: - */ - if (url.host !== null) { - /** - * 2.1. Append "//" to output. - */ - output += '//'; - /** - * 2.2. If url includes credentials, then: - */ - if (includesCredentials(url)) { - /** - * 2.2.1. Append url’s username to output. - * 2.2.2. If url’s password is not the empty string, then append U+003A (:), - * followed by url’s password, to output. - * 2.2.3. Append U+0040 (@) to output. - */ - output += url.username; - if (url.password !== '') { - output += ':' + url.password; - } - output += '@'; - } - /** - * 2.3. Append url’s host, serialized, to output. - * 2.4. If url’s port is non-null, append U+003A (:) followed by url’s port, - * serialized, to output. - */ - output += hostSerializer(url.host); - if (url.port !== null) { - output += ':' + url.port; - } - } - else if (url.host === null && url.scheme === "file") { - /** - * 3. Otherwise, if url’s host is null and url’s scheme is "file", append "//" to output. - */ - output += '//'; - } - /** - * 4. If url’s cannot-be-a-base-URL flag is set, append url’s path[0] to - * output. - * 5. Otherwise, then for each string in url’s path, append U+002F (/) - * followed by the string to output. - */ - if (url._cannotBeABaseURLFlag) { - output += url.path[0]; - } - else { - try { - for (var _b = __values(url.path), _c = _b.next(); !_c.done; _c = _b.next()) { - var str = _c.value; - output += '/' + str; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - /** - * 6. If url’s query is non-null, append U+003F (?), followed by url’s - * query, to output. - * 7. If the exclude fragment flag is unset and url’s fragment is non-null, - * append U+0023 (#), followed by url’s fragment, to output. - * 8. Return output. - */ - if (url.query !== null) { - output += '?' + url.query; - } - if (!excludeFragmentFlag && url.fragment !== null) { - output += '#' + url.fragment; - } - return output; -} -exports.urlSerializer = urlSerializer; -/** - * Serializes a host into a string. - * - * @param host - a host - */ -function hostSerializer(host) { - /** - * 1. If host is an IPv4 address, return the result of running the IPv4 - * serializer on host. - * 2. Otherwise, if host is an IPv6 address, return U+005B ([), followed - * by the result of running the IPv6 serializer on host, followed by - * U+005D (]). - * 3. Otherwise, host is a domain, opaque host, or empty host, return host. - */ - if (util_1.isNumber(host)) { - return iPv4Serializer(host); - } - else if (util_1.isArray(host)) { - return '[' + iPv6Serializer(host) + ']'; - } - else { - return host; - } -} -exports.hostSerializer = hostSerializer; -/** - * Serializes an IPv4 address into a string. - * - * @param address - an IPv4 address - */ -function iPv4Serializer(address) { - /** - * 1. Let output be the empty string. - * 2. Let n be the value of address. - * 3. For each i in the range 1 to 4, inclusive: - * 3.1. Prepend n % 256, serialized, to output. - * 3.2. If i is not 4, then prepend U+002E (.) to output. - * 3.3. Set n to floor(n / 256). - * 4. Return output. - */ - var output = ""; - var n = address; - for (var i = 1; i <= 4; i++) { - output = (n % 256).toString() + output; - if (i !== 4) { - output = '.' + output; - } - n = Math.floor(n / 256); - } - return output; -} -exports.iPv4Serializer = iPv4Serializer; -/** - * Serializes an IPv6 address into a string. - * - * @param address - an IPv6 address represented as a list of eight numbers - */ -function iPv6Serializer(address) { - /** - * 1. Let output be the empty string. - * 2. Let compress be an index to the first IPv6 piece in the first longest - * sequences of address’s IPv6 pieces that are 0. - * In 0:f:0:0:f:f:0:0 it would point to the second 0. - * 3. If there is no sequence of address’s IPv6 pieces that are 0 that is - * longer than 1, then set compress to null. - */ - var output = ""; - var compress = null; - var lastIndex = -1; - var count = 0; - var lastCount = 0; - for (var i = 0; i < 8; i++) { - if (address[i] !== 0) - continue; - count = 1; - for (var j = i + 1; j < 8; j++) { - if (address[j] !== 0) - break; - count++; - continue; - } - if (count > lastCount) { - lastCount = count; - lastIndex = i; - } - } - if (lastCount > 1) - compress = lastIndex; - /** - * 4. Let ignore0 be false. - * 5. For each pieceIndex in the range 0 to 7, inclusive: - */ - var ignore0 = false; - for (var pieceIndex = 0; pieceIndex < 8; pieceIndex++) { - /** - * 5.1. If ignore0 is true and address[pieceIndex] is 0, then continue. - * 5.2. Otherwise, if ignore0 is true, set ignore0 to false. - * 5.3. If compress is pieceIndex, then: - */ - if (ignore0 && address[pieceIndex] === 0) - continue; - if (ignore0) - ignore0 = false; - if (compress === pieceIndex) { - /** - * 5.3.1. Let separator be "::" if pieceIndex is 0, and U+003A (:) otherwise. - * 5.3.2. Append separator to output. - * 5.3.3. Set ignore0 to true and continue. - */ - output += (pieceIndex === 0 ? '::' : ':'); - ignore0 = true; - continue; - } - /** - * 5.4. Append address[pieceIndex], represented as the shortest possible - * lowercase hexadecimal number, to output. - * 5.5. If pieceIndex is not 7, then append U+003A (:) to output. - */ - output += address[pieceIndex].toString(16); - if (pieceIndex !== 7) - output += ':'; - } - /** - * 6. Return output. - */ - return output; -} -exports.iPv6Serializer = iPv6Serializer; -/** - * Parses an URL string. - * - * @param input - input string - * @param baseURL - base URL - * @param encodingOverride - encoding override - */ -function urlParser(input, baseURL, encodingOverride) { - /** - * 1. Let url be the result of running the basic URL parser on input with - * base, and encoding override as provided. - * 2. If url is failure, return failure. - * 3. If url’s scheme is not "blob", return url. - * 4. Set url’s blob URL entry to the result of resolving the blob URL url, - * if that did not return failure, and null otherwise. - * 5. Return url. - */ - var url = basicURLParser(input, baseURL, encodingOverride); - if (url === null) - return null; - if (url.scheme !== "blob") - return url; - var entry = resolveABlobURL(url); - if (entry !== null) { - url._blobURLEntry = entry; - } - else { - url._blobURLEntry = null; - } - return url; -} -exports.urlParser = urlParser; -/** - * Parses an URL string. - * - * @param input - input string - * @param baseURL - base URL - * @param encodingOverride - encoding override - */ -function basicURLParser(input, baseURL, encodingOverride, url, stateOverride) { - var e_2, _a, e_3, _b; - /** - * 1. If url is not given: - * 1.1. Set url to a new URL. - * 1.2. If input contains any leading or trailing C0 control or space, - * validation error. - * 1.3. Remove any leading and trailing C0 control or space from input. - */ - if (url === undefined) { - url = newURL(); - // leading - var leadingControlOrSpace = /^[\u0000-\u001F\u0020]+/; - var trailingControlOrSpace = /[\u0000-\u001F\u0020]+$/; - if (leadingControlOrSpace.test(input) || trailingControlOrSpace.test(input)) { - validationError("Input string contains leading or trailing control characters or space."); - } - input = input.replace(leadingControlOrSpace, ''); - input = input.replace(trailingControlOrSpace, ''); - } - /** - * 2. If input contains any ASCII tab or newline, validation error. - * 3. Remove all ASCII tab or newline from input. - */ - var tabOrNewline = /[\u0009\u000A\u000D]/g; - if (tabOrNewline.test(input)) { - validationError("Input string contains tab or newline characters."); - } - input = input.replace(tabOrNewline, ''); - /** - * 4. Let state be state override if given, or scheme start state otherwise. - * 5. If base is not given, set it to null. - * 6. Let encoding be UTF-8. - * 7. If encoding override is given, set encoding to the result of getting - * an output encoding from encoding override. - */ - var state = (stateOverride === undefined ? interfaces_1.ParserState.SchemeStart : stateOverride); - if (baseURL === undefined) - baseURL = null; - var encoding = (encodingOverride === undefined || - encodingOverride === "replacement" || encodingOverride === "UTF-16BE" || - encodingOverride === "UTF-16LE" ? "UTF-8" : encodingOverride); - /** - * 8. Let buffer be the empty string. - * 9. Let the @ flag, [] flag, and passwordTokenSeenFlag be unset. - * 10. Let pointer be a pointer to first code point in input. - */ - var buffer = ""; - var atFlag = false; - var arrayFlag = false; - var passwordTokenSeenFlag = false; - var EOF = ""; - var walker = new util_1.StringWalker(input); - /** - * 11. Keep running the following state machine by switching on state. If - * after a run pointer points to the EOF code point, go to the next step. - * Otherwise, increase pointer by one and continue with the state machine. - */ - while (true) { - switch (state) { - case interfaces_1.ParserState.SchemeStart: - /** - * 1. If c is an ASCII alpha, append c, lowercased, to buffer, and set - * state to scheme state. - * 2. Otherwise, if state override is not given, set state to no scheme - * state, and decrease pointer by one. - * 3. Otherwise, validation error, return failure. - */ - if (infra_1.codePoint.ASCIIAlpha.test(walker.c())) { - buffer += walker.c().toLowerCase(); - state = interfaces_1.ParserState.Scheme; - } - else if (stateOverride === undefined) { - state = interfaces_1.ParserState.NoScheme; - walker.pointer--; - } - else { - validationError("Invalid scheme start character."); - return null; - } - break; - case interfaces_1.ParserState.Scheme: - /** - * 1. If c is an ASCII alphanumeric, U+002B (+), U+002D (-), or U+002E - * (.), append c, lowercased, to buffer. - */ - if (infra_1.codePoint.ASCIIAlphanumeric.test(walker.c()) || - walker.c() === '+' || walker.c() === '-' || walker.c() === '.') { - buffer += walker.c().toLowerCase(); - } - else if (walker.c() === ':') { - /** - * 2. Otherwise, if c is U+003A (:), then: - * 2.1. If state override is given, then: - * 2.1.1. If url’s scheme is a special scheme and buffer is not a - * special scheme, then return. - * 2.1.2. If url’s scheme is not a special scheme and buffer is a - * special scheme, then return. - * 2.1.3. If url includes credentials or has a non-null port, and - * buffer is "file", then return. - * 2.1.4. If url’s scheme is "file" and its host is an empty host or - * null, then return. - */ - if (stateOverride !== undefined) { - if (isSpecialScheme(url.scheme) && !isSpecialScheme(buffer)) - return url; - if (!isSpecialScheme(url.scheme) && isSpecialScheme(buffer)) - return url; - if ((includesCredentials(url) || url.port !== null) && buffer === "file") - return url; - if (url.scheme === "file" && (url.host === "" || url.host === null)) - return url; - } - /** - * 2.2. Set url’s scheme to buffer. - */ - url.scheme = buffer; - /** - * 2.3. If state override is given, then: - * 2.3.1. If url’s port is url’s scheme’s default port, then set - * url’s port to null. - * 2.3.2. Return. - */ - if (stateOverride !== undefined) { - if (url.port === defaultPort(url.scheme)) { - url.port = null; - } - return url; - } - /** - * 2.4. Set buffer to the empty string. - */ - buffer = ""; - if (url.scheme === "file") { - /** - * 2.5. If url’s scheme is "file", then: - * 2.5.1. If remaining does not start with "//", validation error. - * 2.5.2. Set state to file state. - */ - if (!walker.remaining().startsWith("//")) { - validationError("Invalid file URL scheme, '//' expected."); - } - state = interfaces_1.ParserState.File; - } - else if (isSpecial(url) && baseURL !== null && baseURL.scheme === url.scheme) { - /** - * 2.6. Otherwise, if url is special, base is non-null, and base’s - * scheme is equal to url’s scheme, set state to special relative - * or authority state. - */ - state = interfaces_1.ParserState.SpecialRelativeOrAuthority; - } - else if (isSpecial(url)) { - /** - * 2.7. Otherwise, if url is special, set state to special - * authority slashes state. - */ - state = interfaces_1.ParserState.SpecialAuthoritySlashes; - } - else if (walker.remaining().startsWith("/")) { - /** - * 2.8. Otherwise, if remaining starts with an U+002F (/), set state - * to path or authority state and increase pointer by one. - */ - state = interfaces_1.ParserState.PathOrAuthority; - walker.pointer++; - } - else { - /** - * 2.9. Otherwise, set url’s cannot-be-a-base-URL flag, append an - * empty string to url’s path, and set state to - * cannot-be-a-base-URL path state. - */ - url._cannotBeABaseURLFlag = true; - url.path.push(""); - state = interfaces_1.ParserState.CannotBeABaseURLPath; - } - } - else if (stateOverride === undefined) { - /** - * 3. Otherwise, if state override is not given, set buffer to the - * empty string, state to no scheme state, and start over (from the - * first code point in input). - */ - buffer = ""; - state = interfaces_1.ParserState.NoScheme; - walker.pointer = 0; - continue; - } - else { - /** - * 4. Otherwise, validation error, return failure. - */ - validationError("Invalid input string."); - return null; - } - break; - case interfaces_1.ParserState.NoScheme: - /** - * 1. If base is null, or base’s cannot-be-a-base-URL flag is set - * and c is not U+0023 (#), validation error, return failure. - * 2. Otherwise, if base’s cannot-be-a-base-URL flag is set and - * c is U+0023 (#), set url’s scheme to base’s scheme, url’s path to - * a copy of base’s path, url’s query to base’s query, url’s - * fragment to the empty string, set url’s cannot-be-a-base-URL - * flag, and set state to fragment state. - * 3. Otherwise, if base’s scheme is not "file", set state to - * relative state and decrease pointer by one. - * 4. Otherwise, set state to file state and decrease pointer by one. - */ - if (baseURL === null || (baseURL._cannotBeABaseURLFlag && walker.c() !== '#')) { - validationError("Invalid input string."); - return null; - } - else if (baseURL._cannotBeABaseURLFlag && walker.c() === '#') { - url.scheme = baseURL.scheme; - url.path = infra_1.list.clone(baseURL.path); - url.query = baseURL.query; - url.fragment = ""; - url._cannotBeABaseURLFlag = true; - state = interfaces_1.ParserState.Fragment; - } - else if (baseURL.scheme !== "file") { - state = interfaces_1.ParserState.Relative; - walker.pointer--; - } - else { - state = interfaces_1.ParserState.File; - walker.pointer--; - } + case interfaces_1.ParserState.NoScheme: + /** + * 1. If base is null, or base’s cannot-be-a-base-URL flag is set + * and c is not U+0023 (#), validation error, return failure. + * 2. Otherwise, if base’s cannot-be-a-base-URL flag is set and + * c is U+0023 (#), set url’s scheme to base’s scheme, url’s path to + * a copy of base’s path, url’s query to base’s query, url’s + * fragment to the empty string, set url’s cannot-be-a-base-URL + * flag, and set state to fragment state. + * 3. Otherwise, if base’s scheme is not "file", set state to + * relative state and decrease pointer by one. + * 4. Otherwise, set state to file state and decrease pointer by one. + */ + if (baseURL === null || (baseURL._cannotBeABaseURLFlag && walker.c() !== '#')) { + validationError("Invalid input string."); + return null; + } + else if (baseURL._cannotBeABaseURLFlag && walker.c() === '#') { + url.scheme = baseURL.scheme; + url.path = infra_1.list.clone(baseURL.path); + url.query = baseURL.query; + url.fragment = ""; + url._cannotBeABaseURLFlag = true; + state = interfaces_1.ParserState.Fragment; + } + else if (baseURL.scheme !== "file") { + state = interfaces_1.ParserState.Relative; + walker.pointer--; + } + else { + state = interfaces_1.ParserState.File; + walker.pointer--; + } break; case interfaces_1.ParserState.SpecialRelativeOrAuthority: /** @@ -36518,2153 +26363,10309 @@ function basicURLParser(input, baseURL, encodingOverride, url, stateOverride) { url.path.splice(url.path.length - 1, 1); state = interfaces_1.ParserState.Path; walker.pointer--; - } - break; + } + break; + } + break; + case interfaces_1.ParserState.RelativeSlash: + /** + * 1. If url is special and c is U+002F (/) or U+005C (\), then: + * 1.1. If c is U+005C (\), validation error. + * 1.2. Set state to special authority ignore slashes state. + * 2. Otherwise, if c is U+002F (/), then set state to authority state. + * 3. Otherwise, set url’s username to base’s username, url’s password + * to base’s password, url’s host to base’s host, url’s port to base’s + * port, state to path state, and then, decrease pointer by one. + */ + if (isSpecial(url) && (walker.c() === '/' || walker.c() === '\\')) { + if (walker.c() === '\\') { + validationError("Invalid input string."); + } + state = interfaces_1.ParserState.SpecialAuthorityIgnoreSlashes; + } + else if (walker.c() === '/') { + state = interfaces_1.ParserState.Authority; + } + else { + if (baseURL === null) { + throw new Error("Invalid parser state. Base URL is null."); + } + url.username = baseURL.username; + url.password = baseURL.password; + url.host = baseURL.host; + url.port = baseURL.port; + state = interfaces_1.ParserState.Path; + walker.pointer--; + } + break; + case interfaces_1.ParserState.SpecialAuthoritySlashes: + /** + * If c is U+002F (/) and remaining starts with U+002F (/), then set + * state to special authority ignore slashes state and increase + * pointer by one. + * Otherwise, validation error, set state to special authority ignore + * slashes state, and decrease pointer by one. + */ + if (walker.c() === '/' && walker.remaining().startsWith('/')) { + state = interfaces_1.ParserState.SpecialAuthorityIgnoreSlashes; + walker.pointer++; + } + else { + validationError("Expected '//'."); + state = interfaces_1.ParserState.SpecialAuthorityIgnoreSlashes; + walker.pointer--; + } + break; + case interfaces_1.ParserState.SpecialAuthorityIgnoreSlashes: + /** + * If c is neither U+002F (/) nor U+005C (\), then set state to + * authority state and decrease pointer by one. + * Otherwise, validation error. + */ + if (walker.c() !== '/' && walker.c() !== '\\') { + state = interfaces_1.ParserState.Authority; + walker.pointer--; + } + else { + validationError("Unexpected '/' or '\\'."); + } + break; + case interfaces_1.ParserState.Authority: + /** + * 1. If c is U+0040 (@), then: + */ + if (walker.c() === '@') { + /** + * 1.1. Validation error. + * 1.2. If the @ flag is set, prepend "%40" to buffer. + * 1.3. Set the @ flag. + * 1.4. For each codePoint in buffer: + */ + validationError("Unexpected '@'."); + if (atFlag) + buffer = '%40' + buffer; + atFlag = true; + try { + for (var buffer_1 = (e_2 = void 0, __values(buffer)), buffer_1_1 = buffer_1.next(); !buffer_1_1.done; buffer_1_1 = buffer_1.next()) { + var codePoint = buffer_1_1.value; + /** + * 1.4.1. If codePoint is U+003A (:) and passwordTokenSeenFlag is + * unset, then set passwordTokenSeenFlag and continue. + * 1.4.2. Let encodedCodePoints be the result of running UTF-8 + * percent encode codePoint using the userinfo percent-encode set. + * 1.4.3. If passwordTokenSeenFlag is set, then append + * encodedCodePoints to url’s password. + * 1.4.4. Otherwise, append encodedCodePoints to url’s username. + */ + if (codePoint === ':' && !passwordTokenSeenFlag) { + passwordTokenSeenFlag = true; + continue; + } + var encodedCodePoints = utf8PercentEncode(codePoint, _userInfoPercentEncodeSet); + if (passwordTokenSeenFlag) { + url.password += encodedCodePoints; + } + else { + url.username += encodedCodePoints; + } + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (buffer_1_1 && !buffer_1_1.done && (_a = buffer_1.return)) _a.call(buffer_1); + } + finally { if (e_2) throw e_2.error; } + } + /** + * 1.5. Set buffer to the empty string. + */ + buffer = ""; + } + else if (walker.c() === EOF || walker.c() === '/' || walker.c() === '?' || walker.c() === '#' || + (isSpecial(url) && walker.c() === '\\')) { + /** + * 2. Otherwise, if one of the following is true + * - c is the EOF code point, U+002F (/), U+003F (?), or U+0023 (#) + * - url is special and c is U+005C (\) + * then: + * 2.1. If @ flag is set and buffer is the empty string, validation + * error, return failure. + * 2.2. Decrease pointer by the number of code points in buffer plus + * one, set buffer to the empty string, and set state to host state. + */ + if (atFlag && buffer === "") { + validationError("Invalid input string."); + return null; + } + walker.pointer -= (buffer.length + 1); + buffer = ""; + state = interfaces_1.ParserState.Host; + } + else { + /** + * 3. Otherwise, append c to buffer. + */ + buffer += walker.c(); + } + break; + case interfaces_1.ParserState.Host: + case interfaces_1.ParserState.Hostname: + if (stateOverride !== undefined && url.scheme === "file") { + /** + * 1. If state override is given and url’s scheme is "file", then + * decrease pointer by one and set state to file host state. + */ + walker.pointer--; + state = interfaces_1.ParserState.FileHost; + } + else if (walker.c() === ':' && !arrayFlag) { + /** + * 2. Otherwise, if c is U+003A (:) and the [] flag is unset, then: + * 2.1. If buffer is the empty string, validation error, return + * failure. + * 2.2. Let host be the result of host parsing buffer with url is + * not special. + * 2.3. If host is failure, then return failure. + * 2.4. Set url’s host to host, buffer to the empty string, and + * state to port state. + * 2.5. If state override is given and state override is hostname + * state, then return. + */ + if (buffer === "") { + validationError("Invalid input string."); + return null; + } + var host = hostParser(buffer, !isSpecial(url)); + if (host === null) + return null; + url.host = host; + buffer = ""; + state = interfaces_1.ParserState.Port; + if (stateOverride === interfaces_1.ParserState.Hostname) + return url; + } + else if (walker.c() === EOF || walker.c() === '/' || walker.c() === '?' || walker.c() === '#' || + (isSpecial(url) && walker.c() === '\\')) { + /** + * 3. Otherwise, if one of the following is true + * - c is the EOF code point, U+002F (/), U+003F (?), or U+0023 (#) + * - url is special and c is U+005C (\) + * then decrease pointer by one, and then: + * 3.1. If url is special and buffer is the empty string, validation + * error, return failure. + * 3.2. Otherwise, if state override is given, buffer is the empty + * string, and either url includes credentials or url’s port is + * non-null, validation error, return. + * 3.3. Let host be the result of host parsing buffer with url is + * not special. + * 3.4. If host is failure, then return failure. + * 3.5. Set url’s host to host, buffer to the empty string, and + * state to path start state. + * 3.6. If state override is given, then return. + */ + walker.pointer--; + if (isSpecial(url) && buffer === "") { + validationError("Invalid input string."); + return null; + } + else if (stateOverride !== undefined && buffer === "" && + (includesCredentials(url) || url.port !== null)) { + validationError("Invalid input string."); + return url; + } + var host = hostParser(buffer, !isSpecial(url)); + if (host === null) + return null; + url.host = host; + buffer = ""; + state = interfaces_1.ParserState.PathStart; + if (stateOverride !== undefined) + return url; + } + else { + /** + * 4. Otherwise: + * 4.1. If c is U+005B ([), then set the [] flag. + * 4.2. If c is U+005D (]), then unset the [] flag. + * 4.3. Append c to buffer. + */ + if (walker.c() === '[') + arrayFlag = true; + if (walker.c() === ']') + arrayFlag = false; + buffer += walker.c(); + } + break; + case interfaces_1.ParserState.Port: + if (infra_1.codePoint.ASCIIDigit.test(walker.c())) { + /** + * 1. If c is an ASCII digit, append c to buffer. + */ + buffer += walker.c(); + } + else if (walker.c() === EOF || walker.c() === '/' || walker.c() === '?' || walker.c() === '#' || + (isSpecial(url) && walker.c() === '\\') || stateOverride) { + /** + * 2. Otherwise, if one of the following is true + * - c is the EOF code point, U+002F (/), U+003F (?), or U+0023 (#) + * - url is special and c is U+005C (\) + * - state override is given + * then: + */ + if (buffer !== "") { + /** + * 2.1. If buffer is not the empty string, then: + * 2.1.1. Let port be the mathematical integer value that is + * represented by buffer in radix-10 using ASCII digits for digits + * with values 0 through 9. + * 2.1.2. If port is greater than 2**16 − 1, validation error, + * return failure. + * 2.1.3. Set url’s port to null, if port is url’s scheme’s default + * port, and to port otherwise. + * 2.1.4. Set buffer to the empty string. + */ + if (buffer !== "") { + var port = parseInt(buffer, 10); + if (port > Math.pow(2, 16) - 1) { + validationError("Invalid port number."); + return null; + } + url.port = (port === defaultPort(url.scheme) ? null : port); + buffer = ""; + } + } + /** + * 2.2. If state override is given, then return. + * 2.3. Set state to path start state, and decrease pointer by one. + */ + if (stateOverride !== undefined) { + return url; + } + state = interfaces_1.ParserState.PathStart; + walker.pointer--; + } + else { + /** + * 3. Otherwise, validation error, return failure. + */ + validationError("Invalid input string."); + return null; + } + break; + case interfaces_1.ParserState.File: + /** + * 1. Set url’s scheme to "file". + */ + url.scheme = "file"; + if (walker.c() === '/' || walker.c() === '\\') { + /** + * 2. If c is U+002F (/) or U+005C (\), then: + * 2.1. If c is U+005C (\), validation error. + * 2.2. Set state to file slash state. + */ + if (walker.c() === '\\') { + validationError("Invalid input string."); + } + state = interfaces_1.ParserState.FileSlash; + } + else if (baseURL !== null && baseURL.scheme === "file") { + /** + * 3. Otherwise, if base is non-null and base’s scheme is "file", + * switch on c: + */ + switch (walker.c()) { + case EOF: + /** + * Set url’s host to base’s host, url’s path to a copy of base’s + * path, and url’s query to base’s query. + */ + url.host = baseURL.host; + url.path = infra_1.list.clone(baseURL.path); + url.query = baseURL.query; + break; + case '?': + /** + * Set url’s host to base’s host, url’s path to a copy of base’s + * path, url’s query to the empty string, and state to query + * state. + */ + url.host = baseURL.host; + url.path = infra_1.list.clone(baseURL.path); + url.query = ""; + state = interfaces_1.ParserState.Query; + break; + case '#': + /** + * Set url’s host to base’s host, url’s path to a copy of base’s + * path, url’s query to base’s query, url’s fragment to the + * empty string, and state to fragment state. + */ + url.host = baseURL.host; + url.path = infra_1.list.clone(baseURL.path); + url.query = baseURL.query; + url.fragment = ""; + state = interfaces_1.ParserState.Fragment; + break; + default: + /** + * 1. If the substring from pointer in input does not start + * with a Windows drive letter, then set url’s host to base’s + * host, url’s path to a copy of base’s path, and then shorten + * url’s path. + * _Note:_ is a (platform-independent) Windows drive letter + * quirk. + * 2. Otherwise, validation error. + * 3. Set state to path state, and decrease pointer by one. + */ + if (!startsWithAWindowsDriveLetter(walker.substring())) { + url.host = baseURL.host; + url.path = infra_1.list.clone(baseURL.path); + shorten(url); + } + else { + validationError("Unexpected windows drive letter in input string."); + } + state = interfaces_1.ParserState.Path; + walker.pointer--; + break; + } + } + else { + /** + * 4. Otherwise, set state to path state, and decrease pointer by + * one. + */ + state = interfaces_1.ParserState.Path; + walker.pointer--; } break; - case interfaces_1.ParserState.RelativeSlash: - /** - * 1. If url is special and c is U+002F (/) or U+005C (\), then: - * 1.1. If c is U+005C (\), validation error. - * 1.2. Set state to special authority ignore slashes state. - * 2. Otherwise, if c is U+002F (/), then set state to authority state. - * 3. Otherwise, set url’s username to base’s username, url’s password - * to base’s password, url’s host to base’s host, url’s port to base’s - * port, state to path state, and then, decrease pointer by one. - */ - if (isSpecial(url) && (walker.c() === '/' || walker.c() === '\\')) { + case interfaces_1.ParserState.FileSlash: + if (walker.c() === '/' || walker.c() === '\\') { + /** + * 1. If c is U+002F (/) or U+005C (\), then: + * 1.1. If c is U+005C (\), validation error. + * 1.2. Set state to file host state. + */ if (walker.c() === '\\') { validationError("Invalid input string."); } - state = interfaces_1.ParserState.SpecialAuthorityIgnoreSlashes; - } - else if (walker.c() === '/') { - state = interfaces_1.ParserState.Authority; + state = interfaces_1.ParserState.FileHost; } else { - if (baseURL === null) { - throw new Error("Invalid parser state. Base URL is null."); + /** + * 2. Otherwise: + * 2.1. If base is non-null, base’s scheme is "file", and the + * substring from pointer in input does not start with a Windows + * drive letter, then: + * 2.1.1. If base’s path[0] is a normalized Windows drive letter, + * then append base’s path[0] to url’s path. + * _Note:_ is a (platform-independent) Windows drive letter + * quirk. Both url’s and base’s host are null under these conditions + * and therefore not copied. + * 2.1.2. Otherwise, set url’s host to base’s host. + * 2.2. Set state to path state, and decrease pointer by one. + */ + if (baseURL !== null && baseURL.scheme === "file" && + !startsWithAWindowsDriveLetter(walker.substring())) { + if (isNormalizedWindowsDriveLetter(baseURL.path[0])) { + url.path.push(baseURL.path[0]); + } + else { + url.host = baseURL.host; + } } - url.username = baseURL.username; - url.password = baseURL.password; - url.host = baseURL.host; - url.port = baseURL.port; state = interfaces_1.ParserState.Path; walker.pointer--; } break; - case interfaces_1.ParserState.SpecialAuthoritySlashes: - /** - * If c is U+002F (/) and remaining starts with U+002F (/), then set - * state to special authority ignore slashes state and increase - * pointer by one. - * Otherwise, validation error, set state to special authority ignore - * slashes state, and decrease pointer by one. - */ - if (walker.c() === '/' && walker.remaining().startsWith('/')) { - state = interfaces_1.ParserState.SpecialAuthorityIgnoreSlashes; - walker.pointer++; + case interfaces_1.ParserState.FileHost: + if (walker.c() === EOF || walker.c() === '/' || walker.c() === '\\' || + walker.c() === '?' || walker.c() === '#') { + /** + * 1. If c is the EOF code point, U+002F (/), U+005C (\), U+003F (?), + * or U+0023 (#), then decrease pointer by one and then: + */ + walker.pointer--; + if (stateOverride === undefined && isWindowsDriveLetter(buffer)) { + /** + * 1.1. If state override is not given and buffer is a Windows drive + * letter, validation error, set state to path state. + * _Note:_ is a (platform-independent) Windows drive letter + * quirk. buffer is not reset here and instead used in the path state. + */ + validationError("Unexpected windows drive letter in input string."); + state = interfaces_1.ParserState.Path; + } + else if (buffer === "") { + /** + * 1.2. Otherwise, if buffer is the empty string, then: + * 1.2.1. Set url’s host to the empty string. + * 1.2.2. If state override is given, then return. + * 1.2.3. Set state to path start state. + */ + url.host = ""; + if (stateOverride !== undefined) + return url; + state = interfaces_1.ParserState.PathStart; + } + else { + /** + * 1.3. Otherwise, run these steps: + * 1.3.1. Let host be the result of host parsing buffer with url + * is not special. + * 1.3.2. If host is failure, then return failure. + * 1.3.3. If host is "localhost", then set host to the empty + * string. + * 1.3.4. Set url’s host to host. + * 1.3.5. If state override is given, then return. + * 1.3.6. Set buffer to the empty string and state to path start + * state. + */ + var host = hostParser(buffer, !isSpecial(url)); + if (host === null) + return null; + if (host === "localhost") + host = ""; + url.host = host; + if (stateOverride !== undefined) + return url; + buffer = ""; + state = interfaces_1.ParserState.PathStart; + } } else { - validationError("Expected '//'."); - state = interfaces_1.ParserState.SpecialAuthorityIgnoreSlashes; - walker.pointer--; + /** + * 2. Otherwise, append c to buffer. + */ + buffer += walker.c(); } break; - case interfaces_1.ParserState.SpecialAuthorityIgnoreSlashes: - /** - * If c is neither U+002F (/) nor U+005C (\), then set state to - * authority state and decrease pointer by one. - * Otherwise, validation error. - */ - if (walker.c() !== '/' && walker.c() !== '\\') { - state = interfaces_1.ParserState.Authority; - walker.pointer--; + case interfaces_1.ParserState.PathStart: + if (isSpecial(url)) { + /** + * 1. If url is special, then: + * 1.1. If c is U+005C (\), validation error. + * 1.2. Set state to path state. + * 1.3. If c is neither U+002F (/) nor U+005C (\), then decrease + * pointer by one. + */ + if (walker.c() === '\\') { + validationError("Invalid input string."); + } + state = interfaces_1.ParserState.Path; + if (walker.c() !== '/' && walker.c() !== '\\') + walker.pointer--; } - else { - validationError("Unexpected '/' or '\\'."); + else if (stateOverride === undefined && walker.c() === '?') { + /** + * 2. Otherwise, if state override is not given and c is U+003F (?), + * set url’s query to the empty string and state to query state. + */ + url.query = ""; + state = interfaces_1.ParserState.Query; + } + else if (stateOverride === undefined && walker.c() === '#') { + /** + * 3. Otherwise, if state override is not given and c is U+0023 (#), + * set url’s fragment to the empty string and state to fragment + * state. + */ + url.fragment = ""; + state = interfaces_1.ParserState.Fragment; + } + else if (walker.c() !== EOF) { + /** + * 4. Otherwise, if c is not the EOF code point: + * 4.1. Set state to path state. + * 4.2. If c is not U+002F (/), then decrease pointer by one. + */ + state = interfaces_1.ParserState.Path; + if (walker.c() !== '/') + walker.pointer--; } break; - case interfaces_1.ParserState.Authority: - /** - * 1. If c is U+0040 (@), then: - */ - if (walker.c() === '@') { + case interfaces_1.ParserState.Path: + if ((walker.c() === EOF || walker.c() === '/') || + (isSpecial(url) && walker.c() === '\\') || + (stateOverride === undefined && (walker.c() === '?' || walker.c() === '#'))) { /** - * 1.1. Validation error. - * 1.2. If the @ flag is set, prepend "%40" to buffer. - * 1.3. Set the @ flag. - * 1.4. For each codePoint in buffer: + * 1. If one of the following is true + * - c is the EOF code point or U+002F (/) + * - url is special and c is U+005C (\) + * - state override is not given and c is U+003F (?) or U+0023 (#) + * then: */ - validationError("Unexpected '@'."); - if (atFlag) - buffer = '%40' + buffer; - atFlag = true; - try { - for (var buffer_1 = (e_2 = void 0, __values(buffer)), buffer_1_1 = buffer_1.next(); !buffer_1_1.done; buffer_1_1 = buffer_1.next()) { - var codePoint = buffer_1_1.value; + if (isSpecial(url) && walker.c() === '\\') { + /** + * 1.1 If url is special and c is U+005C (\), validation error. + */ + validationError("Invalid input string."); + } + if (isDoubleDotPathSegment(buffer)) { + /** + * 1.2. If buffer is a double-dot path segment, shorten url’s path, + * and then if neither c is U+002F (/), nor url is special and c is + * U+005C (\), append the empty string to url’s path. + */ + shorten(url); + if (walker.c() !== '/' && !(isSpecial(url) && walker.c() === '\\')) { + url.path.push(""); + } + } + else if (isSingleDotPathSegment(buffer) && walker.c() !== '/' && + !(isSpecial(url) && walker.c() === '\\')) { + /** + * 1.3. Otherwise, if buffer is a single-dot path segment and if + * neither c is U+002F (/), nor url is special and c is U+005C (\), + * append the empty string to url’s path. + */ + url.path.push(""); + } + else if (!isSingleDotPathSegment(buffer)) { + /** + * 1.4. Otherwise, if buffer is not a single-dot path segment, then: + */ + if (url.scheme === "file" && url.path.length === 0 && + isWindowsDriveLetter(buffer)) { /** - * 1.4.1. If codePoint is U+003A (:) and passwordTokenSeenFlag is - * unset, then set passwordTokenSeenFlag and continue. - * 1.4.2. Let encodedCodePoints be the result of running UTF-8 - * percent encode codePoint using the userinfo percent-encode set. - * 1.4.3. If passwordTokenSeenFlag is set, then append - * encodedCodePoints to url’s password. - * 1.4.4. Otherwise, append encodedCodePoints to url’s username. + * 1.4.1. If url’s scheme is "file", url’s path is empty, and + * buffer is a Windows drive letter, then: + * 1.4.1.1. If url’s host is neither the empty string nor null, + * validation error, set url’s host to the empty string. + * 1.4.1.2. Replace the second code point in buffer with U+003A (:). + * _Note:_ is a (platform-independent) Windows drive letter quirk. */ - if (codePoint === ':' && !passwordTokenSeenFlag) { - passwordTokenSeenFlag = true; - continue; - } - var encodedCodePoints = utf8PercentEncode(codePoint, _userInfoPercentEncodeSet); - if (passwordTokenSeenFlag) { - url.password += encodedCodePoints; - } - else { - url.username += encodedCodePoints; + if (url.host !== null && url.host !== "") { + validationError("Invalid input string."); + url.host = ""; } + var bufferCodePoints = Array.from(buffer); + buffer = bufferCodePoints.slice(0, 1) + ':' + bufferCodePoints.slice(2); } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (buffer_1_1 && !buffer_1_1.done && (_a = buffer_1.return)) _a.call(buffer_1); - } - finally { if (e_2) throw e_2.error; } + /** + * 1.4.2. Append buffer to url’s path. + */ + url.path.push(buffer); } /** * 1.5. Set buffer to the empty string. */ buffer = ""; - } - else if (walker.c() === EOF || walker.c() === '/' || walker.c() === '?' || walker.c() === '#' || - (isSpecial(url) && walker.c() === '\\')) { /** - * 2. Otherwise, if one of the following is true - * - c is the EOF code point, U+002F (/), U+003F (?), or U+0023 (#) - * - url is special and c is U+005C (\) - * then: - * 2.1. If @ flag is set and buffer is the empty string, validation - * error, return failure. - * 2.2. Decrease pointer by the number of code points in buffer plus - * one, set buffer to the empty string, and set state to host state. + * 1.6. If url’s scheme is "file" and c is the EOF code point, + * U+003F (?), or U+0023 (#), then while url’s path’s size is + * greater than 1 and url’s path[0] is the empty string, validation + * error, remove the first item from url’s path. */ - if (atFlag && buffer === "") { - validationError("Invalid input string."); - return null; + if (url.scheme === "file" && (walker.c() === EOF || walker.c() === '?' || walker.c() === '#')) { + while (url.path.length > 1 && url.path[0] === "") { + validationError("Invalid input string."); + url.path.splice(0, 1); + } + } + /** + * 1.7. If c is U+003F (?), then set url’s query to the empty string + * and state to query state. + * 1.8. If c is U+0023 (#), then set url’s fragment to the empty + * string and state to fragment state. + */ + if (walker.c() === '?') { + url.query = ""; + state = interfaces_1.ParserState.Query; + } + if (walker.c() === '#') { + url.fragment = ""; + state = interfaces_1.ParserState.Fragment; } - walker.pointer -= (buffer.length + 1); - buffer = ""; - state = interfaces_1.ParserState.Host; } else { /** - * 3. Otherwise, append c to buffer. + * 2. Otherwise, run these steps: + * 2.1. If c is not a URL code point and not U+0025 (%), validation + * error. + * 2.2. If c is U+0025 (%) and remaining does not start with two + * ASCII hex digits, validation error. + * 2.3. UTF-8 percent encode c using the path percent-encode set, + * and append the result to buffer. */ - buffer += walker.c(); + if (!_urlCodePoints.test(walker.c()) && walker.c() !== '%') { + validationError("Character is not a URL code point or a percent encoded character."); + } + if (walker.c() === '%' && !/^[0-9a-fA-F][0-9a-fA-F]/.test(walker.remaining())) { + validationError("Percent encoded character must be followed by two hex digits."); + } + buffer += utf8PercentEncode(walker.c(), _pathPercentEncodeSet); } break; - case interfaces_1.ParserState.Host: - case interfaces_1.ParserState.Hostname: - if (stateOverride !== undefined && url.scheme === "file") { + case interfaces_1.ParserState.CannotBeABaseURLPath: + /** + * 1. If c is U+003F (?), then set url’s query to the empty string and + * state to query state. + * 2. Otherwise, if c is U+0023 (#), then set url’s fragment to the + * empty string and state to fragment state. + * 3. Otherwise: + * 3.1. If c is not the EOF code point, not a URL code point, and not + * U+0025 (%), validation error. + * 3.2. If c is U+0025 (%) and remaining does not start with two ASCII + * hex digits, validation error. + * 3.3. If c is not the EOF code point, UTF-8 percent encode c using + * the C0 control percent-encode set, and append the result to url’s + * path[0]. + */ + if (walker.c() === '?') { + url.query = ""; + state = interfaces_1.ParserState.Query; + } + else if (walker.c() === '#') { + url.fragment = ""; + state = interfaces_1.ParserState.Fragment; + } + else { + if (walker.c() !== EOF && !_urlCodePoints.test(walker.c()) && walker.c() !== '%') { + validationError("Character is not a URL code point or a percent encoded character."); + } + if (walker.c() === '%' && !/^[0-9a-fA-F][0-9a-fA-F]/.test(walker.remaining())) { + validationError("Percent encoded character must be followed by two hex digits."); + } + if (walker.c() !== EOF) { + url.path[0] += utf8PercentEncode(walker.c(), _c0ControlPercentEncodeSet); + } + } + break; + case interfaces_1.ParserState.Query: + /** + * 1. If encoding is not UTF-8 and one of the following is true + * - url is not special + * - url’s scheme is "ws" or "wss" + * then set encoding to UTF-8. + */ + if (encoding !== "UTF-8" && (!isSpecial(url) || + url.scheme === "ws" || url.scheme === "wss")) { + encoding = "UTF-8"; + } + if (stateOverride === undefined && walker.c() === '#') { /** - * 1. If state override is given and url’s scheme is "file", then - * decrease pointer by one and set state to file host state. + * 2. If state override is not given and c is U+0023 (#), then set + * url’s fragment to the empty string and state to fragment state. */ - walker.pointer--; - state = interfaces_1.ParserState.FileHost; + url.fragment = ""; + state = interfaces_1.ParserState.Fragment; } - else if (walker.c() === ':' && !arrayFlag) { + else if (walker.c() !== EOF) { /** - * 2. Otherwise, if c is U+003A (:) and the [] flag is unset, then: - * 2.1. If buffer is the empty string, validation error, return - * failure. - * 2.2. Let host be the result of host parsing buffer with url is - * not special. - * 2.3. If host is failure, then return failure. - * 2.4. Set url’s host to host, buffer to the empty string, and - * state to port state. - * 2.5. If state override is given and state override is hostname - * state, then return. + * 3. Otherwise, if c is not the EOF code point: + * 3.1. If c is not a URL code point and not U+0025 (%), validation + * error. */ - if (buffer === "") { - validationError("Invalid input string."); - return null; + if (!_urlCodePoints.test(walker.c()) && walker.c() !== '%') { + validationError("Character is not a URL code point or a percent encoded character."); } - var host = hostParser(buffer, !isSpecial(url)); - if (host === null) - return null; - url.host = host; - buffer = ""; - state = interfaces_1.ParserState.Port; - if (stateOverride === interfaces_1.ParserState.Hostname) - return url; - } - else if (walker.c() === EOF || walker.c() === '/' || walker.c() === '?' || walker.c() === '#' || - (isSpecial(url) && walker.c() === '\\')) { /** - * 3. Otherwise, if one of the following is true - * - c is the EOF code point, U+002F (/), U+003F (?), or U+0023 (#) - * - url is special and c is U+005C (\) - * then decrease pointer by one, and then: - * 3.1. If url is special and buffer is the empty string, validation - * error, return failure. - * 3.2. Otherwise, if state override is given, buffer is the empty - * string, and either url includes credentials or url’s port is - * non-null, validation error, return. - * 3.3. Let host be the result of host parsing buffer with url is - * not special. - * 3.4. If host is failure, then return failure. - * 3.5. Set url’s host to host, buffer to the empty string, and - * state to path start state. - * 3.6. If state override is given, then return. + * 3.2. If c is U+0025 (%) and remaining does not start with two + * ASCII hex digits, validation error. */ - walker.pointer--; - if (isSpecial(url) && buffer === "") { - validationError("Invalid input string."); - return null; + if (walker.c() === '%' && !/^[0-9a-fA-F][0-9a-fA-F]/.test(walker.remaining())) { + validationError("Percent encoded character must be followed by two hex digits."); + } + /** + * 3.3. Let bytes be the result of encoding c using encoding. + */ + if (encoding.toUpperCase() !== "UTF-8") { + throw new Error("Only UTF-8 encoding is supported."); + } + var bytes = util_1.utf8Encode(walker.c()); + /** + * 3.4. If bytes starts with `&#` and ends with 0x3B (;), then: + */ + if (bytes.length >= 3 && bytes[0] === 38 && bytes[1] === 35 && + bytes[bytes.length - 1] === 59) { + /** + * 3.4.1. Replace `&#` at the start of bytes with `%26%23`. + * 3.4.2. Replace 0x3B (;) at the end of bytes with `%3B`. + * 3.4.4. Append bytes, isomorphic decoded, to url’s query. + * _Note:_ can happen when encoding code points using a + * non-UTF-8 encoding. + */ + bytes = bytes.subarray(2, bytes.length - 1); + url.query += "%26%23" + infra_1.byteSequence.isomorphicDecode(bytes) + "%3B"; + } + else { + try { + /** + * 3.5. Otherwise, for each byte in bytes: + * 3.5.1. If one of the following is true + * - byte is less than 0x21 (!) + * - byte is greater than 0x7E (~) + * - byte is 0x22 ("), 0x23 (#), 0x3C (<), or 0x3E (>) + * - byte is 0x27 (') and url is special + * then append byte, percent encoded, to url’s query. + * 3.5.2. Otherwise, append a code point whose value is byte to + * url’s query. + */ + for (var bytes_1 = (e_3 = void 0, __values(bytes)), bytes_1_1 = bytes_1.next(); !bytes_1_1.done; bytes_1_1 = bytes_1.next()) { + var byte = bytes_1_1.value; + if (byte < 0x21 || byte > 0x7E || byte === 0x22 || + byte === 0x23 || byte === 0x3C || byte === 0x3E || + (byte === 0x27 && isSpecial(url))) { + url.query += percentEncode(byte); + } + else { + url.query += String.fromCharCode(byte); + } + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (bytes_1_1 && !bytes_1_1.done && (_b = bytes_1.return)) _b.call(bytes_1); + } + finally { if (e_3) throw e_3.error; } + } + } + } + break; + case interfaces_1.ParserState.Fragment: + /** + * Switching on c: + * - The EOF code point + * Do nothing. + * - U+0000 NULL + * Validation error. + * - Otherwise + * 1. If c is not a URL code point and not U+0025 (%), validation + * error. + * 2. If c is U+0025 (%) and remaining does not start with two ASCII + * hex digits, validation error. + * 3. UTF-8 percent encode c using the fragment percent-encode set and + * append the result to url’s fragment. + */ + if (walker.c() === EOF) { + // + } + else if (walker.c() === "\u0000") { + validationError("NULL character in input string."); + } + else { + if (!_urlCodePoints.test(walker.c()) && walker.c() !== '%') { + validationError("Unexpected character in fragment string."); } - else if (stateOverride !== undefined && buffer === "" && - (includesCredentials(url) || url.port !== null)) { - validationError("Invalid input string."); - return url; + if (walker.c() === '%' && !/^[A-Za-z0-9][A-Za-z0-9]/.test(walker.remaining())) { + validationError("Unexpected character in fragment string."); + } + url.fragment += utf8PercentEncode(walker.c(), _fragmentPercentEncodeSet); + } + break; + } + if (walker.eof) + break; + else + walker.pointer++; + } + /** + * 12. Return url. + */ + return url; +} +exports.basicURLParser = basicURLParser; +/** + * Sets a URL's username. + * + * @param url - a URL + * @param username - username string + */ +function setTheUsername(url, username) { + var e_4, _a; + /** + * 1. Set url’s username to the empty string. + * 2. For each code point in username, UTF-8 percent encode it using the + * userinfo percent-encode set, and append the result to url’s username. + */ + var result = ""; + try { + for (var username_1 = __values(username), username_1_1 = username_1.next(); !username_1_1.done; username_1_1 = username_1.next()) { + var codePoint = username_1_1.value; + result += utf8PercentEncode(codePoint, _userInfoPercentEncodeSet); + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (username_1_1 && !username_1_1.done && (_a = username_1.return)) _a.call(username_1); + } + finally { if (e_4) throw e_4.error; } + } + url.username = result; +} +exports.setTheUsername = setTheUsername; +/** + * Sets a URL's password. + * + * @param url - a URL + * @param username - password string + */ +function setThePassword(url, password) { + var e_5, _a; + /** + * 1. Set url’s password to the empty string. + * 2. For each code point in password, UTF-8 percent encode it using the + * userinfo percent-encode set, and append the result to url’s password. + */ + var result = ""; + try { + for (var password_1 = __values(password), password_1_1 = password_1.next(); !password_1_1.done; password_1_1 = password_1.next()) { + var codePoint = password_1_1.value; + result += utf8PercentEncode(codePoint, _userInfoPercentEncodeSet); + } + } + catch (e_5_1) { e_5 = { error: e_5_1 }; } + finally { + try { + if (password_1_1 && !password_1_1.done && (_a = password_1.return)) _a.call(password_1); + } + finally { if (e_5) throw e_5.error; } + } + url.password = result; +} +exports.setThePassword = setThePassword; +/** + * Determines if the string represents a single dot path. + * + * @param str - a string + */ +function isSingleDotPathSegment(str) { + return str === '.' || str.toLowerCase() === "%2e"; +} +exports.isSingleDotPathSegment = isSingleDotPathSegment; +/** + * Determines if the string represents a double dot path. + * + * @param str - a string + */ +function isDoubleDotPathSegment(str) { + var lowerStr = str.toLowerCase(); + return lowerStr === ".." || lowerStr === ".%2e" || + lowerStr === "%2e." || lowerStr === "%2e%2e"; +} +exports.isDoubleDotPathSegment = isDoubleDotPathSegment; +/** + * Shorten's URL's path. + * + * @param url - an URL + */ +function shorten(url) { + /** + * 1. Let path be url’s path. + * 2. If path is empty, then return. + * 3. If url’s scheme is "file", path’s size is 1, and path[0] is a + * normalized Windows drive letter, then return. + * 4. Remove path’s last item. + */ + var path = url.path; + if (path.length === 0) + return; + if (url.scheme === "file" && path.length === 1 && + isNormalizedWindowsDriveLetter(path[0])) + return; + url.path.splice(url.path.length - 1, 1); +} +exports.shorten = shorten; +/** + * Determines if a string is a normalized Windows drive letter. + * + * @param str - a string + */ +function isNormalizedWindowsDriveLetter(str) { + /** + * A normalized Windows drive letter is a Windows drive letter of which the + * second code point is U+003A (:). + */ + return str.length >= 2 && infra_1.codePoint.ASCIIAlpha.test(str[0]) && + str[1] === ':'; +} +exports.isNormalizedWindowsDriveLetter = isNormalizedWindowsDriveLetter; +/** + * Determines if a string is a Windows drive letter. + * + * @param str - a string + */ +function isWindowsDriveLetter(str) { + /** + * A Windows drive letter is two code points, of which the first is an ASCII + * alpha and the second is either U+003A (:) or U+007C (|). + */ + return str.length >= 2 && infra_1.codePoint.ASCIIAlpha.test(str[0]) && + (str[1] === ':' || str[1] === '|'); +} +exports.isWindowsDriveLetter = isWindowsDriveLetter; +/** + * Determines if a string starts with a Windows drive letter. + * + * @param str - a string + */ +function startsWithAWindowsDriveLetter(str) { + /** + * A string starts with a Windows drive letter if all of the following are + * true: + * - its length is greater than or equal to 2 + * - its first two code points are a Windows drive letter + * - its length is 2 or its third code point is U+002F (/), U+005C (\), + * U+003F (?), or U+0023 (#). + */ + return str.length >= 2 && isWindowsDriveLetter(str) && + (str.length === 2 || (str[2] === '/' || str[2] === '\\' || + str[2] === '?' || str[2] === '#')); +} +exports.startsWithAWindowsDriveLetter = startsWithAWindowsDriveLetter; +/** + * Parses a host string. + * + * @param input - input string + * @param isNotSpecial - `true` if the source URL is not special; otherwise + * `false`. + */ +function hostParser(input, isNotSpecial) { + if (isNotSpecial === void 0) { isNotSpecial = false; } + /** + * 1. If isNotSpecial is not given, then set isNotSpecial to false. + * 2. If input starts with U+005B ([), then: + * 2.1. If input does not end with U+005D (]), validation error, return + * failure. + * 2.2. Return the result of IPv6 parsing input with its leading U+005B ([) + * and trailing U+005D (]) removed. + */ + if (input.startsWith('[')) { + if (!input.endsWith(']')) { + validationError("Expected ']' after '['."); + return null; + } + return iPv6Parser(input.substring(1, input.length - 1)); + } + /** + * 3. If isNotSpecial is true, then return the result of opaque-host parsing + * input. + */ + if (isNotSpecial) { + return opaqueHostParser(input); + } + /** + * 4. Let domain be the result of running UTF-8 decode without BOM on the + * string percent decoding of input. + * _Note:_ Alternatively UTF-8 decode without BOM or fail can be used, + * coupled with an early return for failure, as domain to ASCII fails + * on U+FFFD REPLACEMENT CHARACTER. + */ + var domain = util_1.utf8Decode(stringPercentDecode(input)); + /** + * 5. Let asciiDomain be the result of running domain to ASCII on domain. + * 6. If asciiDomain is failure, validation error, return failure. + * 7. If asciiDomain contains a forbidden host code point, validation error, + * return failure. + */ + var asciiDomain = domainToASCII(domain); + if (asciiDomain === null) { + validationError("Invalid domain."); + return null; + } + if (_forbiddenHostCodePoint.test(asciiDomain)) { + validationError("Invalid domain."); + return null; + } + /** + * 8. Let ipv4Host be the result of IPv4 parsing asciiDomain. + * 9. If ipv4Host is an IPv4 address or failure, return ipv4Host. + * 10. Return asciiDomain. + */ + var ipv4Host = iPv4Parser(asciiDomain); + if (ipv4Host === null || util_1.isNumber(ipv4Host)) + return ipv4Host; + return asciiDomain; +} +exports.hostParser = hostParser; +/** + * Parses a string containing an IP v4 address. + * + * @param input - input string + * @param isNotSpecial - `true` if the source URL is not special; otherwise + * `false`. + */ +function iPv4NumberParser(input, validationErrorFlag) { + if (validationErrorFlag === void 0) { validationErrorFlag = { value: false }; } + /** + * 1. Let R be 10. + */ + var R = 10; + if (input.startsWith("0x") || input.startsWith("0X")) { + /** + * 2. If input contains at least two code points and the first two code + * points are either "0x" or "0X", then: + * 2.1. Set validationErrorFlag. + * 2.2. Remove the first two code points from input. + * 2.3. Set R to 16. + */ + validationErrorFlag.value = true; + input = input.substr(2); + R = 16; + } + else if (input.length >= 2 && input[0] === '0') { + /** + * 3. Otherwise, if input contains at least two code points and the first + * code point is U+0030 (0), then: + * 3.1. Set validationErrorFlag. + * 3.2. Remove the first code point from input. + * 3.3. Set R to 8. + */ + validationErrorFlag.value = true; + input = input.substr(1); + R = 8; + } + /** + * 4. If input is the empty string, then return zero. + * 5. If input contains a code point that is not a radix-R digit, then + * return failure. + */ + if (input === "") + return 0; + var radixRDigits = (R === 10 ? /^[0-9]+$/ : (R === 16 ? /^[0-9A-Fa-f]+$/ : /^[0-7]+$/)); + if (!radixRDigits.test(input)) + return null; + /** + * 6. Return the mathematical integer value that is represented by input in + * radix-R notation, using ASCII hex digits for digits with values + * 0 through 15. + */ + return parseInt(input, R); +} +exports.iPv4NumberParser = iPv4NumberParser; +/** + * Parses a string containing an IP v4 address. + * + * @param input - input string + */ +function iPv4Parser(input) { + var e_6, _a, e_7, _b; + /** + * 1. Let validationErrorFlag be unset. + * 2. Let parts be input split on U+002E (.). + */ + var validationErrorFlag = { value: false }; + var parts = input.split('.'); + /** + * 3. If the last item in parts is the empty string, then: + * 3.1. Set validationErrorFlag. + * 3.2. If parts has more than one item, then remove the last item from + * parts. + */ + if (parts[parts.length - 1] === "") { + validationErrorFlag.value = true; + if (parts.length > 1) + parts.pop(); + } + /** + * 4. If parts has more than four items, return input. + */ + if (parts.length > 4) + return input; + /** + * 5. Let numbers be the empty list. + * 6. For each part in parts: + * 6.1. If part is the empty string, return input. + * 6.2. Let n be the result of parsing part using validationErrorFlag. + * 6.3. If n is failure, return input. + * 6.4. Append n to numbers. + */ + var numbers = []; + try { + for (var parts_1 = __values(parts), parts_1_1 = parts_1.next(); !parts_1_1.done; parts_1_1 = parts_1.next()) { + var part = parts_1_1.value; + if (part === "") + return input; + var n = iPv4NumberParser(part, validationErrorFlag); + if (n === null) + return input; + numbers.push(n); + } + } + catch (e_6_1) { e_6 = { error: e_6_1 }; } + finally { + try { + if (parts_1_1 && !parts_1_1.done && (_a = parts_1.return)) _a.call(parts_1); + } + finally { if (e_6) throw e_6.error; } + } + /** + * 7. If validationErrorFlag is set, validation error. + * 8. If any item in numbers is greater than 255, validation error. + * 9. If any but the last item in numbers is greater than 255, return + * failure. + * 10. If the last item in numbers is greater than or equal to + * 256**(5 − the number of items in numbers), validation error, return failure. + */ + if (validationErrorFlag.value) + validationError("Invalid IP v4 address."); + for (var i = 0; i < numbers.length; i++) { + var item = numbers[i]; + if (item > 255) { + validationError("Invalid IP v4 address."); + if (i < numbers.length - 1) + return null; + } + } + if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) { + validationError("Invalid IP v4 address."); + return null; + } + /** + * 11. Let ipv4 be the last item in numbers. + * 12. Remove the last item from numbers. + */ + var ipv4 = numbers[numbers.length - 1]; + numbers.pop(); + /** + * 13. Let counter be zero. + * 14. For each n in numbers: + * 14.2. Increment ipv4 by n × 256**(3 − counter). + * 14.2. Increment counter by 1. + */ + var counter = 0; + try { + for (var numbers_1 = __values(numbers), numbers_1_1 = numbers_1.next(); !numbers_1_1.done; numbers_1_1 = numbers_1.next()) { + var n = numbers_1_1.value; + ipv4 += n * Math.pow(256, 3 - counter); + counter++; + } + } + catch (e_7_1) { e_7 = { error: e_7_1 }; } + finally { + try { + if (numbers_1_1 && !numbers_1_1.done && (_b = numbers_1.return)) _b.call(numbers_1); + } + finally { if (e_7) throw e_7.error; } + } + /** + * 15. Return ipv4. + */ + return ipv4; +} +exports.iPv4Parser = iPv4Parser; +/** + * Parses a string containing an IP v6 address. + * + * @param input - input string + */ +function iPv6Parser(input) { + var _a; + /** + * 1. Let address be a new IPv6 address whose IPv6 pieces are all 0. + * 2. Let pieceIndex be 0. + * 3. Let compress be null. + * 4. Let pointer be a pointer into input, initially 0 (pointing to the + * first code point). + */ + var EOF = ""; + var address = [0, 0, 0, 0, 0, 0, 0, 0]; + var pieceIndex = 0; + var compress = null; + var walker = new util_1.StringWalker(input); + /** + * 5. If c is U+003A (:), then: + * 5.1. If remaining does not start with U+003A (:), validation error, + * return failure. + * 5.2. Increase pointer by 2. + * 5.3. Increase pieceIndex by 1 and then set compress to pieceIndex. + */ + if (walker.c() === ':') { + if (!walker.remaining().startsWith(':')) { + validationError("Invalid IP v6 address."); + return null; + } + walker.pointer += 2; + pieceIndex += 1; + compress = pieceIndex; + } + /** + * 6. While c is not the EOF code point: + */ + while (walker.c() !== EOF) { + /** + * 6.1. If pieceIndex is 8, validation error, return failure. + */ + if (pieceIndex === 8) { + validationError("Invalid IP v6 address."); + return null; + } + /** + * 6.2. If c is U+003A (:), then: + * 6.2.1. If compress is non-null, validation error, return failure. + * 6.2.2. Increase pointer and pieceIndex by 1, set compress to pieceIndex, + * and then continue. + */ + if (walker.c() === ':') { + if (compress !== null) { + validationError("Invalid IP v6 address."); + return null; + } + walker.pointer++; + pieceIndex++; + compress = pieceIndex; + continue; + } + /** + * 6.3. Let value and length be 0. + * 6.4. While length is less than 4 and c is an ASCII hex digit, set value + * to value × 0x10 + c interpreted as hexadecimal number, and increase + * pointer and length by 1. + */ + var value = 0; + var length = 0; + while (length < 4 && infra_1.codePoint.ASCIIHexDigit.test(walker.c())) { + value = value * 0x10 + parseInt(walker.c(), 16); + walker.pointer++; + length++; + } + /** + * 6.5. If c is U+002E (.), then: + */ + if (walker.c() === '.') { + /** + * 6.5.1. If length is 0, validation error, return failure. + * 6.5.2. Decrease pointer by length. + * 6.5.3. If pieceIndex is greater than 6, validation error, return + * failure. + * 6.5.4. Let numbersSeen be 0. + */ + if (length === 0) { + validationError("Invalid IP v6 address."); + return null; + } + walker.pointer -= length; + if (pieceIndex > 6) { + validationError("Invalid IP v6 address."); + return null; + } + var numbersSeen = 0; + /** + * 6.5.5. While c is not the EOF code point: + */ + while (walker.c() !== EOF) { + /** + * 6.5.5.1. Let ipv4Piece be null. + */ + var ipv4Piece = null; + /** + * 6.5.5.2. If numbersSeen is greater than 0, then: + * 6.5.5.2.1. If c is a U+002E (.) and numbersSeen is less than 4, then + * increase pointer by 1. + * 6.5.5.2.1. Otherwise, validation error, return failure. + */ + if (numbersSeen > 0) { + if (walker.c() === '.' && numbersSeen < 4) { + walker.pointer++; } - var host = hostParser(buffer, !isSpecial(url)); - if (host === null) + else { + validationError("Invalid IP v6 address."); return null; - url.host = host; - buffer = ""; - state = interfaces_1.ParserState.PathStart; - if (stateOverride !== undefined) - return url; - } - else { - /** - * 4. Otherwise: - * 4.1. If c is U+005B ([), then set the [] flag. - * 4.2. If c is U+005D (]), then unset the [] flag. - * 4.3. Append c to buffer. - */ - if (walker.c() === '[') - arrayFlag = true; - if (walker.c() === ']') - arrayFlag = false; - buffer += walker.c(); - } - break; - case interfaces_1.ParserState.Port: - if (infra_1.codePoint.ASCIIDigit.test(walker.c())) { - /** - * 1. If c is an ASCII digit, append c to buffer. - */ - buffer += walker.c(); - } - else if (walker.c() === EOF || walker.c() === '/' || walker.c() === '?' || walker.c() === '#' || - (isSpecial(url) && walker.c() === '\\') || stateOverride) { - /** - * 2. Otherwise, if one of the following is true - * - c is the EOF code point, U+002F (/), U+003F (?), or U+0023 (#) - * - url is special and c is U+005C (\) - * - state override is given - * then: - */ - if (buffer !== "") { - /** - * 2.1. If buffer is not the empty string, then: - * 2.1.1. Let port be the mathematical integer value that is - * represented by buffer in radix-10 using ASCII digits for digits - * with values 0 through 9. - * 2.1.2. If port is greater than 2**16 − 1, validation error, - * return failure. - * 2.1.3. Set url’s port to null, if port is url’s scheme’s default - * port, and to port otherwise. - * 2.1.4. Set buffer to the empty string. - */ - if (buffer !== "") { - var port = parseInt(buffer, 10); - if (port > Math.pow(2, 16) - 1) { - validationError("Invalid port number."); - return null; - } - url.port = (port === defaultPort(url.scheme) ? null : port); - buffer = ""; - } - } - /** - * 2.2. If state override is given, then return. - * 2.3. Set state to path start state, and decrease pointer by one. - */ - if (stateOverride !== undefined) { - return url; } - state = interfaces_1.ParserState.PathStart; - walker.pointer--; } - else { - /** - * 3. Otherwise, validation error, return failure. - */ - validationError("Invalid input string."); + /** + * 6.5.5.3. If c is not an ASCII digit, validation error, return + * failure. + */ + if (!infra_1.codePoint.ASCIIDigit.test(walker.c())) { + validationError("Invalid IP v6 address."); return null; } - break; - case interfaces_1.ParserState.File: /** - * 1. Set url’s scheme to "file". + * 6.5.5.4. While c is an ASCII digit: */ - url.scheme = "file"; - if (walker.c() === '/' || walker.c() === '\\') { - /** - * 2. If c is U+002F (/) or U+005C (\), then: - * 2.1. If c is U+005C (\), validation error. - * 2.2. Set state to file slash state. - */ - if (walker.c() === '\\') { - validationError("Invalid input string."); - } - state = interfaces_1.ParserState.FileSlash; - } - else if (baseURL !== null && baseURL.scheme === "file") { - /** - * 3. Otherwise, if base is non-null and base’s scheme is "file", - * switch on c: - */ - switch (walker.c()) { - case EOF: - /** - * Set url’s host to base’s host, url’s path to a copy of base’s - * path, and url’s query to base’s query. - */ - url.host = baseURL.host; - url.path = infra_1.list.clone(baseURL.path); - url.query = baseURL.query; - break; - case '?': - /** - * Set url’s host to base’s host, url’s path to a copy of base’s - * path, url’s query to the empty string, and state to query - * state. - */ - url.host = baseURL.host; - url.path = infra_1.list.clone(baseURL.path); - url.query = ""; - state = interfaces_1.ParserState.Query; - break; - case '#': - /** - * Set url’s host to base’s host, url’s path to a copy of base’s - * path, url’s query to base’s query, url’s fragment to the - * empty string, and state to fragment state. - */ - url.host = baseURL.host; - url.path = infra_1.list.clone(baseURL.path); - url.query = baseURL.query; - url.fragment = ""; - state = interfaces_1.ParserState.Fragment; - break; - default: - /** - * 1. If the substring from pointer in input does not start - * with a Windows drive letter, then set url’s host to base’s - * host, url’s path to a copy of base’s path, and then shorten - * url’s path. - * _Note:_ is a (platform-independent) Windows drive letter - * quirk. - * 2. Otherwise, validation error. - * 3. Set state to path state, and decrease pointer by one. - */ - if (!startsWithAWindowsDriveLetter(walker.substring())) { - url.host = baseURL.host; - url.path = infra_1.list.clone(baseURL.path); - shorten(url); - } - else { - validationError("Unexpected windows drive letter in input string."); - } - state = interfaces_1.ParserState.Path; - walker.pointer--; - break; - } - } - else { - /** - * 4. Otherwise, set state to path state, and decrease pointer by - * one. - */ - state = interfaces_1.ParserState.Path; - walker.pointer--; - } - break; - case interfaces_1.ParserState.FileSlash: - if (walker.c() === '/' || walker.c() === '\\') { - /** - * 1. If c is U+002F (/) or U+005C (\), then: - * 1.1. If c is U+005C (\), validation error. - * 1.2. Set state to file host state. - */ - if (walker.c() === '\\') { - validationError("Invalid input string."); - } - state = interfaces_1.ParserState.FileHost; - } - else { + while (infra_1.codePoint.ASCIIDigit.test(walker.c())) { /** - * 2. Otherwise: - * 2.1. If base is non-null, base’s scheme is "file", and the - * substring from pointer in input does not start with a Windows - * drive letter, then: - * 2.1.1. If base’s path[0] is a normalized Windows drive letter, - * then append base’s path[0] to url’s path. - * _Note:_ is a (platform-independent) Windows drive letter - * quirk. Both url’s and base’s host are null under these conditions - * and therefore not copied. - * 2.1.2. Otherwise, set url’s host to base’s host. - * 2.2. Set state to path state, and decrease pointer by one. + * 6.5.5.4.1. Let number be c interpreted as decimal number. */ - if (baseURL !== null && baseURL.scheme === "file" && - !startsWithAWindowsDriveLetter(walker.substring())) { - if (isNormalizedWindowsDriveLetter(baseURL.path[0])) { - url.path.push(baseURL.path[0]); - } - else { - url.host = baseURL.host; - } - } - state = interfaces_1.ParserState.Path; - walker.pointer--; - } - break; - case interfaces_1.ParserState.FileHost: - if (walker.c() === EOF || walker.c() === '/' || walker.c() === '\\' || - walker.c() === '?' || walker.c() === '#') { + var number = parseInt(walker.c(), 10); /** - * 1. If c is the EOF code point, U+002F (/), U+005C (\), U+003F (?), - * or U+0023 (#), then decrease pointer by one and then: + * 6.5.5.4.2. If ipv4Piece is null, then set ipv4Piece to number. + * Otherwise, if ipv4Piece is 0, validation error, return failure. + * Otherwise, set ipv4Piece to ipv4Piece × 10 + number. */ - walker.pointer--; - if (stateOverride === undefined && isWindowsDriveLetter(buffer)) { - /** - * 1.1. If state override is not given and buffer is a Windows drive - * letter, validation error, set state to path state. - * _Note:_ is a (platform-independent) Windows drive letter - * quirk. buffer is not reset here and instead used in the path state. - */ - validationError("Unexpected windows drive letter in input string."); - state = interfaces_1.ParserState.Path; + if (ipv4Piece === null) { + ipv4Piece = number; } - else if (buffer === "") { - /** - * 1.2. Otherwise, if buffer is the empty string, then: - * 1.2.1. Set url’s host to the empty string. - * 1.2.2. If state override is given, then return. - * 1.2.3. Set state to path start state. - */ - url.host = ""; - if (stateOverride !== undefined) - return url; - state = interfaces_1.ParserState.PathStart; + else if (ipv4Piece === 0) { + validationError("Invalid IP v6 address."); + return null; } else { - /** - * 1.3. Otherwise, run these steps: - * 1.3.1. Let host be the result of host parsing buffer with url - * is not special. - * 1.3.2. If host is failure, then return failure. - * 1.3.3. If host is "localhost", then set host to the empty - * string. - * 1.3.4. Set url’s host to host. - * 1.3.5. If state override is given, then return. - * 1.3.6. Set buffer to the empty string and state to path start - * state. - */ - var host = hostParser(buffer, !isSpecial(url)); - if (host === null) - return null; - if (host === "localhost") - host = ""; - url.host = host; - if (stateOverride !== undefined) - return url; - buffer = ""; - state = interfaces_1.ParserState.PathStart; - } - } - else { - /** - * 2. Otherwise, append c to buffer. - */ - buffer += walker.c(); - } - break; - case interfaces_1.ParserState.PathStart: - if (isSpecial(url)) { - /** - * 1. If url is special, then: - * 1.1. If c is U+005C (\), validation error. - * 1.2. Set state to path state. - * 1.3. If c is neither U+002F (/) nor U+005C (\), then decrease - * pointer by one. - */ - if (walker.c() === '\\') { - validationError("Invalid input string."); - } - state = interfaces_1.ParserState.Path; - if (walker.c() !== '/' && walker.c() !== '\\') - walker.pointer--; - } - else if (stateOverride === undefined && walker.c() === '?') { - /** - * 2. Otherwise, if state override is not given and c is U+003F (?), - * set url’s query to the empty string and state to query state. - */ - url.query = ""; - state = interfaces_1.ParserState.Query; - } - else if (stateOverride === undefined && walker.c() === '#') { - /** - * 3. Otherwise, if state override is not given and c is U+0023 (#), - * set url’s fragment to the empty string and state to fragment - * state. - */ - url.fragment = ""; - state = interfaces_1.ParserState.Fragment; - } - else if (walker.c() !== EOF) { - /** - * 4. Otherwise, if c is not the EOF code point: - * 4.1. Set state to path state. - * 4.2. If c is not U+002F (/), then decrease pointer by one. - */ - state = interfaces_1.ParserState.Path; - if (walker.c() !== '/') - walker.pointer--; - } - break; - case interfaces_1.ParserState.Path: - if ((walker.c() === EOF || walker.c() === '/') || - (isSpecial(url) && walker.c() === '\\') || - (stateOverride === undefined && (walker.c() === '?' || walker.c() === '#'))) { - /** - * 1. If one of the following is true - * - c is the EOF code point or U+002F (/) - * - url is special and c is U+005C (\) - * - state override is not given and c is U+003F (?) or U+0023 (#) - * then: - */ - if (isSpecial(url) && walker.c() === '\\') { - /** - * 1.1 If url is special and c is U+005C (\), validation error. - */ - validationError("Invalid input string."); - } - if (isDoubleDotPathSegment(buffer)) { - /** - * 1.2. If buffer is a double-dot path segment, shorten url’s path, - * and then if neither c is U+002F (/), nor url is special and c is - * U+005C (\), append the empty string to url’s path. - */ - shorten(url); - if (walker.c() !== '/' && !(isSpecial(url) && walker.c() === '\\')) { - url.path.push(""); - } - } - else if (isSingleDotPathSegment(buffer) && walker.c() !== '/' && - !(isSpecial(url) && walker.c() === '\\')) { - /** - * 1.3. Otherwise, if buffer is a single-dot path segment and if - * neither c is U+002F (/), nor url is special and c is U+005C (\), - * append the empty string to url’s path. - */ - url.path.push(""); - } - else if (!isSingleDotPathSegment(buffer)) { - /** - * 1.4. Otherwise, if buffer is not a single-dot path segment, then: - */ - if (url.scheme === "file" && url.path.length === 0 && - isWindowsDriveLetter(buffer)) { - /** - * 1.4.1. If url’s scheme is "file", url’s path is empty, and - * buffer is a Windows drive letter, then: - * 1.4.1.1. If url’s host is neither the empty string nor null, - * validation error, set url’s host to the empty string. - * 1.4.1.2. Replace the second code point in buffer with U+003A (:). - * _Note:_ is a (platform-independent) Windows drive letter quirk. - */ - if (url.host !== null && url.host !== "") { - validationError("Invalid input string."); - url.host = ""; - } - var bufferCodePoints = Array.from(buffer); - buffer = bufferCodePoints.slice(0, 1) + ':' + bufferCodePoints.slice(2); - } - /** - * 1.4.2. Append buffer to url’s path. - */ - url.path.push(buffer); - } - /** - * 1.5. Set buffer to the empty string. - */ - buffer = ""; - /** - * 1.6. If url’s scheme is "file" and c is the EOF code point, - * U+003F (?), or U+0023 (#), then while url’s path’s size is - * greater than 1 and url’s path[0] is the empty string, validation - * error, remove the first item from url’s path. - */ - if (url.scheme === "file" && (walker.c() === EOF || walker.c() === '?' || walker.c() === '#')) { - while (url.path.length > 1 && url.path[0] === "") { - validationError("Invalid input string."); - url.path.splice(0, 1); - } - } - /** - * 1.7. If c is U+003F (?), then set url’s query to the empty string - * and state to query state. - * 1.8. If c is U+0023 (#), then set url’s fragment to the empty - * string and state to fragment state. - */ - if (walker.c() === '?') { - url.query = ""; - state = interfaces_1.ParserState.Query; - } - if (walker.c() === '#') { - url.fragment = ""; - state = interfaces_1.ParserState.Fragment; + ipv4Piece = ipv4Piece * 10 + number; } - } - else { /** - * 2. Otherwise, run these steps: - * 2.1. If c is not a URL code point and not U+0025 (%), validation - * error. - * 2.2. If c is U+0025 (%) and remaining does not start with two - * ASCII hex digits, validation error. - * 2.3. UTF-8 percent encode c using the path percent-encode set, - * and append the result to buffer. + * 6.5.5.4.3. If ipv4Piece is greater than 255, validation error, return failure. + * 6.5.5.4.4. Increase pointer by 1. */ - if (!_urlCodePoints.test(walker.c()) && walker.c() !== '%') { - validationError("Character is not a URL code point or a percent encoded character."); - } - if (walker.c() === '%' && !/^[0-9a-fA-F][0-9a-fA-F]/.test(walker.remaining())) { - validationError("Percent encoded character must be followed by two hex digits."); + if (ipv4Piece > 255) { + validationError("Invalid IP v6 address."); + return null; } - buffer += utf8PercentEncode(walker.c(), _pathPercentEncodeSet); + walker.pointer++; } - break; - case interfaces_1.ParserState.CannotBeABaseURLPath: /** - * 1. If c is U+003F (?), then set url’s query to the empty string and - * state to query state. - * 2. Otherwise, if c is U+0023 (#), then set url’s fragment to the - * empty string and state to fragment state. - * 3. Otherwise: - * 3.1. If c is not the EOF code point, not a URL code point, and not - * U+0025 (%), validation error. - * 3.2. If c is U+0025 (%) and remaining does not start with two ASCII - * hex digits, validation error. - * 3.3. If c is not the EOF code point, UTF-8 percent encode c using - * the C0 control percent-encode set, and append the result to url’s - * path[0]. + * 6.5.5.5. Set address[pieceIndex] to address[pieceIndex] × 0x100 + ipv4Piece. + * 6.5.5.6. Increase numbersSeen by 1. + * 6.5.5.7. If numbersSeen is 2 or 4, then increase pieceIndex by 1. */ - if (walker.c() === '?') { - url.query = ""; - state = interfaces_1.ParserState.Query; + if (ipv4Piece === null) { + validationError("Invalid IP v6 address."); + return null; } - else if (walker.c() === '#') { - url.fragment = ""; - state = interfaces_1.ParserState.Fragment; + address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece; + numbersSeen++; + if (numbersSeen === 2 || numbersSeen === 4) + pieceIndex++; + } + /** + * 6.5.6. If numbersSeen is not 4, validation error, return failure. + */ + if (numbersSeen !== 4) { + validationError("Invalid IP v6 address."); + return null; + } + /** + * 6.5.7. Break. + */ + break; + } + else if (walker.c() === ':') { + /** + * 6.6. Otherwise, if c is U+003A (:): + * 6.6.1. Increase pointer by 1. + * 6.6.2. If c is the EOF code point, validation error, return failure. + */ + walker.pointer++; + if (walker.c() === EOF) { + validationError("Invalid IP v6 address."); + return null; + } + } + else if (walker.c() !== EOF) { + /** + * 6.7. Otherwise, if c is not the EOF code point, validation error, + * return failure. + */ + validationError("Invalid IP v6 address."); + return null; + } + /** + * 6.8. Set address[pieceIndex] to value. + * 6.9. Increase pieceIndex by 1. + */ + address[pieceIndex] = value; + pieceIndex++; + } + /** + * 7. If compress is non-null, then: + * 7.1. Let swaps be pieceIndex − compress. + * 7.2. Set pieceIndex to 7. + * 7.3. While pieceIndex is not 0 and swaps is greater than 0, swap + * address[pieceIndex] with address[compress + swaps − 1], and then decrease + * both pieceIndex and swaps by 1. + */ + if (compress !== null) { + var swaps = pieceIndex - compress; + pieceIndex = 7; + while (pieceIndex !== 0 && swaps > 0) { + _a = __read([address[compress + swaps - 1], address[pieceIndex]], 2), address[pieceIndex] = _a[0], address[compress + swaps - 1] = _a[1]; + pieceIndex--; + swaps--; + } + } + else if (compress === null && pieceIndex !== 8) { + /** + * 8. Otherwise, if compress is null and pieceIndex is not 8, + * validation error, return failure. + */ + validationError("Invalid IP v6 address."); + return null; + } + /** + * 9. Return address. + */ + return address; +} +exports.iPv6Parser = iPv6Parser; +/** + * Parses an opaque host string. + * + * @param input - a string + */ +function opaqueHostParser(input) { + var e_8, _a; + /** + * 1. If input contains a forbidden host code point excluding U+0025 (%), + * validation error, return failure. + * 2. Let output be the empty string. + * 3. For each code point in input, UTF-8 percent encode it using the C0 + * control percent-encode set, and append the result to output. + * 4. Return output. + */ + var forbiddenChars = /[\x00\t\f\r #/:?@\[\\\]]/; + if (forbiddenChars.test(input)) { + validationError("Invalid host string."); + return null; + } + var output = ""; + try { + for (var input_1 = __values(input), input_1_1 = input_1.next(); !input_1_1.done; input_1_1 = input_1.next()) { + var codePoint = input_1_1.value; + output += utf8PercentEncode(codePoint, _c0ControlPercentEncodeSet); + } + } + catch (e_8_1) { e_8 = { error: e_8_1 }; } + finally { + try { + if (input_1_1 && !input_1_1.done && (_a = input_1.return)) _a.call(input_1); + } + finally { if (e_8) throw e_8.error; } + } + return output; +} +exports.opaqueHostParser = opaqueHostParser; +/** + * Resolves a Blob URL from the user agent's Blob URL store. + * function is not implemented. + * See: https://w3c.github.io/FileAPI/#blob-url-resolve + * + * @param url - an url + */ +function resolveABlobURL(url) { + return null; +} +exports.resolveABlobURL = resolveABlobURL; +/** + * Percent encodes a byte. + * + * @param value - a byte + */ +function percentEncode(value) { + /** + * To percent encode a byte into a percent-encoded byte, return a string + * consisting of U+0025 (%), followed by two ASCII upper hex digits + * representing byte. + */ + return '%' + ('00' + value.toString(16).toUpperCase()).slice(-2); +} +exports.percentEncode = percentEncode; +/** + * Percent decodes a byte sequence input. + * + * @param input - a byte sequence + */ +function percentDecode(input) { + var isHexDigit = function (byte) { + return (byte >= 0x30 && byte <= 0x39) || (byte >= 0x41 && byte <= 0x46) || + (byte >= 0x61 && byte <= 0x66); + }; + /** + * 1. Let output be an empty byte sequence. + * 2. For each byte byte in input: + */ + var output = new Uint8Array(input.length); + var n = 0; + for (var i = 0; i < input.length; i++) { + var byte = input[i]; + /** + * 2.1. If byte is not 0x25 (%), then append byte to output. + * 2.2. Otherwise, if byte is 0x25 (%) and the next two bytes after byte + * in input are not in the ranges 0x30 (0) to 0x39 (9), 0x41 (A) + * to 0x46 (F), and 0x61 (a) to 0x66 (f), all inclusive, append byte + * to output. + * 2.3. Otherwise: + * 2.3.1. Let bytePoint be the two bytes after byte in input, decoded, + * and then interpreted as hexadecimal number. + * 2.3.2. Append a byte whose value is bytePoint to output. + * 2.3.3. Skip the next two bytes in input. + */ + if (byte !== 0x25) { + output[n] = byte; + n++; + } + else if (byte === 0x25 && i >= input.length - 2) { + output[n] = byte; + n++; + } + else if (byte === 0x25 && (!isHexDigit(input[i + 1]) || !isHexDigit(input[i + 2]))) { + output[n] = byte; + n++; + } + else { + var bytePoint = parseInt(util_1.utf8Decode(Uint8Array.of(input[i + 1], input[i + 2])), 16); + output[n] = bytePoint; + n++; + i += 2; + } + } + return output.subarray(0, n); +} +exports.percentDecode = percentDecode; +/** + * String percent decodes a string. + * + * @param input - a string + */ +function stringPercentDecode(input) { + /** + * 1. Let bytes be the UTF-8 encoding of input. + * 2. Return the percent decoding of bytes. + */ + return percentDecode(util_1.utf8Encode(input)); +} +exports.stringPercentDecode = stringPercentDecode; +/** + * UTF-8 percent encodes a code point, using a percent encode set. + * + * @param codePoint - a code point + * @param percentEncodeSet - a percent encode set + */ +function utf8PercentEncode(codePoint, percentEncodeSet) { + var e_9, _a; + /** + * 1. If codePoint is not in percentEncodeSet, then return codePoint. + * 2. Let bytes be the result of running UTF-8 encode on codePoint. + * 3. Percent encode each byte in bytes, and then return the results + * concatenated, in the same order. + */ + if (!percentEncodeSet.test(codePoint)) + return codePoint; + var bytes = util_1.utf8Encode(codePoint); + var result = ""; + try { + for (var bytes_2 = __values(bytes), bytes_2_1 = bytes_2.next(); !bytes_2_1.done; bytes_2_1 = bytes_2.next()) { + var byte = bytes_2_1.value; + result += percentEncode(byte); + } + } + catch (e_9_1) { e_9 = { error: e_9_1 }; } + finally { + try { + if (bytes_2_1 && !bytes_2_1.done && (_a = bytes_2.return)) _a.call(bytes_2); + } + finally { if (e_9) throw e_9.error; } + } + return result; +} +exports.utf8PercentEncode = utf8PercentEncode; +/** + * Determines if two hosts are considered equal. + * + * @param hostA - a host + * @param hostB - a host + */ +function hostEquals(hostA, hostB) { + return hostA === hostB; +} +exports.hostEquals = hostEquals; +/** + * Determines if two URLs are considered equal. + * + * @param urlA - a URL + * @param urlB - a URL + * @param excludeFragmentsFlag - whether to ignore fragments while comparing + */ +function urlEquals(urlA, urlB, excludeFragmentsFlag) { + if (excludeFragmentsFlag === void 0) { excludeFragmentsFlag = false; } + /** + * 1. Let serializedA be the result of serializing A, with the exclude + * fragment flag set if the exclude fragments flag is set. + * 2. Let serializedB be the result of serializing B, with the exclude + * fragment flag set if the exclude fragments flag is set. + * 3. Return true if serializedA is serializedB, and false otherwise. + */ + return urlSerializer(urlA, excludeFragmentsFlag) === + urlSerializer(urlB, excludeFragmentsFlag); +} +exports.urlEquals = urlEquals; +/** + * Parses an `application/x-www-form-urlencoded` string. + * + * @param input - a string + */ +function urlEncodedStringParser(input) { + /** + * The application/x-www-form-urlencoded string parser takes a string input, + * UTF-8 encodes it, and then returns the result of + * application/x-www-form-urlencoded parsing it. + */ + return urlEncodedParser(util_1.utf8Encode(input)); +} +exports.urlEncodedStringParser = urlEncodedStringParser; +/** + * Parses `application/x-www-form-urlencoded` bytes. + * + * @param input - a byte sequence + */ +function urlEncodedParser(input) { + var e_10, _a, e_11, _b; + /** + * 1. Let sequences be the result of splitting input on 0x26 (&). + */ + var sequences = []; + var currentSequence = []; + try { + for (var input_2 = __values(input), input_2_1 = input_2.next(); !input_2_1.done; input_2_1 = input_2.next()) { + var byte = input_2_1.value; + if (byte === 0x26) { + sequences.push(Uint8Array.from(currentSequence)); + currentSequence = []; + } + else { + currentSequence.push(byte); + } + } + } + catch (e_10_1) { e_10 = { error: e_10_1 }; } + finally { + try { + if (input_2_1 && !input_2_1.done && (_a = input_2.return)) _a.call(input_2); + } + finally { if (e_10) throw e_10.error; } + } + if (currentSequence.length !== 0) { + sequences.push(Uint8Array.from(currentSequence)); + } + /** + * 2. Let output be an initially empty list of name-value tuples where both name and value hold a string. + */ + var output = []; + try { + /** + * 3. For each byte sequence bytes in sequences: + */ + for (var sequences_1 = __values(sequences), sequences_1_1 = sequences_1.next(); !sequences_1_1.done; sequences_1_1 = sequences_1.next()) { + var bytes = sequences_1_1.value; + /** + * 3.1. If bytes is the empty byte sequence, then continue. + */ + if (bytes.length === 0) + continue; + /** + * 3.2. If bytes contains a 0x3D (=), then let name be the bytes from the + * start of bytes up to but excluding its first 0x3D (=), and let value be + * the bytes, if any, after the first 0x3D (=) up to the end of bytes. + * If 0x3D (=) is the first byte, then name will be the empty byte + * sequence. If it is the last, then value will be the empty byte sequence. + * 3.3. Otherwise, let name have the value of bytes and let value be the + * empty byte sequence. + */ + var index = bytes.indexOf(0x3D); + var name = (index !== -1 ? bytes.slice(0, index) : bytes); + var value = (index !== -1 ? bytes.slice(index + 1) : new Uint8Array()); + /** + * 3.4. Replace any 0x2B (+) in name and value with 0x20 (SP). + */ + for (var i = 0; i < name.length; i++) + if (name[i] === 0x2B) + name[i] = 0x20; + for (var i = 0; i < value.length; i++) + if (value[i] === 0x2B) + value[i] = 0x20; + /** + * 3.5. Let nameString and valueString be the result of running UTF-8 + * decode without BOM on the percent decoding of name and value, + * respectively. + */ + var nameString = util_1.utf8Decode(name); + var valueString = util_1.utf8Decode(value); + /** + * 3.6. Append (nameString, valueString) to output. + */ + output.push([nameString, valueString]); + } + } + catch (e_11_1) { e_11 = { error: e_11_1 }; } + finally { + try { + if (sequences_1_1 && !sequences_1_1.done && (_b = sequences_1.return)) _b.call(sequences_1); + } + finally { if (e_11) throw e_11.error; } + } + /** + * 4. Return output. + */ + return output; +} +exports.urlEncodedParser = urlEncodedParser; +/** + * Serializes `application/x-www-form-urlencoded` bytes. + * + * @param input - a byte sequence + */ +function urlEncodedByteSerializer(input) { + var e_12, _a; + /** + * 1. Let output be the empty string. + * 2. For each byte in input, depending on byte: + * 0x20 (SP) + * Append U+002B (+) to output. + * + * 0x2A (*) + * 0x2D (-) + * 0x2E (.) + * 0x30 (0) to 0x39 (9) + * 0x41 (A) to 0x5A (Z) + * 0x5F (_) + * 0x61 (a) to 0x7A (z) + * Append a code point whose value is byte to output. + * + * Otherwise + * Append byte, percent encoded, to output. + * 3. Return output. + */ + var output = ""; + try { + for (var input_3 = __values(input), input_3_1 = input_3.next(); !input_3_1.done; input_3_1 = input_3.next()) { + var byte = input_3_1.value; + if (byte === 0x20) { + output += '+'; + } + else if (byte === 0x2A || byte === 0x2D || byte === 0x2E || + (byte >= 0x30 && byte <= 0x39) || (byte >= 0x41 && byte <= 0x5A) || + byte === 0x5F || (byte >= 0x61 && byte <= 0x7A)) { + output += String.fromCodePoint(byte); + } + else { + output += percentEncode(byte); + } + } + } + catch (e_12_1) { e_12 = { error: e_12_1 }; } + finally { + try { + if (input_3_1 && !input_3_1.done && (_a = input_3.return)) _a.call(input_3); + } + finally { if (e_12) throw e_12.error; } + } + return output; +} +exports.urlEncodedByteSerializer = urlEncodedByteSerializer; +/** + * Serializes `application/x-www-form-urlencoded` tuples. + * + * @param input - input tuple of name/value pairs + * @param encodingOverride: encoding override + */ +function urlEncodedSerializer(tuples, encodingOverride) { + var e_13, _a; + /** + * 1. Let encoding be UTF-8. + * 2. If encoding override is given, set encoding to the result of getting + * an output encoding from encoding override. + */ + var encoding = (encodingOverride === undefined || + encodingOverride === "replacement" || encodingOverride === "UTF-16BE" || + encodingOverride === "UTF-16LE" ? "UTF-8" : encodingOverride); + if (encoding.toUpperCase() !== "UTF-8") { + throw new Error("Only UTF-8 encoding is supported."); + } + /** + * 3. Let output be the empty string. + */ + var output = ""; + try { + /** + * 4. For each tuple in tuples: + */ + for (var tuples_1 = __values(tuples), tuples_1_1 = tuples_1.next(); !tuples_1_1.done; tuples_1_1 = tuples_1.next()) { + var tuple = tuples_1_1.value; + /** + * 4.1. Let name be the result of serializing the result of encoding + * tuple’s name, using encoding. + */ + var name = urlEncodedByteSerializer(util_1.utf8Encode(tuple[0])); + /** + * 4.2. Let value be tuple’s value. + */ + var value = tuple[1]; + /** + * TODO: + * 4.3. If value is a file, then set value to value’s filename. + */ + /** + * 4.4. Set value to the result of serializing the result of encoding + * value, using encoding. + */ + value = urlEncodedByteSerializer(util_1.utf8Encode(value)); + /** + * 4.5. If tuple is not the first pair in tuples, then append U+0026 (&) + * to output. + */ + if (output !== "") + output += '&'; + /** + * 4.6. Append name, followed by U+003D (=), followed by value, to output. + */ + output += name + '=' + value; + } + } + catch (e_13_1) { e_13 = { error: e_13_1 }; } + finally { + try { + if (tuples_1_1 && !tuples_1_1.done && (_a = tuples_1.return)) _a.call(tuples_1); + } + finally { if (e_13) throw e_13.error; } + } + /** + * 5. Return output. + */ + return output; +} +exports.urlEncodedSerializer = urlEncodedSerializer; +/** + * Returns a URL's origin. + * + * @param url - a URL + */ +function origin(url) { + /** + * A URL’s origin is the origin returned by running these steps, switching + * on URL’s scheme: + * "blob" + * 1. If URL’s blob URL entry is non-null, then return URL’s blob URL + * entry’s environment’s origin. + * 2. Let url be the result of parsing URL’s path[0]. + * 3. Return a new opaque origin, if url is failure, and url’s origin + * otherwise. + * "ftp" + * "http" + * "https" + * "ws" + * "wss" + * Return a tuple consisting of URL’s scheme, URL’s host, URL’s port, and + * null. + * "file" + * Unfortunate as it is, is left as an exercise to the reader. When in + * doubt, return a new opaque origin. + * Otherwise + * Return a new opaque origin. + */ + switch (url.scheme) { + case "blob": + if (url._blobURLEntry !== null) { + // TODO: return URL’s blob URL entry’s environment’s origin. + } + var parsedURL = basicURLParser(url.path[0]); + if (parsedURL === null) + return interfaces_1.OpaqueOrigin; + else + return origin(parsedURL); + case "ftp": + case "http": + case "https": + case "ws": + case "wss": + return [url.scheme, url.host === null ? "" : url.host, url.port, null]; + case "file": + return interfaces_1.OpaqueOrigin; + default: + return interfaces_1.OpaqueOrigin; + } +} +exports.origin = origin; +/** + * Converts a domain string to ASCII. + * + * @param domain - a domain string + */ +function domainToASCII(domain, beStrict) { + if (beStrict === void 0) { beStrict = false; } + /** + * 1. If beStrict is not given, set it to false. + * 2. Let result be the result of running Unicode ToASCII with domain_name + * set to domain, UseSTD3ASCIIRules set to beStrict, CheckHyphens set to + * false, CheckBidi set to true, CheckJoiners set to true, + * Transitional_Processing set to false, and VerifyDnsLength set to beStrict. + * 3. If result is a failure value, validation error, return failure. + * 4. Return result. + */ + // Use node.js function + var result = url_1.domainToASCII(domain); + if (result === "") { + validationError("Invalid domain name."); + return null; + } + return result; +} +exports.domainToASCII = domainToASCII; +/** + * Converts a domain string to Unicode. + * + * @param domain - a domain string + */ +function domainToUnicode(domain, beStrict) { + if (beStrict === void 0) { beStrict = false; } + /** + * 1. Let result be the result of running Unicode ToUnicode with domain_name + * set to domain, CheckHyphens set to false, CheckBidi set to true, + * CheckJoiners set to true, UseSTD3ASCIIRules set to false, and + * Transitional_Processing set to false. + * 2. Signify validation errors for any returned errors, and then, + * return result. + */ + // Use node.js function + var result = url_1.domainToUnicode(domain); + if (result === "") { + validationError("Invalid domain name."); + } + return result; +} +exports.domainToUnicode = domainToUnicode; +/** + * Serializes an origin. + * function is from the HTML spec: + * https://html.spec.whatwg.org/#ascii-serialisation-of-an-origin + * + * @param origin - an origin + */ +function asciiSerializationOfAnOrigin(origin) { + /** + * 1. If origin is an opaque origin, then return "null". + * 2. Otherwise, let result be origin's scheme. + * 3. Append "://" to result. + * 4. Append origin's host, serialized, to result. + * 5. If origin's port is non-null, append a U+003A COLON character (:), + * and origin's port, serialized, to result. + * 6. Return result. + */ + if (origin[0] === "" && origin[1] === "" && origin[2] === null && origin[3] === null) { + return "null"; + } + var result = origin[0] + "://" + hostSerializer(origin[1]); + if (origin[2] !== null) + result += ":" + origin[2].toString(); + return result; +} +exports.asciiSerializationOfAnOrigin = asciiSerializationOfAnOrigin; +//# sourceMappingURL=URLAlgorithm.js.map + +/***/ }), + +/***/ 1752: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Represents the state of the URL parser. + */ +var ParserState; +(function (ParserState) { + ParserState[ParserState["SchemeStart"] = 0] = "SchemeStart"; + ParserState[ParserState["Scheme"] = 1] = "Scheme"; + ParserState[ParserState["NoScheme"] = 2] = "NoScheme"; + ParserState[ParserState["SpecialRelativeOrAuthority"] = 3] = "SpecialRelativeOrAuthority"; + ParserState[ParserState["PathOrAuthority"] = 4] = "PathOrAuthority"; + ParserState[ParserState["Relative"] = 5] = "Relative"; + ParserState[ParserState["RelativeSlash"] = 6] = "RelativeSlash"; + ParserState[ParserState["SpecialAuthoritySlashes"] = 7] = "SpecialAuthoritySlashes"; + ParserState[ParserState["SpecialAuthorityIgnoreSlashes"] = 8] = "SpecialAuthorityIgnoreSlashes"; + ParserState[ParserState["Authority"] = 9] = "Authority"; + ParserState[ParserState["Host"] = 10] = "Host"; + ParserState[ParserState["Hostname"] = 11] = "Hostname"; + ParserState[ParserState["Port"] = 12] = "Port"; + ParserState[ParserState["File"] = 13] = "File"; + ParserState[ParserState["FileSlash"] = 14] = "FileSlash"; + ParserState[ParserState["FileHost"] = 15] = "FileHost"; + ParserState[ParserState["PathStart"] = 16] = "PathStart"; + ParserState[ParserState["Path"] = 17] = "Path"; + ParserState[ParserState["CannotBeABaseURLPath"] = 18] = "CannotBeABaseURLPath"; + ParserState[ParserState["Query"] = 19] = "Query"; + ParserState[ParserState["Fragment"] = 20] = "Fragment"; +})(ParserState = exports.ParserState || (exports.ParserState = {})); +exports.OpaqueOrigin = ["", "", null, null]; +//# sourceMappingURL=interfaces.js.map + +/***/ }), + +/***/ 7561: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Represents a cache for storing order between equal objects. + * + * This cache is used when an algorithm compares two objects and finds them to + * be equal but still needs to establish an order between those two objects. + * When two such objects `a` and `b` are passed to the `check` method, a random + * number is generated with `Math.random()`. If the random number is less than + * `0.5` it is assumed that `a < b` otherwise `a > b`. The random number along + * with `a` and `b` is stored in the cache, so that subsequent checks result + * in the same consistent result. + * + * The cache has a size limit which is defined on initialization. + */ +var CompareCache = /** @class */ (function () { + /** + * Initializes a new instance of `CompareCache`. + * + * @param limit - maximum number of items to keep in the cache. When the limit + * is exceeded the first item is removed from the cache. + */ + function CompareCache(limit) { + if (limit === void 0) { limit = 1000; } + this._items = new Map(); + this._limit = limit; + } + /** + * Compares and caches the given objects. Returns `true` if `objA < objB` and + * `false` otherwise. + * + * @param objA - an item to compare + * @param objB - an item to compare + */ + CompareCache.prototype.check = function (objA, objB) { + if (this._items.get(objA) === objB) + return true; + else if (this._items.get(objB) === objA) + return false; + var result = (Math.random() < 0.5); + if (result) { + this._items.set(objA, objB); + } + else { + this._items.set(objB, objA); + } + if (this._items.size > this._limit) { + var it_1 = this._items.keys().next(); + /* istanbul ignore else */ + if (!it_1.done) { + this._items.delete(it_1.value); + } + } + return result; + }; + return CompareCache; +}()); +exports.CompareCache = CompareCache; +//# sourceMappingURL=CompareCache.js.map + +/***/ }), + +/***/ 6006: +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Represents a set of objects with a size limit. + */ +var FixedSizeSet = /** @class */ (function () { + /** + * Initializes a new instance of `FixedSizeSet`. + * + * @param limit - maximum number of items to keep in the set. When the limit + * is exceeded the first item is removed from the set. + */ + function FixedSizeSet(limit) { + if (limit === void 0) { limit = 1000; } + this._items = new Set(); + this._limit = limit; + } + /** + * Adds a new item to the set. + * + * @param item - an item + */ + FixedSizeSet.prototype.add = function (item) { + this._items.add(item); + if (this._items.size > this._limit) { + var it_1 = this._items.values().next(); + /* istanbul ignore else */ + if (!it_1.done) { + this._items.delete(it_1.value); + } + } + return this; + }; + /** + * Removes an item from the set. + * + * @param item - an item + */ + FixedSizeSet.prototype.delete = function (item) { + return this._items.delete(item); + }; + /** + * Determines if an item is in the set. + * + * @param item - an item + */ + FixedSizeSet.prototype.has = function (item) { + return this._items.has(item); + }; + /** + * Removes all items from the set. + */ + FixedSizeSet.prototype.clear = function () { + this._items.clear(); + }; + Object.defineProperty(FixedSizeSet.prototype, "size", { + /** + * Gets the number of items in the set. + */ + get: function () { return this._items.size; }, + enumerable: true, + configurable: true + }); + /** + * Applies the given callback function to all elements of the set. + */ + FixedSizeSet.prototype.forEach = function (callback, thisArg) { + var _this = this; + this._items.forEach(function (e) { return callback.call(thisArg, e, e, _this); }); + }; + /** + * Iterates through the items in the set. + */ + FixedSizeSet.prototype.keys = function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(this._items.keys())]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + /** + * Iterates through the items in the set. + */ + FixedSizeSet.prototype.values = function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(this._items.values())]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + /** + * Iterates through the items in the set. + */ + FixedSizeSet.prototype.entries = function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(this._items.entries())]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + /** + * Iterates through the items in the set. + */ + FixedSizeSet.prototype[Symbol.iterator] = function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(this._items)]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + Object.defineProperty(FixedSizeSet.prototype, Symbol.toStringTag, { + /** + * Returns the string tag of the set. + */ + get: function () { + return "FixedSizeSet"; + }, + enumerable: true, + configurable: true + }); + return FixedSizeSet; +}()); +exports.FixedSizeSet = FixedSizeSet; +//# sourceMappingURL=FixedSizeSet.js.map + +/***/ }), + +/***/ 1857: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Represents an object with lazy initialization. + */ +var Lazy = /** @class */ (function () { + /** + * Initializes a new instance of `Lazy`. + * + * @param initFunc - initializer function + */ + function Lazy(initFunc) { + this._initialized = false; + this._value = undefined; + this._initFunc = initFunc; + } + Object.defineProperty(Lazy.prototype, "value", { + /** + * Gets the value of the object. + */ + get: function () { + if (!this._initialized) { + this._value = this._initFunc(); + this._initialized = true; + } + return this._value; + }, + enumerable: true, + configurable: true + }); + return Lazy; +}()); +exports.Lazy = Lazy; +//# sourceMappingURL=Lazy.js.map + +/***/ }), + +/***/ 5798: +/***/ (function(__unused_webpack_module, exports) { + +"use strict"; + +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Represents a cache of objects with a size limit. + */ +var ObjectCache = /** @class */ (function () { + /** + * Initializes a new instance of `ObjectCache`. + * + * @param limit - maximum number of items to keep in the cache. When the limit + * is exceeded the first item is removed from the cache. + */ + function ObjectCache(limit) { + if (limit === void 0) { limit = 1000; } + this._items = new Map(); + this._limit = limit; + } + /** + * Gets an item from the cache. + * + * @param key - object key + */ + ObjectCache.prototype.get = function (key) { + return this._items.get(key); + }; + /** + * Adds a new item to the cache. + * + * @param key - object key + * @param value - object value + */ + ObjectCache.prototype.set = function (key, value) { + this._items.set(key, value); + if (this._items.size > this._limit) { + var it_1 = this._items.keys().next(); + /* istanbul ignore else */ + if (!it_1.done) { + this._items.delete(it_1.value); + } + } + }; + /** + * Removes an item from the cache. + * + * @param item - an item + */ + ObjectCache.prototype.delete = function (key) { + return this._items.delete(key); + }; + /** + * Determines if an item is in the cache. + * + * @param item - an item + */ + ObjectCache.prototype.has = function (key) { + return this._items.has(key); + }; + /** + * Removes all items from the cache. + */ + ObjectCache.prototype.clear = function () { + this._items.clear(); + }; + Object.defineProperty(ObjectCache.prototype, "size", { + /** + * Gets the number of items in the cache. + */ + get: function () { return this._items.size; }, + enumerable: true, + configurable: true + }); + /** + * Applies the given callback function to all elements of the cache. + */ + ObjectCache.prototype.forEach = function (callback, thisArg) { + this._items.forEach(function (v, k) { return callback.call(thisArg, k, v); }); + }; + /** + * Iterates through the items in the set. + */ + ObjectCache.prototype.keys = function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(this._items.keys())]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + /** + * Iterates through the items in the set. + */ + ObjectCache.prototype.values = function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(this._items.values())]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + /** + * Iterates through the items in the set. + */ + ObjectCache.prototype.entries = function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(this._items.entries())]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + /** + * Iterates through the items in the set. + */ + ObjectCache.prototype[Symbol.iterator] = function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [5 /*yield**/, __values(this._items)]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }; + Object.defineProperty(ObjectCache.prototype, Symbol.toStringTag, { + /** + * Returns the string tag of the cache. + */ + get: function () { + return "ObjectCache"; + }, + enumerable: true, + configurable: true + }); + return ObjectCache; +}()); +exports.ObjectCache = ObjectCache; +//# sourceMappingURL=ObjectCache.js.map + +/***/ }), + +/***/ 4145: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Walks through the code points of a string. + */ +var StringWalker = /** @class */ (function () { + /** + * Initializes a new `StringWalker`. + * + * @param input - input string + */ + function StringWalker(input) { + this._pointer = 0; + this._chars = Array.from(input); + this._length = this._chars.length; + } + Object.defineProperty(StringWalker.prototype, "eof", { + /** + * Determines if the current position is beyond the end of string. + */ + get: function () { return this._pointer >= this._length; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(StringWalker.prototype, "length", { + /** + * Returns the number of code points in the input string. + */ + get: function () { return this._length; }, + enumerable: true, + configurable: true + }); + /** + * Returns the current code point. Returns `-1` if the position is beyond + * the end of string. + */ + StringWalker.prototype.codePoint = function () { + if (this._codePoint === undefined) { + if (this.eof) { + this._codePoint = -1; + } + else { + var cp = this._chars[this._pointer].codePointAt(0); + /* istanbul ignore else */ + if (cp !== undefined) { + this._codePoint = cp; } else { - if (walker.c() !== EOF && !_urlCodePoints.test(walker.c()) && walker.c() !== '%') { - validationError("Character is not a URL code point or a percent encoded character."); - } - if (walker.c() === '%' && !/^[0-9a-fA-F][0-9a-fA-F]/.test(walker.remaining())) { - validationError("Percent encoded character must be followed by two hex digits."); - } - if (walker.c() !== EOF) { - url.path[0] += utf8PercentEncode(walker.c(), _c0ControlPercentEncodeSet); - } + this._codePoint = -1; } - break; - case interfaces_1.ParserState.Query: - /** - * 1. If encoding is not UTF-8 and one of the following is true - * - url is not special - * - url’s scheme is "ws" or "wss" - * then set encoding to UTF-8. - */ - if (encoding !== "UTF-8" && (!isSpecial(url) || - url.scheme === "ws" || url.scheme === "wss")) { - encoding = "UTF-8"; + } + } + return this._codePoint; + }; + /** + * Returns the current character. Returns an empty string if the position is + * beyond the end of string. + */ + StringWalker.prototype.c = function () { + if (this._c === undefined) { + this._c = (this.eof ? "" : this._chars[this._pointer]); + } + return this._c; + }; + /** + * Returns the remaining string. + */ + StringWalker.prototype.remaining = function () { + if (this._remaining === undefined) { + this._remaining = (this.eof ? + "" : this._chars.slice(this._pointer + 1).join('')); + } + return this._remaining; + }; + /** + * Returns the substring from the current character to the end of string. + */ + StringWalker.prototype.substring = function () { + if (this._substring === undefined) { + this._substring = (this.eof ? + "" : this._chars.slice(this._pointer).join('')); + } + return this._substring; + }; + Object.defineProperty(StringWalker.prototype, "pointer", { + /** + * Gets or sets the current position. + */ + get: function () { return this._pointer; }, + set: function (val) { + if (val === this._pointer) + return; + this._pointer = val; + this._codePoint = undefined; + this._c = undefined; + this._remaining = undefined; + this._substring = undefined; + }, + enumerable: true, + configurable: true + }); + return StringWalker; +}()); +exports.StringWalker = StringWalker; +//# sourceMappingURL=StringWalker.js.map + +/***/ }), + +/***/ 6195: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var FixedSizeSet_1 = __nccwpck_require__(6006); +exports.FixedSizeSet = FixedSizeSet_1.FixedSizeSet; +var ObjectCache_1 = __nccwpck_require__(5798); +exports.ObjectCache = ObjectCache_1.ObjectCache; +var CompareCache_1 = __nccwpck_require__(7561); +exports.CompareCache = CompareCache_1.CompareCache; +var Lazy_1 = __nccwpck_require__(1857); +exports.Lazy = Lazy_1.Lazy; +var StringWalker_1 = __nccwpck_require__(4145); +exports.StringWalker = StringWalker_1.StringWalker; +/** + * Applies the mixin to a given class. + * + * @param baseClass - class to receive the mixin + * @param mixinClass - mixin class + * @param overrides - an array with names of function overrides. Base class + * functions whose names are in this array will be kept by prepending an + * underscore to their names. + */ +function applyMixin(baseClass, mixinClass) { + var overrides = []; + for (var _i = 2; _i < arguments.length; _i++) { + overrides[_i - 2] = arguments[_i]; + } + Object.getOwnPropertyNames(mixinClass.prototype).forEach(function (name) { + if (name !== "constructor") { + if (overrides.indexOf(name) !== -1) { + var orgPropDesc = Object.getOwnPropertyDescriptor(baseClass.prototype, name); + /* istanbul ignore else */ + if (orgPropDesc) { + Object.defineProperty(baseClass.prototype, "_" + name, orgPropDesc); } - if (stateOverride === undefined && walker.c() === '#') { - /** - * 2. If state override is not given and c is U+0023 (#), then set - * url’s fragment to the empty string and state to fragment state. - */ - url.fragment = ""; - state = interfaces_1.ParserState.Fragment; + } + var propDesc = Object.getOwnPropertyDescriptor(mixinClass.prototype, name); + /* istanbul ignore else */ + if (propDesc) { + Object.defineProperty(baseClass.prototype, name, propDesc); + } + } + }); +} +exports.applyMixin = applyMixin; +/** + * Applies default values to the given object. + * + * @param obj - an object + * @param defaults - an object with default values + * @param overwrite - if set to `true` defaults object always overwrites object + * values, whether they are `undefined` or not. + */ +function applyDefaults(obj, defaults, overwrite) { + if (overwrite === void 0) { overwrite = false; } + var result = clone(obj || {}); + forEachObject(defaults, function (key, val) { + if (isPlainObject(val)) { + result[key] = applyDefaults(result[key], val, overwrite); + } + else if (overwrite || result[key] === undefined) { + result[key] = val; + } + }); + return result; +} +exports.applyDefaults = applyDefaults; +/** + * Iterates over items of an array or set. + * + * @param arr - array or set to iterate + * @param callback - a callback function which receives each array item as its + * single argument + * @param thisArg - the value of this inside callback + */ +function forEachArray(arr, callback, thisArg) { + arr.forEach(callback, thisArg); +} +exports.forEachArray = forEachArray; +/** + * Iterates over key/value pairs of a map or object. + * + * @param obj - map or object to iterate + * @param callback - a callback function which receives object key as its first + * argument and object value as its second argument + * @param thisArg - the value of this inside callback + */ +function forEachObject(obj, callback, thisArg) { + if (isMap(obj)) { + obj.forEach(function (value, key) { return callback.call(thisArg, key, value); }); + } + else { + for (var key in obj) { + /* istanbul ignore else */ + if (obj.hasOwnProperty(key)) { + callback.call(thisArg, key, obj[key]); + } + } + } +} +exports.forEachObject = forEachObject; +/** + * Returns the number of entries in an array or set. + * + * @param arr - array or set + */ +function arrayLength(obj) { + if (isSet(obj)) { + return obj.size; + } + else { + return obj.length; + } +} +exports.arrayLength = arrayLength; +/** + * Returns the number of entries in a map or object. + * + * @param obj - map or object + */ +function objectLength(obj) { + if (isMap(obj)) { + return obj.size; + } + else { + return Object.keys(obj).length; + } +} +exports.objectLength = objectLength; +/** + * Gets the value of a key from a map or object. + * + * @param obj - map or object + * @param key - the key to retrieve + */ +function getObjectValue(obj, key) { + if (isMap(obj)) { + return obj.get(key); + } + else { + return obj[key]; + } +} +exports.getObjectValue = getObjectValue; +/** + * Removes a property from a map or object. + * + * @param obj - map or object + * @param key - the key to remove + */ +function removeObjectValue(obj, key) { + if (isMap(obj)) { + obj.delete(key); + } + else { + delete obj[key]; + } +} +exports.removeObjectValue = removeObjectValue; +/** + * Deep clones the given object. + * + * @param obj - an object + */ +function clone(obj) { + var e_1, _a; + if (isFunction(obj)) { + return obj; + } + else if (isArray(obj)) { + var result = []; + try { + for (var obj_1 = __values(obj), obj_1_1 = obj_1.next(); !obj_1_1.done; obj_1_1 = obj_1.next()) { + var item = obj_1_1.value; + result.push(clone(item)); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (obj_1_1 && !obj_1_1.done && (_a = obj_1.return)) _a.call(obj_1); + } + finally { if (e_1) throw e_1.error; } + } + return result; + } + else if (isObject(obj)) { + var result = {}; + for (var key in obj) { + /* istanbul ignore next */ + if (obj.hasOwnProperty(key)) { + var val = obj[key]; + result[key] = clone(val); + } + } + return result; + } + else { + return obj; + } +} +exports.clone = clone; +/** + * Type guard for boolean types + * + * @param x - a variable to type check + */ +function isBoolean(x) { + return typeof x === "boolean"; +} +exports.isBoolean = isBoolean; +/** + * Type guard for numeric types + * + * @param x - a variable to type check + */ +function isNumber(x) { + return typeof x === "number"; +} +exports.isNumber = isNumber; +/** + * Type guard for strings + * + * @param x - a variable to type check + */ +function isString(x) { + return typeof x === "string"; +} +exports.isString = isString; +/** + * Type guard for function objects + * + * @param x - a variable to type check + */ +function isFunction(x) { + return !!x && Object.prototype.toString.call(x) === '[object Function]'; +} +exports.isFunction = isFunction; +/** + * Type guard for JS objects + * + * _Note:_ Functions are objects too + * + * @param x - a variable to type check + */ +function isObject(x) { + var type = typeof x; + return !!x && (type === 'function' || type === 'object'); +} +exports.isObject = isObject; +/** + * Type guard for arrays + * + * @param x - a variable to type check + */ +function isArray(x) { + return Array.isArray(x); +} +exports.isArray = isArray; +/** + * Type guard for sets. + * + * @param x - a variable to check + */ +function isSet(x) { + return x instanceof Set; +} +exports.isSet = isSet; +/** + * Type guard for maps. + * + * @param x - a variable to check + */ +function isMap(x) { + return x instanceof Map; +} +exports.isMap = isMap; +/** + * Determines if `x` is an empty Array or an Object with no own properties. + * + * @param x - a variable to check + */ +function isEmpty(x) { + if (isArray(x)) { + return !x.length; + } + else if (isSet(x)) { + return !x.size; + } + else if (isMap(x)) { + return !x.size; + } + else if (isObject(x)) { + for (var key in x) { + if (x.hasOwnProperty(key)) { + return false; + } + } + return true; + } + return false; +} +exports.isEmpty = isEmpty; +/** + * Determines if `x` is a plain Object. + * + * @param x - a variable to check + */ +function isPlainObject(x) { + if (isObject(x)) { + var proto = Object.getPrototypeOf(x); + var ctor = proto.constructor; + return proto && ctor && + (typeof ctor === 'function') && (ctor instanceof ctor) && + (Function.prototype.toString.call(ctor) === Function.prototype.toString.call(Object)); + } + return false; +} +exports.isPlainObject = isPlainObject; +/** + * Determines if `x` is an iterable Object. + * + * @param x - a variable to check + */ +function isIterable(x) { + return x && (typeof x[Symbol.iterator] === 'function'); +} +exports.isIterable = isIterable; +/** + * Gets the primitive value of an object. + */ +function getValue(obj) { + if (isFunction(obj.valueOf)) { + return obj.valueOf(); + } + else { + return obj; + } +} +exports.getValue = getValue; +/** + * UTF-8 encodes the given string. + * + * @param input - a string + */ +function utf8Encode(input) { + var bytes = new Uint8Array(input.length * 4); + var byteIndex = 0; + for (var i = 0; i < input.length; i++) { + var char = input.charCodeAt(i); + if (char < 128) { + bytes[byteIndex++] = char; + continue; + } + else if (char < 2048) { + bytes[byteIndex++] = char >> 6 | 192; + } + else { + if (char > 0xd7ff && char < 0xdc00) { + if (++i >= input.length) { + throw new Error("Incomplete surrogate pair."); } - else if (walker.c() !== EOF) { - /** - * 3. Otherwise, if c is not the EOF code point: - * 3.1. If c is not a URL code point and not U+0025 (%), validation - * error. - */ - if (!_urlCodePoints.test(walker.c()) && walker.c() !== '%') { - validationError("Character is not a URL code point or a percent encoded character."); - } - /** - * 3.2. If c is U+0025 (%) and remaining does not start with two - * ASCII hex digits, validation error. - */ - if (walker.c() === '%' && !/^[0-9a-fA-F][0-9a-fA-F]/.test(walker.remaining())) { - validationError("Percent encoded character must be followed by two hex digits."); - } - /** - * 3.3. Let bytes be the result of encoding c using encoding. - */ - if (encoding.toUpperCase() !== "UTF-8") { - throw new Error("Only UTF-8 encoding is supported."); - } - var bytes = util_1.utf8Encode(walker.c()); - /** - * 3.4. If bytes starts with `&#` and ends with 0x3B (;), then: - */ - if (bytes.length >= 3 && bytes[0] === 38 && bytes[1] === 35 && - bytes[bytes.length - 1] === 59) { - /** - * 3.4.1. Replace `&#` at the start of bytes with `%26%23`. - * 3.4.2. Replace 0x3B (;) at the end of bytes with `%3B`. - * 3.4.4. Append bytes, isomorphic decoded, to url’s query. - * _Note:_ can happen when encoding code points using a - * non-UTF-8 encoding. - */ - bytes = bytes.subarray(2, bytes.length - 1); - url.query += "%26%23" + infra_1.byteSequence.isomorphicDecode(bytes) + "%3B"; - } - else { - try { - /** - * 3.5. Otherwise, for each byte in bytes: - * 3.5.1. If one of the following is true - * - byte is less than 0x21 (!) - * - byte is greater than 0x7E (~) - * - byte is 0x22 ("), 0x23 (#), 0x3C (<), or 0x3E (>) - * - byte is 0x27 (') and url is special - * then append byte, percent encoded, to url’s query. - * 3.5.2. Otherwise, append a code point whose value is byte to - * url’s query. - */ - for (var bytes_1 = (e_3 = void 0, __values(bytes)), bytes_1_1 = bytes_1.next(); !bytes_1_1.done; bytes_1_1 = bytes_1.next()) { - var byte = bytes_1_1.value; - if (byte < 0x21 || byte > 0x7E || byte === 0x22 || - byte === 0x23 || byte === 0x3C || byte === 0x3E || - (byte === 0x27 && isSpecial(url))) { - url.query += percentEncode(byte); - } - else { - url.query += String.fromCharCode(byte); - } - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (bytes_1_1 && !bytes_1_1.done && (_b = bytes_1.return)) _b.call(bytes_1); - } - finally { if (e_3) throw e_3.error; } - } - } + var c2 = input.charCodeAt(i); + if (c2 < 0xdc00 || c2 > 0xdfff) { + throw new Error("Invalid surrogate character."); } - break; - case interfaces_1.ParserState.Fragment: - /** - * Switching on c: - * - The EOF code point - * Do nothing. - * - U+0000 NULL - * Validation error. - * - Otherwise - * 1. If c is not a URL code point and not U+0025 (%), validation - * error. - * 2. If c is U+0025 (%) and remaining does not start with two ASCII - * hex digits, validation error. - * 3. UTF-8 percent encode c using the fragment percent-encode set and - * append the result to url’s fragment. - */ - if (walker.c() === EOF) { - // + char = 0x10000 + ((char & 0x03ff) << 10) + (c2 & 0x03ff); + bytes[byteIndex++] = char >> 18 | 240; + bytes[byteIndex++] = char >> 12 & 63 | 128; + } + else { + bytes[byteIndex++] = char >> 12 | 224; + } + bytes[byteIndex++] = char >> 6 & 63 | 128; + } + bytes[byteIndex++] = char & 63 | 128; + } + return bytes.subarray(0, byteIndex); +} +exports.utf8Encode = utf8Encode; +/** + * UTF-8 decodes the given byte sequence into a string. + * + * @param bytes - a byte sequence + */ +function utf8Decode(bytes) { + var result = ""; + var i = 0; + while (i < bytes.length) { + var c = bytes[i++]; + if (c > 127) { + if (c > 191 && c < 224) { + if (i >= bytes.length) { + throw new Error("Incomplete 2-byte sequence."); } - else if (walker.c() === "\u0000") { - validationError("NULL character in input string."); + c = (c & 31) << 6 | bytes[i++] & 63; + } + else if (c > 223 && c < 240) { + if (i + 1 >= bytes.length) { + throw new Error("Incomplete 3-byte sequence."); } - else { - if (!_urlCodePoints.test(walker.c()) && walker.c() !== '%') { - validationError("Unexpected character in fragment string."); - } - if (walker.c() === '%' && !/^[A-Za-z0-9][A-Za-z0-9]/.test(walker.remaining())) { - validationError("Unexpected character in fragment string."); - } - url.fragment += utf8PercentEncode(walker.c(), _fragmentPercentEncodeSet); + c = (c & 15) << 12 | (bytes[i++] & 63) << 6 | bytes[i++] & 63; + } + else if (c > 239 && c < 248) { + if (i + 2 >= bytes.length) { + throw new Error("Incomplete 4-byte sequence."); } - break; + c = (c & 7) << 18 | (bytes[i++] & 63) << 12 | (bytes[i++] & 63) << 6 | bytes[i++] & 63; + } + else { + throw new Error("Unknown multi-byte start."); + } + } + if (c <= 0xffff) { + result += String.fromCharCode(c); + } + else if (c <= 0x10ffff) { + c -= 0x10000; + result += String.fromCharCode(c >> 10 | 0xd800); + result += String.fromCharCode(c & 0x3FF | 0xdc00); + } + else { + throw new Error("Code point exceeds UTF-16 limit."); + } + } + return result; +} +exports.utf8Decode = utf8Decode; +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 1917: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + + +var yaml = __nccwpck_require__(916); + + +module.exports = yaml; + + +/***/ }), + +/***/ 916: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + + +var loader = __nccwpck_require__(5190); +var dumper = __nccwpck_require__(3034); + + +function deprecated(name) { + return function () { + throw new Error('Function ' + name + ' is deprecated and cannot be used.'); + }; +} + + +module.exports.Type = __nccwpck_require__(967); +module.exports.Schema = __nccwpck_require__(6514); +module.exports.FAILSAFE_SCHEMA = __nccwpck_require__(6037); +module.exports.JSON_SCHEMA = __nccwpck_require__(1571); +module.exports.CORE_SCHEMA = __nccwpck_require__(2183); +module.exports.DEFAULT_SAFE_SCHEMA = __nccwpck_require__(8949); +module.exports.DEFAULT_FULL_SCHEMA = __nccwpck_require__(6874); +module.exports.load = loader.load; +module.exports.loadAll = loader.loadAll; +module.exports.safeLoad = loader.safeLoad; +module.exports.safeLoadAll = loader.safeLoadAll; +module.exports.dump = dumper.dump; +module.exports.safeDump = dumper.safeDump; +module.exports.YAMLException = __nccwpck_require__(5199); + +// Deprecated schema names from JS-YAML 2.0.x +module.exports.MINIMAL_SCHEMA = __nccwpck_require__(6037); +module.exports.SAFE_SCHEMA = __nccwpck_require__(8949); +module.exports.DEFAULT_SCHEMA = __nccwpck_require__(6874); + +// Deprecated functions from JS-YAML 1.x.x +module.exports.scan = deprecated('scan'); +module.exports.parse = deprecated('parse'); +module.exports.compose = deprecated('compose'); +module.exports.addConstructor = deprecated('addConstructor'); + + +/***/ }), + +/***/ 9136: +/***/ ((module) => { + +"use strict"; + + + +function isNothing(subject) { + return (typeof subject === 'undefined') || (subject === null); +} + + +function isObject(subject) { + return (typeof subject === 'object') && (subject !== null); +} + + +function toArray(sequence) { + if (Array.isArray(sequence)) return sequence; + else if (isNothing(sequence)) return []; + + return [ sequence ]; +} + + +function extend(target, source) { + var index, length, key, sourceKeys; + + if (source) { + sourceKeys = Object.keys(source); + + for (index = 0, length = sourceKeys.length; index < length; index += 1) { + key = sourceKeys[index]; + target[key] = source[key]; + } + } + + return target; +} + + +function repeat(string, count) { + var result = '', cycle; + + for (cycle = 0; cycle < count; cycle += 1) { + result += string; + } + + return result; +} + + +function isNegativeZero(number) { + return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number); +} + + +module.exports.isNothing = isNothing; +module.exports.isObject = isObject; +module.exports.toArray = toArray; +module.exports.repeat = repeat; +module.exports.isNegativeZero = isNegativeZero; +module.exports.extend = extend; + + +/***/ }), + +/***/ 3034: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +/*eslint-disable no-use-before-define*/ + +var common = __nccwpck_require__(9136); +var YAMLException = __nccwpck_require__(5199); +var DEFAULT_FULL_SCHEMA = __nccwpck_require__(6874); +var DEFAULT_SAFE_SCHEMA = __nccwpck_require__(8949); + +var _toString = Object.prototype.toString; +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +var CHAR_TAB = 0x09; /* Tab */ +var CHAR_LINE_FEED = 0x0A; /* LF */ +var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */ +var CHAR_SPACE = 0x20; /* Space */ +var CHAR_EXCLAMATION = 0x21; /* ! */ +var CHAR_DOUBLE_QUOTE = 0x22; /* " */ +var CHAR_SHARP = 0x23; /* # */ +var CHAR_PERCENT = 0x25; /* % */ +var CHAR_AMPERSAND = 0x26; /* & */ +var CHAR_SINGLE_QUOTE = 0x27; /* ' */ +var CHAR_ASTERISK = 0x2A; /* * */ +var CHAR_COMMA = 0x2C; /* , */ +var CHAR_MINUS = 0x2D; /* - */ +var CHAR_COLON = 0x3A; /* : */ +var CHAR_EQUALS = 0x3D; /* = */ +var CHAR_GREATER_THAN = 0x3E; /* > */ +var CHAR_QUESTION = 0x3F; /* ? */ +var CHAR_COMMERCIAL_AT = 0x40; /* @ */ +var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ +var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ +var CHAR_GRAVE_ACCENT = 0x60; /* ` */ +var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ +var CHAR_VERTICAL_LINE = 0x7C; /* | */ +var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ + +var ESCAPE_SEQUENCES = {}; + +ESCAPE_SEQUENCES[0x00] = '\\0'; +ESCAPE_SEQUENCES[0x07] = '\\a'; +ESCAPE_SEQUENCES[0x08] = '\\b'; +ESCAPE_SEQUENCES[0x09] = '\\t'; +ESCAPE_SEQUENCES[0x0A] = '\\n'; +ESCAPE_SEQUENCES[0x0B] = '\\v'; +ESCAPE_SEQUENCES[0x0C] = '\\f'; +ESCAPE_SEQUENCES[0x0D] = '\\r'; +ESCAPE_SEQUENCES[0x1B] = '\\e'; +ESCAPE_SEQUENCES[0x22] = '\\"'; +ESCAPE_SEQUENCES[0x5C] = '\\\\'; +ESCAPE_SEQUENCES[0x85] = '\\N'; +ESCAPE_SEQUENCES[0xA0] = '\\_'; +ESCAPE_SEQUENCES[0x2028] = '\\L'; +ESCAPE_SEQUENCES[0x2029] = '\\P'; + +var DEPRECATED_BOOLEANS_SYNTAX = [ + 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', + 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' +]; + +function compileStyleMap(schema, map) { + var result, keys, index, length, tag, style, type; + + if (map === null) return {}; + + result = {}; + keys = Object.keys(map); + + for (index = 0, length = keys.length; index < length; index += 1) { + tag = keys[index]; + style = String(map[tag]); + + if (tag.slice(0, 2) === '!!') { + tag = 'tag:yaml.org,2002:' + tag.slice(2); + } + type = schema.compiledTypeMap['fallback'][tag]; + + if (type && _hasOwnProperty.call(type.styleAliases, style)) { + style = type.styleAliases[style]; + } + + result[tag] = style; + } + + return result; +} + +function encodeHex(character) { + var string, handle, length; + + string = character.toString(16).toUpperCase(); + + if (character <= 0xFF) { + handle = 'x'; + length = 2; + } else if (character <= 0xFFFF) { + handle = 'u'; + length = 4; + } else if (character <= 0xFFFFFFFF) { + handle = 'U'; + length = 8; + } else { + throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF'); + } + + return '\\' + handle + common.repeat('0', length - string.length) + string; +} + +function State(options) { + this.schema = options['schema'] || DEFAULT_FULL_SCHEMA; + this.indent = Math.max(1, (options['indent'] || 2)); + this.noArrayIndent = options['noArrayIndent'] || false; + this.skipInvalid = options['skipInvalid'] || false; + this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); + this.styleMap = compileStyleMap(this.schema, options['styles'] || null); + this.sortKeys = options['sortKeys'] || false; + this.lineWidth = options['lineWidth'] || 80; + this.noRefs = options['noRefs'] || false; + this.noCompatMode = options['noCompatMode'] || false; + this.condenseFlow = options['condenseFlow'] || false; + + this.implicitTypes = this.schema.compiledImplicit; + this.explicitTypes = this.schema.compiledExplicit; + + this.tag = null; + this.result = ''; + + this.duplicates = []; + this.usedDuplicates = null; +} + +// Indents every line in a string. Empty lines (\n only) are not indented. +function indentString(string, spaces) { + var ind = common.repeat(' ', spaces), + position = 0, + next = -1, + result = '', + line, + length = string.length; + + while (position < length) { + next = string.indexOf('\n', position); + if (next === -1) { + line = string.slice(position); + position = length; + } else { + line = string.slice(position, next + 1); + position = next + 1; + } + + if (line.length && line !== '\n') result += ind; + + result += line; + } + + return result; +} + +function generateNextLine(state, level) { + return '\n' + common.repeat(' ', state.indent * level); +} + +function testImplicitResolving(state, str) { + var index, length, type; + + for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { + type = state.implicitTypes[index]; + + if (type.resolve(str)) { + return true; + } + } + + return false; +} + +// [33] s-white ::= s-space | s-tab +function isWhitespace(c) { + return c === CHAR_SPACE || c === CHAR_TAB; +} + +// Returns true if the character can be printed without escaping. +// From YAML 1.2: "any allowed characters known to be non-printable +// should also be escaped. [However,] This isn’t mandatory" +// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. +function isPrintable(c) { + return (0x00020 <= c && c <= 0x00007E) + || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) + || ((0x0E000 <= c && c <= 0x00FFFD) && c !== 0xFEFF /* BOM */) + || (0x10000 <= c && c <= 0x10FFFF); +} + +// [34] ns-char ::= nb-char - s-white +// [27] nb-char ::= c-printable - b-char - c-byte-order-mark +// [26] b-char ::= b-line-feed | b-carriage-return +// [24] b-line-feed ::= #xA /* LF */ +// [25] b-carriage-return ::= #xD /* CR */ +// [3] c-byte-order-mark ::= #xFEFF +function isNsChar(c) { + return isPrintable(c) && !isWhitespace(c) + // byte-order-mark + && c !== 0xFEFF + // b-char + && c !== CHAR_CARRIAGE_RETURN + && c !== CHAR_LINE_FEED; +} + +// Simplified test for values allowed after the first character in plain style. +function isPlainSafe(c, prev) { + // Uses a subset of nb-char - c-flow-indicator - ":" - "#" + // where nb-char ::= c-printable - b-char - c-byte-order-mark. + return isPrintable(c) && c !== 0xFEFF + // - c-flow-indicator + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + // - ":" - "#" + // /* An ns-char preceding */ "#" + && c !== CHAR_COLON + && ((c !== CHAR_SHARP) || (prev && isNsChar(prev))); +} + +// Simplified test for values allowed as the first character in plain style. +function isPlainSafeFirst(c) { + // Uses a subset of ns-char - c-indicator + // where ns-char = nb-char - s-white. + return isPrintable(c) && c !== 0xFEFF + && !isWhitespace(c) // - s-white + // - (c-indicator ::= + // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” + && c !== CHAR_MINUS + && c !== CHAR_QUESTION + && c !== CHAR_COLON + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” + && c !== CHAR_SHARP + && c !== CHAR_AMPERSAND + && c !== CHAR_ASTERISK + && c !== CHAR_EXCLAMATION + && c !== CHAR_VERTICAL_LINE + && c !== CHAR_EQUALS + && c !== CHAR_GREATER_THAN + && c !== CHAR_SINGLE_QUOTE + && c !== CHAR_DOUBLE_QUOTE + // | “%” | “@” | “`”) + && c !== CHAR_PERCENT + && c !== CHAR_COMMERCIAL_AT + && c !== CHAR_GRAVE_ACCENT; +} + +// Determines whether block indentation indicator is required. +function needIndentIndicator(string) { + var leadingSpaceRe = /^\n* /; + return leadingSpaceRe.test(string); +} + +var STYLE_PLAIN = 1, + STYLE_SINGLE = 2, + STYLE_LITERAL = 3, + STYLE_FOLDED = 4, + STYLE_DOUBLE = 5; + +// Determines which scalar styles are possible and returns the preferred style. +// lineWidth = -1 => no limit. +// Pre-conditions: str.length > 0. +// Post-conditions: +// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. +// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). +// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). +function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) { + var i; + var char, prev_char; + var hasLineBreak = false; + var hasFoldableLine = false; // only checked if shouldTrackWidth + var shouldTrackWidth = lineWidth !== -1; + var previousLineBreak = -1; // count the first line correctly + var plain = isPlainSafeFirst(string.charCodeAt(0)) + && !isWhitespace(string.charCodeAt(string.length - 1)); + + if (singleLineOnly) { + // Case: no block styles. + // Check for disallowed characters to rule out plain and single. + for (i = 0; i < string.length; i++) { + char = string.charCodeAt(i); + if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + prev_char = i > 0 ? string.charCodeAt(i - 1) : null; + plain = plain && isPlainSafe(char, prev_char); + } + } else { + // Case: block styles permitted. + for (i = 0; i < string.length; i++) { + char = string.charCodeAt(i); + if (char === CHAR_LINE_FEED) { + hasLineBreak = true; + // Check if any line can be folded. + if (shouldTrackWidth) { + hasFoldableLine = hasFoldableLine || + // Foldable line = too long, and not more-indented. + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' '); + previousLineBreak = i; + } + } else if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + prev_char = i > 0 ? string.charCodeAt(i - 1) : null; + plain = plain && isPlainSafe(char, prev_char); + } + // in case the end is missing a \n + hasFoldableLine = hasFoldableLine || (shouldTrackWidth && + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' ')); + } + // Although every style can represent \n without escaping, prefer block styles + // for multiline, since they're more readable and they don't add empty lines. + // Also prefer folding a super-long line. + if (!hasLineBreak && !hasFoldableLine) { + // Strings interpretable as another type have to be quoted; + // e.g. the string 'true' vs. the boolean true. + return plain && !testAmbiguousType(string) + ? STYLE_PLAIN : STYLE_SINGLE; + } + // Edge case: block indentation indicator can only have one digit. + if (indentPerLevel > 9 && needIndentIndicator(string)) { + return STYLE_DOUBLE; + } + // At this point we know block styles are valid. + // Prefer literal style unless we want to fold. + return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; +} + +// Note: line breaking/folding is implemented for only the folded style. +// NB. We drop the last trailing newline (if any) of a returned block scalar +// since the dumper adds its own newline. This always works: +// • No ending newline => unaffected; already using strip "-" chomping. +// • Ending newline => removed then restored. +// Importantly, this keeps the "+" chomp indicator from gaining an extra line. +function writeScalar(state, string, level, iskey) { + state.dump = (function () { + if (string.length === 0) { + return "''"; + } + if (!state.noCompatMode && + DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1) { + return "'" + string + "'"; + } + + var indent = state.indent * Math.max(1, level); // no 0-indent scalars + // As indentation gets deeper, let the width decrease monotonically + // to the lower bound min(state.lineWidth, 40). + // Note that this implies + // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. + // state.lineWidth > 40 + state.indent: width decreases until the lower bound. + // This behaves better than a constant minimum width which disallows narrower options, + // or an indent threshold which causes the width to suddenly increase. + var lineWidth = state.lineWidth === -1 + ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); + + // Without knowing if keys are implicit/explicit, assume implicit for safety. + var singleLineOnly = iskey + // No block styles in flow mode. + || (state.flowLevel > -1 && level >= state.flowLevel); + function testAmbiguity(string) { + return testImplicitResolving(state, string); + } + + switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity)) { + case STYLE_PLAIN: + return string; + case STYLE_SINGLE: + return "'" + string.replace(/'/g, "''") + "'"; + case STYLE_LITERAL: + return '|' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(string, indent)); + case STYLE_FOLDED: + return '>' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); + case STYLE_DOUBLE: + return '"' + escapeString(string, lineWidth) + '"'; + default: + throw new YAMLException('impossible error: invalid scalar style'); + } + }()); +} + +// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. +function blockHeader(string, indentPerLevel) { + var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; + + // note the special case: the string '\n' counts as a "trailing" empty line. + var clip = string[string.length - 1] === '\n'; + var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); + var chomp = keep ? '+' : (clip ? '' : '-'); + + return indentIndicator + chomp + '\n'; +} + +// (See the note for writeScalar.) +function dropEndingNewline(string) { + return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; +} + +// Note: a long line without a suitable break point will exceed the width limit. +// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. +function foldString(string, width) { + // In folded style, $k$ consecutive newlines output as $k+1$ newlines— + // unless they're before or after a more-indented line, or at the very + // beginning or end, in which case $k$ maps to $k$. + // Therefore, parse each chunk as newline(s) followed by a content line. + var lineRe = /(\n+)([^\n]*)/g; + + // first line (possibly an empty line) + var result = (function () { + var nextLF = string.indexOf('\n'); + nextLF = nextLF !== -1 ? nextLF : string.length; + lineRe.lastIndex = nextLF; + return foldLine(string.slice(0, nextLF), width); + }()); + // If we haven't reached the first content line yet, don't add an extra \n. + var prevMoreIndented = string[0] === '\n' || string[0] === ' '; + var moreIndented; + + // rest of the lines + var match; + while ((match = lineRe.exec(string))) { + var prefix = match[1], line = match[2]; + moreIndented = (line[0] === ' '); + result += prefix + + (!prevMoreIndented && !moreIndented && line !== '' + ? '\n' : '') + + foldLine(line, width); + prevMoreIndented = moreIndented; + } + + return result; +} + +// Greedy line breaking. +// Picks the longest line under the limit each time, +// otherwise settles for the shortest line over the limit. +// NB. More-indented lines *cannot* be folded, as that would add an extra \n. +function foldLine(line, width) { + if (line === '' || line[0] === ' ') return line; + + // Since a more-indented line adds a \n, breaks can't be followed by a space. + var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. + var match; + // start is an inclusive index. end, curr, and next are exclusive. + var start = 0, end, curr = 0, next = 0; + var result = ''; + + // Invariants: 0 <= start <= length-1. + // 0 <= curr <= next <= max(0, length-2). curr - start <= width. + // Inside the loop: + // A match implies length >= 2, so curr and next are <= length-2. + while ((match = breakRe.exec(line))) { + next = match.index; + // maintain invariant: curr - start <= width + if (next - start > width) { + end = (curr > start) ? curr : next; // derive end <= length-2 + result += '\n' + line.slice(start, end); + // skip the space that was output as \n + start = end + 1; // derive start <= length-1 + } + curr = next; + } + + // By the invariants, start <= length-1, so there is something left over. + // It is either the whole string or a part starting from non-whitespace. + result += '\n'; + // Insert a break if the remainder is too long and there is a break available. + if (line.length - start > width && curr > start) { + result += line.slice(start, curr) + '\n' + line.slice(curr + 1); + } else { + result += line.slice(start); + } + + return result.slice(1); // drop extra \n joiner +} + +// Escapes a double-quoted string. +function escapeString(string) { + var result = ''; + var char, nextChar; + var escapeSeq; + + for (var i = 0; i < string.length; i++) { + char = string.charCodeAt(i); + // Check for surrogate pairs (reference Unicode 3.0 section "3.7 Surrogates"). + if (char >= 0xD800 && char <= 0xDBFF/* high surrogate */) { + nextChar = string.charCodeAt(i + 1); + if (nextChar >= 0xDC00 && nextChar <= 0xDFFF/* low surrogate */) { + // Combine the surrogate pair and store it escaped. + result += encodeHex((char - 0xD800) * 0x400 + nextChar - 0xDC00 + 0x10000); + // Advance index one extra since we already used that char here. + i++; continue; + } + } + escapeSeq = ESCAPE_SEQUENCES[char]; + result += !escapeSeq && isPrintable(char) + ? string[i] + : escapeSeq || encodeHex(char); + } + + return result; +} + +function writeFlowSequence(state, level, object) { + var _result = '', + _tag = state.tag, + index, + length; + + for (index = 0, length = object.length; index < length; index += 1) { + // Write only valid elements. + if (writeNode(state, level, object[index], false, false)) { + if (index !== 0) _result += ',' + (!state.condenseFlow ? ' ' : ''); + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = '[' + _result + ']'; +} + +function writeBlockSequence(state, level, object, compact) { + var _result = '', + _tag = state.tag, + index, + length; + + for (index = 0, length = object.length; index < length; index += 1) { + // Write only valid elements. + if (writeNode(state, level + 1, object[index], true, true)) { + if (!compact || index !== 0) { + _result += generateNextLine(state, level); + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + _result += '-'; + } else { + _result += '- '; + } + + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = _result || '[]'; // Empty sequence if no valid values. +} + +function writeFlowMapping(state, level, object) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + pairBuffer; + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + + pairBuffer = ''; + if (index !== 0) pairBuffer += ', '; + + if (state.condenseFlow) pairBuffer += '"'; + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (!writeNode(state, level, objectKey, false, false)) { + continue; // Skip this pair because of invalid key; + } + + if (state.dump.length > 1024) pairBuffer += '? '; + + pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); + + if (!writeNode(state, level, objectValue, false, false)) { + continue; // Skip this pair because of invalid value. + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = '{' + _result + '}'; +} + +function writeBlockMapping(state, level, object, compact) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + explicitPair, + pairBuffer; + + // Allow sorting keys so that the output file is deterministic + if (state.sortKeys === true) { + // Default sorting + objectKeyList.sort(); + } else if (typeof state.sortKeys === 'function') { + // Custom sort function + objectKeyList.sort(state.sortKeys); + } else if (state.sortKeys) { + // Something is wrong + throw new YAMLException('sortKeys must be a boolean or a function'); + } + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ''; + + if (!compact || index !== 0) { + pairBuffer += generateNextLine(state, level); + } + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (!writeNode(state, level + 1, objectKey, true, true, true)) { + continue; // Skip this pair because of invalid key. + } + + explicitPair = (state.tag !== null && state.tag !== '?') || + (state.dump && state.dump.length > 1024); + + if (explicitPair) { + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += '?'; + } else { + pairBuffer += '? '; + } + } + + pairBuffer += state.dump; + + if (explicitPair) { + pairBuffer += generateNextLine(state, level); + } + + if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { + continue; // Skip this pair because of invalid value. + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += ':'; + } else { + pairBuffer += ': '; + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = _result || '{}'; // Empty mapping if no valid pairs. +} + +function detectType(state, object, explicit) { + var _result, typeList, index, length, type, style; + + typeList = explicit ? state.explicitTypes : state.implicitTypes; + + for (index = 0, length = typeList.length; index < length; index += 1) { + type = typeList[index]; + + if ((type.instanceOf || type.predicate) && + (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && + (!type.predicate || type.predicate(object))) { + + state.tag = explicit ? type.tag : '?'; + + if (type.represent) { + style = state.styleMap[type.tag] || type.defaultStyle; + + if (_toString.call(type.represent) === '[object Function]') { + _result = type.represent(object, style); + } else if (_hasOwnProperty.call(type.represent, style)) { + _result = type.represent[style](object, style); + } else { + throw new YAMLException('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); + } + + state.dump = _result; + } + + return true; + } + } + + return false; +} + +// Serializes `object` and writes it to global `result`. +// Returns true on success, or false on invalid object. +// +function writeNode(state, level, object, block, compact, iskey) { + state.tag = null; + state.dump = object; + + if (!detectType(state, object, false)) { + detectType(state, object, true); + } + + var type = _toString.call(state.dump); + + if (block) { + block = (state.flowLevel < 0 || state.flowLevel > level); + } + + var objectOrArray = type === '[object Object]' || type === '[object Array]', + duplicateIndex, + duplicate; + + if (objectOrArray) { + duplicateIndex = state.duplicates.indexOf(object); + duplicate = duplicateIndex !== -1; + } + + if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { + compact = false; + } + + if (duplicate && state.usedDuplicates[duplicateIndex]) { + state.dump = '*ref_' + duplicateIndex; + } else { + if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { + state.usedDuplicates[duplicateIndex] = true; + } + if (type === '[object Object]') { + if (block && (Object.keys(state.dump).length !== 0)) { + writeBlockMapping(state, level, state.dump, compact); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowMapping(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object Array]') { + var arrayLevel = (state.noArrayIndent && (level > 0)) ? level - 1 : level; + if (block && (state.dump.length !== 0)) { + writeBlockSequence(state, arrayLevel, state.dump, compact); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowSequence(state, arrayLevel, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object String]') { + if (state.tag !== '?') { + writeScalar(state, state.dump, level, iskey); + } + } else { + if (state.skipInvalid) return false; + throw new YAMLException('unacceptable kind of an object to dump ' + type); + } + + if (state.tag !== null && state.tag !== '?') { + state.dump = '!<' + state.tag + '> ' + state.dump; + } + } + + return true; +} + +function getDuplicateReferences(object, state) { + var objects = [], + duplicatesIndexes = [], + index, + length; + + inspectNode(object, objects, duplicatesIndexes); + + for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { + state.duplicates.push(objects[duplicatesIndexes[index]]); + } + state.usedDuplicates = new Array(length); +} + +function inspectNode(object, objects, duplicatesIndexes) { + var objectKeyList, + index, + length; + + if (object !== null && typeof object === 'object') { + index = objects.indexOf(object); + if (index !== -1) { + if (duplicatesIndexes.indexOf(index) === -1) { + duplicatesIndexes.push(index); + } + } else { + objects.push(object); + + if (Array.isArray(object)) { + for (index = 0, length = object.length; index < length; index += 1) { + inspectNode(object[index], objects, duplicatesIndexes); + } + } else { + objectKeyList = Object.keys(object); + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); + } + } + } + } +} + +function dump(input, options) { + options = options || {}; + + var state = new State(options); + + if (!state.noRefs) getDuplicateReferences(input, state); + + if (writeNode(state, 0, input, true, true)) return state.dump + '\n'; + + return ''; +} + +function safeDump(input, options) { + return dump(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + +module.exports.dump = dump; +module.exports.safeDump = safeDump; + + +/***/ }), + +/***/ 5199: +/***/ ((module) => { + +"use strict"; +// YAML error class. http://stackoverflow.com/questions/8458984 +// + + +function YAMLException(reason, mark) { + // Super constructor + Error.call(this); + + this.name = 'YAMLException'; + this.reason = reason; + this.mark = mark; + this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : ''); + + // Include stack trace in error object + if (Error.captureStackTrace) { + // Chrome and NodeJS + Error.captureStackTrace(this, this.constructor); + } else { + // FF, IE 10+ and Safari 6+. Fallback for others + this.stack = (new Error()).stack || ''; + } +} + + +// Inherit from Error +YAMLException.prototype = Object.create(Error.prototype); +YAMLException.prototype.constructor = YAMLException; + + +YAMLException.prototype.toString = function toString(compact) { + var result = this.name + ': '; + + result += this.reason || '(unknown reason)'; + + if (!compact && this.mark) { + result += ' ' + this.mark.toString(); + } + + return result; +}; + + +module.exports = YAMLException; + + +/***/ }), + +/***/ 5190: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +/*eslint-disable max-len,no-use-before-define*/ + +var common = __nccwpck_require__(9136); +var YAMLException = __nccwpck_require__(5199); +var Mark = __nccwpck_require__(5426); +var DEFAULT_SAFE_SCHEMA = __nccwpck_require__(8949); +var DEFAULT_FULL_SCHEMA = __nccwpck_require__(6874); + + +var _hasOwnProperty = Object.prototype.hasOwnProperty; + + +var CONTEXT_FLOW_IN = 1; +var CONTEXT_FLOW_OUT = 2; +var CONTEXT_BLOCK_IN = 3; +var CONTEXT_BLOCK_OUT = 4; + + +var CHOMPING_CLIP = 1; +var CHOMPING_STRIP = 2; +var CHOMPING_KEEP = 3; + + +var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; +var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; +var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; +var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; + + +function _class(obj) { return Object.prototype.toString.call(obj); } + +function is_EOL(c) { + return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); +} + +function is_WHITE_SPACE(c) { + return (c === 0x09/* Tab */) || (c === 0x20/* Space */); +} + +function is_WS_OR_EOL(c) { + return (c === 0x09/* Tab */) || + (c === 0x20/* Space */) || + (c === 0x0A/* LF */) || + (c === 0x0D/* CR */); +} + +function is_FLOW_INDICATOR(c) { + return c === 0x2C/* , */ || + c === 0x5B/* [ */ || + c === 0x5D/* ] */ || + c === 0x7B/* { */ || + c === 0x7D/* } */; +} + +function fromHexCode(c) { + var lc; + + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; + } + + /*eslint-disable no-bitwise*/ + lc = c | 0x20; + + if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) { + return lc - 0x61 + 10; + } + + return -1; +} + +function escapedHexLen(c) { + if (c === 0x78/* x */) { return 2; } + if (c === 0x75/* u */) { return 4; } + if (c === 0x55/* U */) { return 8; } + return 0; +} + +function fromDecimalCode(c) { + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; + } + + return -1; +} + +function simpleEscapeSequence(c) { + /* eslint-disable indent */ + return (c === 0x30/* 0 */) ? '\x00' : + (c === 0x61/* a */) ? '\x07' : + (c === 0x62/* b */) ? '\x08' : + (c === 0x74/* t */) ? '\x09' : + (c === 0x09/* Tab */) ? '\x09' : + (c === 0x6E/* n */) ? '\x0A' : + (c === 0x76/* v */) ? '\x0B' : + (c === 0x66/* f */) ? '\x0C' : + (c === 0x72/* r */) ? '\x0D' : + (c === 0x65/* e */) ? '\x1B' : + (c === 0x20/* Space */) ? ' ' : + (c === 0x22/* " */) ? '\x22' : + (c === 0x2F/* / */) ? '/' : + (c === 0x5C/* \ */) ? '\x5C' : + (c === 0x4E/* N */) ? '\x85' : + (c === 0x5F/* _ */) ? '\xA0' : + (c === 0x4C/* L */) ? '\u2028' : + (c === 0x50/* P */) ? '\u2029' : ''; +} + +function charFromCodepoint(c) { + if (c <= 0xFFFF) { + return String.fromCharCode(c); + } + // Encode UTF-16 surrogate pair + // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF + return String.fromCharCode( + ((c - 0x010000) >> 10) + 0xD800, + ((c - 0x010000) & 0x03FF) + 0xDC00 + ); +} + +var simpleEscapeCheck = new Array(256); // integer, for fast access +var simpleEscapeMap = new Array(256); +for (var i = 0; i < 256; i++) { + simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; + simpleEscapeMap[i] = simpleEscapeSequence(i); +} + + +function State(input, options) { + this.input = input; + + this.filename = options['filename'] || null; + this.schema = options['schema'] || DEFAULT_FULL_SCHEMA; + this.onWarning = options['onWarning'] || null; + this.legacy = options['legacy'] || false; + this.json = options['json'] || false; + this.listener = options['listener'] || null; + + this.implicitTypes = this.schema.compiledImplicit; + this.typeMap = this.schema.compiledTypeMap; + + this.length = input.length; + this.position = 0; + this.line = 0; + this.lineStart = 0; + this.lineIndent = 0; + + this.documents = []; + + /* + this.version; + this.checkLineBreaks; + this.tagMap; + this.anchorMap; + this.tag; + this.anchor; + this.kind; + this.result;*/ + +} + + +function generateError(state, message) { + return new YAMLException( + message, + new Mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart))); +} + +function throwError(state, message) { + throw generateError(state, message); +} + +function throwWarning(state, message) { + if (state.onWarning) { + state.onWarning.call(null, generateError(state, message)); + } +} + + +var directiveHandlers = { + + YAML: function handleYamlDirective(state, name, args) { + + var match, major, minor; + + if (state.version !== null) { + throwError(state, 'duplication of %YAML directive'); + } + + if (args.length !== 1) { + throwError(state, 'YAML directive accepts exactly one argument'); + } + + match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); + + if (match === null) { + throwError(state, 'ill-formed argument of the YAML directive'); + } + + major = parseInt(match[1], 10); + minor = parseInt(match[2], 10); + + if (major !== 1) { + throwError(state, 'unacceptable YAML version of the document'); + } + + state.version = args[0]; + state.checkLineBreaks = (minor < 2); + + if (minor !== 1 && minor !== 2) { + throwWarning(state, 'unsupported YAML version of the document'); + } + }, + + TAG: function handleTagDirective(state, name, args) { + + var handle, prefix; + + if (args.length !== 2) { + throwError(state, 'TAG directive accepts exactly two arguments'); + } + + handle = args[0]; + prefix = args[1]; + + if (!PATTERN_TAG_HANDLE.test(handle)) { + throwError(state, 'ill-formed tag handle (first argument) of the TAG directive'); + } + + if (_hasOwnProperty.call(state.tagMap, handle)) { + throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); + } + + if (!PATTERN_TAG_URI.test(prefix)) { + throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive'); + } + + state.tagMap[handle] = prefix; + } +}; + + +function captureSegment(state, start, end, checkJson) { + var _position, _length, _character, _result; + + if (start < end) { + _result = state.input.slice(start, end); + + if (checkJson) { + for (_position = 0, _length = _result.length; _position < _length; _position += 1) { + _character = _result.charCodeAt(_position); + if (!(_character === 0x09 || + (0x20 <= _character && _character <= 0x10FFFF))) { + throwError(state, 'expected valid JSON character'); + } + } + } else if (PATTERN_NON_PRINTABLE.test(_result)) { + throwError(state, 'the stream contains non-printable characters'); + } + + state.result += _result; + } +} + +function mergeMappings(state, destination, source, overridableKeys) { + var sourceKeys, key, index, quantity; + + if (!common.isObject(source)) { + throwError(state, 'cannot merge mappings; the provided source object is unacceptable'); + } + + sourceKeys = Object.keys(source); + + for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { + key = sourceKeys[index]; + + if (!_hasOwnProperty.call(destination, key)) { + destination[key] = source[key]; + overridableKeys[key] = true; + } + } +} + +function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startPos) { + var index, quantity; + + // The output is a plain object here, so keys can only be strings. + // We need to convert keyNode to a string, but doing so can hang the process + // (deeply nested arrays that explode exponentially using aliases). + if (Array.isArray(keyNode)) { + keyNode = Array.prototype.slice.call(keyNode); + + for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { + if (Array.isArray(keyNode[index])) { + throwError(state, 'nested arrays are not supported inside keys'); + } + + if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') { + keyNode[index] = '[object Object]'; + } + } + } + + // Avoid code execution in load() via toString property + // (still use its own toString for arrays, timestamps, + // and whatever user schema extensions happen to have @@toStringTag) + if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') { + keyNode = '[object Object]'; + } + + + keyNode = String(keyNode); + + if (_result === null) { + _result = {}; + } + + if (keyTag === 'tag:yaml.org,2002:merge') { + if (Array.isArray(valueNode)) { + for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { + mergeMappings(state, _result, valueNode[index], overridableKeys); + } + } else { + mergeMappings(state, _result, valueNode, overridableKeys); + } + } else { + if (!state.json && + !_hasOwnProperty.call(overridableKeys, keyNode) && + _hasOwnProperty.call(_result, keyNode)) { + state.line = startLine || state.line; + state.position = startPos || state.position; + throwError(state, 'duplicated mapping key'); + } + _result[keyNode] = valueNode; + delete overridableKeys[keyNode]; + } + + return _result; +} + +function readLineBreak(state) { + var ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x0A/* LF */) { + state.position++; + } else if (ch === 0x0D/* CR */) { + state.position++; + if (state.input.charCodeAt(state.position) === 0x0A/* LF */) { + state.position++; + } + } else { + throwError(state, 'a line break is expected'); + } + + state.line += 1; + state.lineStart = state.position; +} + +function skipSeparationSpace(state, allowComments, checkIndent) { + var lineBreaks = 0, + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (allowComments && ch === 0x23/* # */) { + do { + ch = state.input.charCodeAt(++state.position); + } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0); + } + + if (is_EOL(ch)) { + readLineBreak(state); + + ch = state.input.charCodeAt(state.position); + lineBreaks++; + state.lineIndent = 0; + + while (ch === 0x20/* Space */) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + } else { + break; + } + } + + if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { + throwWarning(state, 'deficient indentation'); + } + + return lineBreaks; +} + +function testDocumentSeparator(state) { + var _position = state.position, + ch; + + ch = state.input.charCodeAt(_position); + + // Condition state.position === state.lineStart is tested + // in parent on each call, for efficiency. No needs to test here again. + if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) && + ch === state.input.charCodeAt(_position + 1) && + ch === state.input.charCodeAt(_position + 2)) { + + _position += 3; + + ch = state.input.charCodeAt(_position); + + if (ch === 0 || is_WS_OR_EOL(ch)) { + return true; + } + } + + return false; +} + +function writeFoldedLines(state, count) { + if (count === 1) { + state.result += ' '; + } else if (count > 1) { + state.result += common.repeat('\n', count - 1); + } +} + + +function readPlainScalar(state, nodeIndent, withinFlowCollection) { + var preceding, + following, + captureStart, + captureEnd, + hasPendingContent, + _line, + _lineStart, + _lineIndent, + _kind = state.kind, + _result = state.result, + ch; + + ch = state.input.charCodeAt(state.position); + + if (is_WS_OR_EOL(ch) || + is_FLOW_INDICATOR(ch) || + ch === 0x23/* # */ || + ch === 0x26/* & */ || + ch === 0x2A/* * */ || + ch === 0x21/* ! */ || + ch === 0x7C/* | */ || + ch === 0x3E/* > */ || + ch === 0x27/* ' */ || + ch === 0x22/* " */ || + ch === 0x25/* % */ || + ch === 0x40/* @ */ || + ch === 0x60/* ` */) { + return false; + } + + if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + return false; + } + } + + state.kind = 'scalar'; + state.result = ''; + captureStart = captureEnd = state.position; + hasPendingContent = false; + + while (ch !== 0) { + if (ch === 0x3A/* : */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + break; + } + + } else if (ch === 0x23/* # */) { + preceding = state.input.charCodeAt(state.position - 1); + + if (is_WS_OR_EOL(preceding)) { + break; + } + + } else if ((state.position === state.lineStart && testDocumentSeparator(state)) || + withinFlowCollection && is_FLOW_INDICATOR(ch)) { + break; + + } else if (is_EOL(ch)) { + _line = state.line; + _lineStart = state.lineStart; + _lineIndent = state.lineIndent; + skipSeparationSpace(state, false, -1); + + if (state.lineIndent >= nodeIndent) { + hasPendingContent = true; + ch = state.input.charCodeAt(state.position); + continue; + } else { + state.position = captureEnd; + state.line = _line; + state.lineStart = _lineStart; + state.lineIndent = _lineIndent; + break; + } + } + + if (hasPendingContent) { + captureSegment(state, captureStart, captureEnd, false); + writeFoldedLines(state, state.line - _line); + captureStart = captureEnd = state.position; + hasPendingContent = false; + } + + if (!is_WHITE_SPACE(ch)) { + captureEnd = state.position + 1; + } + + ch = state.input.charCodeAt(++state.position); + } + + captureSegment(state, captureStart, captureEnd, false); + + if (state.result) { + return true; + } + + state.kind = _kind; + state.result = _result; + return false; +} + +function readSingleQuotedScalar(state, nodeIndent) { + var ch, + captureStart, captureEnd; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x27/* ' */) { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + if (ch === 0x27/* ' */) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x27/* ' */) { + captureStart = state.position; + state.position++; + captureEnd = state.position; + } else { + return true; + } + + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a single quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError(state, 'unexpected end of the stream within a single quoted scalar'); +} + +function readDoubleQuotedScalar(state, nodeIndent) { + var captureStart, + captureEnd, + hexLength, + hexResult, + tmp, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x22/* " */) { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + if (ch === 0x22/* " */) { + captureSegment(state, captureStart, state.position, true); + state.position++; + return true; + + } else if (ch === 0x5C/* \ */) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (is_EOL(ch)) { + skipSeparationSpace(state, false, nodeIndent); + + // TODO: rework to inline fn with no type cast? + } else if (ch < 256 && simpleEscapeCheck[ch]) { + state.result += simpleEscapeMap[ch]; + state.position++; + + } else if ((tmp = escapedHexLen(ch)) > 0) { + hexLength = tmp; + hexResult = 0; + + for (; hexLength > 0; hexLength--) { + ch = state.input.charCodeAt(++state.position); + + if ((tmp = fromHexCode(ch)) >= 0) { + hexResult = (hexResult << 4) + tmp; + + } else { + throwError(state, 'expected hexadecimal character'); + } + } + + state.result += charFromCodepoint(hexResult); + + state.position++; + + } else { + throwError(state, 'unknown escape sequence'); + } + + captureStart = captureEnd = state.position; + + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a double quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError(state, 'unexpected end of the stream within a double quoted scalar'); +} + +function readFlowCollection(state, nodeIndent) { + var readNext = true, + _line, + _tag = state.tag, + _result, + _anchor = state.anchor, + following, + terminator, + isPair, + isExplicitPair, + isMapping, + overridableKeys = {}, + keyNode, + keyTag, + valueNode, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x5B/* [ */) { + terminator = 0x5D;/* ] */ + isMapping = false; + _result = []; + } else if (ch === 0x7B/* { */) { + terminator = 0x7D;/* } */ + isMapping = true; + _result = {}; + } else { + return false; + } + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(++state.position); + + while (ch !== 0) { + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if (ch === terminator) { + state.position++; + state.tag = _tag; + state.anchor = _anchor; + state.kind = isMapping ? 'mapping' : 'sequence'; + state.result = _result; + return true; + } else if (!readNext) { + throwError(state, 'missed comma between flow collection entries'); + } + + keyTag = keyNode = valueNode = null; + isPair = isExplicitPair = false; + + if (ch === 0x3F/* ? */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following)) { + isPair = isExplicitPair = true; + state.position++; + skipSeparationSpace(state, true, nodeIndent); + } + } + + _line = state.line; + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + keyTag = state.tag; + keyNode = state.result; + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) { + isPair = true; + ch = state.input.charCodeAt(++state.position); + skipSeparationSpace(state, true, nodeIndent); + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + valueNode = state.result; + } + + if (isMapping) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode); + } else if (isPair) { + _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode)); + } else { + _result.push(keyNode); + } + + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x2C/* , */) { + readNext = true; + ch = state.input.charCodeAt(++state.position); + } else { + readNext = false; + } + } + + throwError(state, 'unexpected end of the stream within a flow collection'); +} + +function readBlockScalar(state, nodeIndent) { + var captureStart, + folding, + chomping = CHOMPING_CLIP, + didReadContent = false, + detectedIndent = false, + textIndent = nodeIndent, + emptyLines = 0, + atMoreIndented = false, + tmp, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x7C/* | */) { + folding = false; + } else if (ch === 0x3E/* > */) { + folding = true; + } else { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + + while (ch !== 0) { + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x2B/* + */ || ch === 0x2D/* - */) { + if (CHOMPING_CLIP === chomping) { + chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP; + } else { + throwError(state, 'repeat of a chomping mode identifier'); + } + + } else if ((tmp = fromDecimalCode(ch)) >= 0) { + if (tmp === 0) { + throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); + } else if (!detectedIndent) { + textIndent = nodeIndent + tmp - 1; + detectedIndent = true; + } else { + throwError(state, 'repeat of an indentation width identifier'); + } + + } else { + break; + } + } + + if (is_WHITE_SPACE(ch)) { + do { ch = state.input.charCodeAt(++state.position); } + while (is_WHITE_SPACE(ch)); + + if (ch === 0x23/* # */) { + do { ch = state.input.charCodeAt(++state.position); } + while (!is_EOL(ch) && (ch !== 0)); + } + } + + while (ch !== 0) { + readLineBreak(state); + state.lineIndent = 0; + + ch = state.input.charCodeAt(state.position); + + while ((!detectedIndent || state.lineIndent < textIndent) && + (ch === 0x20/* Space */)) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + + if (!detectedIndent && state.lineIndent > textIndent) { + textIndent = state.lineIndent; + } + + if (is_EOL(ch)) { + emptyLines++; + continue; + } + + // End of the scalar. + if (state.lineIndent < textIndent) { + + // Perform the chomping. + if (chomping === CHOMPING_KEEP) { + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + } else if (chomping === CHOMPING_CLIP) { + if (didReadContent) { // i.e. only if the scalar is not empty. + state.result += '\n'; + } + } + + // Break this `while` cycle and go to the funciton's epilogue. + break; + } + + // Folded style: use fancy rules to handle line breaks. + if (folding) { + + // Lines starting with white space characters (more-indented lines) are not folded. + if (is_WHITE_SPACE(ch)) { + atMoreIndented = true; + // except for the first content line (cf. Example 8.1) + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + + // End of more-indented block. + } else if (atMoreIndented) { + atMoreIndented = false; + state.result += common.repeat('\n', emptyLines + 1); + + // Just one line break - perceive as the same line. + } else if (emptyLines === 0) { + if (didReadContent) { // i.e. only if we have already read some scalar content. + state.result += ' '; + } + + // Several line breaks - perceive as different lines. + } else { + state.result += common.repeat('\n', emptyLines); + } + + // Literal style: just add exact number of line breaks between content lines. + } else { + // Keep all line breaks except the header line break. + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + } + + didReadContent = true; + detectedIndent = true; + emptyLines = 0; + captureStart = state.position; + + while (!is_EOL(ch) && (ch !== 0)) { + ch = state.input.charCodeAt(++state.position); + } + + captureSegment(state, captureStart, state.position, false); + } + + return true; +} + +function readBlockSequence(state, nodeIndent) { + var _line, + _tag = state.tag, + _anchor = state.anchor, + _result = [], + following, + detected = false, + ch; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + + if (ch !== 0x2D/* - */) { + break; + } + + following = state.input.charCodeAt(state.position + 1); + + if (!is_WS_OR_EOL(following)) { + break; + } + + detected = true; + state.position++; + + if (skipSeparationSpace(state, true, -1)) { + if (state.lineIndent <= nodeIndent) { + _result.push(null); + ch = state.input.charCodeAt(state.position); + continue; + } + } + + _line = state.line; + composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); + _result.push(state.result); + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { + throwError(state, 'bad indentation of a sequence entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'sequence'; + state.result = _result; + return true; + } + return false; +} + +function readBlockMapping(state, nodeIndent, flowIndent) { + var following, + allowCompact, + _line, + _pos, + _tag = state.tag, + _anchor = state.anchor, + _result = {}, + overridableKeys = {}, + keyTag = null, + keyNode = null, + valueNode = null, + atExplicitKey = false, + detected = false, + ch; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + following = state.input.charCodeAt(state.position + 1); + _line = state.line; // Save the current line. + _pos = state.position; + + // + // Explicit notation case. There are two separate blocks: + // first for the key (denoted by "?") and second for the value (denoted by ":") + // + if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { + + if (ch === 0x3F/* ? */) { + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = true; + allowCompact = true; + + } else if (atExplicitKey) { + // i.e. 0x3A/* : */ === character after the explicit key. + atExplicitKey = false; + allowCompact = true; + + } else { + throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); + } + + state.position += 1; + ch = following; + + // + // Implicit notation case. Flow-style node as the key first, then ":", and the value. + // + } else if (composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { + + if (state.line === _line) { + ch = state.input.charCodeAt(state.position); + + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (ch === 0x3A/* : */) { + ch = state.input.charCodeAt(++state.position); + + if (!is_WS_OR_EOL(ch)) { + throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping'); + } + + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = false; + allowCompact = false; + keyTag = state.tag; + keyNode = state.result; + + } else if (detected) { + throwError(state, 'can not read an implicit mapping pair; a colon is missed'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + + } else if (detected) { + throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + + } else { + break; // Reading is done. Go to the epilogue. + } + + // + // Common reading code for both explicit and implicit notations. + // + if (state.line === _line || state.lineIndent > nodeIndent) { + if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { + if (atExplicitKey) { + keyNode = state.result; + } else { + valueNode = state.result; + } + } + + if (!atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _pos); + keyTag = keyNode = valueNode = null; + } + + skipSeparationSpace(state, true, -1); + ch = state.input.charCodeAt(state.position); + } + + if (state.lineIndent > nodeIndent && (ch !== 0)) { + throwError(state, 'bad indentation of a mapping entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + // + // Epilogue. + // + + // Special case: last mapping's node contains only the key in explicit notation. + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); + } + + // Expose the resulting mapping. + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'mapping'; + state.result = _result; + } + + return detected; +} + +function readTagProperty(state) { + var _position, + isVerbatim = false, + isNamed = false, + tagHandle, + tagName, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x21/* ! */) return false; + + if (state.tag !== null) { + throwError(state, 'duplication of a tag property'); + } + + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x3C/* < */) { + isVerbatim = true; + ch = state.input.charCodeAt(++state.position); + + } else if (ch === 0x21/* ! */) { + isNamed = true; + tagHandle = '!!'; + ch = state.input.charCodeAt(++state.position); + + } else { + tagHandle = '!'; + } + + _position = state.position; + + if (isVerbatim) { + do { ch = state.input.charCodeAt(++state.position); } + while (ch !== 0 && ch !== 0x3E/* > */); + + if (state.position < state.length) { + tagName = state.input.slice(_position, state.position); + ch = state.input.charCodeAt(++state.position); + } else { + throwError(state, 'unexpected end of the stream within a verbatim tag'); + } + } else { + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + + if (ch === 0x21/* ! */) { + if (!isNamed) { + tagHandle = state.input.slice(_position - 1, state.position + 1); + + if (!PATTERN_TAG_HANDLE.test(tagHandle)) { + throwError(state, 'named tag handle cannot contain such characters'); + } + + isNamed = true; + _position = state.position + 1; + } else { + throwError(state, 'tag suffix cannot contain exclamation marks'); + } + } + + ch = state.input.charCodeAt(++state.position); + } + + tagName = state.input.slice(_position, state.position); + + if (PATTERN_FLOW_INDICATORS.test(tagName)) { + throwError(state, 'tag suffix cannot contain flow indicator characters'); + } + } + + if (tagName && !PATTERN_TAG_URI.test(tagName)) { + throwError(state, 'tag name cannot contain such characters: ' + tagName); + } + + if (isVerbatim) { + state.tag = tagName; + + } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) { + state.tag = state.tagMap[tagHandle] + tagName; + + } else if (tagHandle === '!') { + state.tag = '!' + tagName; + + } else if (tagHandle === '!!') { + state.tag = 'tag:yaml.org,2002:' + tagName; + + } else { + throwError(state, 'undeclared tag handle "' + tagHandle + '"'); + } + + return true; +} + +function readAnchorProperty(state) { + var _position, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x26/* & */) return false; + + if (state.anchor !== null) { + throwError(state, 'duplication of an anchor property'); + } + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an anchor node must contain at least one character'); + } + + state.anchor = state.input.slice(_position, state.position); + return true; +} + +function readAlias(state) { + var _position, alias, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x2A/* * */) return false; + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an alias node must contain at least one character'); + } + + alias = state.input.slice(_position, state.position); + + if (!state.anchorMap.hasOwnProperty(alias)) { + throwError(state, 'unidentified alias "' + alias + '"'); + } + + state.result = state.anchorMap[alias]; + skipSeparationSpace(state, true, -1); + return true; +} + +function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { + var allowBlockStyles, + allowBlockScalars, + allowBlockCollections, + indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } + } + + if (indentStatus === 1) { + while (readTagProperty(state) || readAnchorProperty(state)) { + if (skipSeparationSpace(state, true, -1)) { + atNewLine = true; + allowBlockCollections = allowBlockStyles; + + if (state.lineIndent > parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } else { + allowBlockCollections = false; + } + } + } + + if (allowBlockCollections) { + allowBlockCollections = atNewLine || allowCompact; + } + + if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { + if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { + flowIndent = parentIndent; + } else { + flowIndent = parentIndent + 1; + } + + blockIndent = state.position - state.lineStart; + + if (indentStatus === 1) { + if (allowBlockCollections && + (readBlockSequence(state, blockIndent) || + readBlockMapping(state, blockIndent, flowIndent)) || + readFlowCollection(state, flowIndent)) { + hasContent = true; + } else { + if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || + readSingleQuotedScalar(state, flowIndent) || + readDoubleQuotedScalar(state, flowIndent)) { + hasContent = true; + + } else if (readAlias(state)) { + hasContent = true; + + if (state.tag !== null || state.anchor !== null) { + throwError(state, 'alias node should not have any properties'); + } + + } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { + hasContent = true; + + if (state.tag === null) { + state.tag = '?'; + } + } + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } else if (indentStatus === 0) { + // Special case: block sequences are allowed to have same indentation level as the parent. + // http://www.yaml.org/spec/1.2/spec.html#id2799784 + hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); + } + } + + if (state.tag !== null && state.tag !== '!') { + if (state.tag === '?') { + // Implicit resolving is not allowed for non-scalar types, and '?' + // non-specific tag is only automatically assigned to plain scalars. + // + // We only need to check kind conformity in case user explicitly assigns '?' + // tag, for example like this: "! [0]" + // + if (state.result !== null && state.kind !== 'scalar') { + throwError(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); + } + + for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { + type = state.implicitTypes[typeIndex]; + + if (type.resolve(state.result)) { // `state.result` updated in resolver if matched + state.result = type.construct(state.result); + state.tag = type.tag; + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + break; + } + } + } else if (_hasOwnProperty.call(state.typeMap[state.kind || 'fallback'], state.tag)) { + type = state.typeMap[state.kind || 'fallback'][state.tag]; + + if (state.result !== null && type.kind !== state.kind) { + throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); + } + + if (!type.resolve(state.result)) { // `state.result` updated in resolver if matched + throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); + } else { + state.result = type.construct(state.result); + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } else { + throwError(state, 'unknown tag !<' + state.tag + '>'); + } + } + + if (state.listener !== null) { + state.listener('close', state); + } + return state.tag !== null || state.anchor !== null || hasContent; +} + +function readDocument(state) { + var documentStart = state.position, + _position, + directiveName, + directiveArgs, + hasDirectives = false, + ch; + + state.version = null; + state.checkLineBreaks = state.legacy; + state.tagMap = {}; + state.anchorMap = {}; + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if (state.lineIndent > 0 || ch !== 0x25/* % */) { + break; + } + + hasDirectives = true; + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + directiveName = state.input.slice(_position, state.position); + directiveArgs = []; + + if (directiveName.length < 1) { + throwError(state, 'directive name must not be less than one character in length'); + } + + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (ch === 0x23/* # */) { + do { ch = state.input.charCodeAt(++state.position); } + while (ch !== 0 && !is_EOL(ch)); + break; + } + + if (is_EOL(ch)) break; + + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + directiveArgs.push(state.input.slice(_position, state.position)); + } + + if (ch !== 0) readLineBreak(state); + + if (_hasOwnProperty.call(directiveHandlers, directiveName)) { + directiveHandlers[directiveName](state, directiveName, directiveArgs); + } else { + throwWarning(state, 'unknown document directive "' + directiveName + '"'); + } + } + + skipSeparationSpace(state, true, -1); + + if (state.lineIndent === 0 && + state.input.charCodeAt(state.position) === 0x2D/* - */ && + state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && + state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { + state.position += 3; + skipSeparationSpace(state, true, -1); + + } else if (hasDirectives) { + throwError(state, 'directives end mark is expected'); + } + + composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); + skipSeparationSpace(state, true, -1); + + if (state.checkLineBreaks && + PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { + throwWarning(state, 'non-ASCII line breaks are interpreted as content'); + } + + state.documents.push(state.result); + + if (state.position === state.lineStart && testDocumentSeparator(state)) { + + if (state.input.charCodeAt(state.position) === 0x2E/* . */) { + state.position += 3; + skipSeparationSpace(state, true, -1); + } + return; + } + + if (state.position < (state.length - 1)) { + throwError(state, 'end of the stream or a document separator is expected'); + } else { + return; + } +} + + +function loadDocuments(input, options) { + input = String(input); + options = options || {}; + + if (input.length !== 0) { + + // Add tailing `\n` if not exists + if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && + input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { + input += '\n'; + } + + // Strip BOM + if (input.charCodeAt(0) === 0xFEFF) { + input = input.slice(1); + } + } + + var state = new State(input, options); + + var nullpos = input.indexOf('\0'); + + if (nullpos !== -1) { + state.position = nullpos; + throwError(state, 'null byte is not allowed in input'); + } + + // Use 0 as string terminator. That significantly simplifies bounds check. + state.input += '\0'; + + while (state.input.charCodeAt(state.position) === 0x20/* Space */) { + state.lineIndent += 1; + state.position += 1; + } + + while (state.position < (state.length - 1)) { + readDocument(state); + } + + return state.documents; +} + + +function loadAll(input, iterator, options) { + if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') { + options = iterator; + iterator = null; + } + + var documents = loadDocuments(input, options); + + if (typeof iterator !== 'function') { + return documents; + } + + for (var index = 0, length = documents.length; index < length; index += 1) { + iterator(documents[index]); + } +} + + +function load(input, options) { + var documents = loadDocuments(input, options); + + if (documents.length === 0) { + /*eslint-disable no-undefined*/ + return undefined; + } else if (documents.length === 1) { + return documents[0]; + } + throw new YAMLException('expected a single document in the stream, but found more'); +} + + +function safeLoadAll(input, iterator, options) { + if (typeof iterator === 'object' && iterator !== null && typeof options === 'undefined') { + options = iterator; + iterator = null; + } + + return loadAll(input, iterator, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + + +function safeLoad(input, options) { + return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); +} + + +module.exports.loadAll = loadAll; +module.exports.load = load; +module.exports.safeLoadAll = safeLoadAll; +module.exports.safeLoad = safeLoad; + + +/***/ }), + +/***/ 5426: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + + +var common = __nccwpck_require__(9136); + + +function Mark(name, buffer, position, line, column) { + this.name = name; + this.buffer = buffer; + this.position = position; + this.line = line; + this.column = column; +} + + +Mark.prototype.getSnippet = function getSnippet(indent, maxLength) { + var head, start, tail, end, snippet; + + if (!this.buffer) return null; + + indent = indent || 4; + maxLength = maxLength || 75; + + head = ''; + start = this.position; + + while (start > 0 && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(start - 1)) === -1) { + start -= 1; + if (this.position - start > (maxLength / 2 - 1)) { + head = ' ... '; + start += 5; + break; + } + } + + tail = ''; + end = this.position; + + while (end < this.buffer.length && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(end)) === -1) { + end += 1; + if (end - this.position > (maxLength / 2 - 1)) { + tail = ' ... '; + end -= 5; + break; + } + } + + snippet = this.buffer.slice(start, end); + + return common.repeat(' ', indent) + head + snippet + tail + '\n' + + common.repeat(' ', indent + this.position - start + head.length) + '^'; +}; + + +Mark.prototype.toString = function toString(compact) { + var snippet, where = ''; + + if (this.name) { + where += 'in "' + this.name + '" '; + } + + where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1); + + if (!compact) { + snippet = this.getSnippet(); + + if (snippet) { + where += ':\n' + snippet; + } + } + + return where; +}; + + +module.exports = Mark; + + +/***/ }), + +/***/ 6514: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +/*eslint-disable max-len*/ + +var common = __nccwpck_require__(9136); +var YAMLException = __nccwpck_require__(5199); +var Type = __nccwpck_require__(967); + + +function compileList(schema, name, result) { + var exclude = []; + + schema.include.forEach(function (includedSchema) { + result = compileList(includedSchema, name, result); + }); + + schema[name].forEach(function (currentType) { + result.forEach(function (previousType, previousIndex) { + if (previousType.tag === currentType.tag && previousType.kind === currentType.kind) { + exclude.push(previousIndex); + } + }); + + result.push(currentType); + }); + + return result.filter(function (type, index) { + return exclude.indexOf(index) === -1; + }); +} + + +function compileMap(/* lists... */) { + var result = { + scalar: {}, + sequence: {}, + mapping: {}, + fallback: {} + }, index, length; + + function collectType(type) { + result[type.kind][type.tag] = result['fallback'][type.tag] = type; + } + + for (index = 0, length = arguments.length; index < length; index += 1) { + arguments[index].forEach(collectType); + } + return result; +} + + +function Schema(definition) { + this.include = definition.include || []; + this.implicit = definition.implicit || []; + this.explicit = definition.explicit || []; + + this.implicit.forEach(function (type) { + if (type.loadKind && type.loadKind !== 'scalar') { + throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); + } + }); + + this.compiledImplicit = compileList(this, 'implicit', []); + this.compiledExplicit = compileList(this, 'explicit', []); + this.compiledTypeMap = compileMap(this.compiledImplicit, this.compiledExplicit); +} + + +Schema.DEFAULT = null; + + +Schema.create = function createSchema() { + var schemas, types; + + switch (arguments.length) { + case 1: + schemas = Schema.DEFAULT; + types = arguments[0]; + break; + + case 2: + schemas = arguments[0]; + types = arguments[1]; + break; + + default: + throw new YAMLException('Wrong number of arguments for Schema.create function'); + } + + schemas = common.toArray(schemas); + types = common.toArray(types); + + if (!schemas.every(function (schema) { return schema instanceof Schema; })) { + throw new YAMLException('Specified list of super schemas (or a single Schema object) contains a non-Schema object.'); + } + + if (!types.every(function (type) { return type instanceof Type; })) { + throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + + return new Schema({ + include: schemas, + explicit: types + }); +}; + + +module.exports = Schema; + + +/***/ }), + +/***/ 2183: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; +// Standard YAML's Core schema. +// http://www.yaml.org/spec/1.2/spec.html#id2804923 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, Core schema has no distinctions from JSON schema is JS-YAML. + + + + + +var Schema = __nccwpck_require__(6514); + + +module.exports = new Schema({ + include: [ + __nccwpck_require__(1571) + ] +}); + + +/***/ }), + +/***/ 6874: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; +// JS-YAML's default schema for `load` function. +// It is not described in the YAML specification. +// +// This schema is based on JS-YAML's default safe schema and includes +// JavaScript-specific types: !!js/undefined, !!js/regexp and !!js/function. +// +// Also this schema is used as default base schema at `Schema.create` function. + + + + + +var Schema = __nccwpck_require__(6514); + + +module.exports = Schema.DEFAULT = new Schema({ + include: [ + __nccwpck_require__(8949) + ], + explicit: [ + __nccwpck_require__(5914), + __nccwpck_require__(9242), + __nccwpck_require__(7278) + ] +}); + + +/***/ }), + +/***/ 8949: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; +// JS-YAML's default schema for `safeLoad` function. +// It is not described in the YAML specification. +// +// This schema is based on standard YAML's Core schema and includes most of +// extra types described at YAML tag repository. (http://yaml.org/type/) + + + + + +var Schema = __nccwpck_require__(6514); + + +module.exports = new Schema({ + include: [ + __nccwpck_require__(2183) + ], + implicit: [ + __nccwpck_require__(3714), + __nccwpck_require__(3148) + ], + explicit: [ + __nccwpck_require__(2551), + __nccwpck_require__(6668), + __nccwpck_require__(6039), + __nccwpck_require__(9237) + ] +}); + + +/***/ }), + +/***/ 6037: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; +// Standard YAML's Failsafe schema. +// http://www.yaml.org/spec/1.2/spec.html#id2802346 + + + + + +var Schema = __nccwpck_require__(6514); + + +module.exports = new Schema({ + explicit: [ + __nccwpck_require__(2672), + __nccwpck_require__(5490), + __nccwpck_require__(1173) + ] +}); + + +/***/ }), + +/***/ 1571: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; +// Standard YAML's JSON schema. +// http://www.yaml.org/spec/1.2/spec.html#id2803231 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, this schema is not such strict as defined in the YAML specification. +// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc. + + + + + +var Schema = __nccwpck_require__(6514); + + +module.exports = new Schema({ + include: [ + __nccwpck_require__(6037) + ], + implicit: [ + __nccwpck_require__(2671), + __nccwpck_require__(4675), + __nccwpck_require__(9963), + __nccwpck_require__(5564) + ] +}); + + +/***/ }), + +/***/ 967: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var YAMLException = __nccwpck_require__(5199); + +var TYPE_CONSTRUCTOR_OPTIONS = [ + 'kind', + 'resolve', + 'construct', + 'instanceOf', + 'predicate', + 'represent', + 'defaultStyle', + 'styleAliases' +]; + +var YAML_NODE_KINDS = [ + 'scalar', + 'sequence', + 'mapping' +]; + +function compileStyleAliases(map) { + var result = {}; + + if (map !== null) { + Object.keys(map).forEach(function (style) { + map[style].forEach(function (alias) { + result[String(alias)] = style; + }); + }); + } + + return result; +} + +function Type(tag, options) { + options = options || {}; + + Object.keys(options).forEach(function (name) { + if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { + throw new YAMLException('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); + } + }); + + // TODO: Add tag format check. + this.tag = tag; + this.kind = options['kind'] || null; + this.resolve = options['resolve'] || function () { return true; }; + this.construct = options['construct'] || function (data) { return data; }; + this.instanceOf = options['instanceOf'] || null; + this.predicate = options['predicate'] || null; + this.represent = options['represent'] || null; + this.defaultStyle = options['defaultStyle'] || null; + this.styleAliases = compileStyleAliases(options['styleAliases'] || null); + + if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { + throw new YAMLException('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + } +} + +module.exports = Type; + + +/***/ }), + +/***/ 2551: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +/*eslint-disable no-bitwise*/ + +var NodeBuffer; + +try { + // A trick for browserified version, to not include `Buffer` shim + var _require = require; + NodeBuffer = _require('buffer').Buffer; +} catch (__) {} + +var Type = __nccwpck_require__(967); + + +// [ 64, 65, 66 ] -> [ padding, CR, LF ] +var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; + + +function resolveYamlBinary(data) { + if (data === null) return false; + + var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP; + + // Convert one by one. + for (idx = 0; idx < max; idx++) { + code = map.indexOf(data.charAt(idx)); + + // Skip CR/LF + if (code > 64) continue; + + // Fail on illegal characters + if (code < 0) return false; + + bitlen += 6; + } + + // If there are any bits left, source was corrupted + return (bitlen % 8) === 0; +} + +function constructYamlBinary(data) { + var idx, tailbits, + input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan + max = input.length, + map = BASE64_MAP, + bits = 0, + result = []; + + // Collect by 6*4 bits (3 bytes) + + for (idx = 0; idx < max; idx++) { + if ((idx % 4 === 0) && idx) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } + + bits = (bits << 6) | map.indexOf(input.charAt(idx)); + } + + // Dump tail + + tailbits = (max % 4) * 6; + + if (tailbits === 0) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } else if (tailbits === 18) { + result.push((bits >> 10) & 0xFF); + result.push((bits >> 2) & 0xFF); + } else if (tailbits === 12) { + result.push((bits >> 4) & 0xFF); + } + + // Wrap into Buffer for NodeJS and leave Array for browser + if (NodeBuffer) { + // Support node 6.+ Buffer API when available + return NodeBuffer.from ? NodeBuffer.from(result) : new NodeBuffer(result); + } + + return result; +} + +function representYamlBinary(object /*, style*/) { + var result = '', bits = 0, idx, tail, + max = object.length, + map = BASE64_MAP; + + // Convert every three bytes to 4 ASCII characters. + + for (idx = 0; idx < max; idx++) { + if ((idx % 3 === 0) && idx) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } + + bits = (bits << 8) + object[idx]; + } + + // Dump tail + + tail = max % 3; + + if (tail === 0) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } else if (tail === 2) { + result += map[(bits >> 10) & 0x3F]; + result += map[(bits >> 4) & 0x3F]; + result += map[(bits << 2) & 0x3F]; + result += map[64]; + } else if (tail === 1) { + result += map[(bits >> 2) & 0x3F]; + result += map[(bits << 4) & 0x3F]; + result += map[64]; + result += map[64]; + } + + return result; +} + +function isBinary(object) { + return NodeBuffer && NodeBuffer.isBuffer(object); +} + +module.exports = new Type('tag:yaml.org,2002:binary', { + kind: 'scalar', + resolve: resolveYamlBinary, + construct: constructYamlBinary, + predicate: isBinary, + represent: representYamlBinary +}); + + +/***/ }), + +/***/ 4675: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var Type = __nccwpck_require__(967); + +function resolveYamlBoolean(data) { + if (data === null) return false; + + var max = data.length; + + return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) || + (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); +} + +function constructYamlBoolean(data) { + return data === 'true' || + data === 'True' || + data === 'TRUE'; +} + +function isBoolean(object) { + return Object.prototype.toString.call(object) === '[object Boolean]'; +} + +module.exports = new Type('tag:yaml.org,2002:bool', { + kind: 'scalar', + resolve: resolveYamlBoolean, + construct: constructYamlBoolean, + predicate: isBoolean, + represent: { + lowercase: function (object) { return object ? 'true' : 'false'; }, + uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, + camelcase: function (object) { return object ? 'True' : 'False'; } + }, + defaultStyle: 'lowercase' +}); + + +/***/ }), + +/***/ 5564: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var common = __nccwpck_require__(9136); +var Type = __nccwpck_require__(967); + +var YAML_FLOAT_PATTERN = new RegExp( + // 2.5e4, 2.5 and integers + '^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + + // .2e4, .2 + // special case, seems not from spec + '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + + // 20:59 + '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*' + + // .inf + '|[-+]?\\.(?:inf|Inf|INF)' + + // .nan + '|\\.(?:nan|NaN|NAN))$'); + +function resolveYamlFloat(data) { + if (data === null) return false; + + if (!YAML_FLOAT_PATTERN.test(data) || + // Quick hack to not allow integers end with `_` + // Probably should update regexp & check speed + data[data.length - 1] === '_') { + return false; + } + + return true; +} + +function constructYamlFloat(data) { + var value, sign, base, digits; + + value = data.replace(/_/g, '').toLowerCase(); + sign = value[0] === '-' ? -1 : 1; + digits = []; + + if ('+-'.indexOf(value[0]) >= 0) { + value = value.slice(1); + } + + if (value === '.inf') { + return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; + + } else if (value === '.nan') { + return NaN; + + } else if (value.indexOf(':') >= 0) { + value.split(':').forEach(function (v) { + digits.unshift(parseFloat(v, 10)); + }); + + value = 0.0; + base = 1; + + digits.forEach(function (d) { + value += d * base; + base *= 60; + }); + + return sign * value; + + } + return sign * parseFloat(value, 10); +} + + +var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; + +function representYamlFloat(object, style) { + var res; + + if (isNaN(object)) { + switch (style) { + case 'lowercase': return '.nan'; + case 'uppercase': return '.NAN'; + case 'camelcase': return '.NaN'; + } + } else if (Number.POSITIVE_INFINITY === object) { + switch (style) { + case 'lowercase': return '.inf'; + case 'uppercase': return '.INF'; + case 'camelcase': return '.Inf'; + } + } else if (Number.NEGATIVE_INFINITY === object) { + switch (style) { + case 'lowercase': return '-.inf'; + case 'uppercase': return '-.INF'; + case 'camelcase': return '-.Inf'; + } + } else if (common.isNegativeZero(object)) { + return '-0.0'; + } + + res = object.toString(10); + + // JS stringifier can build scientific format without dots: 5e-100, + // while YAML requres dot: 5.e-100. Fix it with simple hack + + return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res; +} + +function isFloat(object) { + return (Object.prototype.toString.call(object) === '[object Number]') && + (object % 1 !== 0 || common.isNegativeZero(object)); +} + +module.exports = new Type('tag:yaml.org,2002:float', { + kind: 'scalar', + resolve: resolveYamlFloat, + construct: constructYamlFloat, + predicate: isFloat, + represent: representYamlFloat, + defaultStyle: 'lowercase' +}); + + +/***/ }), + +/***/ 9963: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var common = __nccwpck_require__(9136); +var Type = __nccwpck_require__(967); + +function isHexCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || + ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || + ((0x61/* a */ <= c) && (c <= 0x66/* f */)); +} + +function isOctCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); +} + +function isDecCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); +} + +function resolveYamlInteger(data) { + if (data === null) return false; + + var max = data.length, + index = 0, + hasDigits = false, + ch; + + if (!max) return false; + + ch = data[index]; + + // sign + if (ch === '-' || ch === '+') { + ch = data[++index]; + } + + if (ch === '0') { + // 0 + if (index + 1 === max) return true; + ch = data[++index]; + + // base 2, base 8, base 16 + + if (ch === 'b') { + // base 2 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (ch !== '0' && ch !== '1') return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + + if (ch === 'x') { + // base 16 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isHexCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + // base 8 + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isOctCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + // base 10 (except 0) or base 60 + + // value should not start with `_`; + if (ch === '_') return false; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (ch === ':') break; + if (!isDecCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + + // Should have digits and should not end with `_` + if (!hasDigits || ch === '_') return false; + + // if !base60 - done; + if (ch !== ':') return true; + + // base60 almost not used, no needs to optimize + return /^(:[0-5]?[0-9])+$/.test(data.slice(index)); +} + +function constructYamlInteger(data) { + var value = data, sign = 1, ch, base, digits = []; + + if (value.indexOf('_') !== -1) { + value = value.replace(/_/g, ''); + } + + ch = value[0]; + + if (ch === '-' || ch === '+') { + if (ch === '-') sign = -1; + value = value.slice(1); + ch = value[0]; + } + + if (value === '0') return 0; + + if (ch === '0') { + if (value[1] === 'b') return sign * parseInt(value.slice(2), 2); + if (value[1] === 'x') return sign * parseInt(value, 16); + return sign * parseInt(value, 8); + } + + if (value.indexOf(':') !== -1) { + value.split(':').forEach(function (v) { + digits.unshift(parseInt(v, 10)); + }); + + value = 0; + base = 1; + + digits.forEach(function (d) { + value += (d * base); + base *= 60; + }); + + return sign * value; + + } + + return sign * parseInt(value, 10); +} + +function isInteger(object) { + return (Object.prototype.toString.call(object)) === '[object Number]' && + (object % 1 === 0 && !common.isNegativeZero(object)); +} + +module.exports = new Type('tag:yaml.org,2002:int', { + kind: 'scalar', + resolve: resolveYamlInteger, + construct: constructYamlInteger, + predicate: isInteger, + represent: { + binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); }, + octal: function (obj) { return obj >= 0 ? '0' + obj.toString(8) : '-0' + obj.toString(8).slice(1); }, + decimal: function (obj) { return obj.toString(10); }, + /* eslint-disable max-len */ + hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); } + }, + defaultStyle: 'decimal', + styleAliases: { + binary: [ 2, 'bin' ], + octal: [ 8, 'oct' ], + decimal: [ 10, 'dec' ], + hexadecimal: [ 16, 'hex' ] + } +}); + + +/***/ }), + +/***/ 7278: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var esprima; + +// Browserified version does not have esprima +// +// 1. For node.js just require module as deps +// 2. For browser try to require mudule via external AMD system. +// If not found - try to fallback to window.esprima. If not +// found too - then fail to parse. +// +try { + // workaround to exclude package from browserify list. + var _require = require; + esprima = _require('esprima'); +} catch (_) { + /* eslint-disable no-redeclare */ + /* global window */ + if (typeof window !== 'undefined') esprima = window.esprima; +} + +var Type = __nccwpck_require__(967); + +function resolveJavascriptFunction(data) { + if (data === null) return false; + + try { + var source = '(' + data + ')', + ast = esprima.parse(source, { range: true }); + + if (ast.type !== 'Program' || + ast.body.length !== 1 || + ast.body[0].type !== 'ExpressionStatement' || + (ast.body[0].expression.type !== 'ArrowFunctionExpression' && + ast.body[0].expression.type !== 'FunctionExpression')) { + return false; + } + + return true; + } catch (err) { + return false; + } +} + +function constructJavascriptFunction(data) { + /*jslint evil:true*/ + + var source = '(' + data + ')', + ast = esprima.parse(source, { range: true }), + params = [], + body; + + if (ast.type !== 'Program' || + ast.body.length !== 1 || + ast.body[0].type !== 'ExpressionStatement' || + (ast.body[0].expression.type !== 'ArrowFunctionExpression' && + ast.body[0].expression.type !== 'FunctionExpression')) { + throw new Error('Failed to resolve function'); + } + + ast.body[0].expression.params.forEach(function (param) { + params.push(param.name); + }); + + body = ast.body[0].expression.body.range; + + // Esprima's ranges include the first '{' and the last '}' characters on + // function expressions. So cut them out. + if (ast.body[0].expression.body.type === 'BlockStatement') { + /*eslint-disable no-new-func*/ + return new Function(params, source.slice(body[0] + 1, body[1] - 1)); + } + // ES6 arrow functions can omit the BlockStatement. In that case, just return + // the body. + /*eslint-disable no-new-func*/ + return new Function(params, 'return ' + source.slice(body[0], body[1])); +} + +function representJavascriptFunction(object /*, style*/) { + return object.toString(); +} + +function isFunction(object) { + return Object.prototype.toString.call(object) === '[object Function]'; +} + +module.exports = new Type('tag:yaml.org,2002:js/function', { + kind: 'scalar', + resolve: resolveJavascriptFunction, + construct: constructJavascriptFunction, + predicate: isFunction, + represent: representJavascriptFunction +}); + + +/***/ }), + +/***/ 9242: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var Type = __nccwpck_require__(967); + +function resolveJavascriptRegExp(data) { + if (data === null) return false; + if (data.length === 0) return false; + + var regexp = data, + tail = /\/([gim]*)$/.exec(data), + modifiers = ''; + + // if regexp starts with '/' it can have modifiers and must be properly closed + // `/foo/gim` - modifiers tail can be maximum 3 chars + if (regexp[0] === '/') { + if (tail) modifiers = tail[1]; + + if (modifiers.length > 3) return false; + // if expression starts with /, is should be properly terminated + if (regexp[regexp.length - modifiers.length - 1] !== '/') return false; + } + + return true; +} + +function constructJavascriptRegExp(data) { + var regexp = data, + tail = /\/([gim]*)$/.exec(data), + modifiers = ''; + + // `/foo/gim` - tail can be maximum 4 chars + if (regexp[0] === '/') { + if (tail) modifiers = tail[1]; + regexp = regexp.slice(1, regexp.length - modifiers.length - 1); + } + + return new RegExp(regexp, modifiers); +} + +function representJavascriptRegExp(object /*, style*/) { + var result = '/' + object.source + '/'; + + if (object.global) result += 'g'; + if (object.multiline) result += 'm'; + if (object.ignoreCase) result += 'i'; + + return result; +} + +function isRegExp(object) { + return Object.prototype.toString.call(object) === '[object RegExp]'; +} + +module.exports = new Type('tag:yaml.org,2002:js/regexp', { + kind: 'scalar', + resolve: resolveJavascriptRegExp, + construct: constructJavascriptRegExp, + predicate: isRegExp, + represent: representJavascriptRegExp +}); + + +/***/ }), + +/***/ 5914: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var Type = __nccwpck_require__(967); + +function resolveJavascriptUndefined() { + return true; +} + +function constructJavascriptUndefined() { + /*eslint-disable no-undefined*/ + return undefined; +} + +function representJavascriptUndefined() { + return ''; +} + +function isUndefined(object) { + return typeof object === 'undefined'; +} + +module.exports = new Type('tag:yaml.org,2002:js/undefined', { + kind: 'scalar', + resolve: resolveJavascriptUndefined, + construct: constructJavascriptUndefined, + predicate: isUndefined, + represent: representJavascriptUndefined +}); + + +/***/ }), + +/***/ 1173: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var Type = __nccwpck_require__(967); + +module.exports = new Type('tag:yaml.org,2002:map', { + kind: 'mapping', + construct: function (data) { return data !== null ? data : {}; } +}); + + +/***/ }), + +/***/ 3148: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var Type = __nccwpck_require__(967); + +function resolveYamlMerge(data) { + return data === '<<' || data === null; +} + +module.exports = new Type('tag:yaml.org,2002:merge', { + kind: 'scalar', + resolve: resolveYamlMerge +}); + + +/***/ }), + +/***/ 2671: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var Type = __nccwpck_require__(967); + +function resolveYamlNull(data) { + if (data === null) return true; + + var max = data.length; + + return (max === 1 && data === '~') || + (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); +} + +function constructYamlNull() { + return null; +} + +function isNull(object) { + return object === null; +} + +module.exports = new Type('tag:yaml.org,2002:null', { + kind: 'scalar', + resolve: resolveYamlNull, + construct: constructYamlNull, + predicate: isNull, + represent: { + canonical: function () { return '~'; }, + lowercase: function () { return 'null'; }, + uppercase: function () { return 'NULL'; }, + camelcase: function () { return 'Null'; } + }, + defaultStyle: 'lowercase' +}); + + +/***/ }), + +/***/ 6668: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var Type = __nccwpck_require__(967); + +var _hasOwnProperty = Object.prototype.hasOwnProperty; +var _toString = Object.prototype.toString; + +function resolveYamlOmap(data) { + if (data === null) return true; + + var objectKeys = [], index, length, pair, pairKey, pairHasKey, + object = data; + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + pairHasKey = false; + + if (_toString.call(pair) !== '[object Object]') return false; + + for (pairKey in pair) { + if (_hasOwnProperty.call(pair, pairKey)) { + if (!pairHasKey) pairHasKey = true; + else return false; + } + } + + if (!pairHasKey) return false; + + if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); + else return false; + } + + return true; +} + +function constructYamlOmap(data) { + return data !== null ? data : []; +} + +module.exports = new Type('tag:yaml.org,2002:omap', { + kind: 'sequence', + resolve: resolveYamlOmap, + construct: constructYamlOmap +}); + + +/***/ }), + +/***/ 6039: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var Type = __nccwpck_require__(967); + +var _toString = Object.prototype.toString; + +function resolveYamlPairs(data) { + if (data === null) return true; + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + if (_toString.call(pair) !== '[object Object]') return false; + + keys = Object.keys(pair); + + if (keys.length !== 1) return false; + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return true; +} + +function constructYamlPairs(data) { + if (data === null) return []; + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + keys = Object.keys(pair); + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return result; +} + +module.exports = new Type('tag:yaml.org,2002:pairs', { + kind: 'sequence', + resolve: resolveYamlPairs, + construct: constructYamlPairs +}); + + +/***/ }), + +/***/ 5490: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var Type = __nccwpck_require__(967); + +module.exports = new Type('tag:yaml.org,2002:seq', { + kind: 'sequence', + construct: function (data) { return data !== null ? data : []; } +}); + + +/***/ }), + +/***/ 9237: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var Type = __nccwpck_require__(967); + +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +function resolveYamlSet(data) { + if (data === null) return true; + + var key, object = data; + + for (key in object) { + if (_hasOwnProperty.call(object, key)) { + if (object[key] !== null) return false; + } + } + + return true; +} + +function constructYamlSet(data) { + return data !== null ? data : {}; +} + +module.exports = new Type('tag:yaml.org,2002:set', { + kind: 'mapping', + resolve: resolveYamlSet, + construct: constructYamlSet +}); + + +/***/ }), + +/***/ 2672: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var Type = __nccwpck_require__(967); + +module.exports = new Type('tag:yaml.org,2002:str', { + kind: 'scalar', + construct: function (data) { return data !== null ? data : ''; } +}); + + +/***/ }), + +/***/ 3714: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +var Type = __nccwpck_require__(967); + +var YAML_DATE_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9])' + // [2] month + '-([0-9][0-9])$'); // [3] day + +var YAML_TIMESTAMP_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9]?)' + // [2] month + '-([0-9][0-9]?)' + // [3] day + '(?:[Tt]|[ \\t]+)' + // ... + '([0-9][0-9]?)' + // [4] hour + ':([0-9][0-9])' + // [5] minute + ':([0-9][0-9])' + // [6] second + '(?:\\.([0-9]*))?' + // [7] fraction + '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour + '(?::([0-9][0-9]))?))?$'); // [11] tz_minute + +function resolveYamlTimestamp(data) { + if (data === null) return false; + if (YAML_DATE_REGEXP.exec(data) !== null) return true; + if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; + return false; +} + +function constructYamlTimestamp(data) { + var match, year, month, day, hour, minute, second, fraction = 0, + delta = null, tz_hour, tz_minute, date; + + match = YAML_DATE_REGEXP.exec(data); + if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); + + if (match === null) throw new Error('Date resolve error'); + + // match: [1] year [2] month [3] day + + year = +(match[1]); + month = +(match[2]) - 1; // JS month starts with 0 + day = +(match[3]); + + if (!match[4]) { // no hour + return new Date(Date.UTC(year, month, day)); + } + + // match: [4] hour [5] minute [6] second [7] fraction + + hour = +(match[4]); + minute = +(match[5]); + second = +(match[6]); + + if (match[7]) { + fraction = match[7].slice(0, 3); + while (fraction.length < 3) { // milli-seconds + fraction += '0'; + } + fraction = +fraction; + } + + // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute + + if (match[9]) { + tz_hour = +(match[10]); + tz_minute = +(match[11] || 0); + delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds + if (match[9] === '-') delta = -delta; + } + + date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); + + if (delta) date.setTime(date.getTime() - delta); + + return date; +} + +function representYamlTimestamp(object /*, style*/) { + return object.toISOString(); +} + +module.exports = new Type('tag:yaml.org,2002:timestamp', { + kind: 'scalar', + resolve: resolveYamlTimestamp, + construct: constructYamlTimestamp, + instanceOf: Date, + represent: representYamlTimestamp +}); + + +/***/ }), + +/***/ 7129: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +"use strict"; + + +// A linked list to keep track of recently-used-ness +const Yallist = __nccwpck_require__(665) + +const MAX = Symbol('max') +const LENGTH = Symbol('length') +const LENGTH_CALCULATOR = Symbol('lengthCalculator') +const ALLOW_STALE = Symbol('allowStale') +const MAX_AGE = Symbol('maxAge') +const DISPOSE = Symbol('dispose') +const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet') +const LRU_LIST = Symbol('lruList') +const CACHE = Symbol('cache') +const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet') + +const naiveLength = () => 1 + +// lruList is a yallist where the head is the youngest +// item, and the tail is the oldest. the list contains the Hit +// objects as the entries. +// Each Hit object has a reference to its Yallist.Node. This +// never changes. +// +// cache is a Map (or PseudoMap) that matches the keys to +// the Yallist.Node object. +class LRUCache { + constructor (options) { + if (typeof options === 'number') + options = { max: options } + + if (!options) + options = {} + + if (options.max && (typeof options.max !== 'number' || options.max < 0)) + throw new TypeError('max must be a non-negative number') + // Kind of weird to have a default max of Infinity, but oh well. + const max = this[MAX] = options.max || Infinity + + const lc = options.length || naiveLength + this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc + this[ALLOW_STALE] = options.stale || false + if (options.maxAge && typeof options.maxAge !== 'number') + throw new TypeError('maxAge must be a number') + this[MAX_AGE] = options.maxAge || 0 + this[DISPOSE] = options.dispose + this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false + this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false + this.reset() + } + + // resize the cache when the max changes. + set max (mL) { + if (typeof mL !== 'number' || mL < 0) + throw new TypeError('max must be a non-negative number') + + this[MAX] = mL || Infinity + trim(this) + } + get max () { + return this[MAX] + } + + set allowStale (allowStale) { + this[ALLOW_STALE] = !!allowStale + } + get allowStale () { + return this[ALLOW_STALE] + } + + set maxAge (mA) { + if (typeof mA !== 'number') + throw new TypeError('maxAge must be a non-negative number') + + this[MAX_AGE] = mA + trim(this) + } + get maxAge () { + return this[MAX_AGE] + } + + // resize the cache when the lengthCalculator changes. + set lengthCalculator (lC) { + if (typeof lC !== 'function') + lC = naiveLength + + if (lC !== this[LENGTH_CALCULATOR]) { + this[LENGTH_CALCULATOR] = lC + this[LENGTH] = 0 + this[LRU_LIST].forEach(hit => { + hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key) + this[LENGTH] += hit.length + }) + } + trim(this) + } + get lengthCalculator () { return this[LENGTH_CALCULATOR] } + + get length () { return this[LENGTH] } + get itemCount () { return this[LRU_LIST].length } + + rforEach (fn, thisp) { + thisp = thisp || this + for (let walker = this[LRU_LIST].tail; walker !== null;) { + const prev = walker.prev + forEachStep(this, fn, walker, thisp) + walker = prev + } + } + + forEach (fn, thisp) { + thisp = thisp || this + for (let walker = this[LRU_LIST].head; walker !== null;) { + const next = walker.next + forEachStep(this, fn, walker, thisp) + walker = next + } + } + + keys () { + return this[LRU_LIST].toArray().map(k => k.key) + } + + values () { + return this[LRU_LIST].toArray().map(k => k.value) + } + + reset () { + if (this[DISPOSE] && + this[LRU_LIST] && + this[LRU_LIST].length) { + this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value)) + } + + this[CACHE] = new Map() // hash of items by key + this[LRU_LIST] = new Yallist() // list of items in order of use recency + this[LENGTH] = 0 // length of items in the list + } + + dump () { + return this[LRU_LIST].map(hit => + isStale(this, hit) ? false : { + k: hit.key, + v: hit.value, + e: hit.now + (hit.maxAge || 0) + }).toArray().filter(h => h) + } + + dumpLru () { + return this[LRU_LIST] + } + + set (key, value, maxAge) { + maxAge = maxAge || this[MAX_AGE] + + if (maxAge && typeof maxAge !== 'number') + throw new TypeError('maxAge must be a number') + + const now = maxAge ? Date.now() : 0 + const len = this[LENGTH_CALCULATOR](value, key) + + if (this[CACHE].has(key)) { + if (len > this[MAX]) { + del(this, this[CACHE].get(key)) + return false + } + + const node = this[CACHE].get(key) + const item = node.value + + // dispose of the old one before overwriting + // split out into 2 ifs for better coverage tracking + if (this[DISPOSE]) { + if (!this[NO_DISPOSE_ON_SET]) + this[DISPOSE](key, item.value) + } + + item.now = now + item.maxAge = maxAge + item.value = value + this[LENGTH] += len - item.length + item.length = len + this.get(key) + trim(this) + return true + } + + const hit = new Entry(key, value, len, now, maxAge) + + // oversized objects fall out of cache automatically. + if (hit.length > this[MAX]) { + if (this[DISPOSE]) + this[DISPOSE](key, value) + + return false + } + + this[LENGTH] += hit.length + this[LRU_LIST].unshift(hit) + this[CACHE].set(key, this[LRU_LIST].head) + trim(this) + return true + } + + has (key) { + if (!this[CACHE].has(key)) return false + const hit = this[CACHE].get(key).value + return !isStale(this, hit) + } + + get (key) { + return get(this, key, true) + } + + peek (key) { + return get(this, key, false) + } + + pop () { + const node = this[LRU_LIST].tail + if (!node) + return null + + del(this, node) + return node.value + } + + del (key) { + del(this, this[CACHE].get(key)) + } + + load (arr) { + // reset the cache + this.reset() + + const now = Date.now() + // A previous serialized cache has the most recent items first + for (let l = arr.length - 1; l >= 0; l--) { + const hit = arr[l] + const expiresAt = hit.e || 0 + if (expiresAt === 0) + // the item was created without expiration in a non aged cache + this.set(hit.k, hit.v) + else { + const maxAge = expiresAt - now + // dont add already expired items + if (maxAge > 0) { + this.set(hit.k, hit.v, maxAge) + } + } + } + } + + prune () { + this[CACHE].forEach((value, key) => get(this, key, false)) + } +} + +const get = (self, key, doUse) => { + const node = self[CACHE].get(key) + if (node) { + const hit = node.value + if (isStale(self, hit)) { + del(self, node) + if (!self[ALLOW_STALE]) + return undefined + } else { + if (doUse) { + if (self[UPDATE_AGE_ON_GET]) + node.value.now = Date.now() + self[LRU_LIST].unshiftNode(node) + } + } + return hit.value + } +} + +const isStale = (self, hit) => { + if (!hit || (!hit.maxAge && !self[MAX_AGE])) + return false + + const diff = Date.now() - hit.now + return hit.maxAge ? diff > hit.maxAge + : self[MAX_AGE] && (diff > self[MAX_AGE]) +} + +const trim = self => { + if (self[LENGTH] > self[MAX]) { + for (let walker = self[LRU_LIST].tail; + self[LENGTH] > self[MAX] && walker !== null;) { + // We know that we're about to delete this one, and also + // what the next least recently used key will be, so just + // go ahead and set it now. + const prev = walker.prev + del(self, walker) + walker = prev + } + } +} + +const del = (self, node) => { + if (node) { + const hit = node.value + if (self[DISPOSE]) + self[DISPOSE](hit.key, hit.value) + + self[LENGTH] -= hit.length + self[CACHE].delete(hit.key) + self[LRU_LIST].removeNode(node) + } +} + +class Entry { + constructor (key, value, length, now, maxAge) { + this.key = key + this.value = value + this.length = length + this.now = now + this.maxAge = maxAge || 0 + } +} + +const forEachStep = (self, fn, node, thisp) => { + let hit = node.value + if (isStale(self, hit)) { + del(self, node) + if (!self[ALLOW_STALE]) + hit = undefined + } + if (hit) + fn.call(thisp, hit.value, hit.key, self) +} + +module.exports = LRUCache + + +/***/ }), + +/***/ 1532: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const ANY = Symbol('SemVer ANY') +// hoisted class for cyclic dependency +class Comparator { + static get ANY () { + return ANY + } + constructor (comp, options) { + options = parseOptions(options) + + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp + } else { + comp = comp.value + } + } + + debug('comparator', comp, options) + this.options = options + this.loose = !!options.loose + this.parse(comp) + + if (this.semver === ANY) { + this.value = '' + } else { + this.value = this.operator + this.semver.version + } + + debug('comp', this) + } + + parse (comp) { + const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + const m = comp.match(r) + + if (!m) { + throw new TypeError(`Invalid comparator: ${comp}`) + } + + this.operator = m[1] !== undefined ? m[1] : '' + if (this.operator === '=') { + this.operator = '' + } + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY + } else { + this.semver = new SemVer(m[2], this.options.loose) + } + } + + toString () { + return this.value + } + + test (version) { + debug('Comparator.test', version, this.options.loose) + + if (this.semver === ANY || version === ANY) { + return true + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + return cmp(version, this.operator, this.semver, this.options) + } + + intersects (comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required') + } + + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (this.operator === '') { + if (this.value === '') { + return true + } + return new Range(comp.value, options).test(this.value) + } else if (comp.operator === '') { + if (comp.value === '') { + return true + } + return new Range(this.value, options).test(comp.semver) + } + + const sameDirectionIncreasing = + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '>=' || comp.operator === '>') + const sameDirectionDecreasing = + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '<=' || comp.operator === '<') + const sameSemVer = this.semver.version === comp.semver.version + const differentDirectionsInclusive = + (this.operator === '>=' || this.operator === '<=') && + (comp.operator === '>=' || comp.operator === '<=') + const oppositeDirectionsLessThan = + cmp(this.semver, '<', comp.semver, options) && + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '<=' || comp.operator === '<') + const oppositeDirectionsGreaterThan = + cmp(this.semver, '>', comp.semver, options) && + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '>=' || comp.operator === '>') + + return ( + sameDirectionIncreasing || + sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || + oppositeDirectionsGreaterThan + ) + } +} + +module.exports = Comparator + +const parseOptions = __nccwpck_require__(785) +const {re, t} = __nccwpck_require__(9523) +const cmp = __nccwpck_require__(5098) +const debug = __nccwpck_require__(427) +const SemVer = __nccwpck_require__(8088) +const Range = __nccwpck_require__(9828) + + +/***/ }), + +/***/ 9828: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +// hoisted class for cyclic dependency +class Range { + constructor (range, options) { + options = parseOptions(options) + + if (range instanceof Range) { + if ( + range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease + ) { + return range + } else { + return new Range(range.raw, options) + } + } + + if (range instanceof Comparator) { + // just put it in the set and return + this.raw = range.value + this.set = [[range]] + this.format() + return this + } + + this.options = options + this.loose = !!options.loose + this.includePrerelease = !!options.includePrerelease + + // First, split based on boolean or || + this.raw = range + this.set = range + .split(/\s*\|\|\s*/) + // map the range to a 2d array of comparators + .map(range => this.parseRange(range.trim())) + // throw out any comparator lists that are empty + // this generally means that it was not a valid range, which is allowed + // in loose mode, but will still throw if the WHOLE range is invalid. + .filter(c => c.length) + + if (!this.set.length) { + throw new TypeError(`Invalid SemVer Range: ${range}`) + } + + // if we have any that are not the null set, throw out null sets. + if (this.set.length > 1) { + // keep the first one, in case they're all null sets + const first = this.set[0] + this.set = this.set.filter(c => !isNullSet(c[0])) + if (this.set.length === 0) + this.set = [first] + else if (this.set.length > 1) { + // if we have any that are *, then the range is just * + for (const c of this.set) { + if (c.length === 1 && isAny(c[0])) { + this.set = [c] + break + } + } + } + } + + this.format() + } + + format () { + this.range = this.set + .map((comps) => { + return comps.join(' ').trim() + }) + .join('||') + .trim() + return this.range + } + + toString () { + return this.range + } + + parseRange (range) { + range = range.trim() + + // memoize range parsing for performance. + // this is a very hot path, and fully deterministic. + const memoOpts = Object.keys(this.options).join(',') + const memoKey = `parseRange:${memoOpts}:${range}` + const cached = cache.get(memoKey) + if (cached) + return cached + + const loose = this.options.loose + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] + range = range.replace(hr, hyphenReplace(this.options.includePrerelease)) + debug('hyphen replace', range) + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) + debug('comparator trim', range, re[t.COMPARATORTRIM]) + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[t.TILDETRIM], tildeTrimReplace) + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[t.CARETTRIM], caretTrimReplace) + + // normalize spaces + range = range.split(/\s+/).join(' ') + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] + const rangeList = range + .split(' ') + .map(comp => parseComparator(comp, this.options)) + .join(' ') + .split(/\s+/) + // >=0.0.0 is equivalent to * + .map(comp => replaceGTE0(comp, this.options)) + // in loose mode, throw out any that are not valid comparators + .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true) + .map(comp => new Comparator(comp, this.options)) + + // if any comparators are the null set, then replace with JUST null set + // if more than one comparator, remove any * comparators + // also, don't include the same comparator more than once + const l = rangeList.length + const rangeMap = new Map() + for (const comp of rangeList) { + if (isNullSet(comp)) + return [comp] + rangeMap.set(comp.value, comp) + } + if (rangeMap.size > 1 && rangeMap.has('')) + rangeMap.delete('') + + const result = [...rangeMap.values()] + cache.set(memoKey, result) + return result + } + + intersects (range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required') + } + + return this.set.some((thisComparators) => { + return ( + isSatisfiable(thisComparators, options) && + range.set.some((rangeComparators) => { + return ( + isSatisfiable(rangeComparators, options) && + thisComparators.every((thisComparator) => { + return rangeComparators.every((rangeComparator) => { + return thisComparator.intersects(rangeComparator, options) + }) + }) + ) + }) + ) + }) + } + + // if ANY of the sets match ALL of its comparators, then pass + test (version) { + if (!version) { + return false + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + for (let i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false + } +} +module.exports = Range + +const LRU = __nccwpck_require__(7129) +const cache = new LRU({ max: 1000 }) + +const parseOptions = __nccwpck_require__(785) +const Comparator = __nccwpck_require__(1532) +const debug = __nccwpck_require__(427) +const SemVer = __nccwpck_require__(8088) +const { + re, + t, + comparatorTrimReplace, + tildeTrimReplace, + caretTrimReplace +} = __nccwpck_require__(9523) + +const isNullSet = c => c.value === '<0.0.0-0' +const isAny = c => c.value === '' + +// take a set of comparators and determine whether there +// exists a version which can satisfy it +const isSatisfiable = (comparators, options) => { + let result = true + const remainingComparators = comparators.slice() + let testComparator = remainingComparators.pop() + + while (result && remainingComparators.length) { + result = remainingComparators.every((otherComparator) => { + return testComparator.intersects(otherComparator, options) + }) + + testComparator = remainingComparators.pop() + } + + return result +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +const parseComparator = (comp, options) => { + debug('comp', comp, options) + comp = replaceCarets(comp, options) + debug('caret', comp) + comp = replaceTildes(comp, options) + debug('tildes', comp) + comp = replaceXRanges(comp, options) + debug('xrange', comp) + comp = replaceStars(comp, options) + debug('stars', comp) + return comp +} + +const isX = id => !id || id.toLowerCase() === 'x' || id === '*' + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0 +const replaceTildes = (comp, options) => + comp.trim().split(/\s+/).map((comp) => { + return replaceTilde(comp, options) + }).join(' ') + +const replaceTilde = (comp, options) => { + const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] + return comp.replace(r, (_, M, m, p, pr) => { + debug('tilde', comp, _, M, m, p, pr) + let ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = `>=${M}.0.0 <${+M + 1}.0.0-0` + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0-0 + ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0` + } else if (pr) { + debug('replaceTilde pr', pr) + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${+m + 1}.0-0` + } else { + // ~1.2.3 == >=1.2.3 <1.3.0-0 + ret = `>=${M}.${m}.${p + } <${M}.${+m + 1}.0-0` + } + + debug('tilde return', ret) + return ret + }) +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0 +// ^1.2.3 --> >=1.2.3 <2.0.0-0 +// ^1.2.0 --> >=1.2.0 <2.0.0-0 +const replaceCarets = (comp, options) => + comp.trim().split(/\s+/).map((comp) => { + return replaceCaret(comp, options) + }).join(' ') + +const replaceCaret = (comp, options) => { + debug('caret', comp, options) + const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] + const z = options.includePrerelease ? '-0' : '' + return comp.replace(r, (_, M, m, p, pr) => { + debug('caret', comp, _, M, m, p, pr) + let ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0` + } else if (isX(p)) { + if (M === '0') { + ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0` + } else { + ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0` + } + } else if (pr) { + debug('replaceCaret pr', pr) + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${m}.${+p + 1}-0` + } else { + ret = `>=${M}.${m}.${p}-${pr + } <${M}.${+m + 1}.0-0` + } + } else { + ret = `>=${M}.${m}.${p}-${pr + } <${+M + 1}.0.0-0` + } + } else { + debug('no pr') + if (M === '0') { + if (m === '0') { + ret = `>=${M}.${m}.${p + }${z} <${M}.${m}.${+p + 1}-0` + } else { + ret = `>=${M}.${m}.${p + }${z} <${M}.${+m + 1}.0-0` + } + } else { + ret = `>=${M}.${m}.${p + } <${+M + 1}.0.0-0` + } + } + + debug('caret return', ret) + return ret + }) +} + +const replaceXRanges = (comp, options) => { + debug('replaceXRanges', comp, options) + return comp.split(/\s+/).map((comp) => { + return replaceXRange(comp, options) + }).join(' ') +} + +const replaceXRange = (comp, options) => { + comp = comp.trim() + const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] + return comp.replace(r, (ret, gtlt, M, m, p, pr) => { + debug('xRange', comp, ret, gtlt, M, m, p, pr) + const xM = isX(M) + const xm = xM || isX(m) + const xp = xm || isX(p) + const anyX = xp + + if (gtlt === '=' && anyX) { + gtlt = '' + } + + // if we're including prereleases in the match, then we need + // to fix this to -0, the lowest possible prerelease value + pr = options.includePrerelease ? '-0' : '' + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0-0' + } else { + // nothing is forbidden + ret = '*' + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0 + } + p = 0 + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + gtlt = '>=' + if (xm) { + M = +M + 1 + m = 0 + p = 0 + } else { + m = +m + 1 + p = 0 } - if (walker.eof) - break; - else - walker.pointer++; + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) { + M = +M + 1 + } else { + m = +m + 1 + } + } + + if (gtlt === '<') + pr = '-0' + + ret = `${gtlt + M}.${m}.${p}${pr}` + } else if (xm) { + ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0` + } else if (xp) { + ret = `>=${M}.${m}.0${pr + } <${M}.${+m + 1}.0-0` } - /** - * 12. Return url. - */ - return url; + + debug('xRange return', ret) + + return ret + }) } -exports.basicURLParser = basicURLParser; -/** - * Sets a URL's username. - * - * @param url - a URL - * @param username - username string - */ -function setTheUsername(url, username) { - var e_4, _a; - /** - * 1. Set url’s username to the empty string. - * 2. For each code point in username, UTF-8 percent encode it using the - * userinfo percent-encode set, and append the result to url’s username. - */ - var result = ""; - try { - for (var username_1 = __values(username), username_1_1 = username_1.next(); !username_1_1.done; username_1_1 = username_1.next()) { - var codePoint = username_1_1.value; - result += utf8PercentEncode(codePoint, _userInfoPercentEncodeSet); + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +const replaceStars = (comp, options) => { + debug('replaceStars', comp, options) + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[t.STAR], '') +} + +const replaceGTE0 = (comp, options) => { + debug('replaceGTE0', comp, options) + return comp.trim() + .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '') +} + +// This function is passed to string.replace(re[t.HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0-0 +const hyphenReplace = incPr => ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) => { + if (isX(fM)) { + from = '' + } else if (isX(fm)) { + from = `>=${fM}.0.0${incPr ? '-0' : ''}` + } else if (isX(fp)) { + from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}` + } else if (fpr) { + from = `>=${from}` + } else { + from = `>=${from}${incPr ? '-0' : ''}` + } + + if (isX(tM)) { + to = '' + } else if (isX(tm)) { + to = `<${+tM + 1}.0.0-0` + } else if (isX(tp)) { + to = `<${tM}.${+tm + 1}.0-0` + } else if (tpr) { + to = `<=${tM}.${tm}.${tp}-${tpr}` + } else if (incPr) { + to = `<${tM}.${tm}.${+tp + 1}-0` + } else { + to = `<=${to}` + } + + return (`${from} ${to}`).trim() +} + +const testSet = (set, version, options) => { + for (let i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false + } + } + + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (let i = 0; i < set.length; i++) { + debug(set[i].semver) + if (set[i].semver === Comparator.ANY) { + continue + } + + if (set[i].semver.prerelease.length > 0) { + const allowed = set[i].semver + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true + } + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false + } + + return true +} + + +/***/ }), + +/***/ 8088: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const debug = __nccwpck_require__(427) +const { MAX_LENGTH, MAX_SAFE_INTEGER } = __nccwpck_require__(2293) +const { re, t } = __nccwpck_require__(9523) + +const parseOptions = __nccwpck_require__(785) +const { compareIdentifiers } = __nccwpck_require__(2463) +class SemVer { + constructor (version, options) { + options = parseOptions(options) + + if (version instanceof SemVer) { + if (version.loose === !!options.loose && + version.includePrerelease === !!options.includePrerelease) { + return version + } else { + version = version.version + } + } else if (typeof version !== 'string') { + throw new TypeError(`Invalid Version: ${version}`) + } + + if (version.length > MAX_LENGTH) { + throw new TypeError( + `version is longer than ${MAX_LENGTH} characters` + ) + } + + debug('SemVer', version, options) + this.options = options + this.loose = !!options.loose + // this isn't actually relevant for versions, but keep it so that we + // don't run into trouble passing this.options around. + this.includePrerelease = !!options.includePrerelease + + const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) + + if (!m) { + throw new TypeError(`Invalid Version: ${version}`) + } + + this.raw = version + + // these are actually numbers + this.major = +m[1] + this.minor = +m[2] + this.patch = +m[3] + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') + } + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = [] + } else { + this.prerelease = m[4].split('.').map((id) => { + if (/^[0-9]+$/.test(id)) { + const num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } + } + return id + }) + } + + this.build = m[5] ? m[5].split('.') : [] + this.format() + } + + format () { + this.version = `${this.major}.${this.minor}.${this.patch}` + if (this.prerelease.length) { + this.version += `-${this.prerelease.join('.')}` + } + return this.version + } + + toString () { + return this.version + } + + compare (other) { + debug('SemVer.compare', this.version, this.options, other) + if (!(other instanceof SemVer)) { + if (typeof other === 'string' && other === this.version) { + return 0 + } + other = new SemVer(other, this.options) + } + + if (other.version === this.version) { + return 0 + } + + return this.compareMain(other) || this.comparePre(other) + } + + compareMain (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return ( + compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) + ) + } + + comparePre (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } + + let i = 0 + do { + const a = this.prerelease[i] + const b = other.prerelease[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) + } + + compareBuild (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + let i = 0 + do { + const a = this.build[i] + const b = other.build[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) + } + + // preminor will bump the version up to the next minor release, and immediately + // down to pre-release. premajor and prepatch work the same way. + inc (release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0 + this.patch = 0 + this.minor = 0 + this.major++ + this.inc('pre', identifier) + break + case 'preminor': + this.prerelease.length = 0 + this.patch = 0 + this.minor++ + this.inc('pre', identifier) + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch', identifier) + this.inc('pre', identifier) + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier) + } + this.inc('pre', identifier) + break + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if ( + this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0 + ) { + this.major++ + } + this.minor = 0 + this.patch = 0 + this.prerelease = [] + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++ + } + this.patch = 0 + this.prerelease = [] + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++ + } + this.prerelease = [] + break + // This probably shouldn't be used publicly. + // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) { + this.prerelease = [0] + } else { + let i = this.prerelease.length + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++ + i = -2 + } + } + if (i === -1) { + // didn't increment anything + this.prerelease.push(0) + } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) { + this.prerelease = [identifier, 0] + } + } else { + this.prerelease = [identifier, 0] + } } + break + + default: + throw new Error(`invalid increment argument: ${release}`) + } + this.format() + this.raw = this.version + return this + } +} + +module.exports = SemVer + + +/***/ }), + +/***/ 8848: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const parse = __nccwpck_require__(5925) +const clean = (version, options) => { + const s = parse(version.trim().replace(/^[=v]+/, ''), options) + return s ? s.version : null +} +module.exports = clean + + +/***/ }), + +/***/ 5098: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const eq = __nccwpck_require__(1898) +const neq = __nccwpck_require__(6017) +const gt = __nccwpck_require__(4123) +const gte = __nccwpck_require__(5522) +const lt = __nccwpck_require__(194) +const lte = __nccwpck_require__(7520) + +const cmp = (a, op, b, loose) => { + switch (op) { + case '===': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a === b + + case '!==': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a !== b + + case '': + case '=': + case '==': + return eq(a, b, loose) + + case '!=': + return neq(a, b, loose) + + case '>': + return gt(a, b, loose) + + case '>=': + return gte(a, b, loose) + + case '<': + return lt(a, b, loose) + + case '<=': + return lte(a, b, loose) + + default: + throw new TypeError(`Invalid operator: ${op}`) + } +} +module.exports = cmp + + +/***/ }), + +/***/ 3466: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(8088) +const parse = __nccwpck_require__(5925) +const {re, t} = __nccwpck_require__(9523) + +const coerce = (version, options) => { + if (version instanceof SemVer) { + return version + } + + if (typeof version === 'number') { + version = String(version) + } + + if (typeof version !== 'string') { + return null + } + + options = options || {} + + let match = null + if (!options.rtl) { + match = version.match(re[t.COERCE]) + } else { + // Find the right-most coercible string that does not share + // a terminus with a more left-ward coercible string. + // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' + // + // Walk through the string checking with a /g regexp + // Manually set the index so as to pick up overlapping matches. + // Stop when we get a match that ends at the string end, since no + // coercible string can be more right-ward without the same terminus. + let next + while ((next = re[t.COERCERTL].exec(version)) && + (!match || match.index + match[0].length !== version.length) + ) { + if (!match || + next.index + next[0].length !== match.index + match[0].length) { + match = next + } + re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length } - catch (e_4_1) { e_4 = { error: e_4_1 }; } - finally { - try { - if (username_1_1 && !username_1_1.done && (_a = username_1.return)) _a.call(username_1); + // leave it in a clean state + re[t.COERCERTL].lastIndex = -1 + } + + if (match === null) + return null + + return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options) +} +module.exports = coerce + + +/***/ }), + +/***/ 2156: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(8088) +const compareBuild = (a, b, loose) => { + const versionA = new SemVer(a, loose) + const versionB = new SemVer(b, loose) + return versionA.compare(versionB) || versionA.compareBuild(versionB) +} +module.exports = compareBuild + + +/***/ }), + +/***/ 2804: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compare = __nccwpck_require__(9834) +const compareLoose = (a, b) => compare(a, b, true) +module.exports = compareLoose + + +/***/ }), + +/***/ 9834: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(8088) +const compare = (a, b, loose) => + new SemVer(a, loose).compare(new SemVer(b, loose)) + +module.exports = compare + + +/***/ }), + +/***/ 4297: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const parse = __nccwpck_require__(5925) +const eq = __nccwpck_require__(1898) + +const diff = (version1, version2) => { + if (eq(version1, version2)) { + return null + } else { + const v1 = parse(version1) + const v2 = parse(version2) + const hasPre = v1.prerelease.length || v2.prerelease.length + const prefix = hasPre ? 'pre' : '' + const defaultResult = hasPre ? 'prerelease' : '' + for (const key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return prefix + key } - finally { if (e_4) throw e_4.error; } + } } - url.username = result; + return defaultResult // may be undefined + } +} +module.exports = diff + + +/***/ }), + +/***/ 1898: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compare = __nccwpck_require__(9834) +const eq = (a, b, loose) => compare(a, b, loose) === 0 +module.exports = eq + + +/***/ }), + +/***/ 4123: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compare = __nccwpck_require__(9834) +const gt = (a, b, loose) => compare(a, b, loose) > 0 +module.exports = gt + + +/***/ }), + +/***/ 5522: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compare = __nccwpck_require__(9834) +const gte = (a, b, loose) => compare(a, b, loose) >= 0 +module.exports = gte + + +/***/ }), + +/***/ 900: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(8088) + +const inc = (version, release, options, identifier) => { + if (typeof (options) === 'string') { + identifier = options + options = undefined + } + + try { + return new SemVer(version, options).inc(release, identifier).version + } catch (er) { + return null + } +} +module.exports = inc + + +/***/ }), + +/***/ 194: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compare = __nccwpck_require__(9834) +const lt = (a, b, loose) => compare(a, b, loose) < 0 +module.exports = lt + + +/***/ }), + +/***/ 7520: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compare = __nccwpck_require__(9834) +const lte = (a, b, loose) => compare(a, b, loose) <= 0 +module.exports = lte + + +/***/ }), + +/***/ 6688: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(8088) +const major = (a, loose) => new SemVer(a, loose).major +module.exports = major + + +/***/ }), + +/***/ 8447: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(8088) +const minor = (a, loose) => new SemVer(a, loose).minor +module.exports = minor + + +/***/ }), + +/***/ 6017: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compare = __nccwpck_require__(9834) +const neq = (a, b, loose) => compare(a, b, loose) !== 0 +module.exports = neq + + +/***/ }), + +/***/ 5925: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const {MAX_LENGTH} = __nccwpck_require__(2293) +const { re, t } = __nccwpck_require__(9523) +const SemVer = __nccwpck_require__(8088) + +const parseOptions = __nccwpck_require__(785) +const parse = (version, options) => { + options = parseOptions(options) + + if (version instanceof SemVer) { + return version + } + + if (typeof version !== 'string') { + return null + } + + if (version.length > MAX_LENGTH) { + return null + } + + const r = options.loose ? re[t.LOOSE] : re[t.FULL] + if (!r.test(version)) { + return null + } + + try { + return new SemVer(version, options) + } catch (er) { + return null + } +} + +module.exports = parse + + +/***/ }), + +/***/ 2866: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(8088) +const patch = (a, loose) => new SemVer(a, loose).patch +module.exports = patch + + +/***/ }), + +/***/ 4016: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const parse = __nccwpck_require__(5925) +const prerelease = (version, options) => { + const parsed = parse(version, options) + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null +} +module.exports = prerelease + + +/***/ }), + +/***/ 7499: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compare = __nccwpck_require__(9834) +const rcompare = (a, b, loose) => compare(b, a, loose) +module.exports = rcompare + + +/***/ }), + +/***/ 8701: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compareBuild = __nccwpck_require__(2156) +const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose)) +module.exports = rsort + + +/***/ }), + +/***/ 6055: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const Range = __nccwpck_require__(9828) +const satisfies = (version, range, options) => { + try { + range = new Range(range, options) + } catch (er) { + return false + } + return range.test(version) +} +module.exports = satisfies + + +/***/ }), + +/***/ 1426: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const compareBuild = __nccwpck_require__(2156) +const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose)) +module.exports = sort + + +/***/ }), + +/***/ 9601: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const parse = __nccwpck_require__(5925) +const valid = (version, options) => { + const v = parse(version, options) + return v ? v.version : null +} +module.exports = valid + + +/***/ }), + +/***/ 1383: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +// just pre-load all the stuff that index.js lazily exports +const internalRe = __nccwpck_require__(9523) +module.exports = { + re: internalRe.re, + src: internalRe.src, + tokens: internalRe.t, + SEMVER_SPEC_VERSION: __nccwpck_require__(2293).SEMVER_SPEC_VERSION, + SemVer: __nccwpck_require__(8088), + compareIdentifiers: __nccwpck_require__(2463).compareIdentifiers, + rcompareIdentifiers: __nccwpck_require__(2463).rcompareIdentifiers, + parse: __nccwpck_require__(5925), + valid: __nccwpck_require__(9601), + clean: __nccwpck_require__(8848), + inc: __nccwpck_require__(900), + diff: __nccwpck_require__(4297), + major: __nccwpck_require__(6688), + minor: __nccwpck_require__(8447), + patch: __nccwpck_require__(2866), + prerelease: __nccwpck_require__(4016), + compare: __nccwpck_require__(9834), + rcompare: __nccwpck_require__(7499), + compareLoose: __nccwpck_require__(2804), + compareBuild: __nccwpck_require__(2156), + sort: __nccwpck_require__(1426), + rsort: __nccwpck_require__(8701), + gt: __nccwpck_require__(4123), + lt: __nccwpck_require__(194), + eq: __nccwpck_require__(1898), + neq: __nccwpck_require__(6017), + gte: __nccwpck_require__(5522), + lte: __nccwpck_require__(7520), + cmp: __nccwpck_require__(5098), + coerce: __nccwpck_require__(3466), + Comparator: __nccwpck_require__(1532), + Range: __nccwpck_require__(9828), + satisfies: __nccwpck_require__(6055), + toComparators: __nccwpck_require__(2706), + maxSatisfying: __nccwpck_require__(579), + minSatisfying: __nccwpck_require__(832), + minVersion: __nccwpck_require__(4179), + validRange: __nccwpck_require__(2098), + outside: __nccwpck_require__(420), + gtr: __nccwpck_require__(9380), + ltr: __nccwpck_require__(3323), + intersects: __nccwpck_require__(7008), + simplifyRange: __nccwpck_require__(5297), + subset: __nccwpck_require__(7863), +} + + +/***/ }), + +/***/ 2293: +/***/ ((module) => { + +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +const SEMVER_SPEC_VERSION = '2.0.0' + +const MAX_LENGTH = 256 +const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || + /* istanbul ignore next */ 9007199254740991 + +// Max safe segment length for coercion. +const MAX_SAFE_COMPONENT_LENGTH = 16 + +module.exports = { + SEMVER_SPEC_VERSION, + MAX_LENGTH, + MAX_SAFE_INTEGER, + MAX_SAFE_COMPONENT_LENGTH +} + + +/***/ }), + +/***/ 427: +/***/ ((module) => { + +const debug = ( + typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG) +) ? (...args) => console.error('SEMVER', ...args) + : () => {} + +module.exports = debug + + +/***/ }), + +/***/ 2463: +/***/ ((module) => { + +const numeric = /^[0-9]+$/ +const compareIdentifiers = (a, b) => { + const anum = numeric.test(a) + const bnum = numeric.test(b) + + if (anum && bnum) { + a = +a + b = +b + } + + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +} + +const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a) + +module.exports = { + compareIdentifiers, + rcompareIdentifiers +} + + +/***/ }), + +/***/ 785: +/***/ ((module) => { + +// parse out just the options we care about so we always get a consistent +// obj with keys in a consistent order. +const opts = ['includePrerelease', 'loose', 'rtl'] +const parseOptions = options => + !options ? {} + : typeof options !== 'object' ? { loose: true } + : opts.filter(k => options[k]).reduce((options, k) => { + options[k] = true + return options + }, {}) +module.exports = parseOptions + + +/***/ }), + +/***/ 9523: +/***/ ((module, exports, __nccwpck_require__) => { + +const { MAX_SAFE_COMPONENT_LENGTH } = __nccwpck_require__(2293) +const debug = __nccwpck_require__(427) +exports = module.exports = {} + +// The actual regexps go on exports.re +const re = exports.re = [] +const src = exports.src = [] +const t = exports.t = {} +let R = 0 + +const createToken = (name, value, isGlobal) => { + const index = R++ + debug(index, value) + t[name] = index + src[index] = value + re[index] = new RegExp(value, isGlobal ? 'g' : undefined) +} + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*') +createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+') + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*') + +// ## Main Version +// Three dot-separated numeric identifiers. + +createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})\\.` + + `(${src[t.NUMERICIDENTIFIER]})`) + +createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + + `(${src[t.NUMERICIDENTIFIERLOOSE]})`) + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. + +createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] +}|${src[t.NONNUMERICIDENTIFIER]})`) + +createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] +}|${src[t.NONNUMERICIDENTIFIER]})`) + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] +}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`) + +createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] +}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`) + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+') + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] +}(?:\\.${src[t.BUILDIDENTIFIER]})*))`) + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +createToken('FULLPLAIN', `v?${src[t.MAINVERSION] +}${src[t.PRERELEASE]}?${ + src[t.BUILD]}?`) + +createToken('FULL', `^${src[t.FULLPLAIN]}$`) + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] +}${src[t.PRERELEASELOOSE]}?${ + src[t.BUILD]}?`) + +createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`) + +createToken('GTLT', '((?:<|>)?=?)') + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`) +createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`) + +createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + + `(?:${src[t.PRERELEASE]})?${ + src[t.BUILD]}?` + + `)?)?`) + +createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + + `(?:${src[t.PRERELEASELOOSE]})?${ + src[t.BUILD]}?` + + `)?)?`) + +createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`) +createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`) + +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +createToken('COERCE', `${'(^|[^\\d])' + + '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + + `(?:$|[^\\d])`) +createToken('COERCERTL', src[t.COERCE], true) + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +createToken('LONETILDE', '(?:~>?)') + +createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true) +exports.tildeTrimReplace = '$1~' + +createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`) +createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`) + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +createToken('LONECARET', '(?:\\^)') + +createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true) +exports.caretTrimReplace = '$1^' + +createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`) +createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`) + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`) +createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`) + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] +}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true) +exports.comparatorTrimReplace = '$1$2$3' + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAIN]})` + + `\\s*$`) + +createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + + `\\s+-\\s+` + + `(${src[t.XRANGEPLAINLOOSE]})` + + `\\s*$`) + +// Star ranges basically just allow anything at all. +createToken('STAR', '(<|>)?=?\\s*\\*') +// >=0.0.0 is like a star +createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$') +createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$') + + +/***/ }), + +/***/ 9380: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +// Determine if version is greater than all the versions possible in the range. +const outside = __nccwpck_require__(420) +const gtr = (version, range, options) => outside(version, range, '>', options) +module.exports = gtr + + +/***/ }), + +/***/ 7008: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const Range = __nccwpck_require__(9828) +const intersects = (r1, r2, options) => { + r1 = new Range(r1, options) + r2 = new Range(r2, options) + return r1.intersects(r2) } -exports.setTheUsername = setTheUsername; -/** - * Sets a URL's password. - * - * @param url - a URL - * @param username - password string - */ -function setThePassword(url, password) { - var e_5, _a; - /** - * 1. Set url’s password to the empty string. - * 2. For each code point in password, UTF-8 percent encode it using the - * userinfo percent-encode set, and append the result to url’s password. - */ - var result = ""; - try { - for (var password_1 = __values(password), password_1_1 = password_1.next(); !password_1_1.done; password_1_1 = password_1.next()) { - var codePoint = password_1_1.value; - result += utf8PercentEncode(codePoint, _userInfoPercentEncodeSet); - } - } - catch (e_5_1) { e_5 = { error: e_5_1 }; } - finally { - try { - if (password_1_1 && !password_1_1.done && (_a = password_1.return)) _a.call(password_1); - } - finally { if (e_5) throw e_5.error; } +module.exports = intersects + + +/***/ }), + +/***/ 3323: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const outside = __nccwpck_require__(420) +// Determine if version is less than all the versions possible in the range +const ltr = (version, range, options) => outside(version, range, '<', options) +module.exports = ltr + + +/***/ }), + +/***/ 579: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(8088) +const Range = __nccwpck_require__(9828) + +const maxSatisfying = (versions, range, options) => { + let max = null + let maxSV = null + let rangeObj = null + try { + rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach((v) => { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { + // compare(max, v, true) + max = v + maxSV = new SemVer(max, options) + } } - url.password = result; -} -exports.setThePassword = setThePassword; -/** - * Determines if the string represents a single dot path. - * - * @param str - a string - */ -function isSingleDotPathSegment(str) { - return str === '.' || str.toLowerCase() === "%2e"; -} -exports.isSingleDotPathSegment = isSingleDotPathSegment; -/** - * Determines if the string represents a double dot path. - * - * @param str - a string - */ -function isDoubleDotPathSegment(str) { - var lowerStr = str.toLowerCase(); - return lowerStr === ".." || lowerStr === ".%2e" || - lowerStr === "%2e." || lowerStr === "%2e%2e"; -} -exports.isDoubleDotPathSegment = isDoubleDotPathSegment; -/** - * Shorten's URL's path. - * - * @param url - an URL - */ -function shorten(url) { - /** - * 1. Let path be url’s path. - * 2. If path is empty, then return. - * 3. If url’s scheme is "file", path’s size is 1, and path[0] is a - * normalized Windows drive letter, then return. - * 4. Remove path’s last item. - */ - var path = url.path; - if (path.length === 0) - return; - if (url.scheme === "file" && path.length === 1 && - isNormalizedWindowsDriveLetter(path[0])) - return; - url.path.splice(url.path.length - 1, 1); -} -exports.shorten = shorten; -/** - * Determines if a string is a normalized Windows drive letter. - * - * @param str - a string - */ -function isNormalizedWindowsDriveLetter(str) { - /** - * A normalized Windows drive letter is a Windows drive letter of which the - * second code point is U+003A (:). - */ - return str.length >= 2 && infra_1.codePoint.ASCIIAlpha.test(str[0]) && - str[1] === ':'; -} -exports.isNormalizedWindowsDriveLetter = isNormalizedWindowsDriveLetter; -/** - * Determines if a string is a Windows drive letter. - * - * @param str - a string - */ -function isWindowsDriveLetter(str) { - /** - * A Windows drive letter is two code points, of which the first is an ASCII - * alpha and the second is either U+003A (:) or U+007C (|). - */ - return str.length >= 2 && infra_1.codePoint.ASCIIAlpha.test(str[0]) && - (str[1] === ':' || str[1] === '|'); -} -exports.isWindowsDriveLetter = isWindowsDriveLetter; -/** - * Determines if a string starts with a Windows drive letter. - * - * @param str - a string - */ -function startsWithAWindowsDriveLetter(str) { - /** - * A string starts with a Windows drive letter if all of the following are - * true: - * - its length is greater than or equal to 2 - * - its first two code points are a Windows drive letter - * - its length is 2 or its third code point is U+002F (/), U+005C (\), - * U+003F (?), or U+0023 (#). - */ - return str.length >= 2 && isWindowsDriveLetter(str) && - (str.length === 2 || (str[2] === '/' || str[2] === '\\' || - str[2] === '?' || str[2] === '#')); + }) + return max } -exports.startsWithAWindowsDriveLetter = startsWithAWindowsDriveLetter; -/** - * Parses a host string. - * - * @param input - input string - * @param isNotSpecial - `true` if the source URL is not special; otherwise - * `false`. - */ -function hostParser(input, isNotSpecial) { - if (isNotSpecial === void 0) { isNotSpecial = false; } - /** - * 1. If isNotSpecial is not given, then set isNotSpecial to false. - * 2. If input starts with U+005B ([), then: - * 2.1. If input does not end with U+005D (]), validation error, return - * failure. - * 2.2. Return the result of IPv6 parsing input with its leading U+005B ([) - * and trailing U+005D (]) removed. - */ - if (input.startsWith('[')) { - if (!input.endsWith(']')) { - validationError("Expected ']' after '['."); - return null; - } - return iPv6Parser(input.substring(1, input.length - 1)); - } - /** - * 3. If isNotSpecial is true, then return the result of opaque-host parsing - * input. - */ - if (isNotSpecial) { - return opaqueHostParser(input); - } - /** - * 4. Let domain be the result of running UTF-8 decode without BOM on the - * string percent decoding of input. - * _Note:_ Alternatively UTF-8 decode without BOM or fail can be used, - * coupled with an early return for failure, as domain to ASCII fails - * on U+FFFD REPLACEMENT CHARACTER. - */ - var domain = util_1.utf8Decode(stringPercentDecode(input)); - /** - * 5. Let asciiDomain be the result of running domain to ASCII on domain. - * 6. If asciiDomain is failure, validation error, return failure. - * 7. If asciiDomain contains a forbidden host code point, validation error, - * return failure. - */ - var asciiDomain = domainToASCII(domain); - if (asciiDomain === null) { - validationError("Invalid domain."); - return null; - } - if (_forbiddenHostCodePoint.test(asciiDomain)) { - validationError("Invalid domain."); - return null; +module.exports = maxSatisfying + + +/***/ }), + +/***/ 832: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(8088) +const Range = __nccwpck_require__(9828) +const minSatisfying = (versions, range, options) => { + let min = null + let minSV = null + let rangeObj = null + try { + rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach((v) => { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { + // compare(min, v, true) + min = v + minSV = new SemVer(min, options) + } } - /** - * 8. Let ipv4Host be the result of IPv4 parsing asciiDomain. - * 9. If ipv4Host is an IPv4 address or failure, return ipv4Host. - * 10. Return asciiDomain. - */ - var ipv4Host = iPv4Parser(asciiDomain); - if (ipv4Host === null || util_1.isNumber(ipv4Host)) - return ipv4Host; - return asciiDomain; + }) + return min } -exports.hostParser = hostParser; -/** - * Parses a string containing an IP v4 address. - * - * @param input - input string - * @param isNotSpecial - `true` if the source URL is not special; otherwise - * `false`. - */ -function iPv4NumberParser(input, validationErrorFlag) { - if (validationErrorFlag === void 0) { validationErrorFlag = { value: false }; } - /** - * 1. Let R be 10. - */ - var R = 10; - if (input.startsWith("0x") || input.startsWith("0X")) { - /** - * 2. If input contains at least two code points and the first two code - * points are either "0x" or "0X", then: - * 2.1. Set validationErrorFlag. - * 2.2. Remove the first two code points from input. - * 2.3. Set R to 16. - */ - validationErrorFlag.value = true; - input = input.substr(2); - R = 16; - } - else if (input.length >= 2 && input[0] === '0') { - /** - * 3. Otherwise, if input contains at least two code points and the first - * code point is U+0030 (0), then: - * 3.1. Set validationErrorFlag. - * 3.2. Remove the first code point from input. - * 3.3. Set R to 8. - */ - validationErrorFlag.value = true; - input = input.substr(1); - R = 8; - } - /** - * 4. If input is the empty string, then return zero. - * 5. If input contains a code point that is not a radix-R digit, then - * return failure. - */ - if (input === "") - return 0; - var radixRDigits = (R === 10 ? /^[0-9]+$/ : (R === 16 ? /^[0-9A-Fa-f]+$/ : /^[0-7]+$/)); - if (!radixRDigits.test(input)) - return null; - /** - * 6. Return the mathematical integer value that is represented by input in - * radix-R notation, using ASCII hex digits for digits with values - * 0 through 15. - */ - return parseInt(input, R); +module.exports = minSatisfying + + +/***/ }), + +/***/ 4179: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(8088) +const Range = __nccwpck_require__(9828) +const gt = __nccwpck_require__(4123) + +const minVersion = (range, loose) => { + range = new Range(range, loose) + + let minver = new SemVer('0.0.0') + if (range.test(minver)) { + return minver + } + + minver = new SemVer('0.0.0-0') + if (range.test(minver)) { + return minver + } + + minver = null + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i] + + let setMin = null + comparators.forEach((comparator) => { + // Clone to avoid manipulating the comparator's semver object. + const compver = new SemVer(comparator.semver.version) + switch (comparator.operator) { + case '>': + if (compver.prerelease.length === 0) { + compver.patch++ + } else { + compver.prerelease.push(0) + } + compver.raw = compver.format() + /* fallthrough */ + case '': + case '>=': + if (!setMin || gt(compver, setMin)) { + setMin = compver + } + break + case '<': + case '<=': + /* Ignore maximum versions */ + break + /* istanbul ignore next */ + default: + throw new Error(`Unexpected operation: ${comparator.operator}`) + } + }) + if (setMin && (!minver || gt(minver, setMin))) + minver = setMin + } + + if (minver && range.test(minver)) { + return minver + } + + return null } -exports.iPv4NumberParser = iPv4NumberParser; -/** - * Parses a string containing an IP v4 address. - * - * @param input - input string - */ -function iPv4Parser(input) { - var e_6, _a, e_7, _b; - /** - * 1. Let validationErrorFlag be unset. - * 2. Let parts be input split on U+002E (.). - */ - var validationErrorFlag = { value: false }; - var parts = input.split('.'); - /** - * 3. If the last item in parts is the empty string, then: - * 3.1. Set validationErrorFlag. - * 3.2. If parts has more than one item, then remove the last item from - * parts. - */ - if (parts[parts.length - 1] === "") { - validationErrorFlag.value = true; - if (parts.length > 1) - parts.pop(); - } - /** - * 4. If parts has more than four items, return input. - */ - if (parts.length > 4) - return input; - /** - * 5. Let numbers be the empty list. - * 6. For each part in parts: - * 6.1. If part is the empty string, return input. - * 6.2. Let n be the result of parsing part using validationErrorFlag. - * 6.3. If n is failure, return input. - * 6.4. Append n to numbers. - */ - var numbers = []; - try { - for (var parts_1 = __values(parts), parts_1_1 = parts_1.next(); !parts_1_1.done; parts_1_1 = parts_1.next()) { - var part = parts_1_1.value; - if (part === "") - return input; - var n = iPv4NumberParser(part, validationErrorFlag); - if (n === null) - return input; - numbers.push(n); - } - } - catch (e_6_1) { e_6 = { error: e_6_1 }; } - finally { - try { - if (parts_1_1 && !parts_1_1.done && (_a = parts_1.return)) _a.call(parts_1); - } - finally { if (e_6) throw e_6.error; } - } - /** - * 7. If validationErrorFlag is set, validation error. - * 8. If any item in numbers is greater than 255, validation error. - * 9. If any but the last item in numbers is greater than 255, return - * failure. - * 10. If the last item in numbers is greater than or equal to - * 256**(5 − the number of items in numbers), validation error, return failure. - */ - if (validationErrorFlag.value) - validationError("Invalid IP v4 address."); - for (var i = 0; i < numbers.length; i++) { - var item = numbers[i]; - if (item > 255) { - validationError("Invalid IP v4 address."); - if (i < numbers.length - 1) - return null; - } - } - if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) { - validationError("Invalid IP v4 address."); - return null; - } - /** - * 11. Let ipv4 be the last item in numbers. - * 12. Remove the last item from numbers. - */ - var ipv4 = numbers[numbers.length - 1]; - numbers.pop(); - /** - * 13. Let counter be zero. - * 14. For each n in numbers: - * 14.2. Increment ipv4 by n × 256**(3 − counter). - * 14.2. Increment counter by 1. - */ - var counter = 0; - try { - for (var numbers_1 = __values(numbers), numbers_1_1 = numbers_1.next(); !numbers_1_1.done; numbers_1_1 = numbers_1.next()) { - var n = numbers_1_1.value; - ipv4 += n * Math.pow(256, 3 - counter); - counter++; - } +module.exports = minVersion + + +/***/ }), + +/***/ 420: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const SemVer = __nccwpck_require__(8088) +const Comparator = __nccwpck_require__(1532) +const {ANY} = Comparator +const Range = __nccwpck_require__(9828) +const satisfies = __nccwpck_require__(6055) +const gt = __nccwpck_require__(4123) +const lt = __nccwpck_require__(194) +const lte = __nccwpck_require__(7520) +const gte = __nccwpck_require__(5522) + +const outside = (version, range, hilo, options) => { + version = new SemVer(version, options) + range = new Range(range, options) + + let gtfn, ltefn, ltfn, comp, ecomp + switch (hilo) { + case '>': + gtfn = gt + ltefn = lte + ltfn = lt + comp = '>' + ecomp = '>=' + break + case '<': + gtfn = lt + ltefn = gte + ltfn = gt + comp = '<' + ecomp = '<=' + break + default: + throw new TypeError('Must provide a hilo val of "<" or ">"') + } + + // If it satisfies the range it is not outside + if (satisfies(version, range, options)) { + return false + } + + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (let i = 0; i < range.set.length; ++i) { + const comparators = range.set[i] + + let high = null + let low = null + + comparators.forEach((comparator) => { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator + low = low || comparator + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator + } + }) + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false } - catch (e_7_1) { e_7 = { error: e_7_1 }; } - finally { - try { - if (numbers_1_1 && !numbers_1_1.done && (_b = numbers_1.return)) _b.call(numbers_1); - } - finally { if (e_7) throw e_7.error; } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false } - /** - * 15. Return ipv4. - */ - return ipv4; + } + return true } -exports.iPv4Parser = iPv4Parser; -/** - * Parses a string containing an IP v6 address. - * - * @param input - input string - */ -function iPv6Parser(input) { - var _a; - /** - * 1. Let address be a new IPv6 address whose IPv6 pieces are all 0. - * 2. Let pieceIndex be 0. - * 3. Let compress be null. - * 4. Let pointer be a pointer into input, initially 0 (pointing to the - * first code point). - */ - var EOF = ""; - var address = [0, 0, 0, 0, 0, 0, 0, 0]; - var pieceIndex = 0; - var compress = null; - var walker = new util_1.StringWalker(input); - /** - * 5. If c is U+003A (:), then: - * 5.1. If remaining does not start with U+003A (:), validation error, - * return failure. - * 5.2. Increase pointer by 2. - * 5.3. Increase pieceIndex by 1 and then set compress to pieceIndex. - */ - if (walker.c() === ':') { - if (!walker.remaining().startsWith(':')) { - validationError("Invalid IP v6 address."); - return null; - } - walker.pointer += 2; - pieceIndex += 1; - compress = pieceIndex; - } - /** - * 6. While c is not the EOF code point: - */ - while (walker.c() !== EOF) { - /** - * 6.1. If pieceIndex is 8, validation error, return failure. - */ - if (pieceIndex === 8) { - validationError("Invalid IP v6 address."); - return null; - } - /** - * 6.2. If c is U+003A (:), then: - * 6.2.1. If compress is non-null, validation error, return failure. - * 6.2.2. Increase pointer and pieceIndex by 1, set compress to pieceIndex, - * and then continue. - */ - if (walker.c() === ':') { - if (compress !== null) { - validationError("Invalid IP v6 address."); - return null; - } - walker.pointer++; - pieceIndex++; - compress = pieceIndex; - continue; - } - /** - * 6.3. Let value and length be 0. - * 6.4. While length is less than 4 and c is an ASCII hex digit, set value - * to value × 0x10 + c interpreted as hexadecimal number, and increase - * pointer and length by 1. - */ - var value = 0; - var length = 0; - while (length < 4 && infra_1.codePoint.ASCIIHexDigit.test(walker.c())) { - value = value * 0x10 + parseInt(walker.c(), 16); - walker.pointer++; - length++; - } - /** - * 6.5. If c is U+002E (.), then: - */ - if (walker.c() === '.') { - /** - * 6.5.1. If length is 0, validation error, return failure. - * 6.5.2. Decrease pointer by length. - * 6.5.3. If pieceIndex is greater than 6, validation error, return - * failure. - * 6.5.4. Let numbersSeen be 0. - */ - if (length === 0) { - validationError("Invalid IP v6 address."); - return null; - } - walker.pointer -= length; - if (pieceIndex > 6) { - validationError("Invalid IP v6 address."); - return null; - } - var numbersSeen = 0; - /** - * 6.5.5. While c is not the EOF code point: - */ - while (walker.c() !== EOF) { - /** - * 6.5.5.1. Let ipv4Piece be null. - */ - var ipv4Piece = null; - /** - * 6.5.5.2. If numbersSeen is greater than 0, then: - * 6.5.5.2.1. If c is a U+002E (.) and numbersSeen is less than 4, then - * increase pointer by 1. - * 6.5.5.2.1. Otherwise, validation error, return failure. - */ - if (numbersSeen > 0) { - if (walker.c() === '.' && numbersSeen < 4) { - walker.pointer++; - } - else { - validationError("Invalid IP v6 address."); - return null; - } - } - /** - * 6.5.5.3. If c is not an ASCII digit, validation error, return - * failure. - */ - if (!infra_1.codePoint.ASCIIDigit.test(walker.c())) { - validationError("Invalid IP v6 address."); - return null; - } - /** - * 6.5.5.4. While c is an ASCII digit: - */ - while (infra_1.codePoint.ASCIIDigit.test(walker.c())) { - /** - * 6.5.5.4.1. Let number be c interpreted as decimal number. - */ - var number = parseInt(walker.c(), 10); - /** - * 6.5.5.4.2. If ipv4Piece is null, then set ipv4Piece to number. - * Otherwise, if ipv4Piece is 0, validation error, return failure. - * Otherwise, set ipv4Piece to ipv4Piece × 10 + number. - */ - if (ipv4Piece === null) { - ipv4Piece = number; - } - else if (ipv4Piece === 0) { - validationError("Invalid IP v6 address."); - return null; - } - else { - ipv4Piece = ipv4Piece * 10 + number; - } - /** - * 6.5.5.4.3. If ipv4Piece is greater than 255, validation error, return failure. - * 6.5.5.4.4. Increase pointer by 1. - */ - if (ipv4Piece > 255) { - validationError("Invalid IP v6 address."); - return null; - } - walker.pointer++; - } - /** - * 6.5.5.5. Set address[pieceIndex] to address[pieceIndex] × 0x100 + ipv4Piece. - * 6.5.5.6. Increase numbersSeen by 1. - * 6.5.5.7. If numbersSeen is 2 or 4, then increase pieceIndex by 1. - */ - if (ipv4Piece === null) { - validationError("Invalid IP v6 address."); - return null; - } - address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece; - numbersSeen++; - if (numbersSeen === 2 || numbersSeen === 4) - pieceIndex++; - } - /** - * 6.5.6. If numbersSeen is not 4, validation error, return failure. - */ - if (numbersSeen !== 4) { - validationError("Invalid IP v6 address."); - return null; - } - /** - * 6.5.7. Break. - */ - break; - } - else if (walker.c() === ':') { - /** - * 6.6. Otherwise, if c is U+003A (:): - * 6.6.1. Increase pointer by 1. - * 6.6.2. If c is the EOF code point, validation error, return failure. - */ - walker.pointer++; - if (walker.c() === EOF) { - validationError("Invalid IP v6 address."); - return null; - } - } - else if (walker.c() !== EOF) { - /** - * 6.7. Otherwise, if c is not the EOF code point, validation error, - * return failure. - */ - validationError("Invalid IP v6 address."); - return null; - } - /** - * 6.8. Set address[pieceIndex] to value. - * 6.9. Increase pieceIndex by 1. - */ - address[pieceIndex] = value; - pieceIndex++; - } - /** - * 7. If compress is non-null, then: - * 7.1. Let swaps be pieceIndex − compress. - * 7.2. Set pieceIndex to 7. - * 7.3. While pieceIndex is not 0 and swaps is greater than 0, swap - * address[pieceIndex] with address[compress + swaps − 1], and then decrease - * both pieceIndex and swaps by 1. - */ - if (compress !== null) { - var swaps = pieceIndex - compress; - pieceIndex = 7; - while (pieceIndex !== 0 && swaps > 0) { - _a = __read([address[compress + swaps - 1], address[pieceIndex]], 2), address[pieceIndex] = _a[0], address[compress + swaps - 1] = _a[1]; - pieceIndex--; - swaps--; - } + +module.exports = outside + + +/***/ }), + +/***/ 5297: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +// given a set of versions and a range, create a "simplified" range +// that includes the same versions that the original range does +// If the original range is shorter than the simplified one, return that. +const satisfies = __nccwpck_require__(6055) +const compare = __nccwpck_require__(9834) +module.exports = (versions, range, options) => { + const set = [] + let min = null + let prev = null + const v = versions.sort((a, b) => compare(a, b, options)) + for (const version of v) { + const included = satisfies(version, range, options) + if (included) { + prev = version + if (!min) + min = version + } else { + if (prev) { + set.push([min, prev]) + } + prev = null + min = null } - else if (compress === null && pieceIndex !== 8) { - /** - * 8. Otherwise, if compress is null and pieceIndex is not 8, - * validation error, return failure. - */ - validationError("Invalid IP v6 address."); - return null; + } + if (min) + set.push([min, null]) + + const ranges = [] + for (const [min, max] of set) { + if (min === max) + ranges.push(min) + else if (!max && min === v[0]) + ranges.push('*') + else if (!max) + ranges.push(`>=${min}`) + else if (min === v[0]) + ranges.push(`<=${max}`) + else + ranges.push(`${min} - ${max}`) + } + const simplified = ranges.join(' || ') + const original = typeof range.raw === 'string' ? range.raw : String(range) + return simplified.length < original.length ? simplified : range +} + + +/***/ }), + +/***/ 7863: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const Range = __nccwpck_require__(9828) +const { ANY } = __nccwpck_require__(1532) +const satisfies = __nccwpck_require__(6055) +const compare = __nccwpck_require__(9834) + +// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff: +// - Every simple range `r1, r2, ...` is a subset of some `R1, R2, ...` +// +// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff: +// - If c is only the ANY comparator +// - If C is only the ANY comparator, return true +// - Else return false +// - Let EQ be the set of = comparators in c +// - If EQ is more than one, return true (null set) +// - Let GT be the highest > or >= comparator in c +// - Let LT be the lowest < or <= comparator in c +// - If GT and LT, and GT.semver > LT.semver, return true (null set) +// - If EQ +// - If GT, and EQ does not satisfy GT, return true (null set) +// - If LT, and EQ does not satisfy LT, return true (null set) +// - If EQ satisfies every C, return true +// - Else return false +// - If GT +// - If GT.semver is lower than any > or >= comp in C, return false +// - If GT is >=, and GT.semver does not satisfy every C, return false +// - If LT +// - If LT.semver is greater than any < or <= comp in C, return false +// - If LT is <=, and LT.semver does not satisfy every C, return false +// - If any C is a = range, and GT or LT are set, return false +// - Else return true + +const subset = (sub, dom, options) => { + if (sub === dom) + return true + + sub = new Range(sub, options) + dom = new Range(dom, options) + let sawNonNull = false + + OUTER: for (const simpleSub of sub.set) { + for (const simpleDom of dom.set) { + const isSub = simpleSubset(simpleSub, simpleDom, options) + sawNonNull = sawNonNull || isSub !== null + if (isSub) + continue OUTER } - /** - * 9. Return address. - */ - return address; + // the null set is a subset of everything, but null simple ranges in + // a complex range should be ignored. so if we saw a non-null range, + // then we know this isn't a subset, but if EVERY simple range was null, + // then it is a subset. + if (sawNonNull) + return false + } + return true } -exports.iPv6Parser = iPv6Parser; -/** - * Parses an opaque host string. - * - * @param input - a string - */ -function opaqueHostParser(input) { - var e_8, _a; - /** - * 1. If input contains a forbidden host code point excluding U+0025 (%), - * validation error, return failure. - * 2. Let output be the empty string. - * 3. For each code point in input, UTF-8 percent encode it using the C0 - * control percent-encode set, and append the result to output. - * 4. Return output. - */ - var forbiddenChars = /[\x00\t\f\r #/:?@\[\\\]]/; - if (forbiddenChars.test(input)) { - validationError("Invalid host string."); - return null; + +const simpleSubset = (sub, dom, options) => { + if (sub === dom) + return true + + if (sub.length === 1 && sub[0].semver === ANY) + return dom.length === 1 && dom[0].semver === ANY + + const eqSet = new Set() + let gt, lt + for (const c of sub) { + if (c.operator === '>' || c.operator === '>=') + gt = higherGT(gt, c, options) + else if (c.operator === '<' || c.operator === '<=') + lt = lowerLT(lt, c, options) + else + eqSet.add(c.semver) + } + + if (eqSet.size > 1) + return null + + let gtltComp + if (gt && lt) { + gtltComp = compare(gt.semver, lt.semver, options) + if (gtltComp > 0) + return null + else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) + return null + } + + // will iterate one or zero times + for (const eq of eqSet) { + if (gt && !satisfies(eq, String(gt), options)) + return null + + if (lt && !satisfies(eq, String(lt), options)) + return null + + for (const c of dom) { + if (!satisfies(eq, String(c), options)) + return false } - var output = ""; - try { - for (var input_1 = __values(input), input_1_1 = input_1.next(); !input_1_1.done; input_1_1 = input_1.next()) { - var codePoint = input_1_1.value; - output += utf8PercentEncode(codePoint, _c0ControlPercentEncodeSet); - } + + return true + } + + let higher, lower + let hasDomLT, hasDomGT + for (const c of dom) { + hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>=' + hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<=' + if (gt) { + if (c.operator === '>' || c.operator === '>=') { + higher = higherGT(gt, c, options) + if (higher === c && higher !== gt) + return false + } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) + return false } - catch (e_8_1) { e_8 = { error: e_8_1 }; } - finally { - try { - if (input_1_1 && !input_1_1.done && (_a = input_1.return)) _a.call(input_1); - } - finally { if (e_8) throw e_8.error; } + if (lt) { + if (c.operator === '<' || c.operator === '<=') { + lower = lowerLT(lt, c, options) + if (lower === c && lower !== lt) + return false + } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) + return false } - return output; -} -exports.opaqueHostParser = opaqueHostParser; -/** - * Resolves a Blob URL from the user agent's Blob URL store. - * function is not implemented. - * See: https://w3c.github.io/FileAPI/#blob-url-resolve - * - * @param url - an url - */ -function resolveABlobURL(url) { - return null; + if (!c.operator && (lt || gt) && gtltComp !== 0) + return false + } + + // if there was a < or >, and nothing in the dom, then must be false + // UNLESS it was limited by another range in the other direction. + // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0 + if (gt && hasDomLT && !lt && gtltComp !== 0) + return false + + if (lt && hasDomGT && !gt && gtltComp !== 0) + return false + + return true } -exports.resolveABlobURL = resolveABlobURL; -/** - * Percent encodes a byte. - * - * @param value - a byte - */ -function percentEncode(value) { - /** - * To percent encode a byte into a percent-encoded byte, return a string - * consisting of U+0025 (%), followed by two ASCII upper hex digits - * representing byte. - */ - return '%' + ('00' + value.toString(16).toUpperCase()).slice(-2); + +// >=1.2.3 is lower than >1.2.3 +const higherGT = (a, b, options) => { + if (!a) + return b + const comp = compare(a.semver, b.semver, options) + return comp > 0 ? a + : comp < 0 ? b + : b.operator === '>' && a.operator === '>=' ? b + : a } -exports.percentEncode = percentEncode; -/** - * Percent decodes a byte sequence input. - * - * @param input - a byte sequence - */ -function percentDecode(input) { - var isHexDigit = function (byte) { - return (byte >= 0x30 && byte <= 0x39) || (byte >= 0x41 && byte <= 0x46) || - (byte >= 0x61 && byte <= 0x66); - }; - /** - * 1. Let output be an empty byte sequence. - * 2. For each byte byte in input: - */ - var output = new Uint8Array(input.length); - var n = 0; - for (var i = 0; i < input.length; i++) { - var byte = input[i]; - /** - * 2.1. If byte is not 0x25 (%), then append byte to output. - * 2.2. Otherwise, if byte is 0x25 (%) and the next two bytes after byte - * in input are not in the ranges 0x30 (0) to 0x39 (9), 0x41 (A) - * to 0x46 (F), and 0x61 (a) to 0x66 (f), all inclusive, append byte - * to output. - * 2.3. Otherwise: - * 2.3.1. Let bytePoint be the two bytes after byte in input, decoded, - * and then interpreted as hexadecimal number. - * 2.3.2. Append a byte whose value is bytePoint to output. - * 2.3.3. Skip the next two bytes in input. - */ - if (byte !== 0x25) { - output[n] = byte; - n++; - } - else if (byte === 0x25 && i >= input.length - 2) { - output[n] = byte; - n++; - } - else if (byte === 0x25 && (!isHexDigit(input[i + 1]) || !isHexDigit(input[i + 2]))) { - output[n] = byte; - n++; - } - else { - var bytePoint = parseInt(util_1.utf8Decode(Uint8Array.of(input[i + 1], input[i + 2])), 16); - output[n] = bytePoint; - n++; - i += 2; - } - } - return output.subarray(0, n); + +// <=1.2.3 is higher than <1.2.3 +const lowerLT = (a, b, options) => { + if (!a) + return b + const comp = compare(a.semver, b.semver, options) + return comp < 0 ? a + : comp > 0 ? b + : b.operator === '<' && a.operator === '<=' ? b + : a } -exports.percentDecode = percentDecode; -/** - * String percent decodes a string. - * - * @param input - a string - */ -function stringPercentDecode(input) { - /** - * 1. Let bytes be the UTF-8 encoding of input. - * 2. Return the percent decoding of bytes. - */ - return percentDecode(util_1.utf8Encode(input)); + +module.exports = subset + + +/***/ }), + +/***/ 2706: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const Range = __nccwpck_require__(9828) + +// Mostly just for testing and legacy API reasons +const toComparators = (range, options) => + new Range(range, options).set + .map(comp => comp.map(c => c.value).join(' ').trim().split(' ')) + +module.exports = toComparators + + +/***/ }), + +/***/ 2098: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const Range = __nccwpck_require__(9828) +const validRange = (range, options) => { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, options).range || '*' + } catch (er) { + return null + } } -exports.stringPercentDecode = stringPercentDecode; -/** - * UTF-8 percent encodes a code point, using a percent encode set. - * - * @param codePoint - a code point - * @param percentEncodeSet - a percent encode set - */ -function utf8PercentEncode(codePoint, percentEncodeSet) { - var e_9, _a; - /** - * 1. If codePoint is not in percentEncodeSet, then return codePoint. - * 2. Let bytes be the result of running UTF-8 encode on codePoint. - * 3. Percent encode each byte in bytes, and then return the results - * concatenated, in the same order. - */ - if (!percentEncodeSet.test(codePoint)) - return codePoint; - var bytes = util_1.utf8Encode(codePoint); - var result = ""; - try { - for (var bytes_2 = __values(bytes), bytes_2_1 = bytes_2.next(); !bytes_2_1.done; bytes_2_1 = bytes_2.next()) { - var byte = bytes_2_1.value; - result += percentEncode(byte); - } - } - catch (e_9_1) { e_9 = { error: e_9_1 }; } - finally { - try { - if (bytes_2_1 && !bytes_2_1.done && (_a = bytes_2.return)) _a.call(bytes_2); - } - finally { if (e_9) throw e_9.error; } - } - return result; +module.exports = validRange + + +/***/ }), + +/***/ 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__(1631); +var tls = __nccwpck_require__(8818); +var http = __nccwpck_require__(8605); +var https = __nccwpck_require__(7211); +var events = __nccwpck_require__(8614); +var assert = __nccwpck_require__(2357); +var util = __nccwpck_require__(1669); + + +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; } -exports.utf8PercentEncode = utf8PercentEncode; -/** - * Determines if two hosts are considered equal. - * - * @param hostA - a host - * @param hostB - a host - */ -function hostEquals(hostA, hostB) { - return hostA === hostB; + +function httpsOverHttp(options) { + var agent = new TunnelingAgent(options); + agent.request = http.request; + agent.createSocket = createSecureSocket; + agent.defaultPort = 443; + return agent; } -exports.hostEquals = hostEquals; -/** - * Determines if two URLs are considered equal. - * - * @param urlA - a URL - * @param urlB - a URL - * @param excludeFragmentsFlag - whether to ignore fragments while comparing - */ -function urlEquals(urlA, urlB, excludeFragmentsFlag) { - if (excludeFragmentsFlag === void 0) { excludeFragmentsFlag = false; } - /** - * 1. Let serializedA be the result of serializing A, with the exclude - * fragment flag set if the exclude fragments flag is set. - * 2. Let serializedB be the result of serializing B, with the exclude - * fragment flag set if the exclude fragments flag is set. - * 3. Return true if serializedA is serializedB, and false otherwise. - */ - return urlSerializer(urlA, excludeFragmentsFlag) === - urlSerializer(urlB, excludeFragmentsFlag); + +function httpOverHttps(options) { + var agent = new TunnelingAgent(options); + agent.request = https.request; + return agent; } -exports.urlEquals = urlEquals; -/** - * Parses an `application/x-www-form-urlencoded` string. - * - * @param input - a string - */ -function urlEncodedStringParser(input) { - /** - * The application/x-www-form-urlencoded string parser takes a string input, - * UTF-8 encodes it, and then returns the result of - * application/x-www-form-urlencoded parsing it. - */ - return urlEncodedParser(util_1.utf8Encode(input)); + +function httpsOverHttps(options) { + var agent = new TunnelingAgent(options); + agent.request = https.request; + agent.createSocket = createSecureSocket; + agent.defaultPort = 443; + return agent; } -exports.urlEncodedStringParser = urlEncodedStringParser; -/** - * Parses `application/x-www-form-urlencoded` bytes. - * - * @param input - a byte sequence - */ -function urlEncodedParser(input) { - var e_10, _a, e_11, _b; - /** - * 1. Let sequences be the result of splitting input on 0x26 (&). - */ - var sequences = []; - var currentSequence = []; - try { - for (var input_2 = __values(input), input_2_1 = input_2.next(); !input_2_1.done; input_2_1 = input_2.next()) { - var byte = input_2_1.value; - if (byte === 0x26) { - sequences.push(Uint8Array.from(currentSequence)); - currentSequence = []; - } - else { - currentSequence.push(byte); - } - } - } - catch (e_10_1) { e_10 = { error: e_10_1 }; } - finally { - try { - if (input_2_1 && !input_2_1.done && (_a = input_2.return)) _a.call(input_2); - } - finally { if (e_10) throw e_10.error; } - } - if (currentSequence.length !== 0) { - sequences.push(Uint8Array.from(currentSequence)); - } - /** - * 2. Let output be an initially empty list of name-value tuples where both name and value hold a string. - */ - var output = []; - try { - /** - * 3. For each byte sequence bytes in sequences: - */ - for (var sequences_1 = __values(sequences), sequences_1_1 = sequences_1.next(); !sequences_1_1.done; sequences_1_1 = sequences_1.next()) { - var bytes = sequences_1_1.value; - /** - * 3.1. If bytes is the empty byte sequence, then continue. - */ - if (bytes.length === 0) - continue; - /** - * 3.2. If bytes contains a 0x3D (=), then let name be the bytes from the - * start of bytes up to but excluding its first 0x3D (=), and let value be - * the bytes, if any, after the first 0x3D (=) up to the end of bytes. - * If 0x3D (=) is the first byte, then name will be the empty byte - * sequence. If it is the last, then value will be the empty byte sequence. - * 3.3. Otherwise, let name have the value of bytes and let value be the - * empty byte sequence. - */ - var index = bytes.indexOf(0x3D); - var name = (index !== -1 ? bytes.slice(0, index) : bytes); - var value = (index !== -1 ? bytes.slice(index + 1) : new Uint8Array()); - /** - * 3.4. Replace any 0x2B (+) in name and value with 0x20 (SP). - */ - for (var i = 0; i < name.length; i++) - if (name[i] === 0x2B) - name[i] = 0x20; - for (var i = 0; i < value.length; i++) - if (value[i] === 0x2B) - value[i] = 0x20; - /** - * 3.5. Let nameString and valueString be the result of running UTF-8 - * decode without BOM on the percent decoding of name and value, - * respectively. - */ - var nameString = util_1.utf8Decode(name); - var valueString = util_1.utf8Decode(value); - /** - * 3.6. Append (nameString, valueString) to output. - */ - output.push([nameString, valueString]); - } - } - catch (e_11_1) { e_11 = { error: e_11_1 }; } - finally { - try { - if (sequences_1_1 && !sequences_1_1.done && (_b = sequences_1.return)) _b.call(sequences_1); - } - finally { if (e_11) throw e_11.error; } + + +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; + } } - /** - * 4. Return output. - */ - return output; + socket.destroy(); + self.removeSocket(socket); + }); } -exports.urlEncodedParser = urlEncodedParser; -/** - * Serializes `application/x-www-form-urlencoded` bytes. - * - * @param input - a byte sequence - */ -function urlEncodedByteSerializer(input) { - var e_12, _a; - /** - * 1. Let output be the empty string. - * 2. For each byte in input, depending on byte: - * 0x20 (SP) - * Append U+002B (+) to output. - * - * 0x2A (*) - * 0x2D (-) - * 0x2E (.) - * 0x30 (0) to 0x39 (9) - * 0x41 (A) to 0x5A (Z) - * 0x5F (_) - * 0x61 (a) to 0x7A (z) - * Append a code point whose value is byte to output. - * - * Otherwise - * Append byte, percent encoded, to output. - * 3. Return output. - */ - var output = ""; - try { - for (var input_3 = __values(input), input_3_1 = input_3.next(); !input_3_1.done; input_3_1 = input_3.next()) { - var byte = input_3_1.value; - if (byte === 0x20) { - output += '+'; - } - else if (byte === 0x2A || byte === 0x2D || byte === 0x2E || - (byte >= 0x30 && byte <= 0x39) || (byte >= 0x41 && byte <= 0x5A) || - byte === 0x5F || (byte >= 0x61 && byte <= 0x7A)) { - output += String.fromCodePoint(byte); - } - else { - output += percentEncode(byte); - } - } +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); } - catch (e_12_1) { e_12 = { error: e_12_1 }; } - finally { - try { - if (input_3_1 && !input_3_1.done && (_a = input_3.return)) _a.call(input_3); - } - finally { if (e_12) throw e_12.error; } + + function onCloseOrRemove(err) { + self.removeSocket(socket); + socket.removeListener('free', onFree); + socket.removeListener('close', onCloseOrRemove); + socket.removeListener('agentRemove', onCloseOrRemove); } - return output; -} -exports.urlEncodedByteSerializer = urlEncodedByteSerializer; -/** - * Serializes `application/x-www-form-urlencoded` tuples. - * - * @param input - input tuple of name/value pairs - * @param encodingOverride: encoding override - */ -function urlEncodedSerializer(tuples, encodingOverride) { - var e_13, _a; - /** - * 1. Let encoding be UTF-8. - * 2. If encoding override is given, set encoding to the result of getting - * an output encoding from encoding override. - */ - var encoding = (encodingOverride === undefined || - encodingOverride === "replacement" || encodingOverride === "UTF-16BE" || - encodingOverride === "UTF-16LE" ? "UTF-8" : encodingOverride); - if (encoding.toUpperCase() !== "UTF-8") { - throw new Error("Only UTF-8 encoding is supported."); + }); +}; + +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; } - /** - * 3. Let output be the empty string. - */ - var output = ""; - try { - /** - * 4. For each tuple in tuples: - */ - for (var tuples_1 = __values(tuples), tuples_1_1 = tuples_1.next(); !tuples_1_1.done; tuples_1_1 = tuples_1.next()) { - var tuple = tuples_1_1.value; - /** - * 4.1. Let name be the result of serializing the result of encoding - * tuple’s name, using encoding. - */ - var name = urlEncodedByteSerializer(util_1.utf8Encode(tuple[0])); - /** - * 4.2. Let value be tuple’s value. - */ - var value = tuple[1]; - /** - * TODO: - * 4.3. If value is a file, then set value to value’s filename. - */ - /** - * 4.4. Set value to the result of serializing the result of encoding - * value, using encoding. - */ - value = urlEncodedByteSerializer(util_1.utf8Encode(value)); - /** - * 4.5. If tuple is not the first pair in tuples, then append U+0026 (&) - * to output. - */ - if (output !== "") - output += '&'; - /** - * 4.6. Append name, followed by U+003D (=), followed by value, to output. - */ - output += name + '=' + value; - } + 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; } - catch (e_13_1) { e_13 = { error: e_13_1 }; } - finally { - try { - if (tuples_1_1 && !tuples_1_1.done && (_a = tuples_1.return)) _a.call(tuples_1); + 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]; } - finally { if (e_13) throw e_13.error; } + } } - /** - * 5. Return output. - */ - return output; + } + return target; } -exports.urlEncodedSerializer = urlEncodedSerializer; -/** - * Returns a URL's origin. - * - * @param url - a URL - */ -function origin(url) { - /** - * A URL’s origin is the origin returned by running these steps, switching - * on URL’s scheme: - * "blob" - * 1. If URL’s blob URL entry is non-null, then return URL’s blob URL - * entry’s environment’s origin. - * 2. Let url be the result of parsing URL’s path[0]. - * 3. Return a new opaque origin, if url is failure, and url’s origin - * otherwise. - * "ftp" - * "http" - * "https" - * "ws" - * "wss" - * Return a tuple consisting of URL’s scheme, URL’s host, URL’s port, and - * null. - * "file" - * Unfortunate as it is, is left as an exercise to the reader. When in - * doubt, return a new opaque origin. - * Otherwise - * Return a new opaque origin. - */ - switch (url.scheme) { - case "blob": - if (url._blobURLEntry !== null) { - // TODO: return URL’s blob URL entry’s environment’s origin. - } - var parsedURL = basicURLParser(url.path[0]); - if (parsedURL === null) - return interfaces_1.OpaqueOrigin; - else - return origin(parsedURL); - case "ftp": - case "http": - case "https": - case "ws": - case "wss": - return [url.scheme, url.host === null ? "" : url.host, url.port, null]; - case "file": - return interfaces_1.OpaqueOrigin; - default: - return interfaces_1.OpaqueOrigin; + + +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.origin = origin; +exports.debug = debug; // for test + + +/***/ }), + +/***/ 2707: +/***/ ((module) => { + /** - * Converts a domain string to ASCII. - * - * @param domain - a domain string + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX */ -function domainToASCII(domain, beStrict) { - if (beStrict === void 0) { beStrict = false; } - /** - * 1. If beStrict is not given, set it to false. - * 2. Let result be the result of running Unicode ToASCII with domain_name - * set to domain, UseSTD3ASCIIRules set to beStrict, CheckHyphens set to - * false, CheckBidi set to true, CheckJoiners set to true, - * Transitional_Processing set to false, and VerifyDnsLength set to beStrict. - * 3. If result is a failure value, validation error, return failure. - * 4. Return result. - */ - // Use node.js function - var result = url_1.domainToASCII(domain); - if (result === "") { - validationError("Invalid domain name."); - return null; - } - return result; +var byteToHex = []; +for (var i = 0; i < 256; ++i) { + byteToHex[i] = (i + 0x100).toString(16).substr(1); } -exports.domainToASCII = domainToASCII; -/** - * Converts a domain string to Unicode. - * - * @param domain - a domain string - */ -function domainToUnicode(domain, beStrict) { - if (beStrict === void 0) { beStrict = false; } - /** - * 1. Let result be the result of running Unicode ToUnicode with domain_name - * set to domain, CheckHyphens set to false, CheckBidi set to true, - * CheckJoiners set to true, UseSTD3ASCIIRules set to false, and - * Transitional_Processing set to false. - * 2. Signify validation errors for any returned errors, and then, - * return result. - */ - // Use node.js function - var result = url_1.domainToUnicode(domain); - if (result === "") { - validationError("Invalid domain name."); - } - return result; + +function bytesToUuid(buf, offset) { + var i = offset || 0; + var bth = byteToHex; + // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4 + return ([ + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]] + ]).join(''); } -exports.domainToUnicode = domainToUnicode; -/** - * Serializes an origin. - * function is from the HTML spec: - * https://html.spec.whatwg.org/#ascii-serialisation-of-an-origin - * - * @param origin - an origin - */ -function asciiSerializationOfAnOrigin(origin) { - /** - * 1. If origin is an opaque origin, then return "null". - * 2. Otherwise, let result be origin's scheme. - * 3. Append "://" to result. - * 4. Append origin's host, serialized, to result. - * 5. If origin's port is non-null, append a U+003A COLON character (:), - * and origin's port, serialized, to result. - * 6. Return result. - */ - if (origin[0] === "" && origin[1] === "" && origin[2] === null && origin[3] === null) { - return "null"; + +module.exports = bytesToUuid; + + +/***/ }), + +/***/ 5859: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +// Unique ID creation requires a high quality random # generator. In node.js +// this is pretty straight-forward - we use the crypto API. + +var crypto = __nccwpck_require__(3373); + +module.exports = function nodeRNG() { + return crypto.randomBytes(16); +}; + + +/***/ }), + +/***/ 824: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +var rng = __nccwpck_require__(5859); +var bytesToUuid = __nccwpck_require__(2707); + +function v4(options, buf, offset) { + var i = buf && offset || 0; + + if (typeof(options) == 'string') { + buf = options === 'binary' ? new Array(16) : null; + options = null; + } + options = options || {}; + + var rnds = options.random || (options.rng || rng)(); + + // 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) { + for (var ii = 0; ii < 16; ++ii) { + buf[i + ii] = rnds[ii]; } - var result = origin[0] + "://" + hostSerializer(origin[1]); - if (origin[2] !== null) - result += ":" + origin[2].toString(); - return result; + } + + return buf || bytesToUuid(rnds); } -exports.asciiSerializationOfAnOrigin = asciiSerializationOfAnOrigin; -//# sourceMappingURL=URLAlgorithm.js.map -/***/ }), -/* 814 */, -/* 815 */, -/* 816 */, -/* 817 */, -/* 818 */ -/***/ (function(module) { +module.exports = v4; -module.exports = require("tls"); /***/ }), -/* 819 */, -/* 820 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 5696: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(6417); +var util_1 = __nccwpck_require__(6195); +var util_2 = __nccwpck_require__(5282); +var _1 = __nccwpck_require__(4260); +var dom_1 = __nccwpck_require__(770); +/** @inheritdoc */ +function builder(p1, p2) { + var options = formatBuilderOptions(isXMLBuilderCreateOptions(p1) ? p1 : interfaces_1.DefaultBuilderOptions); + var nodes = util_2.Guard.isNode(p1) || util_1.isArray(p1) ? p1 : p2; + if (nodes === undefined) { + throw new Error("Invalid arguments."); + } + if (util_1.isArray(nodes)) { + var builders = []; + for (var i = 0; i < nodes.length; i++) { + var builder_1 = new _1.XMLBuilderImpl(nodes[i]); + builder_1.set(options); + builders.push(builder_1); } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(970); -var CharacterDataImpl_1 = __webpack_require__(43); -var algorithm_1 = __webpack_require__(163); -var WebIDLAlgorithm_1 = __webpack_require__(495); -/** - * Represents a text node. - */ -var TextImpl = /** @class */ (function (_super) { - __extends(TextImpl, _super); - /** - * Initializes a new instance of `Text`. - * - * @param data - the text content - */ - function TextImpl(data) { - if (data === void 0) { data = ''; } - var _this = _super.call(this, data) || this; - _this._name = ''; - _this._assignedSlot = null; - return _this; + return builders; } - Object.defineProperty(TextImpl.prototype, "wholeText", { - /** @inheritdoc */ - get: function () { - var e_1, _a; - /** - * The wholeText attribute’s getter must return the concatenation of the - * data of the contiguous Text nodes of the context object, in tree order. - */ - var text = ''; - try { - for (var _b = __values(algorithm_1.text_contiguousTextNodes(this, true)), _c = _b.next(); !_c.done; _c = _b.next()) { - var node = _c.value; - text = text + node._data; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - return text; - }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - TextImpl.prototype.splitText = function (offset) { - /** - * The splitText(offset) method, when invoked, must split context object - * with offset offset. - */ - return algorithm_1.text_split(this, offset); - }; - Object.defineProperty(TextImpl.prototype, "assignedSlot", { - // MIXIN: Slotable - /* istanbul ignore next */ - get: function () { throw new Error("Mixin: Slotable not implemented."); }, - enumerable: true, - configurable: true - }); - /** - * Creates a `Text`. - * - * @param document - owner document - * @param data - the text content - */ - TextImpl._create = function (document, data) { - if (data === void 0) { data = ''; } - var node = new TextImpl(data); - node._nodeDocument = document; - return node; - }; - return TextImpl; -}(CharacterDataImpl_1.CharacterDataImpl)); -exports.TextImpl = TextImpl; -/** - * Initialize prototype properties - */ -WebIDLAlgorithm_1.idl_defineConst(TextImpl.prototype, "_nodeType", interfaces_1.NodeType.Text); -//# sourceMappingURL=TextImpl.js.map + else { + var builder_2 = new _1.XMLBuilderImpl(nodes); + builder_2.set(options); + return builder_2; + } +} +exports.builder = builder; +/** @inheritdoc */ +function create(p1, p2) { + var options = formatBuilderOptions(p1 === undefined || isXMLBuilderCreateOptions(p1) ? + p1 : interfaces_1.DefaultBuilderOptions); + var contents = isXMLBuilderCreateOptions(p1) ? p2 : p1; + var doc = dom_1.createDocument(); + setOptions(doc, options); + var builder = new _1.XMLBuilderImpl(doc); + if (contents !== undefined) { + // parse contents + builder.ele(contents); + } + return builder; +} +exports.create = create; +/** @inheritdoc */ +function fragment(p1, p2) { + var options = formatBuilderOptions(p1 === undefined || isXMLBuilderCreateOptions(p1) ? + p1 : interfaces_1.DefaultBuilderOptions); + var contents = isXMLBuilderCreateOptions(p1) ? p2 : p1; + var doc = dom_1.createDocument(); + setOptions(doc, options, true); + var builder = new _1.XMLBuilderImpl(doc.createDocumentFragment()); + if (contents !== undefined) { + // parse contents + builder.ele(contents); + } + return builder; +} +exports.fragment = fragment; +/** @inheritdoc */ +function convert(p1, p2, p3) { + var builderOptions; + var contents; + var convertOptions; + if (isXMLBuilderCreateOptions(p1) && p2 !== undefined) { + builderOptions = p1; + contents = p2; + convertOptions = p3; + } + else { + builderOptions = interfaces_1.DefaultBuilderOptions; + contents = p1; + convertOptions = p2 || undefined; + } + return create(builderOptions, contents).end(convertOptions); +} +exports.convert = convert; +function isXMLBuilderCreateOptions(obj) { + if (!util_1.isPlainObject(obj)) + return false; + for (var key in obj) { + /* istanbul ignore else */ + if (obj.hasOwnProperty(key)) { + if (!interfaces_1.XMLBuilderOptionKeys.has(key)) + return false; + } + } + return true; +} +function formatBuilderOptions(createOptions) { + if (createOptions === void 0) { createOptions = {}; } + var options = util_1.applyDefaults(createOptions, interfaces_1.DefaultBuilderOptions); + if (options.convert.att.length === 0 || + options.convert.ins.length === 0 || + options.convert.text.length === 0 || + options.convert.cdata.length === 0 || + options.convert.comment.length === 0) { + throw new Error("JS object converter strings cannot be zero length."); + } + return options; +} +function setOptions(doc, options, isFragment) { + var docWithSettings = doc; + docWithSettings._xmlBuilderOptions = options; + docWithSettings._isFragment = isFragment; +} +//# sourceMappingURL=BuilderFunctions.js.map /***/ }), -/* 821 */, -/* 822 */ -/***/ (function(module, __unusedexports, __webpack_require__) { -const parse = __webpack_require__(830) -const eq = __webpack_require__(298) +/***/ 268: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -const diff = (version1, version2) => { - if (eq(version1, version2)) { - return null - } else { - const v1 = parse(version1) - const v2 = parse(version2) - const hasPre = v1.prerelease.length || v2.prerelease.length - const prefix = hasPre ? 'pre' : '' - const defaultResult = hasPre ? 'prerelease' : '' - for (const key in v1) { - if (key === 'major' || key === 'minor' || key === 'patch') { - if (v1[key] !== v2[key]) { - return prefix + key - } - } - } - return defaultResult // may be undefined - } -} -module.exports = diff +"use strict"; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var _1 = __nccwpck_require__(4260); +/** + * Creates an XML builder which serializes the document in chunks. + * + * @param options - callback builder options + * + * @returns callback builder + */ +function createCB(options) { + return new _1.XMLBuilderCBImpl(options); +} +exports.createCB = createCB; +/** + * Creates an XML builder which serializes the fragment in chunks. + * + * @param options - callback builder options + * + * @returns callback builder + */ +function fragmentCB(options) { + return new _1.XMLBuilderCBImpl(options, true); +} +exports.fragmentCB = fragmentCB; +//# sourceMappingURL=BuilderFunctionsCB.js.map /***/ }), -/* 823 */, -/* 824 */, -/* 825 */, -/* 826 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 1438: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); var __values = (this && this.__values) || function(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); @@ -38692,1258 +36693,1898 @@ var __read = (this && this.__read) || function (o, n) { } return ar; }; -var __spread = (this && this.__spread) || function () { - for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); - return ar; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var interfaces_1 = __webpack_require__(970); -var util_1 = __webpack_require__(918); -var CustomEventImpl_1 = __webpack_require__(164); -var EventImpl_1 = __webpack_require__(427); -var DOMException_1 = __webpack_require__(35); -var TreeAlgorithm_1 = __webpack_require__(873); -var ShadowTreeAlgorithm_1 = __webpack_require__(180); -var DOMAlgorithm_1 = __webpack_require__(304); -/** - * Sets the canceled flag of an event. - * - * @param event - an event - */ -function event_setTheCanceledFlag(event) { - if (event._cancelable && !event._inPassiveListenerFlag) { - event._canceledFlag = true; - } -} -exports.event_setTheCanceledFlag = event_setTheCanceledFlag; -/** - * Initializes the value of an event. - * - * @param event - an event to initialize - * @param type - the type of event - * @param bubbles - whether the event propagates in reverse - * @param cancelable - whether the event can be cancelled - */ -function event_initialize(event, type, bubbles, cancelable) { - event._initializedFlag = true; - event._stopPropagationFlag = false; - event._stopImmediatePropagationFlag = false; - event._canceledFlag = false; - event._isTrusted = false; - event._target = null; - event._type = type; - event._bubbles = bubbles; - event._cancelable = cancelable; -} -exports.event_initialize = event_initialize; -/** - * Creates a new event. - * - * @param eventInterface - event interface - * @param realm - realm - */ -function event_createAnEvent(eventInterface, realm) { - if (realm === void 0) { realm = undefined; } - /** - * 1. If realm is not given, then set it to null. - * 2. Let dictionary be the result of converting the JavaScript value - * undefined to the dictionary type accepted by eventInterface’s - * constructor. (This dictionary type will either be EventInit or a - * dictionary that inherits from it.) - * 3. Let event be the result of running the inner event creation steps with - * eventInterface, realm, the time of the occurrence that the event is - * signaling, and dictionary. - * 4. Initialize event’s isTrusted attribute to true. - * 5. Return event. - */ - if (realm === undefined) - realm = null; - var dictionary = {}; - var event = event_innerEventCreationSteps(eventInterface, realm, new Date(), dictionary); - event._isTrusted = true; - return event; -} -exports.event_createAnEvent = event_createAnEvent; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(6417); +var util_1 = __nccwpck_require__(6195); +var BuilderFunctions_1 = __nccwpck_require__(5696); +var algorithm_1 = __nccwpck_require__(61); +var infra_1 = __nccwpck_require__(4251); +var NamespacePrefixMap_1 = __nccwpck_require__(283); +var LocalNameSet_1 = __nccwpck_require__(9049); +var util_2 = __nccwpck_require__(5282); +var XMLCBWriter_1 = __nccwpck_require__(7572); +var JSONCBWriter_1 = __nccwpck_require__(7525); +var YAMLCBWriter_1 = __nccwpck_require__(2444); +var events_1 = __nccwpck_require__(8614); /** - * Performs event creation steps. - * - * @param eventInterface - event interface - * @param realm - realm - * @param time - time of occurrance - * @param dictionary - event attributes - * + * Represents a readable XML document stream. */ -function event_innerEventCreationSteps(eventInterface, realm, time, dictionary) { - /** - * 1. Let event be the result of creating a new object using eventInterface. - * TODO: Implement realms - * If realm is non-null, then use that Realm; otherwise, use the default - * behavior defined in Web IDL. - */ - var event = new eventInterface(""); +var XMLBuilderCBImpl = /** @class */ (function (_super) { + __extends(XMLBuilderCBImpl, _super); /** - * 2. Set event’s initialized flag. - * 3. Initialize event’s timeStamp attribute to a DOMHighResTimeStamp - * representing the high resolution time from the time origin to time. - * 4. For each member → value in dictionary, if event has an attribute - * whose identifier is member, then initialize that attribute to value. - * 5. Run the event constructing steps with event. - * 6. Return event. + * Initializes a new instance of `XMLStream`. + * + * @param options - stream writer options + * @param fragment - whether to create fragment stream or a document stream + * + * @returns XML stream */ - event._initializedFlag = true; - event._timeStamp = time.getTime(); - Object.assign(event, dictionary); - if (DOMImpl_1.dom.features.steps) { - DOMAlgorithm_1.dom_runEventConstructingSteps(event); + function XMLBuilderCBImpl(options, fragment) { + if (fragment === void 0) { fragment = false; } + var _this = _super.call(this) || this; + _this._hasDeclaration = false; + _this._docTypeName = ""; + _this._hasDocumentElement = false; + _this._currentElementSerialized = false; + _this._openTags = []; + _this._ended = false; + _this._fragment = fragment; + // provide default options + _this._options = util_1.applyDefaults(options || {}, interfaces_1.DefaultXMLBuilderCBOptions); + _this._builderOptions = { + defaultNamespace: _this._options.defaultNamespace, + namespaceAlias: _this._options.namespaceAlias + }; + if (_this._options.format === "json") { + _this._writer = new JSONCBWriter_1.JSONCBWriter(_this._options); + } + else if (_this._options.format === "yaml") { + _this._writer = new YAMLCBWriter_1.YAMLCBWriter(_this._options); + } + else { + _this._writer = new XMLCBWriter_1.XMLCBWriter(_this._options); + } + // automatically create listeners for callbacks passed via options + if (_this._options.data !== undefined) { + _this.on("data", _this._options.data); + } + if (_this._options.end !== undefined) { + _this.on("end", _this._options.end); + } + if (_this._options.error !== undefined) { + _this.on("error", _this._options.error); + } + _this._prefixMap = new NamespacePrefixMap_1.NamespacePrefixMap(); + _this._prefixMap.set("xml", infra_1.namespace.XML); + _this._prefixIndex = { value: 1 }; + _this._push(_this._writer.frontMatter()); + return _this; } - return event; -} -exports.event_innerEventCreationSteps = event_innerEventCreationSteps; -/** - * Dispatches an event to an event target. - * - * @param event - the event to dispatch - * @param target - event target - * @param legacyTargetOverrideFlag - legacy target override flag - * @param legacyOutputDidListenersThrowFlag - legacy output flag that returns - * whether the event listener's callback threw an exception - */ -function event_dispatch(event, target, legacyTargetOverrideFlag, legacyOutputDidListenersThrowFlag) { - var e_1, _a, e_2, _b; - if (legacyTargetOverrideFlag === void 0) { legacyTargetOverrideFlag = false; } - if (legacyOutputDidListenersThrowFlag === void 0) { legacyOutputDidListenersThrowFlag = { value: false }; } - var clearTargets = false; - /** - * 1. Set event's dispatch flag. - */ - event._dispatchFlag = true; + /** @inheritdoc */ + XMLBuilderCBImpl.prototype.ele = function (p1, p2, p3) { + var e_1, _a; + // parse if JS object or XML or JSON string + if (util_1.isObject(p1) || (util_1.isString(p1) && (/^\s*/g, '>'); + } + else { + for (var i = 0; i < node.data.length; i++) { + var c = node.data[i]; + if (c === "&") + markup += "&"; + else if (c === "<") + markup += "<"; + else if (c === ">") + markup += ">"; + else + markup += c; + } + } + this._push(this._writer.text(markup)); + return this; + }; + /** @inheritdoc */ + XMLBuilderCBImpl.prototype.ins = function (target, content) { + if (content === void 0) { content = ''; } + this._serializeOpenTag(true); + var node; + try { + node = BuilderFunctions_1.fragment(this._builderOptions).ins(target, content).first().node; + } + catch (err) { + /* istanbul ignore next */ + this.emit("error", err); + /* istanbul ignore next */ + return this; + } + if (this._options.wellFormed && (node.target.indexOf(":") !== -1 || (/^xml$/i).test(node.target))) { + this.emit("error", new Error("Processing instruction target contains invalid characters (well-formed required).")); + return this; + } + if (this._options.wellFormed && !algorithm_1.xml_isLegalChar(node.data)) { + this.emit("error", Error("Processing instruction data contains invalid characters (well-formed required).")); + return this; + } + this._push(this._writer.instruction(node.target, node.data)); + return this; + }; + /** @inheritdoc */ + XMLBuilderCBImpl.prototype.dat = function (content) { + this._serializeOpenTag(true); + var node; + try { + node = BuilderFunctions_1.fragment(this._builderOptions).dat(content).first().node; + } + catch (err) { + this.emit("error", err); + return this; + } + this._push(this._writer.cdata(node.data)); + return this; + }; + /** @inheritdoc */ + XMLBuilderCBImpl.prototype.dec = function (options) { + if (options === void 0) { options = { version: "1.0" }; } + if (this._fragment) { + this.emit("error", Error("Cannot insert an XML declaration into a document fragment.")); + return this; + } + if (this._hasDeclaration) { + this.emit("error", Error("XML declaration is already inserted.")); + return this; + } + this._push(this._writer.declaration(options.version || "1.0", options.encoding, options.standalone)); + this._hasDeclaration = true; + return this; + }; + /** @inheritdoc */ + XMLBuilderCBImpl.prototype.dtd = function (options) { + if (this._fragment) { + this.emit("error", Error("Cannot insert a DocType declaration into a document fragment.")); + return this; + } + if (this._docTypeName !== "") { + this.emit("error", new Error("DocType declaration is already inserted.")); + return this; + } + if (this._hasDocumentElement) { + this.emit("error", new Error("Cannot insert DocType declaration after document element.")); + return this; + } + var node; + try { + node = BuilderFunctions_1.create().dtd(options).first().node; + } + catch (err) { + this.emit("error", err); + return this; + } + if (this._options.wellFormed && !algorithm_1.xml_isPubidChar(node.publicId)) { + this.emit("error", new Error("DocType public identifier does not match PubidChar construct (well-formed required).")); + return this; + } + if (this._options.wellFormed && + (!algorithm_1.xml_isLegalChar(node.systemId) || + (node.systemId.indexOf('"') !== -1 && node.systemId.indexOf("'") !== -1))) { + this.emit("error", new Error("DocType system identifier contains invalid characters (well-formed required).")); + return this; + } + this._docTypeName = options.name; + this._push(this._writer.docType(options.name, node.publicId, node.systemId)); + return this; + }; + /** @inheritdoc */ + XMLBuilderCBImpl.prototype.up = function () { + this._serializeOpenTag(false); + this._serializeCloseTag(); + return this; + }; + /** @inheritdoc */ + XMLBuilderCBImpl.prototype.end = function () { + this._serializeOpenTag(false); + while (this._openTags.length > 0) { + this._serializeCloseTag(); + } + this._push(null); + return this; + }; /** - * 2. Let targetOverride be target, if legacy target override flag is not - * given, and target's associated Document otherwise. + * Serializes the opening tag of an element node. * - * _Note:_ legacy target override flag is only used by HTML and only when - * target is a Window object. + * @param hasChildren - whether the element node has child nodes */ - var targetOverride = target; - if (legacyTargetOverrideFlag) { - var doc = target._associatedDocument; - if (util_1.Guard.isDocumentNode(doc)) { - targetOverride = doc; + XMLBuilderCBImpl.prototype._serializeOpenTag = function (hasChildren) { + if (this._currentElementSerialized) + return; + if (this._currentElement === undefined) + return; + var node = this._currentElement.node; + if (this._options.wellFormed && (node.localName.indexOf(":") !== -1 || + !algorithm_1.xml_isName(node.localName))) { + this.emit("error", new Error("Node local name contains invalid characters (well-formed required).")); + return; } - } - /** - * 3. Let activationTarget be null. - * 4. Let relatedTarget be the result of retargeting event's relatedTarget - * against target. - * 5. If target is not relatedTarget or target is event's relatedTarget, - * then: - */ - var activationTarget = null; - var relatedTarget = TreeAlgorithm_1.tree_retarget(event._relatedTarget, target); - if (target !== relatedTarget || target === event._relatedTarget) { - /** - * 5.1. Let touchTargets be a new list. - * 5.2. For each touchTarget of event's touch target list, append the - * result of retargeting touchTarget against target to touchTargets. - * 5.3. Append to an event path with event, target, targetOverride, - * relatedTarget, touchTargets, and false. - * 5.4. Let isActivationEvent be true, if event is a MouseEvent object - * and event's type attribute is "click", and false otherwise. - * 5.5. If isActivationEvent is true and target has activation behavior, - * then set activationTarget to target. - * 5.6. Let slotable be target, if target is a slotable and is assigned, - * and null otherwise. - * 5.7. Let slot-in-closed-tree be false. - * 5.8. Let parent be the result of invoking target's get the parent with - * event. - */ - var touchTargets = []; - try { - for (var _c = __values(event._touchTargetList), _d = _c.next(); !_d.done; _d = _c.next()) { - var touchTarget = _d.value; - touchTargets.push(TreeAlgorithm_1.tree_retarget(touchTarget, target)); + var qualifiedName = ""; + var ignoreNamespaceDefinitionAttribute = false; + var map = this._prefixMap.copy(); + var localPrefixesMap = {}; + var localDefaultNamespace = this._recordNamespaceInformation(node, map, localPrefixesMap); + var inheritedNS = this._openTags.length === 0 ? null : this._openTags[this._openTags.length - 1][1]; + var ns = node.namespaceURI; + if (ns === null) + ns = inheritedNS; + if (inheritedNS === ns) { + if (localDefaultNamespace !== null) { + ignoreNamespaceDefinitionAttribute = true; } + if (ns === infra_1.namespace.XML) { + qualifiedName = "xml:" + node.localName; + } + else { + qualifiedName = node.localName; + } + this._writer.beginElement(qualifiedName); + this._push(this._writer.openTagBegin(qualifiedName)); } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_d && !_d.done && (_a = _c.return)) _a.call(_c); + else { + var prefix = node.prefix; + var candidatePrefix = null; + if (prefix !== null || ns !== localDefaultNamespace) { + candidatePrefix = map.get(prefix, ns); + } + if (prefix === "xmlns") { + if (this._options.wellFormed) { + this.emit("error", new Error("An element cannot have the 'xmlns' prefix (well-formed required).")); + return; + } + candidatePrefix = prefix; + } + if (candidatePrefix !== null) { + qualifiedName = candidatePrefix + ':' + node.localName; + if (localDefaultNamespace !== null && localDefaultNamespace !== infra_1.namespace.XML) { + inheritedNS = localDefaultNamespace || null; + } + this._writer.beginElement(qualifiedName); + this._push(this._writer.openTagBegin(qualifiedName)); + } + else if (prefix !== null) { + if (prefix in localPrefixesMap) { + prefix = this._generatePrefix(ns, map, this._prefixIndex); + } + map.set(prefix, ns); + qualifiedName += prefix + ':' + node.localName; + this._writer.beginElement(qualifiedName); + this._push(this._writer.openTagBegin(qualifiedName)); + this._push(this._writer.attribute("xmlns:" + prefix, this._serializeAttributeValue(ns, this._options.wellFormed))); + if (localDefaultNamespace !== null) { + inheritedNS = localDefaultNamespace || null; + } + } + else if (localDefaultNamespace === null || + (localDefaultNamespace !== null && localDefaultNamespace !== ns)) { + ignoreNamespaceDefinitionAttribute = true; + qualifiedName += node.localName; + inheritedNS = ns; + this._writer.beginElement(qualifiedName); + this._push(this._writer.openTagBegin(qualifiedName)); + this._push(this._writer.attribute("xmlns", this._serializeAttributeValue(ns, this._options.wellFormed))); + } + else { + qualifiedName += node.localName; + inheritedNS = ns; + this._writer.beginElement(qualifiedName); + this._push(this._writer.openTagBegin(qualifiedName)); } - finally { if (e_1) throw e_1.error; } } - event_appendToAnEventPath(event, target, targetOverride, relatedTarget, touchTargets, false); - var isActivationEvent = (util_1.Guard.isMouseEvent(event) && event._type === "click"); - if (isActivationEvent && target._activationBehavior !== undefined) { - activationTarget = target; + this._serializeAttributes(node, map, this._prefixIndex, localPrefixesMap, ignoreNamespaceDefinitionAttribute, this._options.wellFormed); + var isHTML = (ns === infra_1.namespace.HTML); + if (isHTML && !hasChildren && + XMLBuilderCBImpl._VoidElementNames.has(node.localName)) { + this._push(this._writer.openTagEnd(qualifiedName, true, true)); + this._writer.endElement(qualifiedName); } - var slotable = (util_1.Guard.isSlotable(target) && ShadowTreeAlgorithm_1.shadowTree_isAssigned(target)) ? - target : null; - var slotInClosedTree = false; - var parent = target._getTheParent(event); + else if (!isHTML && !hasChildren) { + this._push(this._writer.openTagEnd(qualifiedName, true, false)); + this._writer.endElement(qualifiedName); + } + else { + this._push(this._writer.openTagEnd(qualifiedName, false, false)); + } + this._currentElementSerialized = true; /** - * 5.9. While parent is non-null: + * Save qualified name, original inherited ns, original prefix map, and + * hasChildren flag. */ - while (parent !== null && util_1.Guard.isNode(parent)) { - /** - * 5.9.1 If slotable is non-null: - * 5.9.1.1. Assert: parent is a slot. - * 5.9.1.2. Set slotable to null. - * 5.9.1.3. If parent's root is a shadow root whose mode is "closed", - * then set slot-in-closed-tree to true. - */ - if (slotable !== null) { - if (!util_1.Guard.isSlot(parent)) { - throw new Error("Parent node of a slotable should be a slot."); - } - slotable = null; - var root = TreeAlgorithm_1.tree_rootNode(parent, true); - if (util_1.Guard.isShadowRoot(root) && root._mode === "closed") { - slotInClosedTree = true; - } + this._openTags.push([qualifiedName, inheritedNS, this._prefixMap, hasChildren]); + /** + * New values of inherited namespace and prefix map will be used while + * serializing child nodes. They will be returned to their original values + * when this node is closed using the _openTags array item we saved above. + */ + if (this._isPrefixMapModified(this._prefixMap, map)) { + this._prefixMap = map; + } + /** + * Calls following this will either serialize child nodes or close this tag. + */ + this._writer.level++; + }; + /** + * Serializes the closing tag of an element node. + */ + XMLBuilderCBImpl.prototype._serializeCloseTag = function () { + this._writer.level--; + var lastEle = this._openTags.pop(); + /* istanbul ignore next */ + if (lastEle === undefined) { + this.emit("error", new Error("Last element is undefined.")); + return; + } + var _a = __read(lastEle, 4), qualifiedName = _a[0], ns = _a[1], map = _a[2], hasChildren = _a[3]; + /** + * Restore original values of inherited namespace and prefix map. + */ + this._prefixMap = map; + if (!hasChildren) + return; + this._push(this._writer.closeTag(qualifiedName)); + this._writer.endElement(qualifiedName); + }; + /** + * Pushes data to internal buffer. + * + * @param data - data + */ + XMLBuilderCBImpl.prototype._push = function (data) { + if (data === null) { + this._ended = true; + this.emit("end"); + } + else if (this._ended) { + this.emit("error", new Error("Cannot push to ended stream.")); + } + else if (data.length !== 0) { + this._writer.hasData = true; + this.emit("data", data, this._writer.level); + } + }; + /** + * Reads and serializes an XML tree. + * + * @param node - root node + */ + XMLBuilderCBImpl.prototype._fromNode = function (node) { + var e_2, _a, e_3, _b; + if (util_2.Guard.isElementNode(node)) { + var name = node.prefix ? node.prefix + ":" + node.localName : node.localName; + if (node.namespaceURI !== null) { + this.ele(node.namespaceURI, name); } - /** - * 5.9.2 If parent is a slotable and is assigned, then set slotable to - * parent. - * 5.9.3. Let relatedTarget be the result of retargeting event's - * relatedTarget against parent. - * 5.9.4. Let touchTargets be a new list. - * 5.9.4. For each touchTarget of event's touch target list, append the - * result of retargeting touchTarget against parent to touchTargets. - */ - if (util_1.Guard.isSlotable(parent) && ShadowTreeAlgorithm_1.shadowTree_isAssigned(parent)) { - slotable = parent; + else { + this.ele(name); } - relatedTarget = TreeAlgorithm_1.tree_retarget(event._relatedTarget, parent); - touchTargets = []; try { - for (var _e = (e_2 = void 0, __values(event._touchTargetList)), _f = _e.next(); !_f.done; _f = _e.next()) { - var touchTarget = _f.value; - touchTargets.push(TreeAlgorithm_1.tree_retarget(touchTarget, parent)); + for (var _c = __values(node.attributes), _d = _c.next(); !_d.done; _d = _c.next()) { + var attr = _d.value; + var name_1 = attr.prefix ? attr.prefix + ":" + attr.localName : attr.localName; + if (attr.namespaceURI !== null) { + this.att(attr.namespaceURI, name_1, attr.value); + } + else { + this.att(name_1, attr.value); + } } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { - if (_f && !_f.done && (_b = _e.return)) _b.call(_e); + if (_d && !_d.done && (_a = _c.return)) _a.call(_c); } finally { if (e_2) throw e_2.error; } } - /** - * 5.9.6. If parent is a Window object, or parent is a node and target's - * root is a shadow-including inclusive ancestor of parent, then: - */ - if (util_1.Guard.isWindow(parent) || (util_1.Guard.isNode(parent) && util_1.Guard.isNode(target) && - TreeAlgorithm_1.tree_isAncestorOf(TreeAlgorithm_1.tree_rootNode(target, true), parent, true, true))) { - /** - * 5.9.6.1. If isActivationEvent is true, event's bubbles attribute - * is true, activationTarget is null, and parent has activation - * behavior, then set activationTarget to parent. - * 5.9.6.2. Append to an event path with event, parent, null, - * relatedTarget, touchTargets, and slot-in-closed-tree. - */ - if (isActivationEvent && event._bubbles && activationTarget === null && - parent._activationBehavior) { - activationTarget = parent; + try { + for (var _e = __values(node.childNodes), _f = _e.next(); !_f.done; _f = _e.next()) { + var child = _f.value; + this._fromNode(child); } - event_appendToAnEventPath(event, parent, null, relatedTarget, touchTargets, slotInClosedTree); - } - else if (parent === relatedTarget) { - /** - * 5.9.7. Otherwise, if parent is relatedTarget, - * then set parent to null. - */ - parent = null; } - else { - /** - * 5.9.8. Otherwise, set target to parent and then: - * 5.9.8.1. If isActivationEvent is true, activationTarget is null, - * and target has activation behavior, then set activationTarget - * to target. - * 5.9.8.2. Append to an event path with event, parent, target, - * relatedTarget, touchTargets, and slot-in-closed-tree. - */ - target = parent; - if (isActivationEvent && activationTarget === null && - target._activationBehavior) { - activationTarget = target; + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_f && !_f.done && (_b = _e.return)) _b.call(_e); } - event_appendToAnEventPath(event, parent, target, relatedTarget, touchTargets, slotInClosedTree); - } - /** - * 5.9.9. If parent is non-null, then set parent to the result of - * invoking parent's get the parent with event. - * 5.9.10. Set slot-in-closed-tree to false. - */ - if (parent !== null) { - parent = parent._getTheParent(event); + finally { if (e_3) throw e_3.error; } } - slotInClosedTree = false; + this.up(); } - /** - * 5.10. Let clearTargetsStruct be the last struct in event's path whose - * shadow-adjusted target is non-null. - */ - var clearTargetsStruct = null; - var path = event._path; - for (var i = path.length - 1; i >= 0; i--) { - var struct = path[i]; - if (struct.shadowAdjustedTarget !== null) { - clearTargetsStruct = struct; - break; - } + else if (util_2.Guard.isExclusiveTextNode(node) && node.data) { + this.txt(node.data); } - /** - * 5.11. Let clearTargets be true if clearTargetsStruct's shadow-adjusted - * target, clearTargetsStruct's relatedTarget, or an EventTarget object - * in clearTargetsStruct's touch target list is a node and its root is - * a shadow root, and false otherwise. - */ - if (clearTargetsStruct !== null) { - if (util_1.Guard.isNode(clearTargetsStruct.shadowAdjustedTarget) && - util_1.Guard.isShadowRoot(TreeAlgorithm_1.tree_rootNode(clearTargetsStruct.shadowAdjustedTarget, true))) { - clearTargets = true; - } - else if (util_1.Guard.isNode(clearTargetsStruct.relatedTarget) && - util_1.Guard.isShadowRoot(TreeAlgorithm_1.tree_rootNode(clearTargetsStruct.relatedTarget, true))) { - clearTargets = true; - } - else { - for (var j = 0; j < clearTargetsStruct.touchTargetList.length; j++) { - var struct = clearTargetsStruct.touchTargetList[j]; - if (util_1.Guard.isNode(struct) && - util_1.Guard.isShadowRoot(TreeAlgorithm_1.tree_rootNode(struct, true))) { - clearTargets = true; - break; + else if (util_2.Guard.isCommentNode(node)) { + this.com(node.data); + } + else if (util_2.Guard.isCDATASectionNode(node)) { + this.dat(node.data); + } + else if (util_2.Guard.isProcessingInstructionNode(node)) { + this.ins(node.target, node.data); + } + }; + /** + * Produces an XML serialization of the attributes of an element node. + * + * @param node - node to serialize + * @param map - namespace prefix map + * @param prefixIndex - generated namespace prefix index + * @param localPrefixesMap - local prefixes map + * @param ignoreNamespaceDefinitionAttribute - whether to ignore namespace + * attributes + * @param requireWellFormed - whether to check conformance + */ + XMLBuilderCBImpl.prototype._serializeAttributes = function (node, map, prefixIndex, localPrefixesMap, ignoreNamespaceDefinitionAttribute, requireWellFormed) { + var e_4, _a; + var localNameSet = requireWellFormed ? new LocalNameSet_1.LocalNameSet() : undefined; + try { + for (var _b = __values(node.attributes), _c = _b.next(); !_c.done; _c = _b.next()) { + var attr = _c.value; + // Optimize common case + if (!requireWellFormed && !ignoreNamespaceDefinitionAttribute && attr.namespaceURI === null) { + this._push(this._writer.attribute(attr.localName, this._serializeAttributeValue(attr.value, this._options.wellFormed))); + continue; + } + if (requireWellFormed && localNameSet && localNameSet.has(attr.namespaceURI, attr.localName)) { + this.emit("error", new Error("Element contains duplicate attributes (well-formed required).")); + return; + } + if (requireWellFormed && localNameSet) + localNameSet.set(attr.namespaceURI, attr.localName); + var attributeNamespace = attr.namespaceURI; + var candidatePrefix = null; + if (attributeNamespace !== null) { + candidatePrefix = map.get(attr.prefix, attributeNamespace); + if (attributeNamespace === infra_1.namespace.XMLNS) { + if (attr.value === infra_1.namespace.XML || + (attr.prefix === null && ignoreNamespaceDefinitionAttribute) || + (attr.prefix !== null && (!(attr.localName in localPrefixesMap) || + localPrefixesMap[attr.localName] !== attr.value) && + map.has(attr.localName, attr.value))) + continue; + if (requireWellFormed && attr.value === infra_1.namespace.XMLNS) { + this.emit("error", new Error("XMLNS namespace is reserved (well-formed required).")); + return; + } + if (requireWellFormed && attr.value === '') { + this.emit("error", new Error("Namespace prefix declarations cannot be used to undeclare a namespace (well-formed required).")); + return; + } + if (attr.prefix === 'xmlns') + candidatePrefix = 'xmlns'; + /** + * _Note:_ The (candidatePrefix === null) check is not in the spec. + * We deviate from the spec here. Otherwise a prefix is generated for + * all attributes with namespaces. + */ + } + else if (candidatePrefix === null) { + if (attr.prefix !== null && + (!map.hasPrefix(attr.prefix) || + map.has(attr.prefix, attributeNamespace))) { + /** + * Check if we can use the attribute's own prefix. + * We deviate from the spec here. + * TODO: This is not an efficient way of searching for prefixes. + * Follow developments to the spec. + */ + candidatePrefix = attr.prefix; + } + else { + candidatePrefix = this._generatePrefix(attributeNamespace, map, prefixIndex); + } + this._push(this._writer.attribute("xmlns:" + candidatePrefix, this._serializeAttributeValue(attributeNamespace, this._options.wellFormed))); } } + if (requireWellFormed && (attr.localName.indexOf(":") !== -1 || + !algorithm_1.xml_isName(attr.localName) || + (attr.localName === "xmlns" && attributeNamespace === null))) { + this.emit("error", new Error("Attribute local name contains invalid characters (well-formed required).")); + return; + } + this._push(this._writer.attribute((candidatePrefix !== null ? candidatePrefix + ":" : "") + attr.localName, this._serializeAttributeValue(attr.value, this._options.wellFormed))); } } - /** - * 5.12. If activationTarget is non-null and activationTarget has - * legacy-pre-activation behavior, then run activationTarget's - * legacy-pre-activation behavior. - */ - if (activationTarget !== null && - activationTarget._legacyPreActivationBehavior !== undefined) { - activationTarget._legacyPreActivationBehavior(event); - } - /** - * 5.13. For each struct in event's path, in reverse order: - */ - for (var i = path.length - 1; i >= 0; i--) { - var struct = path[i]; - /** - * 5.13.1. If struct's shadow-adjusted target is non-null, then set - * event's eventPhase attribute to AT_TARGET. - * 5.13.2. Otherwise, set event's eventPhase attribute to - * CAPTURING_PHASE. - * 5.13.3. Invoke with struct, event, "capturing", and - * legacyOutputDidListenersThrowFlag if given. - */ - if (struct.shadowAdjustedTarget !== null) { - event._eventPhase = interfaces_1.EventPhase.AtTarget; - } - else { - event._eventPhase = interfaces_1.EventPhase.Capturing; + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } - event_invoke(struct, event, "capturing", legacyOutputDidListenersThrowFlag); + finally { if (e_4) throw e_4.error; } } - /** - * 5.14. For each struct in event's path - */ - for (var i = 0; i < path.length; i++) { - var struct = path[i]; - /** - * 5.14.1. If struct's shadow-adjusted target is non-null, then set - * event's eventPhase attribute to AT_TARGET. - * 5.14.2. Otherwise: - * 5.14.2.1. If event's bubbles attribute is false, then continue. - * 5.14.2.2. Set event's eventPhase attribute to BUBBLING_PHASE. - * 5.14.3. Invoke with struct, event, "bubbling", and - * legacyOutputDidListenersThrowFlag if given. - */ - if (struct.shadowAdjustedTarget !== null) { - event._eventPhase = interfaces_1.EventPhase.AtTarget; - } - else { - if (!event._bubbles) - continue; - event._eventPhase = interfaces_1.EventPhase.Bubbling; + }; + /** + * Produces an XML serialization of an attribute value. + * + * @param value - attribute value + * @param requireWellFormed - whether to check conformance + */ + XMLBuilderCBImpl.prototype._serializeAttributeValue = function (value, requireWellFormed) { + if (requireWellFormed && value !== null && !algorithm_1.xml_isLegalChar(value)) { + this.emit("error", new Error("Invalid characters in attribute value.")); + return ""; + } + if (value === null) + return ""; + if (this._options.noDoubleEncoding) { + return value.replace(/(?!&(lt|gt|amp|apos|quot);)&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"'); + } + else { + var result = ""; + for (var i = 0; i < value.length; i++) { + var c = value[i]; + if (c === "\"") + result += """; + else if (c === "&") + result += "&"; + else if (c === "<") + result += "<"; + else if (c === ">") + result += ">"; + else + result += c; } - event_invoke(struct, event, "bubbling", legacyOutputDidListenersThrowFlag); + return result; } - } + }; /** - * 6. Set event's eventPhase attribute to NONE. - * 7. Set event's currentTarget attribute to null. - * 8. Set event's path to the empty list. - * 9. Unset event's dispatch flag, stop propagation flag, and stop - * immediate propagation flag. + * Records namespace information for the given element and returns the + * default namespace attribute value. + * + * @param node - element node to process + * @param map - namespace prefix map + * @param localPrefixesMap - local prefixes map */ - event._eventPhase = interfaces_1.EventPhase.None; - event._currentTarget = null; - event._path = []; - event._dispatchFlag = false; - event._stopPropagationFlag = false; - event._stopImmediatePropagationFlag = false; + XMLBuilderCBImpl.prototype._recordNamespaceInformation = function (node, map, localPrefixesMap) { + var e_5, _a; + var defaultNamespaceAttrValue = null; + try { + for (var _b = __values(node.attributes), _c = _b.next(); !_c.done; _c = _b.next()) { + var attr = _c.value; + var attributeNamespace = attr.namespaceURI; + var attributePrefix = attr.prefix; + if (attributeNamespace === infra_1.namespace.XMLNS) { + if (attributePrefix === null) { + defaultNamespaceAttrValue = attr.value; + continue; + } + else { + var prefixDefinition = attr.localName; + var namespaceDefinition = attr.value; + if (namespaceDefinition === infra_1.namespace.XML) { + continue; + } + if (namespaceDefinition === '') { + namespaceDefinition = null; + } + if (map.has(prefixDefinition, namespaceDefinition)) { + continue; + } + map.set(prefixDefinition, namespaceDefinition); + localPrefixesMap[prefixDefinition] = namespaceDefinition || ''; + } + } + } + } + catch (e_5_1) { e_5 = { error: e_5_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_5) throw e_5.error; } + } + return defaultNamespaceAttrValue; + }; /** - * 10. If clearTargets, then: - * 10.1. Set event's target to null. - * 10.2. Set event's relatedTarget to null. - * 10.3. Set event's touch target list to the empty list. + * Generates a new prefix for the given namespace. + * + * @param newNamespace - a namespace to generate prefix for + * @param prefixMap - namespace prefix map + * @param prefixIndex - generated namespace prefix index */ - if (clearTargets) { - event._target = null; - event._relatedTarget = null; - event._touchTargetList = []; - } + XMLBuilderCBImpl.prototype._generatePrefix = function (newNamespace, prefixMap, prefixIndex) { + var generatedPrefix = "ns" + prefixIndex.value; + prefixIndex.value++; + prefixMap.set(generatedPrefix, newNamespace); + return generatedPrefix; + }; /** - * 11. If activationTarget is non-null, then: - * 11.1. If event's canceled flag is unset, then run activationTarget's - * activation behavior with event. - * 11.2. Otherwise, if activationTarget has legacy-canceled-activation - * behavior, then run activationTarget's legacy-canceled-activation - * behavior. + * Determines if the namespace prefix map was modified from its original. + * + * @param originalMap - original namespace prefix map + * @param newMap - new namespace prefix map */ - if (activationTarget !== null) { - if (!event._canceledFlag && activationTarget._activationBehavior !== undefined) { - activationTarget._activationBehavior(event); + XMLBuilderCBImpl.prototype._isPrefixMapModified = function (originalMap, newMap) { + var items1 = originalMap._items; + var items2 = newMap._items; + var nullItems1 = originalMap._nullItems; + var nullItems2 = newMap._nullItems; + for (var key in items2) { + var arr1 = items1[key]; + if (arr1 === undefined) + return true; + var arr2 = items2[key]; + if (arr1.length !== arr2.length) + return true; + for (var i = 0; i < arr1.length; i++) { + if (arr1[i] !== arr2[i]) + return true; + } } - else if (activationTarget._legacyCanceledActivationBehavior !== undefined) { - activationTarget._legacyCanceledActivationBehavior(event); + if (nullItems1.length !== nullItems2.length) + return true; + for (var i = 0; i < nullItems1.length; i++) { + if (nullItems1[i] !== nullItems2[i]) + return true; + } + return false; + }; + XMLBuilderCBImpl._VoidElementNames = new Set(['area', 'base', 'basefont', + 'bgsound', 'br', 'col', 'embed', 'frame', 'hr', 'img', 'input', 'keygen', + 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr']); + return XMLBuilderCBImpl; +}(events_1.EventEmitter)); +exports.XMLBuilderCBImpl = XMLBuilderCBImpl; +//# sourceMappingURL=XMLBuilderCBImpl.js.map + +/***/ }), + +/***/ 8248: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); } + finally { if (e) throw e.error; } } - /** - * 12. Return false if event's canceled flag is set, and true otherwise. - */ - return !event._canceledFlag; -} -exports.event_dispatch = event_dispatch; + return ar; +}; +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(6417); +var util_1 = __nccwpck_require__(6195); +var writers_1 = __nccwpck_require__(7476); +var interfaces_2 = __nccwpck_require__(7305); +var util_2 = __nccwpck_require__(5282); +var algorithm_1 = __nccwpck_require__(61); +var dom_1 = __nccwpck_require__(770); +var infra_1 = __nccwpck_require__(4251); +var readers_1 = __nccwpck_require__(560); /** - * Appends a new struct to an event's path. - * - * @param event - an event - * @param invocationTarget - the target of the invocation - * @param shadowAdjustedTarget - shadow-root adjusted event target - * @param relatedTarget - related event target - * @param touchTargets - a list of touch targets - * @param slotInClosedTree - if the target's parent is a closed shadow root + * Represents a wrapper that extends XML nodes to implement easy to use and + * chainable document builder methods. */ -function event_appendToAnEventPath(event, invocationTarget, shadowAdjustedTarget, relatedTarget, touchTargets, slotInClosedTree) { - /** - * 1. Let invocationTargetInShadowTree be false. - * 2. If invocationTarget is a node and its root is a shadow root, then - * set invocationTargetInShadowTree to true. - */ - var invocationTargetInShadowTree = false; - if (util_1.Guard.isNode(invocationTarget) && - util_1.Guard.isShadowRoot(TreeAlgorithm_1.tree_rootNode(invocationTarget))) { - invocationTargetInShadowTree = true; - } +var XMLBuilderImpl = /** @class */ (function () { /** - * 3. Let root-of-closed-tree be false. - * 4. If invocationTarget is a shadow root whose mode is "closed", then - * set root-of-closed-tree to true. + * Initializes a new instance of `XMLBuilderNodeImpl`. + * + * @param domNode - the DOM node to wrap */ - var rootOfClosedTree = false; - if (util_1.Guard.isShadowRoot(invocationTarget) && - invocationTarget._mode === "closed") { - rootOfClosedTree = true; + function XMLBuilderImpl(domNode) { + this._domNode = domNode; } - /** - * 5. Append a new struct to event's path whose invocation target is - * invocationTarget, invocation-target-in-shadow-tree is - * invocationTargetInShadowTree, shadow-adjusted target is - * shadowAdjustedTarget, relatedTarget is relatedTarget, - * touch target list is touchTargets, root-of-closed-tree is - * root-of-closed-tree, and slot-in-closed-tree is slot-in-closed-tree. - */ - event._path.push({ - invocationTarget: invocationTarget, - invocationTargetInShadowTree: invocationTargetInShadowTree, - shadowAdjustedTarget: shadowAdjustedTarget, - relatedTarget: relatedTarget, - touchTargetList: touchTargets, - rootOfClosedTree: rootOfClosedTree, - slotInClosedTree: slotInClosedTree + Object.defineProperty(XMLBuilderImpl.prototype, "node", { + /** @inheritdoc */ + get: function () { return this._domNode; }, + enumerable: true, + configurable: true }); -} -exports.event_appendToAnEventPath = event_appendToAnEventPath; -/** - * Invokes an event. - * - * @param struct - a struct defining event's path - * @param event - the event to invoke - * @param phase - event phase - * @param legacyOutputDidListenersThrowFlag - legacy output flag that returns - * whether the event listener's callback threw an exception - */ -function event_invoke(struct, event, phase, legacyOutputDidListenersThrowFlag) { - if (legacyOutputDidListenersThrowFlag === void 0) { legacyOutputDidListenersThrowFlag = { value: false }; } - /** - * 1. Set event's target to the shadow-adjusted target of the last struct - * in event's path, that is either struct or preceding struct, whose - * shadow-adjusted target is non-null. - */ - var path = event._path; - var index = -1; - for (var i = 0; i < path.length; i++) { - if (path[i] === struct) { - index = i; - break; + Object.defineProperty(XMLBuilderImpl.prototype, "options", { + /** @inheritdoc */ + get: function () { return this._options; }, + enumerable: true, + configurable: true + }); + /** @inheritdoc */ + XMLBuilderImpl.prototype.set = function (options) { + this._options = util_1.applyDefaults(util_1.applyDefaults(this._options, options, true), // apply user settings + interfaces_1.DefaultBuilderOptions); // provide defaults + return this; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.ele = function (p1, p2, p3) { + var _a, _b, _c; + var namespace; + var name; + var attributes; + if (util_1.isObject(p1)) { + // ele(obj: ExpandObject) + return new readers_1.ObjectReader(this._options).parse(this, p1); } - } - if (index !== -1) { - var item = path[index]; - if (item.shadowAdjustedTarget !== null) { - event._target = item.shadowAdjustedTarget; + else if (p1 !== null && /^\s* 0) { - item = path[index - 1]; - if (item.shadowAdjustedTarget !== null) { - event._target = item.shadowAdjustedTarget; + else if (p1 !== null && /^\s*[\{\[]/.test(p1)) { + // parse JSON string + return new readers_1.JSONReader(this._options).parse(this, p1); + } + else if (p1 !== null && /^(\s*|(#.*)|(%.*))*---/.test(p1)) { + // parse YAML string + return new readers_1.YAMLReader(this._options).parse(this, p1); + } + if ((p1 === null || util_1.isString(p1)) && util_1.isString(p2)) { + // ele(namespace: string, name: string, attributes?: AttributesObject) + _a = __read([p1, p2, p3], 3), namespace = _a[0], name = _a[1], attributes = _a[2]; + } + else if (p1 !== null) { + // ele(name: string, attributes?: AttributesObject) + _b = __read([undefined, p1, util_1.isObject(p2) ? p2 : undefined], 3), namespace = _b[0], name = _b[1], attributes = _b[2]; + } + else { + throw new Error("Element name cannot be null. " + this._debugInfo()); + } + if (attributes) { + attributes = util_1.getValue(attributes); + } + _c = __read(this._extractNamespace(dom_1.sanitizeInput(namespace, this._options.invalidCharReplacement), dom_1.sanitizeInput(name, this._options.invalidCharReplacement), true), 2), namespace = _c[0], name = _c[1]; + // inherit namespace from parent + if (namespace === undefined) { + var _d = __read(algorithm_1.namespace_extractQName(name), 1), prefix = _d[0]; + namespace = this.node.lookupNamespaceURI(prefix); + } + // create a child element node + var childNode = (namespace !== undefined && namespace !== null ? + this._doc.createElementNS(namespace, name) : + this._doc.createElement(name)); + this.node.appendChild(childNode); + var builder = new XMLBuilderImpl(childNode); + // update doctype node if the new node is the document element node + var oldDocType = this._doc.doctype; + if (childNode === this._doc.documentElement && oldDocType !== null) { + var docType = this._doc.implementation.createDocumentType(this._doc.documentElement.tagName, oldDocType.publicId, oldDocType.systemId); + this._doc.replaceChild(docType, oldDocType); + } + // create attributes + if (attributes && !util_1.isEmpty(attributes)) { + builder.att(attributes); + } + return builder; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.remove = function () { + var parent = this.up(); + parent.node.removeChild(this.node); + return parent; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.att = function (p1, p2, p3) { + var _a, _b, _c; + var _this = this; + if (util_1.isMap(p1) || util_1.isObject(p1)) { + // att(obj: AttributesObject) + // expand if object + util_1.forEachObject(p1, function (attName, attValue) { return _this.att(attName, attValue); }, this); + return this; + } + // get primitive values + if (p1 !== undefined && p1 !== null) + p1 = util_1.getValue(p1 + ""); + if (p2 !== undefined && p2 !== null) + p2 = util_1.getValue(p2 + ""); + if (p3 !== undefined && p3 !== null) + p3 = util_1.getValue(p3 + ""); + var namespace; + var name; + var value; + if ((p1 === null || util_1.isString(p1)) && util_1.isString(p2) && (p3 === null || util_1.isString(p3))) { + // att(namespace: string, name: string, value: string) + _a = __read([p1, p2, p3], 3), namespace = _a[0], name = _a[1], value = _a[2]; + } + else if (util_1.isString(p1) && (p2 == null || util_1.isString(p2))) { + // ele(name: string, value: string) + _b = __read([undefined, p1, p2], 3), namespace = _b[0], name = _b[1], value = _b[2]; + } + else { + throw new Error("Attribute name and value not specified. " + this._debugInfo()); + } + if (this._options.keepNullAttributes && (value == null)) { + // keep null attributes + value = ""; + } + else if (value == null) { + // skip null|undefined attributes + return this; + } + if (!util_2.Guard.isElementNode(this.node)) { + throw new Error("An attribute can only be assigned to an element node."); + } + var ele = this.node; + _c = __read(this._extractNamespace(namespace, name, false), 2), namespace = _c[0], name = _c[1]; + name = dom_1.sanitizeInput(name, this._options.invalidCharReplacement); + namespace = dom_1.sanitizeInput(namespace, this._options.invalidCharReplacement); + value = dom_1.sanitizeInput(value, this._options.invalidCharReplacement); + var _d = __read(algorithm_1.namespace_extractQName(name), 2), prefix = _d[0], localName = _d[1]; + var _e = __read(algorithm_1.namespace_extractQName(ele.prefix ? ele.prefix + ':' + ele.localName : ele.localName), 1), elePrefix = _e[0]; + // check if this is a namespace declaration attribute + // assign a new element namespace if it wasn't previously assigned + var eleNamespace = null; + if (prefix === "xmlns") { + namespace = infra_1.namespace.XMLNS; + if (ele.namespaceURI === null && elePrefix === localName) { + eleNamespace = value; } } - } - /** - * 2. Set event's relatedTarget to struct's relatedTarget. - * 3. Set event's touch target list to struct's touch target list. - * 4. If event's stop propagation flag is set, then return. - * 5. Initialize event's currentTarget attribute to struct's invocation - * target. - * 6. Let listeners be a clone of event's currentTarget attribute value's - * event listener list. - * - * _Note:_ This avoids event listeners added after this point from being - * run. Note that removal still has an effect due to the removed field. - */ - event._relatedTarget = struct.relatedTarget; - event._touchTargetList = struct.touchTargetList; - if (event._stopPropagationFlag) - return; - event._currentTarget = struct.invocationTarget; - var currentTarget = event._currentTarget; - var targetListeners = currentTarget._eventListenerList; - var listeners = new (Array.bind.apply(Array, __spread([void 0], targetListeners)))(); - /** - * 7. Let found be the result of running inner invoke with event, listeners, - * phase, and legacyOutputDidListenersThrowFlag if given. - */ - var found = event_innerInvoke(event, listeners, phase, struct, legacyOutputDidListenersThrowFlag); - /** - * 8. If found is false and event's isTrusted attribute is true, then: - */ - if (!found && event._isTrusted) { - /** - * 8.1. Let originalEventType be event's type attribute value. - * 8.2. If event's type attribute value is a match for any of the strings - * in the first column in the following table, set event's type attribute - * value to the string in the second column on the same row as the matching - * string, and return otherwise. - * - * Event type | Legacy event type - * ------------------------------------------------- - * "animationend" | "webkitAnimationEnd" - * "animationiteration" | "webkitAnimationIteration" - * "animationstart" | "webkitAnimationStart" - * "transitionend" | "webkitTransitionEnd" - */ - var originalEventType = event._type; - if (originalEventType === "animationend") { - event._type = "webkitAnimationEnd"; + else if (prefix === null && localName === "xmlns" && elePrefix === null) { + namespace = infra_1.namespace.XMLNS; + eleNamespace = value; + } + // re-create the element node if its namespace changed + // we can't simply change the namespaceURI since its read-only + if (eleNamespace !== null) { + this._updateNamespace(eleNamespace); + ele = this.node; + } + if (namespace !== undefined) { + ele.setAttributeNS(namespace, name, value); + } + else { + ele.setAttribute(name, value); + } + return this; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.removeAtt = function (p1, p2) { + var _this = this; + if (!util_2.Guard.isElementNode(this.node)) { + throw new Error("An attribute can only be removed from an element node."); + } + // get primitive values + p1 = util_1.getValue(p1); + if (p2 !== undefined) { + p2 = util_1.getValue(p2); + } + var namespace; + var name; + if (p1 !== null && p2 === undefined) { + name = p1; + } + else if ((p1 === null || util_1.isString(p1)) && p2 !== undefined) { + namespace = p1; + name = p2; + } + else { + throw new Error("Attribute namespace must be a string. " + this._debugInfo()); + } + if (util_1.isArray(name) || util_1.isSet(name)) { + // removeAtt(names: string[]) + // removeAtt(namespace: string, names: string[]) + util_1.forEachArray(name, function (attName) { + return namespace === undefined ? _this.removeAtt(attName) : _this.removeAtt(namespace, attName); + }, this); + } + else if (namespace !== undefined) { + // removeAtt(namespace: string, name: string) + name = dom_1.sanitizeInput(name, this._options.invalidCharReplacement); + namespace = dom_1.sanitizeInput(namespace, this._options.invalidCharReplacement); + this.node.removeAttributeNS(namespace, name); + } + else { + // removeAtt(name: string) + name = dom_1.sanitizeInput(name, this._options.invalidCharReplacement); + this.node.removeAttribute(name); + } + return this; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.txt = function (content) { + var child = this._doc.createTextNode(dom_1.sanitizeInput(content, this._options.invalidCharReplacement)); + this.node.appendChild(child); + return this; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.com = function (content) { + var child = this._doc.createComment(dom_1.sanitizeInput(content, this._options.invalidCharReplacement)); + this.node.appendChild(child); + return this; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.dat = function (content) { + var child = this._doc.createCDATASection(dom_1.sanitizeInput(content, this._options.invalidCharReplacement)); + this.node.appendChild(child); + return this; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.ins = function (target, content) { + var _this = this; + if (content === void 0) { content = ''; } + if (util_1.isArray(target) || util_1.isSet(target)) { + util_1.forEachArray(target, function (item) { + item += ""; + var insIndex = item.indexOf(' '); + var insTarget = (insIndex === -1 ? item : item.substr(0, insIndex)); + var insValue = (insIndex === -1 ? '' : item.substr(insIndex + 1)); + _this.ins(insTarget, insValue); + }, this); } - else if (originalEventType === "animationiteration") { - event._type = "webkitAnimationIteration"; + else if (util_1.isMap(target) || util_1.isObject(target)) { + util_1.forEachObject(target, function (insTarget, insValue) { return _this.ins(insTarget, insValue); }, this); } - else if (originalEventType === "animationstart") { - event._type = "webkitAnimationStart"; + else { + var child = this._doc.createProcessingInstruction(dom_1.sanitizeInput(target, this._options.invalidCharReplacement), dom_1.sanitizeInput(content, this._options.invalidCharReplacement)); + this.node.appendChild(child); } - else if (originalEventType === "transitionend") { - event._type = "webkitTransitionEnd"; + return this; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.dec = function (options) { + this._options.version = options.version || "1.0"; + this._options.encoding = options.encoding; + this._options.standalone = options.standalone; + return this; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.dtd = function (options) { + var name = dom_1.sanitizeInput((options && options.name) || (this._doc.documentElement ? this._doc.documentElement.tagName : "ROOT"), this._options.invalidCharReplacement); + var pubID = dom_1.sanitizeInput((options && options.pubID) || "", this._options.invalidCharReplacement); + var sysID = dom_1.sanitizeInput((options && options.sysID) || "", this._options.invalidCharReplacement); + // name must match document element + if (this._doc.documentElement !== null && name !== this._doc.documentElement.tagName) { + throw new Error("DocType name does not match document element name."); } - /** - * 8.3. Inner invoke with event, listeners, phase, and - * legacyOutputDidListenersThrowFlag if given. - * 8.4. Set event's type attribute value to originalEventType. - */ - event_innerInvoke(event, listeners, phase, struct, legacyOutputDidListenersThrowFlag); - event._type = originalEventType; - } -} -exports.event_invoke = event_invoke; -/** - * Invokes an event. - * - * @param event - the event to invoke - * @param listeners - event listeners - * @param phase - event phase - * @param struct - a struct defining event's path - * @param legacyOutputDidListenersThrowFlag - legacy output flag that returns - * whether the event listener's callback threw an exception - */ -function event_innerInvoke(event, listeners, phase, struct, legacyOutputDidListenersThrowFlag) { - if (legacyOutputDidListenersThrowFlag === void 0) { legacyOutputDidListenersThrowFlag = { value: false }; } - /** - * 1. Let found be false. - * 2. For each listener in listeners, whose removed is false: - */ - var found = false; - for (var i = 0; i < listeners.length; i++) { - var listener = listeners[i]; - if (!listener.removed) { - /** - * 2.1. If event's type attribute value is not listener's type, then - * continue. - * 2.2. Set found to true. - * 2.3. If phase is "capturing" and listener's capture is false, then - * continue. - * 2.4. If phase is "bubbling" and listener's capture is true, then - * continue. - */ - if (event._type !== listener.type) - continue; - found = true; - if (phase === "capturing" && !listener.capture) - continue; - if (phase === "bubbling" && listener.capture) - continue; - /** - * 2.5. If listener's once is true, then remove listener from event's - * currentTarget attribute value's event listener list. - */ - if (listener.once && event._currentTarget !== null) { - var impl = event._currentTarget; - var index = -1; - for (var i_1 = 0; i_1 < impl._eventListenerList.length; i_1++) { - if (impl._eventListenerList[i_1] === listener) { - index = i_1; - break; + // create doctype node + var docType = this._doc.implementation.createDocumentType(name, pubID, sysID); + if (this._doc.doctype !== null) { + // replace existing doctype + this._doc.replaceChild(docType, this._doc.doctype); + } + else { + // insert before document element node or append to end + this._doc.insertBefore(docType, this._doc.documentElement); + } + return this; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.import = function (node) { + var e_1, _a; + var hostNode = this._domNode; + var hostDoc = this._doc; + var importedNode = node.node; + if (util_2.Guard.isDocumentNode(importedNode)) { + // import document node + var elementNode = importedNode.documentElement; + if (elementNode === null) { + throw new Error("Imported document has no document element node. " + this._debugInfo()); + } + var clone = hostDoc.importNode(elementNode, true); + hostNode.appendChild(clone); + var _b = __read(algorithm_1.namespace_extractQName(clone.prefix ? clone.prefix + ':' + clone.localName : clone.localName), 1), prefix = _b[0]; + var namespace = hostNode.lookupNamespaceURI(prefix); + new XMLBuilderImpl(clone)._updateNamespace(namespace); + } + else if (util_2.Guard.isDocumentFragmentNode(importedNode)) { + try { + // import child nodes + for (var _c = __values(importedNode.childNodes), _d = _c.next(); !_d.done; _d = _c.next()) { + var childNode = _d.value; + var clone = hostDoc.importNode(childNode, true); + hostNode.appendChild(clone); + if (util_2.Guard.isElementNode(clone)) { + var _e = __read(algorithm_1.namespace_extractQName(clone.prefix ? clone.prefix + ':' + clone.localName : clone.localName), 1), prefix = _e[0]; + var namespace = hostNode.lookupNamespaceURI(prefix); + new XMLBuilderImpl(clone)._updateNamespace(namespace); } } - if (index !== -1) { - impl._eventListenerList.splice(index, 1); - } } - /** - * TODO: Implement realms - * - * 2.6. Let global be listener callback's associated Realm's global - * object. - */ - var globalObject = undefined; - /** - * 2.7. Let currentEvent be undefined. - * 2.8. If global is a Window object, then: - * 2.8.1. Set currentEvent to global's current event. - * 2.8.2. If struct's invocation-target-in-shadow-tree is false, then - * set global's current event to event. - */ - var currentEvent = undefined; - if (util_1.Guard.isWindow(globalObject)) { - currentEvent = globalObject._currentEvent; - if (struct.invocationTargetInShadowTree === false) { - globalObject._currentEvent = event; + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_d && !_d.done && (_a = _c.return)) _a.call(_c); } + finally { if (e_1) throw e_1.error; } } - /** - * 2.9. If listener's passive is true, then set event's in passive - * listener flag. - * 2.10. Call a user object's operation with listener's callback, - * "handleEvent", « event », and event's currentTarget attribute value. - */ - if (listener.passive) - event._inPassiveListenerFlag = true; - try { - listener.callback.handleEvent.call(event._currentTarget, event); + } + else { + // import node + var clone = hostDoc.importNode(importedNode, true); + hostNode.appendChild(clone); + if (util_2.Guard.isElementNode(clone)) { + var _f = __read(algorithm_1.namespace_extractQName(clone.prefix ? clone.prefix + ':' + clone.localName : clone.localName), 1), prefix = _f[0]; + var namespace = hostNode.lookupNamespaceURI(prefix); + new XMLBuilderImpl(clone)._updateNamespace(namespace); } - catch (err) { - /** - * If this throws an exception, then: - * 2.10.1. Report the exception. - * 2.10.2. Set legacyOutputDidListenersThrowFlag if given. - * - * _Note:_ The legacyOutputDidListenersThrowFlag is only used by - * Indexed Database API. - * TODO: Report the exception - * See: https://html.spec.whatwg.org/multipage/webappapis.html#runtime-script-errors-in-documents - */ - legacyOutputDidListenersThrowFlag.value = true; + } + return this; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.doc = function () { + if (this._doc._isFragment) { + var node = this.node; + while (node && node.nodeType !== interfaces_2.NodeType.DocumentFragment) { + node = node.parentNode; } - /** - * 2.11. Unset event's in passive listener flag. - */ - if (listener.passive) - event._inPassiveListenerFlag = false; - /** - * 2.12. If global is a Window object, then set global's current event - * to currentEvent. - */ - if (util_1.Guard.isWindow(globalObject)) { - globalObject._currentEvent = currentEvent; + /* istanbul ignore next */ + if (node === null) { + throw new Error("Node has no parent node while searching for document fragment ancestor. " + this._debugInfo()); } - /** - * 2.13. If event's stop immediate propagation flag is set, then return - * found. - */ - if (event._stopImmediatePropagationFlag) - return found; + return new XMLBuilderImpl(node); } - } - /** - * 3. Return found. - */ - return found; -} -exports.event_innerInvoke = event_innerInvoke; -/** - * Fires an event at target. - * @param e - event name - * @param target - event target - * @param eventConstructor - an event constructor, with a description of how - * IDL attributes are to be initialized - * @param idlAttributes - a dictionary describing how IDL attributes are - * to be initialized - * @param legacyTargetOverrideFlag - legacy target override flag - */ -function event_fireAnEvent(e, target, eventConstructor, idlAttributes, legacyTargetOverrideFlag) { - /** - * 1. If eventConstructor is not given, then let eventConstructor be Event. - */ - if (eventConstructor === undefined) { - eventConstructor = EventImpl_1.EventImpl; - } - /** - * 2. Let event be the result of creating an event given eventConstructor, - * in the relevant Realm of target. - */ - var event = event_createAnEvent(eventConstructor); - /** - * 3. Initialize event’s type attribute to e. - */ - event._type = e; - /** - * 4. Initialize any other IDL attributes of event as described in the - * invocation of this algorithm. - * _Note:_ This also allows for the isTrusted attribute to be set to false. - */ - if (idlAttributes) { - for (var key in idlAttributes) { - var idlObj = event; - idlObj[key] = idlAttributes[key]; + else { + return new XMLBuilderImpl(this._doc); } - } - /** - * 5. Return the result of dispatching event at target, with legacy target - * override flag set if set. - */ - return event_dispatch(event, target, legacyTargetOverrideFlag); -} -exports.event_fireAnEvent = event_fireAnEvent; -/** - * Creates an event. - * - * @param eventInterface - the name of the event interface - */ -function event_createLegacyEvent(eventInterface) { - /** - * 1. Let constructor be null. - */ - var constructor = null; - /** - * TODO: Implement in HTML DOM - * 2. If interface is an ASCII case-insensitive match for any of the strings - * in the first column in the following table, then set constructor to the - * interface in the second column on the same row as the matching string: - * - * String | Interface - * -------|---------- - * "beforeunloadevent" | BeforeUnloadEvent - * "compositionevent" | CompositionEvent - * "customevent" | CustomEvent - * "devicemotionevent" | DeviceMotionEvent - * "deviceorientationevent" | DeviceOrientationEvent - * "dragevent" | DragEvent - * "event" | Event - * "events" | Event - * "focusevent" | FocusEvent - * "hashchangeevent" | HashChangeEvent - * "htmlevents" | Event - * "keyboardevent" | KeyboardEvent - * "messageevent" | MessageEvent - * "mouseevent" | MouseEvent - * "mouseevents" | - * "storageevent" | StorageEvent - * "svgevents" | Event - * "textevent" | CompositionEvent - * "touchevent" | TouchEvent - * "uievent" | UIEvent - * "uievents" | UIEvent - */ - switch (eventInterface.toLowerCase()) { - case "beforeunloadevent": - break; - case "compositionevent": - break; - case "customevent": - constructor = CustomEventImpl_1.CustomEventImpl; - break; - case "devicemotionevent": - break; - case "deviceorientationevent": - break; - case "dragevent": - break; - case "event": - case "events": - constructor = EventImpl_1.EventImpl; - break; - case "focusevent": - break; - case "hashchangeevent": - break; - case "htmlevents": - break; - case "keyboardevent": - break; - case "messageevent": - break; - case "mouseevent": - break; - case "mouseevents": - break; - case "storageevent": - break; - case "svgevents": - break; - case "textevent": - break; - case "touchevent": - break; - case "uievent": - break; - case "uievents": - break; - } + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.root = function () { + var ele = this._doc.documentElement; + if (!ele) { + throw new Error("Document root element is null. " + this._debugInfo()); + } + return new XMLBuilderImpl(ele); + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.up = function () { + var parent = this._domNode.parentNode; + if (!parent) { + throw new Error("Parent node is null. " + this._debugInfo()); + } + return new XMLBuilderImpl(parent); + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.prev = function () { + var node = this._domNode.previousSibling; + if (!node) { + throw new Error("Previous sibling node is null. " + this._debugInfo()); + } + return new XMLBuilderImpl(node); + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.next = function () { + var node = this._domNode.nextSibling; + if (!node) { + throw new Error("Next sibling node is null. " + this._debugInfo()); + } + return new XMLBuilderImpl(node); + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.first = function () { + var node = this._domNode.firstChild; + if (!node) { + throw new Error("First child node is null. " + this._debugInfo()); + } + return new XMLBuilderImpl(node); + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.last = function () { + var node = this._domNode.lastChild; + if (!node) { + throw new Error("Last child node is null. " + this._debugInfo()); + } + return new XMLBuilderImpl(node); + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.each = function (callback, self, recursive, thisArg) { + if (self === void 0) { self = false; } + if (recursive === void 0) { recursive = false; } + var result = this._getFirstDescendantNode(this._domNode, self, recursive); + while (result[0]) { + var nextResult = this._getNextDescendantNode(this._domNode, result[0], recursive, result[1], result[2]); + callback.call(thisArg, new XMLBuilderImpl(result[0]), result[1], result[2]); + result = nextResult; + } + return this; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.map = function (callback, self, recursive, thisArg) { + if (self === void 0) { self = false; } + if (recursive === void 0) { recursive = false; } + var result = []; + this.each(function (node, index, level) { + return result.push(callback.call(thisArg, node, index, level)); + }, self, recursive); + return result; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.reduce = function (callback, initialValue, self, recursive, thisArg) { + if (self === void 0) { self = false; } + if (recursive === void 0) { recursive = false; } + var value = initialValue; + this.each(function (node, index, level) { + return value = callback.call(thisArg, value, node, index, level); + }, self, recursive); + return value; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.find = function (predicate, self, recursive, thisArg) { + if (self === void 0) { self = false; } + if (recursive === void 0) { recursive = false; } + var result = this._getFirstDescendantNode(this._domNode, self, recursive); + while (result[0]) { + var builder = new XMLBuilderImpl(result[0]); + if (predicate.call(thisArg, builder, result[1], result[2])) { + return builder; + } + result = this._getNextDescendantNode(this._domNode, result[0], recursive, result[1], result[2]); + } + return undefined; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.filter = function (predicate, self, recursive, thisArg) { + if (self === void 0) { self = false; } + if (recursive === void 0) { recursive = false; } + var result = []; + this.each(function (node, index, level) { + if (predicate.call(thisArg, node, index, level)) { + result.push(node); + } + }, self, recursive); + return result; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.every = function (predicate, self, recursive, thisArg) { + if (self === void 0) { self = false; } + if (recursive === void 0) { recursive = false; } + var result = this._getFirstDescendantNode(this._domNode, self, recursive); + while (result[0]) { + var builder = new XMLBuilderImpl(result[0]); + if (!predicate.call(thisArg, builder, result[1], result[2])) { + return false; + } + result = this._getNextDescendantNode(this._domNode, result[0], recursive, result[1], result[2]); + } + return true; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.some = function (predicate, self, recursive, thisArg) { + if (self === void 0) { self = false; } + if (recursive === void 0) { recursive = false; } + var result = this._getFirstDescendantNode(this._domNode, self, recursive); + while (result[0]) { + var builder = new XMLBuilderImpl(result[0]); + if (predicate.call(thisArg, builder, result[1], result[2])) { + return true; + } + result = this._getNextDescendantNode(this._domNode, result[0], recursive, result[1], result[2]); + } + return false; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.toArray = function (self, recursive) { + if (self === void 0) { self = false; } + if (recursive === void 0) { recursive = false; } + var result = []; + this.each(function (node) { return result.push(node); }, self, recursive); + return result; + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.toString = function (writerOptions) { + writerOptions = writerOptions || {}; + if (writerOptions.format === undefined) { + writerOptions.format = "xml"; + } + return this._serialize(writerOptions); + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.toObject = function (writerOptions) { + writerOptions = writerOptions || {}; + if (writerOptions.format === undefined) { + writerOptions.format = "object"; + } + return this._serialize(writerOptions); + }; + /** @inheritdoc */ + XMLBuilderImpl.prototype.end = function (writerOptions) { + writerOptions = writerOptions || {}; + if (writerOptions.format === undefined) { + writerOptions.format = "xml"; + } + return this.doc()._serialize(writerOptions); + }; /** - * 3. If constructor is null, then throw a "NotSupportedError" DOMException. + * Gets the next descendant of the given node of the tree rooted at `root` + * in depth-first pre-order. Returns a three-tuple with + * [descendant, descendant_index, descendant_level]. + * + * @param root - root node of the tree + * @param self - whether to visit the current node along with child nodes + * @param recursive - whether to visit all descendant nodes in tree-order or + * only the immediate child nodes */ - if (constructor === null) { - throw new DOMException_1.NotSupportedError("Event constructor not found for interface " + eventInterface + "."); - } + XMLBuilderImpl.prototype._getFirstDescendantNode = function (root, self, recursive) { + if (self) + return [this._domNode, 0, 0]; + else if (recursive) + return this._getNextDescendantNode(root, root, recursive, 0, 0); + else + return [this._domNode.firstChild, 0, 1]; + }; /** - * 4. If the interface indicated by constructor is not exposed on the - * relevant global object of the context object, then throw a - * "NotSupportedError" DOMException. - * _Note:_ Typically user agents disable support for touch events in some - * configurations, in which case this clause would be triggered for the - * interface TouchEvent. + * Gets the next descendant of the given node of the tree rooted at `root` + * in depth-first pre-order. Returns a three-tuple with + * [descendant, descendant_index, descendant_level]. + * + * @param root - root node of the tree + * @param node - current node + * @param recursive - whether to visit all descendant nodes in tree-order or + * only the immediate child nodes + * @param index - child node index + * @param level - current depth of the XML tree */ - // TODO: Implement realms + XMLBuilderImpl.prototype._getNextDescendantNode = function (root, node, recursive, index, level) { + if (recursive) { + // traverse child nodes + if (node.firstChild) + return [node.firstChild, 0, level + 1]; + if (node === root) + return [null, -1, -1]; + // traverse siblings + if (node.nextSibling) + return [node.nextSibling, index + 1, level]; + // traverse parent's next sibling + var parent = node.parentNode; + while (parent && parent !== root) { + if (parent.nextSibling) + return [parent.nextSibling, algorithm_1.tree_index(parent.nextSibling), level - 1]; + parent = parent.parentNode; + level--; + } + } + else { + if (root === node) + return [node.firstChild, 0, level + 1]; + else + return [node.nextSibling, index + 1, level]; + } + return [null, -1, -1]; + }; /** - * 5. Let event be the result of creating an event given constructor. - * 6. Initialize event’s type attribute to the empty string. - * 7. Initialize event’s timeStamp attribute to a DOMHighResTimeStamp - * representing the high resolution time from the time origin to now. - * 8. Initialize event’s isTrusted attribute to false. - * 9. Unset event’s initialized flag. + * Converts the node into its string or object representation. + * + * @param options - serialization options */ - var event = new constructor(""); - event._type = ""; - event._timeStamp = new Date().getTime(); - event._isTrusted = false; - event._initializedFlag = false; + XMLBuilderImpl.prototype._serialize = function (writerOptions) { + if (writerOptions.format === "xml") { + var writer = new writers_1.XMLWriter(this._options, writerOptions); + return writer.serialize(this.node); + } + else if (writerOptions.format === "map") { + var writer = new writers_1.MapWriter(this._options, writerOptions); + return writer.serialize(this.node); + } + else if (writerOptions.format === "object") { + var writer = new writers_1.ObjectWriter(this._options, writerOptions); + return writer.serialize(this.node); + } + else if (writerOptions.format === "json") { + var writer = new writers_1.JSONWriter(this._options, writerOptions); + return writer.serialize(this.node); + } + else if (writerOptions.format === "yaml") { + var writer = new writers_1.YAMLWriter(this._options, writerOptions); + return writer.serialize(this.node); + } + else { + throw new Error("Invalid writer format: " + writerOptions.format + ". " + this._debugInfo()); + } + }; /** - * 10. Return event. + * Extracts a namespace and name from the given string. + * + * @param namespace - namespace + * @param name - a string containing both a name and namespace separated by an + * `'@'` character + * @param ele - `true` if this is an element namespace; otherwise `false` */ - return event; -} -exports.event_createLegacyEvent = event_createLegacyEvent; -/** - * Getter of an event handler IDL attribute. - * - * @param eventTarget - event target - * @param name - event name - */ -function event_getterEventHandlerIDLAttribute(thisObj, name) { + XMLBuilderImpl.prototype._extractNamespace = function (namespace, name, ele) { + // extract from name + var atIndex = name.indexOf("@"); + if (atIndex > 0) { + if (namespace === undefined) + namespace = name.slice(atIndex + 1); + name = name.slice(0, atIndex); + } + if (namespace === undefined) { + // look-up default namespace + namespace = (ele ? this._options.defaultNamespace.ele : this._options.defaultNamespace.att); + } + else if (namespace !== null && namespace[0] === "@") { + // look-up namespace aliases + var alias = namespace.slice(1); + namespace = this._options.namespaceAlias[alias]; + if (namespace === undefined) { + throw new Error("Namespace alias `" + alias + "` is not defined. " + this._debugInfo()); + } + } + return [namespace, name]; + }; /** - * 1. Let eventTarget be the result of determining the target of an event - * handler given this object and name. - * 2. If eventTarget is null, then return null. - * 3. Return the result of getting the current value of the event handler - * given eventTarget and name. + * Updates the element's namespace. + * + * @param ns - new namespace */ - var eventTarget = event_determineTheTargetOfAnEventHandler(thisObj, name); - if (eventTarget === null) - return null; - return event_getTheCurrentValueOfAnEventHandler(eventTarget, name); -} -exports.event_getterEventHandlerIDLAttribute = event_getterEventHandlerIDLAttribute; -/** - * Setter of an event handler IDL attribute. - * - * @param eventTarget - event target - * @param name - event name - * @param value - event handler - */ -function event_setterEventHandlerIDLAttribute(thisObj, name, value) { + XMLBuilderImpl.prototype._updateNamespace = function (ns) { + var e_2, _a, e_3, _b; + var ele = this._domNode; + if (util_2.Guard.isElementNode(ele) && ns !== null && ele.namespaceURI !== ns) { + var _c = __read(algorithm_1.namespace_extractQName(ele.prefix ? ele.prefix + ':' + ele.localName : ele.localName), 2), elePrefix = _c[0], eleLocalName = _c[1]; + // re-create the element node if its namespace changed + // we can't simply change the namespaceURI since its read-only + var newEle = algorithm_1.create_element(this._doc, eleLocalName, ns, elePrefix); + try { + for (var _d = __values(ele.attributes), _e = _d.next(); !_e.done; _e = _d.next()) { + var attr = _e.value; + var attrQName = attr.prefix ? attr.prefix + ':' + attr.localName : attr.localName; + var _f = __read(algorithm_1.namespace_extractQName(attrQName), 1), attrPrefix = _f[0]; + var newAttrNS = attr.namespaceURI; + if (newAttrNS === null && attrPrefix !== null) { + newAttrNS = ele.lookupNamespaceURI(attrPrefix); + } + if (newAttrNS === null) { + newEle.setAttribute(attrQName, attr.value); + } + else { + newEle.setAttributeNS(newAttrNS, attrQName, attr.value); + } + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_e && !_e.done && (_a = _d.return)) _a.call(_d); + } + finally { if (e_2) throw e_2.error; } + } + // replace the new node in parent node + var parent = ele.parentNode; + /* istanbul ignore next */ + if (parent === null) { + throw new Error("Parent node is null." + this._debugInfo()); + } + parent.replaceChild(newEle, ele); + this._domNode = newEle; + try { + // check child nodes + for (var _g = __values(ele.childNodes), _h = _g.next(); !_h.done; _h = _g.next()) { + var childNode = _h.value; + var newChildNode = childNode.cloneNode(true); + newEle.appendChild(newChildNode); + if (util_2.Guard.isElementNode(newChildNode)) { + var _j = __read(algorithm_1.namespace_extractQName(newChildNode.prefix ? newChildNode.prefix + ':' + newChildNode.localName : newChildNode.localName), 1), newChildNodePrefix = _j[0]; + var newChildNodeNS = newEle.lookupNamespaceURI(newChildNodePrefix); + new XMLBuilderImpl(newChildNode)._updateNamespace(newChildNodeNS); + } + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_h && !_h.done && (_b = _g.return)) _b.call(_g); + } + finally { if (e_3) throw e_3.error; } + } + } + }; + Object.defineProperty(XMLBuilderImpl.prototype, "_doc", { + /** + * Returns the document owning this node. + */ + get: function () { + var node = this.node; + if (util_2.Guard.isDocumentNode(node)) { + return node; + } + else { + var docNode = node.ownerDocument; + /* istanbul ignore next */ + if (!docNode) + throw new Error("Owner document is null. " + this._debugInfo()); + return docNode; + } + }, + enumerable: true, + configurable: true + }); /** - * 1. Let eventTarget be the result of determining the target of an event - * handler given this object and name. - * 2. If eventTarget is null, then return. - * 3. If the given value is null, then deactivate an event handler given - * eventTarget and name. - * 4. Otherwise: - * 4.1. Let handlerMap be eventTarget's event handler map. - * 4.2. Let eventHandler be handlerMap[name]. - * 4.3. Set eventHandler's value to the given value. - * 4.4. Activate an event handler given eventTarget and name. + * Returns debug information for this node. + * + * @param name - node name */ - var eventTarget = event_determineTheTargetOfAnEventHandler(thisObj, name); - if (eventTarget === null) - return; - if (value === null) { - event_deactivateAnEventHandler(eventTarget, name); - } - else { - var handlerMap = eventTarget._eventHandlerMap; - var eventHandler = handlerMap["onabort"]; - if (eventHandler !== undefined) { - eventHandler.value = value; + XMLBuilderImpl.prototype._debugInfo = function (name) { + var node = this.node; + var parentNode = node.parentNode; + name = name || node.nodeName; + var parentName = parentNode ? parentNode.nodeName : ''; + if (!parentName) { + return "node: <" + name + ">"; } - event_activateAnEventHandler(eventTarget, name); - } -} -exports.event_setterEventHandlerIDLAttribute = event_setterEventHandlerIDLAttribute; -/** - * Determines the target of an event handler. - * - * @param eventTarget - event target - * @param name - event name - */ -function event_determineTheTargetOfAnEventHandler(eventTarget, name) { - // TODO: Implement in HTML DOM - return null; -} -exports.event_determineTheTargetOfAnEventHandler = event_determineTheTargetOfAnEventHandler; -/** - * Gets the current value of an event handler. - * - * @param eventTarget - event target - * @param name - event name - */ -function event_getTheCurrentValueOfAnEventHandler(eventTarget, name) { - // TODO: Implement in HTML DOM - return null; -} -exports.event_getTheCurrentValueOfAnEventHandler = event_getTheCurrentValueOfAnEventHandler; -/** - * Activates an event handler. - * - * @param eventTarget - event target - * @param name - event name - */ -function event_activateAnEventHandler(eventTarget, name) { - // TODO: Implement in HTML DOM -} -exports.event_activateAnEventHandler = event_activateAnEventHandler; -/** - * Deactivates an event handler. - * - * @param eventTarget - event target - * @param name - event name - */ -function event_deactivateAnEventHandler(eventTarget, name) { - // TODO: Implement in HTML DOM -} -exports.event_deactivateAnEventHandler = event_deactivateAnEventHandler; -//# sourceMappingURL=EventAlgorithm.js.map - -/***/ }), -/* 827 */, -/* 828 */, -/* 829 */, -/* 830 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const {MAX_LENGTH} = __webpack_require__(181) -const { re, t } = __webpack_require__(976) -const SemVer = __webpack_require__(65) - -const parseOptions = __webpack_require__(143) -const parse = (version, options) => { - options = parseOptions(options) - - if (version instanceof SemVer) { - return version - } - - if (typeof version !== 'string') { - return null - } - - if (version.length > MAX_LENGTH) { - return null - } - - const r = options.loose ? re[t.LOOSE] : re[t.FULL] - if (!r.test(version)) { - return null - } - - try { - return new SemVer(version, options) - } catch (er) { - return null - } -} - -module.exports = parse - + else { + return "node: <" + name + ">, parent: <" + parentName + ">"; + } + }; + Object.defineProperty(XMLBuilderImpl.prototype, "_options", { + /** + * Gets or sets builder options. + */ + get: function () { + var doc = this._doc; + /* istanbul ignore next */ + if (doc._xmlBuilderOptions === undefined) { + throw new Error("Builder options is not set."); + } + return doc._xmlBuilderOptions; + }, + set: function (value) { + var doc = this._doc; + doc._xmlBuilderOptions = value; + }, + enumerable: true, + configurable: true + }); + return XMLBuilderImpl; +}()); +exports.XMLBuilderImpl = XMLBuilderImpl; +//# sourceMappingURL=XMLBuilderImpl.js.map /***/ }), -/* 831 */, -/* 832 */, -/* 833 */, -/* 834 */, -/* 835 */ -/***/ (function(module) { - -module.exports = require("url"); -/***/ }), -/* 836 */, -/* 837 */, -/* 838 */, -/* 839 */, -/* 840 */, -/* 841 */ -/***/ (function(module, __unusedexports, __webpack_require__) { +/***/ 770: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; - -var Type = __webpack_require__(945); - -var YAML_DATE_REGEXP = new RegExp( - '^([0-9][0-9][0-9][0-9])' + // [1] year - '-([0-9][0-9])' + // [2] month - '-([0-9][0-9])$'); // [3] day - -var YAML_TIMESTAMP_REGEXP = new RegExp( - '^([0-9][0-9][0-9][0-9])' + // [1] year - '-([0-9][0-9]?)' + // [2] month - '-([0-9][0-9]?)' + // [3] day - '(?:[Tt]|[ \\t]+)' + // ... - '([0-9][0-9]?)' + // [4] hour - ':([0-9][0-9])' + // [5] minute - ':([0-9][0-9])' + // [6] second - '(?:\\.([0-9]*))?' + // [7] fraction - '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour - '(?::([0-9][0-9]))?))?$'); // [11] tz_minute - -function resolveYamlTimestamp(data) { - if (data === null) return false; - if (YAML_DATE_REGEXP.exec(data) !== null) return true; - if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; - return false; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var dom_1 = __nccwpck_require__(4646); +var dom_2 = __nccwpck_require__(633); +var util_1 = __nccwpck_require__(6195); +dom_2.dom.setFeatures(false); +/** + * Creates an XML document without any child nodes. + */ +function createDocument() { + var impl = new dom_1.DOMImplementation(); + var doc = impl.createDocument(null, 'root', null); + /* istanbul ignore else */ + if (doc.documentElement) { + doc.removeChild(doc.documentElement); + } + return doc; } - -function constructYamlTimestamp(data) { - var match, year, month, day, hour, minute, second, fraction = 0, - delta = null, tz_hour, tz_minute, date; - - match = YAML_DATE_REGEXP.exec(data); - if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); - - if (match === null) throw new Error('Date resolve error'); - - // match: [1] year [2] month [3] day - - year = +(match[1]); - month = +(match[2]) - 1; // JS month starts with 0 - day = +(match[3]); - - if (!match[4]) { // no hour - return new Date(Date.UTC(year, month, day)); - } - - // match: [4] hour [5] minute [6] second [7] fraction - - hour = +(match[4]); - minute = +(match[5]); - second = +(match[6]); - - if (match[7]) { - fraction = match[7].slice(0, 3); - while (fraction.length < 3) { // milli-seconds - fraction += '0'; +exports.createDocument = createDocument; +/** + * Sanitizes input strings with user supplied replacement characters. + * + * @param str - input string + * @param replacement - replacement character or function + */ +function sanitizeInput(str, replacement) { + if (str == null) { + return str; + } + else if (replacement === undefined) { + return str + ""; + } + else { + var result = ""; + str = str + ""; + for (var i = 0; i < str.length; i++) { + var n = str.charCodeAt(i); + // #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] + if (n === 0x9 || n === 0xA || n === 0xD || + (n >= 0x20 && n <= 0xD7FF) || + (n >= 0xE000 && n <= 0xFFFD)) { + // valid character - not surrogate pair + result += str.charAt(i); + } + else if (n >= 0xD800 && n <= 0xDBFF && i < str.length - 1) { + var n2 = str.charCodeAt(i + 1); + if (n2 >= 0xDC00 && n2 <= 0xDFFF) { + // valid surrogate pair + n = (n - 0xD800) * 0x400 + n2 - 0xDC00 + 0x10000; + result += String.fromCodePoint(n); + i++; + } + else { + // invalid lone surrogate + result += util_1.isString(replacement) ? replacement : replacement(str.charAt(i), i, str); + } + } + else { + // invalid character + result += util_1.isString(replacement) ? replacement : replacement(str.charAt(i), i, str); + } + } + return result; } - fraction = +fraction; - } - - // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute - - if (match[9]) { - tz_hour = +(match[10]); - tz_minute = +(match[11] || 0); - delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds - if (match[9] === '-') delta = -delta; - } - - date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); - - if (delta) date.setTime(date.getTime() - delta); - - return date; -} - -function representYamlTimestamp(object /*, style*/) { - return object.toISOString(); } - -module.exports = new Type('tag:yaml.org,2002:timestamp', { - kind: 'scalar', - resolve: resolveYamlTimestamp, - construct: constructYamlTimestamp, - instanceOf: Date, - represent: representYamlTimestamp -}); - +exports.sanitizeInput = sanitizeInput; +//# sourceMappingURL=dom.js.map /***/ }), -/* 842 */ -/***/ (function(module, __unusedexports, __webpack_require__) { + +/***/ 4260: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var XMLBuilderImpl_1 = __nccwpck_require__(8248); +exports.XMLBuilderImpl = XMLBuilderImpl_1.XMLBuilderImpl; +var XMLBuilderCBImpl_1 = __nccwpck_require__(1438); +exports.XMLBuilderCBImpl = XMLBuilderCBImpl_1.XMLBuilderCBImpl; +var BuilderFunctions_1 = __nccwpck_require__(5696); +exports.builder = BuilderFunctions_1.builder; +exports.create = BuilderFunctions_1.create; +exports.fragment = BuilderFunctions_1.fragment; +exports.convert = BuilderFunctions_1.convert; +var BuilderFunctionsCB_1 = __nccwpck_require__(268); +exports.createCB = BuilderFunctionsCB_1.createCB; +exports.fragmentCB = BuilderFunctionsCB_1.fragmentCB; +//# sourceMappingURL=index.js.map -var Type = __webpack_require__(945); +/***/ }), -var _hasOwnProperty = Object.prototype.hasOwnProperty; -var _toString = Object.prototype.toString; +/***/ 151: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { -function resolveYamlOmap(data) { - if (data === null) return true; +"use strict"; +var __webpack_unused_export__; + +__webpack_unused_export__ = ({ value: true }); +var builder_1 = __nccwpck_require__(4260); +__webpack_unused_export__ = builder_1.builder; +exports.Ue = builder_1.create; +__webpack_unused_export__ = builder_1.fragment; +__webpack_unused_export__ = builder_1.convert; +__webpack_unused_export__ = builder_1.createCB; +__webpack_unused_export__ = builder_1.fragmentCB; +//# sourceMappingURL=index.js.map - var objectKeys = [], index, length, pair, pairKey, pairHasKey, - object = data; +/***/ }), - for (index = 0, length = object.length; index < length; index += 1) { - pair = object[index]; - pairHasKey = false; +/***/ 6417: +/***/ ((__unused_webpack_module, exports) => { - if (_toString.call(pair) !== '[object Object]') return false; +"use strict"; - for (pairKey in pair) { - if (_hasOwnProperty.call(pair, pairKey)) { - if (!pairHasKey) pairHasKey = true; - else return false; - } +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Defines default values for builder options. + */ +exports.DefaultBuilderOptions = { + version: "1.0", + encoding: undefined, + standalone: undefined, + keepNullNodes: false, + keepNullAttributes: false, + ignoreConverters: false, + convert: { + att: "@", + ins: "?", + text: "#", + cdata: "$", + comment: "!" + }, + defaultNamespace: { + ele: undefined, + att: undefined + }, + namespaceAlias: { + html: "http://www.w3.org/1999/xhtml", + xml: "http://www.w3.org/XML/1998/namespace", + xmlns: "http://www.w3.org/2000/xmlns/", + mathml: "http://www.w3.org/1998/Math/MathML", + svg: "http://www.w3.org/2000/svg", + xlink: "http://www.w3.org/1999/xlink" + }, + invalidCharReplacement: undefined, + parser: undefined +}; +/** + * Contains keys of `XMLBuilderOptions`. + */ +exports.XMLBuilderOptionKeys = new Set(Object.keys(exports.DefaultBuilderOptions)); +/** + * Defines default values for builder options. + */ +exports.DefaultXMLBuilderCBOptions = { + format: "xml", + wellFormed: false, + prettyPrint: false, + indent: " ", + newline: "\n", + offset: 0, + width: 0, + allowEmptyTags: false, + spaceBeforeSlash: false, + keepNullNodes: false, + keepNullAttributes: false, + ignoreConverters: false, + convert: { + att: "@", + ins: "?", + text: "#", + cdata: "$", + comment: "!" + }, + defaultNamespace: { + ele: undefined, + att: undefined + }, + namespaceAlias: { + html: "http://www.w3.org/1999/xhtml", + xml: "http://www.w3.org/XML/1998/namespace", + xmlns: "http://www.w3.org/2000/xmlns/", + mathml: "http://www.w3.org/1998/Math/MathML", + svg: "http://www.w3.org/2000/svg", + xlink: "http://www.w3.org/1999/xlink" } - - if (!pairHasKey) return false; - - if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); - else return false; - } - - return true; -} - -function constructYamlOmap(data) { - return data !== null ? data : []; -} - -module.exports = new Type('tag:yaml.org,2002:omap', { - kind: 'sequence', - resolve: resolveYamlOmap, - construct: constructYamlOmap -}); - +}; +//# sourceMappingURL=interfaces.js.map /***/ }), -/* 843 */, -/* 844 */, -/* 845 */, -/* 846 */, -/* 847 */, -/* 848 */, -/* 849 */, -/* 850 */, -/* 851 */, -/* 852 */, -/* 853 */, -/* 854 */, -/* 855 */, -/* 856 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -module.exports = __webpack_require__(141); - -/***/ }), -/* 857 */, -/* 858 */, -/* 859 */, -/* 860 */, -/* 861 */, -/* 862 */, -/* 863 */, -/* 864 */, -/* 865 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 3396: +/***/ ((__unused_webpack_module, exports) => { "use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var ObjectReader_1 = __webpack_require__(50); -var BaseReader_1 = __webpack_require__(305); -var js_yaml_1 = __webpack_require__(414); +Object.defineProperty(exports, "__esModule", ({ value: true })); /** - * Parses XML nodes from a YAML string. + * Pre-serializes XML nodes. */ -var YAMLReader = /** @class */ (function (_super) { - __extends(YAMLReader, _super); - function YAMLReader() { - return _super !== null && _super.apply(this, arguments) || this; - } +var BaseReader = /** @class */ (function () { /** - * Parses the given document representation. + * Initializes a new instance of `BaseReader`. * - * @param node - node receive parsed XML nodes - * @param str - YAML string to parse + * @param builderOptions - XML builder options */ - YAMLReader.prototype._parse = function (node, str) { - var result = js_yaml_1.safeLoad(str); - /* istanbul ignore next */ - if (result === undefined) { - throw new Error("Unable to parse YAML document."); + function BaseReader(builderOptions) { + this._builderOptions = builderOptions; + if (builderOptions.parser) { + Object.assign(this, builderOptions.parser); } - return new ObjectReader_1.ObjectReader(this._builderOptions).parse(node, result); + } + BaseReader.prototype._docType = function (parent, name, publicId, systemId) { + return parent.dtd({ name: name, pubID: publicId, sysID: systemId }); }; - return YAMLReader; -}(BaseReader_1.BaseReader)); -exports.YAMLReader = YAMLReader; -//# sourceMappingURL=YAMLReader.js.map + BaseReader.prototype._comment = function (parent, data) { + return parent.com(data); + }; + BaseReader.prototype._text = function (parent, data) { + return parent.txt(data); + }; + BaseReader.prototype._instruction = function (parent, target, data) { + return parent.ins(target, data); + }; + BaseReader.prototype._cdata = function (parent, data) { + return parent.dat(data); + }; + BaseReader.prototype._element = function (parent, namespace, name) { + return (namespace === undefined ? parent.ele(name) : parent.ele(namespace, name)); + }; + BaseReader.prototype._attribute = function (parent, namespace, name, value) { + return (namespace === undefined ? parent.att(name, value) : parent.att(namespace, name, value)); + }; + /** + * Main parser function which parses the given object and returns an XMLBuilder. + * + * @param node - node to recieve parsed content + * @param obj - object to parse + */ + BaseReader.prototype.parse = function (node, obj) { + return this._parse(node, obj); + }; + /** + * Creates a DocType node. + * The node will be skipped if the function returns `undefined`. + * + * @param name - node name + * @param publicId - public identifier + * @param systemId - system identifier + */ + BaseReader.prototype.docType = function (parent, name, publicId, systemId) { + return this._docType(parent, name, publicId, systemId); + }; + /** + * Creates a comment node. + * The node will be skipped if the function returns `undefined`. + * + * @param parent - parent node + * @param data - node data + */ + BaseReader.prototype.comment = function (parent, data) { + return this._comment(parent, data); + }; + /** + * Creates a text node. + * The node will be skipped if the function returns `undefined`. + * + * @param parent - parent node + * @param data - node data + */ + BaseReader.prototype.text = function (parent, data) { + return this._text(parent, data); + }; + /** + * Creates a processing instruction node. + * The node will be skipped if the function returns `undefined`. + * + * @param parent - parent node + * @param target - instruction target + * @param data - node data + */ + BaseReader.prototype.instruction = function (parent, target, data) { + return this._instruction(parent, target, data); + }; + /** + * Creates a CData section node. + * The node will be skipped if the function returns `undefined`. + * + * @param parent - parent node + * @param data - node data + */ + BaseReader.prototype.cdata = function (parent, data) { + return this._cdata(parent, data); + }; + /** + * Creates an element node. + * The node will be skipped if the function returns `undefined`. + * + * @param parent - parent node + * @param namespace - node namespace + * @param name - node name + */ + BaseReader.prototype.element = function (parent, namespace, name) { + return this._element(parent, namespace, name); + }; + /** + * Creates an attribute or namespace declaration. + * The node will be skipped if the function returns `undefined`. + * + * @param parent - parent node + * @param namespace - node namespace + * @param name - node name + * @param value - node value + */ + BaseReader.prototype.attribute = function (parent, namespace, name, value) { + return this._attribute(parent, namespace, name, value); + }; + return BaseReader; +}()); +exports.BaseReader = BaseReader; +//# sourceMappingURL=BaseReader.js.map /***/ }), -/* 866 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 3518: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -39960,2240 +38601,2575 @@ var __extends = (this && this.__extends) || (function () { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(970); -var NodeImpl_1 = __webpack_require__(935); -var algorithm_1 = __webpack_require__(163); -var WebIDLAlgorithm_1 = __webpack_require__(495); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var ObjectReader_1 = __nccwpck_require__(768); +var BaseReader_1 = __nccwpck_require__(3396); /** - * Represents an attribute of an element node. + * Parses XML nodes from a JSON string. */ -var AttrImpl = /** @class */ (function (_super) { - __extends(AttrImpl, _super); - /** - * Initializes a new instance of `Attr`. - * - * @param localName - local name - */ - function AttrImpl(localName) { - var _this = _super.call(this) || this; - _this._namespace = null; - _this._namespacePrefix = null; - _this._element = null; - _this._value = ''; - _this._localName = localName; - return _this; +var JSONReader = /** @class */ (function (_super) { + __extends(JSONReader, _super); + function JSONReader() { + return _super !== null && _super.apply(this, arguments) || this; } - Object.defineProperty(AttrImpl.prototype, "ownerElement", { - /** @inheritdoc */ - get: function () { return this._element; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(AttrImpl.prototype, "namespaceURI", { - /** @inheritdoc */ - get: function () { return this._namespace; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(AttrImpl.prototype, "prefix", { - /** @inheritdoc */ - get: function () { return this._namespacePrefix; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(AttrImpl.prototype, "localName", { - /** @inheritdoc */ - get: function () { return this._localName; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(AttrImpl.prototype, "name", { - /** @inheritdoc */ - get: function () { return this._qualifiedName; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(AttrImpl.prototype, "value", { - /** @inheritdoc */ - get: function () { return this._value; }, - set: function (value) { - /** - * The value attribute’s setter must set an existing attribute value with - * context object and the given value. - */ - algorithm_1.attr_setAnExistingAttributeValue(this, value); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(AttrImpl.prototype, "_qualifiedName", { - /** - * Returns the qualified name. - */ - get: function () { - /** - * An attribute’s qualified name is its local name if its namespace prefix - * is null, and its namespace prefix, followed by ":", followed by its - * local name, otherwise. - */ - return (this._namespacePrefix !== null ? - this._namespacePrefix + ':' + this._localName : - this._localName); - }, - enumerable: true, - configurable: true - }); /** - * Creates an `Attr`. + * Parses the given document representation. * - * @param document - owner document - * @param localName - local name + * @param node - node receive parsed XML nodes + * @param str - JSON string to parse */ - AttrImpl._create = function (document, localName) { - var node = new AttrImpl(localName); - node._nodeDocument = document; - return node; + JSONReader.prototype._parse = function (node, str) { + return new ObjectReader_1.ObjectReader(this._builderOptions).parse(node, JSON.parse(str)); }; - return AttrImpl; -}(NodeImpl_1.NodeImpl)); -exports.AttrImpl = AttrImpl; -/** - * Initialize prototype properties - */ -WebIDLAlgorithm_1.idl_defineConst(AttrImpl.prototype, "_nodeType", interfaces_1.NodeType.Attribute); -WebIDLAlgorithm_1.idl_defineConst(AttrImpl.prototype, "specified", true); -//# sourceMappingURL=AttrImpl.js.map - -/***/ }), -/* 867 */, -/* 868 */, -/* 869 */, -/* 870 */, -/* 871 */, -/* 872 */, -/* 873 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; + return JSONReader; +}(BaseReader_1.BaseReader)); +exports.JSONReader = JSONReader; +//# sourceMappingURL=JSONReader.js.map -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var util_1 = __webpack_require__(918); -var interfaces_1 = __webpack_require__(970); -/** - * Gets the next descendant of the given node of the tree rooted at `root` - * in depth-first pre-order. - * - * @param root - root node of the tree - * @param node - a node - * @param shadow - whether to visit shadow tree nodes - */ -function _getNextDescendantNode(root, node, shadow) { - if (shadow === void 0) { shadow = false; } - // traverse shadow tree - if (shadow && util_1.Guard.isElementNode(node) && util_1.Guard.isShadowRoot(node.shadowRoot)) { - if (node.shadowRoot._firstChild) - return node.shadowRoot._firstChild; - } - // traverse child nodes - if (node._firstChild) - return node._firstChild; - if (node === root) - return null; - // traverse siblings - if (node._nextSibling) - return node._nextSibling; - // traverse parent's next sibling - var parent = node._parent; - while (parent && parent !== root) { - if (parent._nextSibling) - return parent._nextSibling; - parent = parent._parent; - } - return null; -} -function _emptyIterator() { - var _a; - return _a = {}, - _a[Symbol.iterator] = function () { - return { - next: function () { - return { done: true, value: null }; - } - }; - }, - _a; -} -/** - * Returns the first descendant node of the tree rooted at `node` in - * depth-first pre-order. - * - * @param node - root node of the tree - * @param self - whether to include `node` in traversal - * @param shadow - whether to visit shadow tree nodes - * @param filter - a function to filter nodes - */ -function tree_getFirstDescendantNode(node, self, shadow, filter) { - if (self === void 0) { self = false; } - if (shadow === void 0) { shadow = false; } - var firstNode = (self ? node : _getNextDescendantNode(node, node, shadow)); - while (firstNode && filter && !filter(firstNode)) { - firstNode = _getNextDescendantNode(node, firstNode, shadow); - } - return firstNode; -} -exports.tree_getFirstDescendantNode = tree_getFirstDescendantNode; -/** - * Returns the next descendant node of the tree rooted at `node` in - * depth-first pre-order. - * - * @param node - root node of the tree - * @param currentNode - current descendant node - * @param self - whether to include `node` in traversal - * @param shadow - whether to visit shadow tree nodes - * @param filter - a function to filter nodes - */ -function tree_getNextDescendantNode(node, currentNode, self, shadow, filter) { - if (self === void 0) { self = false; } - if (shadow === void 0) { shadow = false; } - var nextNode = _getNextDescendantNode(node, currentNode, shadow); - while (nextNode && filter && !filter(nextNode)) { - nextNode = _getNextDescendantNode(node, nextNode, shadow); - } - return nextNode; -} -exports.tree_getNextDescendantNode = tree_getNextDescendantNode; +/***/ }), + +/***/ 768: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var util_1 = __nccwpck_require__(6195); +var BaseReader_1 = __nccwpck_require__(3396); +var dom_1 = __nccwpck_require__(770); /** - * Traverses through all descendant nodes of the tree rooted at - * `node` in depth-first pre-order. - * - * @param node - root node of the tree - * @param self - whether to include `node` in traversal - * @param shadow - whether to visit shadow tree nodes - * @param filter - a function to filter nodes + * Parses XML nodes from objects and arrays. + * ES6 maps and sets are also supoorted. */ -function tree_getDescendantNodes(node, self, shadow, filter) { - var _a; - if (self === void 0) { self = false; } - if (shadow === void 0) { shadow = false; } - if (!self && node._children.size === 0) { - return _emptyIterator(); +var ObjectReader = /** @class */ (function (_super) { + __extends(ObjectReader, _super); + function ObjectReader() { + return _super !== null && _super.apply(this, arguments) || this; } - return _a = {}, - _a[Symbol.iterator] = function () { - var currentNode = (self ? node : _getNextDescendantNode(node, node, shadow)); - return { - next: function () { - while (currentNode && filter && !filter(currentNode)) { - currentNode = _getNextDescendantNode(node, currentNode, shadow); + /** + * Parses the given document representation. + * + * @param node - node receive parsed XML nodes + * @param obj - object to parse + */ + ObjectReader.prototype._parse = function (node, obj) { + var _this = this; + var options = this._builderOptions; + // sanitizes input characters + var invalidCharReplacement = options.invalidCharReplacement; + var s = function (str) { + return dom_1.sanitizeInput(str, invalidCharReplacement); + }; + var lastChild = null; + if (util_1.isFunction(obj)) { + // evaluate if function + lastChild = this.parse(node, obj.apply(this)); + } + else if (util_1.isArray(obj) || util_1.isSet(obj)) { + util_1.forEachArray(obj, function (item) { return lastChild = _this.parse(node, item); }, this); + } + else /* if (isMap(obj) || isObject(obj)) */ { + // expand if object + util_1.forEachObject(obj, function (key, val) { + if (util_1.isFunction(val)) { + // evaluate if function + val = val.apply(_this); + } + if (!options.ignoreConverters && key.indexOf(options.convert.att) === 0) { + // assign attributes + if (key === options.convert.att) { + if (util_1.isArray(val) || util_1.isSet(val)) { + throw new Error("Invalid attribute: " + val.toString() + ". " + node._debugInfo()); + } + else /* if (isMap(val) || isObject(val)) */ { + util_1.forEachObject(val, function (attrKey, attrVal) { + lastChild = _this.attribute(node, undefined, s(attrKey), s(attrVal)) || lastChild; + }); + } } - if (currentNode === null) { - return { done: true, value: null }; + else { + lastChild = _this.attribute(node, undefined, s(key.substr(options.convert.att.length)), s(val)) || lastChild; + } + } + else if (!options.ignoreConverters && key.indexOf(options.convert.text) === 0) { + // text node + if (util_1.isMap(val) || util_1.isObject(val)) { + // if the key is #text expand child nodes under this node to support mixed content + lastChild = _this.parse(node, val); } else { - var result = { done: false, value: currentNode }; - currentNode = _getNextDescendantNode(node, currentNode, shadow); - return result; + lastChild = _this.text(node, s(val)) || lastChild; } } - }; - }, - _a; -} -exports.tree_getDescendantNodes = tree_getDescendantNodes; -/** - * Traverses through all descendant element nodes of the tree rooted at - * `node` in depth-first preorder. - * - * @param node - root node of the tree - * @param self - whether to include `node` in traversal - * @param shadow - whether to visit shadow tree nodes - * @param filter - a function to filter nodes - */ -function tree_getDescendantElements(node, self, shadow, filter) { - var _a; - if (self === void 0) { self = false; } - if (shadow === void 0) { shadow = false; } - if (!self && node._children.size === 0) { - return _emptyIterator(); - } - return _a = {}, - _a[Symbol.iterator] = function () { - var it = tree_getDescendantNodes(node, self, shadow, function (e) { return util_1.Guard.isElementNode(e); })[Symbol.iterator](); - var currentNode = it.next().value; - return { - next: function () { - while (currentNode && filter && !filter(currentNode)) { - currentNode = it.next().value; + else if (!options.ignoreConverters && key.indexOf(options.convert.cdata) === 0) { + // cdata node + if (util_1.isArray(val) || util_1.isSet(val)) { + util_1.forEachArray(val, function (item) { return lastChild = _this.cdata(node, s(item)) || lastChild; }, _this); } - if (currentNode === null) { - return { done: true, value: null }; + else { + lastChild = _this.cdata(node, s(val)) || lastChild; + } + } + else if (!options.ignoreConverters && key.indexOf(options.convert.comment) === 0) { + // comment node + if (util_1.isArray(val) || util_1.isSet(val)) { + util_1.forEachArray(val, function (item) { return lastChild = _this.comment(node, s(item)) || lastChild; }, _this); } else { - var result = { done: false, value: currentNode }; - currentNode = it.next().value; - return result; + lastChild = _this.comment(node, s(val)) || lastChild; } } - }; - }, - _a; -} -exports.tree_getDescendantElements = tree_getDescendantElements; -/** - * Traverses through all sibling nodes of `node`. - * - * @param node - root node of the tree - * @param self - whether to include `node` in traversal - * @param filter - a function to filter nodes - */ -function tree_getSiblingNodes(node, self, filter) { - var _a; - if (self === void 0) { self = false; } - if (!node._parent || node._parent._children.size === 0) { - return _emptyIterator(); - } - return _a = {}, - _a[Symbol.iterator] = function () { - var currentNode = node._parent ? node._parent._firstChild : null; - return { - next: function () { - while (currentNode && (filter && !filter(currentNode) || (!self && currentNode === node))) { - currentNode = currentNode._nextSibling; + else if (!options.ignoreConverters && key.indexOf(options.convert.ins) === 0) { + // processing instruction + if (util_1.isString(val)) { + var insIndex = val.indexOf(' '); + var insTarget = (insIndex === -1 ? val : val.substr(0, insIndex)); + var insValue = (insIndex === -1 ? '' : val.substr(insIndex + 1)); + lastChild = _this.instruction(node, s(insTarget), s(insValue)) || lastChild; } - if (currentNode === null) { - return { done: true, value: null }; + else if (util_1.isArray(val) || util_1.isSet(val)) { + util_1.forEachArray(val, function (item) { + var insIndex = item.indexOf(' '); + var insTarget = (insIndex === -1 ? item : item.substr(0, insIndex)); + var insValue = (insIndex === -1 ? '' : item.substr(insIndex + 1)); + lastChild = _this.instruction(node, s(insTarget), s(insValue)) || lastChild; + }, _this); } - else { - var result = { done: false, value: currentNode }; - currentNode = currentNode._nextSibling; - return result; + else /* if (isMap(target) || isObject(target)) */ { + util_1.forEachObject(val, function (insTarget, insValue) { return lastChild = _this.instruction(node, s(insTarget), s(insValue)) || lastChild; }, _this); } } - }; - }, - _a; -} -exports.tree_getSiblingNodes = tree_getSiblingNodes; -/** - * Gets the first ancestor of `node` in reverse tree order. - * - * @param node - root node of the tree - * @param self - whether to include `node` in traversal - * @param filter - a function to filter nodes - */ -function tree_getFirstAncestorNode(node, self, filter) { - if (self === void 0) { self = false; } - var firstNode = self ? node : node._parent; - while (firstNode && filter && !filter(firstNode)) { - firstNode = firstNode._parent; - } - return firstNode; -} -exports.tree_getFirstAncestorNode = tree_getFirstAncestorNode; -/** - * Gets the first ancestor of `node` in reverse tree order. - * - * @param node - root node of the tree - * @param self - whether to include `node` in traversal - * @param filter - a function to filter nodes - */ -function tree_getNextAncestorNode(node, currentNode, self, filter) { - if (self === void 0) { self = false; } - var nextNode = currentNode._parent; - while (nextNode && filter && !filter(nextNode)) { - nextNode = nextNode._parent; - } - return nextNode; -} -exports.tree_getNextAncestorNode = tree_getNextAncestorNode; -/** - * Traverses through all ancestor nodes `node` in reverse tree order. - * - * @param node - root node of the tree - * @param self - whether to include `node` in traversal - * @param filter - a function to filter nodes - */ -function tree_getAncestorNodes(node, self, filter) { - var _a; - if (self === void 0) { self = false; } - if (!self && !node._parent) { - return _emptyIterator(); - } - return _a = {}, - _a[Symbol.iterator] = function () { - var currentNode = tree_getFirstAncestorNode(node, self, filter); - return { - next: function () { - if (currentNode === null) { - return { done: true, value: null }; + else if ((util_1.isArray(val) || util_1.isSet(val)) && util_1.isEmpty(val)) { + // skip empty arrays + } + else if ((util_1.isMap(val) || util_1.isObject(val)) && util_1.isEmpty(val)) { + // empty objects produce one node + lastChild = _this.element(node, undefined, s(key)) || lastChild; + } + else if (!options.keepNullNodes && (val == null)) { + // skip null and undefined nodes + } + else if (util_1.isArray(val) || util_1.isSet(val)) { + // expand list by creating child nodes + util_1.forEachArray(val, function (item) { + var childNode = {}; + childNode[key] = item; + lastChild = _this.parse(node, childNode); + }, _this); + } + else if (util_1.isMap(val) || util_1.isObject(val)) { + // create a parent node + var parent = _this.element(node, undefined, key); + if (parent) { + lastChild = parent; + // expand child nodes under parent + _this.parse(parent, val); } - else { - var result = { done: false, value: currentNode }; - currentNode = tree_getNextAncestorNode(node, currentNode, self, filter); - return result; + } + else if (val != null && val !== '') { + // leaf element node with a single text node + var parent = _this.element(node, undefined, key); + if (parent) { + lastChild = parent; + _this.text(parent, s(val)); } } - }; - }, - _a; -} -exports.tree_getAncestorNodes = tree_getAncestorNodes; -/** - * Returns the common ancestor of the given nodes. - * - * @param nodeA - a node - * @param nodeB - a node - */ -function tree_getCommonAncestor(nodeA, nodeB) { - if (nodeA === nodeB) { - return nodeA._parent; - } - // lists of parent nodes - var parentsA = []; - var parentsB = []; - var pA = tree_getFirstAncestorNode(nodeA, true); - while (pA !== null) { - parentsA.push(pA); - pA = tree_getNextAncestorNode(nodeA, pA, true); - } - var pB = tree_getFirstAncestorNode(nodeB, true); - while (pB !== null) { - parentsB.push(pB); - pB = tree_getNextAncestorNode(nodeB, pB, true); + else { + // leaf element node + lastChild = _this.element(node, undefined, s(key)) || lastChild; + } + }, this); + } + return lastChild || node; + }; + return ObjectReader; +}(BaseReader_1.BaseReader)); +exports.ObjectReader = ObjectReader; +//# sourceMappingURL=ObjectReader.js.map + +/***/ }), + +/***/ 5044: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } - // walk through parents backwards until they differ - var pos1 = parentsA.length; - var pos2 = parentsB.length; - var parent = null; - for (var i = Math.min(pos1, pos2); i > 0; i--) { - var parent1 = parentsA[--pos1]; - var parent2 = parentsB[--pos2]; - if (parent1 !== parent2) { - break; + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); } - parent = parent1; + finally { if (e) throw e.error; } } - return parent; -} -exports.tree_getCommonAncestor = tree_getCommonAncestor; + return ar; +}; +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var XMLStringLexer_1 = __nccwpck_require__(7061); +var interfaces_1 = __nccwpck_require__(7707); +var infra_1 = __nccwpck_require__(4251); +var algorithm_1 = __nccwpck_require__(61); +var dom_1 = __nccwpck_require__(770); +var BaseReader_1 = __nccwpck_require__(3396); /** - * Returns the node following `node` in depth-first preorder. - * - * @param root - root of the subtree - * @param node - a node + * Parses XML nodes from an XML document string. */ -function tree_getFollowingNode(root, node) { - if (node._firstChild) { - return node._firstChild; - } - else if (node._nextSibling) { - return node._nextSibling; +var XMLReader = /** @class */ (function (_super) { + __extends(XMLReader, _super); + function XMLReader() { + return _super !== null && _super.apply(this, arguments) || this; } - else { - while (true) { - var parent = node._parent; - if (parent === null || parent === root) { - return null; - } - else if (parent._nextSibling) { - return parent._nextSibling; - } - else { - node = parent; + /** + * Parses the given document representation. + * + * @param node - node receive parsed XML nodes + * @param str - XML document string to parse + */ + XMLReader.prototype._parse = function (node, str) { + var e_1, _a, e_2, _b; + var lexer = new XMLStringLexer_1.XMLStringLexer(str, { skipWhitespaceOnlyText: true }); + // sanitizes input characters + var invalidCharReplacement = this._builderOptions.invalidCharReplacement; + var s = function (str) { + return dom_1.sanitizeInput(str, invalidCharReplacement); + }; + var context = node; + var token = lexer.nextToken(); + while (token.type !== interfaces_1.TokenType.EOF) { + switch (token.type) { + case interfaces_1.TokenType.Declaration: + var declaration = token; + var version = s(declaration.version); + if (version !== "1.0") { + throw new Error("Invalid xml version: " + version); + } + var builderOptions = { + version: version + }; + if (declaration.encoding) { + builderOptions.encoding = s(declaration.encoding); + } + if (declaration.standalone) { + builderOptions.standalone = (s(declaration.standalone) === "yes"); + } + context.set(builderOptions); + break; + case interfaces_1.TokenType.DocType: + var doctype = token; + context = this.docType(context, s(doctype.name), s(doctype.pubId), s(doctype.sysId)) || context; + break; + case interfaces_1.TokenType.CDATA: + var cdata = token; + context = this.cdata(context, s(cdata.data)) || context; + break; + case interfaces_1.TokenType.Comment: + var comment = token; + context = this.comment(context, s(comment.data)) || context; + break; + case interfaces_1.TokenType.PI: + var pi = token; + context = this.instruction(context, s(pi.target), s(pi.data)) || context; + break; + case interfaces_1.TokenType.Text: + var text = token; + context = this.text(context, s(text.data)) || context; + break; + case interfaces_1.TokenType.Element: + var element = token; + var elementName = s(element.name); + // inherit namespace from parent + var _c = __read(algorithm_1.namespace_extractQName(elementName), 1), prefix = _c[0]; + var namespace = context.node.lookupNamespaceURI(prefix); + // override namespace if there is a namespace declaration + // attribute + // also lookup namespace declaration attributes + var nsDeclarations = {}; + try { + for (var _d = (e_1 = void 0, __values(element.attributes)), _e = _d.next(); !_e.done; _e = _d.next()) { + var _f = __read(_e.value, 2), attName = _f[0], attValue = _f[1]; + attName = s(attName); + attValue = s(attValue); + if (attName === "xmlns") { + namespace = attValue; + } + else { + var _g = __read(algorithm_1.namespace_extractQName(attName), 2), attPrefix = _g[0], attLocalName = _g[1]; + if (attPrefix === "xmlns") { + if (attLocalName === prefix) { + namespace = attValue; + } + nsDeclarations[attLocalName] = attValue; + } + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (_e && !_e.done && (_a = _d.return)) _a.call(_d); + } + finally { if (e_1) throw e_1.error; } + } + // create the DOM element node + var elementNode = (namespace !== null ? + this.element(context, namespace, elementName) : + this.element(context, undefined, elementName)); + if (elementNode === undefined) + break; + try { + // assign attributes + for (var _h = (e_2 = void 0, __values(element.attributes)), _j = _h.next(); !_j.done; _j = _h.next()) { + var _k = __read(_j.value, 2), attName = _k[0], attValue = _k[1]; + attName = s(attName); + attValue = s(attValue); + var _l = __read(algorithm_1.namespace_extractQName(attName), 2), attPrefix = _l[0], attLocalName = _l[1]; + var attNamespace = null; + if (attPrefix === "xmlns" || (attPrefix === null && attLocalName === "xmlns")) { + // namespace declaration attribute + attNamespace = infra_1.namespace.XMLNS; + } + else { + attNamespace = elementNode.node.lookupNamespaceURI(attPrefix); + if (attNamespace !== null && elementNode.node.isDefaultNamespace(attNamespace)) { + attNamespace = null; + } + else if (attNamespace === null && attPrefix !== null) { + attNamespace = nsDeclarations[attPrefix] || null; + } + } + if (attNamespace !== null) + this.attribute(elementNode, attNamespace, attName, attValue); + else + this.attribute(elementNode, undefined, attName, attValue); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_j && !_j.done && (_b = _h.return)) _b.call(_h); + } + finally { if (e_2) throw e_2.error; } + } + if (!element.selfClosing) { + context = elementNode; + } + break; + case interfaces_1.TokenType.ClosingTag: + /* istanbul ignore else */ + if (context.node.parentNode) { + context = context.up(); + } + break; } + token = lexer.nextToken(); } - } -} -exports.tree_getFollowingNode = tree_getFollowingNode; + return context; + }; + return XMLReader; +}(BaseReader_1.BaseReader)); +exports.XMLReader = XMLReader; +//# sourceMappingURL=XMLReader.js.map + +/***/ }), + +/***/ 2475: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var ObjectReader_1 = __nccwpck_require__(768); +var BaseReader_1 = __nccwpck_require__(3396); +var js_yaml_1 = __nccwpck_require__(1917); /** - * Returns the node preceding `node` in depth-first preorder. - * - * @param root - root of the subtree - * @param node - a node + * Parses XML nodes from a YAML string. */ -function tree_getPrecedingNode(root, node) { - if (node === root) { - return null; +var YAMLReader = /** @class */ (function (_super) { + __extends(YAMLReader, _super); + function YAMLReader() { + return _super !== null && _super.apply(this, arguments) || this; } - if (node._previousSibling) { - node = node._previousSibling; - if (node._lastChild) { - return node._lastChild; - } - else { - return node; + /** + * Parses the given document representation. + * + * @param node - node receive parsed XML nodes + * @param str - YAML string to parse + */ + YAMLReader.prototype._parse = function (node, str) { + var result = js_yaml_1.safeLoad(str); + /* istanbul ignore next */ + if (result === undefined) { + throw new Error("Unable to parse YAML document."); } - } - else { - return node._parent; - } -} -exports.tree_getPrecedingNode = tree_getPrecedingNode; + return new ObjectReader_1.ObjectReader(this._builderOptions).parse(node, result); + }; + return YAMLReader; +}(BaseReader_1.BaseReader)); +exports.YAMLReader = YAMLReader; +//# sourceMappingURL=YAMLReader.js.map + +/***/ }), + +/***/ 560: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var XMLReader_1 = __nccwpck_require__(5044); +exports.XMLReader = XMLReader_1.XMLReader; +var ObjectReader_1 = __nccwpck_require__(768); +exports.ObjectReader = ObjectReader_1.ObjectReader; +var JSONReader_1 = __nccwpck_require__(3518); +exports.JSONReader = JSONReader_1.JSONReader; +var YAMLReader_1 = __nccwpck_require__(2475); +exports.YAMLReader = YAMLReader_1.YAMLReader; +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 708: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); /** - * Determines if the node tree is constrained. A node tree is - * constrained as follows, expressed as a relationship between the - * type of node and its allowed children: - * - Document (In tree order) - * * Zero or more nodes each of which is ProcessingInstruction - * or Comment. - * * Optionally one DocumentType node. - * * Zero or more nodes each of which is ProcessingInstruction - * or Comment. - * * Optionally one Element node. - * * Zero or more nodes each of which is ProcessingInstruction - * or Comment. - * - DocumentFragment, Element - * * Zero or more nodes each of which is Element, Text, - * ProcessingInstruction, or Comment. - * - DocumentType, Text, ProcessingInstruction, Comment - * * None. - * - * @param node - the root of the tree + * Pre-serializes XML nodes. */ -function tree_isConstrained(node) { - var e_1, _a, e_2, _b, e_3, _c; - switch (node._nodeType) { - case interfaces_1.NodeType.Document: - var hasDocType = false; - var hasElement = false; - try { - for (var _d = __values(node._children), _e = _d.next(); !_e.done; _e = _d.next()) { - var childNode = _e.value; - switch (childNode._nodeType) { - case interfaces_1.NodeType.ProcessingInstruction: - case interfaces_1.NodeType.Comment: - break; - case interfaces_1.NodeType.DocumentType: - if (hasDocType || hasElement) - return false; - hasDocType = true; - break; - case interfaces_1.NodeType.Element: - if (hasElement) - return false; - hasElement = true; - break; - default: - return false; - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_e && !_e.done && (_a = _d.return)) _a.call(_d); - } - finally { if (e_1) throw e_1.error; } - } - break; - case interfaces_1.NodeType.DocumentFragment: - case interfaces_1.NodeType.Element: - try { - for (var _f = __values(node._children), _g = _f.next(); !_g.done; _g = _f.next()) { - var childNode = _g.value; - switch (childNode._nodeType) { - case interfaces_1.NodeType.Element: - case interfaces_1.NodeType.Text: - case interfaces_1.NodeType.ProcessingInstruction: - case interfaces_1.NodeType.CData: - case interfaces_1.NodeType.Comment: - break; - default: - return false; - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_g && !_g.done && (_b = _f.return)) _b.call(_f); - } - finally { if (e_2) throw e_2.error; } - } - break; - case interfaces_1.NodeType.DocumentType: - case interfaces_1.NodeType.Text: - case interfaces_1.NodeType.ProcessingInstruction: - case interfaces_1.NodeType.CData: - case interfaces_1.NodeType.Comment: - return (!node.hasChildNodes()); +var BaseCBWriter = /** @class */ (function () { + /** + * Initializes a new instance of `BaseCBWriter`. + * + * @param builderOptions - XML builder options + */ + function BaseCBWriter(builderOptions) { + /** + * Gets the current depth of the XML tree. + */ + this.level = 0; + this._builderOptions = builderOptions; + this._writerOptions = builderOptions; } - try { - for (var _h = __values(node._children), _j = _h.next(); !_j.done; _j = _h.next()) { - var childNode = _j.value; - // recursively check child nodes - if (!tree_isConstrained(childNode)) - return false; + return BaseCBWriter; +}()); +exports.BaseCBWriter = BaseCBWriter; +//# sourceMappingURL=BaseCBWriter.js.map + +/***/ }), + +/***/ 7644: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } - catch (e_3_1) { e_3 = { error: e_3_1 }; } + catch (error) { e = { error: error }; } finally { try { - if (_j && !_j.done && (_c = _h.return)) _c.call(_h); + if (r && !r.done && (m = i["return"])) m.call(i); } - finally { if (e_3) throw e_3.error; } + finally { if (e) throw e.error; } } - return true; -} -exports.tree_isConstrained = tree_isConstrained; + return ar; +}; +var __spread = (this && this.__spread) || function () { + for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i])); + return ar; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var interfaces_1 = __nccwpck_require__(7305); +var LocalNameSet_1 = __nccwpck_require__(9049); +var NamespacePrefixMap_1 = __nccwpck_require__(283); +var infra_1 = __nccwpck_require__(4251); +var algorithm_1 = __nccwpck_require__(61); /** - * Returns the length of a node. - * - * @param node - a node to check + * Pre-serializes XML nodes. */ -function tree_nodeLength(node) { +var BaseWriter = /** @class */ (function () { /** - * To determine the length of a node node, switch on node: - * - DocumentType - * Zero. - * - Text - * - ProcessingInstruction - * - Comment - * Its data’s length. - * - Any other node - * Its number of children. - */ - if (util_1.Guard.isDocumentTypeNode(node)) { - return 0; - } - else if (util_1.Guard.isCharacterDataNode(node)) { - return node._data.length; - } - else { - return node._children.size; + * Initializes a new instance of `BaseWriter`. + * + * @param builderOptions - XML builder options + */ + function BaseWriter(builderOptions) { + /** + * Gets the current depth of the XML tree. + */ + this.level = 0; + this._builderOptions = builderOptions; } -} -exports.tree_nodeLength = tree_nodeLength; -/** - * Determines if a node is empty. - * - * @param node - a node to check - */ -function tree_isEmpty(node) { /** - * A node is considered empty if its length is zero. - */ - return (tree_nodeLength(node) === 0); -} -exports.tree_isEmpty = tree_isEmpty; -/** - * Returns the root node of a tree. The root of an object is itself, - * if its parent is `null`, or else it is the root of its parent. - * The root of a tree is any object participating in that tree - * whose parent is `null`. - * - * @param node - a node of the tree - * @param shadow - `true` to return shadow-including root, otherwise - * `false` - */ -function tree_rootNode(node, shadow) { - if (shadow === void 0) { shadow = false; } + * Used by derived classes to serialize the XML declaration. + * + * @param version - a version number string + * @param encoding - encoding declaration + * @param standalone - standalone document declaration + */ + BaseWriter.prototype.declaration = function (version, encoding, standalone) { }; /** - * The root of an object is itself, if its parent is null, or else it is the - * root of its parent. The root of a tree is any object participating in - * that tree whose parent is null. - */ - if (shadow) { - var root = tree_rootNode(node, false); - if (util_1.Guard.isShadowRoot(root)) - return tree_rootNode(root._host, true); - else - return root; - } - else { - if (!node._parent) - return node; - else - return tree_rootNode(node._parent); - } -} -exports.tree_rootNode = tree_rootNode; -/** - * Determines whether `other` is a descendant of `node`. An object - * A is called a descendant of an object B, if either A is a child - * of B or A is a child of an object C that is a descendant of B. - * - * @param node - a node - * @param other - the node to check - * @param self - if `true`, traversal includes `node` itself - * @param shadow - if `true`, traversal includes the - * node's and its descendant's shadow trees as well. - */ -function tree_isDescendantOf(node, other, self, shadow) { - if (self === void 0) { self = false; } - if (shadow === void 0) { shadow = false; } + * Used by derived classes to serialize a DocType node. + * + * @param name - node name + * @param publicId - public identifier + * @param systemId - system identifier + */ + BaseWriter.prototype.docType = function (name, publicId, systemId) { }; /** - * An object A is called a descendant of an object B, if either A is a - * child of B or A is a child of an object C that is a descendant of B. - * - * An inclusive descendant is an object or one of its descendants. - */ - var child = tree_getFirstDescendantNode(node, self, shadow); - while (child !== null) { - if (child === other) { - return true; - } - child = tree_getNextDescendantNode(node, child, self, shadow); - } - return false; -} -exports.tree_isDescendantOf = tree_isDescendantOf; -/** - * Determines whether `other` is an ancestor of `node`. An object A - * is called an ancestor of an object B if and only if B is a - * descendant of A. - * - * @param node - a node - * @param other - the node to check - * @param self - if `true`, traversal includes `node` itself - * @param shadow - if `true`, traversal includes the - * node's and its descendant's shadow trees as well. - */ -function tree_isAncestorOf(node, other, self, shadow) { - if (self === void 0) { self = false; } - if (shadow === void 0) { shadow = false; } - var ancestor = self ? node : shadow && util_1.Guard.isShadowRoot(node) ? - node._host : node._parent; - while (ancestor !== null) { - if (ancestor === other) - return true; - ancestor = shadow && util_1.Guard.isShadowRoot(ancestor) ? - ancestor._host : ancestor._parent; - } - return false; -} -exports.tree_isAncestorOf = tree_isAncestorOf; -/** - * Determines whether `other` is a host-including ancestor of `node`. An - * object A is a host-including inclusive ancestor of an object B, if either - * A is an inclusive ancestor of B, or if B’s root has a non-null host and - * A is a host-including inclusive ancestor of B’s root’s host. - * - * @param node - a node - * @param other - the node to check - * @param self - if `true`, traversal includes `node` itself - */ -function tree_isHostIncludingAncestorOf(node, other, self) { - if (self === void 0) { self = false; } - if (tree_isAncestorOf(node, other, self)) - return true; - var root = tree_rootNode(node); - if (util_1.Guard.isDocumentFragmentNode(root) && root._host !== null && - tree_isHostIncludingAncestorOf(root._host, other, self)) - return true; - return false; -} -exports.tree_isHostIncludingAncestorOf = tree_isHostIncludingAncestorOf; -/** - * Determines whether `other` is a sibling of `node`. An object A is - * called a sibling of an object B, if and only if B and A share - * the same non-null parent. - * - * @param node - a node - * @param other - the node to check - * @param self - if `true`, traversal includes `node` itself - */ -function tree_isSiblingOf(node, other, self) { - if (self === void 0) { self = false; } + * Used by derived classes to serialize a comment node. + * + * @param data - node data + */ + BaseWriter.prototype.comment = function (data) { }; /** - * An object A is called a sibling of an object B, if and only if B and A - * share the same non-null parent. - * - * An inclusive sibling is an object or one of its siblings. - */ - if (node === other) { - if (self) - return true; - } - else { - return (node._parent !== null && node._parent === other._parent); - } - return false; -} -exports.tree_isSiblingOf = tree_isSiblingOf; -/** - * Determines whether `other` is preceding `node`. An object A is - * preceding an object B if A and B are in the same tree and A comes - * before B in tree order. - * - * @param node - a node - * @param other - the node to check - */ -function tree_isPreceding(node, other) { + * Used by derived classes to serialize a text node. + * + * @param data - node data + */ + BaseWriter.prototype.text = function (data) { }; /** - * An object A is preceding an object B if A and B are in the same tree and - * A comes before B in tree order. - */ - var nodePos = tree_treePosition(node); - var otherPos = tree_treePosition(other); - if (nodePos === -1 || otherPos === -1) - return false; - else if (tree_rootNode(node) !== tree_rootNode(other)) - return false; - else - return otherPos < nodePos; -} -exports.tree_isPreceding = tree_isPreceding; -/** - * Determines whether `other` is following `node`. An object A is - * following an object B if A and B are in the same tree and A comes - * after B in tree order. - * - * @param node - a node - * @param other - the node to check - */ -function tree_isFollowing(node, other) { + * Used by derived classes to serialize a processing instruction node. + * + * @param target - instruction target + * @param data - node data + */ + BaseWriter.prototype.instruction = function (target, data) { }; + /** + * Used by derived classes to serialize a CData section node. + * + * @param data - node data + */ + BaseWriter.prototype.cdata = function (data) { }; /** - * An object A is following an object B if A and B are in the same tree and - * A comes after B in tree order. - */ - var nodePos = tree_treePosition(node); - var otherPos = tree_treePosition(other); - if (nodePos === -1 || otherPos === -1) - return false; - else if (tree_rootNode(node) !== tree_rootNode(other)) - return false; - else - return otherPos > nodePos; -} -exports.tree_isFollowing = tree_isFollowing; -/** - * Determines whether `other` is the parent node of `node`. - * - * @param node - a node - * @param other - the node to check - */ -function tree_isParentOf(node, other) { + * Used by derived classes to serialize the beginning of the opening tag of an + * element node. + * + * @param name - node name + */ + BaseWriter.prototype.openTagBegin = function (name) { }; /** - * An object that participates in a tree has a parent, which is either - * null or an object, and has children, which is an ordered set of objects. - * An object A whose parent is object B is a child of B. - */ - return (node._parent === other); -} -exports.tree_isParentOf = tree_isParentOf; -/** - * Determines whether `other` is a child node of `node`. - * - * @param node - a node - * @param other - the node to check - */ -function tree_isChildOf(node, other) { + * Used by derived classes to serialize the ending of the opening tag of an + * element node. + * + * @param name - node name + * @param selfClosing - whether the element node is self closing + * @param voidElement - whether the element node is a HTML void element + */ + BaseWriter.prototype.openTagEnd = function (name, selfClosing, voidElement) { }; /** - * An object that participates in a tree has a parent, which is either - * null or an object, and has children, which is an ordered set of objects. - * An object A whose parent is object B is a child of B. - */ - return (other._parent === node); -} -exports.tree_isChildOf = tree_isChildOf; -/** - * Returns the previous sibling node of `node` or null if it has no - * preceding sibling. - * - * @param node - */ -function tree_previousSibling(node) { + * Used by derived classes to serialize the closing tag of an element node. + * + * @param name - node name + */ + BaseWriter.prototype.closeTag = function (name) { }; /** - * The previous sibling of an object is its first preceding sibling or null - * if it has no preceding sibling. - */ - return node._previousSibling; -} -exports.tree_previousSibling = tree_previousSibling; -/** - * Returns the next sibling node of `node` or null if it has no - * following sibling. - * - * @param node - */ -function tree_nextSibling(node) { + * Used by derived classes to serialize attributes or namespace declarations. + * + * @param attributes - attribute array + */ + BaseWriter.prototype.attributes = function (attributes) { + var e_1, _a; + try { + for (var attributes_1 = __values(attributes), attributes_1_1 = attributes_1.next(); !attributes_1_1.done; attributes_1_1 = attributes_1.next()) { + var attr = attributes_1_1.value; + this.attribute(attr[1] === null ? attr[2] : attr[1] + ':' + attr[2], attr[3]); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (attributes_1_1 && !attributes_1_1.done && (_a = attributes_1.return)) _a.call(attributes_1); + } + finally { if (e_1) throw e_1.error; } + } + }; /** - * The next sibling of an object is its first following sibling or null - * if it has no following sibling. - */ - return node._nextSibling; -} -exports.tree_nextSibling = tree_nextSibling; -/** - * Returns the first child node of `node` or null if it has no - * children. - * - * @param node - */ -function tree_firstChild(node) { + * Used by derived classes to serialize an attribute or namespace declaration. + * + * @param name - node name + * @param value - node value + */ + BaseWriter.prototype.attribute = function (name, value) { }; /** - * The first child of an object is its first child or null if it has no - * children. - */ - return node._firstChild; -} -exports.tree_firstChild = tree_firstChild; -/** - * Returns the last child node of `node` or null if it has no - * children. - * - * @param node - */ -function tree_lastChild(node) { + * Used by derived classes to perform any pre-processing steps before starting + * serializing an element node. + * + * @param name - node name + */ + BaseWriter.prototype.beginElement = function (name) { }; /** - * The last child of an object is its last child or null if it has no - * children. - */ - return node._lastChild; -} -exports.tree_lastChild = tree_lastChild; -/** - * Returns the zero-based index of `node` when counted preorder in - * the tree rooted at `root`. Returns `-1` if `node` is not in - * the tree. - * - * @param node - the node to get the index of - */ -function tree_treePosition(node) { - var root = tree_rootNode(node); - var pos = 0; - var childNode = tree_getFirstDescendantNode(root); - while (childNode !== null) { - pos++; - if (childNode === node) - return pos; - childNode = tree_getNextDescendantNode(root, childNode); - } - return -1; -} -exports.tree_treePosition = tree_treePosition; -/** - * Determines the index of `node`. The index of an object is its number of - * preceding siblings, or 0 if it has none. - * - * @param node - a node - * @param other - the node to check - */ -function tree_index(node) { + * Used by derived classes to perform any post-processing steps after + * completing serializing an element node. + * + * @param name - node name + */ + BaseWriter.prototype.endElement = function (name) { }; /** - * The index of an object is its number of preceding siblings, or 0 if it - * has none. - */ - var n = 0; - while (node._previousSibling !== null) { - n++; - node = node._previousSibling; - } - return n; -} -exports.tree_index = tree_index; -/** - * Retargets an object against another object. - * - * @param a - an object to retarget - * @param b - an object to retarget against - */ -function tree_retarget(a, b) { + * Produces an XML serialization of the given node. The pre-serializer inserts + * namespace declarations where necessary and produces qualified names for + * nodes and attributes. + * + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance + */ + BaseWriter.prototype.serializeNode = function (node, requireWellFormed, noDoubleEncoding) { + var hasNamespaces = (node._nodeDocument !== undefined && node._nodeDocument._hasNamespaces); + this.level = 0; + this.currentNode = node; + if (hasNamespaces) { + /** From: https://w3c.github.io/DOM-Parsing/#xml-serialization + * + * 1. Let namespace be a context namespace with value null. + * The context namespace tracks the XML serialization algorithm's current + * default namespace. The context namespace is changed when either an Element + * Node has a default namespace declaration, or the algorithm generates a + * default namespace declaration for the Element Node to match its own + * namespace. The algorithm assumes no namespace (null) to start. + * 2. Let prefix map be a new namespace prefix map. + * 3. Add the XML namespace with prefix value "xml" to prefix map. + * 4. Let prefix index be a generated namespace prefix index with value 1. + * The generated namespace prefix index is used to generate a new unique + * prefix value when no suitable existing namespace prefix is available to + * serialize a node's namespaceURI (or the namespaceURI of one of node's + * attributes). See the generate a prefix algorithm. + */ + var namespace = null; + var prefixMap = new NamespacePrefixMap_1.NamespacePrefixMap(); + prefixMap.set("xml", infra_1.namespace.XML); + var prefixIndex = { value: 1 }; + /** + * 5. Return the result of running the XML serialization algorithm on node + * passing the context namespace namespace, namespace prefix map prefix map, + * generated namespace prefix index reference to prefix index, and the + * flag require well-formed. If an exception occurs during the execution + * of the algorithm, then catch that exception and throw an + * "InvalidStateError" DOMException. + */ + this._serializeNodeNS(node, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding); + } + else { + this._serializeNode(node, requireWellFormed, noDoubleEncoding); + } + }; /** - * To retarget an object A against an object B, repeat these steps until - * they return an object: - * 1. If one of the following is true - * - A is not a node - * - A's root is not a shadow root - * - B is a node and A's root is a shadow-including inclusive ancestor - * of B - * then return A. - * 2. Set A to A's root's host. - */ - while (true) { - if (!a || !util_1.Guard.isNode(a)) { - return a; + * Produces an XML serialization of a node. + * + * @param node - node to serialize + * @param namespace - context namespace + * @param prefixMap - namespace prefix map + * @param prefixIndex - generated namespace prefix index + * @param requireWellFormed - whether to check conformance + */ + BaseWriter.prototype._serializeNodeNS = function (node, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding) { + this.currentNode = node; + switch (node.nodeType) { + case interfaces_1.NodeType.Element: + this._serializeElementNS(node, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding); + break; + case interfaces_1.NodeType.Document: + this._serializeDocumentNS(node, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding); + break; + case interfaces_1.NodeType.Comment: + this._serializeComment(node, requireWellFormed, noDoubleEncoding); + break; + case interfaces_1.NodeType.Text: + this._serializeText(node, requireWellFormed, noDoubleEncoding); + break; + case interfaces_1.NodeType.DocumentFragment: + this._serializeDocumentFragmentNS(node, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding); + break; + case interfaces_1.NodeType.DocumentType: + this._serializeDocumentType(node, requireWellFormed, noDoubleEncoding); + break; + case interfaces_1.NodeType.ProcessingInstruction: + this._serializeProcessingInstruction(node, requireWellFormed, noDoubleEncoding); + break; + case interfaces_1.NodeType.CData: + this._serializeCData(node, requireWellFormed, noDoubleEncoding); + break; + default: + throw new Error("Unknown node type: " + node.nodeType); + } + }; + /** + * Produces an XML serialization of a node. + * + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance + */ + BaseWriter.prototype._serializeNode = function (node, requireWellFormed, noDoubleEncoding) { + this.currentNode = node; + switch (node.nodeType) { + case interfaces_1.NodeType.Element: + this._serializeElement(node, requireWellFormed, noDoubleEncoding); + break; + case interfaces_1.NodeType.Document: + this._serializeDocument(node, requireWellFormed, noDoubleEncoding); + break; + case interfaces_1.NodeType.Comment: + this._serializeComment(node, requireWellFormed, noDoubleEncoding); + break; + case interfaces_1.NodeType.Text: + this._serializeText(node, requireWellFormed, noDoubleEncoding); + break; + case interfaces_1.NodeType.DocumentFragment: + this._serializeDocumentFragment(node, requireWellFormed, noDoubleEncoding); + break; + case interfaces_1.NodeType.DocumentType: + this._serializeDocumentType(node, requireWellFormed, noDoubleEncoding); + break; + case interfaces_1.NodeType.ProcessingInstruction: + this._serializeProcessingInstruction(node, requireWellFormed, noDoubleEncoding); + break; + case interfaces_1.NodeType.CData: + this._serializeCData(node, requireWellFormed, noDoubleEncoding); + break; + default: + throw new Error("Unknown node type: " + node.nodeType); + } + }; + /** + * Produces an XML serialization of an element node. + * + * @param node - node to serialize + * @param namespace - context namespace + * @param prefixMap - namespace prefix map + * @param prefixIndex - generated namespace prefix index + * @param requireWellFormed - whether to check conformance + */ + BaseWriter.prototype._serializeElementNS = function (node, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding) { + var e_2, _a; + var attributes = []; + /** + * From: https://w3c.github.io/DOM-Parsing/#xml-serializing-an-element-node + * + * 1. If the require well-formed flag is set (its value is true), and this + * node's localName attribute contains the character ":" (U+003A COLON) or + * does not match the XML Name production, then throw an exception; the + * serialization of this node would not be a well-formed element. + */ + if (requireWellFormed && (node.localName.indexOf(":") !== -1 || + !algorithm_1.xml_isName(node.localName))) { + throw new Error("Node local name contains invalid characters (well-formed required)."); + } + /** + * 2. Let markup be the string "<" (U+003C LESS-THAN SIGN). + * 3. Let qualified name be an empty string. + * 4. Let skip end tag be a boolean flag with value false. + * 5. Let ignore namespace definition attribute be a boolean flag with value + * false. + * 6. Given prefix map, copy a namespace prefix map and let map be the + * result. + * 7. Let local prefixes map be an empty map. The map has unique Node prefix + * strings as its keys, with corresponding namespaceURI Node values as the + * map's key values (in this map, the null namespace is represented by the + * empty string). + * + * _Note:_ This map is local to each element. It is used to ensure there + * are no conflicting prefixes should a new namespace prefix attribute need + * to be generated. It is also used to enable skipping of duplicate prefix + * definitions when writing an element's attributes: the map allows the + * algorithm to distinguish between a prefix in the namespace prefix map + * that might be locally-defined (to the current Element) and one that is + * not. + * 8. Let local default namespace be the result of recording the namespace + * information for node given map and local prefixes map. + * + * _Note:_ The above step will update map with any found namespace prefix + * definitions, add the found prefix definitions to the local prefixes map + * and return a local default namespace value defined by a default namespace + * attribute if one exists. Otherwise it returns null. + * 9. Let inherited ns be a copy of namespace. + * 10. Let ns be the value of node's namespaceURI attribute. + */ + var qualifiedName = ''; + var skipEndTag = false; + var ignoreNamespaceDefinitionAttribute = false; + var map = prefixMap.copy(); + var localPrefixesMap = {}; + var localDefaultNamespace = this._recordNamespaceInformation(node, map, localPrefixesMap); + var inheritedNS = namespace; + var ns = node.namespaceURI; + /** 11. If inherited ns is equal to ns, then: */ + if (inheritedNS === ns) { + /** + * 11.1. If local default namespace is not null, then set ignore + * namespace definition attribute to true. + */ + if (localDefaultNamespace !== null) { + ignoreNamespaceDefinitionAttribute = true; + } + /** + * 11.2. If ns is the XML namespace, then append to qualified name the + * concatenation of the string "xml:" and the value of node's localName. + * 11.3. Otherwise, append to qualified name the value of node's + * localName. The node's prefix if it exists, is dropped. + */ + if (ns === infra_1.namespace.XML) { + qualifiedName = 'xml:' + node.localName; + } + else { + qualifiedName = node.localName; + } + /** 11.4. Append the value of qualified name to markup. */ + this.beginElement(qualifiedName); + this.openTagBegin(qualifiedName); + } + else { + /** + * 12. Otherwise, inherited ns is not equal to ns (the node's own + * namespace is different from the context namespace of its parent). + * Run these sub-steps: + * + * 12.1. Let prefix be the value of node's prefix attribute. + * 12.2. Let candidate prefix be the result of retrieving a preferred + * prefix string prefix from map given namespace ns. The above may return + * null if no namespace key ns exists in map. + */ + var prefix = node.prefix; + /** + * We don't need to run "retrieving a preferred prefix string" algorithm if + * the element has no prefix and its namespace matches to the default + * namespace. + * See: https://github.com/web-platform-tests/wpt/pull/16703 + */ + var candidatePrefix = null; + if (prefix !== null || ns !== localDefaultNamespace) { + candidatePrefix = map.get(prefix, ns); + } + /** + * 12.3. If the value of prefix matches "xmlns", then run the following + * steps: + */ + if (prefix === "xmlns") { + /** + * 12.3.1. If the require well-formed flag is set, then throw an error. + * An Element with prefix "xmlns" will not legally round-trip in a + * conforming XML parser. + */ + if (requireWellFormed) { + throw new Error("An element cannot have the 'xmlns' prefix (well-formed required)."); + } + /** + * 12.3.2. Let candidate prefix be the value of prefix. + */ + candidatePrefix = prefix; + } + /** + * 12.4.Found a suitable namespace prefix: if candidate prefix is not + * null (a namespace prefix is defined which maps to ns), then: + */ + if (candidatePrefix !== null) { + /** + * The following may serialize a different prefix than the Element's + * existing prefix if it already had one. However, the retrieving a + * preferred prefix string algorithm already tried to match the + * existing prefix if possible. + * + * 12.4.1. Append to qualified name the concatenation of candidate + * prefix, ":" (U+003A COLON), and node's localName. There exists on + * this node or the node's ancestry a namespace prefix definition that + * defines the node's namespace. + * 12.4.2. If the local default namespace is not null (there exists a + * locally-defined default namespace declaration attribute) and its + * value is not the XML namespace, then let inherited ns get the value + * of local default namespace unless the local default namespace is the + * empty string in which case let it get null (the context namespace + * is changed to the declared default, rather than this node's own + * namespace). + * + * _Note:_ Any default namespace definitions or namespace prefixes that + * define the XML namespace are omitted when serializing this node's + * attributes. + */ + qualifiedName = candidatePrefix + ':' + node.localName; + if (localDefaultNamespace !== null && localDefaultNamespace !== infra_1.namespace.XML) { + inheritedNS = localDefaultNamespace || null; + } + /** + * 12.4.3. Append the value of qualified name to markup. + */ + this.beginElement(qualifiedName); + this.openTagBegin(qualifiedName); + /** 12.5. Otherwise, if prefix is not null, then: */ + } + else if (prefix !== null) { + /** + * _Note:_ By this step, there is no namespace or prefix mapping + * declaration in this node (or any parent node visited by this + * algorithm) that defines prefix otherwise the step labelled Found + * a suitable namespace prefix would have been followed. The sub-steps + * that follow will create a new namespace prefix declaration for prefix + * and ensure that prefix does not conflict with an existing namespace + * prefix declaration of the same localName in node's attribute list. + * + * 12.5.1. If the local prefixes map contains a key matching prefix, + * then let prefix be the result of generating a prefix providing as + * input map, ns, and prefix index. + */ + if (prefix in localPrefixesMap) { + prefix = this._generatePrefix(ns, map, prefixIndex); + } + /** + * 12.5.2. Add prefix to map given namespace ns. + * 12.5.3. Append to qualified name the concatenation of prefix, ":" + * (U+003A COLON), and node's localName. + * 12.5.4. Append the value of qualified name to markup. + */ + map.set(prefix, ns); + qualifiedName += prefix + ':' + node.localName; + this.beginElement(qualifiedName); + this.openTagBegin(qualifiedName); + /** + * 12.5.5. Append the following to markup, in the order listed: + * + * _Note:_ The following serializes a namespace prefix declaration for + * prefix which was just added to the map. + * + * 12.5.5.1. " " (U+0020 SPACE); + * 12.5.5.2. The string "xmlns:"; + * 12.5.5.3. The value of prefix; + * 12.5.5.4. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); + * 12.5.5.5. The result of serializing an attribute value given ns and + * the require well-formed flag as input; + * 12.5.5.6. """ (U+0022 QUOTATION MARK). + */ + attributes.push([null, 'xmlns', prefix, + this._serializeAttributeValue(ns, requireWellFormed, noDoubleEncoding)]); + /** + * 12.5.5.7. If local default namespace is not null (there exists a + * locally-defined default namespace declaration attribute), then + * let inherited ns get the value of local default namespace unless the + * local default namespace is the empty string in which case let it get + * null. + */ + if (localDefaultNamespace !== null) { + inheritedNS = localDefaultNamespace || null; + } + /** + * 12.6. Otherwise, if local default namespace is null, or local + * default namespace is not null and its value is not equal to ns, then: + */ + } + else if (localDefaultNamespace === null || + (localDefaultNamespace !== null && localDefaultNamespace !== ns)) { + /** + * _Note:_ At this point, the namespace for this node still needs to be + * serialized, but there's no prefix (or candidate prefix) available; the + * following uses the default namespace declaration to define the + * namespace--optionally replacing an existing default declaration + * if present. + * + * 12.6.1. Set the ignore namespace definition attribute flag to true. + * 12.6.2. Append to qualified name the value of node's localName. + * 12.6.3. Let the value of inherited ns be ns. + * + * _Note:_ The new default namespace will be used in the serialization + * to define this node's namespace and act as the context namespace for + * its children. + */ + ignoreNamespaceDefinitionAttribute = true; + qualifiedName += node.localName; + inheritedNS = ns; + /** + * 12.6.4. Append the value of qualified name to markup. + */ + this.beginElement(qualifiedName); + this.openTagBegin(qualifiedName); + /** + * 12.6.5. Append the following to markup, in the order listed: + * + * _Note:_ The following serializes the new (or replacement) default + * namespace definition. + * + * 12.6.5.1. " " (U+0020 SPACE); + * 12.6.5.2. The string "xmlns"; + * 12.6.5.3. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); + * 12.6.5.4. The result of serializing an attribute value given ns + * and the require well-formed flag as input; + * 12.6.5.5. """ (U+0022 QUOTATION MARK). + */ + attributes.push([null, null, 'xmlns', + this._serializeAttributeValue(ns, requireWellFormed, noDoubleEncoding)]); + /** + * 12.7. Otherwise, the node has a local default namespace that matches + * ns. Append to qualified name the value of node's localName, let the + * value of inherited ns be ns, and append the value of qualified name + * to markup. + */ + } + else { + qualifiedName += node.localName; + inheritedNS = ns; + this.beginElement(qualifiedName); + this.openTagBegin(qualifiedName); + } } - var rootOfA = tree_rootNode(a); - if (!util_1.Guard.isShadowRoot(rootOfA)) { - return a; + /** + * 13. Append to markup the result of the XML serialization of node's + * attributes given map, prefix index, local prefixes map, ignore namespace + * definition attribute flag, and require well-formed flag. + */ + attributes.push.apply(attributes, __spread(this._serializeAttributesNS(node, map, prefixIndex, localPrefixesMap, ignoreNamespaceDefinitionAttribute, requireWellFormed, noDoubleEncoding))); + this.attributes(attributes); + /** + * 14. If ns is the HTML namespace, and the node's list of children is + * empty, and the node's localName matches any one of the following void + * elements: "area", "base", "basefont", "bgsound", "br", "col", "embed", + * "frame", "hr", "img", "input", "keygen", "link", "menuitem", "meta", + * "param", "source", "track", "wbr"; then append the following to markup, + * in the order listed: + * 14.1. " " (U+0020 SPACE); + * 14.2. "/" (U+002F SOLIDUS). + * and set the skip end tag flag to true. + * 15. If ns is not the HTML namespace, and the node's list of children is + * empty, then append "/" (U+002F SOLIDUS) to markup and set the skip end + * tag flag to true. + * 16. Append ">" (U+003E GREATER-THAN SIGN) to markup. + */ + var isHTML = (ns === infra_1.namespace.HTML); + if (isHTML && node.childNodes.length === 0 && + BaseWriter._VoidElementNames.has(node.localName)) { + this.openTagEnd(qualifiedName, true, true); + this.endElement(qualifiedName); + skipEndTag = true; } - if (b && util_1.Guard.isNode(b) && tree_isAncestorOf(rootOfA, b, true, true)) { - return a; + else if (!isHTML && node.childNodes.length === 0) { + this.openTagEnd(qualifiedName, true, false); + this.endElement(qualifiedName); + skipEndTag = true; } - a = rootOfA.host; - } -} -exports.tree_retarget = tree_retarget; -//# sourceMappingURL=TreeAlgorithm.js.map - -/***/ }), -/* 874 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const SemVer = __webpack_require__(65) -const compare = (a, b, loose) => - new SemVer(a, loose).compare(new SemVer(b, loose)) - -module.exports = compare - - -/***/ }), -/* 875 */, -/* 876 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -// just pre-load all the stuff that index.js lazily exports -const internalRe = __webpack_require__(976) -module.exports = { - re: internalRe.re, - src: internalRe.src, - tokens: internalRe.t, - SEMVER_SPEC_VERSION: __webpack_require__(181).SEMVER_SPEC_VERSION, - SemVer: __webpack_require__(65), - compareIdentifiers: __webpack_require__(954).compareIdentifiers, - rcompareIdentifiers: __webpack_require__(954).rcompareIdentifiers, - parse: __webpack_require__(830), - valid: __webpack_require__(714), - clean: __webpack_require__(503), - inc: __webpack_require__(928), - diff: __webpack_require__(822), - major: __webpack_require__(744), - minor: __webpack_require__(803), - patch: __webpack_require__(489), - prerelease: __webpack_require__(650), - compare: __webpack_require__(874), - rcompare: __webpack_require__(630), - compareLoose: __webpack_require__(283), - compareBuild: __webpack_require__(16), - sort: __webpack_require__(120), - rsort: __webpack_require__(593), - gt: __webpack_require__(486), - lt: __webpack_require__(586), - eq: __webpack_require__(298), - neq: __webpack_require__(85), - gte: __webpack_require__(167), - lte: __webpack_require__(898), - cmp: __webpack_require__(752), - coerce: __webpack_require__(499), - Comparator: __webpack_require__(536), - Range: __webpack_require__(124), - satisfies: __webpack_require__(310), - toComparators: __webpack_require__(219), - maxSatisfying: __webpack_require__(14), - minSatisfying: __webpack_require__(890), - minVersion: __webpack_require__(960), - validRange: __webpack_require__(480), - outside: __webpack_require__(881), - gtr: __webpack_require__(531), - ltr: __webpack_require__(323), - intersects: __webpack_require__(259), - simplifyRange: __webpack_require__(877), - subset: __webpack_require__(999), -} - - -/***/ }), -/* 877 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -// given a set of versions and a range, create a "simplified" range -// that includes the same versions that the original range does -// If the original range is shorter than the simplified one, return that. -const satisfies = __webpack_require__(310) -const compare = __webpack_require__(874) -module.exports = (versions, range, options) => { - const set = [] - let min = null - let prev = null - const v = versions.sort((a, b) => compare(a, b, options)) - for (const version of v) { - const included = satisfies(version, range, options) - if (included) { - prev = version - if (!min) - min = version - } else { - if (prev) { - set.push([min, prev]) - } - prev = null - min = null - } - } - if (min) - set.push([min, null]) - - const ranges = [] - for (const [min, max] of set) { - if (min === max) - ranges.push(min) - else if (!max && min === v[0]) - ranges.push('*') - else if (!max) - ranges.push(`>=${min}`) - else if (min === v[0]) - ranges.push(`<=${max}`) - else - ranges.push(`${min} - ${max}`) - } - const simplified = ranges.join(' || ') - const original = typeof range.raw === 'string' ? range.raw : String(range) - return simplified.length < original.length ? simplified : range -} - - -/***/ }), -/* 878 */, -/* 879 */, -/* 880 */, -/* 881 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const SemVer = __webpack_require__(65) -const Comparator = __webpack_require__(536) -const {ANY} = Comparator -const Range = __webpack_require__(124) -const satisfies = __webpack_require__(310) -const gt = __webpack_require__(486) -const lt = __webpack_require__(586) -const lte = __webpack_require__(898) -const gte = __webpack_require__(167) - -const outside = (version, range, hilo, options) => { - version = new SemVer(version, options) - range = new Range(range, options) - - let gtfn, ltefn, ltfn, comp, ecomp - switch (hilo) { - case '>': - gtfn = gt - ltefn = lte - ltfn = lt - comp = '>' - ecomp = '>=' - break - case '<': - gtfn = lt - ltefn = gte - ltfn = gt - comp = '<' - ecomp = '<=' - break - default: - throw new TypeError('Must provide a hilo val of "<" or ">"') - } - - // If it satisfies the range it is not outside - if (satisfies(version, range, options)) { - return false - } - - // From now on, variable terms are as if we're in "gtr" mode. - // but note that everything is flipped for the "ltr" function. - - for (let i = 0; i < range.set.length; ++i) { - const comparators = range.set[i] - - let high = null - let low = null - - comparators.forEach((comparator) => { - if (comparator.semver === ANY) { - comparator = new Comparator('>=0.0.0') - } - high = high || comparator - low = low || comparator - if (gtfn(comparator.semver, high.semver, options)) { - high = comparator - } else if (ltfn(comparator.semver, low.semver, options)) { - low = comparator - } - }) - - // If the edge version comparator has a operator then our version - // isn't outside it - if (high.operator === comp || high.operator === ecomp) { - return false - } - - // If the lowest version comparator has an operator and our version - // is less than it then it isn't higher than the range - if ((!low.operator || low.operator === comp) && - ltefn(version, low.semver)) { - return false - } else if (low.operator === ecomp && ltfn(version, low.semver)) { - return false - } - } - return true -} - -module.exports = outside - - -/***/ }), -/* 882 */, -/* 883 */, -/* 884 */ -/***/ (function(__unusedmodule, exports, __webpack_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.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.deleteKey = exports.importKey = exports.PRIVATE_KEY_FILE = void 0; -const fs = __importStar(__webpack_require__(747)); -const path = __importStar(__webpack_require__(622)); -const io = __importStar(__webpack_require__(1)); -const exec = __importStar(__webpack_require__(986)); -const util = __importStar(__webpack_require__(322)); -exports.PRIVATE_KEY_FILE = path.join(util.getTempDir(), 'private-key.asc'); -const PRIVATE_KEY_FINGERPRINT_REGEX = /\w{40}/; -function importKey(privateKey) { - return __awaiter(this, void 0, void 0, function* () { - fs.writeFileSync(exports.PRIVATE_KEY_FILE, privateKey, { - encoding: 'utf-8', - flag: 'w' - }); - let output = ''; - const options = { - silent: true, - listeners: { - stdout: (data) => { - output += data.toString(); + else { + this.openTagEnd(qualifiedName, false, false); + } + /** + * 17. If the value of skip end tag is true, then return the value of markup + * and skip the remaining steps. The node is a leaf-node. + */ + if (skipEndTag) + return; + /** + * 18. If ns is the HTML namespace, and the node's localName matches the + * string "template", then this is a template element. Append to markup the + * result of XML serializing a DocumentFragment node given the template + * element's template contents (a DocumentFragment), providing inherited + * ns, map, prefix index, and the require well-formed flag. + * + * _Note:_ This allows template content to round-trip, given the rules for + * parsing XHTML documents. + * + * 19. Otherwise, append to markup the result of running the XML + * serialization algorithm on each of node's children, in tree order, + * providing inherited ns, map, prefix index, and the require well-formed + * flag. + */ + if (isHTML && node.localName === "template") { + // TODO: serialize template contents + } + else { + try { + for (var _b = __values(node.childNodes), _c = _b.next(); !_c.done; _c = _b.next()) { + var childNode = _c.value; + this.level++; + this._serializeNodeNS(childNode, inheritedNS, map, prefixIndex, requireWellFormed, noDoubleEncoding); + this.level--; } } - }; - yield exec.exec('gpg', ['--batch', '--import-options', 'import-show', '--import', exports.PRIVATE_KEY_FILE], options); - yield io.rmRF(exports.PRIVATE_KEY_FILE); - const match = output.match(PRIVATE_KEY_FINGERPRINT_REGEX); - return match && match[0]; - }); -} -exports.importKey = importKey; -function deleteKey(keyFingerprint) { - return __awaiter(this, void 0, void 0, function* () { - yield exec.exec('gpg', ['--batch', '--yes', '--delete-secret-keys', keyFingerprint], { - silent: true - }); - yield exec.exec('gpg', ['--batch', '--yes', '--delete-keys', keyFingerprint], { silent: true }); - }); -} -exports.deleteKey = deleteKey; - - -/***/ }), -/* 885 */, -/* 886 */, -/* 887 */, -/* 888 */, -/* 889 */ -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_2) throw e_2.error; } + } + } + /** + * 20. Append the following to markup, in the order listed: + * 20.1. "" (U+003E GREATER-THAN SIGN). + * 21. Return the value of markup. + */ + this.closeTag(qualifiedName); + this.endElement(qualifiedName); + }; + /** + * Produces an XML serialization of an element node. + * + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance + */ + BaseWriter.prototype._serializeElement = function (node, requireWellFormed, noDoubleEncoding) { + var e_3, _a; + /** + * From: https://w3c.github.io/DOM-Parsing/#xml-serializing-an-element-node + * + * 1. If the require well-formed flag is set (its value is true), and this + * node's localName attribute contains the character ":" (U+003A COLON) or + * does not match the XML Name production, then throw an exception; the + * serialization of this node would not be a well-formed element. + */ + if (requireWellFormed && (node.localName.indexOf(":") !== -1 || + !algorithm_1.xml_isName(node.localName))) { + throw new Error("Node local name contains invalid characters (well-formed required)."); + } + /** + * 2. Let markup be the string "<" (U+003C LESS-THAN SIGN). + * 3. Let qualified name be an empty string. + * 4. Let skip end tag be a boolean flag with value false. + * 5. Let ignore namespace definition attribute be a boolean flag with value + * false. + * 6. Given prefix map, copy a namespace prefix map and let map be the + * result. + * 7. Let local prefixes map be an empty map. The map has unique Node prefix + * strings as its keys, with corresponding namespaceURI Node values as the + * map's key values (in this map, the null namespace is represented by the + * empty string). + * + * _Note:_ This map is local to each element. It is used to ensure there + * are no conflicting prefixes should a new namespace prefix attribute need + * to be generated. It is also used to enable skipping of duplicate prefix + * definitions when writing an element's attributes: the map allows the + * algorithm to distinguish between a prefix in the namespace prefix map + * that might be locally-defined (to the current Element) and one that is + * not. + * 8. Let local default namespace be the result of recording the namespace + * information for node given map and local prefixes map. + * + * _Note:_ The above step will update map with any found namespace prefix + * definitions, add the found prefix definitions to the local prefixes map + * and return a local default namespace value defined by a default namespace + * attribute if one exists. Otherwise it returns null. + * 9. Let inherited ns be a copy of namespace. + * 10. Let ns be the value of node's namespaceURI attribute. + */ + var skipEndTag = false; + /** 11. If inherited ns is equal to ns, then: */ + /** + * 11.1. If local default namespace is not null, then set ignore + * namespace definition attribute to true. + */ + /** + * 11.2. If ns is the XML namespace, then append to qualified name the + * concatenation of the string "xml:" and the value of node's localName. + * 11.3. Otherwise, append to qualified name the value of node's + * localName. The node's prefix if it exists, is dropped. + */ + var qualifiedName = node.localName; + /** 11.4. Append the value of qualified name to markup. */ + this.beginElement(qualifiedName); + this.openTagBegin(qualifiedName); + /** + * 13. Append to markup the result of the XML serialization of node's + * attributes given map, prefix index, local prefixes map, ignore namespace + * definition attribute flag, and require well-formed flag. + */ + var attributes = this._serializeAttributes(node, requireWellFormed, noDoubleEncoding); + this.attributes(attributes); + /** + * 14. If ns is the HTML namespace, and the node's list of children is + * empty, and the node's localName matches any one of the following void + * elements: "area", "base", "basefont", "bgsound", "br", "col", "embed", + * "frame", "hr", "img", "input", "keygen", "link", "menuitem", "meta", + * "param", "source", "track", "wbr"; then append the following to markup, + * in the order listed: + * 14.1. " " (U+0020 SPACE); + * 14.2. "/" (U+002F SOLIDUS). + * and set the skip end tag flag to true. + * 15. If ns is not the HTML namespace, and the node's list of children is + * empty, then append "/" (U+002F SOLIDUS) to markup and set the skip end + * tag flag to true. + * 16. Append ">" (U+003E GREATER-THAN SIGN) to markup. + */ + if (!node.hasChildNodes()) { + this.openTagEnd(qualifiedName, true, false); + this.endElement(qualifiedName); + skipEndTag = true; + } + else { + this.openTagEnd(qualifiedName, false, false); + } + /** + * 17. If the value of skip end tag is true, then return the value of markup + * and skip the remaining steps. The node is a leaf-node. + */ + if (skipEndTag) + return; + try { + /** + * 18. If ns is the HTML namespace, and the node's localName matches the + * string "template", then this is a template element. Append to markup the + * result of XML serializing a DocumentFragment node given the template + * element's template contents (a DocumentFragment), providing inherited + * ns, map, prefix index, and the require well-formed flag. + * + * _Note:_ This allows template content to round-trip, given the rules for + * parsing XHTML documents. + * + * 19. Otherwise, append to markup the result of running the XML + * serialization algorithm on each of node's children, in tree order, + * providing inherited ns, map, prefix index, and the require well-formed + * flag. + */ + for (var _b = __values(node._children), _c = _b.next(); !_c.done; _c = _b.next()) { + var childNode = _c.value; + this.level++; + this._serializeNode(childNode, requireWellFormed, noDoubleEncoding); + this.level--; } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_3) throw e_3.error; } + } + /** + * 20. Append the following to markup, in the order listed: + * 20.1. "" (U+003E GREATER-THAN SIGN). + * 21. Return the value of markup. + */ + this.closeTag(qualifiedName); + this.endElement(qualifiedName); }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Represents a cache of objects with a size limit. - */ -var ObjectCache = /** @class */ (function () { - /** - * Initializes a new instance of `ObjectCache`. - * - * @param limit - maximum number of items to keep in the cache. When the limit - * is exceeded the first item is removed from the cache. - */ - function ObjectCache(limit) { - if (limit === void 0) { limit = 1000; } - this._items = new Map(); - this._limit = limit; - } /** - * Gets an item from the cache. + * Produces an XML serialization of a document node. * - * @param key - object key + * @param node - node to serialize + * @param namespace - context namespace + * @param prefixMap - namespace prefix map + * @param prefixIndex - generated namespace prefix index + * @param requireWellFormed - whether to check conformance */ - ObjectCache.prototype.get = function (key) { - return this._items.get(key); + BaseWriter.prototype._serializeDocumentNS = function (node, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding) { + var e_4, _a; + /** + * If the require well-formed flag is set (its value is true), and this node + * has no documentElement (the documentElement attribute's value is null), + * then throw an exception; the serialization of this node would not be a + * well-formed document. + */ + if (requireWellFormed && node.documentElement === null) { + throw new Error("Missing document element (well-formed required)."); + } + try { + /** + * Otherwise, run the following steps: + * 1. Let serialized document be an empty string. + * 2. For each child child of node, in tree order, run the XML + * serialization algorithm on the child passing along the provided + * arguments, and append the result to serialized document. + * + * _Note:_ This will serialize any number of ProcessingInstruction and + * Comment nodes both before and after the Document's documentElement node, + * including at most one DocumentType node. (Text nodes are not allowed as + * children of the Document.) + * + * 3. Return the value of serialized document. + */ + for (var _b = __values(node.childNodes), _c = _b.next(); !_c.done; _c = _b.next()) { + var childNode = _c.value; + this._serializeNodeNS(childNode, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding); + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_4) throw e_4.error; } + } }; /** - * Adds a new item to the cache. + * Produces an XML serialization of a document node. * - * @param key - object key - * @param value - object value + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance */ - ObjectCache.prototype.set = function (key, value) { - this._items.set(key, value); - if (this._items.size > this._limit) { - var it_1 = this._items.keys().next(); - /* istanbul ignore else */ - if (!it_1.done) { - this._items.delete(it_1.value); + BaseWriter.prototype._serializeDocument = function (node, requireWellFormed, noDoubleEncoding) { + var e_5, _a; + /** + * If the require well-formed flag is set (its value is true), and this node + * has no documentElement (the documentElement attribute's value is null), + * then throw an exception; the serialization of this node would not be a + * well-formed document. + */ + if (requireWellFormed && node.documentElement === null) { + throw new Error("Missing document element (well-formed required)."); + } + try { + /** + * Otherwise, run the following steps: + * 1. Let serialized document be an empty string. + * 2. For each child child of node, in tree order, run the XML + * serialization algorithm on the child passing along the provided + * arguments, and append the result to serialized document. + * + * _Note:_ This will serialize any number of ProcessingInstruction and + * Comment nodes both before and after the Document's documentElement node, + * including at most one DocumentType node. (Text nodes are not allowed as + * children of the Document.) + * + * 3. Return the value of serialized document. + */ + for (var _b = __values(node._children), _c = _b.next(); !_c.done; _c = _b.next()) { + var childNode = _c.value; + this._serializeNode(childNode, requireWellFormed, noDoubleEncoding); + } + } + catch (e_5_1) { e_5 = { error: e_5_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } + finally { if (e_5) throw e_5.error; } } }; /** - * Removes an item from the cache. + * Produces an XML serialization of a comment node. * - * @param item - an item + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance */ - ObjectCache.prototype.delete = function (key) { - return this._items.delete(key); + BaseWriter.prototype._serializeComment = function (node, requireWellFormed, noDoubleEncoding) { + /** + * If the require well-formed flag is set (its value is true), and node's + * data contains characters that are not matched by the XML Char production + * or contains "--" (two adjacent U+002D HYPHEN-MINUS characters) or that + * ends with a "-" (U+002D HYPHEN-MINUS) character, then throw an exception; + * the serialization of this node's data would not be well-formed. + */ + if (requireWellFormed && (!algorithm_1.xml_isLegalChar(node.data) || + node.data.indexOf("--") !== -1 || node.data.endsWith("-"))) { + throw new Error("Comment data contains invalid characters (well-formed required)."); + } + /** + * Otherwise, return the concatenation of "". + */ + this.comment(node.data); }; /** - * Determines if an item is in the cache. + * Produces an XML serialization of a text node. * - * @param item - an item - */ - ObjectCache.prototype.has = function (key) { - return this._items.has(key); - }; - /** - * Removes all items from the cache. + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance + * @param level - current depth of the XML tree */ - ObjectCache.prototype.clear = function () { - this._items.clear(); - }; - Object.defineProperty(ObjectCache.prototype, "size", { + BaseWriter.prototype._serializeText = function (node, requireWellFormed, noDoubleEncoding) { /** - * Gets the number of items in the cache. + * 1. If the require well-formed flag is set (its value is true), and + * node's data contains characters that are not matched by the XML Char + * production, then throw an exception; the serialization of this node's + * data would not be well-formed. */ - get: function () { return this._items.size; }, - enumerable: true, - configurable: true - }); - /** - * Applies the given callback function to all elements of the cache. - */ - ObjectCache.prototype.forEach = function (callback, thisArg) { - this._items.forEach(function (v, k) { return callback.call(thisArg, k, v); }); - }; - /** - * Iterates through the items in the set. - */ - ObjectCache.prototype.keys = function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [5 /*yield**/, __values(this._items.keys())]; - case 1: - _a.sent(); - return [2 /*return*/]; + if (requireWellFormed && !algorithm_1.xml_isLegalChar(node.data)) { + throw new Error("Text data contains invalid characters (well-formed required)."); + } + /** + * 2. Let markup be the value of node's data. + * 3. Replace any occurrences of "&" in markup by "&". + * 4. Replace any occurrences of "<" in markup by "<". + * 5. Replace any occurrences of ">" in markup by ">". + * 6. Return the value of markup. + */ + var markup = ""; + if (noDoubleEncoding) { + markup = node.data.replace(/(?!&(lt|gt|amp|apos|quot);)&/g, '&') + .replace(//g, '>'); + } + else { + for (var i = 0; i < node.data.length; i++) { + var c = node.data[i]; + if (c === "&") + markup += "&"; + else if (c === "<") + markup += "<"; + else if (c === ">") + markup += ">"; + else + markup += c; } - }); + } + this.text(markup); }; /** - * Iterates through the items in the set. + * Produces an XML serialization of a document fragment node. + * + * @param node - node to serialize + * @param namespace - context namespace + * @param prefixMap - namespace prefix map + * @param prefixIndex - generated namespace prefix index + * @param requireWellFormed - whether to check conformance */ - ObjectCache.prototype.values = function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [5 /*yield**/, __values(this._items.values())]; - case 1: - _a.sent(); - return [2 /*return*/]; + BaseWriter.prototype._serializeDocumentFragmentNS = function (node, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding) { + var e_6, _a; + try { + /** + * 1. Let markup the empty string. + * 2. For each child child of node, in tree order, run the XML serialization + * algorithm on the child given namespace, prefix map, a reference to prefix + * index, and flag require well-formed. Concatenate the result to markup. + * 3. Return the value of markup. + */ + for (var _b = __values(node.childNodes), _c = _b.next(); !_c.done; _c = _b.next()) { + var childNode = _c.value; + this._serializeNodeNS(childNode, namespace, prefixMap, prefixIndex, requireWellFormed, noDoubleEncoding); } - }); + } + catch (e_6_1) { e_6 = { error: e_6_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_6) throw e_6.error; } + } }; /** - * Iterates through the items in the set. + * Produces an XML serialization of a document fragment node. + * + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance */ - ObjectCache.prototype.entries = function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [5 /*yield**/, __values(this._items.entries())]; - case 1: - _a.sent(); - return [2 /*return*/]; + BaseWriter.prototype._serializeDocumentFragment = function (node, requireWellFormed, noDoubleEncoding) { + var e_7, _a; + try { + /** + * 1. Let markup the empty string. + * 2. For each child child of node, in tree order, run the XML serialization + * algorithm on the child given namespace, prefix map, a reference to prefix + * index, and flag require well-formed. Concatenate the result to markup. + * 3. Return the value of markup. + */ + for (var _b = __values(node._children), _c = _b.next(); !_c.done; _c = _b.next()) { + var childNode = _c.value; + this._serializeNode(childNode, requireWellFormed, noDoubleEncoding); } - }); + } + catch (e_7_1) { e_7 = { error: e_7_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_7) throw e_7.error; } + } }; /** - * Iterates through the items in the set. + * Produces an XML serialization of a document type node. + * + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance */ - ObjectCache.prototype[Symbol.iterator] = function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [5 /*yield**/, __values(this._items)]; - case 1: - _a.sent(); - return [2 /*return*/]; - } - }); - }; - Object.defineProperty(ObjectCache.prototype, Symbol.toStringTag, { + BaseWriter.prototype._serializeDocumentType = function (node, requireWellFormed, noDoubleEncoding) { /** - * Returns the string tag of the cache. + * 1. If the require well-formed flag is true and the node's publicId + * attribute contains characters that are not matched by the XML PubidChar + * production, then throw an exception; the serialization of this node + * would not be a well-formed document type declaration. */ - get: function () { - return "ObjectCache"; - }, - enumerable: true, - configurable: true - }); - return ObjectCache; -}()); -exports.ObjectCache = ObjectCache; -//# sourceMappingURL=ObjectCache.js.map - -/***/ }), -/* 890 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const SemVer = __webpack_require__(65) -const Range = __webpack_require__(124) -const minSatisfying = (versions, range, options) => { - let min = null - let minSV = null - let rangeObj = null - try { - rangeObj = new Range(range, options) - } catch (er) { - return null - } - versions.forEach((v) => { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!min || minSV.compare(v) === 1) { - // compare(min, v, true) - min = v - minSV = new SemVer(min, options) - } - } - }) - return min -} -module.exports = minSatisfying - - -/***/ }), -/* 891 */, -/* 892 */, -/* 893 */, -/* 894 */, -/* 895 */, -/* 896 */, -/* 897 */, -/* 898 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const compare = __webpack_require__(874) -const lte = (a, b, loose) => compare(a, b, loose) <= 0 -module.exports = lte - - -/***/ }), -/* 899 */, -/* 900 */, -/* 901 */, -/* 902 */, -/* 903 */, -/* 904 */, -/* 905 */, -/* 906 */, -/* 907 */, -/* 908 */, -/* 909 */, -/* 910 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; -// JS-YAML's default schema for `load` function. -// It is not described in the YAML specification. -// -// This schema is based on JS-YAML's default safe schema and includes -// JavaScript-specific types: !!js/undefined, !!js/regexp and !!js/function. -// -// Also this schema is used as default base schema at `Schema.create` function. - - - - - -var Schema = __webpack_require__(733); - - -module.exports = Schema.DEFAULT = new Schema({ - include: [ - __webpack_require__(723) - ], - explicit: [ - __webpack_require__(386), - __webpack_require__(629), - __webpack_require__(352) - ] -}); - - -/***/ }), -/* 911 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); + if (requireWellFormed && !algorithm_1.xml_isPubidChar(node.publicId)) { + throw new Error("DocType public identifier does not match PubidChar construct (well-formed required)."); } - finally { if (e) throw e.error; } - } - return ar; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(172); -/** - * Represents a lexer for XML content in a string. - */ -var XMLStringLexer = /** @class */ (function () { + /** + * 2. If the require well-formed flag is true and the node's systemId + * attribute contains characters that are not matched by the XML Char + * production or that contains both a """ (U+0022 QUOTATION MARK) and a + * "'" (U+0027 APOSTROPHE), then throw an exception; the serialization + * of this node would not be a well-formed document type declaration. + */ + if (requireWellFormed && + (!algorithm_1.xml_isLegalChar(node.systemId) || + (node.systemId.indexOf('"') !== -1 && node.systemId.indexOf("'") !== -1))) { + throw new Error("DocType system identifier contains invalid characters (well-formed required)."); + } + /** + * 3. Let markup be an empty string. + * 4. Append the string "" (U+003E GREATER-THAN SIGN) to markup. + * 11. Return the value of markup. + */ + this.docType(node.name, node.publicId, node.systemId); + }; /** - * Initializes a new instance of `XMLStringLexer`. + * Produces an XML serialization of a processing instruction node. * - * @param str - the string to tokenize and lex - * @param options - lexer options + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance */ - function XMLStringLexer(str, options) { - this._options = { - skipWhitespaceOnlyText: false - }; - this.err = { line: -1, col: -1, index: -1, str: "" }; - this._str = str; - this._index = 0; - this._length = str.length; - if (options) { - this._options.skipWhitespaceOnlyText = options.skipWhitespaceOnlyText || false; + BaseWriter.prototype._serializeProcessingInstruction = function (node, requireWellFormed, noDoubleEncoding) { + /** + * 1. If the require well-formed flag is set (its value is true), and node's + * target contains a ":" (U+003A COLON) character or is an ASCII + * case-insensitive match for the string "xml", then throw an exception; + * the serialization of this node's target would not be well-formed. + */ + if (requireWellFormed && (node.target.indexOf(":") !== -1 || (/^xml$/i).test(node.target))) { + throw new Error("Processing instruction target contains invalid characters (well-formed required)."); + } + /** + * 2. If the require well-formed flag is set (its value is true), and node's + * data contains characters that are not matched by the XML Char production + * or contains the string "?>" (U+003F QUESTION MARK, + * U+003E GREATER-THAN SIGN), then throw an exception; the serialization of + * this node's data would not be well-formed. + */ + if (requireWellFormed && (!algorithm_1.xml_isLegalChar(node.data) || + node.data.indexOf("?>") !== -1)) { + throw new Error("Processing instruction data contains invalid characters (well-formed required)."); } - } + /** + * 3. Let markup be the concatenation of the following, in the order listed: + * 3.1. "" (U+003F QUESTION MARK, U+003E GREATER-THAN SIGN). + * 4. Return the value of markup. + */ + this.instruction(node.target, node.data); + }; /** - * Returns the next token. + * Produces an XML serialization of a CDATA node. + * + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance */ - XMLStringLexer.prototype.nextToken = function () { - if (this.eof()) { - return { type: interfaces_1.TokenType.EOF }; - } - var token = (this.skipIfStartsWith('<') ? this.openBracket() : this.text()); - if (this._options.skipWhitespaceOnlyText) { - if (token.type === interfaces_1.TokenType.Text && - XMLStringLexer.isWhiteSpaceToken(token)) { - token = this.nextToken(); - } + BaseWriter.prototype._serializeCData = function (node, requireWellFormed, noDoubleEncoding) { + if (requireWellFormed && (node.data.indexOf("]]>") !== -1)) { + throw new Error("CDATA contains invalid characters (well-formed required)."); } - return token; + this.cdata(node.data); }; /** - * Branches from an opening bracket (`<`). - */ - XMLStringLexer.prototype.openBracket = function () { - if (this.skipIfStartsWith('?')) { - if (this.skipIfStartsWith('xml')) { - if (XMLStringLexer.isSpace(this._str[this._index])) { - return this.declaration(); + * Produces an XML serialization of the attributes of an element node. + * + * @param node - node to serialize + * @param map - namespace prefix map + * @param prefixIndex - generated namespace prefix index + * @param localPrefixesMap - local prefixes map + * @param ignoreNamespaceDefinitionAttribute - whether to ignore namespace + * attributes + * @param requireWellFormed - whether to check conformance + */ + BaseWriter.prototype._serializeAttributesNS = function (node, map, prefixIndex, localPrefixesMap, ignoreNamespaceDefinitionAttribute, requireWellFormed, noDoubleEncoding) { + var e_8, _a; + /** + * 1. Let result be the empty string. + * 2. Let localname set be a new empty namespace localname set. This + * localname set will contain tuples of unique attribute namespaceURI and + * localName pairs, and is populated as each attr is processed. This set is + * used to [optionally] enforce the well-formed constraint that an element + * cannot have two attributes with the same namespaceURI and localName. + * This can occur when two otherwise identical attributes on the same + * element differ only by their prefix values. + */ + var result = []; + var localNameSet = requireWellFormed ? new LocalNameSet_1.LocalNameSet() : undefined; + try { + /** + * 3. Loop: For each attribute attr in element's attributes, in the order + * they are specified in the element's attribute list: + */ + for (var _b = __values(node.attributes), _c = _b.next(); !_c.done; _c = _b.next()) { + var attr = _c.value; + // Optimize common case + if (!requireWellFormed && !ignoreNamespaceDefinitionAttribute && attr.namespaceURI === null) { + result.push([null, null, attr.localName, + this._serializeAttributeValue(attr.value, requireWellFormed, noDoubleEncoding)]); + continue; } - else { - // a processing instruction starting with xml. e.g. - this.seek(-3); - return this.pi(); + /** + * 3.1. If the require well-formed flag is set (its value is true), and the + * localname set contains a tuple whose values match those of a new tuple + * consisting of attr's namespaceURI attribute and localName attribute, + * then throw an exception; the serialization of this attr would fail to + * produce a well-formed element serialization. + */ + if (requireWellFormed && localNameSet && localNameSet.has(attr.namespaceURI, attr.localName)) { + throw new Error("Element contains duplicate attributes (well-formed required)."); } - } - else { - return this.pi(); + /** + * 3.2. Create a new tuple consisting of attr's namespaceURI attribute and + * localName attribute, and add it to the localname set. + * 3.3. Let attribute namespace be the value of attr's namespaceURI value. + * 3.4. Let candidate prefix be null. + */ + if (requireWellFormed && localNameSet) + localNameSet.set(attr.namespaceURI, attr.localName); + var attributeNamespace = attr.namespaceURI; + var candidatePrefix = null; + /** 3.5. If attribute namespace is not null, then run these sub-steps: */ + if (attributeNamespace !== null) { + /** + * 3.5.1. Let candidate prefix be the result of retrieving a preferred + * prefix string from map given namespace attribute namespace with + * preferred prefix being attr's prefix value. + */ + candidatePrefix = map.get(attr.prefix, attributeNamespace); + /** + * 3.5.2. If the value of attribute namespace is the XMLNS namespace, + * then run these steps: + */ + if (attributeNamespace === infra_1.namespace.XMLNS) { + /** + * 3.5.2.1. If any of the following are true, then stop running these + * steps and goto Loop to visit the next attribute: + * - the attr's value is the XML namespace; + * _Note:_ The XML namespace cannot be redeclared and survive + * round-tripping (unless it defines the prefix "xml"). To avoid this + * problem, this algorithm always prefixes elements in the XML + * namespace with "xml" and drops any related definitions as seen + * in the above condition. + * - the attr's prefix is null and the ignore namespace definition + * attribute flag is true (the Element's default namespace attribute + * should be skipped); + * - the attr's prefix is not null and either + * * the attr's localName is not a key contained in the local + * prefixes map, or + * * the attr's localName is present in the local prefixes map but + * the value of the key does not match attr's value + * and furthermore that the attr's localName (as the prefix to find) + * is found in the namespace prefix map given the namespace consisting + * of the attr's value (the current namespace prefix definition was + * exactly defined previously--on an ancestor element not the current + * element whose attributes are being processed). + */ + if (attr.value === infra_1.namespace.XML || + (attr.prefix === null && ignoreNamespaceDefinitionAttribute) || + (attr.prefix !== null && (!(attr.localName in localPrefixesMap) || + localPrefixesMap[attr.localName] !== attr.value) && + map.has(attr.localName, attr.value))) + continue; + /** + * 3.5.2.2. If the require well-formed flag is set (its value is true), + * and the value of attr's value attribute matches the XMLNS + * namespace, then throw an exception; the serialization of this + * attribute would produce invalid XML because the XMLNS namespace + * is reserved and cannot be applied as an element's namespace via + * XML parsing. + * + * _Note:_ DOM APIs do allow creation of elements in the XMLNS + * namespace but with strict qualifications. + */ + if (requireWellFormed && attr.value === infra_1.namespace.XMLNS) { + throw new Error("XMLNS namespace is reserved (well-formed required)."); + } + /** + * 3.5.2.3. If the require well-formed flag is set (its value is true), + * and the value of attr's value attribute is the empty string, then + * throw an exception; namespace prefix declarations cannot be used + * to undeclare a namespace (use a default namespace declaration + * instead). + */ + if (requireWellFormed && attr.value === '') { + throw new Error("Namespace prefix declarations cannot be used to undeclare a namespace (well-formed required)."); + } + /** + * 3.5.2.4. the attr's prefix matches the string "xmlns", then let + * candidate prefix be the string "xmlns". + */ + if (attr.prefix === 'xmlns') + candidatePrefix = 'xmlns'; + /** + * 3.5.3. Otherwise, the attribute namespace is not the XMLNS namespace. + * Run these steps: + * + * _Note:_ The (candidatePrefix === null) check is not in the spec. + * We deviate from the spec here. Otherwise a prefix is generated for + * all attributes with namespaces. + */ + } + else if (candidatePrefix === null) { + if (attr.prefix !== null && + (!map.hasPrefix(attr.prefix) || + map.has(attr.prefix, attributeNamespace))) { + /** + * Check if we can use the attribute's own prefix. + * We deviate from the spec here. + * TODO: This is not an efficient way of searching for prefixes. + * Follow developments to the spec. + */ + candidatePrefix = attr.prefix; + } + else { + /** + * 3.5.3.1. Let candidate prefix be the result of generating a prefix + * providing map, attribute namespace, and prefix index as input. + */ + candidatePrefix = this._generatePrefix(attributeNamespace, map, prefixIndex); + } + /** + * 3.5.3.2. Append the following to result, in the order listed: + * 3.5.3.2.1. " " (U+0020 SPACE); + * 3.5.3.2.2. The string "xmlns:"; + * 3.5.3.2.3. The value of candidate prefix; + * 3.5.3.2.4. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); + * 3.5.3.2.5. The result of serializing an attribute value given + * attribute namespace and the require well-formed flag as input; + * 3.5.3.2.6. """ (U+0022 QUOTATION MARK). + */ + result.push([null, "xmlns", candidatePrefix, + this._serializeAttributeValue(attributeNamespace, requireWellFormed, noDoubleEncoding)]); + } + } + /** + * 3.6. Append a " " (U+0020 SPACE) to result. + * 3.7. If candidate prefix is not null, then append to result the + * concatenation of candidate prefix with ":" (U+003A COLON). + */ + var attrName = ''; + if (candidatePrefix !== null) { + attrName = candidatePrefix; + } + /** + * 3.8. If the require well-formed flag is set (its value is true), and + * this attr's localName attribute contains the character + * ":" (U+003A COLON) or does not match the XML Name production or + * equals "xmlns" and attribute namespace is null, then throw an + * exception; the serialization of this attr would not be a + * well-formed attribute. + */ + if (requireWellFormed && (attr.localName.indexOf(":") !== -1 || + !algorithm_1.xml_isName(attr.localName) || + (attr.localName === "xmlns" && attributeNamespace === null))) { + throw new Error("Attribute local name contains invalid characters (well-formed required)."); + } + /** + * 3.9. Append the following strings to result, in the order listed: + * 3.9.1. The value of attr's localName; + * 3.9.2. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); + * 3.9.3. The result of serializing an attribute value given attr's value + * attribute and the require well-formed flag as input; + * 3.9.4. """ (U+0022 QUOTATION MARK). + */ + result.push([attributeNamespace, candidatePrefix, attr.localName, + this._serializeAttributeValue(attr.value, requireWellFormed, noDoubleEncoding)]); } } - else if (this.skipIfStartsWith('!')) { - if (this.skipIfStartsWith('--')) { - return this.comment(); - } - else if (this.skipIfStartsWith('[CDATA[')) { - return this.cdata(); - } - else if (this.skipIfStartsWith('DOCTYPE')) { - return this.doctype(); - } - else { - this.throwError("Invalid '!' in opening tag."); + catch (e_8_1) { e_8 = { error: e_8_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } + finally { if (e_8) throw e_8.error; } } - else if (this.skipIfStartsWith('/')) { - return this.closeTag(); - } - else { - return this.openTag(); - } + /** + * 4. Return the value of result. + */ + return result; }; /** - * Produces an XML declaration token. - */ - XMLStringLexer.prototype.declaration = function () { - var version = ''; - var encoding = ''; - var standalone = ''; - while (!this.eof()) { - this.skipSpace(); - if (this.skipIfStartsWith('?>')) { - return { type: interfaces_1.TokenType.Declaration, version: version, encoding: encoding, standalone: standalone }; + * Produces an XML serialization of the attributes of an element node. + * + * @param node - node to serialize + * @param requireWellFormed - whether to check conformance + */ + BaseWriter.prototype._serializeAttributes = function (node, requireWellFormed, noDoubleEncoding) { + var e_9, _a; + /** + * 1. Let result be the empty string. + * 2. Let localname set be a new empty namespace localname set. This + * localname set will contain tuples of unique attribute namespaceURI and + * localName pairs, and is populated as each attr is processed. This set is + * used to [optionally] enforce the well-formed constraint that an element + * cannot have two attributes with the same namespaceURI and localName. + * This can occur when two otherwise identical attributes on the same + * element differ only by their prefix values. + */ + var result = []; + var localNameSet = requireWellFormed ? {} : undefined; + try { + /** + * 3. Loop: For each attribute attr in element's attributes, in the order + * they are specified in the element's attribute list: + */ + for (var _b = __values(node.attributes), _c = _b.next(); !_c.done; _c = _b.next()) { + var attr = _c.value; + // Optimize common case + if (!requireWellFormed) { + result.push([null, null, attr.localName, + this._serializeAttributeValue(attr.value, requireWellFormed, noDoubleEncoding)]); + continue; + } + /** + * 3.1. If the require well-formed flag is set (its value is true), and the + * localname set contains a tuple whose values match those of a new tuple + * consisting of attr's namespaceURI attribute and localName attribute, + * then throw an exception; the serialization of this attr would fail to + * produce a well-formed element serialization. + */ + if (requireWellFormed && localNameSet && (attr.localName in localNameSet)) { + throw new Error("Element contains duplicate attributes (well-formed required)."); + } + /** + * 3.2. Create a new tuple consisting of attr's namespaceURI attribute and + * localName attribute, and add it to the localname set. + * 3.3. Let attribute namespace be the value of attr's namespaceURI value. + * 3.4. Let candidate prefix be null. + */ + /* istanbul ignore else */ + if (requireWellFormed && localNameSet) + localNameSet[attr.localName] = true; + /** 3.5. If attribute namespace is not null, then run these sub-steps: */ + /** + * 3.6. Append a " " (U+0020 SPACE) to result. + * 3.7. If candidate prefix is not null, then append to result the + * concatenation of candidate prefix with ":" (U+003A COLON). + */ + /** + * 3.8. If the require well-formed flag is set (its value is true), and + * this attr's localName attribute contains the character + * ":" (U+003A COLON) or does not match the XML Name production or + * equals "xmlns" and attribute namespace is null, then throw an + * exception; the serialization of this attr would not be a + * well-formed attribute. + */ + if (requireWellFormed && (attr.localName.indexOf(":") !== -1 || + !algorithm_1.xml_isName(attr.localName))) { + throw new Error("Attribute local name contains invalid characters (well-formed required)."); + } + /** + * 3.9. Append the following strings to result, in the order listed: + * 3.9.1. The value of attr's localName; + * 3.9.2. "="" (U+003D EQUALS SIGN, U+0022 QUOTATION MARK); + * 3.9.3. The result of serializing an attribute value given attr's value + * attribute and the require well-formed flag as input; + * 3.9.4. """ (U+0022 QUOTATION MARK). + */ + result.push([null, null, attr.localName, + this._serializeAttributeValue(attr.value, requireWellFormed, noDoubleEncoding)]); } - else { - // attribute name - var _a = __read(this.attribute(), 2), attName = _a[0], attValue = _a[1]; - if (attName === 'version') - version = attValue; - else if (attName === 'encoding') - encoding = attValue; - else if (attName === 'standalone') - standalone = attValue; - else - this.throwError('Invalid attribute name: ' + attName); + } + catch (e_9_1) { e_9 = { error: e_9_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); } + finally { if (e_9) throw e_9.error; } } - this.throwError('Missing declaration end symbol `?>`'); + /** + * 4. Return the value of result. + */ + return result; }; /** - * Produces a doc type token. - */ - XMLStringLexer.prototype.doctype = function () { - var pubId = ''; - var sysId = ''; - // name - this.skipSpace(); - var name = this.takeUntil2('[', '>', true); - this.skipSpace(); - if (this.skipIfStartsWith('PUBLIC')) { - pubId = this.quotedString(); - sysId = this.quotedString(); - } - else if (this.skipIfStartsWith('SYSTEM')) { - sysId = this.quotedString(); - } - // skip internal subset - this.skipSpace(); - if (this.skipIfStartsWith('[')) { - // skip internal subset nodes - this.skipUntil(']'); - if (!this.skipIfStartsWith(']')) { - this.throwError('Missing end bracket of DTD internal subset'); + * Records namespace information for the given element and returns the + * default namespace attribute value. + * + * @param node - element node to process + * @param map - namespace prefix map + * @param localPrefixesMap - local prefixes map + */ + BaseWriter.prototype._recordNamespaceInformation = function (node, map, localPrefixesMap) { + var e_10, _a; + /** + * 1. Let default namespace attr value be null. + */ + var defaultNamespaceAttrValue = null; + try { + /** + * 2. Main: For each attribute attr in element's attributes, in the order + * they are specified in the element's attribute list: + */ + for (var _b = __values(node.attributes), _c = _b.next(); !_c.done; _c = _b.next()) { + var attr = _c.value; + /** + * _Note:_ The following conditional steps find namespace prefixes. Only + * attributes in the XMLNS namespace are considered (e.g., attributes made + * to look like namespace declarations via + * setAttribute("xmlns:pretend-prefix", "pretend-namespace") are not + * included). + */ + /** 2.1. Let attribute namespace be the value of attr's namespaceURI value. */ + var attributeNamespace = attr.namespaceURI; + /** 2.2. Let attribute prefix be the value of attr's prefix. */ + var attributePrefix = attr.prefix; + /** 2.3. If the attribute namespace is the XMLNS namespace, then: */ + if (attributeNamespace === infra_1.namespace.XMLNS) { + /** + * 2.3.1. If attribute prefix is null, then attr is a default namespace + * declaration. Set the default namespace attr value to attr's value and + * stop running these steps, returning to Main to visit the next + * attribute. + */ + if (attributePrefix === null) { + defaultNamespaceAttrValue = attr.value; + continue; + /** + * 2.3.2. Otherwise, the attribute prefix is not null and attr is a + * namespace prefix definition. Run the following steps: + */ + } + else { + /** 2.3.2.1. Let prefix definition be the value of attr's localName. */ + var prefixDefinition = attr.localName; + /** 2.3.2.2. Let namespace definition be the value of attr's value. */ + var namespaceDefinition = attr.value; + /** + * 2.3.2.3. If namespace definition is the XML namespace, then stop + * running these steps, and return to Main to visit the next + * attribute. + * + * _Note:_ XML namespace definitions in prefixes are completely + * ignored (in order to avoid unnecessary work when there might be + * prefix conflicts). XML namespaced elements are always handled + * uniformly by prefixing (and overriding if necessary) the element's + * localname with the reserved "xml" prefix. + */ + if (namespaceDefinition === infra_1.namespace.XML) { + continue; + } + /** + * 2.3.2.4. If namespace definition is the empty string (the + * declarative form of having no namespace), then let namespace + * definition be null instead. + */ + if (namespaceDefinition === '') { + namespaceDefinition = null; + } + /** + * 2.3.2.5. If prefix definition is found in map given the namespace + * namespace definition, then stop running these steps, and return to + * Main to visit the next attribute. + * + * _Note:_ This step avoids adding duplicate prefix definitions for + * the same namespace in the map. This has the side-effect of avoiding + * later serialization of duplicate namespace prefix declarations in + * any descendant nodes. + */ + if (map.has(prefixDefinition, namespaceDefinition)) { + continue; + } + /** + * 2.3.2.6. Add the prefix prefix definition to map given namespace + * namespace definition. + */ + map.set(prefixDefinition, namespaceDefinition); + /** + * 2.3.2.7. Add the value of prefix definition as a new key to the + * local prefixes map, with the namespace definition as the key's + * value replacing the value of null with the empty string if + * applicable. + */ + localPrefixesMap[prefixDefinition] = namespaceDefinition || ''; + } + } } } - this.skipSpace(); - if (!this.skipIfStartsWith('>')) { - this.throwError('Missing doctype end symbol `>`'); + catch (e_10_1) { e_10 = { error: e_10_1 }; } + finally { + try { + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } + finally { if (e_10) throw e_10.error; } } - return { type: interfaces_1.TokenType.DocType, name: name, pubId: pubId, sysId: sysId }; + /** + * 3. Return the value of default namespace attr value. + * + * _Note:_ The empty string is a legitimate return value and is not + * converted to null. + */ + return defaultNamespaceAttrValue; }; /** - * Produces a processing instruction token. + * Generates a new prefix for the given namespace. + * + * @param newNamespace - a namespace to generate prefix for + * @param prefixMap - namespace prefix map + * @param prefixIndex - generated namespace prefix index + */ + BaseWriter.prototype._generatePrefix = function (newNamespace, prefixMap, prefixIndex) { + /** + * 1. Let generated prefix be the concatenation of the string "ns" and the + * current numerical value of prefix index. + * 2. Let the value of prefix index be incremented by one. + * 3. Add to map the generated prefix given the new namespace namespace. + * 4. Return the value of generated prefix. + */ + var generatedPrefix = "ns" + prefixIndex.value.toString(); + prefixIndex.value++; + prefixMap.set(generatedPrefix, newNamespace); + return generatedPrefix; + }; + /** + * Produces an XML serialization of an attribute value. + * + * @param value - attribute value + * @param requireWellFormed - whether to check conformance */ - XMLStringLexer.prototype.pi = function () { - var target = this.takeUntilStartsWith('?>', true); - if (this.eof()) { - this.throwError('Missing processing instruction end symbol `?>`'); + BaseWriter.prototype._serializeAttributeValue = function (value, requireWellFormed, noDoubleEncoding) { + /** + * From: https://w3c.github.io/DOM-Parsing/#dfn-serializing-an-attribute-value + * + * 1. If the require well-formed flag is set (its value is true), and + * attribute value contains characters that are not matched by the XML Char + * production, then throw an exception; the serialization of this attribute + * value would fail to produce a well-formed element serialization. + */ + if (requireWellFormed && value !== null && !algorithm_1.xml_isLegalChar(value)) { + throw new Error("Invalid characters in attribute value."); } - this.skipSpace(); - if (this.skipIfStartsWith('?>')) { - return { type: interfaces_1.TokenType.PI, target: target, data: '' }; + /** + * 2. If attribute value is null, then return the empty string. + */ + if (value === null) + return ""; + /** + * 3. Otherwise, attribute value is a string. Return the value of attribute + * value, first replacing any occurrences of the following: + * - "&" with "&" + * - """ with """ + * - "<" with "<" + * - ">" with ">" + * NOTE + * This matches behavior present in browsers, and goes above and beyond the + * grammar requirement in the XML specification's AttValue production by + * also replacing ">" characters. + */ + if (noDoubleEncoding) { + return value.replace(/(?!&(lt|gt|amp|apos|quot);)&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"'); } - var data = this.takeUntilStartsWith('?>'); - if (this.eof()) { - this.throwError('Missing processing instruction end symbol `?>`'); + else { + var result = ""; + for (var i = 0; i < value.length; i++) { + var c = value[i]; + if (c === "\"") + result += """; + else if (c === "&") + result += "&"; + else if (c === "<") + result += "<"; + else if (c === ">") + result += ">"; + else + result += c; + } + return result; } - this.seek(2); - return { type: interfaces_1.TokenType.PI, target: target, data: data }; }; - /** - * Produces a text token. - * - */ - XMLStringLexer.prototype.text = function () { - var data = this.takeUntil('<'); - return { type: interfaces_1.TokenType.Text, data: data }; + BaseWriter._VoidElementNames = new Set(['area', 'base', 'basefont', + 'bgsound', 'br', 'col', 'embed', 'frame', 'hr', 'img', 'input', 'keygen', + 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr']); + return BaseWriter; +}()); +exports.BaseWriter = BaseWriter; +//# sourceMappingURL=BaseWriter.js.map + +/***/ }), + +/***/ 7525: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); }; - /** - * Produces a comment token. - * - */ - XMLStringLexer.prototype.comment = function () { - var data = this.takeUntilStartsWith('-->'); - if (this.eof()) { - this.throwError('Missing comment end symbol `-->`'); - } - this.seek(3); - return { type: interfaces_1.TokenType.Comment, data: data }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var BaseCBWriter_1 = __nccwpck_require__(708); +/** + * Serializes XML nodes. + */ +var JSONCBWriter = /** @class */ (function (_super) { + __extends(JSONCBWriter, _super); /** - * Produces a CDATA token. + * Initializes a new instance of `JSONCBWriter`. * + * @param builderOptions - XML builder options */ - XMLStringLexer.prototype.cdata = function () { - var data = this.takeUntilStartsWith(']]>'); - if (this.eof()) { - this.throwError('Missing CDATA end symbol `]>`'); + function JSONCBWriter(builderOptions) { + var _this = _super.call(this, builderOptions) || this; + _this._hasChildren = []; + _this._additionalLevel = 0; + return _this; + } + /** @inheritdoc */ + JSONCBWriter.prototype.frontMatter = function () { + return ""; + }; + /** @inheritdoc */ + JSONCBWriter.prototype.declaration = function (version, encoding, standalone) { + return ""; + }; + /** @inheritdoc */ + JSONCBWriter.prototype.docType = function (name, publicId, systemId) { + return ""; + }; + /** @inheritdoc */ + JSONCBWriter.prototype.comment = function (data) { + // { "!": "hello" } + return this._comma() + this._beginLine() + "{" + this._sep() + + this._key(this._builderOptions.convert.comment) + this._sep() + + this._val(data) + this._sep() + "}"; + }; + /** @inheritdoc */ + JSONCBWriter.prototype.text = function (data) { + // { "#": "hello" } + return this._comma() + this._beginLine() + "{" + this._sep() + + this._key(this._builderOptions.convert.text) + this._sep() + + this._val(data) + this._sep() + "}"; + }; + /** @inheritdoc */ + JSONCBWriter.prototype.instruction = function (target, data) { + // { "?": "target hello" } + return this._comma() + this._beginLine() + "{" + this._sep() + + this._key(this._builderOptions.convert.ins) + this._sep() + + this._val(data ? target + " " + data : target) + this._sep() + "}"; + }; + /** @inheritdoc */ + JSONCBWriter.prototype.cdata = function (data) { + // { "$": "hello" } + return this._comma() + this._beginLine() + "{" + this._sep() + + this._key(this._builderOptions.convert.cdata) + this._sep() + + this._val(data) + this._sep() + "}"; + }; + /** @inheritdoc */ + JSONCBWriter.prototype.attribute = function (name, value) { + // { "@name": "val" } + return this._comma() + this._beginLine(1) + "{" + this._sep() + + this._key(this._builderOptions.convert.att + name) + this._sep() + + this._val(value) + this._sep() + "}"; + }; + /** @inheritdoc */ + JSONCBWriter.prototype.openTagBegin = function (name) { + // { "node": { "#": [ + var str = this._comma() + this._beginLine() + "{" + this._sep() + this._key(name) + this._sep() + "{"; + this._additionalLevel++; + this.hasData = true; + str += this._beginLine() + this._key(this._builderOptions.convert.text) + this._sep() + "["; + this._hasChildren.push(false); + return str; + }; + /** @inheritdoc */ + JSONCBWriter.prototype.openTagEnd = function (name, selfClosing, voidElement) { + if (selfClosing) { + var str = this._sep() + "]"; + this._additionalLevel--; + str += this._beginLine() + "}" + this._sep() + "}"; + return str; } - this.seek(3); - return { type: interfaces_1.TokenType.CDATA, data: data }; + else { + return ""; + } + }; + /** @inheritdoc */ + JSONCBWriter.prototype.closeTag = function (name) { + // ] } } + var str = this._beginLine() + "]"; + this._additionalLevel--; + str += this._beginLine() + "}" + this._sep() + "}"; + return str; }; + /** @inheritdoc */ + JSONCBWriter.prototype.beginElement = function (name) { }; + /** @inheritdoc */ + JSONCBWriter.prototype.endElement = function (name) { this._hasChildren.pop(); }; /** - * Produces an element token. + * Produces characters to be prepended to a line of string in pretty-print + * mode. */ - XMLStringLexer.prototype.openTag = function () { - // element name - this.skipSpace(); - var name = this.takeUntil2('>', '/', true); - this.skipSpace(); - if (this.skipIfStartsWith('>')) { - return { type: interfaces_1.TokenType.Element, name: name, attributes: [], selfClosing: false }; - } - else if (this.skipIfStartsWith('/>')) { - return { type: interfaces_1.TokenType.Element, name: name, attributes: [], selfClosing: true }; + JSONCBWriter.prototype._beginLine = function (additionalOffset) { + if (additionalOffset === void 0) { additionalOffset = 0; } + if (this._writerOptions.prettyPrint) { + return (this.hasData ? this._writerOptions.newline : "") + + this._indent(this._writerOptions.offset + this.level + additionalOffset); } - // attributes - var attributes = []; - while (!this.eof()) { - // end tag - this.skipSpace(); - if (this.skipIfStartsWith('>')) { - return { type: interfaces_1.TokenType.Element, name: name, attributes: attributes, selfClosing: false }; - } - else if (this.skipIfStartsWith('/>')) { - return { type: interfaces_1.TokenType.Element, name: name, attributes: attributes, selfClosing: true }; - } - var attr = this.attribute(); - attributes.push(attr); + else { + return ""; } - this.throwError('Missing opening element tag end symbol `>`'); }; /** - * Produces a closing tag token. + * Produces an indentation string. * + * @param level - depth of the tree */ - XMLStringLexer.prototype.closeTag = function () { - this.skipSpace(); - var name = this.takeUntil('>', true); - this.skipSpace(); - if (!this.skipIfStartsWith('>')) { - this.throwError('Missing closing element tag end symbol `>`'); + JSONCBWriter.prototype._indent = function (level) { + if (level + this._additionalLevel <= 0) { + return ""; + } + else { + return this._writerOptions.indent.repeat(level + this._additionalLevel); } - return { type: interfaces_1.TokenType.ClosingTag, name: name }; }; /** - * Reads an attribute name, value pair + * Produces a comma before a child node if it has previous siblings. */ - XMLStringLexer.prototype.attribute = function () { - // attribute name - this.skipSpace(); - var name = this.takeUntil('=', true); - this.skipSpace(); - if (!this.skipIfStartsWith('=')) { - this.throwError('Missing equals sign before attribute value'); + JSONCBWriter.prototype._comma = function () { + var str = (this._hasChildren[this._hasChildren.length - 1] ? "," : ""); + if (this._hasChildren.length > 0) { + this._hasChildren[this._hasChildren.length - 1] = true; } - // attribute value - var value = this.quotedString(); - return [name, value]; + return str; }; /** - * Reads a string between double or single quotes. + * Produces a separator string. */ - XMLStringLexer.prototype.quotedString = function () { - this.skipSpace(); - var startQuote = this.take(1); - if (!XMLStringLexer.isQuote(startQuote)) { - this.throwError('Missing start quote character before quoted value'); - } - var value = this.takeUntil(startQuote); - if (!this.skipIfStartsWith(startQuote)) { - this.throwError('Missing end quote character after quoted value'); - } - return value; + JSONCBWriter.prototype._sep = function () { + return (this._writerOptions.prettyPrint ? " " : ""); }; /** - * Determines if the current index is at or past the end of input string. + * Produces a JSON key string delimited with double quotes. */ - XMLStringLexer.prototype.eof = function () { return this._index >= this._length; }; + JSONCBWriter.prototype._key = function (key) { + return "\"" + key + "\":"; + }; /** - * Skips the length of the given string if the string from current position - * starts with the given string. - * - * @param str - the string to match + * Produces a JSON value string delimited with double quotes. */ - XMLStringLexer.prototype.skipIfStartsWith = function (str) { - var strLength = str.length; - if (strLength === 1) { - if (this._str[this._index] === str) { - this._index++; - return true; - } - else { - return false; - } - } - for (var i = 0; i < strLength; i++) { - if (this._str[this._index + i] !== str[i]) - return false; + JSONCBWriter.prototype._val = function (val) { + return JSON.stringify(val); + }; + return JSONCBWriter; +}(BaseCBWriter_1.BaseCBWriter)); +exports.JSONCBWriter = JSONCBWriter; +//# sourceMappingURL=JSONCBWriter.js.map + +/***/ }), + +/***/ 7510: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; } - this._index += strLength; - return true; }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var ObjectWriter_1 = __nccwpck_require__(243); +var util_1 = __nccwpck_require__(6195); +var BaseWriter_1 = __nccwpck_require__(7644); +/** + * Serializes XML nodes into a JSON string. + */ +var JSONWriter = /** @class */ (function (_super) { + __extends(JSONWriter, _super); /** - * Seeks a number of character codes. + * Initializes a new instance of `JSONWriter`. * - * @param count - number of characters to skip - */ - XMLStringLexer.prototype.seek = function (count) { - this._index += count; - if (this._index < 0) - this._index = 0; - if (this._index > this._length) - this._index = this._length; - }; - /** - * Skips space characters. + * @param builderOptions - XML builder options + * @param writerOptions - serialization options */ - XMLStringLexer.prototype.skipSpace = function () { - while (!this.eof() && (XMLStringLexer.isSpace(this._str[this._index]))) { - this._index++; - } - }; + function JSONWriter(builderOptions, writerOptions) { + var _this = _super.call(this, builderOptions) || this; + // provide default options + _this._writerOptions = util_1.applyDefaults(writerOptions, { + wellFormed: false, + noDoubleEncoding: false, + prettyPrint: false, + indent: ' ', + newline: '\n', + offset: 0, + group: false, + verbose: false + }); + return _this; + } /** - * Takes a given number of characters. + * Produces an XML serialization of the given node. * - * @param count - character count + * @param node - node to serialize + * @param writerOptions - serialization options */ - XMLStringLexer.prototype.take = function (count) { - if (count === 1) { - return this._str[this._index++]; - } - var startIndex = this._index; - this.seek(count); - return this._str.slice(startIndex, this._index); + JSONWriter.prototype.serialize = function (node) { + // convert to object + var objectWriterOptions = util_1.applyDefaults(this._writerOptions, { + format: "object", + wellFormed: false, + noDoubleEncoding: false, + }); + var objectWriter = new ObjectWriter_1.ObjectWriter(this._builderOptions, objectWriterOptions); + var val = objectWriter.serialize(node); + // recursively convert object into JSON string + return this._beginLine(this._writerOptions, 0) + this._convertObject(val, this._writerOptions); }; /** - * Takes characters until the next character matches `char`. + * Produces an XML serialization of the given object. * - * @param char - a character to match - * @param space - whether a space character stops iteration + * @param obj - object to serialize + * @param options - serialization options + * @param level - depth of the XML tree */ - XMLStringLexer.prototype.takeUntil = function (char, space) { - if (space === void 0) { space = false; } - var startIndex = this._index; - while (this._index < this._length) { - var c = this._str[this._index]; - if (c !== char && (!space || !XMLStringLexer.isSpace(c))) { - this._index++; + JSONWriter.prototype._convertObject = function (obj, options, level) { + var e_1, _a; + var _this = this; + if (level === void 0) { level = 0; } + var markup = ''; + var isLeaf = this._isLeafNode(obj); + if (util_1.isArray(obj)) { + markup += '['; + var len = obj.length; + var i = 0; + try { + for (var obj_1 = __values(obj), obj_1_1 = obj_1.next(); !obj_1_1.done; obj_1_1 = obj_1.next()) { + var val = obj_1_1.value; + markup += this._endLine(options, level + 1) + + this._beginLine(options, level + 1) + + this._convertObject(val, options, level + 1); + if (i < len - 1) { + markup += ','; + } + i++; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (obj_1_1 && !obj_1_1.done && (_a = obj_1.return)) _a.call(obj_1); + } + finally { if (e_1) throw e_1.error; } + } + markup += this._endLine(options, level) + this._beginLine(options, level); + markup += ']'; + } + else if (util_1.isObject(obj)) { + markup += '{'; + var len_1 = util_1.objectLength(obj); + var i_1 = 0; + util_1.forEachObject(obj, function (key, val) { + if (isLeaf && options.prettyPrint) { + markup += ' '; + } + else { + markup += _this._endLine(options, level + 1) + _this._beginLine(options, level + 1); + } + markup += _this._key(key); + if (options.prettyPrint) { + markup += ' '; + } + markup += _this._convertObject(val, options, level + 1); + if (i_1 < len_1 - 1) { + markup += ','; + } + i_1++; + }, this); + if (isLeaf && options.prettyPrint) { + markup += ' '; } else { - break; + markup += this._endLine(options, level) + this._beginLine(options, level); } + markup += '}'; } - return this._str.slice(startIndex, this._index); - }; - /** - * Takes characters until the next character matches `char1` or `char1`. - * - * @param char1 - a character to match - * @param char2 - a character to match - * @param space - whether a space character stops iteration - */ - XMLStringLexer.prototype.takeUntil2 = function (char1, char2, space) { - if (space === void 0) { space = false; } - var startIndex = this._index; - while (this._index < this._length) { - var c = this._str[this._index]; - if (c !== char1 && c !== char2 && (!space || !XMLStringLexer.isSpace(c))) { - this._index++; - } - else { - break; - } + else { + markup += this._val(obj); } - return this._str.slice(startIndex, this._index); + return markup; }; /** - * Takes characters until the next characters matches `str`. + * Produces characters to be prepended to a line of string in pretty-print + * mode. * - * @param str - a string to match - * @param space - whether a space character stops iteration + * @param options - serialization options + * @param level - current depth of the XML tree */ - XMLStringLexer.prototype.takeUntilStartsWith = function (str, space) { - if (space === void 0) { space = false; } - var startIndex = this._index; - var strLength = str.length; - while (this._index < this._length) { - var match = true; - for (var i = 0; i < strLength; i++) { - var c = this._str[this._index + i]; - var char = str[i]; - if (space && XMLStringLexer.isSpace(c)) { - return this._str.slice(startIndex, this._index); - } - else if (c !== char) { - this._index++; - match = false; - break; - } + JSONWriter.prototype._beginLine = function (options, level) { + if (!options.prettyPrint) { + return ''; + } + else { + var indentLevel = options.offset + level + 1; + if (indentLevel > 0) { + return new Array(indentLevel).join(options.indent); } - if (match) - return this._str.slice(startIndex, this._index); } - this._index = this._length; - return this._str.slice(startIndex); + return ''; }; /** - * Skips characters until the next character matches `char`. + * Produces characters to be appended to a line of string in pretty-print + * mode. * - * @param char - a character to match + * @param options - serialization options + * @param level - current depth of the XML tree */ - XMLStringLexer.prototype.skipUntil = function (char) { - while (this._index < this._length) { - var c = this._str[this._index]; - if (c !== char) { - this._index++; - } - else { - break; - } + JSONWriter.prototype._endLine = function (options, level) { + if (!options.prettyPrint) { + return ''; + } + else { + return options.newline; } }; /** - * Determines if the given token is entirely whitespace. - * - * @param token - the token to check + * Produces a JSON key string delimited with double quotes. */ - XMLStringLexer.isWhiteSpaceToken = function (token) { - var str = token.data; - for (var i = 0; i < str.length; i++) { - var c = str[i]; - if (c !== ' ' && c !== '\n' && c !== '\r' && c !== '\t' && c !== '\f') - return false; - } - return true; + JSONWriter.prototype._key = function (key) { + return "\"" + key + "\":"; }; /** - * Determines if the given character is whitespace. - * - * @param char - the character to check + * Produces a JSON value string delimited with double quotes. */ - XMLStringLexer.isSpace = function (char) { - return char === ' ' || char === '\n' || char === '\r' || char === '\t'; + JSONWriter.prototype._val = function (val) { + return JSON.stringify(val); }; /** - * Determines if the given character is a quote character. + * Determines if an object is a leaf node. * - * @param char - the character to check + * @param obj */ - XMLStringLexer.isQuote = function (char) { - return (char === '"' || char === '\''); + JSONWriter.prototype._isLeafNode = function (obj) { + return this._descendantCount(obj) <= 1; }; /** - * Throws a parser error and records the line and column numbers in the parsed - * string. + * Counts the number of descendants of the given object. * - * @param msg - error message + * @param obj + * @param count */ - XMLStringLexer.prototype.throwError = function (msg) { - var regexp = /\r\n|\r|\n/g; - var match = null; - var line = 0; - var firstNewLineIndex = 0; - var lastNewlineIndex = this._str.length; - while ((match = regexp.exec(this._str)) !== null) { - if (match === null) - break; - line++; - if (match.index < this._index) - firstNewLineIndex = regexp.lastIndex; - if (match.index > this._index) { - lastNewlineIndex = match.index; - break; - } + JSONWriter.prototype._descendantCount = function (obj, count) { + var _this = this; + if (count === void 0) { count = 0; } + if (util_1.isArray(obj)) { + util_1.forEachArray(obj, function (val) { return count += _this._descendantCount(val, count); }, this); } - this.err = { - line: line, - col: this._index - firstNewLineIndex, - index: this._index, - str: this._str.substring(firstNewLineIndex, lastNewlineIndex) - }; - throw new Error(msg + "\nIndex: " + this.err.index + - "\nLn: " + this.err.line + ", Col: " + this.err.col + - "\nInput: " + this.err.str); - }; - /** - * Returns an iterator for the lexer. - */ - XMLStringLexer.prototype[Symbol.iterator] = function () { - this._index = 0; - return { - next: function () { - var token = this.nextToken(); - if (token.type === interfaces_1.TokenType.EOF) { - return { done: true, value: null }; - } - else { - return { done: false, value: token }; - } - }.bind(this) - }; + else if (util_1.isObject(obj)) { + util_1.forEachObject(obj, function (key, val) { return count += _this._descendantCount(val, count); }, this); + } + else { + count++; + } + return count; }; - return XMLStringLexer; -}()); -exports.XMLStringLexer = XMLStringLexer; -//# sourceMappingURL=XMLStringLexer.js.map - -/***/ }), -/* 912 */, -/* 913 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - -/*eslint-disable no-bitwise*/ - -var NodeBuffer; - -try { - // A trick for browserified version, to not include `Buffer` shim - var _require = require; - NodeBuffer = _require('buffer').Buffer; -} catch (__) {} - -var Type = __webpack_require__(945); - - -// [ 64, 65, 66 ] -> [ padding, CR, LF ] -var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; - - -function resolveYamlBinary(data) { - if (data === null) return false; - - var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP; - - // Convert one by one. - for (idx = 0; idx < max; idx++) { - code = map.indexOf(data.charAt(idx)); - - // Skip CR/LF - if (code > 64) continue; - - // Fail on illegal characters - if (code < 0) return false; - - bitlen += 6; - } - - // If there are any bits left, source was corrupted - return (bitlen % 8) === 0; -} - -function constructYamlBinary(data) { - var idx, tailbits, - input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan - max = input.length, - map = BASE64_MAP, - bits = 0, - result = []; - - // Collect by 6*4 bits (3 bytes) - - for (idx = 0; idx < max; idx++) { - if ((idx % 4 === 0) && idx) { - result.push((bits >> 16) & 0xFF); - result.push((bits >> 8) & 0xFF); - result.push(bits & 0xFF); - } - - bits = (bits << 6) | map.indexOf(input.charAt(idx)); - } - - // Dump tail - - tailbits = (max % 4) * 6; - - if (tailbits === 0) { - result.push((bits >> 16) & 0xFF); - result.push((bits >> 8) & 0xFF); - result.push(bits & 0xFF); - } else if (tailbits === 18) { - result.push((bits >> 10) & 0xFF); - result.push((bits >> 2) & 0xFF); - } else if (tailbits === 12) { - result.push((bits >> 4) & 0xFF); - } - - // Wrap into Buffer for NodeJS and leave Array for browser - if (NodeBuffer) { - // Support node 6.+ Buffer API when available - return NodeBuffer.from ? NodeBuffer.from(result) : new NodeBuffer(result); - } - - return result; -} - -function representYamlBinary(object /*, style*/) { - var result = '', bits = 0, idx, tail, - max = object.length, - map = BASE64_MAP; - - // Convert every three bytes to 4 ASCII characters. - - for (idx = 0; idx < max; idx++) { - if ((idx % 3 === 0) && idx) { - result += map[(bits >> 18) & 0x3F]; - result += map[(bits >> 12) & 0x3F]; - result += map[(bits >> 6) & 0x3F]; - result += map[bits & 0x3F]; - } - - bits = (bits << 8) + object[idx]; - } - - // Dump tail - - tail = max % 3; - - if (tail === 0) { - result += map[(bits >> 18) & 0x3F]; - result += map[(bits >> 12) & 0x3F]; - result += map[(bits >> 6) & 0x3F]; - result += map[bits & 0x3F]; - } else if (tail === 2) { - result += map[(bits >> 10) & 0x3F]; - result += map[(bits >> 4) & 0x3F]; - result += map[(bits << 2) & 0x3F]; - result += map[64]; - } else if (tail === 1) { - result += map[(bits >> 2) & 0x3F]; - result += map[(bits << 4) & 0x3F]; - result += map[64]; - result += map[64]; - } - - return result; -} - -function isBinary(object) { - return NodeBuffer && NodeBuffer.isBuffer(object); -} - -module.exports = new Type('tag:yaml.org,2002:binary', { - kind: 'scalar', - resolve: resolveYamlBinary, - construct: constructYamlBinary, - predicate: isBinary, - represent: representYamlBinary -}); - - -/***/ }), -/* 914 */, -/* 915 */, -/* 916 */ -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HTML = "http://www.w3.org/1999/xhtml"; -exports.XML = "http://www.w3.org/XML/1998/namespace"; -exports.XMLNS = "http://www.w3.org/2000/xmlns/"; -exports.MathML = "http://www.w3.org/1998/Math/MathML"; -exports.SVG = "http://www.w3.org/2000/svg"; -exports.XLink = "http://www.w3.org/1999/xlink"; -//# sourceMappingURL=Namespace.js.map + return JSONWriter; +}(BaseWriter_1.BaseWriter)); +exports.JSONWriter = JSONWriter; +//# sourceMappingURL=JSONWriter.js.map /***/ }), -/* 917 */, -/* 918 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var Cast_1 = __webpack_require__(533); -exports.Cast = Cast_1.Cast; -var Guard_1 = __webpack_require__(783); -exports.Guard = Guard_1.Guard; -var EmptySet_1 = __webpack_require__(968); -exports.EmptySet = EmptySet_1.EmptySet; -//# sourceMappingURL=index.js.map -/***/ }), -/* 919 */, -/* 920 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { +/***/ 1397: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -42210,159 +41186,99 @@ var __extends = (this && this.__extends) || (function () { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); -Object.defineProperty(exports, "__esModule", { value: true }); -var TextImpl_1 = __webpack_require__(820); -var interfaces_1 = __webpack_require__(970); -var WebIDLAlgorithm_1 = __webpack_require__(495); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var util_1 = __nccwpck_require__(6195); +var ObjectWriter_1 = __nccwpck_require__(243); +var BaseWriter_1 = __nccwpck_require__(7644); /** - * Represents a CDATA node. + * Serializes XML nodes into ES6 maps and arrays. */ -var CDATASectionImpl = /** @class */ (function (_super) { - __extends(CDATASectionImpl, _super); +var MapWriter = /** @class */ (function (_super) { + __extends(MapWriter, _super); /** - * Initializes a new instance of `CDATASection`. + * Initializes a new instance of `MapWriter`. * - * @param data - node contents + * @param builderOptions - XML builder options + * @param writerOptions - serialization options */ - function CDATASectionImpl(data) { - return _super.call(this, data) || this; + function MapWriter(builderOptions, writerOptions) { + var _this = _super.call(this, builderOptions) || this; + // provide default options + _this._writerOptions = util_1.applyDefaults(writerOptions, { + format: "map", + wellFormed: false, + noDoubleEncoding: false, + group: false, + verbose: false + }); + return _this; } /** - * Creates a new `CDATASection`. + * Produces an XML serialization of the given node. * - * @param document - owner document - * @param data - node contents + * @param node - node to serialize */ - CDATASectionImpl._create = function (document, data) { - if (data === void 0) { data = ''; } - var node = new CDATASectionImpl(data); - node._nodeDocument = document; - return node; - }; - return CDATASectionImpl; -}(TextImpl_1.TextImpl)); -exports.CDATASectionImpl = CDATASectionImpl; -/** - * Initialize prototype properties - */ -WebIDLAlgorithm_1.idl_defineConst(CDATASectionImpl.prototype, "_nodeType", interfaces_1.NodeType.CData); -//# sourceMappingURL=CDATASectionImpl.js.map - -/***/ }), -/* 921 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; - - -var Type = __webpack_require__(945); - -module.exports = new Type('tag:yaml.org,2002:seq', { - kind: 'sequence', - construct: function (data) { return data !== null ? data : []; } -}); - - -/***/ }), -/* 922 */, -/* 923 */, -/* 924 */, -/* 925 */, -/* 926 */, -/* 927 */, -/* 928 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const SemVer = __webpack_require__(65) - -const inc = (version, release, options, identifier) => { - if (typeof (options) === 'string') { - identifier = options - options = undefined - } - - try { - return new SemVer(version, options).inc(release, identifier).version - } catch (er) { - return null - } -} -module.exports = inc - - -/***/ }), -/* 929 */, -/* 930 */, -/* 931 */, -/* 932 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + MapWriter.prototype.serialize = function (node) { + // convert to object + var objectWriterOptions = util_1.applyDefaults(this._writerOptions, { + format: "object", + wellFormed: false, + noDoubleEncoding: false, + verbose: false + }); + var objectWriter = new ObjectWriter_1.ObjectWriter(this._builderOptions, objectWriterOptions); + var val = objectWriter.serialize(node); + // recursively convert object into Map + return this._convertObject(val); }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var EventTargetImpl_1 = __webpack_require__(597); -var util_1 = __webpack_require__(592); -var algorithm_1 = __webpack_require__(163); -/** - * Represents a window containing a DOM document. - */ -var WindowImpl = /** @class */ (function (_super) { - __extends(WindowImpl, _super); - /** - * Initializes a new instance of `Window`. - */ - function WindowImpl() { - var _this = _super.call(this) || this; - _this._signalSlots = new Set(); - _this._mutationObserverMicrotaskQueued = false; - _this._mutationObservers = new Set(); - _this._iteratorList = new util_1.FixedSizeSet(); - _this._associatedDocument = algorithm_1.create_document(); - return _this; - } - Object.defineProperty(WindowImpl.prototype, "document", { - /** @inheritdoc */ - get: function () { return this._associatedDocument; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(WindowImpl.prototype, "event", { - /** @inheritdoc */ - get: function () { return this._currentEvent; }, - enumerable: true, - configurable: true - }); /** - * Creates a new window with a blank document. + * Recursively converts a JS object into an ES5 map. + * + * @param obj - a JS object */ - WindowImpl._create = function () { - return new WindowImpl(); + MapWriter.prototype._convertObject = function (obj) { + if (util_1.isArray(obj)) { + for (var i = 0; i < obj.length; i++) { + obj[i] = this._convertObject(obj[i]); + } + return obj; + } + else if (util_1.isObject(obj)) { + var map = new Map(); + for (var key in obj) { + map.set(key, this._convertObject(obj[key])); + } + return map; + } + else { + return obj; + } }; - return WindowImpl; -}(EventTargetImpl_1.EventTargetImpl)); -exports.WindowImpl = WindowImpl; -//# sourceMappingURL=WindowImpl.js.map + return MapWriter; +}(BaseWriter_1.BaseWriter)); +exports.MapWriter = MapWriter; +//# sourceMappingURL=MapWriter.js.map /***/ }), -/* 933 */, -/* 934 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 243: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); var __values = (this && this.__values) || function(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); @@ -42374,156 +41290,470 @@ var __values = (this && this.__values) || function(o) { }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; -Object.defineProperty(exports, "__esModule", { value: true }); -var util_1 = __webpack_require__(918); -var algorithm_1 = __webpack_require__(163); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var util_1 = __nccwpck_require__(6195); +var interfaces_1 = __nccwpck_require__(7305); +var BaseWriter_1 = __nccwpck_require__(7644); /** - * Represents a mixin that extends parent nodes that can have children. - * This mixin is implemented by {@link Element}, {@link Document} and - * {@link DocumentFragment}. + * Serializes XML nodes into objects and arrays. */ -var ParentNodeImpl = /** @class */ (function () { - function ParentNodeImpl() { +var ObjectWriter = /** @class */ (function (_super) { + __extends(ObjectWriter, _super); + /** + * Initializes a new instance of `ObjectWriter`. + * + * @param builderOptions - XML builder options + * @param writerOptions - serialization options + */ + function ObjectWriter(builderOptions, writerOptions) { + var _this = _super.call(this, builderOptions) || this; + _this._writerOptions = util_1.applyDefaults(writerOptions, { + format: "object", + wellFormed: false, + noDoubleEncoding: false, + group: false, + verbose: false + }); + return _this; } - Object.defineProperty(ParentNodeImpl.prototype, "children", { - /** @inheritdoc */ - get: function () { - /** - * The children attribute’s getter must return an HTMLCollection collection - * rooted at context object matching only element children. - */ - return algorithm_1.create_htmlCollection(util_1.Cast.asNode(this)); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ParentNodeImpl.prototype, "firstElementChild", { - /** @inheritdoc */ - get: function () { - /** - * The firstElementChild attribute’s getter must return the first child - * that is an element, and null otherwise. - */ - var node = util_1.Cast.asNode(this)._firstChild; - while (node) { - if (util_1.Guard.isElementNode(node)) - return node; - else - node = node._nextSibling; + /** + * Produces an XML serialization of the given node. + * + * @param node - node to serialize + */ + ObjectWriter.prototype.serialize = function (node) { + this._currentList = []; + this._currentIndex = 0; + this._listRegister = [this._currentList]; + /** + * First pass, serialize nodes + * This creates a list of nodes grouped under node types while preserving + * insertion order. For example: + * [ + * root: [ + * node: [ + * { "@" : { "att1": "val1", "att2": "val2" } + * { "#": "node text" } + * { childNode: [] } + * { "#": "more text" } + * ], + * node: [ + * { "@" : { "att": "val" } + * { "#": [ "text line1", "text line2" ] } + * ] + * ] + * ] + */ + this.serializeNode(node, this._writerOptions.wellFormed, this._writerOptions.noDoubleEncoding); + /** + * Second pass, process node lists. Above example becomes: + * { + * root: { + * node: [ + * { + * "@att1": "val1", + * "@att2": "val2", + * "#1": "node text", + * childNode: {}, + * "#2": "more text" + * }, + * { + * "@att": "val", + * "#": [ "text line1", "text line2" ] + * } + * ] + * } + * } + */ + return this._process(this._currentList, this._writerOptions); + }; + ObjectWriter.prototype._process = function (items, options) { + var _a, _b, _c, _d, _e, _f, _g; + if (items.length === 0) + return {}; + // determine if there are non-unique element names + var namesSeen = {}; + var hasNonUniqueNames = false; + var textCount = 0; + var commentCount = 0; + var instructionCount = 0; + var cdataCount = 0; + for (var i = 0; i < items.length; i++) { + var item = items[i]; + var key = Object.keys(item)[0]; + switch (key) { + case "@": + continue; + case "#": + textCount++; + break; + case "!": + commentCount++; + break; + case "?": + instructionCount++; + break; + case "$": + cdataCount++; + break; + default: + if (namesSeen[key]) { + hasNonUniqueNames = true; + } + else { + namesSeen[key] = true; + } + break; } - return null; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ParentNodeImpl.prototype, "lastElementChild", { - /** @inheritdoc */ - get: function () { - /** - * The lastElementChild attribute’s getter must return the last child that - * is an element, and null otherwise. - */ - var node = util_1.Cast.asNode(this)._lastChild; - while (node) { - if (util_1.Guard.isElementNode(node)) - return node; - else - node = node._previousSibling; + } + var defAttrKey = this._getAttrKey(); + var defTextKey = this._getNodeKey(interfaces_1.NodeType.Text); + var defCommentKey = this._getNodeKey(interfaces_1.NodeType.Comment); + var defInstructionKey = this._getNodeKey(interfaces_1.NodeType.ProcessingInstruction); + var defCdataKey = this._getNodeKey(interfaces_1.NodeType.CData); + if (textCount === 1 && items.length === 1 && util_1.isString(items[0]["#"])) { + // special case of an element node with a single text node + return items[0]["#"]; + } + else if (hasNonUniqueNames) { + var obj = {}; + // process attributes first + for (var i = 0; i < items.length; i++) { + var item = items[i]; + var key = Object.keys(item)[0]; + if (key === "@") { + var attrs = item["@"]; + var attrKeys = Object.keys(attrs); + if (attrKeys.length === 1) { + obj[defAttrKey + attrKeys[0]] = attrs[attrKeys[0]]; + } + else { + obj[defAttrKey] = item["@"]; + } + } } - return null; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ParentNodeImpl.prototype, "childElementCount", { - /** @inheritdoc */ - get: function () { - var e_1, _a; - /** - * The childElementCount attribute’s getter must return the number of - * children of context object that are elements. - */ - var count = 0; + // list contains element nodes with non-unique names + // return an array with mixed content notation + var result = []; + for (var i = 0; i < items.length; i++) { + var item = items[i]; + var key = Object.keys(item)[0]; + switch (key) { + case "@": + // attributes were processed above + break; + case "#": + result.push((_a = {}, _a[defTextKey] = item["#"], _a)); + break; + case "!": + result.push((_b = {}, _b[defCommentKey] = item["!"], _b)); + break; + case "?": + result.push((_c = {}, _c[defInstructionKey] = item["?"], _c)); + break; + case "$": + result.push((_d = {}, _d[defCdataKey] = item["$"], _d)); + break; + default: + // element node + var ele = item; + if (ele[key].length !== 0 && util_1.isArray(ele[key][0])) { + // group of element nodes + var eleGroup = []; + var listOfLists = ele[key]; + for (var i_1 = 0; i_1 < listOfLists.length; i_1++) { + eleGroup.push(this._process(listOfLists[i_1], options)); + } + result.push((_e = {}, _e[key] = eleGroup, _e)); + } + else { + // single element node + if (options.verbose) { + result.push((_f = {}, _f[key] = [this._process(ele[key], options)], _f)); + } + else { + result.push((_g = {}, _g[key] = this._process(ele[key], options), _g)); + } + } + break; + } + } + obj[defTextKey] = result; + return obj; + } + else { + // all element nodes have unique names + // return an object while prefixing data node keys + var textId = 1; + var commentId = 1; + var instructionId = 1; + var cdataId = 1; + var obj = {}; + for (var i = 0; i < items.length; i++) { + var item = items[i]; + var key = Object.keys(item)[0]; + switch (key) { + case "@": + var attrs = item["@"]; + var attrKeys = Object.keys(attrs); + if (!options.group || attrKeys.length === 1) { + for (var attrName in attrs) { + obj[defAttrKey + attrName] = attrs[attrName]; + } + } + else { + obj[defAttrKey] = attrs; + } + break; + case "#": + textId = this._processSpecItem(item["#"], obj, options.group, defTextKey, textCount, textId); + break; + case "!": + commentId = this._processSpecItem(item["!"], obj, options.group, defCommentKey, commentCount, commentId); + break; + case "?": + instructionId = this._processSpecItem(item["?"], obj, options.group, defInstructionKey, instructionCount, instructionId); + break; + case "$": + cdataId = this._processSpecItem(item["$"], obj, options.group, defCdataKey, cdataCount, cdataId); + break; + default: + // element node + var ele = item; + if (ele[key].length !== 0 && util_1.isArray(ele[key][0])) { + // group of element nodes + var eleGroup = []; + var listOfLists = ele[key]; + for (var i_2 = 0; i_2 < listOfLists.length; i_2++) { + eleGroup.push(this._process(listOfLists[i_2], options)); + } + obj[key] = eleGroup; + } + else { + // single element node + if (options.verbose) { + obj[key] = [this._process(ele[key], options)]; + } + else { + obj[key] = this._process(ele[key], options); + } + } + break; + } + } + return obj; + } + }; + ObjectWriter.prototype._processSpecItem = function (item, obj, group, defKey, count, id) { + var e_1, _a; + if (!group && util_1.isArray(item) && count + item.length > 2) { try { - for (var _b = __values(util_1.Cast.asNode(this)._children), _c = _b.next(); !_c.done; _c = _b.next()) { - var childNode = _c.value; - if (util_1.Guard.isElementNode(childNode)) - count++; + for (var item_1 = __values(item), item_1_1 = item_1.next(); !item_1_1.done; item_1_1 = item_1.next()) { + var subItem = item_1_1.value; + var key = defKey + (id++).toString(); + obj[key] = subItem; } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + if (item_1_1 && !item_1_1.done && (_a = item_1.return)) _a.call(item_1); } finally { if (e_1) throw e_1.error; } } - return count; - }, - enumerable: true, - configurable: true - }); + } + else { + var key = count > 1 ? defKey + (id++).toString() : defKey; + obj[key] = item; + } + return id; + }; /** @inheritdoc */ - ParentNodeImpl.prototype.prepend = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; + ObjectWriter.prototype.beginElement = function (name) { + var _a, _b; + var childItems = []; + if (this._currentList.length === 0) { + this._currentList.push((_a = {}, _a[name] = childItems, _a)); } - /** - * 1. Let node be the result of converting nodes into a node given nodes - * and context object’s node document. - * 2. Pre-insert node into context object before the context object’s first - * child. - */ - var node = util_1.Cast.asNode(this); - var childNode = algorithm_1.parentNode_convertNodesIntoANode(nodes, node._nodeDocument); - algorithm_1.mutation_preInsert(childNode, node, node._firstChild); + else { + var lastItem = this._currentList[this._currentList.length - 1]; + if (this._isElementNode(lastItem, name)) { + if (lastItem[name].length !== 0 && util_1.isArray(lastItem[name][0])) { + var listOfLists = lastItem[name]; + listOfLists.push(childItems); + } + else { + lastItem[name] = [lastItem[name], childItems]; + } + } + else { + this._currentList.push((_b = {}, _b[name] = childItems, _b)); + } + } + this._currentIndex++; + if (this._listRegister.length > this._currentIndex) { + this._listRegister[this._currentIndex] = childItems; + } + else { + this._listRegister.push(childItems); + } + this._currentList = childItems; }; /** @inheritdoc */ - ParentNodeImpl.prototype.append = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; + ObjectWriter.prototype.endElement = function () { + this._currentList = this._listRegister[--this._currentIndex]; + }; + /** @inheritdoc */ + ObjectWriter.prototype.attribute = function (name, value) { + var _a, _b; + if (this._currentList.length === 0) { + this._currentList.push({ "@": (_a = {}, _a[name] = value, _a) }); } - /** - * 1. Let node be the result of converting nodes into a node given nodes - * and context object’s node document. - * 2. Append node to context object. - */ - var node = util_1.Cast.asNode(this); - var childNode = algorithm_1.parentNode_convertNodesIntoANode(nodes, node._nodeDocument); - algorithm_1.mutation_append(childNode, node); + else { + var lastItem = this._currentList[this._currentList.length - 1]; + /* istanbul ignore else */ + if (this._isAttrNode(lastItem)) { + lastItem["@"][name] = value; + } + else { + this._currentList.push({ "@": (_b = {}, _b[name] = value, _b) }); + } + } + }; + /** @inheritdoc */ + ObjectWriter.prototype.comment = function (data) { + if (this._currentList.length === 0) { + this._currentList.push({ "!": data }); + } + else { + var lastItem = this._currentList[this._currentList.length - 1]; + if (this._isCommentNode(lastItem)) { + if (util_1.isArray(lastItem["!"])) { + lastItem["!"].push(data); + } + else { + lastItem["!"] = [lastItem["!"], data]; + } + } + else { + this._currentList.push({ "!": data }); + } + } + }; + /** @inheritdoc */ + ObjectWriter.prototype.text = function (data) { + if (this._currentList.length === 0) { + this._currentList.push({ "#": data }); + } + else { + var lastItem = this._currentList[this._currentList.length - 1]; + if (this._isTextNode(lastItem)) { + if (util_1.isArray(lastItem["#"])) { + lastItem["#"].push(data); + } + else { + lastItem["#"] = [lastItem["#"], data]; + } + } + else { + this._currentList.push({ "#": data }); + } + } + }; + /** @inheritdoc */ + ObjectWriter.prototype.instruction = function (target, data) { + var value = (data === "" ? target : target + " " + data); + if (this._currentList.length === 0) { + this._currentList.push({ "?": value }); + } + else { + var lastItem = this._currentList[this._currentList.length - 1]; + if (this._isInstructionNode(lastItem)) { + if (util_1.isArray(lastItem["?"])) { + lastItem["?"].push(value); + } + else { + lastItem["?"] = [lastItem["?"], value]; + } + } + else { + this._currentList.push({ "?": value }); + } + } + }; + /** @inheritdoc */ + ObjectWriter.prototype.cdata = function (data) { + if (this._currentList.length === 0) { + this._currentList.push({ "$": data }); + } + else { + var lastItem = this._currentList[this._currentList.length - 1]; + if (this._isCDATANode(lastItem)) { + if (util_1.isArray(lastItem["$"])) { + lastItem["$"].push(data); + } + else { + lastItem["$"] = [lastItem["$"], data]; + } + } + else { + this._currentList.push({ "$": data }); + } + } + }; + ObjectWriter.prototype._isAttrNode = function (x) { + return "@" in x; + }; + ObjectWriter.prototype._isTextNode = function (x) { + return "#" in x; + }; + ObjectWriter.prototype._isCommentNode = function (x) { + return "!" in x; + }; + ObjectWriter.prototype._isInstructionNode = function (x) { + return "?" in x; }; - /** @inheritdoc */ - ParentNodeImpl.prototype.querySelector = function (selectors) { - /** - * The querySelector(selectors) method, when invoked, must return the first - * result of running scope-match a selectors string selectors against - * context object, if the result is not an empty list, and null otherwise. - */ - var node = util_1.Cast.asNode(this); - var result = algorithm_1.selectors_scopeMatchASelectorsString(selectors, node); - return (result.length === 0 ? null : result[0]); + ObjectWriter.prototype._isCDATANode = function (x) { + return "$" in x; }; - /** @inheritdoc */ - ParentNodeImpl.prototype.querySelectorAll = function (selectors) { - /** - * The querySelectorAll(selectors) method, when invoked, must return the - * static result of running scope-match a selectors string selectors against - * context object. - */ - var node = util_1.Cast.asNode(this); - var result = algorithm_1.selectors_scopeMatchASelectorsString(selectors, node); - return algorithm_1.create_nodeListStatic(node, result); + ObjectWriter.prototype._isElementNode = function (x, name) { + return name in x; }; - return ParentNodeImpl; -}()); -exports.ParentNodeImpl = ParentNodeImpl; -//# sourceMappingURL=ParentNodeImpl.js.map + /** + * Returns an object key for an attribute or namespace declaration. + */ + ObjectWriter.prototype._getAttrKey = function () { + return this._builderOptions.convert.att; + }; + /** + * Returns an object key for the given node type. + * + * @param nodeType - node type to get a key for + */ + ObjectWriter.prototype._getNodeKey = function (nodeType) { + switch (nodeType) { + case interfaces_1.NodeType.Comment: + return this._builderOptions.convert.comment; + case interfaces_1.NodeType.Text: + return this._builderOptions.convert.text; + case interfaces_1.NodeType.ProcessingInstruction: + return this._builderOptions.convert.ins; + case interfaces_1.NodeType.CData: + return this._builderOptions.convert.cdata; + /* istanbul ignore next */ + default: + throw new Error("Invalid node type."); + } + }; + return ObjectWriter; +}(BaseWriter_1.BaseWriter)); +exports.ObjectWriter = ObjectWriter; +//# sourceMappingURL=ObjectWriter.js.map /***/ }), -/* 935 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { + +/***/ 7572: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; @@ -42540,1658 +41770,1701 @@ var __extends = (this && this.__extends) || (function () { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOMImpl_1 = __webpack_require__(648); -var interfaces_1 = __webpack_require__(970); -var EventTargetImpl_1 = __webpack_require__(597); -var util_1 = __webpack_require__(918); -var DOMException_1 = __webpack_require__(35); -var algorithm_1 = __webpack_require__(163); -var URLAlgorithm_1 = __webpack_require__(813); -var WebIDLAlgorithm_1 = __webpack_require__(495); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var BaseCBWriter_1 = __nccwpck_require__(708); /** - * Represents a generic XML node. + * Serializes XML nodes. */ -var NodeImpl = /** @class */ (function (_super) { - __extends(NodeImpl, _super); +var XMLCBWriter = /** @class */ (function (_super) { + __extends(XMLCBWriter, _super); /** - * Initializes a new instance of `Node`. + * Initializes a new instance of `XMLCBWriter`. + * + * @param builderOptions - XML builder options */ - function NodeImpl() { - var _this = _super.call(this) || this; - _this._parent = null; - _this._firstChild = null; - _this._lastChild = null; - _this._previousSibling = null; - _this._nextSibling = null; + function XMLCBWriter(builderOptions) { + var _this = _super.call(this, builderOptions) || this; + _this._lineLength = 0; return _this; } - Object.defineProperty(NodeImpl.prototype, "_childNodes", { - get: function () { - return this.__childNodes || (this.__childNodes = algorithm_1.create_nodeList(this)); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeImpl.prototype, "_nodeDocument", { - get: function () { return this._nodeDocumentOverride || DOMImpl_1.dom.window._associatedDocument; }, - set: function (val) { this._nodeDocumentOverride = val; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeImpl.prototype, "_registeredObserverList", { - get: function () { - return this.__registeredObserverList || (this.__registeredObserverList = []); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeImpl.prototype, "nodeType", { - /** @inheritdoc */ - get: function () { return this._nodeType; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeImpl.prototype, "nodeName", { - /** - * Returns a string appropriate for the type of node. - */ - get: function () { - if (util_1.Guard.isElementNode(this)) { - return this._htmlUppercasedQualifiedName; - } - else if (util_1.Guard.isAttrNode(this)) { - return this._qualifiedName; - } - else if (util_1.Guard.isExclusiveTextNode(this)) { - return "#text"; - } - else if (util_1.Guard.isCDATASectionNode(this)) { - return "#cdata-section"; - } - else if (util_1.Guard.isProcessingInstructionNode(this)) { - return this._target; - } - else if (util_1.Guard.isCommentNode(this)) { - return "#comment"; - } - else if (util_1.Guard.isDocumentNode(this)) { - return "#document"; - } - else if (util_1.Guard.isDocumentTypeNode(this)) { - return this._name; + /** @inheritdoc */ + XMLCBWriter.prototype.frontMatter = function () { + return ""; + }; + /** @inheritdoc */ + XMLCBWriter.prototype.declaration = function (version, encoding, standalone) { + var markup = this._beginLine() + ""; + return markup; + }; + /** @inheritdoc */ + XMLCBWriter.prototype.docType = function (name, publicId, systemId) { + var markup = this._beginLine(); + if (publicId && systemId) { + markup += ""; + } + else if (publicId) { + markup += ""; + } + else if (systemId) { + markup += ""; + } + else { + markup += ""; + } + return markup; + }; + /** @inheritdoc */ + XMLCBWriter.prototype.comment = function (data) { + return this._beginLine() + ""; + }; + /** @inheritdoc */ + XMLCBWriter.prototype.text = function (data) { + return this._beginLine() + data; + }; + /** @inheritdoc */ + XMLCBWriter.prototype.instruction = function (target, data) { + if (data) { + return this._beginLine() + ""; + } + else { + return this._beginLine() + ""; + } + }; + /** @inheritdoc */ + XMLCBWriter.prototype.cdata = function (data) { + return this._beginLine() + ""; + }; + /** @inheritdoc */ + XMLCBWriter.prototype.openTagBegin = function (name) { + this._lineLength += 1 + name.length; + return this._beginLine() + "<" + name; + }; + /** @inheritdoc */ + XMLCBWriter.prototype.openTagEnd = function (name, selfClosing, voidElement) { + if (voidElement) { + return " />"; + } + else if (selfClosing) { + if (this._writerOptions.allowEmptyTags) { + return ">"; } - else if (util_1.Guard.isDocumentFragmentNode(this)) { - return "#document-fragment"; + else if (this._writerOptions.spaceBeforeSlash) { + return " />"; } else { - return ""; + return "/>"; } - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeImpl.prototype, "baseURI", { - /** - * Gets the absolute base URL of the node. - */ - get: function () { - /** - * The baseURI attribute’s getter must return node document’s document - * base URL, serialized. - * TODO: Implement in HTML DOM - * https://html.spec.whatwg.org/multipage/urls-and-fetching.html#document-base-url - */ - return URLAlgorithm_1.urlSerializer(this._nodeDocument._URL); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeImpl.prototype, "isConnected", { - /** - * Returns whether the node is rooted to a document node. - */ - get: function () { - /** - * The isConnected attribute’s getter must return true, if context object - * is connected, and false otherwise. - */ - return util_1.Guard.isElementNode(this) && algorithm_1.shadowTree_isConnected(this); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeImpl.prototype, "ownerDocument", { - /** - * Returns the parent document. - */ - get: function () { - /** - * The ownerDocument attribute’s getter must return null, if the context - * object is a document, and the context object’s node document otherwise. - * _Note:_ The node document of a document is that document itself. All - * nodes have a node document at all times. - */ - if (this._nodeType === interfaces_1.NodeType.Document) - return null; - else - return this._nodeDocument; - }, - enumerable: true, - configurable: true - }); + } + else { + return ">"; + } + }; + /** @inheritdoc */ + XMLCBWriter.prototype.closeTag = function (name) { + return this._beginLine() + ""; + }; + /** @inheritdoc */ + XMLCBWriter.prototype.attribute = function (name, value) { + var str = name + "=\"" + value + "\""; + if (this._writerOptions.prettyPrint && this._writerOptions.width > 0 && + this._lineLength + 1 + str.length > this._writerOptions.width) { + str = this._beginLine() + this._indent(1) + str; + this._lineLength = str.length; + return str; + } + else { + this._lineLength += 1 + str.length; + return " " + str; + } + }; + /** @inheritdoc */ + XMLCBWriter.prototype.beginElement = function (name) { }; + /** @inheritdoc */ + XMLCBWriter.prototype.endElement = function (name) { }; /** - * Returns the root node. - * - * @param options - if options has `composed = true` this function - * returns the node's shadow-including root, otherwise it returns - * the node's root node. + * Produces characters to be prepended to a line of string in pretty-print + * mode. */ - NodeImpl.prototype.getRootNode = function (options) { - /** - * The getRootNode(options) method, when invoked, must return context - * object’s shadow-including root if options’s composed is true, - * and context object’s root otherwise. - */ - return algorithm_1.tree_rootNode(this, !!options && options.composed); + XMLCBWriter.prototype._beginLine = function () { + if (this._writerOptions.prettyPrint) { + var str = (this.hasData ? this._writerOptions.newline : "") + + this._indent(this._writerOptions.offset + this.level); + this._lineLength = str.length; + return str; + } + else { + return ""; + } }; - Object.defineProperty(NodeImpl.prototype, "parentNode", { - /** - * Returns the parent node. - */ - get: function () { - /** - * The parentNode attribute’s getter must return the context object’s parent. - * _Note:_ An Attr node has no parent. - */ - if (this._nodeType === interfaces_1.NodeType.Attribute) { - return null; - } - else { - return this._parent; - } - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeImpl.prototype, "parentElement", { - /** - * Returns the parent element. - */ - get: function () { - /** - * The parentElement attribute’s getter must return the context object’s - * parent element. - */ - if (this._parent && util_1.Guard.isElementNode(this._parent)) { - return this._parent; - } - else { - return null; - } - }, - enumerable: true, - configurable: true - }); /** - * Determines whether a node has any children. + * Produces an indentation string. + * + * @param level - depth of the tree */ - NodeImpl.prototype.hasChildNodes = function () { - /** - * The hasChildNodes() method, when invoked, must return true if the context - * object has children, and false otherwise. - */ - return (this._firstChild !== null); - }; - Object.defineProperty(NodeImpl.prototype, "childNodes", { - /** - * Returns a {@link NodeList} of child nodes. - */ - get: function () { - /** - * The childNodes attribute’s getter must return a NodeList rooted at the - * context object matching only children. - */ - return this._childNodes; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeImpl.prototype, "firstChild", { - /** - * Returns the first child node. - */ - get: function () { - /** - * The firstChild attribute’s getter must return the context object’s first - * child. - */ - return this._firstChild; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeImpl.prototype, "lastChild", { - /** - * Returns the last child node. - */ - get: function () { - /** - * The lastChild attribute’s getter must return the context object’s last - * child. - */ - return this._lastChild; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeImpl.prototype, "previousSibling", { - /** - * Returns the previous sibling node. - */ - get: function () { - /** - * The previousSibling attribute’s getter must return the context object’s - * previous sibling. - * _Note:_ An Attr node has no siblings. - */ - return this._previousSibling; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeImpl.prototype, "nextSibling", { - /** - * Returns the next sibling node. - */ - get: function () { - /** - * The nextSibling attribute’s getter must return the context object’s - * next sibling. - */ - return this._nextSibling; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeImpl.prototype, "nodeValue", { - /** - * Gets or sets the data associated with a {@link CharacterData} node or the - * value of an {@link @Attr} node. For other node types returns `null`. - */ - get: function () { - if (util_1.Guard.isAttrNode(this)) { - return this._value; - } - else if (util_1.Guard.isCharacterDataNode(this)) { - return this._data; - } - else { - return null; - } - }, - set: function (value) { - if (value === null) { - value = ''; - } - if (util_1.Guard.isAttrNode(this)) { - algorithm_1.attr_setAnExistingAttributeValue(this, value); - } - else if (util_1.Guard.isCharacterDataNode(this)) { - algorithm_1.characterData_replaceData(this, 0, this._data.length, value); - } - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeImpl.prototype, "textContent", { - /** - * Returns the concatenation of data of all the {@link Text} - * node descendants in tree order. When set, replaces the text - * contents of the node with the given value. - */ - get: function () { - if (util_1.Guard.isDocumentFragmentNode(this) || util_1.Guard.isElementNode(this)) { - return algorithm_1.text_descendantTextContent(this); - } - else if (util_1.Guard.isAttrNode(this)) { - return this._value; - } - else if (util_1.Guard.isCharacterDataNode(this)) { - return this._data; - } - else { - return null; - } - }, - set: function (value) { - if (value === null) { - value = ''; - } - if (util_1.Guard.isDocumentFragmentNode(this) || util_1.Guard.isElementNode(this)) { - algorithm_1.node_stringReplaceAll(value, this); - } - else if (util_1.Guard.isAttrNode(this)) { - algorithm_1.attr_setAnExistingAttributeValue(this, value); - } - else if (util_1.Guard.isCharacterDataNode(this)) { - algorithm_1.characterData_replaceData(this, 0, algorithm_1.tree_nodeLength(this), value); - } - }, - enumerable: true, - configurable: true - }); + XMLCBWriter.prototype._indent = function (level) { + if (level <= 0) { + return ""; + } + else { + return this._writerOptions.indent.repeat(level); + } + }; + return XMLCBWriter; +}(BaseCBWriter_1.BaseCBWriter)); +exports.XMLCBWriter = XMLCBWriter; +//# sourceMappingURL=XMLCBWriter.js.map + +/***/ }), + +/***/ 9606: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var util_1 = __nccwpck_require__(6195); +var interfaces_1 = __nccwpck_require__(7305); +var BaseWriter_1 = __nccwpck_require__(7644); +var util_2 = __nccwpck_require__(5282); +/** + * Serializes XML nodes into strings. + */ +var XMLWriter = /** @class */ (function (_super) { + __extends(XMLWriter, _super); /** - * Puts all {@link Text} nodes in the full depth of the sub-tree - * underneath this node into a "normal" form where only markup - * (e.g., tags, comments, processing instructions, CDATA sections, - * and entity references) separates {@link Text} nodes, i.e., there - * are no adjacent Text nodes. + * Initializes a new instance of `XMLWriter`. + * + * @param builderOptions - XML builder options + * @param writerOptions - serialization options */ - NodeImpl.prototype.normalize = function () { - var e_1, _a, e_2, _b; - /** - * The normalize() method, when invoked, must run these steps for each - * descendant exclusive Text node node of context object: - */ - var descendantNodes = []; - var node = algorithm_1.tree_getFirstDescendantNode(this, false, false, function (e) { return util_1.Guard.isExclusiveTextNode(e); }); - while (node !== null) { - descendantNodes.push(node); - node = algorithm_1.tree_getNextDescendantNode(this, node, false, false, function (e) { return util_1.Guard.isExclusiveTextNode(e); }); + function XMLWriter(builderOptions, writerOptions) { + var _this = _super.call(this, builderOptions) || this; + _this._indentation = {}; + _this._lengthToLastNewline = 0; + // provide default options + _this._writerOptions = util_1.applyDefaults(writerOptions, { + wellFormed: false, + noDoubleEncoding: false, + headless: false, + prettyPrint: false, + indent: " ", + newline: "\n", + offset: 0, + width: 0, + allowEmptyTags: false, + indentTextOnlyNodes: false, + spaceBeforeSlash: false + }); + return _this; + } + /** + * Produces an XML serialization of the given node. + * + * @param node - node to serialize + */ + XMLWriter.prototype.serialize = function (node) { + this._refs = { suppressPretty: false, emptyNode: false, markup: "" }; + // Serialize XML declaration + if (node.nodeType === interfaces_1.NodeType.Document && !this._writerOptions.headless) { + this.declaration(this._builderOptions.version, this._builderOptions.encoding, this._builderOptions.standalone); } - for (var i = 0; i < descendantNodes.length; i++) { - var node_1 = descendantNodes[i]; - if (node_1._parent === null) - continue; - /** - * 1. Let length be node’s length. - * 2. If length is zero, then remove node and continue with the next - * exclusive Text node, if any. - */ - var length = algorithm_1.tree_nodeLength(node_1); - if (length === 0) { - algorithm_1.mutation_remove(node_1, node_1._parent); - continue; - } - /** - * 3. Let data be the concatenation of the data of node’s contiguous - * exclusive Text nodes (excluding itself), in tree order. - */ - var textSiblings = []; - var data = ''; - try { - for (var _c = (e_1 = void 0, __values(algorithm_1.text_contiguousExclusiveTextNodes(node_1))), _d = _c.next(); !_d.done; _d = _c.next()) { - var sibling = _d.value; - textSiblings.push(sibling); - data += sibling._data; + // recursively serialize node + this.serializeNode(node, this._writerOptions.wellFormed, this._writerOptions.noDoubleEncoding); + // remove trailing newline + if (this._writerOptions.prettyPrint && + this._refs.markup.slice(-this._writerOptions.newline.length) === this._writerOptions.newline) { + this._refs.markup = this._refs.markup.slice(0, -this._writerOptions.newline.length); + } + return this._refs.markup; + }; + /** @inheritdoc */ + XMLWriter.prototype.declaration = function (version, encoding, standalone) { + this._beginLine(); + this._refs.markup += ""; + this._endLine(); + }; + /** @inheritdoc */ + XMLWriter.prototype.docType = function (name, publicId, systemId) { + this._beginLine(); + if (publicId && systemId) { + this._refs.markup += ""; + } + else if (publicId) { + this._refs.markup += ""; + } + else if (systemId) { + this._refs.markup += ""; + } + else { + this._refs.markup += ""; + } + this._endLine(); + }; + /** @inheritdoc */ + XMLWriter.prototype.openTagBegin = function (name) { + this._beginLine(); + this._refs.markup += "<" + name; + }; + /** @inheritdoc */ + XMLWriter.prototype.openTagEnd = function (name, selfClosing, voidElement) { + // do not indent text only elements or elements with empty text nodes + this._refs.suppressPretty = false; + this._refs.emptyNode = false; + if (this._writerOptions.prettyPrint && !selfClosing && !voidElement) { + var textOnlyNode = true; + var emptyNode = true; + var childNode = this.currentNode.firstChild; + var cdataCount = 0; + var textCount = 0; + while (childNode) { + if (util_2.Guard.isExclusiveTextNode(childNode)) { + textCount++; } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_d && !_d.done && (_a = _c.return)) _a.call(_c); + else if (util_2.Guard.isCDATASectionNode(childNode)) { + cdataCount++; } - finally { if (e_1) throw e_1.error; } - } - /** - * 4. Replace data with node node, offset length, count 0, and data data. - */ - algorithm_1.characterData_replaceData(node_1, length, 0, data); - /** - * 5. Let currentNode be node’s next sibling. - * 6. While currentNode is an exclusive Text node: - */ - if (DOMImpl_1.dom.rangeList.size !== 0) { - var currentNode = node_1._nextSibling; - while (currentNode !== null && util_1.Guard.isExclusiveTextNode(currentNode)) { - /** - * 6.1. For each live range whose start node is currentNode, add length - * to its start offset and set its start node to node. - * 6.2. For each live range whose end node is currentNode, add length to - * its end offset and set its end node to node. - * 6.3. For each live range whose start node is currentNode’s parent and - * start offset is currentNode’s index, set its start node to node and - * its start offset to length. - * 6.4. For each live range whose end node is currentNode’s parent and - * end offset is currentNode’s index, set its end node to node and its - * end offset to length. - */ - var cn = currentNode; - var index = algorithm_1.tree_index(cn); - try { - for (var _e = (e_2 = void 0, __values(DOMImpl_1.dom.rangeList)), _f = _e.next(); !_f.done; _f = _e.next()) { - var range = _f.value; - if (range._start[0] === cn) { - range._start[0] = node_1; - range._start[1] += length; - } - if (range._end[0] === cn) { - range._end[0] = node_1; - range._end[1] += length; - } - if (range._start[0] === cn._parent && range._start[1] === index) { - range._start[0] = node_1; - range._start[1] = length; - } - if (range._end[0] === cn._parent && range._end[1] === index) { - range._end[0] = node_1; - range._end[1] = length; - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (_f && !_f.done && (_b = _e.return)) _b.call(_e); - } - finally { if (e_2) throw e_2.error; } - } - /** - * 6.5. Add currentNode’s length to length. - * 6.6. Set currentNode to its next sibling. - */ - length += algorithm_1.tree_nodeLength(currentNode); - currentNode = currentNode._nextSibling; + else { + textOnlyNode = false; + emptyNode = false; + break; } + if (childNode.data !== '') { + emptyNode = false; + } + childNode = childNode.nextSibling; } - /** - * 7. Remove node’s contiguous exclusive Text nodes (excluding itself), - * in tree order. - */ - for (var i_1 = 0; i_1 < textSiblings.length; i_1++) { - var sibling = textSiblings[i_1]; - if (sibling._parent === null) - continue; - algorithm_1.mutation_remove(sibling, sibling._parent); - } + this._refs.suppressPretty = !this._writerOptions.indentTextOnlyNodes && textOnlyNode && ((cdataCount <= 1 && textCount === 0) || cdataCount === 0); + this._refs.emptyNode = emptyNode; } + if ((voidElement || selfClosing || this._refs.emptyNode) && this._writerOptions.allowEmptyTags) { + this._refs.markup += ">"; + } + else { + this._refs.markup += voidElement ? " />" : + (selfClosing || this._refs.emptyNode) ? (this._writerOptions.spaceBeforeSlash ? " />" : "/>") : ">"; + } + this._endLine(); + }; + /** @inheritdoc */ + XMLWriter.prototype.closeTag = function (name) { + if (!this._refs.emptyNode) { + this._beginLine(); + this._refs.markup += ""; + } + this._refs.suppressPretty = false; + this._refs.emptyNode = false; + this._endLine(); + }; + /** @inheritdoc */ + XMLWriter.prototype.attribute = function (name, value) { + var str = name + "=\"" + value + "\""; + if (this._writerOptions.prettyPrint && this._writerOptions.width > 0 && + this._refs.markup.length - this._lengthToLastNewline + 1 + str.length > this._writerOptions.width) { + this._endLine(); + this._beginLine(); + this._refs.markup += this._indent(1) + str; + } + else { + this._refs.markup += " " + str; + } + }; + /** @inheritdoc */ + XMLWriter.prototype.text = function (data) { + if (data !== '') { + this._beginLine(); + this._refs.markup += data; + this._endLine(); + } + }; + /** @inheritdoc */ + XMLWriter.prototype.cdata = function (data) { + if (data !== '') { + this._beginLine(); + this._refs.markup += ""; + this._endLine(); + } + }; + /** @inheritdoc */ + XMLWriter.prototype.comment = function (data) { + this._beginLine(); + this._refs.markup += ""; + this._endLine(); + }; + /** @inheritdoc */ + XMLWriter.prototype.instruction = function (target, data) { + this._beginLine(); + this._refs.markup += ""; + this._endLine(); }; /** - * Returns a duplicate of this node, i.e., serves as a generic copy - * constructor for nodes. The duplicate node has no parent - * ({@link parentNode} returns `null`). - * - * @param deep - if `true`, recursively clone the subtree under the - * specified node. If `false`, clone only the node itself (and its - * attributes, if it is an {@link Element}). + * Produces characters to be prepended to a line of string in pretty-print + * mode. */ - NodeImpl.prototype.cloneNode = function (deep) { - if (deep === void 0) { deep = false; } - /** - * 1. If context object is a shadow root, then throw a "NotSupportedError" - * DOMException. - * 2. Return a clone of the context object, with the clone children flag set - * if deep is true. - */ - if (util_1.Guard.isShadowRoot(this)) - throw new DOMException_1.NotSupportedError(); - return algorithm_1.node_clone(this, null, deep); + XMLWriter.prototype._beginLine = function () { + if (this._writerOptions.prettyPrint && !this._refs.suppressPretty) { + this._refs.markup += this._indent(this._writerOptions.offset + this.level); + } }; /** - * Determines if the given node is equal to this one. - * - * @param node - the node to compare with + * Produces characters to be appended to a line of string in pretty-print + * mode. */ - NodeImpl.prototype.isEqualNode = function (node) { - if (node === void 0) { node = null; } - /** - * The isEqualNode(otherNode) method, when invoked, must return true if - * otherNode is non-null and context object equals otherNode, and false - * otherwise. - */ - return (node !== null && algorithm_1.node_equals(this, node)); + XMLWriter.prototype._endLine = function () { + if (this._writerOptions.prettyPrint && !this._refs.suppressPretty) { + this._refs.markup += this._writerOptions.newline; + this._lengthToLastNewline = this._refs.markup.length; + } }; /** - * Determines if the given node is reference equal to this one. + * Produces an indentation string. * - * @param node - the node to compare with + * @param level - depth of the tree */ - NodeImpl.prototype.isSameNode = function (node) { - if (node === void 0) { node = null; } - /** - * The isSameNode(otherNode) method, when invoked, must return true if - * otherNode is context object, and false otherwise. - */ - return (this === node); + XMLWriter.prototype._indent = function (level) { + if (level <= 0) { + return ""; + } + else if (this._indentation[level] !== undefined) { + return this._indentation[level]; + } + else { + var str = this._writerOptions.indent.repeat(level); + this._indentation[level] = str; + return str; + } + }; + return XMLWriter; +}(BaseWriter_1.BaseWriter)); +exports.XMLWriter = XMLWriter; +//# sourceMappingURL=XMLWriter.js.map + +/***/ }), + +/***/ 2444: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; +})(); +Object.defineProperty(exports, "__esModule", ({ value: true })); +var BaseCBWriter_1 = __nccwpck_require__(708); +/** + * Serializes XML nodes. + */ +var YAMLCBWriter = /** @class */ (function (_super) { + __extends(YAMLCBWriter, _super); /** - * Returns a bitmask indicating the position of the given `node` - * relative to this node. + * Initializes a new instance of `BaseCBWriter`. + * + * @param builderOptions - XML builder options */ - NodeImpl.prototype.compareDocumentPosition = function (other) { - /** - * 1. If context object is other, then return zero. - * 2. Let node1 be other and node2 be context object. - * 3. Let attr1 and attr2 be null. - * attr1’s element. - */ - if (other === this) - return 0; - var node1 = other; - var node2 = this; - var attr1 = null; - var attr2 = null; - /** - * 4. If node1 is an attribute, then set attr1 to node1 and node1 to - * attr1’s element. - */ - if (util_1.Guard.isAttrNode(node1)) { - attr1 = node1; - node1 = attr1._element; - } - /** - * 5. If node2 is an attribute, then: - */ - if (util_1.Guard.isAttrNode(node2)) { - /** - * 5.1. Set attr2 to node2 and node2 to attr2’s element. - */ - attr2 = node2; - node2 = attr2._element; - /** - * 5.2. If attr1 and node1 are non-null, and node2 is node1, then: - */ - if (attr1 && node1 && (node1 === node2)) { - /** - * 5.2. For each attr in node2’s attribute list: - */ - for (var i = 0; i < node2._attributeList.length; i++) { - var attr = node2._attributeList[i]; - /** - * 5.2.1. If attr equals attr1, then return the result of adding - * DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC and - * DOCUMENT_POSITION_PRECEDING. - * 5.2.2. If attr equals attr2, then return the result of adding - * DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC and - * DOCUMENT_POSITION_FOLLOWING. - */ - if (algorithm_1.node_equals(attr, attr1)) { - return interfaces_1.Position.ImplementationSpecific | interfaces_1.Position.Preceding; - } - else if (algorithm_1.node_equals(attr, attr2)) { - return interfaces_1.Position.ImplementationSpecific | interfaces_1.Position.Following; - } - } - } + function YAMLCBWriter(builderOptions) { + var _this = _super.call(this, builderOptions) || this; + _this._rootWritten = false; + _this._additionalLevel = 0; + if (builderOptions.indent.length < 2) { + throw new Error("YAML indententation string must be at least two characters long."); } - /** - * 6. If node1 or node2 is null, or node1’s root is not node2’s root, then - * return the result of adding DOCUMENT_POSITION_DISCONNECTED, - * DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, and either - * DOCUMENT_POSITION_PRECEDING or DOCUMENT_POSITION_FOLLOWING, - * with the constraint that this is to be consistent, together. - */ - if (node1 === null || node2 === null || - algorithm_1.tree_rootNode(node1) !== algorithm_1.tree_rootNode(node2)) { - // nodes are disconnected - // return a random result but cache the value for consistency - return interfaces_1.Position.Disconnected | interfaces_1.Position.ImplementationSpecific | - (DOMImpl_1.dom.compareCache.check(this, other) ? interfaces_1.Position.Preceding : interfaces_1.Position.Following); + if (builderOptions.offset < 0) { + throw new Error("YAML offset should be zero or a positive number."); } - /** - * 7. If node1 is an ancestor of node2 and attr1 is null, or node1 is node2 - * and attr2 is non-null, then return the result of adding - * DOCUMENT_POSITION_CONTAINS to DOCUMENT_POSITION_PRECEDING. - */ - if ((!attr1 && algorithm_1.tree_isAncestorOf(node2, node1)) || - (attr2 && (node1 === node2))) { - return interfaces_1.Position.Contains | interfaces_1.Position.Preceding; + return _this; + } + /** @inheritdoc */ + YAMLCBWriter.prototype.frontMatter = function () { + return this._beginLine() + "---"; + }; + /** @inheritdoc */ + YAMLCBWriter.prototype.declaration = function (version, encoding, standalone) { + return ""; + }; + /** @inheritdoc */ + YAMLCBWriter.prototype.docType = function (name, publicId, systemId) { + return ""; + }; + /** @inheritdoc */ + YAMLCBWriter.prototype.comment = function (data) { + // "!": "hello" + return this._beginLine() + + this._key(this._builderOptions.convert.comment) + " " + + this._val(data); + }; + /** @inheritdoc */ + YAMLCBWriter.prototype.text = function (data) { + // "#": "hello" + return this._beginLine() + + this._key(this._builderOptions.convert.text) + " " + + this._val(data); + }; + /** @inheritdoc */ + YAMLCBWriter.prototype.instruction = function (target, data) { + // "?": "target hello" + return this._beginLine() + + this._key(this._builderOptions.convert.ins) + " " + + this._val(data ? target + " " + data : target); + }; + /** @inheritdoc */ + YAMLCBWriter.prototype.cdata = function (data) { + // "$": "hello" + return this._beginLine() + + this._key(this._builderOptions.convert.cdata) + " " + + this._val(data); + }; + /** @inheritdoc */ + YAMLCBWriter.prototype.attribute = function (name, value) { + // "@name": "val" + this._additionalLevel++; + var str = this._beginLine() + + this._key(this._builderOptions.convert.att + name) + " " + + this._val(value); + this._additionalLevel--; + return str; + }; + /** @inheritdoc */ + YAMLCBWriter.prototype.openTagBegin = function (name) { + // "node": + // "#": + // - + var str = this._beginLine() + this._key(name); + if (!this._rootWritten) { + this._rootWritten = true; } - /** - * 8. If node1 is a descendant of node2 and attr2 is null, or node1 is node2 - * and attr1 is non-null, then return the result of adding - * DOCUMENT_POSITION_CONTAINED_BY to DOCUMENT_POSITION_FOLLOWING. - */ - if ((!attr2 && algorithm_1.tree_isDescendantOf(node2, node1)) || - (attr1 && (node1 === node2))) { - return interfaces_1.Position.ContainedBy | interfaces_1.Position.Following; + this.hasData = true; + this._additionalLevel++; + str += this._beginLine(true) + this._key(this._builderOptions.convert.text); + return str; + }; + /** @inheritdoc */ + YAMLCBWriter.prototype.openTagEnd = function (name, selfClosing, voidElement) { + if (selfClosing) { + return " " + this._val(""); } - /** - * 9. If node1 is preceding node2, then return DOCUMENT_POSITION_PRECEDING. - */ - if (algorithm_1.tree_isPreceding(node2, node1)) - return interfaces_1.Position.Preceding; - /** - * 10. Return DOCUMENT_POSITION_FOLLOWING. - */ - return interfaces_1.Position.Following; + return ""; }; + /** @inheritdoc */ + YAMLCBWriter.prototype.closeTag = function (name) { + this._additionalLevel--; + return ""; + }; + /** @inheritdoc */ + YAMLCBWriter.prototype.beginElement = function (name) { }; + /** @inheritdoc */ + YAMLCBWriter.prototype.endElement = function (name) { }; /** - * Returns `true` if given node is an inclusive descendant of this - * node, and `false` otherwise (including when other node is `null`). - * - * @param other - the node to check + * Produces characters to be prepended to a line of string in pretty-print + * mode. */ - NodeImpl.prototype.contains = function (other) { - /** - * The contains(other) method, when invoked, must return true if other is an - * inclusive descendant of context object, and false otherwise (including - * when other is null). - */ - if (other === null) - return false; - return algorithm_1.tree_isDescendantOf(this, other, true); + YAMLCBWriter.prototype._beginLine = function (suppressArray) { + if (suppressArray === void 0) { suppressArray = false; } + return (this.hasData ? this._writerOptions.newline : "") + + this._indent(this._writerOptions.offset + this.level, suppressArray); }; /** - * Returns the prefix for a given namespace URI, if present, and - * `null` if not. + * Produces an indentation string. * - * @param namespace - the namespace to search + * @param level - depth of the tree + * @param suppressArray - whether the suppress array marker */ - NodeImpl.prototype.lookupPrefix = function (namespace) { - /** - * 1. If namespace is null or the empty string, then return null. - * 2. Switch on the context object: - */ - if (!namespace) - return null; - if (util_1.Guard.isElementNode(this)) { - /** - * Return the result of locating a namespace prefix for it using - * namespace. - */ - return algorithm_1.node_locateANamespacePrefix(this, namespace); - } - else if (util_1.Guard.isDocumentNode(this)) { - /** - * Return the result of locating a namespace prefix for its document - * element, if its document element is non-null, and null otherwise. - */ - if (this.documentElement === null) { - return null; - } - else { - return algorithm_1.node_locateANamespacePrefix(this.documentElement, namespace); - } - } - else if (util_1.Guard.isDocumentTypeNode(this) || util_1.Guard.isDocumentFragmentNode(this)) { - return null; - } - else if (util_1.Guard.isAttrNode(this)) { - /** - * Return the result of locating a namespace prefix for its element, - * if its element is non-null, and null otherwise. - */ - if (this._element === null) { - return null; - } - else { - return algorithm_1.node_locateANamespacePrefix(this._element, namespace); - } + YAMLCBWriter.prototype._indent = function (level, suppressArray) { + if (level + this._additionalLevel <= 0) { + return ""; } else { - /** - * Return the result of locating a namespace prefix for its parent - * element, if its parent element is non-null, and null otherwise. - */ - if (this._parent !== null && util_1.Guard.isElementNode(this._parent)) { - return algorithm_1.node_locateANamespacePrefix(this._parent, namespace); - } - else { - return null; + var chars = this._writerOptions.indent.repeat(level + this._additionalLevel); + if (!suppressArray && this._rootWritten) { + return chars.substr(0, chars.length - 2) + '-' + chars.substr(-1, 1); } + return chars; } }; /** - * Returns the namespace URI for a given prefix if present, and `null` - * if not. - * - * @param prefix - the prefix to search + * Produces a YAML key string delimited with double quotes. */ - NodeImpl.prototype.lookupNamespaceURI = function (prefix) { - /** - * 1. If prefix is the empty string, then set it to null. - * 2. Return the result of running locate a namespace for the context object - * using prefix. - */ - return algorithm_1.node_locateANamespace(this, prefix || null); + YAMLCBWriter.prototype._key = function (key) { + return "\"" + key + "\":"; }; /** - * Returns `true` if the namespace is the default namespace on this - * node or `false` if not. - * - * @param namespace - the namespace to check + * Produces a YAML value string delimited with double quotes. */ - NodeImpl.prototype.isDefaultNamespace = function (namespace) { - /** - * 1. If namespace is the empty string, then set it to null. - * 2. Let defaultNamespace be the result of running locate a namespace for - * context object using null. - * 3. Return true if defaultNamespace is the same as namespace, and false otherwise. - */ - if (!namespace) - namespace = null; - var defaultNamespace = algorithm_1.node_locateANamespace(this, null); - return (defaultNamespace === namespace); + YAMLCBWriter.prototype._val = function (val) { + return JSON.stringify(val); + }; + return YAMLCBWriter; +}(BaseCBWriter_1.BaseCBWriter)); +exports.YAMLCBWriter = YAMLCBWriter; +//# sourceMappingURL=YAMLCBWriter.js.map + +/***/ }), + +/***/ 6517: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +var ObjectWriter_1 = __nccwpck_require__(243); +var util_1 = __nccwpck_require__(6195); +var BaseWriter_1 = __nccwpck_require__(7644); +/** + * Serializes XML nodes into a YAML string. + */ +var YAMLWriter = /** @class */ (function (_super) { + __extends(YAMLWriter, _super); /** - * Inserts the node `newChild` before the existing child node - * `refChild`. If `refChild` is `null`, inserts `newChild` at the end - * of the list of children. - * - * If `newChild` is a {@link DocumentFragment} object, all of its - * children are inserted, in the same order, before `refChild`. - * - * If `newChild` is already in the tree, it is first removed. + * Initializes a new instance of `YAMLWriter`. * - * @param newChild - the node to insert - * @param refChild - the node before which the new node must be - * inserted + * @param builderOptions - XML builder options + * @param writerOptions - serialization options + */ + function YAMLWriter(builderOptions, writerOptions) { + var _this = _super.call(this, builderOptions) || this; + // provide default options + _this._writerOptions = util_1.applyDefaults(writerOptions, { + wellFormed: false, + noDoubleEncoding: false, + indent: ' ', + newline: '\n', + offset: 0, + group: false, + verbose: false + }); + if (_this._writerOptions.indent.length < 2) { + throw new Error("YAML indententation string must be at least two characters long."); + } + if (_this._writerOptions.offset < 0) { + throw new Error("YAML offset should be zero or a positive number."); + } + return _this; + } + /** + * Produces an XML serialization of the given node. * - * @returns the newly inserted child node + * @param node - node to serialize + * @param writerOptions - serialization options */ - NodeImpl.prototype.insertBefore = function (newChild, refChild) { - /** - * The insertBefore(node, child) method, when invoked, must return the - * result of pre-inserting node into context object before child. - */ - return algorithm_1.mutation_preInsert(newChild, this, refChild); + YAMLWriter.prototype.serialize = function (node) { + // convert to object + var objectWriterOptions = util_1.applyDefaults(this._writerOptions, { + format: "object", + wellFormed: false, + noDoubleEncoding: false, + }); + var objectWriter = new ObjectWriter_1.ObjectWriter(this._builderOptions, objectWriterOptions); + var val = objectWriter.serialize(node); + var markup = this._beginLine(this._writerOptions, 0) + '---' + this._endLine(this._writerOptions) + + this._convertObject(val, this._writerOptions, 0); + // remove trailing newline + /* istanbul ignore else */ + if (markup.slice(-this._writerOptions.newline.length) === this._writerOptions.newline) { + markup = markup.slice(0, -this._writerOptions.newline.length); + } + return markup; }; /** - * Adds the node `newChild` to the end of the list of children of this - * node, and returns it. If `newChild` is already in the tree, it is - * first removed. - * - * If `newChild` is a {@link DocumentFragment} object, the entire - * contents of the document fragment are moved into the child list of - * this node. - * - * @param newChild - the node to add + * Produces an XML serialization of the given object. * - * @returns the newly inserted child node + * @param obj - object to serialize + * @param options - serialization options + * @param level - depth of the XML tree + * @param indentLeaf - indents leaf nodes */ - NodeImpl.prototype.appendChild = function (newChild) { - /** - * The appendChild(node) method, when invoked, must return the result of - * appending node to context object. - */ - return algorithm_1.mutation_append(newChild, this); + YAMLWriter.prototype._convertObject = function (obj, options, level, suppressIndent) { + var e_1, _a; + var _this = this; + if (suppressIndent === void 0) { suppressIndent = false; } + var markup = ''; + if (util_1.isArray(obj)) { + try { + for (var obj_1 = __values(obj), obj_1_1 = obj_1.next(); !obj_1_1.done; obj_1_1 = obj_1.next()) { + var val = obj_1_1.value; + markup += this._beginLine(options, level, true); + if (!util_1.isObject(val)) { + markup += this._val(val) + this._endLine(options); + } + else if (util_1.isEmpty(val)) { + markup += '""' + this._endLine(options); + } + else { + markup += this._convertObject(val, options, level, true); + } + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (obj_1_1 && !obj_1_1.done && (_a = obj_1.return)) _a.call(obj_1); + } + finally { if (e_1) throw e_1.error; } + } + } + else /* if (isObject(obj)) */ { + util_1.forEachObject(obj, function (key, val) { + if (suppressIndent) { + markup += _this._key(key); + suppressIndent = false; + } + else { + markup += _this._beginLine(options, level) + _this._key(key); + } + if (!util_1.isObject(val)) { + markup += ' ' + _this._val(val) + _this._endLine(options); + } + else if (util_1.isEmpty(val)) { + markup += ' ""' + _this._endLine(options); + } + else { + markup += _this._endLine(options) + + _this._convertObject(val, options, level + 1); + } + }, this); + } + return markup; }; /** - * Replaces the child node `oldChild` with `newChild` in the list of - * children, and returns the `oldChild` node. If `newChild` is already - * in the tree, it is first removed. + * Produces characters to be prepended to a line of string in pretty-print + * mode. * - * @param newChild - the new node to put in the child list - * @param oldChild - the node being replaced in the list + * @param options - serialization options + * @param level - current depth of the XML tree + * @param isArray - whether this line is an array item + */ + YAMLWriter.prototype._beginLine = function (options, level, isArray) { + if (isArray === void 0) { isArray = false; } + var indentLevel = options.offset + level + 1; + var chars = new Array(indentLevel).join(options.indent); + if (isArray) { + return chars.substr(0, chars.length - 2) + '-' + chars.substr(-1, 1); + } + else { + return chars; + } + }; + /** + * Produces characters to be appended to a line of string in pretty-print + * mode. * - * @returns the removed child node + * @param options - serialization options */ - NodeImpl.prototype.replaceChild = function (newChild, oldChild) { - /** - * The replaceChild(node, child) method, when invoked, must return the - * result of replacing child with node within context object. - */ - return algorithm_1.mutation_replace(oldChild, newChild, this); + YAMLWriter.prototype._endLine = function (options) { + return options.newline; }; /** - * Removes the child node indicated by `oldChild` from the list of - * children, and returns it. - * - * @param oldChild - the node being removed from the list - * - * @returns the removed child node - */ - NodeImpl.prototype.removeChild = function (oldChild) { - /** - * The removeChild(child) method, when invoked, must return the result of - * pre-removing child from context object. - */ - return algorithm_1.mutation_preRemove(oldChild, this); + * Produces a YAML key string delimited with double quotes. + */ + YAMLWriter.prototype._key = function (key) { + return "\"" + key + "\":"; }; /** - * Gets the parent event target for the given event. - * - * @param event - an event + * Produces a YAML value string delimited with double quotes. */ - NodeImpl.prototype._getTheParent = function (event) { - /** - * A node’s get the parent algorithm, given an event, returns the node’s - * assigned slot, if node is assigned, and node’s parent otherwise. - */ - if (util_1.Guard.isSlotable(this) && algorithm_1.shadowTree_isAssigned(this)) { - return this._assignedSlot; - } - else { - return this._parent; - } + YAMLWriter.prototype._val = function (val) { + return JSON.stringify(val); }; - NodeImpl.ELEMENT_NODE = 1; - NodeImpl.ATTRIBUTE_NODE = 2; - NodeImpl.TEXT_NODE = 3; - NodeImpl.CDATA_SECTION_NODE = 4; - NodeImpl.ENTITY_REFERENCE_NODE = 5; - NodeImpl.ENTITY_NODE = 6; - NodeImpl.PROCESSING_INSTRUCTION_NODE = 7; - NodeImpl.COMMENT_NODE = 8; - NodeImpl.DOCUMENT_NODE = 9; - NodeImpl.DOCUMENT_TYPE_NODE = 10; - NodeImpl.DOCUMENT_FRAGMENT_NODE = 11; - NodeImpl.NOTATION_NODE = 12; - NodeImpl.DOCUMENT_POSITION_DISCONNECTED = 0x01; - NodeImpl.DOCUMENT_POSITION_PRECEDING = 0x02; - NodeImpl.DOCUMENT_POSITION_FOLLOWING = 0x04; - NodeImpl.DOCUMENT_POSITION_CONTAINS = 0x08; - NodeImpl.DOCUMENT_POSITION_CONTAINED_BY = 0x10; - NodeImpl.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20; - return NodeImpl; -}(EventTargetImpl_1.EventTargetImpl)); -exports.NodeImpl = NodeImpl; -/** - * A performance tweak to share an empty set between all node classes. This will - * be overwritten by element, document and document fragment nodes to supply an - * actual set of nodes. - */ -NodeImpl.prototype._children = new util_1.EmptySet(); -/** - * Define constants on prototype. - */ -WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "ELEMENT_NODE", 1); -WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "ATTRIBUTE_NODE", 2); -WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "TEXT_NODE", 3); -WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "CDATA_SECTION_NODE", 4); -WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "ENTITY_REFERENCE_NODE", 5); -WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "ENTITY_NODE", 6); -WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "PROCESSING_INSTRUCTION_NODE", 7); -WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "COMMENT_NODE", 8); -WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "DOCUMENT_NODE", 9); -WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "DOCUMENT_TYPE_NODE", 10); -WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "DOCUMENT_FRAGMENT_NODE", 11); -WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "NOTATION_NODE", 12); -WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "DOCUMENT_POSITION_DISCONNECTED", 0x01); -WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "DOCUMENT_POSITION_PRECEDING", 0x02); -WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "DOCUMENT_POSITION_FOLLOWING", 0x04); -WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "DOCUMENT_POSITION_CONTAINS", 0x08); -WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "DOCUMENT_POSITION_CONTAINED_BY", 0x10); -WebIDLAlgorithm_1.idl_defineConst(NodeImpl.prototype, "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", 0x20); -//# sourceMappingURL=NodeImpl.js.map + return YAMLWriter; +}(BaseWriter_1.BaseWriter)); +exports.YAMLWriter = YAMLWriter; +//# sourceMappingURL=YAMLWriter.js.map + +/***/ }), + +/***/ 7476: +/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { + +"use strict"; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +var MapWriter_1 = __nccwpck_require__(1397); +exports.MapWriter = MapWriter_1.MapWriter; +var XMLWriter_1 = __nccwpck_require__(9606); +exports.XMLWriter = XMLWriter_1.XMLWriter; +var ObjectWriter_1 = __nccwpck_require__(243); +exports.ObjectWriter = ObjectWriter_1.ObjectWriter; +var JSONWriter_1 = __nccwpck_require__(7510); +exports.JSONWriter = JSONWriter_1.JSONWriter; +var YAMLWriter_1 = __nccwpck_require__(6517); +exports.YAMLWriter = YAMLWriter_1.YAMLWriter; +//# sourceMappingURL=index.js.map + +/***/ }), + +/***/ 4091: +/***/ ((module) => { + +"use strict"; + +module.exports = function (Yallist) { + Yallist.prototype[Symbol.iterator] = function* () { + for (let walker = this.head; walker; walker = walker.next) { + yield walker.value + } + } +} + /***/ }), -/* 936 */, -/* 937 */, -/* 938 */, -/* 939 */, -/* 940 */, -/* 941 */, -/* 942 */, -/* 943 */, -/* 944 */, -/* 945 */ -/***/ (function(module, __unusedexports, __webpack_require__) { + +/***/ 665: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { "use strict"; +module.exports = Yallist -var YAMLException = __webpack_require__(556); +Yallist.Node = Node +Yallist.create = Yallist -var TYPE_CONSTRUCTOR_OPTIONS = [ - 'kind', - 'resolve', - 'construct', - 'instanceOf', - 'predicate', - 'represent', - 'defaultStyle', - 'styleAliases' -]; +function Yallist (list) { + var self = this + if (!(self instanceof Yallist)) { + self = new Yallist() + } -var YAML_NODE_KINDS = [ - 'scalar', - 'sequence', - 'mapping' -]; + self.tail = null + self.head = null + self.length = 0 -function compileStyleAliases(map) { - var result = {}; + if (list && typeof list.forEach === 'function') { + list.forEach(function (item) { + self.push(item) + }) + } else if (arguments.length > 0) { + for (var i = 0, l = arguments.length; i < l; i++) { + self.push(arguments[i]) + } + } - if (map !== null) { - Object.keys(map).forEach(function (style) { - map[style].forEach(function (alias) { - result[String(alias)] = style; - }); - }); + return self +} + +Yallist.prototype.removeNode = function (node) { + if (node.list !== this) { + throw new Error('removing node which does not belong to this list') } - return result; + var next = node.next + var prev = node.prev + + if (next) { + next.prev = prev + } + + if (prev) { + prev.next = next + } + + if (node === this.head) { + this.head = next + } + if (node === this.tail) { + this.tail = prev + } + + node.list.length-- + node.next = null + node.prev = null + node.list = null + + return next } -function Type(tag, options) { - options = options || {}; +Yallist.prototype.unshiftNode = function (node) { + if (node === this.head) { + return + } - Object.keys(options).forEach(function (name) { - if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { - throw new YAMLException('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); - } - }); + if (node.list) { + node.list.removeNode(node) + } - // TODO: Add tag format check. - this.tag = tag; - this.kind = options['kind'] || null; - this.resolve = options['resolve'] || function () { return true; }; - this.construct = options['construct'] || function (data) { return data; }; - this.instanceOf = options['instanceOf'] || null; - this.predicate = options['predicate'] || null; - this.represent = options['represent'] || null; - this.defaultStyle = options['defaultStyle'] || null; - this.styleAliases = compileStyleAliases(options['styleAliases'] || null); + var head = this.head + node.list = this + node.next = head + if (head) { + head.prev = node + } - if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { - throw new YAMLException('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + this.head = node + if (!this.tail) { + this.tail = node } + this.length++ } -module.exports = Type; +Yallist.prototype.pushNode = function (node) { + if (node === this.tail) { + return + } + if (node.list) { + node.list.removeNode(node) + } -/***/ }), -/* 946 */, -/* 947 */ -/***/ (function(__unusedmodule, exports) { + var tail = this.tail + node.list = this + node.prev = tail + if (tail) { + tail.next = node + } -"use strict"; + this.tail = node + if (!this.head) { + this.head = node + } + this.length++ +} -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Represents an object with lazy initialization. - */ -var Lazy = /** @class */ (function () { - /** - * Initializes a new instance of `Lazy`. - * - * @param initFunc - initializer function - */ - function Lazy(initFunc) { - this._initialized = false; - this._value = undefined; - this._initFunc = initFunc; - } - Object.defineProperty(Lazy.prototype, "value", { - /** - * Gets the value of the object. - */ - get: function () { - if (!this._initialized) { - this._value = this._initFunc(); - this._initialized = true; - } - return this._value; - }, - enumerable: true, - configurable: true - }); - return Lazy; -}()); -exports.Lazy = Lazy; -//# sourceMappingURL=Lazy.js.map +Yallist.prototype.push = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + push(this, arguments[i]) + } + return this.length +} -/***/ }), -/* 948 */, -/* 949 */, -/* 950 */ -/***/ (function(__unusedmodule, exports) { +Yallist.prototype.unshift = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + unshift(this, arguments[i]) + } + return this.length +} -"use strict"; +Yallist.prototype.pop = function () { + if (!this.tail) { + return undefined + } -Object.defineProperty(exports, "__esModule", { value: true }); -function getProxyUrl(reqUrl) { - let usingSsl = reqUrl.protocol === 'https:'; - let proxyUrl; - if (checkBypass(reqUrl)) { - return proxyUrl; - } - let proxyVar; - if (usingSsl) { - proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY']; - } - else { - proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY']; - } - if (proxyVar) { - proxyUrl = new URL(proxyVar); - } - return proxyUrl; + var res = this.tail.value + this.tail = this.tail.prev + if (this.tail) { + this.tail.next = null + } else { + this.head = null + } + this.length-- + return res } -exports.getProxyUrl = getProxyUrl; -function checkBypass(reqUrl) { - if (!reqUrl.hostname) { - return false; - } - let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; - if (!noProxy) { - return false; - } - // Determine the request port - let reqPort; - if (reqUrl.port) { - reqPort = Number(reqUrl.port); - } - else if (reqUrl.protocol === 'http:') { - reqPort = 80; - } - else if (reqUrl.protocol === 'https:') { - reqPort = 443; - } - // Format the request hostname and hostname with port - let upperReqHosts = [reqUrl.hostname.toUpperCase()]; - if (typeof reqPort === 'number') { - upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); - } - // Compare request host against noproxy - for (let upperNoProxyItem of noProxy - .split(',') - .map(x => x.trim().toUpperCase()) - .filter(x => x)) { - if (upperReqHosts.some(x => x === upperNoProxyItem)) { - return true; - } - } - return false; + +Yallist.prototype.shift = function () { + if (!this.head) { + return undefined + } + + var res = this.head.value + this.head = this.head.next + if (this.head) { + this.head.prev = null + } else { + this.tail = null + } + this.length-- + return res } -exports.checkBypass = checkBypass; +Yallist.prototype.forEach = function (fn, thisp) { + thisp = thisp || this + for (var walker = this.head, i = 0; walker !== null; i++) { + fn.call(thisp, walker.value, i, this) + walker = walker.next + } +} -/***/ }), -/* 951 */, -/* 952 */, -/* 953 */, -/* 954 */ -/***/ (function(module) { +Yallist.prototype.forEachReverse = function (fn, thisp) { + thisp = thisp || this + for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { + fn.call(thisp, walker.value, i, this) + walker = walker.prev + } +} -const numeric = /^[0-9]+$/ -const compareIdentifiers = (a, b) => { - const anum = numeric.test(a) - const bnum = numeric.test(b) +Yallist.prototype.get = function (n) { + for (var i = 0, walker = this.head; walker !== null && i < n; i++) { + // abort out of the list early if we hit a cycle + walker = walker.next + } + if (i === n && walker !== null) { + return walker.value + } +} + +Yallist.prototype.getReverse = function (n) { + for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { + // abort out of the list early if we hit a cycle + walker = walker.prev + } + if (i === n && walker !== null) { + return walker.value + } +} + +Yallist.prototype.map = function (fn, thisp) { + thisp = thisp || this + var res = new Yallist() + for (var walker = this.head; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)) + walker = walker.next + } + return res +} + +Yallist.prototype.mapReverse = function (fn, thisp) { + thisp = thisp || this + var res = new Yallist() + for (var walker = this.tail; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)) + walker = walker.prev + } + return res +} + +Yallist.prototype.reduce = function (fn, initial) { + var acc + var walker = this.head + if (arguments.length > 1) { + acc = initial + } else if (this.head) { + walker = this.head.next + acc = this.head.value + } else { + throw new TypeError('Reduce of empty list with no initial value') + } + + for (var i = 0; walker !== null; i++) { + acc = fn(acc, walker.value, i) + walker = walker.next + } + + return acc +} + +Yallist.prototype.reduceReverse = function (fn, initial) { + var acc + var walker = this.tail + if (arguments.length > 1) { + acc = initial + } else if (this.tail) { + walker = this.tail.prev + acc = this.tail.value + } else { + throw new TypeError('Reduce of empty list with no initial value') + } + + for (var i = this.length - 1; walker !== null; i--) { + acc = fn(acc, walker.value, i) + walker = walker.prev + } + + return acc +} + +Yallist.prototype.toArray = function () { + var arr = new Array(this.length) + for (var i = 0, walker = this.head; walker !== null; i++) { + arr[i] = walker.value + walker = walker.next + } + return arr +} + +Yallist.prototype.toArrayReverse = function () { + var arr = new Array(this.length) + for (var i = 0, walker = this.tail; walker !== null; i++) { + arr[i] = walker.value + walker = walker.prev + } + return arr +} + +Yallist.prototype.slice = function (from, to) { + to = to || this.length + if (to < 0) { + to += this.length + } + from = from || 0 + if (from < 0) { + from += this.length + } + var ret = new Yallist() + if (to < from || to < 0) { + return ret + } + if (from < 0) { + from = 0 + } + if (to > this.length) { + to = this.length + } + for (var i = 0, walker = this.head; walker !== null && i < from; i++) { + walker = walker.next + } + for (; walker !== null && i < to; i++, walker = walker.next) { + ret.push(walker.value) + } + return ret +} + +Yallist.prototype.sliceReverse = function (from, to) { + to = to || this.length + if (to < 0) { + to += this.length + } + from = from || 0 + if (from < 0) { + from += this.length + } + var ret = new Yallist() + if (to < from || to < 0) { + return ret + } + if (from < 0) { + from = 0 + } + if (to > this.length) { + to = this.length + } + for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { + walker = walker.prev + } + for (; walker !== null && i > from; i--, walker = walker.prev) { + ret.push(walker.value) + } + return ret +} + +Yallist.prototype.splice = function (start, deleteCount, ...nodes) { + if (start > this.length) { + start = this.length - 1 + } + if (start < 0) { + start = this.length + start; + } + + for (var i = 0, walker = this.head; walker !== null && i < start; i++) { + walker = walker.next + } + + var ret = [] + for (var i = 0; walker && i < deleteCount; i++) { + ret.push(walker.value) + walker = this.removeNode(walker) + } + if (walker === null) { + walker = this.tail + } + + if (walker !== this.head && walker !== this.tail) { + walker = walker.prev + } + + for (var i = 0; i < nodes.length; i++) { + walker = insert(this, walker, nodes[i]) + } + return ret; +} + +Yallist.prototype.reverse = function () { + var head = this.head + var tail = this.tail + for (var walker = head; walker !== null; walker = walker.prev) { + var p = walker.prev + walker.prev = walker.next + walker.next = p + } + this.head = tail + this.tail = head + return this +} + +function insert (self, node, value) { + var inserted = node === self.head ? + new Node(value, null, node, self) : + new Node(value, node, node.next, self) + + if (inserted.next === null) { + self.tail = inserted + } + if (inserted.prev === null) { + self.head = inserted + } + + self.length++ + + return inserted +} + +function push (self, item) { + self.tail = new Node(item, self.tail, null, self) + if (!self.head) { + self.head = self.tail + } + self.length++ +} + +function unshift (self, item) { + self.head = new Node(item, null, self.head, self) + if (!self.tail) { + self.tail = self.head + } + self.length++ +} - if (anum && bnum) { - a = +a - b = +b +function Node (value, prev, next, list) { + if (!(this instanceof Node)) { + return new Node(value, prev, next, list) } - return a === b ? 0 - : (anum && !bnum) ? -1 - : (bnum && !anum) ? 1 - : a < b ? -1 - : 1 -} + this.list = list + this.value = value -const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a) + if (prev) { + prev.next = this + this.prev = prev + } else { + this.prev = null + } -module.exports = { - compareIdentifiers, - rcompareIdentifiers + if (next) { + next.prev = this + this.next = next + } else { + this.next = null + } } +try { + // add if support for Symbol.iterator is present + __nccwpck_require__(4091)(Yallist) +} catch (er) {} + /***/ }), -/* 955 */, -/* 956 */, -/* 957 */, -/* 958 */, -/* 959 */, -/* 960 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const SemVer = __webpack_require__(65) -const Range = __webpack_require__(124) -const gt = __webpack_require__(486) -const minVersion = (range, loose) => { - range = new Range(range, loose) +/***/ 2357: +/***/ ((module) => { - let minver = new SemVer('0.0.0') - if (range.test(minver)) { - return minver - } +"use strict"; +module.exports = require("assert");; - minver = new SemVer('0.0.0-0') - if (range.test(minver)) { - return minver - } +/***/ }), - minver = null - for (let i = 0; i < range.set.length; ++i) { - const comparators = range.set[i] +/***/ 3129: +/***/ ((module) => { - let setMin = null - comparators.forEach((comparator) => { - // Clone to avoid manipulating the comparator's semver object. - const compver = new SemVer(comparator.semver.version) - switch (comparator.operator) { - case '>': - if (compver.prerelease.length === 0) { - compver.patch++ - } else { - compver.prerelease.push(0) - } - compver.raw = compver.format() - /* fallthrough */ - case '': - case '>=': - if (!setMin || gt(compver, setMin)) { - setMin = compver - } - break - case '<': - case '<=': - /* Ignore maximum versions */ - break - /* istanbul ignore next */ - default: - throw new Error(`Unexpected operation: ${comparator.operator}`) - } - }) - if (setMin && (!minver || gt(minver, setMin))) - minver = setMin - } +"use strict"; +module.exports = require("child_process");; - if (minver && range.test(minver)) { - return minver - } +/***/ }), - return null -} -module.exports = minVersion +/***/ 3373: +/***/ ((module) => { +"use strict"; +module.exports = require("crypto");; /***/ }), -/* 961 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { -"use strict"; +/***/ 8614: +/***/ ((module) => { -Object.defineProperty(exports, "__esModule", { value: true }); -var interfaces_1 = __webpack_require__(625); -var util_1 = __webpack_require__(592); -var util_2 = __webpack_require__(918); -var _1 = __webpack_require__(535); -var dom_1 = __webpack_require__(743); -/** @inheritdoc */ -function builder(p1, p2) { - var options = formatBuilderOptions(isXMLBuilderCreateOptions(p1) ? p1 : interfaces_1.DefaultBuilderOptions); - var nodes = util_2.Guard.isNode(p1) || util_1.isArray(p1) ? p1 : p2; - if (nodes === undefined) { - throw new Error("Invalid arguments."); - } - if (util_1.isArray(nodes)) { - var builders = []; - for (var i = 0; i < nodes.length; i++) { - var builder_1 = new _1.XMLBuilderImpl(nodes[i]); - builder_1.set(options); - builders.push(builder_1); - } - return builders; - } - else { - var builder_2 = new _1.XMLBuilderImpl(nodes); - builder_2.set(options); - return builder_2; - } -} -exports.builder = builder; -/** @inheritdoc */ -function create(p1, p2) { - var options = formatBuilderOptions(p1 === undefined || isXMLBuilderCreateOptions(p1) ? - p1 : interfaces_1.DefaultBuilderOptions); - var contents = isXMLBuilderCreateOptions(p1) ? p2 : p1; - var doc = dom_1.createDocument(); - setOptions(doc, options); - var builder = new _1.XMLBuilderImpl(doc); - if (contents !== undefined) { - // parse contents - builder.ele(contents); - } - return builder; -} -exports.create = create; -/** @inheritdoc */ -function fragment(p1, p2) { - var options = formatBuilderOptions(p1 === undefined || isXMLBuilderCreateOptions(p1) ? - p1 : interfaces_1.DefaultBuilderOptions); - var contents = isXMLBuilderCreateOptions(p1) ? p2 : p1; - var doc = dom_1.createDocument(); - setOptions(doc, options, true); - var builder = new _1.XMLBuilderImpl(doc.createDocumentFragment()); - if (contents !== undefined) { - // parse contents - builder.ele(contents); - } - return builder; -} -exports.fragment = fragment; -/** @inheritdoc */ -function convert(p1, p2, p3) { - var builderOptions; - var contents; - var convertOptions; - if (isXMLBuilderCreateOptions(p1) && p2 !== undefined) { - builderOptions = p1; - contents = p2; - convertOptions = p3; - } - else { - builderOptions = interfaces_1.DefaultBuilderOptions; - contents = p1; - convertOptions = p2 || undefined; - } - return create(builderOptions, contents).end(convertOptions); -} -exports.convert = convert; -function isXMLBuilderCreateOptions(obj) { - if (!util_1.isPlainObject(obj)) - return false; - for (var key in obj) { - /* istanbul ignore else */ - if (obj.hasOwnProperty(key)) { - if (!interfaces_1.XMLBuilderOptionKeys.has(key)) - return false; - } - } - return true; -} -function formatBuilderOptions(createOptions) { - if (createOptions === void 0) { createOptions = {}; } - var options = util_1.applyDefaults(createOptions, interfaces_1.DefaultBuilderOptions); - if (options.convert.att.length === 0 || - options.convert.ins.length === 0 || - options.convert.text.length === 0 || - options.convert.cdata.length === 0 || - options.convert.comment.length === 0) { - throw new Error("JS object converter strings cannot be zero length."); - } - return options; -} -function setOptions(doc, options, isFragment) { - var docWithSettings = doc; - docWithSettings._xmlBuilderOptions = options; - docWithSettings._isFragment = isFragment; -} -//# sourceMappingURL=BuilderFunctions.js.map +"use strict"; +module.exports = require("events");; /***/ }), -/* 962 */, -/* 963 */, -/* 964 */, -/* 965 */, -/* 966 */, -/* 967 */, -/* 968 */ -/***/ (function(__unusedmodule, exports) { -"use strict"; +/***/ 5747: +/***/ ((module) => { -Object.defineProperty(exports, "__esModule", { value: true }); -var EmptySet = /** @class */ (function () { - function EmptySet() { - } - Object.defineProperty(EmptySet.prototype, "size", { - get: function () { - return 0; - }, - enumerable: true, - configurable: true - }); - EmptySet.prototype.add = function (value) { - throw new Error("Cannot add to an empty set."); - }; - EmptySet.prototype.clear = function () { - // no-op - }; - EmptySet.prototype.delete = function (value) { - return false; - }; - EmptySet.prototype.forEach = function (callbackfn, thisArg) { - // no-op - }; - EmptySet.prototype.has = function (value) { - return false; - }; - EmptySet.prototype[Symbol.iterator] = function () { - return new EmptySetIterator(); - }; - EmptySet.prototype.entries = function () { - return new EmptySetIterator(); - }; - EmptySet.prototype.keys = function () { - return new EmptySetIterator(); - }; - EmptySet.prototype.values = function () { - return new EmptySetIterator(); - }; - Object.defineProperty(EmptySet.prototype, Symbol.toStringTag, { - get: function () { - return "EmptySet"; - }, - enumerable: true, - configurable: true - }); - return EmptySet; -}()); -exports.EmptySet = EmptySet; -var EmptySetIterator = /** @class */ (function () { - function EmptySetIterator() { - } - EmptySetIterator.prototype[Symbol.iterator] = function () { - return this; - }; - EmptySetIterator.prototype.next = function () { - return { done: true, value: null }; - }; - return EmptySetIterator; -}()); -//# sourceMappingURL=EmptySet.js.map +"use strict"; +module.exports = require("fs");; /***/ }), -/* 969 */, -/* 970 */ -/***/ (function(__unusedmodule, exports) { -"use strict"; +/***/ 8605: +/***/ ((module) => { -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Defines the position of a boundary point relative to another. - */ -var BoundaryPosition; -(function (BoundaryPosition) { - BoundaryPosition[BoundaryPosition["Before"] = 0] = "Before"; - BoundaryPosition[BoundaryPosition["Equal"] = 1] = "Equal"; - BoundaryPosition[BoundaryPosition["After"] = 2] = "After"; -})(BoundaryPosition = exports.BoundaryPosition || (exports.BoundaryPosition = {})); -/** - * Defines the event phase. - */ -var EventPhase; -(function (EventPhase) { - EventPhase[EventPhase["None"] = 0] = "None"; - EventPhase[EventPhase["Capturing"] = 1] = "Capturing"; - EventPhase[EventPhase["AtTarget"] = 2] = "AtTarget"; - EventPhase[EventPhase["Bubbling"] = 3] = "Bubbling"; -})(EventPhase = exports.EventPhase || (exports.EventPhase = {})); -/** - * Defines the type of a node object. - */ -var NodeType; -(function (NodeType) { - NodeType[NodeType["Element"] = 1] = "Element"; - NodeType[NodeType["Attribute"] = 2] = "Attribute"; - NodeType[NodeType["Text"] = 3] = "Text"; - NodeType[NodeType["CData"] = 4] = "CData"; - NodeType[NodeType["EntityReference"] = 5] = "EntityReference"; - NodeType[NodeType["Entity"] = 6] = "Entity"; - NodeType[NodeType["ProcessingInstruction"] = 7] = "ProcessingInstruction"; - NodeType[NodeType["Comment"] = 8] = "Comment"; - NodeType[NodeType["Document"] = 9] = "Document"; - NodeType[NodeType["DocumentType"] = 10] = "DocumentType"; - NodeType[NodeType["DocumentFragment"] = 11] = "DocumentFragment"; - NodeType[NodeType["Notation"] = 12] = "Notation"; // historical -})(NodeType = exports.NodeType || (exports.NodeType = {})); -/** - * Defines the position of a node in the document relative to another - * node. - */ -var Position; -(function (Position) { - Position[Position["Disconnected"] = 1] = "Disconnected"; - Position[Position["Preceding"] = 2] = "Preceding"; - Position[Position["Following"] = 4] = "Following"; - Position[Position["Contains"] = 8] = "Contains"; - Position[Position["ContainedBy"] = 16] = "ContainedBy"; - Position[Position["ImplementationSpecific"] = 32] = "ImplementationSpecific"; -})(Position = exports.Position || (exports.Position = {})); -/** - * Defines the return value of a filter callback. - */ -var FilterResult; -(function (FilterResult) { - FilterResult[FilterResult["Accept"] = 1] = "Accept"; - FilterResult[FilterResult["Reject"] = 2] = "Reject"; - FilterResult[FilterResult["Skip"] = 3] = "Skip"; -})(FilterResult = exports.FilterResult || (exports.FilterResult = {})); -/** - * Defines what to show in node filter. - */ -var WhatToShow; -(function (WhatToShow) { - WhatToShow[WhatToShow["All"] = 4294967295] = "All"; - WhatToShow[WhatToShow["Element"] = 1] = "Element"; - WhatToShow[WhatToShow["Attribute"] = 2] = "Attribute"; - WhatToShow[WhatToShow["Text"] = 4] = "Text"; - WhatToShow[WhatToShow["CDataSection"] = 8] = "CDataSection"; - WhatToShow[WhatToShow["EntityReference"] = 16] = "EntityReference"; - WhatToShow[WhatToShow["Entity"] = 32] = "Entity"; - WhatToShow[WhatToShow["ProcessingInstruction"] = 64] = "ProcessingInstruction"; - WhatToShow[WhatToShow["Comment"] = 128] = "Comment"; - WhatToShow[WhatToShow["Document"] = 256] = "Document"; - WhatToShow[WhatToShow["DocumentType"] = 512] = "DocumentType"; - WhatToShow[WhatToShow["DocumentFragment"] = 1024] = "DocumentFragment"; - WhatToShow[WhatToShow["Notation"] = 2048] = "Notation"; -})(WhatToShow = exports.WhatToShow || (exports.WhatToShow = {})); -/** - * Defines how boundary points are compared. - */ -var HowToCompare; -(function (HowToCompare) { - HowToCompare[HowToCompare["StartToStart"] = 0] = "StartToStart"; - HowToCompare[HowToCompare["StartToEnd"] = 1] = "StartToEnd"; - HowToCompare[HowToCompare["EndToEnd"] = 2] = "EndToEnd"; - HowToCompare[HowToCompare["EndToStart"] = 3] = "EndToStart"; -})(HowToCompare = exports.HowToCompare || (exports.HowToCompare = {})); -//# sourceMappingURL=interfaces.js.map +"use strict"; +module.exports = require("http");; /***/ }), -/* 971 */, -/* 972 */, -/* 973 */, -/* 974 */, -/* 975 */, -/* 976 */ -/***/ (function(module, exports, __webpack_require__) { - -const { MAX_SAFE_COMPONENT_LENGTH } = __webpack_require__(181) -const debug = __webpack_require__(548) -exports = module.exports = {} -// The actual regexps go on exports.re -const re = exports.re = [] -const src = exports.src = [] -const t = exports.t = {} -let R = 0 +/***/ 7211: +/***/ ((module) => { -const createToken = (name, value, isGlobal) => { - const index = R++ - debug(index, value) - t[name] = index - src[index] = value - re[index] = new RegExp(value, isGlobal ? 'g' : undefined) -} +"use strict"; +module.exports = require("https");; -// The following Regular Expressions can be used for tokenizing, -// validating, and parsing SemVer version strings. +/***/ }), -// ## Numeric Identifier -// A single `0`, or a non-zero digit followed by zero or more digits. +/***/ 1631: +/***/ ((module) => { -createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*') -createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+') +"use strict"; +module.exports = require("net");; -// ## Non-numeric Identifier -// Zero or more digits, followed by a letter or hyphen, and then zero or -// more letters, digits, or hyphens. +/***/ }), -createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*') +/***/ 2087: +/***/ ((module) => { -// ## Main Version -// Three dot-separated numeric identifiers. +"use strict"; +module.exports = require("os");; -createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + - `(${src[t.NUMERICIDENTIFIER]})\\.` + - `(${src[t.NUMERICIDENTIFIER]})`) +/***/ }), -createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + - `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + - `(${src[t.NUMERICIDENTIFIERLOOSE]})`) +/***/ 5622: +/***/ ((module) => { -// ## Pre-release Version Identifier -// A numeric identifier, or a non-numeric identifier. +"use strict"; +module.exports = require("path");; -createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] -}|${src[t.NONNUMERICIDENTIFIER]})`) +/***/ }), -createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] -}|${src[t.NONNUMERICIDENTIFIER]})`) +/***/ 2413: +/***/ ((module) => { -// ## Pre-release Version -// Hyphen, followed by one or more dot-separated pre-release version -// identifiers. +"use strict"; +module.exports = require("stream");; -createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] -}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`) +/***/ }), -createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] -}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`) +/***/ 8818: +/***/ ((module) => { -// ## Build Metadata Identifier -// Any combination of digits, letters, or hyphens. +"use strict"; +module.exports = require("tls");; -createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+') +/***/ }), -// ## Build Metadata -// Plus sign, followed by one or more period-separated build metadata -// identifiers. +/***/ 8835: +/***/ ((module) => { -createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] -}(?:\\.${src[t.BUILDIDENTIFIER]})*))`) +"use strict"; +module.exports = require("url");; -// ## Full Version String -// A main version, followed optionally by a pre-release version and -// build metadata. +/***/ }), -// Note that the only major, minor, patch, and pre-release sections of -// the version string are capturing groups. The build metadata is not a -// capturing group, because it should not ever be used in version -// comparison. +/***/ 1669: +/***/ ((module) => { -createToken('FULLPLAIN', `v?${src[t.MAINVERSION] -}${src[t.PRERELEASE]}?${ - src[t.BUILD]}?`) +"use strict"; +module.exports = require("util");; -createToken('FULL', `^${src[t.FULLPLAIN]}$`) +/***/ }) -// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. -// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty -// common in the npm registry. -createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] -}${src[t.PRERELEASELOOSE]}?${ - src[t.BUILD]}?`) +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __nccwpck_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ var threw = true; +/******/ try { +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __nccwpck_require__); +/******/ threw = false; +/******/ } finally { +/******/ if(threw) delete __webpack_module_cache__[moduleId]; +/******/ } +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __nccwpck_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __nccwpck_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* 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 + "/";/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; +// ESM COMPAT FLAG +__nccwpck_require__.r(__webpack_exports__); + +// EXTERNAL MODULE: ./node_modules/@actions/core/lib/core.js +var core = __nccwpck_require__(2186); +// EXTERNAL MODULE: external "path" +var external_path_ = __nccwpck_require__(5622); +var external_path_default = /*#__PURE__*/__nccwpck_require__.n(external_path_); +// EXTERNAL MODULE: ./node_modules/@actions/io/lib/io.js +var io = __nccwpck_require__(7436); +// EXTERNAL MODULE: external "fs" +var external_fs_ = __nccwpck_require__(5747); +var external_fs_default = /*#__PURE__*/__nccwpck_require__.n(external_fs_); +// EXTERNAL MODULE: external "os" +var external_os_ = __nccwpck_require__(2087); +var external_os_default = /*#__PURE__*/__nccwpck_require__.n(external_os_); +// EXTERNAL MODULE: ./node_modules/xmlbuilder2/lib/index.js +var lib = __nccwpck_require__(151); +;// CONCATENATED MODULE: ./src/constants.ts +const MACOS_JAVA_CONTENT_POSTFIX = 'Contents/Home'; +const INPUT_JAVA_VERSION = 'java-version'; +const INPUT_ARCHITECTURE = 'architecture'; +const INPUT_JAVA_PACKAGE = 'java-package'; +const INPUT_DISTRIBUTION = 'distribution'; +const INPUT_JDK_FILE = 'jdkFile'; +const INPUT_CHECK_LATEST = 'check-latest'; +const INPUT_SERVER_ID = 'server-id'; +const INPUT_SERVER_USERNAME = 'server-username'; +const INPUT_SERVER_PASSWORD = 'server-password'; +const INPUT_SETTINGS_PATH = 'settings-path'; +const INPUT_OVERWRITE_SETTINGS = 'overwrite-settings'; +const INPUT_GPG_PRIVATE_KEY = 'gpg-private-key'; +const INPUT_GPG_PASSPHRASE = 'gpg-passphrase'; +const INPUT_DEFAULT_GPG_PRIVATE_KEY = undefined; +const INPUT_DEFAULT_GPG_PASSPHRASE = 'GPG_PASSPHRASE'; +const STATE_GPG_PRIVATE_KEY_FINGERPRINT = 'gpg-private-key-fingerprint'; + +// EXTERNAL MODULE: ./node_modules/@actions/exec/lib/exec.js +var lib_exec = __nccwpck_require__(1514); +// EXTERNAL MODULE: ./node_modules/semver/index.js +var semver = __nccwpck_require__(1383); +var semver_default = /*#__PURE__*/__nccwpck_require__.n(semver); +// EXTERNAL MODULE: ./node_modules/@actions/tool-cache/lib/tool-cache.js +var tool_cache = __nccwpck_require__(7784); +;// CONCATENATED MODULE: ./src/util.ts +var __awaiter = (undefined && undefined.__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()); + }); +}; -createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`) -createToken('GTLT', '((?:<|>)?=?)') -// Something like "2.*" or "1.2.x". -// Note that "x.x" is a valid xRange identifer, meaning "any version" -// Only the first item is strictly required. -createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`) -createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`) -createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + - `(?:${src[t.PRERELEASE]})?${ - src[t.BUILD]}?` + - `)?)?`) -createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:${src[t.PRERELEASELOOSE]})?${ - src[t.BUILD]}?` + - `)?)?`) -createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`) -createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`) +function getTempDir() { + let tempDirectory = process.env['RUNNER_TEMP'] || external_os_default().tmpdir(); + return tempDirectory; +} +function getBooleanInput(inputName, defaultValue = false) { + return (core.getInput(inputName) || String(defaultValue)).toUpperCase() === 'TRUE'; +} +function getVersionFromToolcachePath(toolPath) { + if (toolPath) { + return path.basename(path.dirname(toolPath)); + } + return toolPath; +} +function extractJdkFile(toolPath, extension) { + return __awaiter(this, void 0, void 0, function* () { + if (!extension) { + extension = toolPath.endsWith('.tar.gz') ? 'tar.gz' : external_path_default().extname(toolPath); + if (extension.startsWith('.')) { + extension = extension.substring(1); + } + } + switch (extension) { + case 'tar.gz': + case 'tar': + return yield tool_cache.extractTar(toolPath); + case 'zip': + return yield tool_cache.extractZip(toolPath); + default: + return yield tool_cache.extract7z(toolPath); + } + }); +} +function getDownloadArchiveExtension() { + return process.platform === 'win32' ? 'zip' : 'tar.gz'; +} +function isVersionSatisfies(range, version) { + var _a; + if (semver.valid(range)) { + // if full version with build digit is provided as a range (such as '1.2.3+4') + // we should check for exact equal via compareBuild + // since semver.satisfies doesn't handle 4th digit + const semRange = semver.parse(range); + if (semRange && ((_a = semRange.build) === null || _a === void 0 ? void 0 : _a.length) > 0) { + return semver.compareBuild(range, version) === 0; + } + } + return semver.satisfies(version, range); +} +function getToolcachePath(toolName, version, architecture) { + var _a; + const toolcacheRoot = (_a = process.env['RUNNER_TOOL_CACHE']) !== null && _a !== void 0 ? _a : ''; + const fullPath = external_path_default().join(toolcacheRoot, toolName, version, architecture); + if (external_fs_.existsSync(fullPath)) { + return fullPath; + } + return null; +} + +;// CONCATENATED MODULE: ./src/gpg.ts +var gpg_awaiter = (undefined && undefined.__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()); + }); +}; -// Coercion. -// Extract anything that could conceivably be a part of a valid semver -createToken('COERCE', `${'(^|[^\\d])' + - '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + - `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + - `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + - `(?:$|[^\\d])`) -createToken('COERCERTL', src[t.COERCE], true) -// Tilde ranges. -// Meaning is "reasonably at or greater than" -createToken('LONETILDE', '(?:~>?)') -createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true) -exports.tildeTrimReplace = '$1~' -createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`) -createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`) -// Caret ranges. -// Meaning is "at least and backwards compatible with" -createToken('LONECARET', '(?:\\^)') +const PRIVATE_KEY_FILE = external_path_.join(getTempDir(), 'private-key.asc'); +const PRIVATE_KEY_FINGERPRINT_REGEX = /\w{40}/; +function importKey(privateKey) { + return gpg_awaiter(this, void 0, void 0, function* () { + external_fs_.writeFileSync(PRIVATE_KEY_FILE, privateKey, { + encoding: 'utf-8', + flag: 'w' + }); + let output = ''; + const options = { + silent: true, + listeners: { + stdout: (data) => { + output += data.toString(); + } + } + }; + yield lib_exec.exec('gpg', ['--batch', '--import-options', 'import-show', '--import', PRIVATE_KEY_FILE], options); + yield io.rmRF(PRIVATE_KEY_FILE); + const match = output.match(PRIVATE_KEY_FINGERPRINT_REGEX); + return match && match[0]; + }); +} +function deleteKey(keyFingerprint) { + return gpg_awaiter(this, void 0, void 0, function* () { + yield exec.exec('gpg', ['--batch', '--yes', '--delete-secret-keys', keyFingerprint], { + silent: true + }); + yield exec.exec('gpg', ['--batch', '--yes', '--delete-keys', keyFingerprint], { silent: true }); + }); +} -createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true) -exports.caretTrimReplace = '$1^' +;// CONCATENATED MODULE: ./src/auth.ts +var auth_awaiter = (undefined && undefined.__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()); + }); +}; -createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`) -createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`) -// A simple gt/lt/eq thing, or just "" to indicate "any version" -createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`) -createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`) -// An expression to strip any whitespace between the gtlt and the thing -// it modifies, so that `> 1.2.3` ==> `>1.2.3` -createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] -}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true) -exports.comparatorTrimReplace = '$1$2$3' -// Something like `1.2.3 - 1.2.4` -// Note that these all use the loose form, because they'll be -// checked against either the strict or loose comparator form -// later. -createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + - `\\s+-\\s+` + - `(${src[t.XRANGEPLAIN]})` + - `\\s*$`) -createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + - `\\s+-\\s+` + - `(${src[t.XRANGEPLAINLOOSE]})` + - `\\s*$`) -// Star ranges basically just allow anything at all. -createToken('STAR', '(<|>)?=?\\s*\\*') -// >=0.0.0 is like a star -createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$') -createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$') -/***/ }), -/* 977 */, -/* 978 */, -/* 979 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { -"use strict"; +const M2_DIR = '.m2'; +const SETTINGS_FILE = 'settings.xml'; +function configureAuthentication() { + return auth_awaiter(this, void 0, void 0, function* () { + const id = core.getInput(INPUT_SERVER_ID); + const username = core.getInput(INPUT_SERVER_USERNAME); + const password = core.getInput(INPUT_SERVER_PASSWORD); + const settingsDirectory = core.getInput(INPUT_SETTINGS_PATH) || external_path_.join(external_os_.homedir(), M2_DIR); + const overwriteSettings = getBooleanInput(INPUT_OVERWRITE_SETTINGS, true); + const gpgPrivateKey = core.getInput(INPUT_GPG_PRIVATE_KEY) || INPUT_DEFAULT_GPG_PRIVATE_KEY; + const gpgPassphrase = core.getInput(INPUT_GPG_PASSPHRASE) || + (gpgPrivateKey ? INPUT_DEFAULT_GPG_PASSPHRASE : undefined); + if (gpgPrivateKey) { + core.setSecret(gpgPrivateKey); + } + yield createAuthenticationSettings(id, username, password, settingsDirectory, overwriteSettings, gpgPassphrase); + if (gpgPrivateKey) { + core.info('Importing private gpg key'); + const keyFingerprint = (yield importKey(gpgPrivateKey)) || ''; + core.saveState(STATE_GPG_PRIVATE_KEY_FINGERPRINT, keyFingerprint); + } + }); +} +function createAuthenticationSettings(id, username, password, settingsDirectory, overwriteSettings, gpgPassphrase = undefined) { + return auth_awaiter(this, void 0, void 0, function* () { + core.info(`Creating ${SETTINGS_FILE} with server-id: ${id}`); + // when an alternate m2 location is specified use only that location (no .m2 directory) + // otherwise use the home/.m2/ path + yield io.mkdirP(settingsDirectory); + yield write(settingsDirectory, generate(id, username, password, gpgPassphrase), overwriteSettings); + }); +} +// only exported for testing purposes +function generate(id, username, password, gpgPassphrase) { + const xmlObj = { + settings: { + '@xmlns': 'http://maven.apache.org/SETTINGS/1.0.0', + '@xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance', + '@xsi:schemaLocation': 'http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd', + servers: { + server: [ + { + id: id, + username: `\${env.${username}}`, + password: `\${env.${password}}` + } + ] + } + } + }; + if (gpgPassphrase) { + const gpgServer = { + id: 'gpg.passphrase', + passphrase: `\${env.${gpgPassphrase}}` + }; + xmlObj.settings.servers.server.push(gpgServer); + } + return (0,lib/* create */.Ue)(xmlObj).end({ + headless: true, + prettyPrint: true, + width: 80 + }); +} +function write(directory, settings, overwriteSettings) { + return auth_awaiter(this, void 0, void 0, function* () { + const location = external_path_.join(directory, SETTINGS_FILE); + const settingsExists = external_fs_.existsSync(location); + if (settingsExists && overwriteSettings) { + core.info(`Overwriting existing file ${location}`); + } + else if (!settingsExists) { + core.info(`Writing to ${location}`); + } + else { + core.info(`Skipping generation ${location} because file already exists and overwriting is not required`); + return; + } + return external_fs_.writeFileSync(location, settings, { + encoding: 'utf-8', + flag: 'w' + }); + }); +} -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { +// EXTERNAL MODULE: ./node_modules/@actions/http-client/index.js +var http_client = __nccwpck_require__(9925); +;// CONCATENATED MODULE: ./src/distributions/base-installer.ts +var base_installer_awaiter = (undefined && undefined.__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); } } @@ -44200,250 +43473,205 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const core = __importStar(__webpack_require__(470)); -/** - * Internal class for retries - */ -class RetryHelper { - constructor(maxAttempts, minSeconds, maxSeconds) { - if (maxAttempts < 1) { - throw new Error('max attempts should be greater than or equal to 1'); - } - this.maxAttempts = maxAttempts; - this.minSeconds = Math.floor(minSeconds); - this.maxSeconds = Math.floor(maxSeconds); - if (this.minSeconds > this.maxSeconds) { - throw new Error('min seconds should be less than or equal to max seconds'); - } + + + + + + + + +class JavaBase { + constructor(distribution, installerOptions) { + this.distribution = distribution; + this.http = new http_client.HttpClient('actions/setup-java', undefined, { + allowRetries: true, + maxRetries: 3 + }); + ({ version: this.version, stable: this.stable } = this.normalizeVersion(installerOptions.version)); + this.architecture = installerOptions.architecture; + this.packageType = installerOptions.packageType; + this.checkLatest = installerOptions.checkLatest; } - execute(action, isRetryable) { - return __awaiter(this, void 0, void 0, function* () { - let attempt = 1; - while (attempt < this.maxAttempts) { - // Try - try { - return yield action(); + setupJava() { + return base_installer_awaiter(this, void 0, void 0, function* () { + let foundJava = this.findInToolcache(); + if (foundJava && !this.checkLatest) { + core.info(`Resolved Java ${foundJava.version} from tool-cache`); + } + else { + core.info('Trying to resolve the latest version from remote'); + const javaRelease = yield this.findPackageForDownload(this.version); + core.info(`Resolved latest version as ${javaRelease.version}`); + if ((foundJava === null || foundJava === void 0 ? void 0 : foundJava.version) === javaRelease.version) { + core.info(`Resolved Java ${foundJava.version} from tool-cache`); } - catch (err) { - if (isRetryable && !isRetryable(err)) { - throw err; - } - core.info(err.message); + else { + core.info('Trying to download...'); + foundJava = yield this.downloadTool(javaRelease); + core.info(`Java ${foundJava.version} was downloaded`); } - // Sleep - const seconds = this.getSleepAmount(); - core.info(`Waiting ${seconds} seconds before trying again`); - yield this.sleep(seconds); - attempt++; } - // Last attempt - return yield action(); + // JDK folder may contain postfix "Contents/Home" on macOS + const macOSPostfixPath = external_path_default().join(foundJava.path, MACOS_JAVA_CONTENT_POSTFIX); + if (process.platform === 'darwin' && external_fs_.existsSync(macOSPostfixPath)) { + foundJava.path = macOSPostfixPath; + } + core.info(`Setting Java ${foundJava.version} as the default`); + this.setJavaDefault(foundJava.version, foundJava.path); + return foundJava; }); } - getSleepAmount() { - return (Math.floor(Math.random() * (this.maxSeconds - this.minSeconds + 1)) + - this.minSeconds); + get toolcacheFolderName() { + return `Java_${this.distribution}_${this.packageType}`; } - sleep(seconds) { - return __awaiter(this, void 0, void 0, function* () { - return new Promise(resolve => setTimeout(resolve, seconds * 1000)); + getToolcacheVersionName(version) { + if (!this.stable) { + if (version.includes('+')) { + return version.replace('+', '-ea.'); + } + else { + return `${version}-ea`; + } + } + // Kotlin and some Java dependencies don't work properly when Java path contains "+" sign + // so replace "/hostedtoolcache/Java/11.0.3+4/x64" to "/hostedtoolcache/Java/11.0.3-4/x64" when saves to cache + // related issue: https://github.com/actions/virtual-environments/issues/3014 + return version.replace('+', '-'); + } + findInToolcache() { + // we can't use tc.find directly because firstly, we need to filter versions by stability flag + // if *-ea is provided, take only ea versions from toolcache, otherwise - only stable versions + const availableVersions = tool_cache.findAllVersions(this.toolcacheFolderName, this.architecture) + .map(item => { + return { + version: item + .replace('-ea.', '+') + .replace(/-ea$/, '') + // Kotlin and some Java dependencies don't work properly when Java path contains "+" sign + // so replace "/hostedtoolcache/Java/11.0.3-4/x64" to "/hostedtoolcache/Java/11.0.3+4/x64" when retrieves to cache + // related issue: https://github.com/actions/virtual-environments/issues/3014 + .replace('-', '+'), + path: getToolcachePath(this.toolcacheFolderName, item, this.architecture) || '', + stable: !item.includes('-ea') + }; + }) + .filter(item => item.stable === this.stable); + const satisfiedVersions = availableVersions + .filter(item => isVersionSatisfies(this.version, item.version)) + .filter(item => item.path) + .sort((a, b) => { + return -semver_default().compareBuild(a.version, b.version); }); + if (!satisfiedVersions || satisfiedVersions.length === 0) { + return null; + } + return { + version: satisfiedVersions[0].version, + path: satisfiedVersions[0].path + }; + } + normalizeVersion(version) { + let stable = true; + if (version.endsWith('-ea')) { + version = version.replace(/-ea$/, ''); + stable = false; + } + else if (version.includes('-ea.')) { + // transform '11.0.3-ea.2' -> '11.0.3+2' + version = version.replace('-ea.', '+'); + stable = false; + } + if (!semver_default().validRange(version)) { + throw new Error(`The string '${version}' is not valid SemVer notation for a Java version. Please check README file for code snippets and more detailed information`); + } + return { + version, + stable + }; + } + setJavaDefault(version, toolPath) { + core.exportVariable('JAVA_HOME', toolPath); + core.addPath(external_path_default().join(toolPath, 'bin')); + core.setOutput('distribution', this.distribution); + core.setOutput('path', toolPath); + core.setOutput('version', version); } } -exports.RetryHelper = RetryHelper; -//# sourceMappingURL=retry-helper.js.map -/***/ }), -/* 980 */, -/* 981 */, -/* 982 */, -/* 983 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { +;// CONCATENATED MODULE: ./src/distributions/local/installer.ts +var installer_awaiter = (undefined && undefined.__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()); + }); +}; -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var util_1 = __webpack_require__(918); -var algorithm_1 = __webpack_require__(163); -/** - * Represents a mixin that extends child nodes that can have siblings - * including doctypes. This mixin is implemented by {@link Element}, - * {@link CharacterData} and {@link DocumentType}. - */ -var ChildNodeImpl = /** @class */ (function () { - function ChildNodeImpl() { + + + + + +class LocalDistribution extends JavaBase { + constructor(installerOptions, jdkFile) { + super('jdkfile', installerOptions); + this.jdkFile = jdkFile; } - /** @inheritdoc */ - ChildNodeImpl.prototype.before = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; - } - /** - * 1. Let parent be context object’s parent. - * 2. If parent is null, then return. - */ - var context = util_1.Cast.asNode(this); - var parent = context._parent; - if (parent === null) - return; - /** - * 3. Let viablePreviousSibling be context object’s first preceding - * sibling not in nodes, and null otherwise. - */ - var viablePreviousSibling = context._previousSibling; - var flag = true; - while (flag && viablePreviousSibling) { - flag = false; - for (var i = 0; i < nodes.length; i++) { - var child = nodes[i]; - if (child === viablePreviousSibling) { - viablePreviousSibling = viablePreviousSibling._previousSibling; - flag = true; - break; - } - } - } - /** - * 4. Let node be the result of converting nodes into a node, given nodes - * and context object’s node document. - */ - var node = algorithm_1.parentNode_convertNodesIntoANode(nodes, context._nodeDocument); - /** - * 5. If viablePreviousSibling is null, set it to parent’s first child, - * and to viablePreviousSibling’s next sibling otherwise. - */ - if (viablePreviousSibling === null) - viablePreviousSibling = parent._firstChild; - else - viablePreviousSibling = viablePreviousSibling._nextSibling; - /** - * 6. Pre-insert node into parent before viablePreviousSibling. - */ - algorithm_1.mutation_preInsert(node, parent, viablePreviousSibling); - }; - /** @inheritdoc */ - ChildNodeImpl.prototype.after = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; - } - /** - * 1. Let parent be context object’s parent. - * 2. If parent is null, then return. - */ - var context = util_1.Cast.asNode(this); - var parent = context._parent; - if (!parent) - return; - /** - * 3. Let viableNextSibling be context object’s first following sibling not - * in nodes, and null otherwise. - */ - var viableNextSibling = context._nextSibling; - var flag = true; - while (flag && viableNextSibling) { - flag = false; - for (var i = 0; i < nodes.length; i++) { - var child = nodes[i]; - if (child === viableNextSibling) { - viableNextSibling = viableNextSibling._nextSibling; - flag = true; - break; - } + setupJava() { + return installer_awaiter(this, void 0, void 0, function* () { + let foundJava = this.findInToolcache(); + if (foundJava) { + core.info(`Resolved Java ${foundJava.version} from tool-cache`); } - } - /** - * 4. Let node be the result of converting nodes into a node, given nodes - * and context object’s node document. - */ - var node = algorithm_1.parentNode_convertNodesIntoANode(nodes, context._nodeDocument); - /** - * 5. Pre-insert node into parent before viableNextSibling. - */ - algorithm_1.mutation_preInsert(node, parent, viableNextSibling); - }; - /** @inheritdoc */ - ChildNodeImpl.prototype.replaceWith = function () { - var nodes = []; - for (var _i = 0; _i < arguments.length; _i++) { - nodes[_i] = arguments[_i]; - } - /** - * 1. Let parent be context object’s parent. - * 2. If parent is null, then return. - */ - var context = util_1.Cast.asNode(this); - var parent = context._parent; - if (!parent) - return; - /** - * 3. Let viableNextSibling be context object’s first following sibling not - * in nodes, and null otherwise. - */ - var viableNextSibling = context._nextSibling; - var flag = true; - while (flag && viableNextSibling) { - flag = false; - for (var i = 0; i < nodes.length; i++) { - var child = nodes[i]; - if (child === viableNextSibling) { - viableNextSibling = viableNextSibling._nextSibling; - flag = true; - break; + else { + core.info(`Java ${this.version} was not found in tool-cache. Trying to unpack JDK file...`); + if (!this.jdkFile) { + throw new Error("'jdkFile' is not specified"); } - } - } - /** - * 4. Let node be the result of converting nodes into a node, given nodes - * and context object’s node document. - */ - var node = algorithm_1.parentNode_convertNodesIntoANode(nodes, context._nodeDocument); - /** - * 5. If context object’s parent is parent, replace the context object with - * node within parent. - * _Note:_ Context object could have been inserted into node. - * 6. Otherwise, pre-insert node into parent before viableNextSibling. - */ - if (context._parent === parent) - algorithm_1.mutation_replace(context, node, parent); - else - algorithm_1.mutation_preInsert(node, parent, viableNextSibling); - }; - /** @inheritdoc */ - ChildNodeImpl.prototype.remove = function () { - /** - * 1. If context object’s parent is null, then return. - * 2. Remove the context object from context object’s parent. - */ - var context = util_1.Cast.asNode(this); - var parent = context._parent; - if (!parent) - return; - algorithm_1.mutation_remove(context, parent); - }; - return ChildNodeImpl; -}()); -exports.ChildNodeImpl = ChildNodeImpl; -//# sourceMappingURL=ChildNodeImpl.js.map - -/***/ }), -/* 984 */, -/* 985 */, -/* 986 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; + const jdkFilePath = external_path_default().resolve(this.jdkFile); + const stats = external_fs_default().statSync(jdkFilePath); + if (!stats.isFile()) { + throw new Error(`JDK file was not found in path '${jdkFilePath}'`); + } + core.info(`Extracting Java from '${jdkFilePath}'`); + const extractedJavaPath = yield extractJdkFile(jdkFilePath); + const archiveName = external_fs_default().readdirSync(extractedJavaPath)[0]; + const archivePath = external_path_default().join(extractedJavaPath, archiveName); + const javaVersion = this.version; + let javaPath = yield tool_cache.cacheDir(archivePath, this.toolcacheFolderName, this.getToolcacheVersionName(javaVersion), this.architecture); + // for different Java distributions, postfix can exist or not so need to check both cases + if (process.platform === 'darwin' && + external_fs_default().existsSync(external_path_default().join(javaPath, MACOS_JAVA_CONTENT_POSTFIX))) { + javaPath = external_path_default().join(javaPath, MACOS_JAVA_CONTENT_POSTFIX); + } + foundJava = { + version: javaVersion, + path: javaPath + }; + } + core.info(`Setting Java ${foundJava.version} as default`); + this.setJavaDefault(foundJava.version, foundJava.path); + return foundJava; + }); + } + findPackageForDownload(version) { + return installer_awaiter(this, void 0, void 0, function* () { + throw new Error('This method should not be implemented in local file provider'); + }); + } + downloadTool(javaRelease) { + return installer_awaiter(this, void 0, void 0, function* () { + throw new Error('This method should not be implemented in local file provider'); + }); + } +} -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { +;// CONCATENATED MODULE: ./src/distributions/zulu/installer.ts +var zulu_installer_awaiter = (undefined && undefined.__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); } } @@ -44452,271 +43680,360 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const tr = __importStar(__webpack_require__(658)); -/** - * 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 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; -//# sourceMappingURL=exec.js.map - -/***/ }), -/* 987 */, -/* 988 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -"use strict"; -var Type = __webpack_require__(945); -module.exports = new Type('tag:yaml.org,2002:map', { - kind: 'mapping', - construct: function (data) { return data !== null ? data : {}; } -}); -/***/ }), -/* 989 */, -/* 990 */ -/***/ (function(__unusedmodule, exports, __webpack_require__) { -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var algorithm_1 = __webpack_require__(163); -/** - * Represents a controller that allows to abort DOM requests. - */ -var AbortControllerImpl = /** @class */ (function () { - /** - * Initializes a new instance of `AbortController`. - */ - function AbortControllerImpl() { - /** - * 1. Let signal be a new AbortSignal object. - * 2. Let controller be a new AbortController object whose signal is signal. - * 3. Return controller. - */ - this._signal = algorithm_1.create_abortSignal(); +class ZuluDistribution extends JavaBase { + constructor(installerOptions) { + super('Zulu', installerOptions); } - Object.defineProperty(AbortControllerImpl.prototype, "signal", { - /** @inheritdoc */ - get: function () { return this._signal; }, - enumerable: true, - configurable: true - }); - /** @inheritdoc */ - AbortControllerImpl.prototype.abort = function () { - algorithm_1.abort_signalAbort(this._signal); - }; - return AbortControllerImpl; -}()); -exports.AbortControllerImpl = AbortControllerImpl; -//# sourceMappingURL=AbortControllerImpl.js.map - -/***/ }), -/* 991 */, -/* 992 */, -/* 993 */, -/* 994 */, -/* 995 */, -/* 996 */, -/* 997 */, -/* 998 */, -/* 999 */ -/***/ (function(module, __unusedexports, __webpack_require__) { - -const Range = __webpack_require__(124) -const { ANY } = __webpack_require__(536) -const satisfies = __webpack_require__(310) -const compare = __webpack_require__(874) + findPackageForDownload(version) { + return zulu_installer_awaiter(this, void 0, void 0, function* () { + const availableVersionsRaw = yield this.getAvailableVersions(); + const availableVersions = availableVersionsRaw.map(item => { + return { + version: this.convertVersionToSemver(item.jdk_version), + url: item.url, + zuluVersion: this.convertVersionToSemver(item.zulu_version) + }; + }); + const satisfiedVersions = availableVersions + .filter(item => isVersionSatisfies(version, item.version)) + .sort((a, b) => { + // Azul provides two versions: jdk_version and azul_version + // we should sort by both fields by descending + return (-semver_default().compareBuild(a.version, b.version) || + -semver_default().compareBuild(a.zuluVersion, b.zuluVersion)); + }) + .map(item => { + return { + version: item.version, + url: item.url + }; + }); + const resolvedFullVersion = satisfiedVersions.length > 0 ? satisfiedVersions[0] : null; + if (!resolvedFullVersion) { + const availableOptions = availableVersions.map(item => item.version).join(', '); + const availableOptionsMessage = availableOptions + ? `\nAvailable versions: ${availableOptions}` + : ''; + throw new Error(`Could not find satisfied version for semver ${version}. ${availableOptionsMessage}`); + } + return resolvedFullVersion; + }); + } + downloadTool(javaRelease) { + return zulu_installer_awaiter(this, void 0, void 0, function* () { + let extractedJavaPath; + core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`); + const javaArchivePath = yield tool_cache.downloadTool(javaRelease.url); + core.info(`Extracting Java archive...`); + let extension = getDownloadArchiveExtension(); + extractedJavaPath = yield extractJdkFile(javaArchivePath, extension); + const archiveName = external_fs_default().readdirSync(extractedJavaPath)[0]; + const archivePath = external_path_default().join(extractedJavaPath, archiveName); + const javaPath = yield tool_cache.cacheDir(archivePath, this.toolcacheFolderName, this.getToolcacheVersionName(javaRelease.version), this.architecture); + return { version: javaRelease.version, path: javaPath }; + }); + } + getAvailableVersions() { + var _a, _b; + return zulu_installer_awaiter(this, void 0, void 0, function* () { + const { arch, hw_bitness, abi } = this.getArchitectureOptions(); + const [bundleType, features] = this.packageType.split('+'); + const platform = this.getPlatformOption(); + const extension = getDownloadArchiveExtension(); + const javafx = (_a = features === null || features === void 0 ? void 0 : features.includes('fx')) !== null && _a !== void 0 ? _a : false; + const releaseStatus = this.stable ? 'ga' : 'ea'; + console.time('azul-retrieve-available-versions'); + const requestArguments = [ + `os=${platform}`, + `ext=${extension}`, + `bundle_type=${bundleType}`, + `javafx=${javafx}`, + `arch=${arch}`, + `hw_bitness=${hw_bitness}`, + `release_status=${releaseStatus}`, + abi ? `abi=${abi}` : null, + features ? `features=${features}` : null + ] + .filter(Boolean) + .join('&'); + const availableVersionsUrl = `https://api.azul.com/zulu/download/community/v1.0/bundles/?${requestArguments}`; + if (core.isDebug()) { + core.debug(`Gathering available versions from '${availableVersionsUrl}'`); + } + const availableVersions = (_b = (yield this.http.getJson(availableVersionsUrl)).result) !== null && _b !== void 0 ? _b : []; + if (core.isDebug()) { + core.startGroup('Print information about available versions'); + console.timeEnd('azul-retrieve-available-versions'); + console.log(`Available versions: [${availableVersions.length}]`); + console.log(availableVersions.map(item => item.jdk_version.join('.')).join(', ')); + core.endGroup(); + } + return availableVersions; + }); + } + getArchitectureOptions() { + if (this.architecture == 'x64') { + return { arch: 'x86', hw_bitness: '64', abi: '' }; + } + else if (this.architecture == 'x86') { + return { arch: 'x86', hw_bitness: '32', abi: '' }; + } + else { + return { arch: this.architecture, hw_bitness: '', abi: '' }; + } + } + getPlatformOption() { + // Azul has own platform names so need to map them + switch (process.platform) { + case 'darwin': + return 'macos'; + case 'win32': + return 'windows'; + default: + return process.platform; + } + } + // Azul API returns jdk_version as array of digits like [11, 0, 2, 1] + convertVersionToSemver(version_array) { + const mainVersion = version_array.slice(0, 3).join('.'); + if (version_array.length > 3) { + // intentionally ignore more than 4 numbers because it is invalid semver + return `${mainVersion}+${version_array[3]}`; + } + return mainVersion; + } +} -// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff: -// - Every simple range `r1, r2, ...` is a subset of some `R1, R2, ...` -// -// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff: -// - If c is only the ANY comparator -// - If C is only the ANY comparator, return true -// - Else return false -// - Let EQ be the set of = comparators in c -// - If EQ is more than one, return true (null set) -// - Let GT be the highest > or >= comparator in c -// - Let LT be the lowest < or <= comparator in c -// - If GT and LT, and GT.semver > LT.semver, return true (null set) -// - If EQ -// - If GT, and EQ does not satisfy GT, return true (null set) -// - If LT, and EQ does not satisfy LT, return true (null set) -// - If EQ satisfies every C, return true -// - Else return false -// - If GT -// - If GT.semver is lower than any > or >= comp in C, return false -// - If GT is >=, and GT.semver does not satisfy every C, return false -// - If LT -// - If LT.semver is greater than any < or <= comp in C, return false -// - If LT is <=, and LT.semver does not satisfy every C, return false -// - If any C is a = range, and GT or LT are set, return false -// - Else return true +;// CONCATENATED MODULE: ./src/distributions/adopt/installer.ts +var adopt_installer_awaiter = (undefined && undefined.__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()); + }); +}; -const subset = (sub, dom, options) => { - if (sub === dom) - return true - sub = new Range(sub, options) - dom = new Range(dom, options) - let sawNonNull = false - OUTER: for (const simpleSub of sub.set) { - for (const simpleDom of dom.set) { - const isSub = simpleSubset(simpleSub, simpleDom, options) - sawNonNull = sawNonNull || isSub !== null - if (isSub) - continue OUTER - } - // the null set is a subset of everything, but null simple ranges in - // a complex range should be ignored. so if we saw a non-null range, - // then we know this isn't a subset, but if EVERY simple range was null, - // then it is a subset. - if (sawNonNull) - return false - } - return true -} -const simpleSubset = (sub, dom, options) => { - if (sub === dom) - return true - if (sub.length === 1 && sub[0].semver === ANY) - return dom.length === 1 && dom[0].semver === ANY - const eqSet = new Set() - let gt, lt - for (const c of sub) { - if (c.operator === '>' || c.operator === '>=') - gt = higherGT(gt, c, options) - else if (c.operator === '<' || c.operator === '<=') - lt = lowerLT(lt, c, options) - else - eqSet.add(c.semver) - } - if (eqSet.size > 1) - return null +var AdoptImplementation; +(function (AdoptImplementation) { + AdoptImplementation["Hotspot"] = "Hotspot"; + AdoptImplementation["OpenJ9"] = "OpenJ9"; +})(AdoptImplementation || (AdoptImplementation = {})); +class AdoptDistribution extends JavaBase { + constructor(installerOptions, jvmImpl) { + super(`Adopt-${jvmImpl}`, installerOptions); + this.jvmImpl = jvmImpl; + } + findPackageForDownload(version) { + return adopt_installer_awaiter(this, void 0, void 0, function* () { + const availableVersionsRaw = yield this.getAvailableVersions(); + const availableVersionsWithBinaries = availableVersionsRaw + .filter(item => item.binaries.length > 0) + .map(item => { + return { + version: item.version_data.semver, + url: item.binaries[0].package.link + }; + }); + const satisfiedVersions = availableVersionsWithBinaries + .filter(item => isVersionSatisfies(version, item.version)) + .sort((a, b) => { + return -semver_default().compareBuild(a.version, b.version); + }); + const resolvedFullVersion = satisfiedVersions.length > 0 ? satisfiedVersions[0] : null; + if (!resolvedFullVersion) { + const availableOptions = availableVersionsWithBinaries.map(item => item.version).join(', '); + const availableOptionsMessage = availableOptions + ? `\nAvailable versions: ${availableOptions}` + : ''; + throw new Error(`Could not find satisfied version for SemVer '${version}'. ${availableOptionsMessage}`); + } + return resolvedFullVersion; + }); + } + downloadTool(javaRelease) { + return adopt_installer_awaiter(this, void 0, void 0, function* () { + let javaPath; + let extractedJavaPath; + core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`); + const javaArchivePath = yield tool_cache.downloadTool(javaRelease.url); + core.info(`Extracting Java archive...`); + let extension = getDownloadArchiveExtension(); + extractedJavaPath = yield extractJdkFile(javaArchivePath, extension); + const archiveName = external_fs_default().readdirSync(extractedJavaPath)[0]; + const archivePath = external_path_default().join(extractedJavaPath, archiveName); + const version = this.getToolcacheVersionName(javaRelease.version); + javaPath = yield tool_cache.cacheDir(archivePath, this.toolcacheFolderName, version, this.architecture); + return { version: javaRelease.version, path: javaPath }; + }); + } + get toolcacheFolderName() { + if (this.jvmImpl === AdoptImplementation.Hotspot) { + // exclude Hotspot postfix from distribution name because Hosted runners have pre-cached Adopt OpenJDK under "Java_Adopt_jdk" + // for more information see: https://github.com/actions/setup-java/pull/155#discussion_r610451063 + return `Java_Adopt_${this.packageType}`; + } + return super.toolcacheFolderName; + } + getAvailableVersions() { + return adopt_installer_awaiter(this, void 0, void 0, function* () { + const platform = this.getPlatformOption(); + const arch = this.architecture; + const imageType = this.packageType; + const versionRange = encodeURI('[1.0,100.0]'); // retrieve all available versions + const releaseType = this.stable ? 'ga' : 'ea'; + console.time('adopt-retrieve-available-versions'); + const baseRequestArguments = [ + `project=jdk`, + 'vendor=adoptopenjdk', + `heap_size=normal`, + 'sort_method=DEFAULT', + 'sort_order=DESC', + `os=${platform}`, + `architecture=${arch}`, + `image_type=${imageType}`, + `release_type=${releaseType}`, + `jvm_impl=${this.jvmImpl.toLowerCase()}` + ].join('&'); + // need to iterate through all pages to retrieve the list of all versions + // Adopt API doesn't provide way to retrieve the count of pages to iterate so infinity loop + let page_index = 0; + const availableVersions = []; + while (true) { + const requestArguments = `${baseRequestArguments}&page_size=20&page=${page_index}`; + const availableVersionsUrl = `https://api.adoptopenjdk.net/v3/assets/version/${versionRange}?${requestArguments}`; + if (core.isDebug() && page_index === 0) { + // url is identical except page_index so print it once for debug + core.debug(`Gathering available versions from '${availableVersionsUrl}'`); + } + const paginationPage = (yield this.http.getJson(availableVersionsUrl)).result; + if (paginationPage === null || paginationPage.length === 0) { + // break infinity loop because we have reached end of pagination + break; + } + availableVersions.push(...paginationPage); + page_index++; + } + if (core.isDebug()) { + core.startGroup('Print information about available versions'); + console.timeEnd('adopt-retrieve-available-versions'); + console.log(`Available versions: [${availableVersions.length}]`); + console.log(availableVersions.map(item => item.version_data.semver).join(', ')); + core.endGroup(); + } + return availableVersions; + }); + } + getPlatformOption() { + // Adopt has own platform names so need to map them + switch (process.platform) { + case 'darwin': + return 'mac'; + case 'win32': + return 'windows'; + default: + return process.platform; + } + } +} - let gtltComp - if (gt && lt) { - gtltComp = compare(gt.semver, lt.semver, options) - if (gtltComp > 0) - return null - else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) - return null - } +;// CONCATENATED MODULE: ./src/distributions/distribution-factory.ts - // will iterate one or zero times - for (const eq of eqSet) { - if (gt && !satisfies(eq, String(gt), options)) - return null - if (lt && !satisfies(eq, String(lt), options)) - return null - for (const c of dom) { - if (!satisfies(eq, String(c), options)) - return false +var JavaDistribution; +(function (JavaDistribution) { + JavaDistribution["Adopt"] = "adopt"; + JavaDistribution["AdoptHotspot"] = "adopt-hotspot"; + JavaDistribution["AdoptOpenJ9"] = "adopt-openj9"; + JavaDistribution["Zulu"] = "zulu"; + JavaDistribution["JdkFile"] = "jdkfile"; +})(JavaDistribution || (JavaDistribution = {})); +function getJavaDistribution(distributionName, installerOptions, jdkFile) { + switch (distributionName) { + case JavaDistribution.JdkFile: + return new LocalDistribution(installerOptions, jdkFile); + case JavaDistribution.Adopt: + case JavaDistribution.AdoptHotspot: + return new AdoptDistribution(installerOptions, AdoptImplementation.Hotspot); + case JavaDistribution.AdoptOpenJ9: + return new AdoptDistribution(installerOptions, AdoptImplementation.OpenJ9); + case JavaDistribution.Zulu: + return new ZuluDistribution(installerOptions); + default: + return null; } +} - return true - } +;// CONCATENATED MODULE: ./src/setup-java.ts +var setup_java_awaiter = (undefined && undefined.__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()); + }); +}; - let higher, lower - let hasDomLT, hasDomGT - for (const c of dom) { - hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>=' - hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<=' - if (gt) { - if (c.operator === '>' || c.operator === '>=') { - higher = higherGT(gt, c, options) - if (higher === c && higher !== gt) - return false - } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) - return false - } - if (lt) { - if (c.operator === '<' || c.operator === '<=') { - lower = lowerLT(lt, c, options) - if (lower === c && lower !== lt) - return false - } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) - return false - } - if (!c.operator && (lt || gt) && gtltComp !== 0) - return false - } - // if there was a < or >, and nothing in the dom, then must be false - // UNLESS it was limited by another range in the other direction. - // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0 - if (gt && hasDomLT && !lt && gtltComp !== 0) - return false - if (lt && hasDomGT && !gt && gtltComp !== 0) - return false - return true -} -// >=1.2.3 is lower than >1.2.3 -const higherGT = (a, b, options) => { - if (!a) - return b - const comp = compare(a.semver, b.semver, options) - return comp > 0 ? a - : comp < 0 ? b - : b.operator === '>' && a.operator === '>=' ? b - : a -} -// <=1.2.3 is higher than <1.2.3 -const lowerLT = (a, b, options) => { - if (!a) - return b - const comp = compare(a.semver, b.semver, options) - return comp < 0 ? a - : comp > 0 ? b - : b.operator === '<' && a.operator === '<=' ? b - : a +function run() { + return setup_java_awaiter(this, void 0, void 0, function* () { + try { + const version = core.getInput(INPUT_JAVA_VERSION, { required: true }); + const distributionName = core.getInput(INPUT_DISTRIBUTION, { required: true }); + const architecture = core.getInput(INPUT_ARCHITECTURE); + const packageType = core.getInput(INPUT_JAVA_PACKAGE); + const jdkFile = core.getInput(INPUT_JDK_FILE); + const checkLatest = getBooleanInput(INPUT_CHECK_LATEST, false); + const installerOptions = { + architecture, + packageType, + version, + checkLatest + }; + const distribution = getJavaDistribution(distributionName, installerOptions, jdkFile); + if (!distribution) { + throw new Error(`No supported distribution was found for input ${distributionName}`); + } + const result = yield distribution.setupJava(); + core.info(''); + core.info('Java configuration:'); + core.info(` Distribution: ${distributionName}`); + core.info(` Version: ${result.version}`); + core.info(` Path: ${result.path}`); + core.info(''); + const matchersPath = external_path_.join(__dirname, '..', '..', '.github'); + core.info(`##[add-matcher]${external_path_.join(matchersPath, 'java.json')}`); + yield configureAuthentication(); + } + catch (error) { + core.setFailed(error.message); + } + }); } +run(); -module.exports = subset - +})(); -/***/ }) -/******/ ]); \ No newline at end of file +module.exports = __webpack_exports__; +/******/ })() +; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 434d6be9f..385084fc8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -887,10 +887,10 @@ "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", "dev": true }, - "@zeit/ncc": { - "version": "0.20.5", - "resolved": "https://registry.npmjs.org/@zeit/ncc/-/ncc-0.20.5.tgz", - "integrity": "sha512-XU6uzwvv95DqxciQx+aOLhbyBx/13ky+RK1y88Age9Du3BlA4mMPCy13BGjayOrrumOzlq1XV3SD/BWiZENXlw==", + "@vercel/ncc": { + "version": "0.28.6", + "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.28.6.tgz", + "integrity": "sha512-t4BoSSuyK8BZaUE0gV18V6bkFs4st7baumtFGa50dv1tMu2GDBEBF8sUZaKBdKiL6DzJ2D2+XVCwYWWDcQOYdQ==", "dev": true }, "abab": { diff --git a/package.json b/package.json index 00ddd5574..a8b53089c 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "@types/jest": "^26.0.20", "@types/node": "^12.19.13", "@types/semver": "^7.3.4", - "@zeit/ncc": "^0.20.5", + "@vercel/ncc": "^0.28.6", "jest": "^26.6.3", "jest-circus": "^26.6.3", "prettier": "^1.19.1", diff --git a/tsconfig.json b/tsconfig.json index 9ecff8679..c69fe2bd2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -38,7 +38,7 @@ // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ /* Module Resolution Options */ - // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ From be74ae2f15df2506b48df48dd26b26b7f9740a55 Mon Sep 17 00:00:00 2001 From: Kengo TODA Date: Fri, 9 Jul 2021 18:19:05 +0800 Subject: [PATCH 2/3] build: remove unused configuration for husky 980efe83e2f2dfd67756081abe275875658f6183 removed the dependency on husky, then this configuration is also needless. --- package.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/package.json b/package.json index a8b53089c..dbce55894 100644 --- a/package.json +++ b/package.json @@ -42,11 +42,5 @@ "prettier": "^1.19.1", "ts-jest": "^26.5.3", "typescript": "^4.2.3" - }, - "husky": { - "skipCI": true, - "hooks": { - "pre-commit": "npm run build && npm run format" - } } } From 30e5e6f8d069679770e58df738e7edf61440ee80 Mon Sep 17 00:00:00 2001 From: Kengo TODA Date: Fri, 9 Jul 2021 20:48:33 +0800 Subject: [PATCH 3/3] docs: update references to ncc in CONTRIBUTING.md --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index daba4c310..99e360a66 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,7 +8,7 @@ ### NCC -In order to avoid uploading `node_modules` to the repository, we use [zeit/ncc](https://github.com/zeit/ncc) to create multiple `index.js` files that gets saved under `dist/`. +In order to avoid uploading `node_modules` to the repository, we use [vercel/ncc](https://github.com/vercel/ncc) to create multiple `index.js` files that gets saved under `dist/`. There are two main files that get created - `dist/setup/index.js` - Core `setup-java` logic that downloads and installs an appropriate version of Java