index.js (1094078B)
1 import './sourcemap-register.cjs';import { createRequire as __WEBPACK_EXTERNAL_createRequire } from "module"; 2 /******/ var __webpack_modules__ = ({ 3 4 /***/ 7351: 5 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 6 7 8 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 9 if (k2 === undefined) k2 = k; 10 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 11 }) : (function(o, m, k, k2) { 12 if (k2 === undefined) k2 = k; 13 o[k2] = m[k]; 14 })); 15 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 16 Object.defineProperty(o, "default", { enumerable: true, value: v }); 17 }) : function(o, v) { 18 o["default"] = v; 19 }); 20 var __importStar = (this && this.__importStar) || function (mod) { 21 if (mod && mod.__esModule) return mod; 22 var result = {}; 23 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 24 __setModuleDefault(result, mod); 25 return result; 26 }; 27 Object.defineProperty(exports, "__esModule", ({ value: true })); 28 exports.issue = exports.issueCommand = void 0; 29 const os = __importStar(__nccwpck_require__(2037)); 30 const utils_1 = __nccwpck_require__(5278); 31 /** 32 * Commands 33 * 34 * Command Format: 35 * ::name key=value,key=value::message 36 * 37 * Examples: 38 * ::warning::This is the message 39 * ::set-env name=MY_VAR::some value 40 */ 41 function issueCommand(command, properties, message) { 42 const cmd = new Command(command, properties, message); 43 process.stdout.write(cmd.toString() + os.EOL); 44 } 45 exports.issueCommand = issueCommand; 46 function issue(name, message = '') { 47 issueCommand(name, {}, message); 48 } 49 exports.issue = issue; 50 const CMD_STRING = '::'; 51 class Command { 52 constructor(command, properties, message) { 53 if (!command) { 54 command = 'missing.command'; 55 } 56 this.command = command; 57 this.properties = properties; 58 this.message = message; 59 } 60 toString() { 61 let cmdStr = CMD_STRING + this.command; 62 if (this.properties && Object.keys(this.properties).length > 0) { 63 cmdStr += ' '; 64 let first = true; 65 for (const key in this.properties) { 66 if (this.properties.hasOwnProperty(key)) { 67 const val = this.properties[key]; 68 if (val) { 69 if (first) { 70 first = false; 71 } 72 else { 73 cmdStr += ','; 74 } 75 cmdStr += `${key}=${escapeProperty(val)}`; 76 } 77 } 78 } 79 } 80 cmdStr += `${CMD_STRING}${escapeData(this.message)}`; 81 return cmdStr; 82 } 83 } 84 function escapeData(s) { 85 return utils_1.toCommandValue(s) 86 .replace(/%/g, '%25') 87 .replace(/\r/g, '%0D') 88 .replace(/\n/g, '%0A'); 89 } 90 function escapeProperty(s) { 91 return utils_1.toCommandValue(s) 92 .replace(/%/g, '%25') 93 .replace(/\r/g, '%0D') 94 .replace(/\n/g, '%0A') 95 .replace(/:/g, '%3A') 96 .replace(/,/g, '%2C'); 97 } 98 //# sourceMappingURL=command.js.map 99 100 /***/ }), 101 102 /***/ 2186: 103 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 104 105 106 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 107 if (k2 === undefined) k2 = k; 108 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 109 }) : (function(o, m, k, k2) { 110 if (k2 === undefined) k2 = k; 111 o[k2] = m[k]; 112 })); 113 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 114 Object.defineProperty(o, "default", { enumerable: true, value: v }); 115 }) : function(o, v) { 116 o["default"] = v; 117 }); 118 var __importStar = (this && this.__importStar) || function (mod) { 119 if (mod && mod.__esModule) return mod; 120 var result = {}; 121 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 122 __setModuleDefault(result, mod); 123 return result; 124 }; 125 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 126 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 127 return new (P || (P = Promise))(function (resolve, reject) { 128 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 129 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 130 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 131 step((generator = generator.apply(thisArg, _arguments || [])).next()); 132 }); 133 }; 134 Object.defineProperty(exports, "__esModule", ({ value: true })); 135 exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0; 136 const command_1 = __nccwpck_require__(7351); 137 const file_command_1 = __nccwpck_require__(717); 138 const utils_1 = __nccwpck_require__(5278); 139 const os = __importStar(__nccwpck_require__(2037)); 140 const path = __importStar(__nccwpck_require__(1017)); 141 const oidc_utils_1 = __nccwpck_require__(8041); 142 /** 143 * The code to exit an action 144 */ 145 var ExitCode; 146 (function (ExitCode) { 147 /** 148 * A code indicating that the action was successful 149 */ 150 ExitCode[ExitCode["Success"] = 0] = "Success"; 151 /** 152 * A code indicating that the action was a failure 153 */ 154 ExitCode[ExitCode["Failure"] = 1] = "Failure"; 155 })(ExitCode = exports.ExitCode || (exports.ExitCode = {})); 156 //----------------------------------------------------------------------- 157 // Variables 158 //----------------------------------------------------------------------- 159 /** 160 * Sets env variable for this action and future actions in the job 161 * @param name the name of the variable to set 162 * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify 163 */ 164 // eslint-disable-next-line @typescript-eslint/no-explicit-any 165 function exportVariable(name, val) { 166 const convertedVal = utils_1.toCommandValue(val); 167 process.env[name] = convertedVal; 168 const filePath = process.env['GITHUB_ENV'] || ''; 169 if (filePath) { 170 return file_command_1.issueFileCommand('ENV', file_command_1.prepareKeyValueMessage(name, val)); 171 } 172 command_1.issueCommand('set-env', { name }, convertedVal); 173 } 174 exports.exportVariable = exportVariable; 175 /** 176 * Registers a secret which will get masked from logs 177 * @param secret value of the secret 178 */ 179 function setSecret(secret) { 180 command_1.issueCommand('add-mask', {}, secret); 181 } 182 exports.setSecret = setSecret; 183 /** 184 * Prepends inputPath to the PATH (for this action and future actions) 185 * @param inputPath 186 */ 187 function addPath(inputPath) { 188 const filePath = process.env['GITHUB_PATH'] || ''; 189 if (filePath) { 190 file_command_1.issueFileCommand('PATH', inputPath); 191 } 192 else { 193 command_1.issueCommand('add-path', {}, inputPath); 194 } 195 process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`; 196 } 197 exports.addPath = addPath; 198 /** 199 * Gets the value of an input. 200 * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed. 201 * Returns an empty string if the value is not defined. 202 * 203 * @param name name of the input to get 204 * @param options optional. See InputOptions. 205 * @returns string 206 */ 207 function getInput(name, options) { 208 const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || ''; 209 if (options && options.required && !val) { 210 throw new Error(`Input required and not supplied: ${name}`); 211 } 212 if (options && options.trimWhitespace === false) { 213 return val; 214 } 215 return val.trim(); 216 } 217 exports.getInput = getInput; 218 /** 219 * Gets the values of an multiline input. Each value is also trimmed. 220 * 221 * @param name name of the input to get 222 * @param options optional. See InputOptions. 223 * @returns string[] 224 * 225 */ 226 function getMultilineInput(name, options) { 227 const inputs = getInput(name, options) 228 .split('\n') 229 .filter(x => x !== ''); 230 if (options && options.trimWhitespace === false) { 231 return inputs; 232 } 233 return inputs.map(input => input.trim()); 234 } 235 exports.getMultilineInput = getMultilineInput; 236 /** 237 * Gets the input value of the boolean type in the YAML 1.2 "core schema" specification. 238 * Support boolean input list: `true | True | TRUE | false | False | FALSE` . 239 * The return value is also in boolean type. 240 * ref: https://yaml.org/spec/1.2/spec.html#id2804923 241 * 242 * @param name name of the input to get 243 * @param options optional. See InputOptions. 244 * @returns boolean 245 */ 246 function getBooleanInput(name, options) { 247 const trueValue = ['true', 'True', 'TRUE']; 248 const falseValue = ['false', 'False', 'FALSE']; 249 const val = getInput(name, options); 250 if (trueValue.includes(val)) 251 return true; 252 if (falseValue.includes(val)) 253 return false; 254 throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name}\n` + 255 `Support boolean input list: \`true | True | TRUE | false | False | FALSE\``); 256 } 257 exports.getBooleanInput = getBooleanInput; 258 /** 259 * Sets the value of an output. 260 * 261 * @param name name of the output to set 262 * @param value value to store. Non-string values will be converted to a string via JSON.stringify 263 */ 264 // eslint-disable-next-line @typescript-eslint/no-explicit-any 265 function setOutput(name, value) { 266 const filePath = process.env['GITHUB_OUTPUT'] || ''; 267 if (filePath) { 268 return file_command_1.issueFileCommand('OUTPUT', file_command_1.prepareKeyValueMessage(name, value)); 269 } 270 process.stdout.write(os.EOL); 271 command_1.issueCommand('set-output', { name }, utils_1.toCommandValue(value)); 272 } 273 exports.setOutput = setOutput; 274 /** 275 * Enables or disables the echoing of commands into stdout for the rest of the step. 276 * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set. 277 * 278 */ 279 function setCommandEcho(enabled) { 280 command_1.issue('echo', enabled ? 'on' : 'off'); 281 } 282 exports.setCommandEcho = setCommandEcho; 283 //----------------------------------------------------------------------- 284 // Results 285 //----------------------------------------------------------------------- 286 /** 287 * Sets the action status to failed. 288 * When the action exits it will be with an exit code of 1 289 * @param message add error issue message 290 */ 291 function setFailed(message) { 292 process.exitCode = ExitCode.Failure; 293 error(message); 294 } 295 exports.setFailed = setFailed; 296 //----------------------------------------------------------------------- 297 // Logging Commands 298 //----------------------------------------------------------------------- 299 /** 300 * Gets whether Actions Step Debug is on or not 301 */ 302 function isDebug() { 303 return process.env['RUNNER_DEBUG'] === '1'; 304 } 305 exports.isDebug = isDebug; 306 /** 307 * Writes debug message to user log 308 * @param message debug message 309 */ 310 function debug(message) { 311 command_1.issueCommand('debug', {}, message); 312 } 313 exports.debug = debug; 314 /** 315 * Adds an error issue 316 * @param message error issue message. Errors will be converted to string via toString() 317 * @param properties optional properties to add to the annotation. 318 */ 319 function error(message, properties = {}) { 320 command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); 321 } 322 exports.error = error; 323 /** 324 * Adds a warning issue 325 * @param message warning issue message. Errors will be converted to string via toString() 326 * @param properties optional properties to add to the annotation. 327 */ 328 function warning(message, properties = {}) { 329 command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); 330 } 331 exports.warning = warning; 332 /** 333 * Adds a notice issue 334 * @param message notice issue message. Errors will be converted to string via toString() 335 * @param properties optional properties to add to the annotation. 336 */ 337 function notice(message, properties = {}) { 338 command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); 339 } 340 exports.notice = notice; 341 /** 342 * Writes info to log with console.log. 343 * @param message info message 344 */ 345 function info(message) { 346 process.stdout.write(message + os.EOL); 347 } 348 exports.info = info; 349 /** 350 * Begin an output group. 351 * 352 * Output until the next `groupEnd` will be foldable in this group 353 * 354 * @param name The name of the output group 355 */ 356 function startGroup(name) { 357 command_1.issue('group', name); 358 } 359 exports.startGroup = startGroup; 360 /** 361 * End an output group. 362 */ 363 function endGroup() { 364 command_1.issue('endgroup'); 365 } 366 exports.endGroup = endGroup; 367 /** 368 * Wrap an asynchronous function call in a group. 369 * 370 * Returns the same type as the function itself. 371 * 372 * @param name The name of the group 373 * @param fn The function to wrap in the group 374 */ 375 function group(name, fn) { 376 return __awaiter(this, void 0, void 0, function* () { 377 startGroup(name); 378 let result; 379 try { 380 result = yield fn(); 381 } 382 finally { 383 endGroup(); 384 } 385 return result; 386 }); 387 } 388 exports.group = group; 389 //----------------------------------------------------------------------- 390 // Wrapper action state 391 //----------------------------------------------------------------------- 392 /** 393 * Saves state for current action, the state can only be retrieved by this action's post job execution. 394 * 395 * @param name name of the state to store 396 * @param value value to store. Non-string values will be converted to a string via JSON.stringify 397 */ 398 // eslint-disable-next-line @typescript-eslint/no-explicit-any 399 function saveState(name, value) { 400 const filePath = process.env['GITHUB_STATE'] || ''; 401 if (filePath) { 402 return file_command_1.issueFileCommand('STATE', file_command_1.prepareKeyValueMessage(name, value)); 403 } 404 command_1.issueCommand('save-state', { name }, utils_1.toCommandValue(value)); 405 } 406 exports.saveState = saveState; 407 /** 408 * Gets the value of an state set by this action's main execution. 409 * 410 * @param name name of the state to get 411 * @returns string 412 */ 413 function getState(name) { 414 return process.env[`STATE_${name}`] || ''; 415 } 416 exports.getState = getState; 417 function getIDToken(aud) { 418 return __awaiter(this, void 0, void 0, function* () { 419 return yield oidc_utils_1.OidcClient.getIDToken(aud); 420 }); 421 } 422 exports.getIDToken = getIDToken; 423 /** 424 * Summary exports 425 */ 426 var summary_1 = __nccwpck_require__(1327); 427 Object.defineProperty(exports, "summary", ({ enumerable: true, get: function () { return summary_1.summary; } })); 428 /** 429 * @deprecated use core.summary 430 */ 431 var summary_2 = __nccwpck_require__(1327); 432 Object.defineProperty(exports, "markdownSummary", ({ enumerable: true, get: function () { return summary_2.markdownSummary; } })); 433 /** 434 * Path exports 435 */ 436 var path_utils_1 = __nccwpck_require__(2981); 437 Object.defineProperty(exports, "toPosixPath", ({ enumerable: true, get: function () { return path_utils_1.toPosixPath; } })); 438 Object.defineProperty(exports, "toWin32Path", ({ enumerable: true, get: function () { return path_utils_1.toWin32Path; } })); 439 Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: function () { return path_utils_1.toPlatformPath; } })); 440 //# sourceMappingURL=core.js.map 441 442 /***/ }), 443 444 /***/ 717: 445 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 446 447 448 // For internal use, subject to change. 449 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 450 if (k2 === undefined) k2 = k; 451 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 452 }) : (function(o, m, k, k2) { 453 if (k2 === undefined) k2 = k; 454 o[k2] = m[k]; 455 })); 456 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 457 Object.defineProperty(o, "default", { enumerable: true, value: v }); 458 }) : function(o, v) { 459 o["default"] = v; 460 }); 461 var __importStar = (this && this.__importStar) || function (mod) { 462 if (mod && mod.__esModule) return mod; 463 var result = {}; 464 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 465 __setModuleDefault(result, mod); 466 return result; 467 }; 468 Object.defineProperty(exports, "__esModule", ({ value: true })); 469 exports.prepareKeyValueMessage = exports.issueFileCommand = void 0; 470 // We use any as a valid input type 471 /* eslint-disable @typescript-eslint/no-explicit-any */ 472 const fs = __importStar(__nccwpck_require__(7147)); 473 const os = __importStar(__nccwpck_require__(2037)); 474 const uuid_1 = __nccwpck_require__(5840); 475 const utils_1 = __nccwpck_require__(5278); 476 function issueFileCommand(command, message) { 477 const filePath = process.env[`GITHUB_${command}`]; 478 if (!filePath) { 479 throw new Error(`Unable to find environment variable for file command ${command}`); 480 } 481 if (!fs.existsSync(filePath)) { 482 throw new Error(`Missing file at path: ${filePath}`); 483 } 484 fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, { 485 encoding: 'utf8' 486 }); 487 } 488 exports.issueFileCommand = issueFileCommand; 489 function prepareKeyValueMessage(key, value) { 490 const delimiter = `ghadelimiter_${uuid_1.v4()}`; 491 const convertedValue = utils_1.toCommandValue(value); 492 // These should realistically never happen, but just in case someone finds a 493 // way to exploit uuid generation let's not allow keys or values that contain 494 // the delimiter. 495 if (key.includes(delimiter)) { 496 throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter}"`); 497 } 498 if (convertedValue.includes(delimiter)) { 499 throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter}"`); 500 } 501 return `${key}<<${delimiter}${os.EOL}${convertedValue}${os.EOL}${delimiter}`; 502 } 503 exports.prepareKeyValueMessage = prepareKeyValueMessage; 504 //# sourceMappingURL=file-command.js.map 505 506 /***/ }), 507 508 /***/ 8041: 509 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 510 511 512 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 513 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 514 return new (P || (P = Promise))(function (resolve, reject) { 515 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 516 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 517 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 518 step((generator = generator.apply(thisArg, _arguments || [])).next()); 519 }); 520 }; 521 Object.defineProperty(exports, "__esModule", ({ value: true })); 522 exports.OidcClient = void 0; 523 const http_client_1 = __nccwpck_require__(6255); 524 const auth_1 = __nccwpck_require__(5526); 525 const core_1 = __nccwpck_require__(2186); 526 class OidcClient { 527 static createHttpClient(allowRetry = true, maxRetry = 10) { 528 const requestOptions = { 529 allowRetries: allowRetry, 530 maxRetries: maxRetry 531 }; 532 return new http_client_1.HttpClient('actions/oidc-client', [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions); 533 } 534 static getRequestToken() { 535 const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN']; 536 if (!token) { 537 throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable'); 538 } 539 return token; 540 } 541 static getIDTokenUrl() { 542 const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL']; 543 if (!runtimeUrl) { 544 throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable'); 545 } 546 return runtimeUrl; 547 } 548 static getCall(id_token_url) { 549 var _a; 550 return __awaiter(this, void 0, void 0, function* () { 551 const httpclient = OidcClient.createHttpClient(); 552 const res = yield httpclient 553 .getJson(id_token_url) 554 .catch(error => { 555 throw new Error(`Failed to get ID Token. \n 556 Error Code : ${error.statusCode}\n 557 Error Message: ${error.result.message}`); 558 }); 559 const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value; 560 if (!id_token) { 561 throw new Error('Response json body do not have ID Token field'); 562 } 563 return id_token; 564 }); 565 } 566 static getIDToken(audience) { 567 return __awaiter(this, void 0, void 0, function* () { 568 try { 569 // New ID Token is requested from action service 570 let id_token_url = OidcClient.getIDTokenUrl(); 571 if (audience) { 572 const encodedAudience = encodeURIComponent(audience); 573 id_token_url = `${id_token_url}&audience=${encodedAudience}`; 574 } 575 core_1.debug(`ID token url is ${id_token_url}`); 576 const id_token = yield OidcClient.getCall(id_token_url); 577 core_1.setSecret(id_token); 578 return id_token; 579 } 580 catch (error) { 581 throw new Error(`Error message: ${error.message}`); 582 } 583 }); 584 } 585 } 586 exports.OidcClient = OidcClient; 587 //# sourceMappingURL=oidc-utils.js.map 588 589 /***/ }), 590 591 /***/ 2981: 592 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 593 594 595 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 596 if (k2 === undefined) k2 = k; 597 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 598 }) : (function(o, m, k, k2) { 599 if (k2 === undefined) k2 = k; 600 o[k2] = m[k]; 601 })); 602 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 603 Object.defineProperty(o, "default", { enumerable: true, value: v }); 604 }) : function(o, v) { 605 o["default"] = v; 606 }); 607 var __importStar = (this && this.__importStar) || function (mod) { 608 if (mod && mod.__esModule) return mod; 609 var result = {}; 610 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 611 __setModuleDefault(result, mod); 612 return result; 613 }; 614 Object.defineProperty(exports, "__esModule", ({ value: true })); 615 exports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = void 0; 616 const path = __importStar(__nccwpck_require__(1017)); 617 /** 618 * toPosixPath converts the given path to the posix form. On Windows, \\ will be 619 * replaced with /. 620 * 621 * @param pth. Path to transform. 622 * @return string Posix path. 623 */ 624 function toPosixPath(pth) { 625 return pth.replace(/[\\]/g, '/'); 626 } 627 exports.toPosixPath = toPosixPath; 628 /** 629 * toWin32Path converts the given path to the win32 form. On Linux, / will be 630 * replaced with \\. 631 * 632 * @param pth. Path to transform. 633 * @return string Win32 path. 634 */ 635 function toWin32Path(pth) { 636 return pth.replace(/[/]/g, '\\'); 637 } 638 exports.toWin32Path = toWin32Path; 639 /** 640 * toPlatformPath converts the given path to a platform-specific path. It does 641 * this by replacing instances of / and \ with the platform-specific path 642 * separator. 643 * 644 * @param pth The path to platformize. 645 * @return string The platform-specific path. 646 */ 647 function toPlatformPath(pth) { 648 return pth.replace(/[/\\]/g, path.sep); 649 } 650 exports.toPlatformPath = toPlatformPath; 651 //# sourceMappingURL=path-utils.js.map 652 653 /***/ }), 654 655 /***/ 1327: 656 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 657 658 659 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 660 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 661 return new (P || (P = Promise))(function (resolve, reject) { 662 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 663 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 664 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 665 step((generator = generator.apply(thisArg, _arguments || [])).next()); 666 }); 667 }; 668 Object.defineProperty(exports, "__esModule", ({ value: true })); 669 exports.summary = exports.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = void 0; 670 const os_1 = __nccwpck_require__(2037); 671 const fs_1 = __nccwpck_require__(7147); 672 const { access, appendFile, writeFile } = fs_1.promises; 673 exports.SUMMARY_ENV_VAR = 'GITHUB_STEP_SUMMARY'; 674 exports.SUMMARY_DOCS_URL = 'https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary'; 675 class Summary { 676 constructor() { 677 this._buffer = ''; 678 } 679 /** 680 * Finds the summary file path from the environment, rejects if env var is not found or file does not exist 681 * Also checks r/w permissions. 682 * 683 * @returns step summary file path 684 */ 685 filePath() { 686 return __awaiter(this, void 0, void 0, function* () { 687 if (this._filePath) { 688 return this._filePath; 689 } 690 const pathFromEnv = process.env[exports.SUMMARY_ENV_VAR]; 691 if (!pathFromEnv) { 692 throw new Error(`Unable to find environment variable for $${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`); 693 } 694 try { 695 yield access(pathFromEnv, fs_1.constants.R_OK | fs_1.constants.W_OK); 696 } 697 catch (_a) { 698 throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`); 699 } 700 this._filePath = pathFromEnv; 701 return this._filePath; 702 }); 703 } 704 /** 705 * Wraps content in an HTML tag, adding any HTML attributes 706 * 707 * @param {string} tag HTML tag to wrap 708 * @param {string | null} content content within the tag 709 * @param {[attribute: string]: string} attrs key-value list of HTML attributes to add 710 * 711 * @returns {string} content wrapped in HTML element 712 */ 713 wrap(tag, content, attrs = {}) { 714 const htmlAttrs = Object.entries(attrs) 715 .map(([key, value]) => ` ${key}="${value}"`) 716 .join(''); 717 if (!content) { 718 return `<${tag}${htmlAttrs}>`; 719 } 720 return `<${tag}${htmlAttrs}>${content}</${tag}>`; 721 } 722 /** 723 * Writes text in the buffer to the summary buffer file and empties buffer. Will append by default. 724 * 725 * @param {SummaryWriteOptions} [options] (optional) options for write operation 726 * 727 * @returns {Promise<Summary>} summary instance 728 */ 729 write(options) { 730 return __awaiter(this, void 0, void 0, function* () { 731 const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite); 732 const filePath = yield this.filePath(); 733 const writeFunc = overwrite ? writeFile : appendFile; 734 yield writeFunc(filePath, this._buffer, { encoding: 'utf8' }); 735 return this.emptyBuffer(); 736 }); 737 } 738 /** 739 * Clears the summary buffer and wipes the summary file 740 * 741 * @returns {Summary} summary instance 742 */ 743 clear() { 744 return __awaiter(this, void 0, void 0, function* () { 745 return this.emptyBuffer().write({ overwrite: true }); 746 }); 747 } 748 /** 749 * Returns the current summary buffer as a string 750 * 751 * @returns {string} string of summary buffer 752 */ 753 stringify() { 754 return this._buffer; 755 } 756 /** 757 * If the summary buffer is empty 758 * 759 * @returns {boolen} true if the buffer is empty 760 */ 761 isEmptyBuffer() { 762 return this._buffer.length === 0; 763 } 764 /** 765 * Resets the summary buffer without writing to summary file 766 * 767 * @returns {Summary} summary instance 768 */ 769 emptyBuffer() { 770 this._buffer = ''; 771 return this; 772 } 773 /** 774 * Adds raw text to the summary buffer 775 * 776 * @param {string} text content to add 777 * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false) 778 * 779 * @returns {Summary} summary instance 780 */ 781 addRaw(text, addEOL = false) { 782 this._buffer += text; 783 return addEOL ? this.addEOL() : this; 784 } 785 /** 786 * Adds the operating system-specific end-of-line marker to the buffer 787 * 788 * @returns {Summary} summary instance 789 */ 790 addEOL() { 791 return this.addRaw(os_1.EOL); 792 } 793 /** 794 * Adds an HTML codeblock to the summary buffer 795 * 796 * @param {string} code content to render within fenced code block 797 * @param {string} lang (optional) language to syntax highlight code 798 * 799 * @returns {Summary} summary instance 800 */ 801 addCodeBlock(code, lang) { 802 const attrs = Object.assign({}, (lang && { lang })); 803 const element = this.wrap('pre', this.wrap('code', code), attrs); 804 return this.addRaw(element).addEOL(); 805 } 806 /** 807 * Adds an HTML list to the summary buffer 808 * 809 * @param {string[]} items list of items to render 810 * @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false) 811 * 812 * @returns {Summary} summary instance 813 */ 814 addList(items, ordered = false) { 815 const tag = ordered ? 'ol' : 'ul'; 816 const listItems = items.map(item => this.wrap('li', item)).join(''); 817 const element = this.wrap(tag, listItems); 818 return this.addRaw(element).addEOL(); 819 } 820 /** 821 * Adds an HTML table to the summary buffer 822 * 823 * @param {SummaryTableCell[]} rows table rows 824 * 825 * @returns {Summary} summary instance 826 */ 827 addTable(rows) { 828 const tableBody = rows 829 .map(row => { 830 const cells = row 831 .map(cell => { 832 if (typeof cell === 'string') { 833 return this.wrap('td', cell); 834 } 835 const { header, data, colspan, rowspan } = cell; 836 const tag = header ? 'th' : 'td'; 837 const attrs = Object.assign(Object.assign({}, (colspan && { colspan })), (rowspan && { rowspan })); 838 return this.wrap(tag, data, attrs); 839 }) 840 .join(''); 841 return this.wrap('tr', cells); 842 }) 843 .join(''); 844 const element = this.wrap('table', tableBody); 845 return this.addRaw(element).addEOL(); 846 } 847 /** 848 * Adds a collapsable HTML details element to the summary buffer 849 * 850 * @param {string} label text for the closed state 851 * @param {string} content collapsable content 852 * 853 * @returns {Summary} summary instance 854 */ 855 addDetails(label, content) { 856 const element = this.wrap('details', this.wrap('summary', label) + content); 857 return this.addRaw(element).addEOL(); 858 } 859 /** 860 * Adds an HTML image tag to the summary buffer 861 * 862 * @param {string} src path to the image you to embed 863 * @param {string} alt text description of the image 864 * @param {SummaryImageOptions} options (optional) addition image attributes 865 * 866 * @returns {Summary} summary instance 867 */ 868 addImage(src, alt, options) { 869 const { width, height } = options || {}; 870 const attrs = Object.assign(Object.assign({}, (width && { width })), (height && { height })); 871 const element = this.wrap('img', null, Object.assign({ src, alt }, attrs)); 872 return this.addRaw(element).addEOL(); 873 } 874 /** 875 * Adds an HTML section heading element 876 * 877 * @param {string} text heading text 878 * @param {number | string} [level=1] (optional) the heading level, default: 1 879 * 880 * @returns {Summary} summary instance 881 */ 882 addHeading(text, level) { 883 const tag = `h${level}`; 884 const allowedTag = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag) 885 ? tag 886 : 'h1'; 887 const element = this.wrap(allowedTag, text); 888 return this.addRaw(element).addEOL(); 889 } 890 /** 891 * Adds an HTML thematic break (<hr>) to the summary buffer 892 * 893 * @returns {Summary} summary instance 894 */ 895 addSeparator() { 896 const element = this.wrap('hr', null); 897 return this.addRaw(element).addEOL(); 898 } 899 /** 900 * Adds an HTML line break (<br>) to the summary buffer 901 * 902 * @returns {Summary} summary instance 903 */ 904 addBreak() { 905 const element = this.wrap('br', null); 906 return this.addRaw(element).addEOL(); 907 } 908 /** 909 * Adds an HTML blockquote to the summary buffer 910 * 911 * @param {string} text quote text 912 * @param {string} cite (optional) citation url 913 * 914 * @returns {Summary} summary instance 915 */ 916 addQuote(text, cite) { 917 const attrs = Object.assign({}, (cite && { cite })); 918 const element = this.wrap('blockquote', text, attrs); 919 return this.addRaw(element).addEOL(); 920 } 921 /** 922 * Adds an HTML anchor tag to the summary buffer 923 * 924 * @param {string} text link text/content 925 * @param {string} href hyperlink 926 * 927 * @returns {Summary} summary instance 928 */ 929 addLink(text, href) { 930 const element = this.wrap('a', text, { href }); 931 return this.addRaw(element).addEOL(); 932 } 933 } 934 const _summary = new Summary(); 935 /** 936 * @deprecated use `core.summary` 937 */ 938 exports.markdownSummary = _summary; 939 exports.summary = _summary; 940 //# sourceMappingURL=summary.js.map 941 942 /***/ }), 943 944 /***/ 5278: 945 /***/ ((__unused_webpack_module, exports) => { 946 947 948 // We use any as a valid input type 949 /* eslint-disable @typescript-eslint/no-explicit-any */ 950 Object.defineProperty(exports, "__esModule", ({ value: true })); 951 exports.toCommandProperties = exports.toCommandValue = void 0; 952 /** 953 * Sanitizes an input into a string so it can be passed into issueCommand safely 954 * @param input input to sanitize into a string 955 */ 956 function toCommandValue(input) { 957 if (input === null || input === undefined) { 958 return ''; 959 } 960 else if (typeof input === 'string' || input instanceof String) { 961 return input; 962 } 963 return JSON.stringify(input); 964 } 965 exports.toCommandValue = toCommandValue; 966 /** 967 * 968 * @param annotationProperties 969 * @returns The command properties to send with the actual annotation command 970 * See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646 971 */ 972 function toCommandProperties(annotationProperties) { 973 if (!Object.keys(annotationProperties).length) { 974 return {}; 975 } 976 return { 977 title: annotationProperties.title, 978 file: annotationProperties.file, 979 line: annotationProperties.startLine, 980 endLine: annotationProperties.endLine, 981 col: annotationProperties.startColumn, 982 endColumn: annotationProperties.endColumn 983 }; 984 } 985 exports.toCommandProperties = toCommandProperties; 986 //# sourceMappingURL=utils.js.map 987 988 /***/ }), 989 990 /***/ 1514: 991 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 992 993 994 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 995 if (k2 === undefined) k2 = k; 996 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 997 }) : (function(o, m, k, k2) { 998 if (k2 === undefined) k2 = k; 999 o[k2] = m[k]; 1000 })); 1001 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 1002 Object.defineProperty(o, "default", { enumerable: true, value: v }); 1003 }) : function(o, v) { 1004 o["default"] = v; 1005 }); 1006 var __importStar = (this && this.__importStar) || function (mod) { 1007 if (mod && mod.__esModule) return mod; 1008 var result = {}; 1009 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 1010 __setModuleDefault(result, mod); 1011 return result; 1012 }; 1013 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 1014 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 1015 return new (P || (P = Promise))(function (resolve, reject) { 1016 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 1017 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 1018 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 1019 step((generator = generator.apply(thisArg, _arguments || [])).next()); 1020 }); 1021 }; 1022 Object.defineProperty(exports, "__esModule", ({ value: true })); 1023 exports.getExecOutput = exports.exec = void 0; 1024 const string_decoder_1 = __nccwpck_require__(1576); 1025 const tr = __importStar(__nccwpck_require__(8159)); 1026 /** 1027 * Exec a command. 1028 * Output will be streamed to the live console. 1029 * Returns promise with return code 1030 * 1031 * @param commandLine command to execute (can include additional args). Must be correctly escaped. 1032 * @param args optional arguments for tool. Escaping is handled by the lib. 1033 * @param options optional exec options. See ExecOptions 1034 * @returns Promise<number> exit code 1035 */ 1036 function exec(commandLine, args, options) { 1037 return __awaiter(this, void 0, void 0, function* () { 1038 const commandArgs = tr.argStringToArray(commandLine); 1039 if (commandArgs.length === 0) { 1040 throw new Error(`Parameter 'commandLine' cannot be null or empty.`); 1041 } 1042 // Path to tool to execute should be first arg 1043 const toolPath = commandArgs[0]; 1044 args = commandArgs.slice(1).concat(args || []); 1045 const runner = new tr.ToolRunner(toolPath, args, options); 1046 return runner.exec(); 1047 }); 1048 } 1049 exports.exec = exec; 1050 /** 1051 * Exec a command and get the output. 1052 * Output will be streamed to the live console. 1053 * Returns promise with the exit code and collected stdout and stderr 1054 * 1055 * @param commandLine command to execute (can include additional args). Must be correctly escaped. 1056 * @param args optional arguments for tool. Escaping is handled by the lib. 1057 * @param options optional exec options. See ExecOptions 1058 * @returns Promise<ExecOutput> exit code, stdout, and stderr 1059 */ 1060 function getExecOutput(commandLine, args, options) { 1061 var _a, _b; 1062 return __awaiter(this, void 0, void 0, function* () { 1063 let stdout = ''; 1064 let stderr = ''; 1065 //Using string decoder covers the case where a mult-byte character is split 1066 const stdoutDecoder = new string_decoder_1.StringDecoder('utf8'); 1067 const stderrDecoder = new string_decoder_1.StringDecoder('utf8'); 1068 const originalStdoutListener = (_a = options === null || options === void 0 ? void 0 : options.listeners) === null || _a === void 0 ? void 0 : _a.stdout; 1069 const originalStdErrListener = (_b = options === null || options === void 0 ? void 0 : options.listeners) === null || _b === void 0 ? void 0 : _b.stderr; 1070 const stdErrListener = (data) => { 1071 stderr += stderrDecoder.write(data); 1072 if (originalStdErrListener) { 1073 originalStdErrListener(data); 1074 } 1075 }; 1076 const stdOutListener = (data) => { 1077 stdout += stdoutDecoder.write(data); 1078 if (originalStdoutListener) { 1079 originalStdoutListener(data); 1080 } 1081 }; 1082 const listeners = Object.assign(Object.assign({}, options === null || options === void 0 ? void 0 : options.listeners), { stdout: stdOutListener, stderr: stdErrListener }); 1083 const exitCode = yield exec(commandLine, args, Object.assign(Object.assign({}, options), { listeners })); 1084 //flush any remaining characters 1085 stdout += stdoutDecoder.end(); 1086 stderr += stderrDecoder.end(); 1087 return { 1088 exitCode, 1089 stdout, 1090 stderr 1091 }; 1092 }); 1093 } 1094 exports.getExecOutput = getExecOutput; 1095 //# sourceMappingURL=exec.js.map 1096 1097 /***/ }), 1098 1099 /***/ 8159: 1100 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 1101 1102 1103 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 1104 if (k2 === undefined) k2 = k; 1105 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 1106 }) : (function(o, m, k, k2) { 1107 if (k2 === undefined) k2 = k; 1108 o[k2] = m[k]; 1109 })); 1110 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 1111 Object.defineProperty(o, "default", { enumerable: true, value: v }); 1112 }) : function(o, v) { 1113 o["default"] = v; 1114 }); 1115 var __importStar = (this && this.__importStar) || function (mod) { 1116 if (mod && mod.__esModule) return mod; 1117 var result = {}; 1118 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 1119 __setModuleDefault(result, mod); 1120 return result; 1121 }; 1122 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 1123 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 1124 return new (P || (P = Promise))(function (resolve, reject) { 1125 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 1126 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 1127 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 1128 step((generator = generator.apply(thisArg, _arguments || [])).next()); 1129 }); 1130 }; 1131 Object.defineProperty(exports, "__esModule", ({ value: true })); 1132 exports.argStringToArray = exports.ToolRunner = void 0; 1133 const os = __importStar(__nccwpck_require__(2037)); 1134 const events = __importStar(__nccwpck_require__(2361)); 1135 const child = __importStar(__nccwpck_require__(2081)); 1136 const path = __importStar(__nccwpck_require__(1017)); 1137 const io = __importStar(__nccwpck_require__(7436)); 1138 const ioUtil = __importStar(__nccwpck_require__(1962)); 1139 const timers_1 = __nccwpck_require__(9512); 1140 /* eslint-disable @typescript-eslint/unbound-method */ 1141 const IS_WINDOWS = process.platform === 'win32'; 1142 /* 1143 * Class for running command line tools. Handles quoting and arg parsing in a platform agnostic way. 1144 */ 1145 class ToolRunner extends events.EventEmitter { 1146 constructor(toolPath, args, options) { 1147 super(); 1148 if (!toolPath) { 1149 throw new Error("Parameter 'toolPath' cannot be null or empty."); 1150 } 1151 this.toolPath = toolPath; 1152 this.args = args || []; 1153 this.options = options || {}; 1154 } 1155 _debug(message) { 1156 if (this.options.listeners && this.options.listeners.debug) { 1157 this.options.listeners.debug(message); 1158 } 1159 } 1160 _getCommandString(options, noPrefix) { 1161 const toolPath = this._getSpawnFileName(); 1162 const args = this._getSpawnArgs(options); 1163 let cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool 1164 if (IS_WINDOWS) { 1165 // Windows + cmd file 1166 if (this._isCmdFile()) { 1167 cmd += toolPath; 1168 for (const a of args) { 1169 cmd += ` ${a}`; 1170 } 1171 } 1172 // Windows + verbatim 1173 else if (options.windowsVerbatimArguments) { 1174 cmd += `"${toolPath}"`; 1175 for (const a of args) { 1176 cmd += ` ${a}`; 1177 } 1178 } 1179 // Windows (regular) 1180 else { 1181 cmd += this._windowsQuoteCmdArg(toolPath); 1182 for (const a of args) { 1183 cmd += ` ${this._windowsQuoteCmdArg(a)}`; 1184 } 1185 } 1186 } 1187 else { 1188 // OSX/Linux - this can likely be improved with some form of quoting. 1189 // creating processes on Unix is fundamentally different than Windows. 1190 // on Unix, execvp() takes an arg array. 1191 cmd += toolPath; 1192 for (const a of args) { 1193 cmd += ` ${a}`; 1194 } 1195 } 1196 return cmd; 1197 } 1198 _processLineBuffer(data, strBuffer, onLine) { 1199 try { 1200 let s = strBuffer + data.toString(); 1201 let n = s.indexOf(os.EOL); 1202 while (n > -1) { 1203 const line = s.substring(0, n); 1204 onLine(line); 1205 // the rest of the string ... 1206 s = s.substring(n + os.EOL.length); 1207 n = s.indexOf(os.EOL); 1208 } 1209 return s; 1210 } 1211 catch (err) { 1212 // streaming lines to console is best effort. Don't fail a build. 1213 this._debug(`error processing line. Failed with error ${err}`); 1214 return ''; 1215 } 1216 } 1217 _getSpawnFileName() { 1218 if (IS_WINDOWS) { 1219 if (this._isCmdFile()) { 1220 return process.env['COMSPEC'] || 'cmd.exe'; 1221 } 1222 } 1223 return this.toolPath; 1224 } 1225 _getSpawnArgs(options) { 1226 if (IS_WINDOWS) { 1227 if (this._isCmdFile()) { 1228 let argline = `/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`; 1229 for (const a of this.args) { 1230 argline += ' '; 1231 argline += options.windowsVerbatimArguments 1232 ? a 1233 : this._windowsQuoteCmdArg(a); 1234 } 1235 argline += '"'; 1236 return [argline]; 1237 } 1238 } 1239 return this.args; 1240 } 1241 _endsWith(str, end) { 1242 return str.endsWith(end); 1243 } 1244 _isCmdFile() { 1245 const upperToolPath = this.toolPath.toUpperCase(); 1246 return (this._endsWith(upperToolPath, '.CMD') || 1247 this._endsWith(upperToolPath, '.BAT')); 1248 } 1249 _windowsQuoteCmdArg(arg) { 1250 // for .exe, apply the normal quoting rules that libuv applies 1251 if (!this._isCmdFile()) { 1252 return this._uvQuoteCmdArg(arg); 1253 } 1254 // otherwise apply quoting rules specific to the cmd.exe command line parser. 1255 // the libuv rules are generic and are not designed specifically for cmd.exe 1256 // command line parser. 1257 // 1258 // for a detailed description of the cmd.exe command line parser, refer to 1259 // http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912 1260 // need quotes for empty arg 1261 if (!arg) { 1262 return '""'; 1263 } 1264 // determine whether the arg needs to be quoted 1265 const cmdSpecialChars = [ 1266 ' ', 1267 '\t', 1268 '&', 1269 '(', 1270 ')', 1271 '[', 1272 ']', 1273 '{', 1274 '}', 1275 '^', 1276 '=', 1277 ';', 1278 '!', 1279 "'", 1280 '+', 1281 ',', 1282 '`', 1283 '~', 1284 '|', 1285 '<', 1286 '>', 1287 '"' 1288 ]; 1289 let needsQuotes = false; 1290 for (const char of arg) { 1291 if (cmdSpecialChars.some(x => x === char)) { 1292 needsQuotes = true; 1293 break; 1294 } 1295 } 1296 // short-circuit if quotes not needed 1297 if (!needsQuotes) { 1298 return arg; 1299 } 1300 // the following quoting rules are very similar to the rules that by libuv applies. 1301 // 1302 // 1) wrap the string in quotes 1303 // 1304 // 2) double-up quotes - i.e. " => "" 1305 // 1306 // this is different from the libuv quoting rules. libuv replaces " with \", which unfortunately 1307 // doesn't work well with a cmd.exe command line. 1308 // 1309 // note, replacing " with "" also works well if the arg is passed to a downstream .NET console app. 1310 // for example, the command line: 1311 // foo.exe "myarg:""my val""" 1312 // is parsed by a .NET console app into an arg array: 1313 // [ "myarg:\"my val\"" ] 1314 // which is the same end result when applying libuv quoting rules. although the actual 1315 // command line from libuv quoting rules would look like: 1316 // foo.exe "myarg:\"my val\"" 1317 // 1318 // 3) double-up slashes that precede a quote, 1319 // e.g. hello \world => "hello \world" 1320 // hello\"world => "hello\\""world" 1321 // hello\\"world => "hello\\\\""world" 1322 // hello world\ => "hello world\\" 1323 // 1324 // technically this is not required for a cmd.exe command line, or the batch argument parser. 1325 // the reasons for including this as a .cmd quoting rule are: 1326 // 1327 // a) this is optimized for the scenario where the argument is passed from the .cmd file to an 1328 // external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule. 1329 // 1330 // b) it's what we've been doing previously (by deferring to node default behavior) and we 1331 // haven't heard any complaints about that aspect. 1332 // 1333 // note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be 1334 // escaped when used on the command line directly - even though within a .cmd file % can be escaped 1335 // by using %%. 1336 // 1337 // the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts 1338 // the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing. 1339 // 1340 // one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would 1341 // often work, since it is unlikely that var^ would exist, and the ^ character is removed when the 1342 // variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args 1343 // to an external program. 1344 // 1345 // an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file. 1346 // % can be escaped within a .cmd file. 1347 let reverse = '"'; 1348 let quoteHit = true; 1349 for (let i = arg.length; i > 0; i--) { 1350 // walk the string in reverse 1351 reverse += arg[i - 1]; 1352 if (quoteHit && arg[i - 1] === '\\') { 1353 reverse += '\\'; // double the slash 1354 } 1355 else if (arg[i - 1] === '"') { 1356 quoteHit = true; 1357 reverse += '"'; // double the quote 1358 } 1359 else { 1360 quoteHit = false; 1361 } 1362 } 1363 reverse += '"'; 1364 return reverse 1365 .split('') 1366 .reverse() 1367 .join(''); 1368 } 1369 _uvQuoteCmdArg(arg) { 1370 // Tool runner wraps child_process.spawn() and needs to apply the same quoting as 1371 // Node in certain cases where the undocumented spawn option windowsVerbatimArguments 1372 // is used. 1373 // 1374 // Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV, 1375 // see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details), 1376 // pasting copyright notice from Node within this function: 1377 // 1378 // Copyright Joyent, Inc. and other Node contributors. All rights reserved. 1379 // 1380 // Permission is hereby granted, free of charge, to any person obtaining a copy 1381 // of this software and associated documentation files (the "Software"), to 1382 // deal in the Software without restriction, including without limitation the 1383 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 1384 // sell copies of the Software, and to permit persons to whom the Software is 1385 // furnished to do so, subject to the following conditions: 1386 // 1387 // The above copyright notice and this permission notice shall be included in 1388 // all copies or substantial portions of the Software. 1389 // 1390 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1391 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1392 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1393 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1394 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 1395 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 1396 // IN THE SOFTWARE. 1397 if (!arg) { 1398 // Need double quotation for empty argument 1399 return '""'; 1400 } 1401 if (!arg.includes(' ') && !arg.includes('\t') && !arg.includes('"')) { 1402 // No quotation needed 1403 return arg; 1404 } 1405 if (!arg.includes('"') && !arg.includes('\\')) { 1406 // No embedded double quotes or backslashes, so I can just wrap 1407 // quote marks around the whole thing. 1408 return `"${arg}"`; 1409 } 1410 // Expected input/output: 1411 // input : hello"world 1412 // output: "hello\"world" 1413 // input : hello""world 1414 // output: "hello\"\"world" 1415 // input : hello\world 1416 // output: hello\world 1417 // input : hello\\world 1418 // output: hello\\world 1419 // input : hello\"world 1420 // output: "hello\\\"world" 1421 // input : hello\\"world 1422 // output: "hello\\\\\"world" 1423 // input : hello world\ 1424 // output: "hello world\\" - note the comment in libuv actually reads "hello world\" 1425 // but it appears the comment is wrong, it should be "hello world\\" 1426 let reverse = '"'; 1427 let quoteHit = true; 1428 for (let i = arg.length; i > 0; i--) { 1429 // walk the string in reverse 1430 reverse += arg[i - 1]; 1431 if (quoteHit && arg[i - 1] === '\\') { 1432 reverse += '\\'; 1433 } 1434 else if (arg[i - 1] === '"') { 1435 quoteHit = true; 1436 reverse += '\\'; 1437 } 1438 else { 1439 quoteHit = false; 1440 } 1441 } 1442 reverse += '"'; 1443 return reverse 1444 .split('') 1445 .reverse() 1446 .join(''); 1447 } 1448 _cloneExecOptions(options) { 1449 options = options || {}; 1450 const result = { 1451 cwd: options.cwd || process.cwd(), 1452 env: options.env || process.env, 1453 silent: options.silent || false, 1454 windowsVerbatimArguments: options.windowsVerbatimArguments || false, 1455 failOnStdErr: options.failOnStdErr || false, 1456 ignoreReturnCode: options.ignoreReturnCode || false, 1457 delay: options.delay || 10000 1458 }; 1459 result.outStream = options.outStream || process.stdout; 1460 result.errStream = options.errStream || process.stderr; 1461 return result; 1462 } 1463 _getSpawnOptions(options, toolPath) { 1464 options = options || {}; 1465 const result = {}; 1466 result.cwd = options.cwd; 1467 result.env = options.env; 1468 result['windowsVerbatimArguments'] = 1469 options.windowsVerbatimArguments || this._isCmdFile(); 1470 if (options.windowsVerbatimArguments) { 1471 result.argv0 = `"${toolPath}"`; 1472 } 1473 return result; 1474 } 1475 /** 1476 * Exec a tool. 1477 * Output will be streamed to the live console. 1478 * Returns promise with return code 1479 * 1480 * @param tool path to tool to exec 1481 * @param options optional exec options. See ExecOptions 1482 * @returns number 1483 */ 1484 exec() { 1485 return __awaiter(this, void 0, void 0, function* () { 1486 // root the tool path if it is unrooted and contains relative pathing 1487 if (!ioUtil.isRooted(this.toolPath) && 1488 (this.toolPath.includes('/') || 1489 (IS_WINDOWS && this.toolPath.includes('\\')))) { 1490 // prefer options.cwd if it is specified, however options.cwd may also need to be rooted 1491 this.toolPath = path.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath); 1492 } 1493 // if the tool is only a file name, then resolve it from the PATH 1494 // otherwise verify it exists (add extension on Windows if necessary) 1495 this.toolPath = yield io.which(this.toolPath, true); 1496 return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { 1497 this._debug(`exec tool: ${this.toolPath}`); 1498 this._debug('arguments:'); 1499 for (const arg of this.args) { 1500 this._debug(` ${arg}`); 1501 } 1502 const optionsNonNull = this._cloneExecOptions(this.options); 1503 if (!optionsNonNull.silent && optionsNonNull.outStream) { 1504 optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL); 1505 } 1506 const state = new ExecState(optionsNonNull, this.toolPath); 1507 state.on('debug', (message) => { 1508 this._debug(message); 1509 }); 1510 if (this.options.cwd && !(yield ioUtil.exists(this.options.cwd))) { 1511 return reject(new Error(`The cwd: ${this.options.cwd} does not exist!`)); 1512 } 1513 const fileName = this._getSpawnFileName(); 1514 const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName)); 1515 let stdbuffer = ''; 1516 if (cp.stdout) { 1517 cp.stdout.on('data', (data) => { 1518 if (this.options.listeners && this.options.listeners.stdout) { 1519 this.options.listeners.stdout(data); 1520 } 1521 if (!optionsNonNull.silent && optionsNonNull.outStream) { 1522 optionsNonNull.outStream.write(data); 1523 } 1524 stdbuffer = this._processLineBuffer(data, stdbuffer, (line) => { 1525 if (this.options.listeners && this.options.listeners.stdline) { 1526 this.options.listeners.stdline(line); 1527 } 1528 }); 1529 }); 1530 } 1531 let errbuffer = ''; 1532 if (cp.stderr) { 1533 cp.stderr.on('data', (data) => { 1534 state.processStderr = true; 1535 if (this.options.listeners && this.options.listeners.stderr) { 1536 this.options.listeners.stderr(data); 1537 } 1538 if (!optionsNonNull.silent && 1539 optionsNonNull.errStream && 1540 optionsNonNull.outStream) { 1541 const s = optionsNonNull.failOnStdErr 1542 ? optionsNonNull.errStream 1543 : optionsNonNull.outStream; 1544 s.write(data); 1545 } 1546 errbuffer = this._processLineBuffer(data, errbuffer, (line) => { 1547 if (this.options.listeners && this.options.listeners.errline) { 1548 this.options.listeners.errline(line); 1549 } 1550 }); 1551 }); 1552 } 1553 cp.on('error', (err) => { 1554 state.processError = err.message; 1555 state.processExited = true; 1556 state.processClosed = true; 1557 state.CheckComplete(); 1558 }); 1559 cp.on('exit', (code) => { 1560 state.processExitCode = code; 1561 state.processExited = true; 1562 this._debug(`Exit code ${code} received from tool '${this.toolPath}'`); 1563 state.CheckComplete(); 1564 }); 1565 cp.on('close', (code) => { 1566 state.processExitCode = code; 1567 state.processExited = true; 1568 state.processClosed = true; 1569 this._debug(`STDIO streams have closed for tool '${this.toolPath}'`); 1570 state.CheckComplete(); 1571 }); 1572 state.on('done', (error, exitCode) => { 1573 if (stdbuffer.length > 0) { 1574 this.emit('stdline', stdbuffer); 1575 } 1576 if (errbuffer.length > 0) { 1577 this.emit('errline', errbuffer); 1578 } 1579 cp.removeAllListeners(); 1580 if (error) { 1581 reject(error); 1582 } 1583 else { 1584 resolve(exitCode); 1585 } 1586 }); 1587 if (this.options.input) { 1588 if (!cp.stdin) { 1589 throw new Error('child process missing stdin'); 1590 } 1591 cp.stdin.end(this.options.input); 1592 } 1593 })); 1594 }); 1595 } 1596 } 1597 exports.ToolRunner = ToolRunner; 1598 /** 1599 * Convert an arg string to an array of args. Handles escaping 1600 * 1601 * @param argString string of arguments 1602 * @returns string[] array of arguments 1603 */ 1604 function argStringToArray(argString) { 1605 const args = []; 1606 let inQuotes = false; 1607 let escaped = false; 1608 let arg = ''; 1609 function append(c) { 1610 // we only escape double quotes. 1611 if (escaped && c !== '"') { 1612 arg += '\\'; 1613 } 1614 arg += c; 1615 escaped = false; 1616 } 1617 for (let i = 0; i < argString.length; i++) { 1618 const c = argString.charAt(i); 1619 if (c === '"') { 1620 if (!escaped) { 1621 inQuotes = !inQuotes; 1622 } 1623 else { 1624 append(c); 1625 } 1626 continue; 1627 } 1628 if (c === '\\' && escaped) { 1629 append(c); 1630 continue; 1631 } 1632 if (c === '\\' && inQuotes) { 1633 escaped = true; 1634 continue; 1635 } 1636 if (c === ' ' && !inQuotes) { 1637 if (arg.length > 0) { 1638 args.push(arg); 1639 arg = ''; 1640 } 1641 continue; 1642 } 1643 append(c); 1644 } 1645 if (arg.length > 0) { 1646 args.push(arg.trim()); 1647 } 1648 return args; 1649 } 1650 exports.argStringToArray = argStringToArray; 1651 class ExecState extends events.EventEmitter { 1652 constructor(options, toolPath) { 1653 super(); 1654 this.processClosed = false; // tracks whether the process has exited and stdio is closed 1655 this.processError = ''; 1656 this.processExitCode = 0; 1657 this.processExited = false; // tracks whether the process has exited 1658 this.processStderr = false; // tracks whether stderr was written to 1659 this.delay = 10000; // 10 seconds 1660 this.done = false; 1661 this.timeout = null; 1662 if (!toolPath) { 1663 throw new Error('toolPath must not be empty'); 1664 } 1665 this.options = options; 1666 this.toolPath = toolPath; 1667 if (options.delay) { 1668 this.delay = options.delay; 1669 } 1670 } 1671 CheckComplete() { 1672 if (this.done) { 1673 return; 1674 } 1675 if (this.processClosed) { 1676 this._setResult(); 1677 } 1678 else if (this.processExited) { 1679 this.timeout = timers_1.setTimeout(ExecState.HandleTimeout, this.delay, this); 1680 } 1681 } 1682 _debug(message) { 1683 this.emit('debug', message); 1684 } 1685 _setResult() { 1686 // determine whether there is an error 1687 let error; 1688 if (this.processExited) { 1689 if (this.processError) { 1690 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}`); 1691 } 1692 else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) { 1693 error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`); 1694 } 1695 else if (this.processStderr && this.options.failOnStdErr) { 1696 error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`); 1697 } 1698 } 1699 // clear the timeout 1700 if (this.timeout) { 1701 clearTimeout(this.timeout); 1702 this.timeout = null; 1703 } 1704 this.done = true; 1705 this.emit('done', error, this.processExitCode); 1706 } 1707 static HandleTimeout(state) { 1708 if (state.done) { 1709 return; 1710 } 1711 if (!state.processClosed && state.processExited) { 1712 const message = `The STDIO streams did not close within ${state.delay / 1713 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.`; 1714 state._debug(message); 1715 } 1716 state._setResult(); 1717 } 1718 } 1719 //# sourceMappingURL=toolrunner.js.map 1720 1721 /***/ }), 1722 1723 /***/ 4087: 1724 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 1725 1726 1727 Object.defineProperty(exports, "__esModule", ({ value: true })); 1728 exports.Context = void 0; 1729 const fs_1 = __nccwpck_require__(7147); 1730 const os_1 = __nccwpck_require__(2037); 1731 class Context { 1732 /** 1733 * Hydrate the context from the environment 1734 */ 1735 constructor() { 1736 var _a, _b, _c; 1737 this.payload = {}; 1738 if (process.env.GITHUB_EVENT_PATH) { 1739 if (fs_1.existsSync(process.env.GITHUB_EVENT_PATH)) { 1740 this.payload = JSON.parse(fs_1.readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: 'utf8' })); 1741 } 1742 else { 1743 const path = process.env.GITHUB_EVENT_PATH; 1744 process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.EOL}`); 1745 } 1746 } 1747 this.eventName = process.env.GITHUB_EVENT_NAME; 1748 this.sha = process.env.GITHUB_SHA; 1749 this.ref = process.env.GITHUB_REF; 1750 this.workflow = process.env.GITHUB_WORKFLOW; 1751 this.action = process.env.GITHUB_ACTION; 1752 this.actor = process.env.GITHUB_ACTOR; 1753 this.job = process.env.GITHUB_JOB; 1754 this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10); 1755 this.runId = parseInt(process.env.GITHUB_RUN_ID, 10); 1756 this.apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== void 0 ? _a : `https://api.github.com`; 1757 this.serverUrl = (_b = process.env.GITHUB_SERVER_URL) !== null && _b !== void 0 ? _b : `https://github.com`; 1758 this.graphqlUrl = (_c = process.env.GITHUB_GRAPHQL_URL) !== null && _c !== void 0 ? _c : `https://api.github.com/graphql`; 1759 } 1760 get issue() { 1761 const payload = this.payload; 1762 return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number }); 1763 } 1764 get repo() { 1765 if (process.env.GITHUB_REPOSITORY) { 1766 const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/'); 1767 return { owner, repo }; 1768 } 1769 if (this.payload.repository) { 1770 return { 1771 owner: this.payload.repository.owner.login, 1772 repo: this.payload.repository.name 1773 }; 1774 } 1775 throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'"); 1776 } 1777 } 1778 exports.Context = Context; 1779 //# sourceMappingURL=context.js.map 1780 1781 /***/ }), 1782 1783 /***/ 5438: 1784 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 1785 1786 1787 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 1788 if (k2 === undefined) k2 = k; 1789 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 1790 }) : (function(o, m, k, k2) { 1791 if (k2 === undefined) k2 = k; 1792 o[k2] = m[k]; 1793 })); 1794 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 1795 Object.defineProperty(o, "default", { enumerable: true, value: v }); 1796 }) : function(o, v) { 1797 o["default"] = v; 1798 }); 1799 var __importStar = (this && this.__importStar) || function (mod) { 1800 if (mod && mod.__esModule) return mod; 1801 var result = {}; 1802 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 1803 __setModuleDefault(result, mod); 1804 return result; 1805 }; 1806 Object.defineProperty(exports, "__esModule", ({ value: true })); 1807 exports.getOctokit = exports.context = void 0; 1808 const Context = __importStar(__nccwpck_require__(4087)); 1809 const utils_1 = __nccwpck_require__(3030); 1810 exports.context = new Context.Context(); 1811 /** 1812 * Returns a hydrated octokit ready to use for GitHub Actions 1813 * 1814 * @param token the repo PAT or GITHUB_TOKEN 1815 * @param options other options to set 1816 */ 1817 function getOctokit(token, options, ...additionalPlugins) { 1818 const GitHubWithPlugins = utils_1.GitHub.plugin(...additionalPlugins); 1819 return new GitHubWithPlugins(utils_1.getOctokitOptions(token, options)); 1820 } 1821 exports.getOctokit = getOctokit; 1822 //# sourceMappingURL=github.js.map 1823 1824 /***/ }), 1825 1826 /***/ 7914: 1827 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 1828 1829 1830 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 1831 if (k2 === undefined) k2 = k; 1832 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 1833 }) : (function(o, m, k, k2) { 1834 if (k2 === undefined) k2 = k; 1835 o[k2] = m[k]; 1836 })); 1837 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 1838 Object.defineProperty(o, "default", { enumerable: true, value: v }); 1839 }) : function(o, v) { 1840 o["default"] = v; 1841 }); 1842 var __importStar = (this && this.__importStar) || function (mod) { 1843 if (mod && mod.__esModule) return mod; 1844 var result = {}; 1845 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 1846 __setModuleDefault(result, mod); 1847 return result; 1848 }; 1849 Object.defineProperty(exports, "__esModule", ({ value: true })); 1850 exports.getApiBaseUrl = exports.getProxyAgent = exports.getAuthString = void 0; 1851 const httpClient = __importStar(__nccwpck_require__(6255)); 1852 function getAuthString(token, options) { 1853 if (!token && !options.auth) { 1854 throw new Error('Parameter token or opts.auth is required'); 1855 } 1856 else if (token && options.auth) { 1857 throw new Error('Parameters token and opts.auth may not both be specified'); 1858 } 1859 return typeof options.auth === 'string' ? options.auth : `token ${token}`; 1860 } 1861 exports.getAuthString = getAuthString; 1862 function getProxyAgent(destinationUrl) { 1863 const hc = new httpClient.HttpClient(); 1864 return hc.getAgent(destinationUrl); 1865 } 1866 exports.getProxyAgent = getProxyAgent; 1867 function getApiBaseUrl() { 1868 return process.env['GITHUB_API_URL'] || 'https://api.github.com'; 1869 } 1870 exports.getApiBaseUrl = getApiBaseUrl; 1871 //# sourceMappingURL=utils.js.map 1872 1873 /***/ }), 1874 1875 /***/ 3030: 1876 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 1877 1878 1879 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 1880 if (k2 === undefined) k2 = k; 1881 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 1882 }) : (function(o, m, k, k2) { 1883 if (k2 === undefined) k2 = k; 1884 o[k2] = m[k]; 1885 })); 1886 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 1887 Object.defineProperty(o, "default", { enumerable: true, value: v }); 1888 }) : function(o, v) { 1889 o["default"] = v; 1890 }); 1891 var __importStar = (this && this.__importStar) || function (mod) { 1892 if (mod && mod.__esModule) return mod; 1893 var result = {}; 1894 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 1895 __setModuleDefault(result, mod); 1896 return result; 1897 }; 1898 Object.defineProperty(exports, "__esModule", ({ value: true })); 1899 exports.getOctokitOptions = exports.GitHub = exports.defaults = exports.context = void 0; 1900 const Context = __importStar(__nccwpck_require__(4087)); 1901 const Utils = __importStar(__nccwpck_require__(7914)); 1902 // octokit + plugins 1903 const core_1 = __nccwpck_require__(6762); 1904 const plugin_rest_endpoint_methods_1 = __nccwpck_require__(3044); 1905 const plugin_paginate_rest_1 = __nccwpck_require__(4193); 1906 exports.context = new Context.Context(); 1907 const baseUrl = Utils.getApiBaseUrl(); 1908 exports.defaults = { 1909 baseUrl, 1910 request: { 1911 agent: Utils.getProxyAgent(baseUrl) 1912 } 1913 }; 1914 exports.GitHub = core_1.Octokit.plugin(plugin_rest_endpoint_methods_1.restEndpointMethods, plugin_paginate_rest_1.paginateRest).defaults(exports.defaults); 1915 /** 1916 * Convience function to correctly format Octokit Options to pass into the constructor. 1917 * 1918 * @param token the repo PAT or GITHUB_TOKEN 1919 * @param options other options to set 1920 */ 1921 function getOctokitOptions(token, options) { 1922 const opts = Object.assign({}, options || {}); // Shallow clone - don't mutate the object provided by the caller 1923 // Auth 1924 const auth = Utils.getAuthString(token, opts); 1925 if (auth) { 1926 opts.auth = auth; 1927 } 1928 return opts; 1929 } 1930 exports.getOctokitOptions = getOctokitOptions; 1931 //# sourceMappingURL=utils.js.map 1932 1933 /***/ }), 1934 1935 /***/ 5526: 1936 /***/ (function(__unused_webpack_module, exports) { 1937 1938 1939 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 1940 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 1941 return new (P || (P = Promise))(function (resolve, reject) { 1942 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 1943 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 1944 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 1945 step((generator = generator.apply(thisArg, _arguments || [])).next()); 1946 }); 1947 }; 1948 Object.defineProperty(exports, "__esModule", ({ value: true })); 1949 exports.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0; 1950 class BasicCredentialHandler { 1951 constructor(username, password) { 1952 this.username = username; 1953 this.password = password; 1954 } 1955 prepareRequest(options) { 1956 if (!options.headers) { 1957 throw Error('The request has no headers'); 1958 } 1959 options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`; 1960 } 1961 // This handler cannot handle 401 1962 canHandleAuthentication() { 1963 return false; 1964 } 1965 handleAuthentication() { 1966 return __awaiter(this, void 0, void 0, function* () { 1967 throw new Error('not implemented'); 1968 }); 1969 } 1970 } 1971 exports.BasicCredentialHandler = BasicCredentialHandler; 1972 class BearerCredentialHandler { 1973 constructor(token) { 1974 this.token = token; 1975 } 1976 // currently implements pre-authorization 1977 // TODO: support preAuth = false where it hooks on 401 1978 prepareRequest(options) { 1979 if (!options.headers) { 1980 throw Error('The request has no headers'); 1981 } 1982 options.headers['Authorization'] = `Bearer ${this.token}`; 1983 } 1984 // This handler cannot handle 401 1985 canHandleAuthentication() { 1986 return false; 1987 } 1988 handleAuthentication() { 1989 return __awaiter(this, void 0, void 0, function* () { 1990 throw new Error('not implemented'); 1991 }); 1992 } 1993 } 1994 exports.BearerCredentialHandler = BearerCredentialHandler; 1995 class PersonalAccessTokenCredentialHandler { 1996 constructor(token) { 1997 this.token = token; 1998 } 1999 // currently implements pre-authorization 2000 // TODO: support preAuth = false where it hooks on 401 2001 prepareRequest(options) { 2002 if (!options.headers) { 2003 throw Error('The request has no headers'); 2004 } 2005 options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`; 2006 } 2007 // This handler cannot handle 401 2008 canHandleAuthentication() { 2009 return false; 2010 } 2011 handleAuthentication() { 2012 return __awaiter(this, void 0, void 0, function* () { 2013 throw new Error('not implemented'); 2014 }); 2015 } 2016 } 2017 exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; 2018 //# sourceMappingURL=auth.js.map 2019 2020 /***/ }), 2021 2022 /***/ 6255: 2023 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 2024 2025 2026 /* eslint-disable @typescript-eslint/no-explicit-any */ 2027 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 2028 if (k2 === undefined) k2 = k; 2029 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 2030 }) : (function(o, m, k, k2) { 2031 if (k2 === undefined) k2 = k; 2032 o[k2] = m[k]; 2033 })); 2034 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 2035 Object.defineProperty(o, "default", { enumerable: true, value: v }); 2036 }) : function(o, v) { 2037 o["default"] = v; 2038 }); 2039 var __importStar = (this && this.__importStar) || function (mod) { 2040 if (mod && mod.__esModule) return mod; 2041 var result = {}; 2042 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 2043 __setModuleDefault(result, mod); 2044 return result; 2045 }; 2046 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 2047 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 2048 return new (P || (P = Promise))(function (resolve, reject) { 2049 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 2050 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 2051 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 2052 step((generator = generator.apply(thisArg, _arguments || [])).next()); 2053 }); 2054 }; 2055 Object.defineProperty(exports, "__esModule", ({ value: true })); 2056 exports.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0; 2057 const http = __importStar(__nccwpck_require__(3685)); 2058 const https = __importStar(__nccwpck_require__(5687)); 2059 const pm = __importStar(__nccwpck_require__(9835)); 2060 const tunnel = __importStar(__nccwpck_require__(4294)); 2061 var HttpCodes; 2062 (function (HttpCodes) { 2063 HttpCodes[HttpCodes["OK"] = 200] = "OK"; 2064 HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; 2065 HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; 2066 HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; 2067 HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; 2068 HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; 2069 HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; 2070 HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; 2071 HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; 2072 HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; 2073 HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; 2074 HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; 2075 HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; 2076 HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; 2077 HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; 2078 HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; 2079 HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; 2080 HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; 2081 HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; 2082 HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; 2083 HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; 2084 HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; 2085 HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; 2086 HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; 2087 HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; 2088 HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; 2089 HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; 2090 })(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); 2091 var Headers; 2092 (function (Headers) { 2093 Headers["Accept"] = "accept"; 2094 Headers["ContentType"] = "content-type"; 2095 })(Headers = exports.Headers || (exports.Headers = {})); 2096 var MediaTypes; 2097 (function (MediaTypes) { 2098 MediaTypes["ApplicationJson"] = "application/json"; 2099 })(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {})); 2100 /** 2101 * Returns the proxy URL, depending upon the supplied url and proxy environment variables. 2102 * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com 2103 */ 2104 function getProxyUrl(serverUrl) { 2105 const proxyUrl = pm.getProxyUrl(new URL(serverUrl)); 2106 return proxyUrl ? proxyUrl.href : ''; 2107 } 2108 exports.getProxyUrl = getProxyUrl; 2109 const HttpRedirectCodes = [ 2110 HttpCodes.MovedPermanently, 2111 HttpCodes.ResourceMoved, 2112 HttpCodes.SeeOther, 2113 HttpCodes.TemporaryRedirect, 2114 HttpCodes.PermanentRedirect 2115 ]; 2116 const HttpResponseRetryCodes = [ 2117 HttpCodes.BadGateway, 2118 HttpCodes.ServiceUnavailable, 2119 HttpCodes.GatewayTimeout 2120 ]; 2121 const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; 2122 const ExponentialBackoffCeiling = 10; 2123 const ExponentialBackoffTimeSlice = 5; 2124 class HttpClientError extends Error { 2125 constructor(message, statusCode) { 2126 super(message); 2127 this.name = 'HttpClientError'; 2128 this.statusCode = statusCode; 2129 Object.setPrototypeOf(this, HttpClientError.prototype); 2130 } 2131 } 2132 exports.HttpClientError = HttpClientError; 2133 class HttpClientResponse { 2134 constructor(message) { 2135 this.message = message; 2136 } 2137 readBody() { 2138 return __awaiter(this, void 0, void 0, function* () { 2139 return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () { 2140 let output = Buffer.alloc(0); 2141 this.message.on('data', (chunk) => { 2142 output = Buffer.concat([output, chunk]); 2143 }); 2144 this.message.on('end', () => { 2145 resolve(output.toString()); 2146 }); 2147 })); 2148 }); 2149 } 2150 } 2151 exports.HttpClientResponse = HttpClientResponse; 2152 function isHttps(requestUrl) { 2153 const parsedUrl = new URL(requestUrl); 2154 return parsedUrl.protocol === 'https:'; 2155 } 2156 exports.isHttps = isHttps; 2157 class HttpClient { 2158 constructor(userAgent, handlers, requestOptions) { 2159 this._ignoreSslError = false; 2160 this._allowRedirects = true; 2161 this._allowRedirectDowngrade = false; 2162 this._maxRedirects = 50; 2163 this._allowRetries = false; 2164 this._maxRetries = 1; 2165 this._keepAlive = false; 2166 this._disposed = false; 2167 this.userAgent = userAgent; 2168 this.handlers = handlers || []; 2169 this.requestOptions = requestOptions; 2170 if (requestOptions) { 2171 if (requestOptions.ignoreSslError != null) { 2172 this._ignoreSslError = requestOptions.ignoreSslError; 2173 } 2174 this._socketTimeout = requestOptions.socketTimeout; 2175 if (requestOptions.allowRedirects != null) { 2176 this._allowRedirects = requestOptions.allowRedirects; 2177 } 2178 if (requestOptions.allowRedirectDowngrade != null) { 2179 this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; 2180 } 2181 if (requestOptions.maxRedirects != null) { 2182 this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); 2183 } 2184 if (requestOptions.keepAlive != null) { 2185 this._keepAlive = requestOptions.keepAlive; 2186 } 2187 if (requestOptions.allowRetries != null) { 2188 this._allowRetries = requestOptions.allowRetries; 2189 } 2190 if (requestOptions.maxRetries != null) { 2191 this._maxRetries = requestOptions.maxRetries; 2192 } 2193 } 2194 } 2195 options(requestUrl, additionalHeaders) { 2196 return __awaiter(this, void 0, void 0, function* () { 2197 return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); 2198 }); 2199 } 2200 get(requestUrl, additionalHeaders) { 2201 return __awaiter(this, void 0, void 0, function* () { 2202 return this.request('GET', requestUrl, null, additionalHeaders || {}); 2203 }); 2204 } 2205 del(requestUrl, additionalHeaders) { 2206 return __awaiter(this, void 0, void 0, function* () { 2207 return this.request('DELETE', requestUrl, null, additionalHeaders || {}); 2208 }); 2209 } 2210 post(requestUrl, data, additionalHeaders) { 2211 return __awaiter(this, void 0, void 0, function* () { 2212 return this.request('POST', requestUrl, data, additionalHeaders || {}); 2213 }); 2214 } 2215 patch(requestUrl, data, additionalHeaders) { 2216 return __awaiter(this, void 0, void 0, function* () { 2217 return this.request('PATCH', requestUrl, data, additionalHeaders || {}); 2218 }); 2219 } 2220 put(requestUrl, data, additionalHeaders) { 2221 return __awaiter(this, void 0, void 0, function* () { 2222 return this.request('PUT', requestUrl, data, additionalHeaders || {}); 2223 }); 2224 } 2225 head(requestUrl, additionalHeaders) { 2226 return __awaiter(this, void 0, void 0, function* () { 2227 return this.request('HEAD', requestUrl, null, additionalHeaders || {}); 2228 }); 2229 } 2230 sendStream(verb, requestUrl, stream, additionalHeaders) { 2231 return __awaiter(this, void 0, void 0, function* () { 2232 return this.request(verb, requestUrl, stream, additionalHeaders); 2233 }); 2234 } 2235 /** 2236 * Gets a typed object from an endpoint 2237 * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise 2238 */ 2239 getJson(requestUrl, additionalHeaders = {}) { 2240 return __awaiter(this, void 0, void 0, function* () { 2241 additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); 2242 const res = yield this.get(requestUrl, additionalHeaders); 2243 return this._processResponse(res, this.requestOptions); 2244 }); 2245 } 2246 postJson(requestUrl, obj, additionalHeaders = {}) { 2247 return __awaiter(this, void 0, void 0, function* () { 2248 const data = JSON.stringify(obj, null, 2); 2249 additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); 2250 additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); 2251 const res = yield this.post(requestUrl, data, additionalHeaders); 2252 return this._processResponse(res, this.requestOptions); 2253 }); 2254 } 2255 putJson(requestUrl, obj, additionalHeaders = {}) { 2256 return __awaiter(this, void 0, void 0, function* () { 2257 const data = JSON.stringify(obj, null, 2); 2258 additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); 2259 additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); 2260 const res = yield this.put(requestUrl, data, additionalHeaders); 2261 return this._processResponse(res, this.requestOptions); 2262 }); 2263 } 2264 patchJson(requestUrl, obj, additionalHeaders = {}) { 2265 return __awaiter(this, void 0, void 0, function* () { 2266 const data = JSON.stringify(obj, null, 2); 2267 additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); 2268 additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); 2269 const res = yield this.patch(requestUrl, data, additionalHeaders); 2270 return this._processResponse(res, this.requestOptions); 2271 }); 2272 } 2273 /** 2274 * Makes a raw http request. 2275 * All other methods such as get, post, patch, and request ultimately call this. 2276 * Prefer get, del, post and patch 2277 */ 2278 request(verb, requestUrl, data, headers) { 2279 return __awaiter(this, void 0, void 0, function* () { 2280 if (this._disposed) { 2281 throw new Error('Client has already been disposed.'); 2282 } 2283 const parsedUrl = new URL(requestUrl); 2284 let info = this._prepareRequest(verb, parsedUrl, headers); 2285 // Only perform retries on reads since writes may not be idempotent. 2286 const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) 2287 ? this._maxRetries + 1 2288 : 1; 2289 let numTries = 0; 2290 let response; 2291 do { 2292 response = yield this.requestRaw(info, data); 2293 // Check if it's an authentication challenge 2294 if (response && 2295 response.message && 2296 response.message.statusCode === HttpCodes.Unauthorized) { 2297 let authenticationHandler; 2298 for (const handler of this.handlers) { 2299 if (handler.canHandleAuthentication(response)) { 2300 authenticationHandler = handler; 2301 break; 2302 } 2303 } 2304 if (authenticationHandler) { 2305 return authenticationHandler.handleAuthentication(this, info, data); 2306 } 2307 else { 2308 // We have received an unauthorized response but have no handlers to handle it. 2309 // Let the response return to the caller. 2310 return response; 2311 } 2312 } 2313 let redirectsRemaining = this._maxRedirects; 2314 while (response.message.statusCode && 2315 HttpRedirectCodes.includes(response.message.statusCode) && 2316 this._allowRedirects && 2317 redirectsRemaining > 0) { 2318 const redirectUrl = response.message.headers['location']; 2319 if (!redirectUrl) { 2320 // if there's no location to redirect to, we won't 2321 break; 2322 } 2323 const parsedRedirectUrl = new URL(redirectUrl); 2324 if (parsedUrl.protocol === 'https:' && 2325 parsedUrl.protocol !== parsedRedirectUrl.protocol && 2326 !this._allowRedirectDowngrade) { 2327 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.'); 2328 } 2329 // we need to finish reading the response before reassigning response 2330 // which will leak the open socket. 2331 yield response.readBody(); 2332 // strip authorization header if redirected to a different hostname 2333 if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { 2334 for (const header in headers) { 2335 // header names are case insensitive 2336 if (header.toLowerCase() === 'authorization') { 2337 delete headers[header]; 2338 } 2339 } 2340 } 2341 // let's make the request with the new redirectUrl 2342 info = this._prepareRequest(verb, parsedRedirectUrl, headers); 2343 response = yield this.requestRaw(info, data); 2344 redirectsRemaining--; 2345 } 2346 if (!response.message.statusCode || 2347 !HttpResponseRetryCodes.includes(response.message.statusCode)) { 2348 // If not a retry code, return immediately instead of retrying 2349 return response; 2350 } 2351 numTries += 1; 2352 if (numTries < maxTries) { 2353 yield response.readBody(); 2354 yield this._performExponentialBackoff(numTries); 2355 } 2356 } while (numTries < maxTries); 2357 return response; 2358 }); 2359 } 2360 /** 2361 * Needs to be called if keepAlive is set to true in request options. 2362 */ 2363 dispose() { 2364 if (this._agent) { 2365 this._agent.destroy(); 2366 } 2367 this._disposed = true; 2368 } 2369 /** 2370 * Raw request. 2371 * @param info 2372 * @param data 2373 */ 2374 requestRaw(info, data) { 2375 return __awaiter(this, void 0, void 0, function* () { 2376 return new Promise((resolve, reject) => { 2377 function callbackForResult(err, res) { 2378 if (err) { 2379 reject(err); 2380 } 2381 else if (!res) { 2382 // If `err` is not passed, then `res` must be passed. 2383 reject(new Error('Unknown error')); 2384 } 2385 else { 2386 resolve(res); 2387 } 2388 } 2389 this.requestRawWithCallback(info, data, callbackForResult); 2390 }); 2391 }); 2392 } 2393 /** 2394 * Raw request with callback. 2395 * @param info 2396 * @param data 2397 * @param onResult 2398 */ 2399 requestRawWithCallback(info, data, onResult) { 2400 if (typeof data === 'string') { 2401 if (!info.options.headers) { 2402 info.options.headers = {}; 2403 } 2404 info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); 2405 } 2406 let callbackCalled = false; 2407 function handleResult(err, res) { 2408 if (!callbackCalled) { 2409 callbackCalled = true; 2410 onResult(err, res); 2411 } 2412 } 2413 const req = info.httpModule.request(info.options, (msg) => { 2414 const res = new HttpClientResponse(msg); 2415 handleResult(undefined, res); 2416 }); 2417 let socket; 2418 req.on('socket', sock => { 2419 socket = sock; 2420 }); 2421 // If we ever get disconnected, we want the socket to timeout eventually 2422 req.setTimeout(this._socketTimeout || 3 * 60000, () => { 2423 if (socket) { 2424 socket.end(); 2425 } 2426 handleResult(new Error(`Request timeout: ${info.options.path}`)); 2427 }); 2428 req.on('error', function (err) { 2429 // err has statusCode property 2430 // res should have headers 2431 handleResult(err); 2432 }); 2433 if (data && typeof data === 'string') { 2434 req.write(data, 'utf8'); 2435 } 2436 if (data && typeof data !== 'string') { 2437 data.on('close', function () { 2438 req.end(); 2439 }); 2440 data.pipe(req); 2441 } 2442 else { 2443 req.end(); 2444 } 2445 } 2446 /** 2447 * Gets an http agent. This function is useful when you need an http agent that handles 2448 * routing through a proxy server - depending upon the url and proxy environment variables. 2449 * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com 2450 */ 2451 getAgent(serverUrl) { 2452 const parsedUrl = new URL(serverUrl); 2453 return this._getAgent(parsedUrl); 2454 } 2455 _prepareRequest(method, requestUrl, headers) { 2456 const info = {}; 2457 info.parsedUrl = requestUrl; 2458 const usingSsl = info.parsedUrl.protocol === 'https:'; 2459 info.httpModule = usingSsl ? https : http; 2460 const defaultPort = usingSsl ? 443 : 80; 2461 info.options = {}; 2462 info.options.host = info.parsedUrl.hostname; 2463 info.options.port = info.parsedUrl.port 2464 ? parseInt(info.parsedUrl.port) 2465 : defaultPort; 2466 info.options.path = 2467 (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); 2468 info.options.method = method; 2469 info.options.headers = this._mergeHeaders(headers); 2470 if (this.userAgent != null) { 2471 info.options.headers['user-agent'] = this.userAgent; 2472 } 2473 info.options.agent = this._getAgent(info.parsedUrl); 2474 // gives handlers an opportunity to participate 2475 if (this.handlers) { 2476 for (const handler of this.handlers) { 2477 handler.prepareRequest(info.options); 2478 } 2479 } 2480 return info; 2481 } 2482 _mergeHeaders(headers) { 2483 if (this.requestOptions && this.requestOptions.headers) { 2484 return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {})); 2485 } 2486 return lowercaseKeys(headers || {}); 2487 } 2488 _getExistingOrDefaultHeader(additionalHeaders, header, _default) { 2489 let clientHeader; 2490 if (this.requestOptions && this.requestOptions.headers) { 2491 clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; 2492 } 2493 return additionalHeaders[header] || clientHeader || _default; 2494 } 2495 _getAgent(parsedUrl) { 2496 let agent; 2497 const proxyUrl = pm.getProxyUrl(parsedUrl); 2498 const useProxy = proxyUrl && proxyUrl.hostname; 2499 if (this._keepAlive && useProxy) { 2500 agent = this._proxyAgent; 2501 } 2502 if (this._keepAlive && !useProxy) { 2503 agent = this._agent; 2504 } 2505 // if agent is already assigned use that agent. 2506 if (agent) { 2507 return agent; 2508 } 2509 const usingSsl = parsedUrl.protocol === 'https:'; 2510 let maxSockets = 100; 2511 if (this.requestOptions) { 2512 maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; 2513 } 2514 // This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis. 2515 if (proxyUrl && proxyUrl.hostname) { 2516 const agentOptions = { 2517 maxSockets, 2518 keepAlive: this._keepAlive, 2519 proxy: Object.assign(Object.assign({}, ((proxyUrl.username || proxyUrl.password) && { 2520 proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` 2521 })), { host: proxyUrl.hostname, port: proxyUrl.port }) 2522 }; 2523 let tunnelAgent; 2524 const overHttps = proxyUrl.protocol === 'https:'; 2525 if (usingSsl) { 2526 tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; 2527 } 2528 else { 2529 tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; 2530 } 2531 agent = tunnelAgent(agentOptions); 2532 this._proxyAgent = agent; 2533 } 2534 // if reusing agent across request and tunneling agent isn't assigned create a new agent 2535 if (this._keepAlive && !agent) { 2536 const options = { keepAlive: this._keepAlive, maxSockets }; 2537 agent = usingSsl ? new https.Agent(options) : new http.Agent(options); 2538 this._agent = agent; 2539 } 2540 // if not using private agent and tunnel agent isn't setup then use global agent 2541 if (!agent) { 2542 agent = usingSsl ? https.globalAgent : http.globalAgent; 2543 } 2544 if (usingSsl && this._ignoreSslError) { 2545 // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process 2546 // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options 2547 // we have to cast it to any and change it directly 2548 agent.options = Object.assign(agent.options || {}, { 2549 rejectUnauthorized: false 2550 }); 2551 } 2552 return agent; 2553 } 2554 _performExponentialBackoff(retryNumber) { 2555 return __awaiter(this, void 0, void 0, function* () { 2556 retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); 2557 const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); 2558 return new Promise(resolve => setTimeout(() => resolve(), ms)); 2559 }); 2560 } 2561 _processResponse(res, options) { 2562 return __awaiter(this, void 0, void 0, function* () { 2563 return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { 2564 const statusCode = res.message.statusCode || 0; 2565 const response = { 2566 statusCode, 2567 result: null, 2568 headers: {} 2569 }; 2570 // not found leads to null obj returned 2571 if (statusCode === HttpCodes.NotFound) { 2572 resolve(response); 2573 } 2574 // get the result from the body 2575 function dateTimeDeserializer(key, value) { 2576 if (typeof value === 'string') { 2577 const a = new Date(value); 2578 if (!isNaN(a.valueOf())) { 2579 return a; 2580 } 2581 } 2582 return value; 2583 } 2584 let obj; 2585 let contents; 2586 try { 2587 contents = yield res.readBody(); 2588 if (contents && contents.length > 0) { 2589 if (options && options.deserializeDates) { 2590 obj = JSON.parse(contents, dateTimeDeserializer); 2591 } 2592 else { 2593 obj = JSON.parse(contents); 2594 } 2595 response.result = obj; 2596 } 2597 response.headers = res.message.headers; 2598 } 2599 catch (err) { 2600 // Invalid resource (contents not json); leaving result obj null 2601 } 2602 // note that 3xx redirects are handled by the http layer. 2603 if (statusCode > 299) { 2604 let msg; 2605 // if exception/error in body, attempt to get better error 2606 if (obj && obj.message) { 2607 msg = obj.message; 2608 } 2609 else if (contents && contents.length > 0) { 2610 // it may be the case that the exception is in the body message as string 2611 msg = contents; 2612 } 2613 else { 2614 msg = `Failed request: (${statusCode})`; 2615 } 2616 const err = new HttpClientError(msg, statusCode); 2617 err.result = response.result; 2618 reject(err); 2619 } 2620 else { 2621 resolve(response); 2622 } 2623 })); 2624 }); 2625 } 2626 } 2627 exports.HttpClient = HttpClient; 2628 const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); 2629 //# sourceMappingURL=index.js.map 2630 2631 /***/ }), 2632 2633 /***/ 9835: 2634 /***/ ((__unused_webpack_module, exports) => { 2635 2636 2637 Object.defineProperty(exports, "__esModule", ({ value: true })); 2638 exports.checkBypass = exports.getProxyUrl = void 0; 2639 function getProxyUrl(reqUrl) { 2640 const usingSsl = reqUrl.protocol === 'https:'; 2641 if (checkBypass(reqUrl)) { 2642 return undefined; 2643 } 2644 const proxyVar = (() => { 2645 if (usingSsl) { 2646 return process.env['https_proxy'] || process.env['HTTPS_PROXY']; 2647 } 2648 else { 2649 return process.env['http_proxy'] || process.env['HTTP_PROXY']; 2650 } 2651 })(); 2652 if (proxyVar) { 2653 return new URL(proxyVar); 2654 } 2655 else { 2656 return undefined; 2657 } 2658 } 2659 exports.getProxyUrl = getProxyUrl; 2660 function checkBypass(reqUrl) { 2661 if (!reqUrl.hostname) { 2662 return false; 2663 } 2664 const noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; 2665 if (!noProxy) { 2666 return false; 2667 } 2668 // Determine the request port 2669 let reqPort; 2670 if (reqUrl.port) { 2671 reqPort = Number(reqUrl.port); 2672 } 2673 else if (reqUrl.protocol === 'http:') { 2674 reqPort = 80; 2675 } 2676 else if (reqUrl.protocol === 'https:') { 2677 reqPort = 443; 2678 } 2679 // Format the request hostname and hostname with port 2680 const upperReqHosts = [reqUrl.hostname.toUpperCase()]; 2681 if (typeof reqPort === 'number') { 2682 upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); 2683 } 2684 // Compare request host against noproxy 2685 for (const upperNoProxyItem of noProxy 2686 .split(',') 2687 .map(x => x.trim().toUpperCase()) 2688 .filter(x => x)) { 2689 if (upperReqHosts.some(x => x === upperNoProxyItem)) { 2690 return true; 2691 } 2692 } 2693 return false; 2694 } 2695 exports.checkBypass = checkBypass; 2696 //# sourceMappingURL=proxy.js.map 2697 2698 /***/ }), 2699 2700 /***/ 1962: 2701 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 2702 2703 2704 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 2705 if (k2 === undefined) k2 = k; 2706 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 2707 }) : (function(o, m, k, k2) { 2708 if (k2 === undefined) k2 = k; 2709 o[k2] = m[k]; 2710 })); 2711 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 2712 Object.defineProperty(o, "default", { enumerable: true, value: v }); 2713 }) : function(o, v) { 2714 o["default"] = v; 2715 }); 2716 var __importStar = (this && this.__importStar) || function (mod) { 2717 if (mod && mod.__esModule) return mod; 2718 var result = {}; 2719 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 2720 __setModuleDefault(result, mod); 2721 return result; 2722 }; 2723 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 2724 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 2725 return new (P || (P = Promise))(function (resolve, reject) { 2726 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 2727 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 2728 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 2729 step((generator = generator.apply(thisArg, _arguments || [])).next()); 2730 }); 2731 }; 2732 var _a; 2733 Object.defineProperty(exports, "__esModule", ({ value: true })); 2734 exports.getCmdPath = exports.tryGetExecutablePath = exports.isRooted = exports.isDirectory = exports.exists = exports.READONLY = exports.UV_FS_O_EXLOCK = exports.IS_WINDOWS = exports.unlink = exports.symlink = exports.stat = exports.rmdir = exports.rm = exports.rename = exports.readlink = exports.readdir = exports.open = exports.mkdir = exports.lstat = exports.copyFile = exports.chmod = void 0; 2735 const fs = __importStar(__nccwpck_require__(7147)); 2736 const path = __importStar(__nccwpck_require__(1017)); 2737 _a = fs.promises 2738 // export const {open} = 'fs' 2739 , exports.chmod = _a.chmod, exports.copyFile = _a.copyFile, exports.lstat = _a.lstat, exports.mkdir = _a.mkdir, exports.open = _a.open, exports.readdir = _a.readdir, exports.readlink = _a.readlink, exports.rename = _a.rename, exports.rm = _a.rm, exports.rmdir = _a.rmdir, exports.stat = _a.stat, exports.symlink = _a.symlink, exports.unlink = _a.unlink; 2740 // export const {open} = 'fs' 2741 exports.IS_WINDOWS = process.platform === 'win32'; 2742 // See https://github.com/nodejs/node/blob/d0153aee367422d0858105abec186da4dff0a0c5/deps/uv/include/uv/win.h#L691 2743 exports.UV_FS_O_EXLOCK = 0x10000000; 2744 exports.READONLY = fs.constants.O_RDONLY; 2745 function exists(fsPath) { 2746 return __awaiter(this, void 0, void 0, function* () { 2747 try { 2748 yield exports.stat(fsPath); 2749 } 2750 catch (err) { 2751 if (err.code === 'ENOENT') { 2752 return false; 2753 } 2754 throw err; 2755 } 2756 return true; 2757 }); 2758 } 2759 exports.exists = exists; 2760 function isDirectory(fsPath, useStat = false) { 2761 return __awaiter(this, void 0, void 0, function* () { 2762 const stats = useStat ? yield exports.stat(fsPath) : yield exports.lstat(fsPath); 2763 return stats.isDirectory(); 2764 }); 2765 } 2766 exports.isDirectory = isDirectory; 2767 /** 2768 * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like: 2769 * \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases). 2770 */ 2771 function isRooted(p) { 2772 p = normalizeSeparators(p); 2773 if (!p) { 2774 throw new Error('isRooted() parameter "p" cannot be empty'); 2775 } 2776 if (exports.IS_WINDOWS) { 2777 return (p.startsWith('\\') || /^[A-Z]:/i.test(p) // e.g. \ or \hello or \\hello 2778 ); // e.g. C: or C:\hello 2779 } 2780 return p.startsWith('/'); 2781 } 2782 exports.isRooted = isRooted; 2783 /** 2784 * Best effort attempt to determine whether a file exists and is executable. 2785 * @param filePath file path to check 2786 * @param extensions additional file extensions to try 2787 * @return if file exists and is executable, returns the file path. otherwise empty string. 2788 */ 2789 function tryGetExecutablePath(filePath, extensions) { 2790 return __awaiter(this, void 0, void 0, function* () { 2791 let stats = undefined; 2792 try { 2793 // test file exists 2794 stats = yield exports.stat(filePath); 2795 } 2796 catch (err) { 2797 if (err.code !== 'ENOENT') { 2798 // eslint-disable-next-line no-console 2799 console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); 2800 } 2801 } 2802 if (stats && stats.isFile()) { 2803 if (exports.IS_WINDOWS) { 2804 // on Windows, test for valid extension 2805 const upperExt = path.extname(filePath).toUpperCase(); 2806 if (extensions.some(validExt => validExt.toUpperCase() === upperExt)) { 2807 return filePath; 2808 } 2809 } 2810 else { 2811 if (isUnixExecutable(stats)) { 2812 return filePath; 2813 } 2814 } 2815 } 2816 // try each extension 2817 const originalFilePath = filePath; 2818 for (const extension of extensions) { 2819 filePath = originalFilePath + extension; 2820 stats = undefined; 2821 try { 2822 stats = yield exports.stat(filePath); 2823 } 2824 catch (err) { 2825 if (err.code !== 'ENOENT') { 2826 // eslint-disable-next-line no-console 2827 console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); 2828 } 2829 } 2830 if (stats && stats.isFile()) { 2831 if (exports.IS_WINDOWS) { 2832 // preserve the case of the actual file (since an extension was appended) 2833 try { 2834 const directory = path.dirname(filePath); 2835 const upperName = path.basename(filePath).toUpperCase(); 2836 for (const actualName of yield exports.readdir(directory)) { 2837 if (upperName === actualName.toUpperCase()) { 2838 filePath = path.join(directory, actualName); 2839 break; 2840 } 2841 } 2842 } 2843 catch (err) { 2844 // eslint-disable-next-line no-console 2845 console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`); 2846 } 2847 return filePath; 2848 } 2849 else { 2850 if (isUnixExecutable(stats)) { 2851 return filePath; 2852 } 2853 } 2854 } 2855 } 2856 return ''; 2857 }); 2858 } 2859 exports.tryGetExecutablePath = tryGetExecutablePath; 2860 function normalizeSeparators(p) { 2861 p = p || ''; 2862 if (exports.IS_WINDOWS) { 2863 // convert slashes on Windows 2864 p = p.replace(/\//g, '\\'); 2865 // remove redundant slashes 2866 return p.replace(/\\\\+/g, '\\'); 2867 } 2868 // remove redundant slashes 2869 return p.replace(/\/\/+/g, '/'); 2870 } 2871 // on Mac/Linux, test the execute bit 2872 // R W X R W X R W X 2873 // 256 128 64 32 16 8 4 2 1 2874 function isUnixExecutable(stats) { 2875 return ((stats.mode & 1) > 0 || 2876 ((stats.mode & 8) > 0 && stats.gid === process.getgid()) || 2877 ((stats.mode & 64) > 0 && stats.uid === process.getuid())); 2878 } 2879 // Get the path of cmd.exe in windows 2880 function getCmdPath() { 2881 var _a; 2882 return (_a = process.env['COMSPEC']) !== null && _a !== void 0 ? _a : `cmd.exe`; 2883 } 2884 exports.getCmdPath = getCmdPath; 2885 //# sourceMappingURL=io-util.js.map 2886 2887 /***/ }), 2888 2889 /***/ 7436: 2890 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 2891 2892 2893 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 2894 if (k2 === undefined) k2 = k; 2895 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 2896 }) : (function(o, m, k, k2) { 2897 if (k2 === undefined) k2 = k; 2898 o[k2] = m[k]; 2899 })); 2900 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 2901 Object.defineProperty(o, "default", { enumerable: true, value: v }); 2902 }) : function(o, v) { 2903 o["default"] = v; 2904 }); 2905 var __importStar = (this && this.__importStar) || function (mod) { 2906 if (mod && mod.__esModule) return mod; 2907 var result = {}; 2908 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 2909 __setModuleDefault(result, mod); 2910 return result; 2911 }; 2912 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 2913 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 2914 return new (P || (P = Promise))(function (resolve, reject) { 2915 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 2916 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 2917 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 2918 step((generator = generator.apply(thisArg, _arguments || [])).next()); 2919 }); 2920 }; 2921 Object.defineProperty(exports, "__esModule", ({ value: true })); 2922 exports.findInPath = exports.which = exports.mkdirP = exports.rmRF = exports.mv = exports.cp = void 0; 2923 const assert_1 = __nccwpck_require__(9491); 2924 const path = __importStar(__nccwpck_require__(1017)); 2925 const ioUtil = __importStar(__nccwpck_require__(1962)); 2926 /** 2927 * Copies a file or folder. 2928 * Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js 2929 * 2930 * @param source source path 2931 * @param dest destination path 2932 * @param options optional. See CopyOptions. 2933 */ 2934 function cp(source, dest, options = {}) { 2935 return __awaiter(this, void 0, void 0, function* () { 2936 const { force, recursive, copySourceDirectory } = readCopyOptions(options); 2937 const destStat = (yield ioUtil.exists(dest)) ? yield ioUtil.stat(dest) : null; 2938 // Dest is an existing file, but not forcing 2939 if (destStat && destStat.isFile() && !force) { 2940 return; 2941 } 2942 // If dest is an existing directory, should copy inside. 2943 const newDest = destStat && destStat.isDirectory() && copySourceDirectory 2944 ? path.join(dest, path.basename(source)) 2945 : dest; 2946 if (!(yield ioUtil.exists(source))) { 2947 throw new Error(`no such file or directory: ${source}`); 2948 } 2949 const sourceStat = yield ioUtil.stat(source); 2950 if (sourceStat.isDirectory()) { 2951 if (!recursive) { 2952 throw new Error(`Failed to copy. ${source} is a directory, but tried to copy without recursive flag.`); 2953 } 2954 else { 2955 yield cpDirRecursive(source, newDest, 0, force); 2956 } 2957 } 2958 else { 2959 if (path.relative(source, newDest) === '') { 2960 // a file cannot be copied to itself 2961 throw new Error(`'${newDest}' and '${source}' are the same file`); 2962 } 2963 yield copyFile(source, newDest, force); 2964 } 2965 }); 2966 } 2967 exports.cp = cp; 2968 /** 2969 * Moves a path. 2970 * 2971 * @param source source path 2972 * @param dest destination path 2973 * @param options optional. See MoveOptions. 2974 */ 2975 function mv(source, dest, options = {}) { 2976 return __awaiter(this, void 0, void 0, function* () { 2977 if (yield ioUtil.exists(dest)) { 2978 let destExists = true; 2979 if (yield ioUtil.isDirectory(dest)) { 2980 // If dest is directory copy src into dest 2981 dest = path.join(dest, path.basename(source)); 2982 destExists = yield ioUtil.exists(dest); 2983 } 2984 if (destExists) { 2985 if (options.force == null || options.force) { 2986 yield rmRF(dest); 2987 } 2988 else { 2989 throw new Error('Destination already exists'); 2990 } 2991 } 2992 } 2993 yield mkdirP(path.dirname(dest)); 2994 yield ioUtil.rename(source, dest); 2995 }); 2996 } 2997 exports.mv = mv; 2998 /** 2999 * Remove a path recursively with force 3000 * 3001 * @param inputPath path to remove 3002 */ 3003 function rmRF(inputPath) { 3004 return __awaiter(this, void 0, void 0, function* () { 3005 if (ioUtil.IS_WINDOWS) { 3006 // Check for invalid characters 3007 // https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file 3008 if (/[*"<>|]/.test(inputPath)) { 3009 throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows'); 3010 } 3011 } 3012 try { 3013 // note if path does not exist, error is silent 3014 yield ioUtil.rm(inputPath, { 3015 force: true, 3016 maxRetries: 3, 3017 recursive: true, 3018 retryDelay: 300 3019 }); 3020 } 3021 catch (err) { 3022 throw new Error(`File was unable to be removed ${err}`); 3023 } 3024 }); 3025 } 3026 exports.rmRF = rmRF; 3027 /** 3028 * Make a directory. Creates the full path with folders in between 3029 * Will throw if it fails 3030 * 3031 * @param fsPath path to create 3032 * @returns Promise<void> 3033 */ 3034 function mkdirP(fsPath) { 3035 return __awaiter(this, void 0, void 0, function* () { 3036 assert_1.ok(fsPath, 'a path argument must be provided'); 3037 yield ioUtil.mkdir(fsPath, { recursive: true }); 3038 }); 3039 } 3040 exports.mkdirP = mkdirP; 3041 /** 3042 * Returns path of a tool had the tool actually been invoked. Resolves via paths. 3043 * If you check and the tool does not exist, it will throw. 3044 * 3045 * @param tool name of the tool 3046 * @param check whether to check if tool exists 3047 * @returns Promise<string> path to tool 3048 */ 3049 function which(tool, check) { 3050 return __awaiter(this, void 0, void 0, function* () { 3051 if (!tool) { 3052 throw new Error("parameter 'tool' is required"); 3053 } 3054 // recursive when check=true 3055 if (check) { 3056 const result = yield which(tool, false); 3057 if (!result) { 3058 if (ioUtil.IS_WINDOWS) { 3059 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.`); 3060 } 3061 else { 3062 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.`); 3063 } 3064 } 3065 return result; 3066 } 3067 const matches = yield findInPath(tool); 3068 if (matches && matches.length > 0) { 3069 return matches[0]; 3070 } 3071 return ''; 3072 }); 3073 } 3074 exports.which = which; 3075 /** 3076 * Returns a list of all occurrences of the given tool on the system path. 3077 * 3078 * @returns Promise<string[]> the paths of the tool 3079 */ 3080 function findInPath(tool) { 3081 return __awaiter(this, void 0, void 0, function* () { 3082 if (!tool) { 3083 throw new Error("parameter 'tool' is required"); 3084 } 3085 // build the list of extensions to try 3086 const extensions = []; 3087 if (ioUtil.IS_WINDOWS && process.env['PATHEXT']) { 3088 for (const extension of process.env['PATHEXT'].split(path.delimiter)) { 3089 if (extension) { 3090 extensions.push(extension); 3091 } 3092 } 3093 } 3094 // if it's rooted, return it if exists. otherwise return empty. 3095 if (ioUtil.isRooted(tool)) { 3096 const filePath = yield ioUtil.tryGetExecutablePath(tool, extensions); 3097 if (filePath) { 3098 return [filePath]; 3099 } 3100 return []; 3101 } 3102 // if any path separators, return empty 3103 if (tool.includes(path.sep)) { 3104 return []; 3105 } 3106 // build the list of directories 3107 // 3108 // Note, technically "where" checks the current directory on Windows. From a toolkit perspective, 3109 // it feels like we should not do this. Checking the current directory seems like more of a use 3110 // case of a shell, and the which() function exposed by the toolkit should strive for consistency 3111 // across platforms. 3112 const directories = []; 3113 if (process.env.PATH) { 3114 for (const p of process.env.PATH.split(path.delimiter)) { 3115 if (p) { 3116 directories.push(p); 3117 } 3118 } 3119 } 3120 // find all matches 3121 const matches = []; 3122 for (const directory of directories) { 3123 const filePath = yield ioUtil.tryGetExecutablePath(path.join(directory, tool), extensions); 3124 if (filePath) { 3125 matches.push(filePath); 3126 } 3127 } 3128 return matches; 3129 }); 3130 } 3131 exports.findInPath = findInPath; 3132 function readCopyOptions(options) { 3133 const force = options.force == null ? true : options.force; 3134 const recursive = Boolean(options.recursive); 3135 const copySourceDirectory = options.copySourceDirectory == null 3136 ? true 3137 : Boolean(options.copySourceDirectory); 3138 return { force, recursive, copySourceDirectory }; 3139 } 3140 function cpDirRecursive(sourceDir, destDir, currentDepth, force) { 3141 return __awaiter(this, void 0, void 0, function* () { 3142 // Ensure there is not a run away recursive copy 3143 if (currentDepth >= 255) 3144 return; 3145 currentDepth++; 3146 yield mkdirP(destDir); 3147 const files = yield ioUtil.readdir(sourceDir); 3148 for (const fileName of files) { 3149 const srcFile = `${sourceDir}/${fileName}`; 3150 const destFile = `${destDir}/${fileName}`; 3151 const srcFileStat = yield ioUtil.lstat(srcFile); 3152 if (srcFileStat.isDirectory()) { 3153 // Recurse 3154 yield cpDirRecursive(srcFile, destFile, currentDepth, force); 3155 } 3156 else { 3157 yield copyFile(srcFile, destFile, force); 3158 } 3159 } 3160 // Change the mode for the newly created directory 3161 yield ioUtil.chmod(destDir, (yield ioUtil.stat(sourceDir)).mode); 3162 }); 3163 } 3164 // Buffered file copy 3165 function copyFile(srcFile, destFile, force) { 3166 return __awaiter(this, void 0, void 0, function* () { 3167 if ((yield ioUtil.lstat(srcFile)).isSymbolicLink()) { 3168 // unlink/re-link it 3169 try { 3170 yield ioUtil.lstat(destFile); 3171 yield ioUtil.unlink(destFile); 3172 } 3173 catch (e) { 3174 // Try to override file permission 3175 if (e.code === 'EPERM') { 3176 yield ioUtil.chmod(destFile, '0666'); 3177 yield ioUtil.unlink(destFile); 3178 } 3179 // other errors = it doesn't exist, no work to do 3180 } 3181 // Copy over symlink 3182 const symlinkFull = yield ioUtil.readlink(srcFile); 3183 yield ioUtil.symlink(symlinkFull, destFile, ioUtil.IS_WINDOWS ? 'junction' : null); 3184 } 3185 else if (!(yield ioUtil.exists(destFile)) || force) { 3186 yield ioUtil.copyFile(srcFile, destFile); 3187 } 3188 }); 3189 } 3190 //# sourceMappingURL=io.js.map 3191 3192 /***/ }), 3193 3194 /***/ 2473: 3195 /***/ (function(module, exports, __nccwpck_require__) { 3196 3197 3198 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3199 if (k2 === undefined) k2 = k; 3200 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 3201 }) : (function(o, m, k, k2) { 3202 if (k2 === undefined) k2 = k; 3203 o[k2] = m[k]; 3204 })); 3205 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 3206 Object.defineProperty(o, "default", { enumerable: true, value: v }); 3207 }) : function(o, v) { 3208 o["default"] = v; 3209 }); 3210 var __importStar = (this && this.__importStar) || function (mod) { 3211 if (mod && mod.__esModule) return mod; 3212 var result = {}; 3213 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 3214 __setModuleDefault(result, mod); 3215 return result; 3216 }; 3217 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3218 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 3219 return new (P || (P = Promise))(function (resolve, reject) { 3220 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 3221 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 3222 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 3223 step((generator = generator.apply(thisArg, _arguments || [])).next()); 3224 }); 3225 }; 3226 Object.defineProperty(exports, "__esModule", ({ value: true })); 3227 exports._readLinuxVersionFile = exports._getOsVersion = exports._findMatch = void 0; 3228 const semver = __importStar(__nccwpck_require__(5911)); 3229 const core_1 = __nccwpck_require__(2186); 3230 // needs to be require for core node modules to be mocked 3231 /* eslint @typescript-eslint/no-require-imports: 0 */ 3232 const os = __nccwpck_require__(2037); 3233 const cp = __nccwpck_require__(2081); 3234 const fs = __nccwpck_require__(7147); 3235 function _findMatch(versionSpec, stable, candidates, archFilter) { 3236 return __awaiter(this, void 0, void 0, function* () { 3237 const platFilter = os.platform(); 3238 let result; 3239 let match; 3240 let file; 3241 for (const candidate of candidates) { 3242 const version = candidate.version; 3243 core_1.debug(`check ${version} satisfies ${versionSpec}`); 3244 if (semver.satisfies(version, versionSpec) && 3245 (!stable || candidate.stable === stable)) { 3246 file = candidate.files.find(item => { 3247 core_1.debug(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); 3248 let chk = item.arch === archFilter && item.platform === platFilter; 3249 if (chk && item.platform_version) { 3250 const osVersion = module.exports._getOsVersion(); 3251 if (osVersion === item.platform_version) { 3252 chk = true; 3253 } 3254 else { 3255 chk = semver.satisfies(osVersion, item.platform_version); 3256 } 3257 } 3258 return chk; 3259 }); 3260 if (file) { 3261 core_1.debug(`matched ${candidate.version}`); 3262 match = candidate; 3263 break; 3264 } 3265 } 3266 } 3267 if (match && file) { 3268 // clone since we're mutating the file list to be only the file that matches 3269 result = Object.assign({}, match); 3270 result.files = [file]; 3271 } 3272 return result; 3273 }); 3274 } 3275 exports._findMatch = _findMatch; 3276 function _getOsVersion() { 3277 // TODO: add windows and other linux, arm variants 3278 // right now filtering on version is only an ubuntu and macos scenario for tools we build for hosted (python) 3279 const plat = os.platform(); 3280 let version = ''; 3281 if (plat === 'darwin') { 3282 version = cp.execSync('sw_vers -productVersion').toString(); 3283 } 3284 else if (plat === 'linux') { 3285 // lsb_release process not in some containers, readfile 3286 // Run cat /etc/lsb-release 3287 // DISTRIB_ID=Ubuntu 3288 // DISTRIB_RELEASE=18.04 3289 // DISTRIB_CODENAME=bionic 3290 // DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS" 3291 const lsbContents = module.exports._readLinuxVersionFile(); 3292 if (lsbContents) { 3293 const lines = lsbContents.split('\n'); 3294 for (const line of lines) { 3295 const parts = line.split('='); 3296 if (parts.length === 2 && 3297 (parts[0].trim() === 'VERSION_ID' || 3298 parts[0].trim() === 'DISTRIB_RELEASE')) { 3299 version = parts[1] 3300 .trim() 3301 .replace(/^"/, '') 3302 .replace(/"$/, ''); 3303 break; 3304 } 3305 } 3306 } 3307 } 3308 return version; 3309 } 3310 exports._getOsVersion = _getOsVersion; 3311 function _readLinuxVersionFile() { 3312 const lsbReleaseFile = '/etc/lsb-release'; 3313 const osReleaseFile = '/etc/os-release'; 3314 let contents = ''; 3315 if (fs.existsSync(lsbReleaseFile)) { 3316 contents = fs.readFileSync(lsbReleaseFile).toString(); 3317 } 3318 else if (fs.existsSync(osReleaseFile)) { 3319 contents = fs.readFileSync(osReleaseFile).toString(); 3320 } 3321 return contents; 3322 } 3323 exports._readLinuxVersionFile = _readLinuxVersionFile; 3324 //# sourceMappingURL=manifest.js.map 3325 3326 /***/ }), 3327 3328 /***/ 8279: 3329 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 3330 3331 3332 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3333 if (k2 === undefined) k2 = k; 3334 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 3335 }) : (function(o, m, k, k2) { 3336 if (k2 === undefined) k2 = k; 3337 o[k2] = m[k]; 3338 })); 3339 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 3340 Object.defineProperty(o, "default", { enumerable: true, value: v }); 3341 }) : function(o, v) { 3342 o["default"] = v; 3343 }); 3344 var __importStar = (this && this.__importStar) || function (mod) { 3345 if (mod && mod.__esModule) return mod; 3346 var result = {}; 3347 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 3348 __setModuleDefault(result, mod); 3349 return result; 3350 }; 3351 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3352 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 3353 return new (P || (P = Promise))(function (resolve, reject) { 3354 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 3355 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 3356 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 3357 step((generator = generator.apply(thisArg, _arguments || [])).next()); 3358 }); 3359 }; 3360 Object.defineProperty(exports, "__esModule", ({ value: true })); 3361 exports.RetryHelper = void 0; 3362 const core = __importStar(__nccwpck_require__(2186)); 3363 /** 3364 * Internal class for retries 3365 */ 3366 class RetryHelper { 3367 constructor(maxAttempts, minSeconds, maxSeconds) { 3368 if (maxAttempts < 1) { 3369 throw new Error('max attempts should be greater than or equal to 1'); 3370 } 3371 this.maxAttempts = maxAttempts; 3372 this.minSeconds = Math.floor(minSeconds); 3373 this.maxSeconds = Math.floor(maxSeconds); 3374 if (this.minSeconds > this.maxSeconds) { 3375 throw new Error('min seconds should be less than or equal to max seconds'); 3376 } 3377 } 3378 execute(action, isRetryable) { 3379 return __awaiter(this, void 0, void 0, function* () { 3380 let attempt = 1; 3381 while (attempt < this.maxAttempts) { 3382 // Try 3383 try { 3384 return yield action(); 3385 } 3386 catch (err) { 3387 if (isRetryable && !isRetryable(err)) { 3388 throw err; 3389 } 3390 core.info(err.message); 3391 } 3392 // Sleep 3393 const seconds = this.getSleepAmount(); 3394 core.info(`Waiting ${seconds} seconds before trying again`); 3395 yield this.sleep(seconds); 3396 attempt++; 3397 } 3398 // Last attempt 3399 return yield action(); 3400 }); 3401 } 3402 getSleepAmount() { 3403 return (Math.floor(Math.random() * (this.maxSeconds - this.minSeconds + 1)) + 3404 this.minSeconds); 3405 } 3406 sleep(seconds) { 3407 return __awaiter(this, void 0, void 0, function* () { 3408 return new Promise(resolve => setTimeout(resolve, seconds * 1000)); 3409 }); 3410 } 3411 } 3412 exports.RetryHelper = RetryHelper; 3413 //# sourceMappingURL=retry-helper.js.map 3414 3415 /***/ }), 3416 3417 /***/ 7784: 3418 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 3419 3420 3421 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3422 if (k2 === undefined) k2 = k; 3423 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 3424 }) : (function(o, m, k, k2) { 3425 if (k2 === undefined) k2 = k; 3426 o[k2] = m[k]; 3427 })); 3428 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 3429 Object.defineProperty(o, "default", { enumerable: true, value: v }); 3430 }) : function(o, v) { 3431 o["default"] = v; 3432 }); 3433 var __importStar = (this && this.__importStar) || function (mod) { 3434 if (mod && mod.__esModule) return mod; 3435 var result = {}; 3436 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 3437 __setModuleDefault(result, mod); 3438 return result; 3439 }; 3440 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3441 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 3442 return new (P || (P = Promise))(function (resolve, reject) { 3443 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 3444 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 3445 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 3446 step((generator = generator.apply(thisArg, _arguments || [])).next()); 3447 }); 3448 }; 3449 var __importDefault = (this && this.__importDefault) || function (mod) { 3450 return (mod && mod.__esModule) ? mod : { "default": mod }; 3451 }; 3452 Object.defineProperty(exports, "__esModule", ({ value: true })); 3453 exports.evaluateVersions = exports.isExplicitVersion = exports.findFromManifest = exports.getManifestFromRepo = exports.findAllVersions = exports.find = exports.cacheFile = exports.cacheDir = exports.extractZip = exports.extractXar = exports.extractTar = exports.extract7z = exports.downloadTool = exports.HTTPError = void 0; 3454 const core = __importStar(__nccwpck_require__(2186)); 3455 const io = __importStar(__nccwpck_require__(7436)); 3456 const fs = __importStar(__nccwpck_require__(7147)); 3457 const mm = __importStar(__nccwpck_require__(2473)); 3458 const os = __importStar(__nccwpck_require__(2037)); 3459 const path = __importStar(__nccwpck_require__(1017)); 3460 const httpm = __importStar(__nccwpck_require__(6255)); 3461 const semver = __importStar(__nccwpck_require__(5911)); 3462 const stream = __importStar(__nccwpck_require__(2781)); 3463 const util = __importStar(__nccwpck_require__(3837)); 3464 const assert_1 = __nccwpck_require__(9491); 3465 const v4_1 = __importDefault(__nccwpck_require__(7468)); 3466 const exec_1 = __nccwpck_require__(1514); 3467 const retry_helper_1 = __nccwpck_require__(8279); 3468 class HTTPError extends Error { 3469 constructor(httpStatusCode) { 3470 super(`Unexpected HTTP response: ${httpStatusCode}`); 3471 this.httpStatusCode = httpStatusCode; 3472 Object.setPrototypeOf(this, new.target.prototype); 3473 } 3474 } 3475 exports.HTTPError = HTTPError; 3476 const IS_WINDOWS = process.platform === 'win32'; 3477 const IS_MAC = process.platform === 'darwin'; 3478 const userAgent = 'actions/tool-cache'; 3479 /** 3480 * Download a tool from an url and stream it into a file 3481 * 3482 * @param url url of tool to download 3483 * @param dest path to download tool 3484 * @param auth authorization header 3485 * @param headers other headers 3486 * @returns path to downloaded tool 3487 */ 3488 function downloadTool(url, dest, auth, headers) { 3489 return __awaiter(this, void 0, void 0, function* () { 3490 dest = dest || path.join(_getTempDirectory(), v4_1.default()); 3491 yield io.mkdirP(path.dirname(dest)); 3492 core.debug(`Downloading ${url}`); 3493 core.debug(`Destination ${dest}`); 3494 const maxAttempts = 3; 3495 const minSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS', 10); 3496 const maxSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS', 20); 3497 const retryHelper = new retry_helper_1.RetryHelper(maxAttempts, minSeconds, maxSeconds); 3498 return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () { 3499 return yield downloadToolAttempt(url, dest || '', auth, headers); 3500 }), (err) => { 3501 if (err instanceof HTTPError && err.httpStatusCode) { 3502 // Don't retry anything less than 500, except 408 Request Timeout and 429 Too Many Requests 3503 if (err.httpStatusCode < 500 && 3504 err.httpStatusCode !== 408 && 3505 err.httpStatusCode !== 429) { 3506 return false; 3507 } 3508 } 3509 // Otherwise retry 3510 return true; 3511 }); 3512 }); 3513 } 3514 exports.downloadTool = downloadTool; 3515 function downloadToolAttempt(url, dest, auth, headers) { 3516 return __awaiter(this, void 0, void 0, function* () { 3517 if (fs.existsSync(dest)) { 3518 throw new Error(`Destination file path ${dest} already exists`); 3519 } 3520 // Get the response headers 3521 const http = new httpm.HttpClient(userAgent, [], { 3522 allowRetries: false 3523 }); 3524 if (auth) { 3525 core.debug('set auth'); 3526 if (headers === undefined) { 3527 headers = {}; 3528 } 3529 headers.authorization = auth; 3530 } 3531 const response = yield http.get(url, headers); 3532 if (response.message.statusCode !== 200) { 3533 const err = new HTTPError(response.message.statusCode); 3534 core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); 3535 throw err; 3536 } 3537 // Download the response body 3538 const pipeline = util.promisify(stream.pipeline); 3539 const responseMessageFactory = _getGlobal('TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY', () => response.message); 3540 const readStream = responseMessageFactory(); 3541 let succeeded = false; 3542 try { 3543 yield pipeline(readStream, fs.createWriteStream(dest)); 3544 core.debug('download complete'); 3545 succeeded = true; 3546 return dest; 3547 } 3548 finally { 3549 // Error, delete dest before retry 3550 if (!succeeded) { 3551 core.debug('download failed'); 3552 try { 3553 yield io.rmRF(dest); 3554 } 3555 catch (err) { 3556 core.debug(`Failed to delete '${dest}'. ${err.message}`); 3557 } 3558 } 3559 } 3560 }); 3561 } 3562 /** 3563 * Extract a .7z file 3564 * 3565 * @param file path to the .7z file 3566 * @param dest destination directory. Optional. 3567 * @param _7zPath path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this 3568 * problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will 3569 * gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is 3570 * bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line 3571 * interface, it is smaller than the full command line interface, and it does support long paths. At the 3572 * time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website. 3573 * Be sure to check the current license agreement. If 7zr.exe is bundled with your action, then the path 3574 * to 7zr.exe can be pass to this function. 3575 * @returns path to the destination directory 3576 */ 3577 function extract7z(file, dest, _7zPath) { 3578 return __awaiter(this, void 0, void 0, function* () { 3579 assert_1.ok(IS_WINDOWS, 'extract7z() not supported on current OS'); 3580 assert_1.ok(file, 'parameter "file" is required'); 3581 dest = yield _createExtractFolder(dest); 3582 const originalCwd = process.cwd(); 3583 process.chdir(dest); 3584 if (_7zPath) { 3585 try { 3586 const logLevel = core.isDebug() ? '-bb1' : '-bb0'; 3587 const args = [ 3588 'x', 3589 logLevel, 3590 '-bd', 3591 '-sccUTF-8', 3592 file 3593 ]; 3594 const options = { 3595 silent: true 3596 }; 3597 yield exec_1.exec(`"${_7zPath}"`, args, options); 3598 } 3599 finally { 3600 process.chdir(originalCwd); 3601 } 3602 } 3603 else { 3604 const escapedScript = path 3605 .join(__dirname, '..', 'scripts', 'Invoke-7zdec.ps1') 3606 .replace(/'/g, "''") 3607 .replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines 3608 const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); 3609 const escapedTarget = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); 3610 const command = `& '${escapedScript}' -Source '${escapedFile}' -Target '${escapedTarget}'`; 3611 const args = [ 3612 '-NoLogo', 3613 '-Sta', 3614 '-NoProfile', 3615 '-NonInteractive', 3616 '-ExecutionPolicy', 3617 'Unrestricted', 3618 '-Command', 3619 command 3620 ]; 3621 const options = { 3622 silent: true 3623 }; 3624 try { 3625 const powershellPath = yield io.which('powershell', true); 3626 yield exec_1.exec(`"${powershellPath}"`, args, options); 3627 } 3628 finally { 3629 process.chdir(originalCwd); 3630 } 3631 } 3632 return dest; 3633 }); 3634 } 3635 exports.extract7z = extract7z; 3636 /** 3637 * Extract a compressed tar archive 3638 * 3639 * @param file path to the tar 3640 * @param dest destination directory. Optional. 3641 * @param flags flags for the tar command to use for extraction. Defaults to 'xz' (extracting gzipped tars). Optional. 3642 * @returns path to the destination directory 3643 */ 3644 function extractTar(file, dest, flags = 'xz') { 3645 return __awaiter(this, void 0, void 0, function* () { 3646 if (!file) { 3647 throw new Error("parameter 'file' is required"); 3648 } 3649 // Create dest 3650 dest = yield _createExtractFolder(dest); 3651 // Determine whether GNU tar 3652 core.debug('Checking tar --version'); 3653 let versionOutput = ''; 3654 yield exec_1.exec('tar --version', [], { 3655 ignoreReturnCode: true, 3656 silent: true, 3657 listeners: { 3658 stdout: (data) => (versionOutput += data.toString()), 3659 stderr: (data) => (versionOutput += data.toString()) 3660 } 3661 }); 3662 core.debug(versionOutput.trim()); 3663 const isGnuTar = versionOutput.toUpperCase().includes('GNU TAR'); 3664 // Initialize args 3665 let args; 3666 if (flags instanceof Array) { 3667 args = flags; 3668 } 3669 else { 3670 args = [flags]; 3671 } 3672 if (core.isDebug() && !flags.includes('v')) { 3673 args.push('-v'); 3674 } 3675 let destArg = dest; 3676 let fileArg = file; 3677 if (IS_WINDOWS && isGnuTar) { 3678 args.push('--force-local'); 3679 destArg = dest.replace(/\\/g, '/'); 3680 // Technically only the dest needs to have `/` but for aesthetic consistency 3681 // convert slashes in the file arg too. 3682 fileArg = file.replace(/\\/g, '/'); 3683 } 3684 if (isGnuTar) { 3685 // Suppress warnings when using GNU tar to extract archives created by BSD tar 3686 args.push('--warning=no-unknown-keyword'); 3687 args.push('--overwrite'); 3688 } 3689 args.push('-C', destArg, '-f', fileArg); 3690 yield exec_1.exec(`tar`, args); 3691 return dest; 3692 }); 3693 } 3694 exports.extractTar = extractTar; 3695 /** 3696 * Extract a xar compatible archive 3697 * 3698 * @param file path to the archive 3699 * @param dest destination directory. Optional. 3700 * @param flags flags for the xar. Optional. 3701 * @returns path to the destination directory 3702 */ 3703 function extractXar(file, dest, flags = []) { 3704 return __awaiter(this, void 0, void 0, function* () { 3705 assert_1.ok(IS_MAC, 'extractXar() not supported on current OS'); 3706 assert_1.ok(file, 'parameter "file" is required'); 3707 dest = yield _createExtractFolder(dest); 3708 let args; 3709 if (flags instanceof Array) { 3710 args = flags; 3711 } 3712 else { 3713 args = [flags]; 3714 } 3715 args.push('-x', '-C', dest, '-f', file); 3716 if (core.isDebug()) { 3717 args.push('-v'); 3718 } 3719 const xarPath = yield io.which('xar', true); 3720 yield exec_1.exec(`"${xarPath}"`, _unique(args)); 3721 return dest; 3722 }); 3723 } 3724 exports.extractXar = extractXar; 3725 /** 3726 * Extract a zip 3727 * 3728 * @param file path to the zip 3729 * @param dest destination directory. Optional. 3730 * @returns path to the destination directory 3731 */ 3732 function extractZip(file, dest) { 3733 return __awaiter(this, void 0, void 0, function* () { 3734 if (!file) { 3735 throw new Error("parameter 'file' is required"); 3736 } 3737 dest = yield _createExtractFolder(dest); 3738 if (IS_WINDOWS) { 3739 yield extractZipWin(file, dest); 3740 } 3741 else { 3742 yield extractZipNix(file, dest); 3743 } 3744 return dest; 3745 }); 3746 } 3747 exports.extractZip = extractZip; 3748 function extractZipWin(file, dest) { 3749 return __awaiter(this, void 0, void 0, function* () { 3750 // build the powershell command 3751 const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines 3752 const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); 3753 const pwshPath = yield io.which('pwsh', false); 3754 //To match the file overwrite behavior on nix systems, we use the overwrite = true flag for ExtractToDirectory 3755 //and the -Force flag for Expand-Archive as a fallback 3756 if (pwshPath) { 3757 //attempt to use pwsh with ExtractToDirectory, if this fails attempt Expand-Archive 3758 const pwshCommand = [ 3759 `$ErrorActionPreference = 'Stop' ;`, 3760 `try { Add-Type -AssemblyName System.IO.Compression.ZipFile } catch { } ;`, 3761 `try { [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}', $true) }`, 3762 `catch { if (($_.Exception.GetType().FullName -eq 'System.Management.Automation.MethodException') -or ($_.Exception.GetType().FullName -eq 'System.Management.Automation.RuntimeException') ){ Expand-Archive -LiteralPath '${escapedFile}' -DestinationPath '${escapedDest}' -Force } else { throw $_ } } ;` 3763 ].join(' '); 3764 const args = [ 3765 '-NoLogo', 3766 '-NoProfile', 3767 '-NonInteractive', 3768 '-ExecutionPolicy', 3769 'Unrestricted', 3770 '-Command', 3771 pwshCommand 3772 ]; 3773 core.debug(`Using pwsh at path: ${pwshPath}`); 3774 yield exec_1.exec(`"${pwshPath}"`, args); 3775 } 3776 else { 3777 const powershellCommand = [ 3778 `$ErrorActionPreference = 'Stop' ;`, 3779 `try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ;`, 3780 `if ((Get-Command -Name Expand-Archive -Module Microsoft.PowerShell.Archive -ErrorAction Ignore)) { Expand-Archive -LiteralPath '${escapedFile}' -DestinationPath '${escapedDest}' -Force }`, 3781 `else {[System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}', $true) }` 3782 ].join(' '); 3783 const args = [ 3784 '-NoLogo', 3785 '-Sta', 3786 '-NoProfile', 3787 '-NonInteractive', 3788 '-ExecutionPolicy', 3789 'Unrestricted', 3790 '-Command', 3791 powershellCommand 3792 ]; 3793 const powershellPath = yield io.which('powershell', true); 3794 core.debug(`Using powershell at path: ${powershellPath}`); 3795 yield exec_1.exec(`"${powershellPath}"`, args); 3796 } 3797 }); 3798 } 3799 function extractZipNix(file, dest) { 3800 return __awaiter(this, void 0, void 0, function* () { 3801 const unzipPath = yield io.which('unzip', true); 3802 const args = [file]; 3803 if (!core.isDebug()) { 3804 args.unshift('-q'); 3805 } 3806 args.unshift('-o'); //overwrite with -o, otherwise a prompt is shown which freezes the run 3807 yield exec_1.exec(`"${unzipPath}"`, args, { cwd: dest }); 3808 }); 3809 } 3810 /** 3811 * Caches a directory and installs it into the tool cacheDir 3812 * 3813 * @param sourceDir the directory to cache into tools 3814 * @param tool tool name 3815 * @param version version of the tool. semver format 3816 * @param arch architecture of the tool. Optional. Defaults to machine architecture 3817 */ 3818 function cacheDir(sourceDir, tool, version, arch) { 3819 return __awaiter(this, void 0, void 0, function* () { 3820 version = semver.clean(version) || version; 3821 arch = arch || os.arch(); 3822 core.debug(`Caching tool ${tool} ${version} ${arch}`); 3823 core.debug(`source dir: ${sourceDir}`); 3824 if (!fs.statSync(sourceDir).isDirectory()) { 3825 throw new Error('sourceDir is not a directory'); 3826 } 3827 // Create the tool dir 3828 const destPath = yield _createToolPath(tool, version, arch); 3829 // copy each child item. do not move. move can fail on Windows 3830 // due to anti-virus software having an open handle on a file. 3831 for (const itemName of fs.readdirSync(sourceDir)) { 3832 const s = path.join(sourceDir, itemName); 3833 yield io.cp(s, destPath, { recursive: true }); 3834 } 3835 // write .complete 3836 _completeToolPath(tool, version, arch); 3837 return destPath; 3838 }); 3839 } 3840 exports.cacheDir = cacheDir; 3841 /** 3842 * Caches a downloaded file (GUID) and installs it 3843 * into the tool cache with a given targetName 3844 * 3845 * @param sourceFile the file to cache into tools. Typically a result of downloadTool which is a guid. 3846 * @param targetFile the name of the file name in the tools directory 3847 * @param tool tool name 3848 * @param version version of the tool. semver format 3849 * @param arch architecture of the tool. Optional. Defaults to machine architecture 3850 */ 3851 function cacheFile(sourceFile, targetFile, tool, version, arch) { 3852 return __awaiter(this, void 0, void 0, function* () { 3853 version = semver.clean(version) || version; 3854 arch = arch || os.arch(); 3855 core.debug(`Caching tool ${tool} ${version} ${arch}`); 3856 core.debug(`source file: ${sourceFile}`); 3857 if (!fs.statSync(sourceFile).isFile()) { 3858 throw new Error('sourceFile is not a file'); 3859 } 3860 // create the tool dir 3861 const destFolder = yield _createToolPath(tool, version, arch); 3862 // copy instead of move. move can fail on Windows due to 3863 // anti-virus software having an open handle on a file. 3864 const destPath = path.join(destFolder, targetFile); 3865 core.debug(`destination file ${destPath}`); 3866 yield io.cp(sourceFile, destPath); 3867 // write .complete 3868 _completeToolPath(tool, version, arch); 3869 return destFolder; 3870 }); 3871 } 3872 exports.cacheFile = cacheFile; 3873 /** 3874 * Finds the path to a tool version in the local installed tool cache 3875 * 3876 * @param toolName name of the tool 3877 * @param versionSpec version of the tool 3878 * @param arch optional arch. defaults to arch of computer 3879 */ 3880 function find(toolName, versionSpec, arch) { 3881 if (!toolName) { 3882 throw new Error('toolName parameter is required'); 3883 } 3884 if (!versionSpec) { 3885 throw new Error('versionSpec parameter is required'); 3886 } 3887 arch = arch || os.arch(); 3888 // attempt to resolve an explicit version 3889 if (!isExplicitVersion(versionSpec)) { 3890 const localVersions = findAllVersions(toolName, arch); 3891 const match = evaluateVersions(localVersions, versionSpec); 3892 versionSpec = match; 3893 } 3894 // check for the explicit version in the cache 3895 let toolPath = ''; 3896 if (versionSpec) { 3897 versionSpec = semver.clean(versionSpec) || ''; 3898 const cachePath = path.join(_getCacheDirectory(), toolName, versionSpec, arch); 3899 core.debug(`checking cache: ${cachePath}`); 3900 if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) { 3901 core.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch}`); 3902 toolPath = cachePath; 3903 } 3904 else { 3905 core.debug('not found'); 3906 } 3907 } 3908 return toolPath; 3909 } 3910 exports.find = find; 3911 /** 3912 * Finds the paths to all versions of a tool that are installed in the local tool cache 3913 * 3914 * @param toolName name of the tool 3915 * @param arch optional arch. defaults to arch of computer 3916 */ 3917 function findAllVersions(toolName, arch) { 3918 const versions = []; 3919 arch = arch || os.arch(); 3920 const toolPath = path.join(_getCacheDirectory(), toolName); 3921 if (fs.existsSync(toolPath)) { 3922 const children = fs.readdirSync(toolPath); 3923 for (const child of children) { 3924 if (isExplicitVersion(child)) { 3925 const fullPath = path.join(toolPath, child, arch || ''); 3926 if (fs.existsSync(fullPath) && fs.existsSync(`${fullPath}.complete`)) { 3927 versions.push(child); 3928 } 3929 } 3930 } 3931 } 3932 return versions; 3933 } 3934 exports.findAllVersions = findAllVersions; 3935 function getManifestFromRepo(owner, repo, auth, branch = 'master') { 3936 return __awaiter(this, void 0, void 0, function* () { 3937 let releases = []; 3938 const treeUrl = `https://api.github.com/repos/${owner}/${repo}/git/trees/${branch}`; 3939 const http = new httpm.HttpClient('tool-cache'); 3940 const headers = {}; 3941 if (auth) { 3942 core.debug('set auth'); 3943 headers.authorization = auth; 3944 } 3945 const response = yield http.getJson(treeUrl, headers); 3946 if (!response.result) { 3947 return releases; 3948 } 3949 let manifestUrl = ''; 3950 for (const item of response.result.tree) { 3951 if (item.path === 'versions-manifest.json') { 3952 manifestUrl = item.url; 3953 break; 3954 } 3955 } 3956 headers['accept'] = 'application/vnd.github.VERSION.raw'; 3957 let versionsRaw = yield (yield http.get(manifestUrl, headers)).readBody(); 3958 if (versionsRaw) { 3959 // shouldn't be needed but protects against invalid json saved with BOM 3960 versionsRaw = versionsRaw.replace(/^\uFEFF/, ''); 3961 try { 3962 releases = JSON.parse(versionsRaw); 3963 } 3964 catch (_a) { 3965 core.debug('Invalid json'); 3966 } 3967 } 3968 return releases; 3969 }); 3970 } 3971 exports.getManifestFromRepo = getManifestFromRepo; 3972 function findFromManifest(versionSpec, stable, manifest, archFilter = os.arch()) { 3973 return __awaiter(this, void 0, void 0, function* () { 3974 // wrap the internal impl 3975 const match = yield mm._findMatch(versionSpec, stable, manifest, archFilter); 3976 return match; 3977 }); 3978 } 3979 exports.findFromManifest = findFromManifest; 3980 function _createExtractFolder(dest) { 3981 return __awaiter(this, void 0, void 0, function* () { 3982 if (!dest) { 3983 // create a temp dir 3984 dest = path.join(_getTempDirectory(), v4_1.default()); 3985 } 3986 yield io.mkdirP(dest); 3987 return dest; 3988 }); 3989 } 3990 function _createToolPath(tool, version, arch) { 3991 return __awaiter(this, void 0, void 0, function* () { 3992 const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); 3993 core.debug(`destination ${folderPath}`); 3994 const markerPath = `${folderPath}.complete`; 3995 yield io.rmRF(folderPath); 3996 yield io.rmRF(markerPath); 3997 yield io.mkdirP(folderPath); 3998 return folderPath; 3999 }); 4000 } 4001 function _completeToolPath(tool, version, arch) { 4002 const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); 4003 const markerPath = `${folderPath}.complete`; 4004 fs.writeFileSync(markerPath, ''); 4005 core.debug('finished caching tool'); 4006 } 4007 /** 4008 * Check if version string is explicit 4009 * 4010 * @param versionSpec version string to check 4011 */ 4012 function isExplicitVersion(versionSpec) { 4013 const c = semver.clean(versionSpec) || ''; 4014 core.debug(`isExplicit: ${c}`); 4015 const valid = semver.valid(c) != null; 4016 core.debug(`explicit? ${valid}`); 4017 return valid; 4018 } 4019 exports.isExplicitVersion = isExplicitVersion; 4020 /** 4021 * Get the highest satisfiying semantic version in `versions` which satisfies `versionSpec` 4022 * 4023 * @param versions array of versions to evaluate 4024 * @param versionSpec semantic version spec to satisfy 4025 */ 4026 function evaluateVersions(versions, versionSpec) { 4027 let version = ''; 4028 core.debug(`evaluating ${versions.length} versions`); 4029 versions = versions.sort((a, b) => { 4030 if (semver.gt(a, b)) { 4031 return 1; 4032 } 4033 return -1; 4034 }); 4035 for (let i = versions.length - 1; i >= 0; i--) { 4036 const potential = versions[i]; 4037 const satisfied = semver.satisfies(potential, versionSpec); 4038 if (satisfied) { 4039 version = potential; 4040 break; 4041 } 4042 } 4043 if (version) { 4044 core.debug(`matched: ${version}`); 4045 } 4046 else { 4047 core.debug('match not found'); 4048 } 4049 return version; 4050 } 4051 exports.evaluateVersions = evaluateVersions; 4052 /** 4053 * Gets RUNNER_TOOL_CACHE 4054 */ 4055 function _getCacheDirectory() { 4056 const cacheDirectory = process.env['RUNNER_TOOL_CACHE'] || ''; 4057 assert_1.ok(cacheDirectory, 'Expected RUNNER_TOOL_CACHE to be defined'); 4058 return cacheDirectory; 4059 } 4060 /** 4061 * Gets RUNNER_TEMP 4062 */ 4063 function _getTempDirectory() { 4064 const tempDirectory = process.env['RUNNER_TEMP'] || ''; 4065 assert_1.ok(tempDirectory, 'Expected RUNNER_TEMP to be defined'); 4066 return tempDirectory; 4067 } 4068 /** 4069 * Gets a global variable 4070 */ 4071 function _getGlobal(key, defaultValue) { 4072 /* eslint-disable @typescript-eslint/no-explicit-any */ 4073 const value = global[key]; 4074 /* eslint-enable @typescript-eslint/no-explicit-any */ 4075 return value !== undefined ? value : defaultValue; 4076 } 4077 /** 4078 * Returns an array of unique values. 4079 * @param values Values to make unique. 4080 */ 4081 function _unique(values) { 4082 return Array.from(new Set(values)); 4083 } 4084 //# sourceMappingURL=tool-cache.js.map 4085 4086 /***/ }), 4087 4088 /***/ 7701: 4089 /***/ ((module) => { 4090 4091 /** 4092 * Convert array of 16 byte values to UUID string format of the form: 4093 * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 4094 */ 4095 var byteToHex = []; 4096 for (var i = 0; i < 256; ++i) { 4097 byteToHex[i] = (i + 0x100).toString(16).substr(1); 4098 } 4099 4100 function bytesToUuid(buf, offset) { 4101 var i = offset || 0; 4102 var bth = byteToHex; 4103 // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4 4104 return ([ 4105 bth[buf[i++]], bth[buf[i++]], 4106 bth[buf[i++]], bth[buf[i++]], '-', 4107 bth[buf[i++]], bth[buf[i++]], '-', 4108 bth[buf[i++]], bth[buf[i++]], '-', 4109 bth[buf[i++]], bth[buf[i++]], '-', 4110 bth[buf[i++]], bth[buf[i++]], 4111 bth[buf[i++]], bth[buf[i++]], 4112 bth[buf[i++]], bth[buf[i++]] 4113 ]).join(''); 4114 } 4115 4116 module.exports = bytesToUuid; 4117 4118 4119 /***/ }), 4120 4121 /***/ 7269: 4122 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 4123 4124 // Unique ID creation requires a high quality random # generator. In node.js 4125 // this is pretty straight-forward - we use the crypto API. 4126 4127 var crypto = __nccwpck_require__(6113); 4128 4129 module.exports = function nodeRNG() { 4130 return crypto.randomBytes(16); 4131 }; 4132 4133 4134 /***/ }), 4135 4136 /***/ 7468: 4137 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 4138 4139 var rng = __nccwpck_require__(7269); 4140 var bytesToUuid = __nccwpck_require__(7701); 4141 4142 function v4(options, buf, offset) { 4143 var i = buf && offset || 0; 4144 4145 if (typeof(options) == 'string') { 4146 buf = options === 'binary' ? new Array(16) : null; 4147 options = null; 4148 } 4149 options = options || {}; 4150 4151 var rnds = options.random || (options.rng || rng)(); 4152 4153 // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` 4154 rnds[6] = (rnds[6] & 0x0f) | 0x40; 4155 rnds[8] = (rnds[8] & 0x3f) | 0x80; 4156 4157 // Copy bytes to buffer, if provided 4158 if (buf) { 4159 for (var ii = 0; ii < 16; ++ii) { 4160 buf[i + ii] = rnds[ii]; 4161 } 4162 } 4163 4164 return buf || bytesToUuid(rnds); 4165 } 4166 4167 module.exports = v4; 4168 4169 4170 /***/ }), 4171 4172 /***/ 334: 4173 /***/ ((__unused_webpack_module, exports) => { 4174 4175 4176 4177 Object.defineProperty(exports, "__esModule", ({ value: true })); 4178 4179 const REGEX_IS_INSTALLATION_LEGACY = /^v1\./; 4180 const REGEX_IS_INSTALLATION = /^ghs_/; 4181 const REGEX_IS_USER_TO_SERVER = /^ghu_/; 4182 async function auth(token) { 4183 const isApp = token.split(/\./).length === 3; 4184 const isInstallation = REGEX_IS_INSTALLATION_LEGACY.test(token) || REGEX_IS_INSTALLATION.test(token); 4185 const isUserToServer = REGEX_IS_USER_TO_SERVER.test(token); 4186 const tokenType = isApp ? "app" : isInstallation ? "installation" : isUserToServer ? "user-to-server" : "oauth"; 4187 return { 4188 type: "token", 4189 token: token, 4190 tokenType 4191 }; 4192 } 4193 4194 /** 4195 * Prefix token for usage in the Authorization header 4196 * 4197 * @param token OAuth token or JSON Web Token 4198 */ 4199 function withAuthorizationPrefix(token) { 4200 if (token.split(/\./).length === 3) { 4201 return `bearer ${token}`; 4202 } 4203 4204 return `token ${token}`; 4205 } 4206 4207 async function hook(token, request, route, parameters) { 4208 const endpoint = request.endpoint.merge(route, parameters); 4209 endpoint.headers.authorization = withAuthorizationPrefix(token); 4210 return request(endpoint); 4211 } 4212 4213 const createTokenAuth = function createTokenAuth(token) { 4214 if (!token) { 4215 throw new Error("[@octokit/auth-token] No token passed to createTokenAuth"); 4216 } 4217 4218 if (typeof token !== "string") { 4219 throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string"); 4220 } 4221 4222 token = token.replace(/^(token|bearer) +/i, ""); 4223 return Object.assign(auth.bind(null, token), { 4224 hook: hook.bind(null, token) 4225 }); 4226 }; 4227 4228 exports.createTokenAuth = createTokenAuth; 4229 //# sourceMappingURL=index.js.map 4230 4231 4232 /***/ }), 4233 4234 /***/ 6762: 4235 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 4236 4237 4238 4239 Object.defineProperty(exports, "__esModule", ({ value: true })); 4240 4241 var universalUserAgent = __nccwpck_require__(5030); 4242 var beforeAfterHook = __nccwpck_require__(3682); 4243 var request = __nccwpck_require__(6234); 4244 var graphql = __nccwpck_require__(8467); 4245 var authToken = __nccwpck_require__(334); 4246 4247 function _objectWithoutPropertiesLoose(source, excluded) { 4248 if (source == null) return {}; 4249 var target = {}; 4250 var sourceKeys = Object.keys(source); 4251 var key, i; 4252 4253 for (i = 0; i < sourceKeys.length; i++) { 4254 key = sourceKeys[i]; 4255 if (excluded.indexOf(key) >= 0) continue; 4256 target[key] = source[key]; 4257 } 4258 4259 return target; 4260 } 4261 4262 function _objectWithoutProperties(source, excluded) { 4263 if (source == null) return {}; 4264 4265 var target = _objectWithoutPropertiesLoose(source, excluded); 4266 4267 var key, i; 4268 4269 if (Object.getOwnPropertySymbols) { 4270 var sourceSymbolKeys = Object.getOwnPropertySymbols(source); 4271 4272 for (i = 0; i < sourceSymbolKeys.length; i++) { 4273 key = sourceSymbolKeys[i]; 4274 if (excluded.indexOf(key) >= 0) continue; 4275 if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; 4276 target[key] = source[key]; 4277 } 4278 } 4279 4280 return target; 4281 } 4282 4283 const VERSION = "3.6.0"; 4284 4285 const _excluded = ["authStrategy"]; 4286 class Octokit { 4287 constructor(options = {}) { 4288 const hook = new beforeAfterHook.Collection(); 4289 const requestDefaults = { 4290 baseUrl: request.request.endpoint.DEFAULTS.baseUrl, 4291 headers: {}, 4292 request: Object.assign({}, options.request, { 4293 // @ts-ignore internal usage only, no need to type 4294 hook: hook.bind(null, "request") 4295 }), 4296 mediaType: { 4297 previews: [], 4298 format: "" 4299 } 4300 }; // prepend default user agent with `options.userAgent` if set 4301 4302 requestDefaults.headers["user-agent"] = [options.userAgent, `octokit-core.js/${VERSION} ${universalUserAgent.getUserAgent()}`].filter(Boolean).join(" "); 4303 4304 if (options.baseUrl) { 4305 requestDefaults.baseUrl = options.baseUrl; 4306 } 4307 4308 if (options.previews) { 4309 requestDefaults.mediaType.previews = options.previews; 4310 } 4311 4312 if (options.timeZone) { 4313 requestDefaults.headers["time-zone"] = options.timeZone; 4314 } 4315 4316 this.request = request.request.defaults(requestDefaults); 4317 this.graphql = graphql.withCustomRequest(this.request).defaults(requestDefaults); 4318 this.log = Object.assign({ 4319 debug: () => {}, 4320 info: () => {}, 4321 warn: console.warn.bind(console), 4322 error: console.error.bind(console) 4323 }, options.log); 4324 this.hook = hook; // (1) If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance 4325 // is unauthenticated. The `this.auth()` method is a no-op and no request hook is registered. 4326 // (2) If only `options.auth` is set, use the default token authentication strategy. 4327 // (3) If `options.authStrategy` is set then use it and pass in `options.auth`. Always pass own request as many strategies accept a custom request instance. 4328 // TODO: type `options.auth` based on `options.authStrategy`. 4329 4330 if (!options.authStrategy) { 4331 if (!options.auth) { 4332 // (1) 4333 this.auth = async () => ({ 4334 type: "unauthenticated" 4335 }); 4336 } else { 4337 // (2) 4338 const auth = authToken.createTokenAuth(options.auth); // @ts-ignore ¯\_(ツ)_/¯ 4339 4340 hook.wrap("request", auth.hook); 4341 this.auth = auth; 4342 } 4343 } else { 4344 const { 4345 authStrategy 4346 } = options, 4347 otherOptions = _objectWithoutProperties(options, _excluded); 4348 4349 const auth = authStrategy(Object.assign({ 4350 request: this.request, 4351 log: this.log, 4352 // we pass the current octokit instance as well as its constructor options 4353 // to allow for authentication strategies that return a new octokit instance 4354 // that shares the same internal state as the current one. The original 4355 // requirement for this was the "event-octokit" authentication strategy 4356 // of https://github.com/probot/octokit-auth-probot. 4357 octokit: this, 4358 octokitOptions: otherOptions 4359 }, options.auth)); // @ts-ignore ¯\_(ツ)_/¯ 4360 4361 hook.wrap("request", auth.hook); 4362 this.auth = auth; 4363 } // apply plugins 4364 // https://stackoverflow.com/a/16345172 4365 4366 4367 const classConstructor = this.constructor; 4368 classConstructor.plugins.forEach(plugin => { 4369 Object.assign(this, plugin(this, options)); 4370 }); 4371 } 4372 4373 static defaults(defaults) { 4374 const OctokitWithDefaults = class extends this { 4375 constructor(...args) { 4376 const options = args[0] || {}; 4377 4378 if (typeof defaults === "function") { 4379 super(defaults(options)); 4380 return; 4381 } 4382 4383 super(Object.assign({}, defaults, options, options.userAgent && defaults.userAgent ? { 4384 userAgent: `${options.userAgent} ${defaults.userAgent}` 4385 } : null)); 4386 } 4387 4388 }; 4389 return OctokitWithDefaults; 4390 } 4391 /** 4392 * Attach a plugin (or many) to your Octokit instance. 4393 * 4394 * @example 4395 * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...) 4396 */ 4397 4398 4399 static plugin(...newPlugins) { 4400 var _a; 4401 4402 const currentPlugins = this.plugins; 4403 const NewOctokit = (_a = class extends this {}, _a.plugins = currentPlugins.concat(newPlugins.filter(plugin => !currentPlugins.includes(plugin))), _a); 4404 return NewOctokit; 4405 } 4406 4407 } 4408 Octokit.VERSION = VERSION; 4409 Octokit.plugins = []; 4410 4411 exports.Octokit = Octokit; 4412 //# sourceMappingURL=index.js.map 4413 4414 4415 /***/ }), 4416 4417 /***/ 9440: 4418 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 4419 4420 4421 4422 Object.defineProperty(exports, "__esModule", ({ value: true })); 4423 4424 var isPlainObject = __nccwpck_require__(3287); 4425 var universalUserAgent = __nccwpck_require__(5030); 4426 4427 function lowercaseKeys(object) { 4428 if (!object) { 4429 return {}; 4430 } 4431 4432 return Object.keys(object).reduce((newObj, key) => { 4433 newObj[key.toLowerCase()] = object[key]; 4434 return newObj; 4435 }, {}); 4436 } 4437 4438 function mergeDeep(defaults, options) { 4439 const result = Object.assign({}, defaults); 4440 Object.keys(options).forEach(key => { 4441 if (isPlainObject.isPlainObject(options[key])) { 4442 if (!(key in defaults)) Object.assign(result, { 4443 [key]: options[key] 4444 });else result[key] = mergeDeep(defaults[key], options[key]); 4445 } else { 4446 Object.assign(result, { 4447 [key]: options[key] 4448 }); 4449 } 4450 }); 4451 return result; 4452 } 4453 4454 function removeUndefinedProperties(obj) { 4455 for (const key in obj) { 4456 if (obj[key] === undefined) { 4457 delete obj[key]; 4458 } 4459 } 4460 4461 return obj; 4462 } 4463 4464 function merge(defaults, route, options) { 4465 if (typeof route === "string") { 4466 let [method, url] = route.split(" "); 4467 options = Object.assign(url ? { 4468 method, 4469 url 4470 } : { 4471 url: method 4472 }, options); 4473 } else { 4474 options = Object.assign({}, route); 4475 } // lowercase header names before merging with defaults to avoid duplicates 4476 4477 4478 options.headers = lowercaseKeys(options.headers); // remove properties with undefined values before merging 4479 4480 removeUndefinedProperties(options); 4481 removeUndefinedProperties(options.headers); 4482 const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten 4483 4484 if (defaults && defaults.mediaType.previews.length) { 4485 mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews); 4486 } 4487 4488 mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, "")); 4489 return mergedOptions; 4490 } 4491 4492 function addQueryParameters(url, parameters) { 4493 const separator = /\?/.test(url) ? "&" : "?"; 4494 const names = Object.keys(parameters); 4495 4496 if (names.length === 0) { 4497 return url; 4498 } 4499 4500 return url + separator + names.map(name => { 4501 if (name === "q") { 4502 return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+"); 4503 } 4504 4505 return `${name}=${encodeURIComponent(parameters[name])}`; 4506 }).join("&"); 4507 } 4508 4509 const urlVariableRegex = /\{[^}]+\}/g; 4510 4511 function removeNonChars(variableName) { 4512 return variableName.replace(/^\W+|\W+$/g, "").split(/,/); 4513 } 4514 4515 function extractUrlVariableNames(url) { 4516 const matches = url.match(urlVariableRegex); 4517 4518 if (!matches) { 4519 return []; 4520 } 4521 4522 return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []); 4523 } 4524 4525 function omit(object, keysToOmit) { 4526 return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => { 4527 obj[key] = object[key]; 4528 return obj; 4529 }, {}); 4530 } 4531 4532 // Based on https://github.com/bramstein/url-template, licensed under BSD 4533 // TODO: create separate package. 4534 // 4535 // Copyright (c) 2012-2014, Bram Stein 4536 // All rights reserved. 4537 // Redistribution and use in source and binary forms, with or without 4538 // modification, are permitted provided that the following conditions 4539 // are met: 4540 // 1. Redistributions of source code must retain the above copyright 4541 // notice, this list of conditions and the following disclaimer. 4542 // 2. Redistributions in binary form must reproduce the above copyright 4543 // notice, this list of conditions and the following disclaimer in the 4544 // documentation and/or other materials provided with the distribution. 4545 // 3. The name of the author may not be used to endorse or promote products 4546 // derived from this software without specific prior written permission. 4547 // THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED 4548 // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 4549 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 4550 // EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 4551 // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 4552 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 4553 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 4554 // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 4555 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 4556 // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 4557 4558 /* istanbul ignore file */ 4559 function encodeReserved(str) { 4560 return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) { 4561 if (!/%[0-9A-Fa-f]/.test(part)) { 4562 part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]"); 4563 } 4564 4565 return part; 4566 }).join(""); 4567 } 4568 4569 function encodeUnreserved(str) { 4570 return encodeURIComponent(str).replace(/[!'()*]/g, function (c) { 4571 return "%" + c.charCodeAt(0).toString(16).toUpperCase(); 4572 }); 4573 } 4574 4575 function encodeValue(operator, value, key) { 4576 value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value); 4577 4578 if (key) { 4579 return encodeUnreserved(key) + "=" + value; 4580 } else { 4581 return value; 4582 } 4583 } 4584 4585 function isDefined(value) { 4586 return value !== undefined && value !== null; 4587 } 4588 4589 function isKeyOperator(operator) { 4590 return operator === ";" || operator === "&" || operator === "?"; 4591 } 4592 4593 function getValues(context, operator, key, modifier) { 4594 var value = context[key], 4595 result = []; 4596 4597 if (isDefined(value) && value !== "") { 4598 if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { 4599 value = value.toString(); 4600 4601 if (modifier && modifier !== "*") { 4602 value = value.substring(0, parseInt(modifier, 10)); 4603 } 4604 4605 result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : "")); 4606 } else { 4607 if (modifier === "*") { 4608 if (Array.isArray(value)) { 4609 value.filter(isDefined).forEach(function (value) { 4610 result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : "")); 4611 }); 4612 } else { 4613 Object.keys(value).forEach(function (k) { 4614 if (isDefined(value[k])) { 4615 result.push(encodeValue(operator, value[k], k)); 4616 } 4617 }); 4618 } 4619 } else { 4620 const tmp = []; 4621 4622 if (Array.isArray(value)) { 4623 value.filter(isDefined).forEach(function (value) { 4624 tmp.push(encodeValue(operator, value)); 4625 }); 4626 } else { 4627 Object.keys(value).forEach(function (k) { 4628 if (isDefined(value[k])) { 4629 tmp.push(encodeUnreserved(k)); 4630 tmp.push(encodeValue(operator, value[k].toString())); 4631 } 4632 }); 4633 } 4634 4635 if (isKeyOperator(operator)) { 4636 result.push(encodeUnreserved(key) + "=" + tmp.join(",")); 4637 } else if (tmp.length !== 0) { 4638 result.push(tmp.join(",")); 4639 } 4640 } 4641 } 4642 } else { 4643 if (operator === ";") { 4644 if (isDefined(value)) { 4645 result.push(encodeUnreserved(key)); 4646 } 4647 } else if (value === "" && (operator === "&" || operator === "?")) { 4648 result.push(encodeUnreserved(key) + "="); 4649 } else if (value === "") { 4650 result.push(""); 4651 } 4652 } 4653 4654 return result; 4655 } 4656 4657 function parseUrl(template) { 4658 return { 4659 expand: expand.bind(null, template) 4660 }; 4661 } 4662 4663 function expand(template, context) { 4664 var operators = ["+", "#", ".", "/", ";", "?", "&"]; 4665 return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) { 4666 if (expression) { 4667 let operator = ""; 4668 const values = []; 4669 4670 if (operators.indexOf(expression.charAt(0)) !== -1) { 4671 operator = expression.charAt(0); 4672 expression = expression.substr(1); 4673 } 4674 4675 expression.split(/,/g).forEach(function (variable) { 4676 var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable); 4677 values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3])); 4678 }); 4679 4680 if (operator && operator !== "+") { 4681 var separator = ","; 4682 4683 if (operator === "?") { 4684 separator = "&"; 4685 } else if (operator !== "#") { 4686 separator = operator; 4687 } 4688 4689 return (values.length !== 0 ? operator : "") + values.join(separator); 4690 } else { 4691 return values.join(","); 4692 } 4693 } else { 4694 return encodeReserved(literal); 4695 } 4696 }); 4697 } 4698 4699 function parse(options) { 4700 // https://fetch.spec.whatwg.org/#methods 4701 let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible 4702 4703 let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}"); 4704 let headers = Object.assign({}, options.headers); 4705 let body; 4706 let parameters = omit(options, ["method", "baseUrl", "url", "headers", "request", "mediaType"]); // extract variable names from URL to calculate remaining variables later 4707 4708 const urlVariableNames = extractUrlVariableNames(url); 4709 url = parseUrl(url).expand(parameters); 4710 4711 if (!/^http/.test(url)) { 4712 url = options.baseUrl + url; 4713 } 4714 4715 const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat("baseUrl"); 4716 const remainingParameters = omit(parameters, omittedParameters); 4717 const isBinaryRequest = /application\/octet-stream/i.test(headers.accept); 4718 4719 if (!isBinaryRequest) { 4720 if (options.mediaType.format) { 4721 // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw 4722 headers.accept = headers.accept.split(/,/).map(preview => preview.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(","); 4723 } 4724 4725 if (options.mediaType.previews.length) { 4726 const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || []; 4727 headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map(preview => { 4728 const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; 4729 return `application/vnd.github.${preview}-preview${format}`; 4730 }).join(","); 4731 } 4732 } // for GET/HEAD requests, set URL query parameters from remaining parameters 4733 // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters 4734 4735 4736 if (["GET", "HEAD"].includes(method)) { 4737 url = addQueryParameters(url, remainingParameters); 4738 } else { 4739 if ("data" in remainingParameters) { 4740 body = remainingParameters.data; 4741 } else { 4742 if (Object.keys(remainingParameters).length) { 4743 body = remainingParameters; 4744 } else { 4745 headers["content-length"] = 0; 4746 } 4747 } 4748 } // default content-type for JSON if body is set 4749 4750 4751 if (!headers["content-type"] && typeof body !== "undefined") { 4752 headers["content-type"] = "application/json; charset=utf-8"; 4753 } // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body. 4754 // fetch does not allow to set `content-length` header, but we can set body to an empty string 4755 4756 4757 if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") { 4758 body = ""; 4759 } // Only return body/request keys if present 4760 4761 4762 return Object.assign({ 4763 method, 4764 url, 4765 headers 4766 }, typeof body !== "undefined" ? { 4767 body 4768 } : null, options.request ? { 4769 request: options.request 4770 } : null); 4771 } 4772 4773 function endpointWithDefaults(defaults, route, options) { 4774 return parse(merge(defaults, route, options)); 4775 } 4776 4777 function withDefaults(oldDefaults, newDefaults) { 4778 const DEFAULTS = merge(oldDefaults, newDefaults); 4779 const endpoint = endpointWithDefaults.bind(null, DEFAULTS); 4780 return Object.assign(endpoint, { 4781 DEFAULTS, 4782 defaults: withDefaults.bind(null, DEFAULTS), 4783 merge: merge.bind(null, DEFAULTS), 4784 parse 4785 }); 4786 } 4787 4788 const VERSION = "6.0.12"; 4789 4790 const userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`; // DEFAULTS has all properties set that EndpointOptions has, except url. 4791 // So we use RequestParameters and add method as additional required property. 4792 4793 const DEFAULTS = { 4794 method: "GET", 4795 baseUrl: "https://api.github.com", 4796 headers: { 4797 accept: "application/vnd.github.v3+json", 4798 "user-agent": userAgent 4799 }, 4800 mediaType: { 4801 format: "", 4802 previews: [] 4803 } 4804 }; 4805 4806 const endpoint = withDefaults(null, DEFAULTS); 4807 4808 exports.endpoint = endpoint; 4809 //# sourceMappingURL=index.js.map 4810 4811 4812 /***/ }), 4813 4814 /***/ 8467: 4815 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 4816 4817 4818 4819 Object.defineProperty(exports, "__esModule", ({ value: true })); 4820 4821 var request = __nccwpck_require__(6234); 4822 var universalUserAgent = __nccwpck_require__(5030); 4823 4824 const VERSION = "4.8.0"; 4825 4826 function _buildMessageForResponseErrors(data) { 4827 return `Request failed due to following response errors:\n` + data.errors.map(e => ` - ${e.message}`).join("\n"); 4828 } 4829 4830 class GraphqlResponseError extends Error { 4831 constructor(request, headers, response) { 4832 super(_buildMessageForResponseErrors(response)); 4833 this.request = request; 4834 this.headers = headers; 4835 this.response = response; 4836 this.name = "GraphqlResponseError"; // Expose the errors and response data in their shorthand properties. 4837 4838 this.errors = response.errors; 4839 this.data = response.data; // Maintains proper stack trace (only available on V8) 4840 4841 /* istanbul ignore next */ 4842 4843 if (Error.captureStackTrace) { 4844 Error.captureStackTrace(this, this.constructor); 4845 } 4846 } 4847 4848 } 4849 4850 const NON_VARIABLE_OPTIONS = ["method", "baseUrl", "url", "headers", "request", "query", "mediaType"]; 4851 const FORBIDDEN_VARIABLE_OPTIONS = ["query", "method", "url"]; 4852 const GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/; 4853 function graphql(request, query, options) { 4854 if (options) { 4855 if (typeof query === "string" && "query" in options) { 4856 return Promise.reject(new Error(`[@octokit/graphql] "query" cannot be used as variable name`)); 4857 } 4858 4859 for (const key in options) { 4860 if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue; 4861 return Promise.reject(new Error(`[@octokit/graphql] "${key}" cannot be used as variable name`)); 4862 } 4863 } 4864 4865 const parsedOptions = typeof query === "string" ? Object.assign({ 4866 query 4867 }, options) : query; 4868 const requestOptions = Object.keys(parsedOptions).reduce((result, key) => { 4869 if (NON_VARIABLE_OPTIONS.includes(key)) { 4870 result[key] = parsedOptions[key]; 4871 return result; 4872 } 4873 4874 if (!result.variables) { 4875 result.variables = {}; 4876 } 4877 4878 result.variables[key] = parsedOptions[key]; 4879 return result; 4880 }, {}); // workaround for GitHub Enterprise baseUrl set with /api/v3 suffix 4881 // https://github.com/octokit/auth-app.js/issues/111#issuecomment-657610451 4882 4883 const baseUrl = parsedOptions.baseUrl || request.endpoint.DEFAULTS.baseUrl; 4884 4885 if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) { 4886 requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql"); 4887 } 4888 4889 return request(requestOptions).then(response => { 4890 if (response.data.errors) { 4891 const headers = {}; 4892 4893 for (const key of Object.keys(response.headers)) { 4894 headers[key] = response.headers[key]; 4895 } 4896 4897 throw new GraphqlResponseError(requestOptions, headers, response.data); 4898 } 4899 4900 return response.data.data; 4901 }); 4902 } 4903 4904 function withDefaults(request$1, newDefaults) { 4905 const newRequest = request$1.defaults(newDefaults); 4906 4907 const newApi = (query, options) => { 4908 return graphql(newRequest, query, options); 4909 }; 4910 4911 return Object.assign(newApi, { 4912 defaults: withDefaults.bind(null, newRequest), 4913 endpoint: request.request.endpoint 4914 }); 4915 } 4916 4917 const graphql$1 = withDefaults(request.request, { 4918 headers: { 4919 "user-agent": `octokit-graphql.js/${VERSION} ${universalUserAgent.getUserAgent()}` 4920 }, 4921 method: "POST", 4922 url: "/graphql" 4923 }); 4924 function withCustomRequest(customRequest) { 4925 return withDefaults(customRequest, { 4926 method: "POST", 4927 url: "/graphql" 4928 }); 4929 } 4930 4931 exports.GraphqlResponseError = GraphqlResponseError; 4932 exports.graphql = graphql$1; 4933 exports.withCustomRequest = withCustomRequest; 4934 //# sourceMappingURL=index.js.map 4935 4936 4937 /***/ }), 4938 4939 /***/ 4193: 4940 /***/ ((__unused_webpack_module, exports) => { 4941 4942 4943 4944 Object.defineProperty(exports, "__esModule", ({ value: true })); 4945 4946 const VERSION = "2.21.3"; 4947 4948 function ownKeys(object, enumerableOnly) { 4949 var keys = Object.keys(object); 4950 4951 if (Object.getOwnPropertySymbols) { 4952 var symbols = Object.getOwnPropertySymbols(object); 4953 enumerableOnly && (symbols = symbols.filter(function (sym) { 4954 return Object.getOwnPropertyDescriptor(object, sym).enumerable; 4955 })), keys.push.apply(keys, symbols); 4956 } 4957 4958 return keys; 4959 } 4960 4961 function _objectSpread2(target) { 4962 for (var i = 1; i < arguments.length; i++) { 4963 var source = null != arguments[i] ? arguments[i] : {}; 4964 i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { 4965 _defineProperty(target, key, source[key]); 4966 }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { 4967 Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); 4968 }); 4969 } 4970 4971 return target; 4972 } 4973 4974 function _defineProperty(obj, key, value) { 4975 if (key in obj) { 4976 Object.defineProperty(obj, key, { 4977 value: value, 4978 enumerable: true, 4979 configurable: true, 4980 writable: true 4981 }); 4982 } else { 4983 obj[key] = value; 4984 } 4985 4986 return obj; 4987 } 4988 4989 /** 4990 * Some “list” response that can be paginated have a different response structure 4991 * 4992 * They have a `total_count` key in the response (search also has `incomplete_results`, 4993 * /installation/repositories also has `repository_selection`), as well as a key with 4994 * the list of the items which name varies from endpoint to endpoint. 4995 * 4996 * Octokit normalizes these responses so that paginated results are always returned following 4997 * the same structure. One challenge is that if the list response has only one page, no Link 4998 * header is provided, so this header alone is not sufficient to check wether a response is 4999 * paginated or not. 5000 * 5001 * We check if a "total_count" key is present in the response data, but also make sure that 5002 * a "url" property is not, as the "Get the combined status for a specific ref" endpoint would 5003 * otherwise match: https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref 5004 */ 5005 function normalizePaginatedListResponse(response) { 5006 // endpoints can respond with 204 if repository is empty 5007 if (!response.data) { 5008 return _objectSpread2(_objectSpread2({}, response), {}, { 5009 data: [] 5010 }); 5011 } 5012 5013 const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data); 5014 if (!responseNeedsNormalization) return response; // keep the additional properties intact as there is currently no other way 5015 // to retrieve the same information. 5016 5017 const incompleteResults = response.data.incomplete_results; 5018 const repositorySelection = response.data.repository_selection; 5019 const totalCount = response.data.total_count; 5020 delete response.data.incomplete_results; 5021 delete response.data.repository_selection; 5022 delete response.data.total_count; 5023 const namespaceKey = Object.keys(response.data)[0]; 5024 const data = response.data[namespaceKey]; 5025 response.data = data; 5026 5027 if (typeof incompleteResults !== "undefined") { 5028 response.data.incomplete_results = incompleteResults; 5029 } 5030 5031 if (typeof repositorySelection !== "undefined") { 5032 response.data.repository_selection = repositorySelection; 5033 } 5034 5035 response.data.total_count = totalCount; 5036 return response; 5037 } 5038 5039 function iterator(octokit, route, parameters) { 5040 const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters); 5041 const requestMethod = typeof route === "function" ? route : octokit.request; 5042 const method = options.method; 5043 const headers = options.headers; 5044 let url = options.url; 5045 return { 5046 [Symbol.asyncIterator]: () => ({ 5047 async next() { 5048 if (!url) return { 5049 done: true 5050 }; 5051 5052 try { 5053 const response = await requestMethod({ 5054 method, 5055 url, 5056 headers 5057 }); 5058 const normalizedResponse = normalizePaginatedListResponse(response); // `response.headers.link` format: 5059 // '<https://api.github.com/users/aseemk/followers?page=2>; rel="next", <https://api.github.com/users/aseemk/followers?page=2>; rel="last"' 5060 // sets `url` to undefined if "next" URL is not present or `link` header is not set 5061 5062 url = ((normalizedResponse.headers.link || "").match(/<([^>]+)>;\s*rel="next"/) || [])[1]; 5063 return { 5064 value: normalizedResponse 5065 }; 5066 } catch (error) { 5067 if (error.status !== 409) throw error; 5068 url = ""; 5069 return { 5070 value: { 5071 status: 200, 5072 headers: {}, 5073 data: [] 5074 } 5075 }; 5076 } 5077 } 5078 5079 }) 5080 }; 5081 } 5082 5083 function paginate(octokit, route, parameters, mapFn) { 5084 if (typeof parameters === "function") { 5085 mapFn = parameters; 5086 parameters = undefined; 5087 } 5088 5089 return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn); 5090 } 5091 5092 function gather(octokit, results, iterator, mapFn) { 5093 return iterator.next().then(result => { 5094 if (result.done) { 5095 return results; 5096 } 5097 5098 let earlyExit = false; 5099 5100 function done() { 5101 earlyExit = true; 5102 } 5103 5104 results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data); 5105 5106 if (earlyExit) { 5107 return results; 5108 } 5109 5110 return gather(octokit, results, iterator, mapFn); 5111 }); 5112 } 5113 5114 const composePaginateRest = Object.assign(paginate, { 5115 iterator 5116 }); 5117 5118 const paginatingEndpoints = ["GET /app/hook/deliveries", "GET /app/installations", "GET /applications/grants", "GET /authorizations", "GET /enterprises/{enterprise}/actions/permissions/organizations", "GET /enterprises/{enterprise}/actions/runner-groups", "GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations", "GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners", "GET /enterprises/{enterprise}/actions/runners", "GET /enterprises/{enterprise}/audit-log", "GET /enterprises/{enterprise}/secret-scanning/alerts", "GET /enterprises/{enterprise}/settings/billing/advanced-security", "GET /events", "GET /gists", "GET /gists/public", "GET /gists/starred", "GET /gists/{gist_id}/comments", "GET /gists/{gist_id}/commits", "GET /gists/{gist_id}/forks", "GET /installation/repositories", "GET /issues", "GET /licenses", "GET /marketplace_listing/plans", "GET /marketplace_listing/plans/{plan_id}/accounts", "GET /marketplace_listing/stubbed/plans", "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts", "GET /networks/{owner}/{repo}/events", "GET /notifications", "GET /organizations", "GET /orgs/{org}/actions/cache/usage-by-repository", "GET /orgs/{org}/actions/permissions/repositories", "GET /orgs/{org}/actions/runner-groups", "GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories", "GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners", "GET /orgs/{org}/actions/runners", "GET /orgs/{org}/actions/secrets", "GET /orgs/{org}/actions/secrets/{secret_name}/repositories", "GET /orgs/{org}/audit-log", "GET /orgs/{org}/blocks", "GET /orgs/{org}/code-scanning/alerts", "GET /orgs/{org}/codespaces", "GET /orgs/{org}/credential-authorizations", "GET /orgs/{org}/dependabot/secrets", "GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories", "GET /orgs/{org}/events", "GET /orgs/{org}/external-groups", "GET /orgs/{org}/failed_invitations", "GET /orgs/{org}/hooks", "GET /orgs/{org}/hooks/{hook_id}/deliveries", "GET /orgs/{org}/installations", "GET /orgs/{org}/invitations", "GET /orgs/{org}/invitations/{invitation_id}/teams", "GET /orgs/{org}/issues", "GET /orgs/{org}/members", "GET /orgs/{org}/migrations", "GET /orgs/{org}/migrations/{migration_id}/repositories", "GET /orgs/{org}/outside_collaborators", "GET /orgs/{org}/packages", "GET /orgs/{org}/packages/{package_type}/{package_name}/versions", "GET /orgs/{org}/projects", "GET /orgs/{org}/public_members", "GET /orgs/{org}/repos", "GET /orgs/{org}/secret-scanning/alerts", "GET /orgs/{org}/settings/billing/advanced-security", "GET /orgs/{org}/team-sync/groups", "GET /orgs/{org}/teams", "GET /orgs/{org}/teams/{team_slug}/discussions", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions", "GET /orgs/{org}/teams/{team_slug}/invitations", "GET /orgs/{org}/teams/{team_slug}/members", "GET /orgs/{org}/teams/{team_slug}/projects", "GET /orgs/{org}/teams/{team_slug}/repos", "GET /orgs/{org}/teams/{team_slug}/teams", "GET /projects/columns/{column_id}/cards", "GET /projects/{project_id}/collaborators", "GET /projects/{project_id}/columns", "GET /repos/{owner}/{repo}/actions/artifacts", "GET /repos/{owner}/{repo}/actions/caches", "GET /repos/{owner}/{repo}/actions/runners", "GET /repos/{owner}/{repo}/actions/runs", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs", "GET /repos/{owner}/{repo}/actions/secrets", "GET /repos/{owner}/{repo}/actions/workflows", "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs", "GET /repos/{owner}/{repo}/assignees", "GET /repos/{owner}/{repo}/branches", "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations", "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs", "GET /repos/{owner}/{repo}/code-scanning/alerts", "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", "GET /repos/{owner}/{repo}/code-scanning/analyses", "GET /repos/{owner}/{repo}/codespaces", "GET /repos/{owner}/{repo}/codespaces/devcontainers", "GET /repos/{owner}/{repo}/codespaces/secrets", "GET /repos/{owner}/{repo}/collaborators", "GET /repos/{owner}/{repo}/comments", "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/commits", "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments", "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls", "GET /repos/{owner}/{repo}/commits/{ref}/check-runs", "GET /repos/{owner}/{repo}/commits/{ref}/check-suites", "GET /repos/{owner}/{repo}/commits/{ref}/status", "GET /repos/{owner}/{repo}/commits/{ref}/statuses", "GET /repos/{owner}/{repo}/contributors", "GET /repos/{owner}/{repo}/dependabot/secrets", "GET /repos/{owner}/{repo}/deployments", "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses", "GET /repos/{owner}/{repo}/environments", "GET /repos/{owner}/{repo}/events", "GET /repos/{owner}/{repo}/forks", "GET /repos/{owner}/{repo}/git/matching-refs/{ref}", "GET /repos/{owner}/{repo}/hooks", "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries", "GET /repos/{owner}/{repo}/invitations", "GET /repos/{owner}/{repo}/issues", "GET /repos/{owner}/{repo}/issues/comments", "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/issues/events", "GET /repos/{owner}/{repo}/issues/{issue_number}/comments", "GET /repos/{owner}/{repo}/issues/{issue_number}/events", "GET /repos/{owner}/{repo}/issues/{issue_number}/labels", "GET /repos/{owner}/{repo}/issues/{issue_number}/reactions", "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline", "GET /repos/{owner}/{repo}/keys", "GET /repos/{owner}/{repo}/labels", "GET /repos/{owner}/{repo}/milestones", "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels", "GET /repos/{owner}/{repo}/notifications", "GET /repos/{owner}/{repo}/pages/builds", "GET /repos/{owner}/{repo}/projects", "GET /repos/{owner}/{repo}/pulls", "GET /repos/{owner}/{repo}/pulls/comments", "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments", "GET /repos/{owner}/{repo}/pulls/{pull_number}/commits", "GET /repos/{owner}/{repo}/pulls/{pull_number}/files", "GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers", "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews", "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments", "GET /repos/{owner}/{repo}/releases", "GET /repos/{owner}/{repo}/releases/{release_id}/assets", "GET /repos/{owner}/{repo}/releases/{release_id}/reactions", "GET /repos/{owner}/{repo}/secret-scanning/alerts", "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations", "GET /repos/{owner}/{repo}/stargazers", "GET /repos/{owner}/{repo}/subscribers", "GET /repos/{owner}/{repo}/tags", "GET /repos/{owner}/{repo}/teams", "GET /repos/{owner}/{repo}/topics", "GET /repositories", "GET /repositories/{repository_id}/environments/{environment_name}/secrets", "GET /search/code", "GET /search/commits", "GET /search/issues", "GET /search/labels", "GET /search/repositories", "GET /search/topics", "GET /search/users", "GET /teams/{team_id}/discussions", "GET /teams/{team_id}/discussions/{discussion_number}/comments", "GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions", "GET /teams/{team_id}/discussions/{discussion_number}/reactions", "GET /teams/{team_id}/invitations", "GET /teams/{team_id}/members", "GET /teams/{team_id}/projects", "GET /teams/{team_id}/repos", "GET /teams/{team_id}/teams", "GET /user/blocks", "GET /user/codespaces", "GET /user/codespaces/secrets", "GET /user/emails", "GET /user/followers", "GET /user/following", "GET /user/gpg_keys", "GET /user/installations", "GET /user/installations/{installation_id}/repositories", "GET /user/issues", "GET /user/keys", "GET /user/marketplace_purchases", "GET /user/marketplace_purchases/stubbed", "GET /user/memberships/orgs", "GET /user/migrations", "GET /user/migrations/{migration_id}/repositories", "GET /user/orgs", "GET /user/packages", "GET /user/packages/{package_type}/{package_name}/versions", "GET /user/public_emails", "GET /user/repos", "GET /user/repository_invitations", "GET /user/starred", "GET /user/subscriptions", "GET /user/teams", "GET /users", "GET /users/{username}/events", "GET /users/{username}/events/orgs/{org}", "GET /users/{username}/events/public", "GET /users/{username}/followers", "GET /users/{username}/following", "GET /users/{username}/gists", "GET /users/{username}/gpg_keys", "GET /users/{username}/keys", "GET /users/{username}/orgs", "GET /users/{username}/packages", "GET /users/{username}/projects", "GET /users/{username}/received_events", "GET /users/{username}/received_events/public", "GET /users/{username}/repos", "GET /users/{username}/starred", "GET /users/{username}/subscriptions"]; 5119 5120 function isPaginatingEndpoint(arg) { 5121 if (typeof arg === "string") { 5122 return paginatingEndpoints.includes(arg); 5123 } else { 5124 return false; 5125 } 5126 } 5127 5128 /** 5129 * @param octokit Octokit instance 5130 * @param options Options passed to Octokit constructor 5131 */ 5132 5133 function paginateRest(octokit) { 5134 return { 5135 paginate: Object.assign(paginate.bind(null, octokit), { 5136 iterator: iterator.bind(null, octokit) 5137 }) 5138 }; 5139 } 5140 paginateRest.VERSION = VERSION; 5141 5142 exports.composePaginateRest = composePaginateRest; 5143 exports.isPaginatingEndpoint = isPaginatingEndpoint; 5144 exports.paginateRest = paginateRest; 5145 exports.paginatingEndpoints = paginatingEndpoints; 5146 //# sourceMappingURL=index.js.map 5147 5148 5149 /***/ }), 5150 5151 /***/ 3044: 5152 /***/ ((__unused_webpack_module, exports) => { 5153 5154 5155 5156 Object.defineProperty(exports, "__esModule", ({ value: true })); 5157 5158 function ownKeys(object, enumerableOnly) { 5159 var keys = Object.keys(object); 5160 5161 if (Object.getOwnPropertySymbols) { 5162 var symbols = Object.getOwnPropertySymbols(object); 5163 5164 if (enumerableOnly) { 5165 symbols = symbols.filter(function (sym) { 5166 return Object.getOwnPropertyDescriptor(object, sym).enumerable; 5167 }); 5168 } 5169 5170 keys.push.apply(keys, symbols); 5171 } 5172 5173 return keys; 5174 } 5175 5176 function _objectSpread2(target) { 5177 for (var i = 1; i < arguments.length; i++) { 5178 var source = arguments[i] != null ? arguments[i] : {}; 5179 5180 if (i % 2) { 5181 ownKeys(Object(source), true).forEach(function (key) { 5182 _defineProperty(target, key, source[key]); 5183 }); 5184 } else if (Object.getOwnPropertyDescriptors) { 5185 Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); 5186 } else { 5187 ownKeys(Object(source)).forEach(function (key) { 5188 Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); 5189 }); 5190 } 5191 } 5192 5193 return target; 5194 } 5195 5196 function _defineProperty(obj, key, value) { 5197 if (key in obj) { 5198 Object.defineProperty(obj, key, { 5199 value: value, 5200 enumerable: true, 5201 configurable: true, 5202 writable: true 5203 }); 5204 } else { 5205 obj[key] = value; 5206 } 5207 5208 return obj; 5209 } 5210 5211 const Endpoints = { 5212 actions: { 5213 addCustomLabelsToSelfHostedRunnerForOrg: ["POST /orgs/{org}/actions/runners/{runner_id}/labels"], 5214 addCustomLabelsToSelfHostedRunnerForRepo: ["POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"], 5215 addSelectedRepoToOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"], 5216 approveWorkflowRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve"], 5217 cancelWorkflowRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"], 5218 createOrUpdateEnvironmentSecret: ["PUT /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"], 5219 createOrUpdateOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}"], 5220 createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}"], 5221 createRegistrationTokenForOrg: ["POST /orgs/{org}/actions/runners/registration-token"], 5222 createRegistrationTokenForRepo: ["POST /repos/{owner}/{repo}/actions/runners/registration-token"], 5223 createRemoveTokenForOrg: ["POST /orgs/{org}/actions/runners/remove-token"], 5224 createRemoveTokenForRepo: ["POST /repos/{owner}/{repo}/actions/runners/remove-token"], 5225 createWorkflowDispatch: ["POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches"], 5226 deleteActionsCacheById: ["DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}"], 5227 deleteActionsCacheByKey: ["DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}"], 5228 deleteArtifact: ["DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], 5229 deleteEnvironmentSecret: ["DELETE /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"], 5230 deleteOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}"], 5231 deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}"], 5232 deleteSelfHostedRunnerFromOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}"], 5233 deleteSelfHostedRunnerFromRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"], 5234 deleteWorkflowRun: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"], 5235 deleteWorkflowRunLogs: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"], 5236 disableSelectedRepositoryGithubActionsOrganization: ["DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}"], 5237 disableWorkflow: ["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable"], 5238 downloadArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"], 5239 downloadJobLogsForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"], 5240 downloadWorkflowRunAttemptLogs: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs"], 5241 downloadWorkflowRunLogs: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"], 5242 enableSelectedRepositoryGithubActionsOrganization: ["PUT /orgs/{org}/actions/permissions/repositories/{repository_id}"], 5243 enableWorkflow: ["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable"], 5244 getActionsCacheList: ["GET /repos/{owner}/{repo}/actions/caches"], 5245 getActionsCacheUsage: ["GET /repos/{owner}/{repo}/actions/cache/usage"], 5246 getActionsCacheUsageByRepoForOrg: ["GET /orgs/{org}/actions/cache/usage-by-repository"], 5247 getActionsCacheUsageForEnterprise: ["GET /enterprises/{enterprise}/actions/cache/usage"], 5248 getActionsCacheUsageForOrg: ["GET /orgs/{org}/actions/cache/usage"], 5249 getAllowedActionsOrganization: ["GET /orgs/{org}/actions/permissions/selected-actions"], 5250 getAllowedActionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions/selected-actions"], 5251 getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], 5252 getEnvironmentPublicKey: ["GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key"], 5253 getEnvironmentSecret: ["GET /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"], 5254 getGithubActionsDefaultWorkflowPermissionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/workflow"], 5255 getGithubActionsDefaultWorkflowPermissionsOrganization: ["GET /orgs/{org}/actions/permissions/workflow"], 5256 getGithubActionsDefaultWorkflowPermissionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions/workflow"], 5257 getGithubActionsPermissionsOrganization: ["GET /orgs/{org}/actions/permissions"], 5258 getGithubActionsPermissionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions"], 5259 getJobForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"], 5260 getOrgPublicKey: ["GET /orgs/{org}/actions/secrets/public-key"], 5261 getOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}"], 5262 getPendingDeploymentsForRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"], 5263 getRepoPermissions: ["GET /repos/{owner}/{repo}/actions/permissions", {}, { 5264 renamed: ["actions", "getGithubActionsPermissionsRepository"] 5265 }], 5266 getRepoPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"], 5267 getRepoSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"], 5268 getReviewsForRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals"], 5269 getSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}"], 5270 getSelfHostedRunnerForRepo: ["GET /repos/{owner}/{repo}/actions/runners/{runner_id}"], 5271 getWorkflow: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"], 5272 getWorkflowAccessToRepository: ["GET /repos/{owner}/{repo}/actions/permissions/access"], 5273 getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"], 5274 getWorkflowRunAttempt: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}"], 5275 getWorkflowRunUsage: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"], 5276 getWorkflowUsage: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"], 5277 listArtifactsForRepo: ["GET /repos/{owner}/{repo}/actions/artifacts"], 5278 listEnvironmentSecrets: ["GET /repositories/{repository_id}/environments/{environment_name}/secrets"], 5279 listJobsForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"], 5280 listJobsForWorkflowRunAttempt: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs"], 5281 listLabelsForSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}/labels"], 5282 listLabelsForSelfHostedRunnerForRepo: ["GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"], 5283 listOrgSecrets: ["GET /orgs/{org}/actions/secrets"], 5284 listRepoSecrets: ["GET /repos/{owner}/{repo}/actions/secrets"], 5285 listRepoWorkflows: ["GET /repos/{owner}/{repo}/actions/workflows"], 5286 listRunnerApplicationsForOrg: ["GET /orgs/{org}/actions/runners/downloads"], 5287 listRunnerApplicationsForRepo: ["GET /repos/{owner}/{repo}/actions/runners/downloads"], 5288 listSelectedReposForOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}/repositories"], 5289 listSelectedRepositoriesEnabledGithubActionsOrganization: ["GET /orgs/{org}/actions/permissions/repositories"], 5290 listSelfHostedRunnersForOrg: ["GET /orgs/{org}/actions/runners"], 5291 listSelfHostedRunnersForRepo: ["GET /repos/{owner}/{repo}/actions/runners"], 5292 listWorkflowRunArtifacts: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"], 5293 listWorkflowRuns: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"], 5294 listWorkflowRunsForRepo: ["GET /repos/{owner}/{repo}/actions/runs"], 5295 reRunJobForWorkflowRun: ["POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun"], 5296 reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"], 5297 reRunWorkflowFailedJobs: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs"], 5298 removeAllCustomLabelsFromSelfHostedRunnerForOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}/labels"], 5299 removeAllCustomLabelsFromSelfHostedRunnerForRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"], 5300 removeCustomLabelFromSelfHostedRunnerForOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}"], 5301 removeCustomLabelFromSelfHostedRunnerForRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}"], 5302 removeSelectedRepoFromOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"], 5303 reviewPendingDeploymentsForRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"], 5304 setAllowedActionsOrganization: ["PUT /orgs/{org}/actions/permissions/selected-actions"], 5305 setAllowedActionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"], 5306 setCustomLabelsForSelfHostedRunnerForOrg: ["PUT /orgs/{org}/actions/runners/{runner_id}/labels"], 5307 setCustomLabelsForSelfHostedRunnerForRepo: ["PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"], 5308 setGithubActionsDefaultWorkflowPermissionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/workflow"], 5309 setGithubActionsDefaultWorkflowPermissionsOrganization: ["PUT /orgs/{org}/actions/permissions/workflow"], 5310 setGithubActionsDefaultWorkflowPermissionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/workflow"], 5311 setGithubActionsPermissionsOrganization: ["PUT /orgs/{org}/actions/permissions"], 5312 setGithubActionsPermissionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions"], 5313 setSelectedReposForOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"], 5314 setSelectedRepositoriesEnabledGithubActionsOrganization: ["PUT /orgs/{org}/actions/permissions/repositories"], 5315 setWorkflowAccessToRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/access"] 5316 }, 5317 activity: { 5318 checkRepoIsStarredByAuthenticatedUser: ["GET /user/starred/{owner}/{repo}"], 5319 deleteRepoSubscription: ["DELETE /repos/{owner}/{repo}/subscription"], 5320 deleteThreadSubscription: ["DELETE /notifications/threads/{thread_id}/subscription"], 5321 getFeeds: ["GET /feeds"], 5322 getRepoSubscription: ["GET /repos/{owner}/{repo}/subscription"], 5323 getThread: ["GET /notifications/threads/{thread_id}"], 5324 getThreadSubscriptionForAuthenticatedUser: ["GET /notifications/threads/{thread_id}/subscription"], 5325 listEventsForAuthenticatedUser: ["GET /users/{username}/events"], 5326 listNotificationsForAuthenticatedUser: ["GET /notifications"], 5327 listOrgEventsForAuthenticatedUser: ["GET /users/{username}/events/orgs/{org}"], 5328 listPublicEvents: ["GET /events"], 5329 listPublicEventsForRepoNetwork: ["GET /networks/{owner}/{repo}/events"], 5330 listPublicEventsForUser: ["GET /users/{username}/events/public"], 5331 listPublicOrgEvents: ["GET /orgs/{org}/events"], 5332 listReceivedEventsForUser: ["GET /users/{username}/received_events"], 5333 listReceivedPublicEventsForUser: ["GET /users/{username}/received_events/public"], 5334 listRepoEvents: ["GET /repos/{owner}/{repo}/events"], 5335 listRepoNotificationsForAuthenticatedUser: ["GET /repos/{owner}/{repo}/notifications"], 5336 listReposStarredByAuthenticatedUser: ["GET /user/starred"], 5337 listReposStarredByUser: ["GET /users/{username}/starred"], 5338 listReposWatchedByUser: ["GET /users/{username}/subscriptions"], 5339 listStargazersForRepo: ["GET /repos/{owner}/{repo}/stargazers"], 5340 listWatchedReposForAuthenticatedUser: ["GET /user/subscriptions"], 5341 listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"], 5342 markNotificationsAsRead: ["PUT /notifications"], 5343 markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"], 5344 markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"], 5345 setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"], 5346 setThreadSubscription: ["PUT /notifications/threads/{thread_id}/subscription"], 5347 starRepoForAuthenticatedUser: ["PUT /user/starred/{owner}/{repo}"], 5348 unstarRepoForAuthenticatedUser: ["DELETE /user/starred/{owner}/{repo}"] 5349 }, 5350 apps: { 5351 addRepoToInstallation: ["PUT /user/installations/{installation_id}/repositories/{repository_id}", {}, { 5352 renamed: ["apps", "addRepoToInstallationForAuthenticatedUser"] 5353 }], 5354 addRepoToInstallationForAuthenticatedUser: ["PUT /user/installations/{installation_id}/repositories/{repository_id}"], 5355 checkToken: ["POST /applications/{client_id}/token"], 5356 createFromManifest: ["POST /app-manifests/{code}/conversions"], 5357 createInstallationAccessToken: ["POST /app/installations/{installation_id}/access_tokens"], 5358 deleteAuthorization: ["DELETE /applications/{client_id}/grant"], 5359 deleteInstallation: ["DELETE /app/installations/{installation_id}"], 5360 deleteToken: ["DELETE /applications/{client_id}/token"], 5361 getAuthenticated: ["GET /app"], 5362 getBySlug: ["GET /apps/{app_slug}"], 5363 getInstallation: ["GET /app/installations/{installation_id}"], 5364 getOrgInstallation: ["GET /orgs/{org}/installation"], 5365 getRepoInstallation: ["GET /repos/{owner}/{repo}/installation"], 5366 getSubscriptionPlanForAccount: ["GET /marketplace_listing/accounts/{account_id}"], 5367 getSubscriptionPlanForAccountStubbed: ["GET /marketplace_listing/stubbed/accounts/{account_id}"], 5368 getUserInstallation: ["GET /users/{username}/installation"], 5369 getWebhookConfigForApp: ["GET /app/hook/config"], 5370 getWebhookDelivery: ["GET /app/hook/deliveries/{delivery_id}"], 5371 listAccountsForPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts"], 5372 listAccountsForPlanStubbed: ["GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"], 5373 listInstallationReposForAuthenticatedUser: ["GET /user/installations/{installation_id}/repositories"], 5374 listInstallations: ["GET /app/installations"], 5375 listInstallationsForAuthenticatedUser: ["GET /user/installations"], 5376 listPlans: ["GET /marketplace_listing/plans"], 5377 listPlansStubbed: ["GET /marketplace_listing/stubbed/plans"], 5378 listReposAccessibleToInstallation: ["GET /installation/repositories"], 5379 listSubscriptionsForAuthenticatedUser: ["GET /user/marketplace_purchases"], 5380 listSubscriptionsForAuthenticatedUserStubbed: ["GET /user/marketplace_purchases/stubbed"], 5381 listWebhookDeliveries: ["GET /app/hook/deliveries"], 5382 redeliverWebhookDelivery: ["POST /app/hook/deliveries/{delivery_id}/attempts"], 5383 removeRepoFromInstallation: ["DELETE /user/installations/{installation_id}/repositories/{repository_id}", {}, { 5384 renamed: ["apps", "removeRepoFromInstallationForAuthenticatedUser"] 5385 }], 5386 removeRepoFromInstallationForAuthenticatedUser: ["DELETE /user/installations/{installation_id}/repositories/{repository_id}"], 5387 resetToken: ["PATCH /applications/{client_id}/token"], 5388 revokeInstallationAccessToken: ["DELETE /installation/token"], 5389 scopeToken: ["POST /applications/{client_id}/token/scoped"], 5390 suspendInstallation: ["PUT /app/installations/{installation_id}/suspended"], 5391 unsuspendInstallation: ["DELETE /app/installations/{installation_id}/suspended"], 5392 updateWebhookConfigForApp: ["PATCH /app/hook/config"] 5393 }, 5394 billing: { 5395 getGithubActionsBillingOrg: ["GET /orgs/{org}/settings/billing/actions"], 5396 getGithubActionsBillingUser: ["GET /users/{username}/settings/billing/actions"], 5397 getGithubAdvancedSecurityBillingGhe: ["GET /enterprises/{enterprise}/settings/billing/advanced-security"], 5398 getGithubAdvancedSecurityBillingOrg: ["GET /orgs/{org}/settings/billing/advanced-security"], 5399 getGithubPackagesBillingOrg: ["GET /orgs/{org}/settings/billing/packages"], 5400 getGithubPackagesBillingUser: ["GET /users/{username}/settings/billing/packages"], 5401 getSharedStorageBillingOrg: ["GET /orgs/{org}/settings/billing/shared-storage"], 5402 getSharedStorageBillingUser: ["GET /users/{username}/settings/billing/shared-storage"] 5403 }, 5404 checks: { 5405 create: ["POST /repos/{owner}/{repo}/check-runs"], 5406 createSuite: ["POST /repos/{owner}/{repo}/check-suites"], 5407 get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"], 5408 getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"], 5409 listAnnotations: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations"], 5410 listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"], 5411 listForSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs"], 5412 listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"], 5413 rerequestRun: ["POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest"], 5414 rerequestSuite: ["POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest"], 5415 setSuitesPreferences: ["PATCH /repos/{owner}/{repo}/check-suites/preferences"], 5416 update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"] 5417 }, 5418 codeScanning: { 5419 deleteAnalysis: ["DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}"], 5420 getAlert: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}", {}, { 5421 renamedParameters: { 5422 alert_id: "alert_number" 5423 } 5424 }], 5425 getAnalysis: ["GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}"], 5426 getSarif: ["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"], 5427 listAlertInstances: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances"], 5428 listAlertsForOrg: ["GET /orgs/{org}/code-scanning/alerts"], 5429 listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"], 5430 listAlertsInstances: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", {}, { 5431 renamed: ["codeScanning", "listAlertInstances"] 5432 }], 5433 listRecentAnalyses: ["GET /repos/{owner}/{repo}/code-scanning/analyses"], 5434 updateAlert: ["PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}"], 5435 uploadSarif: ["POST /repos/{owner}/{repo}/code-scanning/sarifs"] 5436 }, 5437 codesOfConduct: { 5438 getAllCodesOfConduct: ["GET /codes_of_conduct"], 5439 getConductCode: ["GET /codes_of_conduct/{key}"] 5440 }, 5441 codespaces: { 5442 addRepositoryForSecretForAuthenticatedUser: ["PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"], 5443 codespaceMachinesForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}/machines"], 5444 createForAuthenticatedUser: ["POST /user/codespaces"], 5445 createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"], 5446 createOrUpdateSecretForAuthenticatedUser: ["PUT /user/codespaces/secrets/{secret_name}"], 5447 createWithPrForAuthenticatedUser: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces"], 5448 createWithRepoForAuthenticatedUser: ["POST /repos/{owner}/{repo}/codespaces"], 5449 deleteForAuthenticatedUser: ["DELETE /user/codespaces/{codespace_name}"], 5450 deleteFromOrganization: ["DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}"], 5451 deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"], 5452 deleteSecretForAuthenticatedUser: ["DELETE /user/codespaces/secrets/{secret_name}"], 5453 exportForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/exports"], 5454 getExportDetailsForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}/exports/{export_id}"], 5455 getForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}"], 5456 getPublicKeyForAuthenticatedUser: ["GET /user/codespaces/secrets/public-key"], 5457 getRepoPublicKey: ["GET /repos/{owner}/{repo}/codespaces/secrets/public-key"], 5458 getRepoSecret: ["GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"], 5459 getSecretForAuthenticatedUser: ["GET /user/codespaces/secrets/{secret_name}"], 5460 listDevcontainersInRepositoryForAuthenticatedUser: ["GET /repos/{owner}/{repo}/codespaces/devcontainers"], 5461 listForAuthenticatedUser: ["GET /user/codespaces"], 5462 listInOrganization: ["GET /orgs/{org}/codespaces", {}, { 5463 renamedParameters: { 5464 org_id: "org" 5465 } 5466 }], 5467 listInRepositoryForAuthenticatedUser: ["GET /repos/{owner}/{repo}/codespaces"], 5468 listRepoSecrets: ["GET /repos/{owner}/{repo}/codespaces/secrets"], 5469 listRepositoriesForSecretForAuthenticatedUser: ["GET /user/codespaces/secrets/{secret_name}/repositories"], 5470 listSecretsForAuthenticatedUser: ["GET /user/codespaces/secrets"], 5471 removeRepositoryForSecretForAuthenticatedUser: ["DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"], 5472 repoMachinesForAuthenticatedUser: ["GET /repos/{owner}/{repo}/codespaces/machines"], 5473 setRepositoriesForSecretForAuthenticatedUser: ["PUT /user/codespaces/secrets/{secret_name}/repositories"], 5474 startForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/start"], 5475 stopForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/stop"], 5476 stopInOrganization: ["POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop"], 5477 updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"] 5478 }, 5479 dependabot: { 5480 addSelectedRepoToOrgSecret: ["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"], 5481 createOrUpdateOrgSecret: ["PUT /orgs/{org}/dependabot/secrets/{secret_name}"], 5482 createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"], 5483 deleteOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"], 5484 deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"], 5485 getOrgPublicKey: ["GET /orgs/{org}/dependabot/secrets/public-key"], 5486 getOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}"], 5487 getRepoPublicKey: ["GET /repos/{owner}/{repo}/dependabot/secrets/public-key"], 5488 getRepoSecret: ["GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"], 5489 listOrgSecrets: ["GET /orgs/{org}/dependabot/secrets"], 5490 listRepoSecrets: ["GET /repos/{owner}/{repo}/dependabot/secrets"], 5491 listSelectedReposForOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories"], 5492 removeSelectedRepoFromOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"], 5493 setSelectedReposForOrgSecret: ["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories"] 5494 }, 5495 dependencyGraph: { 5496 createRepositorySnapshot: ["POST /repos/{owner}/{repo}/dependency-graph/snapshots"], 5497 diffRange: ["GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}"] 5498 }, 5499 emojis: { 5500 get: ["GET /emojis"] 5501 }, 5502 enterpriseAdmin: { 5503 addCustomLabelsToSelfHostedRunnerForEnterprise: ["POST /enterprises/{enterprise}/actions/runners/{runner_id}/labels"], 5504 disableSelectedOrganizationGithubActionsEnterprise: ["DELETE /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"], 5505 enableSelectedOrganizationGithubActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"], 5506 getAllowedActionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/selected-actions"], 5507 getGithubActionsPermissionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions"], 5508 getServerStatistics: ["GET /enterprise-installation/{enterprise_or_org}/server-statistics"], 5509 listLabelsForSelfHostedRunnerForEnterprise: ["GET /enterprises/{enterprise}/actions/runners/{runner_id}/labels"], 5510 listSelectedOrganizationsEnabledGithubActionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/organizations"], 5511 removeAllCustomLabelsFromSelfHostedRunnerForEnterprise: ["DELETE /enterprises/{enterprise}/actions/runners/{runner_id}/labels"], 5512 removeCustomLabelFromSelfHostedRunnerForEnterprise: ["DELETE /enterprises/{enterprise}/actions/runners/{runner_id}/labels/{name}"], 5513 setAllowedActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/selected-actions"], 5514 setCustomLabelsForSelfHostedRunnerForEnterprise: ["PUT /enterprises/{enterprise}/actions/runners/{runner_id}/labels"], 5515 setGithubActionsPermissionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions"], 5516 setSelectedOrganizationsEnabledGithubActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/organizations"] 5517 }, 5518 gists: { 5519 checkIsStarred: ["GET /gists/{gist_id}/star"], 5520 create: ["POST /gists"], 5521 createComment: ["POST /gists/{gist_id}/comments"], 5522 delete: ["DELETE /gists/{gist_id}"], 5523 deleteComment: ["DELETE /gists/{gist_id}/comments/{comment_id}"], 5524 fork: ["POST /gists/{gist_id}/forks"], 5525 get: ["GET /gists/{gist_id}"], 5526 getComment: ["GET /gists/{gist_id}/comments/{comment_id}"], 5527 getRevision: ["GET /gists/{gist_id}/{sha}"], 5528 list: ["GET /gists"], 5529 listComments: ["GET /gists/{gist_id}/comments"], 5530 listCommits: ["GET /gists/{gist_id}/commits"], 5531 listForUser: ["GET /users/{username}/gists"], 5532 listForks: ["GET /gists/{gist_id}/forks"], 5533 listPublic: ["GET /gists/public"], 5534 listStarred: ["GET /gists/starred"], 5535 star: ["PUT /gists/{gist_id}/star"], 5536 unstar: ["DELETE /gists/{gist_id}/star"], 5537 update: ["PATCH /gists/{gist_id}"], 5538 updateComment: ["PATCH /gists/{gist_id}/comments/{comment_id}"] 5539 }, 5540 git: { 5541 createBlob: ["POST /repos/{owner}/{repo}/git/blobs"], 5542 createCommit: ["POST /repos/{owner}/{repo}/git/commits"], 5543 createRef: ["POST /repos/{owner}/{repo}/git/refs"], 5544 createTag: ["POST /repos/{owner}/{repo}/git/tags"], 5545 createTree: ["POST /repos/{owner}/{repo}/git/trees"], 5546 deleteRef: ["DELETE /repos/{owner}/{repo}/git/refs/{ref}"], 5547 getBlob: ["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"], 5548 getCommit: ["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"], 5549 getRef: ["GET /repos/{owner}/{repo}/git/ref/{ref}"], 5550 getTag: ["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"], 5551 getTree: ["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"], 5552 listMatchingRefs: ["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"], 5553 updateRef: ["PATCH /repos/{owner}/{repo}/git/refs/{ref}"] 5554 }, 5555 gitignore: { 5556 getAllTemplates: ["GET /gitignore/templates"], 5557 getTemplate: ["GET /gitignore/templates/{name}"] 5558 }, 5559 interactions: { 5560 getRestrictionsForAuthenticatedUser: ["GET /user/interaction-limits"], 5561 getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits"], 5562 getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits"], 5563 getRestrictionsForYourPublicRepos: ["GET /user/interaction-limits", {}, { 5564 renamed: ["interactions", "getRestrictionsForAuthenticatedUser"] 5565 }], 5566 removeRestrictionsForAuthenticatedUser: ["DELETE /user/interaction-limits"], 5567 removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits"], 5568 removeRestrictionsForRepo: ["DELETE /repos/{owner}/{repo}/interaction-limits"], 5569 removeRestrictionsForYourPublicRepos: ["DELETE /user/interaction-limits", {}, { 5570 renamed: ["interactions", "removeRestrictionsForAuthenticatedUser"] 5571 }], 5572 setRestrictionsForAuthenticatedUser: ["PUT /user/interaction-limits"], 5573 setRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits"], 5574 setRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits"], 5575 setRestrictionsForYourPublicRepos: ["PUT /user/interaction-limits", {}, { 5576 renamed: ["interactions", "setRestrictionsForAuthenticatedUser"] 5577 }] 5578 }, 5579 issues: { 5580 addAssignees: ["POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"], 5581 addLabels: ["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"], 5582 checkUserCanBeAssigned: ["GET /repos/{owner}/{repo}/assignees/{assignee}"], 5583 create: ["POST /repos/{owner}/{repo}/issues"], 5584 createComment: ["POST /repos/{owner}/{repo}/issues/{issue_number}/comments"], 5585 createLabel: ["POST /repos/{owner}/{repo}/labels"], 5586 createMilestone: ["POST /repos/{owner}/{repo}/milestones"], 5587 deleteComment: ["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}"], 5588 deleteLabel: ["DELETE /repos/{owner}/{repo}/labels/{name}"], 5589 deleteMilestone: ["DELETE /repos/{owner}/{repo}/milestones/{milestone_number}"], 5590 get: ["GET /repos/{owner}/{repo}/issues/{issue_number}"], 5591 getComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"], 5592 getEvent: ["GET /repos/{owner}/{repo}/issues/events/{event_id}"], 5593 getLabel: ["GET /repos/{owner}/{repo}/labels/{name}"], 5594 getMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}"], 5595 list: ["GET /issues"], 5596 listAssignees: ["GET /repos/{owner}/{repo}/assignees"], 5597 listComments: ["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"], 5598 listCommentsForRepo: ["GET /repos/{owner}/{repo}/issues/comments"], 5599 listEvents: ["GET /repos/{owner}/{repo}/issues/{issue_number}/events"], 5600 listEventsForRepo: ["GET /repos/{owner}/{repo}/issues/events"], 5601 listEventsForTimeline: ["GET /repos/{owner}/{repo}/issues/{issue_number}/timeline"], 5602 listForAuthenticatedUser: ["GET /user/issues"], 5603 listForOrg: ["GET /orgs/{org}/issues"], 5604 listForRepo: ["GET /repos/{owner}/{repo}/issues"], 5605 listLabelsForMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"], 5606 listLabelsForRepo: ["GET /repos/{owner}/{repo}/labels"], 5607 listLabelsOnIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/labels"], 5608 listMilestones: ["GET /repos/{owner}/{repo}/milestones"], 5609 lock: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"], 5610 removeAllLabels: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"], 5611 removeAssignees: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"], 5612 removeLabel: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"], 5613 setLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"], 5614 unlock: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"], 5615 update: ["PATCH /repos/{owner}/{repo}/issues/{issue_number}"], 5616 updateComment: ["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"], 5617 updateLabel: ["PATCH /repos/{owner}/{repo}/labels/{name}"], 5618 updateMilestone: ["PATCH /repos/{owner}/{repo}/milestones/{milestone_number}"] 5619 }, 5620 licenses: { 5621 get: ["GET /licenses/{license}"], 5622 getAllCommonlyUsed: ["GET /licenses"], 5623 getForRepo: ["GET /repos/{owner}/{repo}/license"] 5624 }, 5625 markdown: { 5626 render: ["POST /markdown"], 5627 renderRaw: ["POST /markdown/raw", { 5628 headers: { 5629 "content-type": "text/plain; charset=utf-8" 5630 } 5631 }] 5632 }, 5633 meta: { 5634 get: ["GET /meta"], 5635 getOctocat: ["GET /octocat"], 5636 getZen: ["GET /zen"], 5637 root: ["GET /"] 5638 }, 5639 migrations: { 5640 cancelImport: ["DELETE /repos/{owner}/{repo}/import"], 5641 deleteArchiveForAuthenticatedUser: ["DELETE /user/migrations/{migration_id}/archive"], 5642 deleteArchiveForOrg: ["DELETE /orgs/{org}/migrations/{migration_id}/archive"], 5643 downloadArchiveForOrg: ["GET /orgs/{org}/migrations/{migration_id}/archive"], 5644 getArchiveForAuthenticatedUser: ["GET /user/migrations/{migration_id}/archive"], 5645 getCommitAuthors: ["GET /repos/{owner}/{repo}/import/authors"], 5646 getImportStatus: ["GET /repos/{owner}/{repo}/import"], 5647 getLargeFiles: ["GET /repos/{owner}/{repo}/import/large_files"], 5648 getStatusForAuthenticatedUser: ["GET /user/migrations/{migration_id}"], 5649 getStatusForOrg: ["GET /orgs/{org}/migrations/{migration_id}"], 5650 listForAuthenticatedUser: ["GET /user/migrations"], 5651 listForOrg: ["GET /orgs/{org}/migrations"], 5652 listReposForAuthenticatedUser: ["GET /user/migrations/{migration_id}/repositories"], 5653 listReposForOrg: ["GET /orgs/{org}/migrations/{migration_id}/repositories"], 5654 listReposForUser: ["GET /user/migrations/{migration_id}/repositories", {}, { 5655 renamed: ["migrations", "listReposForAuthenticatedUser"] 5656 }], 5657 mapCommitAuthor: ["PATCH /repos/{owner}/{repo}/import/authors/{author_id}"], 5658 setLfsPreference: ["PATCH /repos/{owner}/{repo}/import/lfs"], 5659 startForAuthenticatedUser: ["POST /user/migrations"], 5660 startForOrg: ["POST /orgs/{org}/migrations"], 5661 startImport: ["PUT /repos/{owner}/{repo}/import"], 5662 unlockRepoForAuthenticatedUser: ["DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock"], 5663 unlockRepoForOrg: ["DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock"], 5664 updateImport: ["PATCH /repos/{owner}/{repo}/import"] 5665 }, 5666 orgs: { 5667 blockUser: ["PUT /orgs/{org}/blocks/{username}"], 5668 cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"], 5669 checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"], 5670 checkMembershipForUser: ["GET /orgs/{org}/members/{username}"], 5671 checkPublicMembershipForUser: ["GET /orgs/{org}/public_members/{username}"], 5672 convertMemberToOutsideCollaborator: ["PUT /orgs/{org}/outside_collaborators/{username}"], 5673 createInvitation: ["POST /orgs/{org}/invitations"], 5674 createWebhook: ["POST /orgs/{org}/hooks"], 5675 deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"], 5676 get: ["GET /orgs/{org}"], 5677 getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"], 5678 getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"], 5679 getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"], 5680 getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"], 5681 getWebhookDelivery: ["GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}"], 5682 list: ["GET /organizations"], 5683 listAppInstallations: ["GET /orgs/{org}/installations"], 5684 listBlockedUsers: ["GET /orgs/{org}/blocks"], 5685 listCustomRoles: ["GET /organizations/{organization_id}/custom_roles"], 5686 listFailedInvitations: ["GET /orgs/{org}/failed_invitations"], 5687 listForAuthenticatedUser: ["GET /user/orgs"], 5688 listForUser: ["GET /users/{username}/orgs"], 5689 listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"], 5690 listMembers: ["GET /orgs/{org}/members"], 5691 listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"], 5692 listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"], 5693 listPendingInvitations: ["GET /orgs/{org}/invitations"], 5694 listPublicMembers: ["GET /orgs/{org}/public_members"], 5695 listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"], 5696 listWebhooks: ["GET /orgs/{org}/hooks"], 5697 pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"], 5698 redeliverWebhookDelivery: ["POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"], 5699 removeMember: ["DELETE /orgs/{org}/members/{username}"], 5700 removeMembershipForUser: ["DELETE /orgs/{org}/memberships/{username}"], 5701 removeOutsideCollaborator: ["DELETE /orgs/{org}/outside_collaborators/{username}"], 5702 removePublicMembershipForAuthenticatedUser: ["DELETE /orgs/{org}/public_members/{username}"], 5703 setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"], 5704 setPublicMembershipForAuthenticatedUser: ["PUT /orgs/{org}/public_members/{username}"], 5705 unblockUser: ["DELETE /orgs/{org}/blocks/{username}"], 5706 update: ["PATCH /orgs/{org}"], 5707 updateMembershipForAuthenticatedUser: ["PATCH /user/memberships/orgs/{org}"], 5708 updateWebhook: ["PATCH /orgs/{org}/hooks/{hook_id}"], 5709 updateWebhookConfigForOrg: ["PATCH /orgs/{org}/hooks/{hook_id}/config"] 5710 }, 5711 packages: { 5712 deletePackageForAuthenticatedUser: ["DELETE /user/packages/{package_type}/{package_name}"], 5713 deletePackageForOrg: ["DELETE /orgs/{org}/packages/{package_type}/{package_name}"], 5714 deletePackageForUser: ["DELETE /users/{username}/packages/{package_type}/{package_name}"], 5715 deletePackageVersionForAuthenticatedUser: ["DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}"], 5716 deletePackageVersionForOrg: ["DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"], 5717 deletePackageVersionForUser: ["DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"], 5718 getAllPackageVersionsForAPackageOwnedByAnOrg: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions", {}, { 5719 renamed: ["packages", "getAllPackageVersionsForPackageOwnedByOrg"] 5720 }], 5721 getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions", {}, { 5722 renamed: ["packages", "getAllPackageVersionsForPackageOwnedByAuthenticatedUser"] 5723 }], 5724 getAllPackageVersionsForPackageOwnedByAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions"], 5725 getAllPackageVersionsForPackageOwnedByOrg: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions"], 5726 getAllPackageVersionsForPackageOwnedByUser: ["GET /users/{username}/packages/{package_type}/{package_name}/versions"], 5727 getPackageForAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}"], 5728 getPackageForOrganization: ["GET /orgs/{org}/packages/{package_type}/{package_name}"], 5729 getPackageForUser: ["GET /users/{username}/packages/{package_type}/{package_name}"], 5730 getPackageVersionForAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}"], 5731 getPackageVersionForOrganization: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"], 5732 getPackageVersionForUser: ["GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"], 5733 listPackagesForAuthenticatedUser: ["GET /user/packages"], 5734 listPackagesForOrganization: ["GET /orgs/{org}/packages"], 5735 listPackagesForUser: ["GET /users/{username}/packages"], 5736 restorePackageForAuthenticatedUser: ["POST /user/packages/{package_type}/{package_name}/restore{?token}"], 5737 restorePackageForOrg: ["POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}"], 5738 restorePackageForUser: ["POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}"], 5739 restorePackageVersionForAuthenticatedUser: ["POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"], 5740 restorePackageVersionForOrg: ["POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"], 5741 restorePackageVersionForUser: ["POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"] 5742 }, 5743 projects: { 5744 addCollaborator: ["PUT /projects/{project_id}/collaborators/{username}"], 5745 createCard: ["POST /projects/columns/{column_id}/cards"], 5746 createColumn: ["POST /projects/{project_id}/columns"], 5747 createForAuthenticatedUser: ["POST /user/projects"], 5748 createForOrg: ["POST /orgs/{org}/projects"], 5749 createForRepo: ["POST /repos/{owner}/{repo}/projects"], 5750 delete: ["DELETE /projects/{project_id}"], 5751 deleteCard: ["DELETE /projects/columns/cards/{card_id}"], 5752 deleteColumn: ["DELETE /projects/columns/{column_id}"], 5753 get: ["GET /projects/{project_id}"], 5754 getCard: ["GET /projects/columns/cards/{card_id}"], 5755 getColumn: ["GET /projects/columns/{column_id}"], 5756 getPermissionForUser: ["GET /projects/{project_id}/collaborators/{username}/permission"], 5757 listCards: ["GET /projects/columns/{column_id}/cards"], 5758 listCollaborators: ["GET /projects/{project_id}/collaborators"], 5759 listColumns: ["GET /projects/{project_id}/columns"], 5760 listForOrg: ["GET /orgs/{org}/projects"], 5761 listForRepo: ["GET /repos/{owner}/{repo}/projects"], 5762 listForUser: ["GET /users/{username}/projects"], 5763 moveCard: ["POST /projects/columns/cards/{card_id}/moves"], 5764 moveColumn: ["POST /projects/columns/{column_id}/moves"], 5765 removeCollaborator: ["DELETE /projects/{project_id}/collaborators/{username}"], 5766 update: ["PATCH /projects/{project_id}"], 5767 updateCard: ["PATCH /projects/columns/cards/{card_id}"], 5768 updateColumn: ["PATCH /projects/columns/{column_id}"] 5769 }, 5770 pulls: { 5771 checkIfMerged: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"], 5772 create: ["POST /repos/{owner}/{repo}/pulls"], 5773 createReplyForReviewComment: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies"], 5774 createReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"], 5775 createReviewComment: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments"], 5776 deletePendingReview: ["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"], 5777 deleteReviewComment: ["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}"], 5778 dismissReview: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals"], 5779 get: ["GET /repos/{owner}/{repo}/pulls/{pull_number}"], 5780 getReview: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"], 5781 getReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"], 5782 list: ["GET /repos/{owner}/{repo}/pulls"], 5783 listCommentsForReview: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments"], 5784 listCommits: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"], 5785 listFiles: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"], 5786 listRequestedReviewers: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"], 5787 listReviewComments: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"], 5788 listReviewCommentsForRepo: ["GET /repos/{owner}/{repo}/pulls/comments"], 5789 listReviews: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"], 5790 merge: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"], 5791 removeRequestedReviewers: ["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"], 5792 requestReviewers: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"], 5793 submitReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events"], 5794 update: ["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"], 5795 updateBranch: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch"], 5796 updateReview: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"], 5797 updateReviewComment: ["PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}"] 5798 }, 5799 rateLimit: { 5800 get: ["GET /rate_limit"] 5801 }, 5802 reactions: { 5803 createForCommitComment: ["POST /repos/{owner}/{repo}/comments/{comment_id}/reactions"], 5804 createForIssue: ["POST /repos/{owner}/{repo}/issues/{issue_number}/reactions"], 5805 createForIssueComment: ["POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"], 5806 createForPullRequestReviewComment: ["POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"], 5807 createForRelease: ["POST /repos/{owner}/{repo}/releases/{release_id}/reactions"], 5808 createForTeamDiscussionCommentInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"], 5809 createForTeamDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"], 5810 deleteForCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}"], 5811 deleteForIssue: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}"], 5812 deleteForIssueComment: ["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}"], 5813 deleteForPullRequestComment: ["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}"], 5814 deleteForRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}"], 5815 deleteForTeamDiscussion: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}"], 5816 deleteForTeamDiscussionComment: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}"], 5817 listForCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}/reactions"], 5818 listForIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"], 5819 listForIssueComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"], 5820 listForPullRequestReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"], 5821 listForRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}/reactions"], 5822 listForTeamDiscussionCommentInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"], 5823 listForTeamDiscussionInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"] 5824 }, 5825 repos: { 5826 acceptInvitation: ["PATCH /user/repository_invitations/{invitation_id}", {}, { 5827 renamed: ["repos", "acceptInvitationForAuthenticatedUser"] 5828 }], 5829 acceptInvitationForAuthenticatedUser: ["PATCH /user/repository_invitations/{invitation_id}"], 5830 addAppAccessRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, { 5831 mapToData: "apps" 5832 }], 5833 addCollaborator: ["PUT /repos/{owner}/{repo}/collaborators/{username}"], 5834 addStatusCheckContexts: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, { 5835 mapToData: "contexts" 5836 }], 5837 addTeamAccessRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, { 5838 mapToData: "teams" 5839 }], 5840 addUserAccessRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, { 5841 mapToData: "users" 5842 }], 5843 checkCollaborator: ["GET /repos/{owner}/{repo}/collaborators/{username}"], 5844 checkVulnerabilityAlerts: ["GET /repos/{owner}/{repo}/vulnerability-alerts"], 5845 codeownersErrors: ["GET /repos/{owner}/{repo}/codeowners/errors"], 5846 compareCommits: ["GET /repos/{owner}/{repo}/compare/{base}...{head}"], 5847 compareCommitsWithBasehead: ["GET /repos/{owner}/{repo}/compare/{basehead}"], 5848 createAutolink: ["POST /repos/{owner}/{repo}/autolinks"], 5849 createCommitComment: ["POST /repos/{owner}/{repo}/commits/{commit_sha}/comments"], 5850 createCommitSignatureProtection: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"], 5851 createCommitStatus: ["POST /repos/{owner}/{repo}/statuses/{sha}"], 5852 createDeployKey: ["POST /repos/{owner}/{repo}/keys"], 5853 createDeployment: ["POST /repos/{owner}/{repo}/deployments"], 5854 createDeploymentStatus: ["POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"], 5855 createDispatchEvent: ["POST /repos/{owner}/{repo}/dispatches"], 5856 createForAuthenticatedUser: ["POST /user/repos"], 5857 createFork: ["POST /repos/{owner}/{repo}/forks"], 5858 createInOrg: ["POST /orgs/{org}/repos"], 5859 createOrUpdateEnvironment: ["PUT /repos/{owner}/{repo}/environments/{environment_name}"], 5860 createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"], 5861 createPagesSite: ["POST /repos/{owner}/{repo}/pages"], 5862 createRelease: ["POST /repos/{owner}/{repo}/releases"], 5863 createTagProtection: ["POST /repos/{owner}/{repo}/tags/protection"], 5864 createUsingTemplate: ["POST /repos/{template_owner}/{template_repo}/generate"], 5865 createWebhook: ["POST /repos/{owner}/{repo}/hooks"], 5866 declineInvitation: ["DELETE /user/repository_invitations/{invitation_id}", {}, { 5867 renamed: ["repos", "declineInvitationForAuthenticatedUser"] 5868 }], 5869 declineInvitationForAuthenticatedUser: ["DELETE /user/repository_invitations/{invitation_id}"], 5870 delete: ["DELETE /repos/{owner}/{repo}"], 5871 deleteAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"], 5872 deleteAdminBranchProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"], 5873 deleteAnEnvironment: ["DELETE /repos/{owner}/{repo}/environments/{environment_name}"], 5874 deleteAutolink: ["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"], 5875 deleteBranchProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection"], 5876 deleteCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}"], 5877 deleteCommitSignatureProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"], 5878 deleteDeployKey: ["DELETE /repos/{owner}/{repo}/keys/{key_id}"], 5879 deleteDeployment: ["DELETE /repos/{owner}/{repo}/deployments/{deployment_id}"], 5880 deleteFile: ["DELETE /repos/{owner}/{repo}/contents/{path}"], 5881 deleteInvitation: ["DELETE /repos/{owner}/{repo}/invitations/{invitation_id}"], 5882 deletePagesSite: ["DELETE /repos/{owner}/{repo}/pages"], 5883 deletePullRequestReviewProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"], 5884 deleteRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}"], 5885 deleteReleaseAsset: ["DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}"], 5886 deleteTagProtection: ["DELETE /repos/{owner}/{repo}/tags/protection/{tag_protection_id}"], 5887 deleteWebhook: ["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"], 5888 disableAutomatedSecurityFixes: ["DELETE /repos/{owner}/{repo}/automated-security-fixes"], 5889 disableLfsForRepo: ["DELETE /repos/{owner}/{repo}/lfs"], 5890 disableVulnerabilityAlerts: ["DELETE /repos/{owner}/{repo}/vulnerability-alerts"], 5891 downloadArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}", {}, { 5892 renamed: ["repos", "downloadZipballArchive"] 5893 }], 5894 downloadTarballArchive: ["GET /repos/{owner}/{repo}/tarball/{ref}"], 5895 downloadZipballArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}"], 5896 enableAutomatedSecurityFixes: ["PUT /repos/{owner}/{repo}/automated-security-fixes"], 5897 enableLfsForRepo: ["PUT /repos/{owner}/{repo}/lfs"], 5898 enableVulnerabilityAlerts: ["PUT /repos/{owner}/{repo}/vulnerability-alerts"], 5899 generateReleaseNotes: ["POST /repos/{owner}/{repo}/releases/generate-notes"], 5900 get: ["GET /repos/{owner}/{repo}"], 5901 getAccessRestrictions: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"], 5902 getAdminBranchProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"], 5903 getAllEnvironments: ["GET /repos/{owner}/{repo}/environments"], 5904 getAllStatusCheckContexts: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts"], 5905 getAllTopics: ["GET /repos/{owner}/{repo}/topics"], 5906 getAppsWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps"], 5907 getAutolink: ["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"], 5908 getBranch: ["GET /repos/{owner}/{repo}/branches/{branch}"], 5909 getBranchProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection"], 5910 getClones: ["GET /repos/{owner}/{repo}/traffic/clones"], 5911 getCodeFrequencyStats: ["GET /repos/{owner}/{repo}/stats/code_frequency"], 5912 getCollaboratorPermissionLevel: ["GET /repos/{owner}/{repo}/collaborators/{username}/permission"], 5913 getCombinedStatusForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/status"], 5914 getCommit: ["GET /repos/{owner}/{repo}/commits/{ref}"], 5915 getCommitActivityStats: ["GET /repos/{owner}/{repo}/stats/commit_activity"], 5916 getCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}"], 5917 getCommitSignatureProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"], 5918 getCommunityProfileMetrics: ["GET /repos/{owner}/{repo}/community/profile"], 5919 getContent: ["GET /repos/{owner}/{repo}/contents/{path}"], 5920 getContributorsStats: ["GET /repos/{owner}/{repo}/stats/contributors"], 5921 getDeployKey: ["GET /repos/{owner}/{repo}/keys/{key_id}"], 5922 getDeployment: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}"], 5923 getDeploymentStatus: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}"], 5924 getEnvironment: ["GET /repos/{owner}/{repo}/environments/{environment_name}"], 5925 getLatestPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/latest"], 5926 getLatestRelease: ["GET /repos/{owner}/{repo}/releases/latest"], 5927 getPages: ["GET /repos/{owner}/{repo}/pages"], 5928 getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"], 5929 getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"], 5930 getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"], 5931 getPullRequestReviewProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"], 5932 getPunchCardStats: ["GET /repos/{owner}/{repo}/stats/punch_card"], 5933 getReadme: ["GET /repos/{owner}/{repo}/readme"], 5934 getReadmeInDirectory: ["GET /repos/{owner}/{repo}/readme/{dir}"], 5935 getRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}"], 5936 getReleaseAsset: ["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"], 5937 getReleaseByTag: ["GET /repos/{owner}/{repo}/releases/tags/{tag}"], 5938 getStatusChecksProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"], 5939 getTeamsWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams"], 5940 getTopPaths: ["GET /repos/{owner}/{repo}/traffic/popular/paths"], 5941 getTopReferrers: ["GET /repos/{owner}/{repo}/traffic/popular/referrers"], 5942 getUsersWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users"], 5943 getViews: ["GET /repos/{owner}/{repo}/traffic/views"], 5944 getWebhook: ["GET /repos/{owner}/{repo}/hooks/{hook_id}"], 5945 getWebhookConfigForRepo: ["GET /repos/{owner}/{repo}/hooks/{hook_id}/config"], 5946 getWebhookDelivery: ["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}"], 5947 listAutolinks: ["GET /repos/{owner}/{repo}/autolinks"], 5948 listBranches: ["GET /repos/{owner}/{repo}/branches"], 5949 listBranchesForHeadCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head"], 5950 listCollaborators: ["GET /repos/{owner}/{repo}/collaborators"], 5951 listCommentsForCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/comments"], 5952 listCommitCommentsForRepo: ["GET /repos/{owner}/{repo}/comments"], 5953 listCommitStatusesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/statuses"], 5954 listCommits: ["GET /repos/{owner}/{repo}/commits"], 5955 listContributors: ["GET /repos/{owner}/{repo}/contributors"], 5956 listDeployKeys: ["GET /repos/{owner}/{repo}/keys"], 5957 listDeploymentStatuses: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"], 5958 listDeployments: ["GET /repos/{owner}/{repo}/deployments"], 5959 listForAuthenticatedUser: ["GET /user/repos"], 5960 listForOrg: ["GET /orgs/{org}/repos"], 5961 listForUser: ["GET /users/{username}/repos"], 5962 listForks: ["GET /repos/{owner}/{repo}/forks"], 5963 listInvitations: ["GET /repos/{owner}/{repo}/invitations"], 5964 listInvitationsForAuthenticatedUser: ["GET /user/repository_invitations"], 5965 listLanguages: ["GET /repos/{owner}/{repo}/languages"], 5966 listPagesBuilds: ["GET /repos/{owner}/{repo}/pages/builds"], 5967 listPublic: ["GET /repositories"], 5968 listPullRequestsAssociatedWithCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls"], 5969 listReleaseAssets: ["GET /repos/{owner}/{repo}/releases/{release_id}/assets"], 5970 listReleases: ["GET /repos/{owner}/{repo}/releases"], 5971 listTagProtection: ["GET /repos/{owner}/{repo}/tags/protection"], 5972 listTags: ["GET /repos/{owner}/{repo}/tags"], 5973 listTeams: ["GET /repos/{owner}/{repo}/teams"], 5974 listWebhookDeliveries: ["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries"], 5975 listWebhooks: ["GET /repos/{owner}/{repo}/hooks"], 5976 merge: ["POST /repos/{owner}/{repo}/merges"], 5977 mergeUpstream: ["POST /repos/{owner}/{repo}/merge-upstream"], 5978 pingWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"], 5979 redeliverWebhookDelivery: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"], 5980 removeAppAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, { 5981 mapToData: "apps" 5982 }], 5983 removeCollaborator: ["DELETE /repos/{owner}/{repo}/collaborators/{username}"], 5984 removeStatusCheckContexts: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, { 5985 mapToData: "contexts" 5986 }], 5987 removeStatusCheckProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"], 5988 removeTeamAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, { 5989 mapToData: "teams" 5990 }], 5991 removeUserAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, { 5992 mapToData: "users" 5993 }], 5994 renameBranch: ["POST /repos/{owner}/{repo}/branches/{branch}/rename"], 5995 replaceAllTopics: ["PUT /repos/{owner}/{repo}/topics"], 5996 requestPagesBuild: ["POST /repos/{owner}/{repo}/pages/builds"], 5997 setAdminBranchProtection: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"], 5998 setAppAccessRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, { 5999 mapToData: "apps" 6000 }], 6001 setStatusCheckContexts: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, { 6002 mapToData: "contexts" 6003 }], 6004 setTeamAccessRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, { 6005 mapToData: "teams" 6006 }], 6007 setUserAccessRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, { 6008 mapToData: "users" 6009 }], 6010 testPushWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"], 6011 transfer: ["POST /repos/{owner}/{repo}/transfer"], 6012 update: ["PATCH /repos/{owner}/{repo}"], 6013 updateBranchProtection: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection"], 6014 updateCommitComment: ["PATCH /repos/{owner}/{repo}/comments/{comment_id}"], 6015 updateInformationAboutPagesSite: ["PUT /repos/{owner}/{repo}/pages"], 6016 updateInvitation: ["PATCH /repos/{owner}/{repo}/invitations/{invitation_id}"], 6017 updatePullRequestReviewProtection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"], 6018 updateRelease: ["PATCH /repos/{owner}/{repo}/releases/{release_id}"], 6019 updateReleaseAsset: ["PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}"], 6020 updateStatusCheckPotection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks", {}, { 6021 renamed: ["repos", "updateStatusCheckProtection"] 6022 }], 6023 updateStatusCheckProtection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"], 6024 updateWebhook: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"], 6025 updateWebhookConfigForRepo: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config"], 6026 uploadReleaseAsset: ["POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}", { 6027 baseUrl: "https://uploads.github.com" 6028 }] 6029 }, 6030 search: { 6031 code: ["GET /search/code"], 6032 commits: ["GET /search/commits"], 6033 issuesAndPullRequests: ["GET /search/issues"], 6034 labels: ["GET /search/labels"], 6035 repos: ["GET /search/repositories"], 6036 topics: ["GET /search/topics"], 6037 users: ["GET /search/users"] 6038 }, 6039 secretScanning: { 6040 getAlert: ["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"], 6041 listAlertsForEnterprise: ["GET /enterprises/{enterprise}/secret-scanning/alerts"], 6042 listAlertsForOrg: ["GET /orgs/{org}/secret-scanning/alerts"], 6043 listAlertsForRepo: ["GET /repos/{owner}/{repo}/secret-scanning/alerts"], 6044 listLocationsForAlert: ["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations"], 6045 updateAlert: ["PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"] 6046 }, 6047 teams: { 6048 addOrUpdateMembershipForUserInOrg: ["PUT /orgs/{org}/teams/{team_slug}/memberships/{username}"], 6049 addOrUpdateProjectPermissionsInOrg: ["PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}"], 6050 addOrUpdateRepoPermissionsInOrg: ["PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"], 6051 checkPermissionsForProjectInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects/{project_id}"], 6052 checkPermissionsForRepoInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"], 6053 create: ["POST /orgs/{org}/teams"], 6054 createDiscussionCommentInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"], 6055 createDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions"], 6056 deleteDiscussionCommentInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"], 6057 deleteDiscussionInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"], 6058 deleteInOrg: ["DELETE /orgs/{org}/teams/{team_slug}"], 6059 getByName: ["GET /orgs/{org}/teams/{team_slug}"], 6060 getDiscussionCommentInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"], 6061 getDiscussionInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"], 6062 getMembershipForUserInOrg: ["GET /orgs/{org}/teams/{team_slug}/memberships/{username}"], 6063 list: ["GET /orgs/{org}/teams"], 6064 listChildInOrg: ["GET /orgs/{org}/teams/{team_slug}/teams"], 6065 listDiscussionCommentsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"], 6066 listDiscussionsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions"], 6067 listForAuthenticatedUser: ["GET /user/teams"], 6068 listMembersInOrg: ["GET /orgs/{org}/teams/{team_slug}/members"], 6069 listPendingInvitationsInOrg: ["GET /orgs/{org}/teams/{team_slug}/invitations"], 6070 listProjectsInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects"], 6071 listReposInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos"], 6072 removeMembershipForUserInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}"], 6073 removeProjectInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}"], 6074 removeRepoInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"], 6075 updateDiscussionCommentInOrg: ["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"], 6076 updateDiscussionInOrg: ["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"], 6077 updateInOrg: ["PATCH /orgs/{org}/teams/{team_slug}"] 6078 }, 6079 users: { 6080 addEmailForAuthenticated: ["POST /user/emails", {}, { 6081 renamed: ["users", "addEmailForAuthenticatedUser"] 6082 }], 6083 addEmailForAuthenticatedUser: ["POST /user/emails"], 6084 block: ["PUT /user/blocks/{username}"], 6085 checkBlocked: ["GET /user/blocks/{username}"], 6086 checkFollowingForUser: ["GET /users/{username}/following/{target_user}"], 6087 checkPersonIsFollowedByAuthenticated: ["GET /user/following/{username}"], 6088 createGpgKeyForAuthenticated: ["POST /user/gpg_keys", {}, { 6089 renamed: ["users", "createGpgKeyForAuthenticatedUser"] 6090 }], 6091 createGpgKeyForAuthenticatedUser: ["POST /user/gpg_keys"], 6092 createPublicSshKeyForAuthenticated: ["POST /user/keys", {}, { 6093 renamed: ["users", "createPublicSshKeyForAuthenticatedUser"] 6094 }], 6095 createPublicSshKeyForAuthenticatedUser: ["POST /user/keys"], 6096 deleteEmailForAuthenticated: ["DELETE /user/emails", {}, { 6097 renamed: ["users", "deleteEmailForAuthenticatedUser"] 6098 }], 6099 deleteEmailForAuthenticatedUser: ["DELETE /user/emails"], 6100 deleteGpgKeyForAuthenticated: ["DELETE /user/gpg_keys/{gpg_key_id}", {}, { 6101 renamed: ["users", "deleteGpgKeyForAuthenticatedUser"] 6102 }], 6103 deleteGpgKeyForAuthenticatedUser: ["DELETE /user/gpg_keys/{gpg_key_id}"], 6104 deletePublicSshKeyForAuthenticated: ["DELETE /user/keys/{key_id}", {}, { 6105 renamed: ["users", "deletePublicSshKeyForAuthenticatedUser"] 6106 }], 6107 deletePublicSshKeyForAuthenticatedUser: ["DELETE /user/keys/{key_id}"], 6108 follow: ["PUT /user/following/{username}"], 6109 getAuthenticated: ["GET /user"], 6110 getByUsername: ["GET /users/{username}"], 6111 getContextForUser: ["GET /users/{username}/hovercard"], 6112 getGpgKeyForAuthenticated: ["GET /user/gpg_keys/{gpg_key_id}", {}, { 6113 renamed: ["users", "getGpgKeyForAuthenticatedUser"] 6114 }], 6115 getGpgKeyForAuthenticatedUser: ["GET /user/gpg_keys/{gpg_key_id}"], 6116 getPublicSshKeyForAuthenticated: ["GET /user/keys/{key_id}", {}, { 6117 renamed: ["users", "getPublicSshKeyForAuthenticatedUser"] 6118 }], 6119 getPublicSshKeyForAuthenticatedUser: ["GET /user/keys/{key_id}"], 6120 list: ["GET /users"], 6121 listBlockedByAuthenticated: ["GET /user/blocks", {}, { 6122 renamed: ["users", "listBlockedByAuthenticatedUser"] 6123 }], 6124 listBlockedByAuthenticatedUser: ["GET /user/blocks"], 6125 listEmailsForAuthenticated: ["GET /user/emails", {}, { 6126 renamed: ["users", "listEmailsForAuthenticatedUser"] 6127 }], 6128 listEmailsForAuthenticatedUser: ["GET /user/emails"], 6129 listFollowedByAuthenticated: ["GET /user/following", {}, { 6130 renamed: ["users", "listFollowedByAuthenticatedUser"] 6131 }], 6132 listFollowedByAuthenticatedUser: ["GET /user/following"], 6133 listFollowersForAuthenticatedUser: ["GET /user/followers"], 6134 listFollowersForUser: ["GET /users/{username}/followers"], 6135 listFollowingForUser: ["GET /users/{username}/following"], 6136 listGpgKeysForAuthenticated: ["GET /user/gpg_keys", {}, { 6137 renamed: ["users", "listGpgKeysForAuthenticatedUser"] 6138 }], 6139 listGpgKeysForAuthenticatedUser: ["GET /user/gpg_keys"], 6140 listGpgKeysForUser: ["GET /users/{username}/gpg_keys"], 6141 listPublicEmailsForAuthenticated: ["GET /user/public_emails", {}, { 6142 renamed: ["users", "listPublicEmailsForAuthenticatedUser"] 6143 }], 6144 listPublicEmailsForAuthenticatedUser: ["GET /user/public_emails"], 6145 listPublicKeysForUser: ["GET /users/{username}/keys"], 6146 listPublicSshKeysForAuthenticated: ["GET /user/keys", {}, { 6147 renamed: ["users", "listPublicSshKeysForAuthenticatedUser"] 6148 }], 6149 listPublicSshKeysForAuthenticatedUser: ["GET /user/keys"], 6150 setPrimaryEmailVisibilityForAuthenticated: ["PATCH /user/email/visibility", {}, { 6151 renamed: ["users", "setPrimaryEmailVisibilityForAuthenticatedUser"] 6152 }], 6153 setPrimaryEmailVisibilityForAuthenticatedUser: ["PATCH /user/email/visibility"], 6154 unblock: ["DELETE /user/blocks/{username}"], 6155 unfollow: ["DELETE /user/following/{username}"], 6156 updateAuthenticated: ["PATCH /user"] 6157 } 6158 }; 6159 6160 const VERSION = "5.16.2"; 6161 6162 function endpointsToMethods(octokit, endpointsMap) { 6163 const newMethods = {}; 6164 6165 for (const [scope, endpoints] of Object.entries(endpointsMap)) { 6166 for (const [methodName, endpoint] of Object.entries(endpoints)) { 6167 const [route, defaults, decorations] = endpoint; 6168 const [method, url] = route.split(/ /); 6169 const endpointDefaults = Object.assign({ 6170 method, 6171 url 6172 }, defaults); 6173 6174 if (!newMethods[scope]) { 6175 newMethods[scope] = {}; 6176 } 6177 6178 const scopeMethods = newMethods[scope]; 6179 6180 if (decorations) { 6181 scopeMethods[methodName] = decorate(octokit, scope, methodName, endpointDefaults, decorations); 6182 continue; 6183 } 6184 6185 scopeMethods[methodName] = octokit.request.defaults(endpointDefaults); 6186 } 6187 } 6188 6189 return newMethods; 6190 } 6191 6192 function decorate(octokit, scope, methodName, defaults, decorations) { 6193 const requestWithDefaults = octokit.request.defaults(defaults); 6194 /* istanbul ignore next */ 6195 6196 function withDecorations(...args) { 6197 // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488 6198 let options = requestWithDefaults.endpoint.merge(...args); // There are currently no other decorations than `.mapToData` 6199 6200 if (decorations.mapToData) { 6201 options = Object.assign({}, options, { 6202 data: options[decorations.mapToData], 6203 [decorations.mapToData]: undefined 6204 }); 6205 return requestWithDefaults(options); 6206 } 6207 6208 if (decorations.renamed) { 6209 const [newScope, newMethodName] = decorations.renamed; 6210 octokit.log.warn(`octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`); 6211 } 6212 6213 if (decorations.deprecated) { 6214 octokit.log.warn(decorations.deprecated); 6215 } 6216 6217 if (decorations.renamedParameters) { 6218 // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488 6219 const options = requestWithDefaults.endpoint.merge(...args); 6220 6221 for (const [name, alias] of Object.entries(decorations.renamedParameters)) { 6222 if (name in options) { 6223 octokit.log.warn(`"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead`); 6224 6225 if (!(alias in options)) { 6226 options[alias] = options[name]; 6227 } 6228 6229 delete options[name]; 6230 } 6231 } 6232 6233 return requestWithDefaults(options); 6234 } // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488 6235 6236 6237 return requestWithDefaults(...args); 6238 } 6239 6240 return Object.assign(withDecorations, requestWithDefaults); 6241 } 6242 6243 function restEndpointMethods(octokit) { 6244 const api = endpointsToMethods(octokit, Endpoints); 6245 return { 6246 rest: api 6247 }; 6248 } 6249 restEndpointMethods.VERSION = VERSION; 6250 function legacyRestEndpointMethods(octokit) { 6251 const api = endpointsToMethods(octokit, Endpoints); 6252 return _objectSpread2(_objectSpread2({}, api), {}, { 6253 rest: api 6254 }); 6255 } 6256 legacyRestEndpointMethods.VERSION = VERSION; 6257 6258 exports.legacyRestEndpointMethods = legacyRestEndpointMethods; 6259 exports.restEndpointMethods = restEndpointMethods; 6260 //# sourceMappingURL=index.js.map 6261 6262 6263 /***/ }), 6264 6265 /***/ 537: 6266 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 6267 6268 6269 6270 Object.defineProperty(exports, "__esModule", ({ value: true })); 6271 6272 function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } 6273 6274 var deprecation = __nccwpck_require__(8932); 6275 var once = _interopDefault(__nccwpck_require__(1223)); 6276 6277 const logOnceCode = once(deprecation => console.warn(deprecation)); 6278 const logOnceHeaders = once(deprecation => console.warn(deprecation)); 6279 /** 6280 * Error with extra properties to help with debugging 6281 */ 6282 6283 class RequestError extends Error { 6284 constructor(message, statusCode, options) { 6285 super(message); // Maintains proper stack trace (only available on V8) 6286 6287 /* istanbul ignore next */ 6288 6289 if (Error.captureStackTrace) { 6290 Error.captureStackTrace(this, this.constructor); 6291 } 6292 6293 this.name = "HttpError"; 6294 this.status = statusCode; 6295 let headers; 6296 6297 if ("headers" in options && typeof options.headers !== "undefined") { 6298 headers = options.headers; 6299 } 6300 6301 if ("response" in options) { 6302 this.response = options.response; 6303 headers = options.response.headers; 6304 } // redact request credentials without mutating original request options 6305 6306 6307 const requestCopy = Object.assign({}, options.request); 6308 6309 if (options.request.headers.authorization) { 6310 requestCopy.headers = Object.assign({}, options.request.headers, { 6311 authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]") 6312 }); 6313 } 6314 6315 requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit 6316 // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications 6317 .replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended 6318 // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header 6319 .replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); 6320 this.request = requestCopy; // deprecations 6321 6322 Object.defineProperty(this, "code", { 6323 get() { 6324 logOnceCode(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`.")); 6325 return statusCode; 6326 } 6327 6328 }); 6329 Object.defineProperty(this, "headers", { 6330 get() { 6331 logOnceHeaders(new deprecation.Deprecation("[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`.")); 6332 return headers || {}; 6333 } 6334 6335 }); 6336 } 6337 6338 } 6339 6340 exports.RequestError = RequestError; 6341 //# sourceMappingURL=index.js.map 6342 6343 6344 /***/ }), 6345 6346 /***/ 6234: 6347 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 6348 6349 6350 6351 Object.defineProperty(exports, "__esModule", ({ value: true })); 6352 6353 function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } 6354 6355 var endpoint = __nccwpck_require__(9440); 6356 var universalUserAgent = __nccwpck_require__(5030); 6357 var isPlainObject = __nccwpck_require__(3287); 6358 var nodeFetch = _interopDefault(__nccwpck_require__(467)); 6359 var requestError = __nccwpck_require__(537); 6360 6361 const VERSION = "5.6.3"; 6362 6363 function getBufferResponse(response) { 6364 return response.arrayBuffer(); 6365 } 6366 6367 function fetchWrapper(requestOptions) { 6368 const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console; 6369 6370 if (isPlainObject.isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) { 6371 requestOptions.body = JSON.stringify(requestOptions.body); 6372 } 6373 6374 let headers = {}; 6375 let status; 6376 let url; 6377 const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch; 6378 return fetch(requestOptions.url, Object.assign({ 6379 method: requestOptions.method, 6380 body: requestOptions.body, 6381 headers: requestOptions.headers, 6382 redirect: requestOptions.redirect 6383 }, // `requestOptions.request.agent` type is incompatible 6384 // see https://github.com/octokit/types.ts/pull/264 6385 requestOptions.request)).then(async response => { 6386 url = response.url; 6387 status = response.status; 6388 6389 for (const keyAndValue of response.headers) { 6390 headers[keyAndValue[0]] = keyAndValue[1]; 6391 } 6392 6393 if ("deprecation" in headers) { 6394 const matches = headers.link && headers.link.match(/<([^>]+)>; rel="deprecation"/); 6395 const deprecationLink = matches && matches.pop(); 6396 log.warn(`[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}`); 6397 } 6398 6399 if (status === 204 || status === 205) { 6400 return; 6401 } // GitHub API returns 200 for HEAD requests 6402 6403 6404 if (requestOptions.method === "HEAD") { 6405 if (status < 400) { 6406 return; 6407 } 6408 6409 throw new requestError.RequestError(response.statusText, status, { 6410 response: { 6411 url, 6412 status, 6413 headers, 6414 data: undefined 6415 }, 6416 request: requestOptions 6417 }); 6418 } 6419 6420 if (status === 304) { 6421 throw new requestError.RequestError("Not modified", status, { 6422 response: { 6423 url, 6424 status, 6425 headers, 6426 data: await getResponseData(response) 6427 }, 6428 request: requestOptions 6429 }); 6430 } 6431 6432 if (status >= 400) { 6433 const data = await getResponseData(response); 6434 const error = new requestError.RequestError(toErrorMessage(data), status, { 6435 response: { 6436 url, 6437 status, 6438 headers, 6439 data 6440 }, 6441 request: requestOptions 6442 }); 6443 throw error; 6444 } 6445 6446 return getResponseData(response); 6447 }).then(data => { 6448 return { 6449 status, 6450 url, 6451 headers, 6452 data 6453 }; 6454 }).catch(error => { 6455 if (error instanceof requestError.RequestError) throw error; 6456 throw new requestError.RequestError(error.message, 500, { 6457 request: requestOptions 6458 }); 6459 }); 6460 } 6461 6462 async function getResponseData(response) { 6463 const contentType = response.headers.get("content-type"); 6464 6465 if (/application\/json/.test(contentType)) { 6466 return response.json(); 6467 } 6468 6469 if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { 6470 return response.text(); 6471 } 6472 6473 return getBufferResponse(response); 6474 } 6475 6476 function toErrorMessage(data) { 6477 if (typeof data === "string") return data; // istanbul ignore else - just in case 6478 6479 if ("message" in data) { 6480 if (Array.isArray(data.errors)) { 6481 return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}`; 6482 } 6483 6484 return data.message; 6485 } // istanbul ignore next - just in case 6486 6487 6488 return `Unknown error: ${JSON.stringify(data)}`; 6489 } 6490 6491 function withDefaults(oldEndpoint, newDefaults) { 6492 const endpoint = oldEndpoint.defaults(newDefaults); 6493 6494 const newApi = function (route, parameters) { 6495 const endpointOptions = endpoint.merge(route, parameters); 6496 6497 if (!endpointOptions.request || !endpointOptions.request.hook) { 6498 return fetchWrapper(endpoint.parse(endpointOptions)); 6499 } 6500 6501 const request = (route, parameters) => { 6502 return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters))); 6503 }; 6504 6505 Object.assign(request, { 6506 endpoint, 6507 defaults: withDefaults.bind(null, endpoint) 6508 }); 6509 return endpointOptions.request.hook(request, endpointOptions); 6510 }; 6511 6512 return Object.assign(newApi, { 6513 endpoint, 6514 defaults: withDefaults.bind(null, endpoint) 6515 }); 6516 } 6517 6518 const request = withDefaults(endpoint.endpoint, { 6519 headers: { 6520 "user-agent": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}` 6521 } 6522 }); 6523 6524 exports.request = request; 6525 //# sourceMappingURL=index.js.map 6526 6527 6528 /***/ }), 6529 6530 /***/ 3682: 6531 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 6532 6533 var register = __nccwpck_require__(4670); 6534 var addHook = __nccwpck_require__(5549); 6535 var removeHook = __nccwpck_require__(6819); 6536 6537 // bind with array of arguments: https://stackoverflow.com/a/21792913 6538 var bind = Function.bind; 6539 var bindable = bind.bind(bind); 6540 6541 function bindApi(hook, state, name) { 6542 var removeHookRef = bindable(removeHook, null).apply( 6543 null, 6544 name ? [state, name] : [state] 6545 ); 6546 hook.api = { remove: removeHookRef }; 6547 hook.remove = removeHookRef; 6548 ["before", "error", "after", "wrap"].forEach(function (kind) { 6549 var args = name ? [state, kind, name] : [state, kind]; 6550 hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args); 6551 }); 6552 } 6553 6554 function HookSingular() { 6555 var singularHookName = "h"; 6556 var singularHookState = { 6557 registry: {}, 6558 }; 6559 var singularHook = register.bind(null, singularHookState, singularHookName); 6560 bindApi(singularHook, singularHookState, singularHookName); 6561 return singularHook; 6562 } 6563 6564 function HookCollection() { 6565 var state = { 6566 registry: {}, 6567 }; 6568 6569 var hook = register.bind(null, state); 6570 bindApi(hook, state); 6571 6572 return hook; 6573 } 6574 6575 var collectionHookDeprecationMessageDisplayed = false; 6576 function Hook() { 6577 if (!collectionHookDeprecationMessageDisplayed) { 6578 console.warn( 6579 '[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4' 6580 ); 6581 collectionHookDeprecationMessageDisplayed = true; 6582 } 6583 return HookCollection(); 6584 } 6585 6586 Hook.Singular = HookSingular.bind(); 6587 Hook.Collection = HookCollection.bind(); 6588 6589 module.exports = Hook; 6590 // expose constructors as a named property for TypeScript 6591 module.exports.Hook = Hook; 6592 module.exports.Singular = Hook.Singular; 6593 module.exports.Collection = Hook.Collection; 6594 6595 6596 /***/ }), 6597 6598 /***/ 5549: 6599 /***/ ((module) => { 6600 6601 module.exports = addHook; 6602 6603 function addHook(state, kind, name, hook) { 6604 var orig = hook; 6605 if (!state.registry[name]) { 6606 state.registry[name] = []; 6607 } 6608 6609 if (kind === "before") { 6610 hook = function (method, options) { 6611 return Promise.resolve() 6612 .then(orig.bind(null, options)) 6613 .then(method.bind(null, options)); 6614 }; 6615 } 6616 6617 if (kind === "after") { 6618 hook = function (method, options) { 6619 var result; 6620 return Promise.resolve() 6621 .then(method.bind(null, options)) 6622 .then(function (result_) { 6623 result = result_; 6624 return orig(result, options); 6625 }) 6626 .then(function () { 6627 return result; 6628 }); 6629 }; 6630 } 6631 6632 if (kind === "error") { 6633 hook = function (method, options) { 6634 return Promise.resolve() 6635 .then(method.bind(null, options)) 6636 .catch(function (error) { 6637 return orig(error, options); 6638 }); 6639 }; 6640 } 6641 6642 state.registry[name].push({ 6643 hook: hook, 6644 orig: orig, 6645 }); 6646 } 6647 6648 6649 /***/ }), 6650 6651 /***/ 4670: 6652 /***/ ((module) => { 6653 6654 module.exports = register; 6655 6656 function register(state, name, method, options) { 6657 if (typeof method !== "function") { 6658 throw new Error("method for before hook must be a function"); 6659 } 6660 6661 if (!options) { 6662 options = {}; 6663 } 6664 6665 if (Array.isArray(name)) { 6666 return name.reverse().reduce(function (callback, name) { 6667 return register.bind(null, state, name, callback, options); 6668 }, method)(); 6669 } 6670 6671 return Promise.resolve().then(function () { 6672 if (!state.registry[name]) { 6673 return method(options); 6674 } 6675 6676 return state.registry[name].reduce(function (method, registered) { 6677 return registered.hook.bind(null, method, options); 6678 }, method)(); 6679 }); 6680 } 6681 6682 6683 /***/ }), 6684 6685 /***/ 6819: 6686 /***/ ((module) => { 6687 6688 module.exports = removeHook; 6689 6690 function removeHook(state, name, method) { 6691 if (!state.registry[name]) { 6692 return; 6693 } 6694 6695 var index = state.registry[name] 6696 .map(function (registered) { 6697 return registered.orig; 6698 }) 6699 .indexOf(method); 6700 6701 if (index === -1) { 6702 return; 6703 } 6704 6705 state.registry[name].splice(index, 1); 6706 } 6707 6708 6709 /***/ }), 6710 6711 /***/ 2391: 6712 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 6713 6714 6715 const {Transform, PassThrough} = __nccwpck_require__(2781); 6716 const zlib = __nccwpck_require__(9796); 6717 const mimicResponse = __nccwpck_require__(3877); 6718 6719 module.exports = response => { 6720 const contentEncoding = (response.headers['content-encoding'] || '').toLowerCase(); 6721 6722 if (!['gzip', 'deflate', 'br'].includes(contentEncoding)) { 6723 return response; 6724 } 6725 6726 // TODO: Remove this when targeting Node.js 12. 6727 const isBrotli = contentEncoding === 'br'; 6728 if (isBrotli && typeof zlib.createBrotliDecompress !== 'function') { 6729 response.destroy(new Error('Brotli is not supported on Node.js < 12')); 6730 return response; 6731 } 6732 6733 let isEmpty = true; 6734 6735 const checker = new Transform({ 6736 transform(data, _encoding, callback) { 6737 isEmpty = false; 6738 6739 callback(null, data); 6740 }, 6741 6742 flush(callback) { 6743 callback(); 6744 } 6745 }); 6746 6747 const finalStream = new PassThrough({ 6748 autoDestroy: false, 6749 destroy(error, callback) { 6750 response.destroy(); 6751 6752 callback(error); 6753 } 6754 }); 6755 6756 const decompressStream = isBrotli ? zlib.createBrotliDecompress() : zlib.createUnzip(); 6757 6758 decompressStream.once('error', error => { 6759 if (isEmpty && !response.readable) { 6760 finalStream.end(); 6761 return; 6762 } 6763 6764 finalStream.destroy(error); 6765 }); 6766 6767 mimicResponse(response, finalStream); 6768 response.pipe(checker).pipe(decompressStream).pipe(finalStream); 6769 6770 return finalStream; 6771 }; 6772 6773 6774 /***/ }), 6775 6776 /***/ 3877: 6777 /***/ ((module) => { 6778 6779 6780 6781 // We define these manually to ensure they're always copied 6782 // even if they would move up the prototype chain 6783 // https://nodejs.org/api/http.html#http_class_http_incomingmessage 6784 const knownProperties = [ 6785 'aborted', 6786 'complete', 6787 'headers', 6788 'httpVersion', 6789 'httpVersionMinor', 6790 'httpVersionMajor', 6791 'method', 6792 'rawHeaders', 6793 'rawTrailers', 6794 'setTimeout', 6795 'socket', 6796 'statusCode', 6797 'statusMessage', 6798 'trailers', 6799 'url' 6800 ]; 6801 6802 module.exports = (fromStream, toStream) => { 6803 if (toStream._readableState.autoDestroy) { 6804 throw new Error('The second stream must have the `autoDestroy` option set to `false`'); 6805 } 6806 6807 const fromProperties = new Set(Object.keys(fromStream).concat(knownProperties)); 6808 6809 const properties = {}; 6810 6811 for (const property of fromProperties) { 6812 // Don't overwrite existing properties. 6813 if (property in toStream) { 6814 continue; 6815 } 6816 6817 properties[property] = { 6818 get() { 6819 const value = fromStream[property]; 6820 const isFunction = typeof value === 'function'; 6821 6822 return isFunction ? value.bind(fromStream) : value; 6823 }, 6824 set(value) { 6825 fromStream[property] = value; 6826 }, 6827 enumerable: true, 6828 configurable: false 6829 }; 6830 } 6831 6832 Object.defineProperties(toStream, properties); 6833 6834 fromStream.once('aborted', () => { 6835 toStream.destroy(); 6836 6837 toStream.emit('aborted'); 6838 }); 6839 6840 fromStream.once('close', () => { 6841 if (fromStream.complete) { 6842 if (toStream.readable) { 6843 toStream.once('end', () => { 6844 toStream.emit('close'); 6845 }); 6846 } else { 6847 toStream.emit('close'); 6848 } 6849 } else { 6850 toStream.emit('close'); 6851 } 6852 }); 6853 6854 return toStream; 6855 }; 6856 6857 6858 /***/ }), 6859 6860 /***/ 6214: 6861 /***/ ((module, exports) => { 6862 6863 6864 Object.defineProperty(exports, "__esModule", ({ value: true })); 6865 function isTLSSocket(socket) { 6866 return socket.encrypted; 6867 } 6868 const deferToConnect = (socket, fn) => { 6869 let listeners; 6870 if (typeof fn === 'function') { 6871 const connect = fn; 6872 listeners = { connect }; 6873 } 6874 else { 6875 listeners = fn; 6876 } 6877 const hasConnectListener = typeof listeners.connect === 'function'; 6878 const hasSecureConnectListener = typeof listeners.secureConnect === 'function'; 6879 const hasCloseListener = typeof listeners.close === 'function'; 6880 const onConnect = () => { 6881 if (hasConnectListener) { 6882 listeners.connect(); 6883 } 6884 if (isTLSSocket(socket) && hasSecureConnectListener) { 6885 if (socket.authorized) { 6886 listeners.secureConnect(); 6887 } 6888 else if (!socket.authorizationError) { 6889 socket.once('secureConnect', listeners.secureConnect); 6890 } 6891 } 6892 if (hasCloseListener) { 6893 socket.once('close', listeners.close); 6894 } 6895 }; 6896 if (socket.writable && !socket.connecting) { 6897 onConnect(); 6898 } 6899 else if (socket.connecting) { 6900 socket.once('connect', onConnect); 6901 } 6902 else if (socket.destroyed && hasCloseListener) { 6903 listeners.close(socket._hadError); 6904 } 6905 }; 6906 exports["default"] = deferToConnect; 6907 // For CommonJS default export support 6908 module.exports = deferToConnect; 6909 module.exports["default"] = deferToConnect; 6910 6911 6912 /***/ }), 6913 6914 /***/ 8932: 6915 /***/ ((__unused_webpack_module, exports) => { 6916 6917 6918 6919 Object.defineProperty(exports, "__esModule", ({ value: true })); 6920 6921 class Deprecation extends Error { 6922 constructor(message) { 6923 super(message); // Maintains proper stack trace (only available on V8) 6924 6925 /* istanbul ignore next */ 6926 6927 if (Error.captureStackTrace) { 6928 Error.captureStackTrace(this, this.constructor); 6929 } 6930 6931 this.name = 'Deprecation'; 6932 } 6933 6934 } 6935 6936 exports.Deprecation = Deprecation; 6937 6938 6939 /***/ }), 6940 6941 /***/ 1585: 6942 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 6943 6944 6945 const {PassThrough: PassThroughStream} = __nccwpck_require__(2781); 6946 6947 module.exports = options => { 6948 options = {...options}; 6949 6950 const {array} = options; 6951 let {encoding} = options; 6952 const isBuffer = encoding === 'buffer'; 6953 let objectMode = false; 6954 6955 if (array) { 6956 objectMode = !(encoding || isBuffer); 6957 } else { 6958 encoding = encoding || 'utf8'; 6959 } 6960 6961 if (isBuffer) { 6962 encoding = null; 6963 } 6964 6965 const stream = new PassThroughStream({objectMode}); 6966 6967 if (encoding) { 6968 stream.setEncoding(encoding); 6969 } 6970 6971 let length = 0; 6972 const chunks = []; 6973 6974 stream.on('data', chunk => { 6975 chunks.push(chunk); 6976 6977 if (objectMode) { 6978 length = chunks.length; 6979 } else { 6980 length += chunk.length; 6981 } 6982 }); 6983 6984 stream.getBufferedValue = () => { 6985 if (array) { 6986 return chunks; 6987 } 6988 6989 return isBuffer ? Buffer.concat(chunks, length) : chunks.join(''); 6990 }; 6991 6992 stream.getBufferedLength = () => length; 6993 6994 return stream; 6995 }; 6996 6997 6998 /***/ }), 6999 7000 /***/ 1766: 7001 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 7002 7003 7004 const {constants: BufferConstants} = __nccwpck_require__(4300); 7005 const stream = __nccwpck_require__(2781); 7006 const {promisify} = __nccwpck_require__(3837); 7007 const bufferStream = __nccwpck_require__(1585); 7008 7009 const streamPipelinePromisified = promisify(stream.pipeline); 7010 7011 class MaxBufferError extends Error { 7012 constructor() { 7013 super('maxBuffer exceeded'); 7014 this.name = 'MaxBufferError'; 7015 } 7016 } 7017 7018 async function getStream(inputStream, options) { 7019 if (!inputStream) { 7020 throw new Error('Expected a stream'); 7021 } 7022 7023 options = { 7024 maxBuffer: Infinity, 7025 ...options 7026 }; 7027 7028 const {maxBuffer} = options; 7029 const stream = bufferStream(options); 7030 7031 await new Promise((resolve, reject) => { 7032 const rejectPromise = error => { 7033 // Don't retrieve an oversized buffer. 7034 if (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) { 7035 error.bufferedData = stream.getBufferedValue(); 7036 } 7037 7038 reject(error); 7039 }; 7040 7041 (async () => { 7042 try { 7043 await streamPipelinePromisified(inputStream, stream); 7044 resolve(); 7045 } catch (error) { 7046 rejectPromise(error); 7047 } 7048 })(); 7049 7050 stream.on('data', () => { 7051 if (stream.getBufferedLength() > maxBuffer) { 7052 rejectPromise(new MaxBufferError()); 7053 } 7054 }); 7055 }); 7056 7057 return stream.getBufferedValue(); 7058 } 7059 7060 module.exports = getStream; 7061 module.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'}); 7062 module.exports.array = (stream, options) => getStream(stream, {...options, array: true}); 7063 module.exports.MaxBufferError = MaxBufferError; 7064 7065 7066 /***/ }), 7067 7068 /***/ 1002: 7069 /***/ ((module) => { 7070 7071 7072 // rfc7231 6.1 7073 const statusCodeCacheableByDefault = new Set([ 7074 200, 7075 203, 7076 204, 7077 206, 7078 300, 7079 301, 7080 308, 7081 404, 7082 405, 7083 410, 7084 414, 7085 501, 7086 ]); 7087 7088 // This implementation does not understand partial responses (206) 7089 const understoodStatuses = new Set([ 7090 200, 7091 203, 7092 204, 7093 300, 7094 301, 7095 302, 7096 303, 7097 307, 7098 308, 7099 404, 7100 405, 7101 410, 7102 414, 7103 501, 7104 ]); 7105 7106 const errorStatusCodes = new Set([ 7107 500, 7108 502, 7109 503, 7110 504, 7111 ]); 7112 7113 const hopByHopHeaders = { 7114 date: true, // included, because we add Age update Date 7115 connection: true, 7116 'keep-alive': true, 7117 'proxy-authenticate': true, 7118 'proxy-authorization': true, 7119 te: true, 7120 trailer: true, 7121 'transfer-encoding': true, 7122 upgrade: true, 7123 }; 7124 7125 const excludedFromRevalidationUpdate = { 7126 // Since the old body is reused, it doesn't make sense to change properties of the body 7127 'content-length': true, 7128 'content-encoding': true, 7129 'transfer-encoding': true, 7130 'content-range': true, 7131 }; 7132 7133 function toNumberOrZero(s) { 7134 const n = parseInt(s, 10); 7135 return isFinite(n) ? n : 0; 7136 } 7137 7138 // RFC 5861 7139 function isErrorResponse(response) { 7140 // consider undefined response as faulty 7141 if(!response) { 7142 return true 7143 } 7144 return errorStatusCodes.has(response.status); 7145 } 7146 7147 function parseCacheControl(header) { 7148 const cc = {}; 7149 if (!header) return cc; 7150 7151 // TODO: When there is more than one value present for a given directive (e.g., two Expires header fields, multiple Cache-Control: max-age directives), 7152 // the directive's value is considered invalid. Caches are encouraged to consider responses that have invalid freshness information to be stale 7153 const parts = header.trim().split(/,/); 7154 for (const part of parts) { 7155 const [k, v] = part.split(/=/, 2); 7156 cc[k.trim()] = v === undefined ? true : v.trim().replace(/^"|"$/g, ''); 7157 } 7158 7159 return cc; 7160 } 7161 7162 function formatCacheControl(cc) { 7163 let parts = []; 7164 for (const k in cc) { 7165 const v = cc[k]; 7166 parts.push(v === true ? k : k + '=' + v); 7167 } 7168 if (!parts.length) { 7169 return undefined; 7170 } 7171 return parts.join(', '); 7172 } 7173 7174 module.exports = class CachePolicy { 7175 constructor( 7176 req, 7177 res, 7178 { 7179 shared, 7180 cacheHeuristic, 7181 immutableMinTimeToLive, 7182 ignoreCargoCult, 7183 _fromObject, 7184 } = {} 7185 ) { 7186 if (_fromObject) { 7187 this._fromObject(_fromObject); 7188 return; 7189 } 7190 7191 if (!res || !res.headers) { 7192 throw Error('Response headers missing'); 7193 } 7194 this._assertRequestHasHeaders(req); 7195 7196 this._responseTime = this.now(); 7197 this._isShared = shared !== false; 7198 this._cacheHeuristic = 7199 undefined !== cacheHeuristic ? cacheHeuristic : 0.1; // 10% matches IE 7200 this._immutableMinTtl = 7201 undefined !== immutableMinTimeToLive 7202 ? immutableMinTimeToLive 7203 : 24 * 3600 * 1000; 7204 7205 this._status = 'status' in res ? res.status : 200; 7206 this._resHeaders = res.headers; 7207 this._rescc = parseCacheControl(res.headers['cache-control']); 7208 this._method = 'method' in req ? req.method : 'GET'; 7209 this._url = req.url; 7210 this._host = req.headers.host; 7211 this._noAuthorization = !req.headers.authorization; 7212 this._reqHeaders = res.headers.vary ? req.headers : null; // Don't keep all request headers if they won't be used 7213 this._reqcc = parseCacheControl(req.headers['cache-control']); 7214 7215 // Assume that if someone uses legacy, non-standard uncecessary options they don't understand caching, 7216 // so there's no point stricly adhering to the blindly copy&pasted directives. 7217 if ( 7218 ignoreCargoCult && 7219 'pre-check' in this._rescc && 7220 'post-check' in this._rescc 7221 ) { 7222 delete this._rescc['pre-check']; 7223 delete this._rescc['post-check']; 7224 delete this._rescc['no-cache']; 7225 delete this._rescc['no-store']; 7226 delete this._rescc['must-revalidate']; 7227 this._resHeaders = Object.assign({}, this._resHeaders, { 7228 'cache-control': formatCacheControl(this._rescc), 7229 }); 7230 delete this._resHeaders.expires; 7231 delete this._resHeaders.pragma; 7232 } 7233 7234 // When the Cache-Control header field is not present in a request, caches MUST consider the no-cache request pragma-directive 7235 // as having the same effect as if "Cache-Control: no-cache" were present (see Section 5.2.1). 7236 if ( 7237 res.headers['cache-control'] == null && 7238 /no-cache/.test(res.headers.pragma) 7239 ) { 7240 this._rescc['no-cache'] = true; 7241 } 7242 } 7243 7244 now() { 7245 return Date.now(); 7246 } 7247 7248 storable() { 7249 // The "no-store" request directive indicates that a cache MUST NOT store any part of either this request or any response to it. 7250 return !!( 7251 !this._reqcc['no-store'] && 7252 // A cache MUST NOT store a response to any request, unless: 7253 // The request method is understood by the cache and defined as being cacheable, and 7254 ('GET' === this._method || 7255 'HEAD' === this._method || 7256 ('POST' === this._method && this._hasExplicitExpiration())) && 7257 // the response status code is understood by the cache, and 7258 understoodStatuses.has(this._status) && 7259 // the "no-store" cache directive does not appear in request or response header fields, and 7260 !this._rescc['no-store'] && 7261 // the "private" response directive does not appear in the response, if the cache is shared, and 7262 (!this._isShared || !this._rescc.private) && 7263 // the Authorization header field does not appear in the request, if the cache is shared, 7264 (!this._isShared || 7265 this._noAuthorization || 7266 this._allowsStoringAuthenticated()) && 7267 // the response either: 7268 // contains an Expires header field, or 7269 (this._resHeaders.expires || 7270 // contains a max-age response directive, or 7271 // contains a s-maxage response directive and the cache is shared, or 7272 // contains a public response directive. 7273 this._rescc['max-age'] || 7274 (this._isShared && this._rescc['s-maxage']) || 7275 this._rescc.public || 7276 // has a status code that is defined as cacheable by default 7277 statusCodeCacheableByDefault.has(this._status)) 7278 ); 7279 } 7280 7281 _hasExplicitExpiration() { 7282 // 4.2.1 Calculating Freshness Lifetime 7283 return ( 7284 (this._isShared && this._rescc['s-maxage']) || 7285 this._rescc['max-age'] || 7286 this._resHeaders.expires 7287 ); 7288 } 7289 7290 _assertRequestHasHeaders(req) { 7291 if (!req || !req.headers) { 7292 throw Error('Request headers missing'); 7293 } 7294 } 7295 7296 satisfiesWithoutRevalidation(req) { 7297 this._assertRequestHasHeaders(req); 7298 7299 // When presented with a request, a cache MUST NOT reuse a stored response, unless: 7300 // the presented request does not contain the no-cache pragma (Section 5.4), nor the no-cache cache directive, 7301 // unless the stored response is successfully validated (Section 4.3), and 7302 const requestCC = parseCacheControl(req.headers['cache-control']); 7303 if (requestCC['no-cache'] || /no-cache/.test(req.headers.pragma)) { 7304 return false; 7305 } 7306 7307 if (requestCC['max-age'] && this.age() > requestCC['max-age']) { 7308 return false; 7309 } 7310 7311 if ( 7312 requestCC['min-fresh'] && 7313 this.timeToLive() < 1000 * requestCC['min-fresh'] 7314 ) { 7315 return false; 7316 } 7317 7318 // the stored response is either: 7319 // fresh, or allowed to be served stale 7320 if (this.stale()) { 7321 const allowsStale = 7322 requestCC['max-stale'] && 7323 !this._rescc['must-revalidate'] && 7324 (true === requestCC['max-stale'] || 7325 requestCC['max-stale'] > this.age() - this.maxAge()); 7326 if (!allowsStale) { 7327 return false; 7328 } 7329 } 7330 7331 return this._requestMatches(req, false); 7332 } 7333 7334 _requestMatches(req, allowHeadMethod) { 7335 // The presented effective request URI and that of the stored response match, and 7336 return ( 7337 (!this._url || this._url === req.url) && 7338 this._host === req.headers.host && 7339 // the request method associated with the stored response allows it to be used for the presented request, and 7340 (!req.method || 7341 this._method === req.method || 7342 (allowHeadMethod && 'HEAD' === req.method)) && 7343 // selecting header fields nominated by the stored response (if any) match those presented, and 7344 this._varyMatches(req) 7345 ); 7346 } 7347 7348 _allowsStoringAuthenticated() { 7349 // following Cache-Control response directives (Section 5.2.2) have such an effect: must-revalidate, public, and s-maxage. 7350 return ( 7351 this._rescc['must-revalidate'] || 7352 this._rescc.public || 7353 this._rescc['s-maxage'] 7354 ); 7355 } 7356 7357 _varyMatches(req) { 7358 if (!this._resHeaders.vary) { 7359 return true; 7360 } 7361 7362 // A Vary header field-value of "*" always fails to match 7363 if (this._resHeaders.vary === '*') { 7364 return false; 7365 } 7366 7367 const fields = this._resHeaders.vary 7368 .trim() 7369 .toLowerCase() 7370 .split(/\s*,\s*/); 7371 for (const name of fields) { 7372 if (req.headers[name] !== this._reqHeaders[name]) return false; 7373 } 7374 return true; 7375 } 7376 7377 _copyWithoutHopByHopHeaders(inHeaders) { 7378 const headers = {}; 7379 for (const name in inHeaders) { 7380 if (hopByHopHeaders[name]) continue; 7381 headers[name] = inHeaders[name]; 7382 } 7383 // 9.1. Connection 7384 if (inHeaders.connection) { 7385 const tokens = inHeaders.connection.trim().split(/\s*,\s*/); 7386 for (const name of tokens) { 7387 delete headers[name]; 7388 } 7389 } 7390 if (headers.warning) { 7391 const warnings = headers.warning.split(/,/).filter(warning => { 7392 return !/^\s*1[0-9][0-9]/.test(warning); 7393 }); 7394 if (!warnings.length) { 7395 delete headers.warning; 7396 } else { 7397 headers.warning = warnings.join(',').trim(); 7398 } 7399 } 7400 return headers; 7401 } 7402 7403 responseHeaders() { 7404 const headers = this._copyWithoutHopByHopHeaders(this._resHeaders); 7405 const age = this.age(); 7406 7407 // A cache SHOULD generate 113 warning if it heuristically chose a freshness 7408 // lifetime greater than 24 hours and the response's age is greater than 24 hours. 7409 if ( 7410 age > 3600 * 24 && 7411 !this._hasExplicitExpiration() && 7412 this.maxAge() > 3600 * 24 7413 ) { 7414 headers.warning = 7415 (headers.warning ? `${headers.warning}, ` : '') + 7416 '113 - "rfc7234 5.5.4"'; 7417 } 7418 headers.age = `${Math.round(age)}`; 7419 headers.date = new Date(this.now()).toUTCString(); 7420 return headers; 7421 } 7422 7423 /** 7424 * Value of the Date response header or current time if Date was invalid 7425 * @return timestamp 7426 */ 7427 date() { 7428 const serverDate = Date.parse(this._resHeaders.date); 7429 if (isFinite(serverDate)) { 7430 return serverDate; 7431 } 7432 return this._responseTime; 7433 } 7434 7435 /** 7436 * Value of the Age header, in seconds, updated for the current time. 7437 * May be fractional. 7438 * 7439 * @return Number 7440 */ 7441 age() { 7442 let age = this._ageValue(); 7443 7444 const residentTime = (this.now() - this._responseTime) / 1000; 7445 return age + residentTime; 7446 } 7447 7448 _ageValue() { 7449 return toNumberOrZero(this._resHeaders.age); 7450 } 7451 7452 /** 7453 * Value of applicable max-age (or heuristic equivalent) in seconds. This counts since response's `Date`. 7454 * 7455 * For an up-to-date value, see `timeToLive()`. 7456 * 7457 * @return Number 7458 */ 7459 maxAge() { 7460 if (!this.storable() || this._rescc['no-cache']) { 7461 return 0; 7462 } 7463 7464 // Shared responses with cookies are cacheable according to the RFC, but IMHO it'd be unwise to do so by default 7465 // so this implementation requires explicit opt-in via public header 7466 if ( 7467 this._isShared && 7468 (this._resHeaders['set-cookie'] && 7469 !this._rescc.public && 7470 !this._rescc.immutable) 7471 ) { 7472 return 0; 7473 } 7474 7475 if (this._resHeaders.vary === '*') { 7476 return 0; 7477 } 7478 7479 if (this._isShared) { 7480 if (this._rescc['proxy-revalidate']) { 7481 return 0; 7482 } 7483 // if a response includes the s-maxage directive, a shared cache recipient MUST ignore the Expires field. 7484 if (this._rescc['s-maxage']) { 7485 return toNumberOrZero(this._rescc['s-maxage']); 7486 } 7487 } 7488 7489 // If a response includes a Cache-Control field with the max-age directive, a recipient MUST ignore the Expires field. 7490 if (this._rescc['max-age']) { 7491 return toNumberOrZero(this._rescc['max-age']); 7492 } 7493 7494 const defaultMinTtl = this._rescc.immutable ? this._immutableMinTtl : 0; 7495 7496 const serverDate = this.date(); 7497 if (this._resHeaders.expires) { 7498 const expires = Date.parse(this._resHeaders.expires); 7499 // A cache recipient MUST interpret invalid date formats, especially the value "0", as representing a time in the past (i.e., "already expired"). 7500 if (Number.isNaN(expires) || expires < serverDate) { 7501 return 0; 7502 } 7503 return Math.max(defaultMinTtl, (expires - serverDate) / 1000); 7504 } 7505 7506 if (this._resHeaders['last-modified']) { 7507 const lastModified = Date.parse(this._resHeaders['last-modified']); 7508 if (isFinite(lastModified) && serverDate > lastModified) { 7509 return Math.max( 7510 defaultMinTtl, 7511 ((serverDate - lastModified) / 1000) * this._cacheHeuristic 7512 ); 7513 } 7514 } 7515 7516 return defaultMinTtl; 7517 } 7518 7519 timeToLive() { 7520 const age = this.maxAge() - this.age(); 7521 const staleIfErrorAge = age + toNumberOrZero(this._rescc['stale-if-error']); 7522 const staleWhileRevalidateAge = age + toNumberOrZero(this._rescc['stale-while-revalidate']); 7523 return Math.max(0, age, staleIfErrorAge, staleWhileRevalidateAge) * 1000; 7524 } 7525 7526 stale() { 7527 return this.maxAge() <= this.age(); 7528 } 7529 7530 _useStaleIfError() { 7531 return this.maxAge() + toNumberOrZero(this._rescc['stale-if-error']) > this.age(); 7532 } 7533 7534 useStaleWhileRevalidate() { 7535 return this.maxAge() + toNumberOrZero(this._rescc['stale-while-revalidate']) > this.age(); 7536 } 7537 7538 static fromObject(obj) { 7539 return new this(undefined, undefined, { _fromObject: obj }); 7540 } 7541 7542 _fromObject(obj) { 7543 if (this._responseTime) throw Error('Reinitialized'); 7544 if (!obj || obj.v !== 1) throw Error('Invalid serialization'); 7545 7546 this._responseTime = obj.t; 7547 this._isShared = obj.sh; 7548 this._cacheHeuristic = obj.ch; 7549 this._immutableMinTtl = 7550 obj.imm !== undefined ? obj.imm : 24 * 3600 * 1000; 7551 this._status = obj.st; 7552 this._resHeaders = obj.resh; 7553 this._rescc = obj.rescc; 7554 this._method = obj.m; 7555 this._url = obj.u; 7556 this._host = obj.h; 7557 this._noAuthorization = obj.a; 7558 this._reqHeaders = obj.reqh; 7559 this._reqcc = obj.reqcc; 7560 } 7561 7562 toObject() { 7563 return { 7564 v: 1, 7565 t: this._responseTime, 7566 sh: this._isShared, 7567 ch: this._cacheHeuristic, 7568 imm: this._immutableMinTtl, 7569 st: this._status, 7570 resh: this._resHeaders, 7571 rescc: this._rescc, 7572 m: this._method, 7573 u: this._url, 7574 h: this._host, 7575 a: this._noAuthorization, 7576 reqh: this._reqHeaders, 7577 reqcc: this._reqcc, 7578 }; 7579 } 7580 7581 /** 7582 * Headers for sending to the origin server to revalidate stale response. 7583 * Allows server to return 304 to allow reuse of the previous response. 7584 * 7585 * Hop by hop headers are always stripped. 7586 * Revalidation headers may be added or removed, depending on request. 7587 */ 7588 revalidationHeaders(incomingReq) { 7589 this._assertRequestHasHeaders(incomingReq); 7590 const headers = this._copyWithoutHopByHopHeaders(incomingReq.headers); 7591 7592 // This implementation does not understand range requests 7593 delete headers['if-range']; 7594 7595 if (!this._requestMatches(incomingReq, true) || !this.storable()) { 7596 // revalidation allowed via HEAD 7597 // not for the same resource, or wasn't allowed to be cached anyway 7598 delete headers['if-none-match']; 7599 delete headers['if-modified-since']; 7600 return headers; 7601 } 7602 7603 /* MUST send that entity-tag in any cache validation request (using If-Match or If-None-Match) if an entity-tag has been provided by the origin server. */ 7604 if (this._resHeaders.etag) { 7605 headers['if-none-match'] = headers['if-none-match'] 7606 ? `${headers['if-none-match']}, ${this._resHeaders.etag}` 7607 : this._resHeaders.etag; 7608 } 7609 7610 // Clients MAY issue simple (non-subrange) GET requests with either weak validators or strong validators. Clients MUST NOT use weak validators in other forms of request. 7611 const forbidsWeakValidators = 7612 headers['accept-ranges'] || 7613 headers['if-match'] || 7614 headers['if-unmodified-since'] || 7615 (this._method && this._method != 'GET'); 7616 7617 /* SHOULD send the Last-Modified value in non-subrange cache validation requests (using If-Modified-Since) if only a Last-Modified value has been provided by the origin server. 7618 Note: This implementation does not understand partial responses (206) */ 7619 if (forbidsWeakValidators) { 7620 delete headers['if-modified-since']; 7621 7622 if (headers['if-none-match']) { 7623 const etags = headers['if-none-match'] 7624 .split(/,/) 7625 .filter(etag => { 7626 return !/^\s*W\//.test(etag); 7627 }); 7628 if (!etags.length) { 7629 delete headers['if-none-match']; 7630 } else { 7631 headers['if-none-match'] = etags.join(',').trim(); 7632 } 7633 } 7634 } else if ( 7635 this._resHeaders['last-modified'] && 7636 !headers['if-modified-since'] 7637 ) { 7638 headers['if-modified-since'] = this._resHeaders['last-modified']; 7639 } 7640 7641 return headers; 7642 } 7643 7644 /** 7645 * Creates new CachePolicy with information combined from the previews response, 7646 * and the new revalidation response. 7647 * 7648 * Returns {policy, modified} where modified is a boolean indicating 7649 * whether the response body has been modified, and old cached body can't be used. 7650 * 7651 * @return {Object} {policy: CachePolicy, modified: Boolean} 7652 */ 7653 revalidatedPolicy(request, response) { 7654 this._assertRequestHasHeaders(request); 7655 if(this._useStaleIfError() && isErrorResponse(response)) { // I consider the revalidation request unsuccessful 7656 return { 7657 modified: false, 7658 matches: false, 7659 policy: this, 7660 }; 7661 } 7662 if (!response || !response.headers) { 7663 throw Error('Response headers missing'); 7664 } 7665 7666 // These aren't going to be supported exactly, since one CachePolicy object 7667 // doesn't know about all the other cached objects. 7668 let matches = false; 7669 if (response.status !== undefined && response.status != 304) { 7670 matches = false; 7671 } else if ( 7672 response.headers.etag && 7673 !/^\s*W\//.test(response.headers.etag) 7674 ) { 7675 // "All of the stored responses with the same strong validator are selected. 7676 // If none of the stored responses contain the same strong validator, 7677 // then the cache MUST NOT use the new response to update any stored responses." 7678 matches = 7679 this._resHeaders.etag && 7680 this._resHeaders.etag.replace(/^\s*W\//, '') === 7681 response.headers.etag; 7682 } else if (this._resHeaders.etag && response.headers.etag) { 7683 // "If the new response contains a weak validator and that validator corresponds 7684 // to one of the cache's stored responses, 7685 // then the most recent of those matching stored responses is selected for update." 7686 matches = 7687 this._resHeaders.etag.replace(/^\s*W\//, '') === 7688 response.headers.etag.replace(/^\s*W\//, ''); 7689 } else if (this._resHeaders['last-modified']) { 7690 matches = 7691 this._resHeaders['last-modified'] === 7692 response.headers['last-modified']; 7693 } else { 7694 // If the new response does not include any form of validator (such as in the case where 7695 // a client generates an If-Modified-Since request from a source other than the Last-Modified 7696 // response header field), and there is only one stored response, and that stored response also 7697 // lacks a validator, then that stored response is selected for update. 7698 if ( 7699 !this._resHeaders.etag && 7700 !this._resHeaders['last-modified'] && 7701 !response.headers.etag && 7702 !response.headers['last-modified'] 7703 ) { 7704 matches = true; 7705 } 7706 } 7707 7708 if (!matches) { 7709 return { 7710 policy: new this.constructor(request, response), 7711 // Client receiving 304 without body, even if it's invalid/mismatched has no option 7712 // but to reuse a cached body. We don't have a good way to tell clients to do 7713 // error recovery in such case. 7714 modified: response.status != 304, 7715 matches: false, 7716 }; 7717 } 7718 7719 // use other header fields provided in the 304 (Not Modified) response to replace all instances 7720 // of the corresponding header fields in the stored response. 7721 const headers = {}; 7722 for (const k in this._resHeaders) { 7723 headers[k] = 7724 k in response.headers && !excludedFromRevalidationUpdate[k] 7725 ? response.headers[k] 7726 : this._resHeaders[k]; 7727 } 7728 7729 const newResponse = Object.assign({}, response, { 7730 status: this._status, 7731 method: this._method, 7732 headers, 7733 }); 7734 return { 7735 policy: new this.constructor(request, newResponse, { 7736 shared: this._isShared, 7737 cacheHeuristic: this._cacheHeuristic, 7738 immutableMinTimeToLive: this._immutableMinTtl, 7739 }), 7740 modified: false, 7741 matches: true, 7742 }; 7743 } 7744 }; 7745 7746 7747 /***/ }), 7748 7749 /***/ 9898: 7750 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 7751 7752 7753 // See https://github.com/facebook/jest/issues/2549 7754 // eslint-disable-next-line node/prefer-global/url 7755 const {URL} = __nccwpck_require__(7310); 7756 const EventEmitter = __nccwpck_require__(2361); 7757 const tls = __nccwpck_require__(4404); 7758 const http2 = __nccwpck_require__(5158); 7759 const QuickLRU = __nccwpck_require__(9273); 7760 const delayAsyncDestroy = __nccwpck_require__(9237); 7761 7762 const kCurrentStreamCount = Symbol('currentStreamCount'); 7763 const kRequest = Symbol('request'); 7764 const kOriginSet = Symbol('cachedOriginSet'); 7765 const kGracefullyClosing = Symbol('gracefullyClosing'); 7766 const kLength = Symbol('length'); 7767 7768 const nameKeys = [ 7769 // Not an Agent option actually 7770 'createConnection', 7771 7772 // `http2.connect()` options 7773 'maxDeflateDynamicTableSize', 7774 'maxSettings', 7775 'maxSessionMemory', 7776 'maxHeaderListPairs', 7777 'maxOutstandingPings', 7778 'maxReservedRemoteStreams', 7779 'maxSendHeaderBlockLength', 7780 'paddingStrategy', 7781 'peerMaxConcurrentStreams', 7782 'settings', 7783 7784 // `tls.connect()` source options 7785 'family', 7786 'localAddress', 7787 'rejectUnauthorized', 7788 7789 // `tls.connect()` secure context options 7790 'pskCallback', 7791 'minDHSize', 7792 7793 // `tls.connect()` destination options 7794 // - `servername` is automatically validated, skip it 7795 // - `host` and `port` just describe the destination server, 7796 'path', 7797 'socket', 7798 7799 // `tls.createSecureContext()` options 7800 'ca', 7801 'cert', 7802 'sigalgs', 7803 'ciphers', 7804 'clientCertEngine', 7805 'crl', 7806 'dhparam', 7807 'ecdhCurve', 7808 'honorCipherOrder', 7809 'key', 7810 'privateKeyEngine', 7811 'privateKeyIdentifier', 7812 'maxVersion', 7813 'minVersion', 7814 'pfx', 7815 'secureOptions', 7816 'secureProtocol', 7817 'sessionIdContext', 7818 'ticketKeys' 7819 ]; 7820 7821 const getSortedIndex = (array, value, compare) => { 7822 let low = 0; 7823 let high = array.length; 7824 7825 while (low < high) { 7826 const mid = (low + high) >>> 1; 7827 7828 if (compare(array[mid], value)) { 7829 low = mid + 1; 7830 } else { 7831 high = mid; 7832 } 7833 } 7834 7835 return low; 7836 }; 7837 7838 const compareSessions = (a, b) => a.remoteSettings.maxConcurrentStreams > b.remoteSettings.maxConcurrentStreams; 7839 7840 // See https://tools.ietf.org/html/rfc8336 7841 const closeCoveredSessions = (where, session) => { 7842 // Clients SHOULD NOT emit new requests on any connection whose Origin 7843 // Set is a proper subset of another connection's Origin Set, and they 7844 // SHOULD close it once all outstanding requests are satisfied. 7845 for (let index = 0; index < where.length; index++) { 7846 const coveredSession = where[index]; 7847 7848 if ( 7849 // Unfortunately `.every()` returns true for an empty array 7850 coveredSession[kOriginSet].length > 0 7851 7852 // The set is a proper subset when its length is less than the other set. 7853 && coveredSession[kOriginSet].length < session[kOriginSet].length 7854 7855 // And the other set includes all elements of the subset. 7856 && coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin)) 7857 7858 // Makes sure that the session can handle all requests from the covered session. 7859 && (coveredSession[kCurrentStreamCount] + session[kCurrentStreamCount]) <= session.remoteSettings.maxConcurrentStreams 7860 ) { 7861 // This allows pending requests to finish and prevents making new requests. 7862 gracefullyClose(coveredSession); 7863 } 7864 } 7865 }; 7866 7867 // This is basically inverted `closeCoveredSessions(...)`. 7868 const closeSessionIfCovered = (where, coveredSession) => { 7869 for (let index = 0; index < where.length; index++) { 7870 const session = where[index]; 7871 7872 if ( 7873 coveredSession[kOriginSet].length > 0 7874 && coveredSession[kOriginSet].length < session[kOriginSet].length 7875 && coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin)) 7876 && (coveredSession[kCurrentStreamCount] + session[kCurrentStreamCount]) <= session.remoteSettings.maxConcurrentStreams 7877 ) { 7878 gracefullyClose(coveredSession); 7879 7880 return true; 7881 } 7882 } 7883 7884 return false; 7885 }; 7886 7887 const gracefullyClose = session => { 7888 session[kGracefullyClosing] = true; 7889 7890 if (session[kCurrentStreamCount] === 0) { 7891 session.close(); 7892 } 7893 }; 7894 7895 class Agent extends EventEmitter { 7896 constructor({timeout = 0, maxSessions = Number.POSITIVE_INFINITY, maxEmptySessions = 10, maxCachedTlsSessions = 100} = {}) { 7897 super(); 7898 7899 // SESSIONS[NORMALIZED_OPTIONS] = []; 7900 this.sessions = {}; 7901 7902 // The queue for creating new sessions. It looks like this: 7903 // QUEUE[NORMALIZED_OPTIONS][NORMALIZED_ORIGIN] = ENTRY_FUNCTION 7904 // 7905 // It's faster when there are many origins. If there's only one, then QUEUE[`${options}:${origin}`] is faster. 7906 // I guess object creation / deletion is causing the slowdown. 7907 // 7908 // The entry function has `listeners`, `completed` and `destroyed` properties. 7909 // `listeners` is an array of objects containing `resolve` and `reject` functions. 7910 // `completed` is a boolean. It's set to true after ENTRY_FUNCTION is executed. 7911 // `destroyed` is a boolean. If it's set to true, the session will be destroyed if hasn't connected yet. 7912 this.queue = {}; 7913 7914 // Each session will use this timeout value. 7915 this.timeout = timeout; 7916 7917 // Max sessions in total 7918 this.maxSessions = maxSessions; 7919 7920 // Max empty sessions in total 7921 this.maxEmptySessions = maxEmptySessions; 7922 7923 this._emptySessionCount = 0; 7924 this._sessionCount = 0; 7925 7926 // We don't support push streams by default. 7927 this.settings = { 7928 enablePush: false, 7929 initialWindowSize: 1024 * 1024 * 32 // 32MB, see https://github.com/nodejs/node/issues/38426 7930 }; 7931 7932 // Reusing TLS sessions increases performance. 7933 this.tlsSessionCache = new QuickLRU({maxSize: maxCachedTlsSessions}); 7934 } 7935 7936 get protocol() { 7937 return 'https:'; 7938 } 7939 7940 normalizeOptions(options) { 7941 let normalized = ''; 7942 7943 for (let index = 0; index < nameKeys.length; index++) { 7944 const key = nameKeys[index]; 7945 7946 normalized += ':'; 7947 7948 if (options && options[key] !== undefined) { 7949 normalized += options[key]; 7950 } 7951 } 7952 7953 return normalized; 7954 } 7955 7956 _processQueue() { 7957 if (this._sessionCount >= this.maxSessions) { 7958 this.closeEmptySessions(this.maxSessions - this._sessionCount + 1); 7959 return; 7960 } 7961 7962 // eslint-disable-next-line guard-for-in 7963 for (const normalizedOptions in this.queue) { 7964 // eslint-disable-next-line guard-for-in 7965 for (const normalizedOrigin in this.queue[normalizedOptions]) { 7966 const item = this.queue[normalizedOptions][normalizedOrigin]; 7967 7968 // The entry function can be run only once. 7969 if (!item.completed) { 7970 item.completed = true; 7971 7972 item(); 7973 } 7974 } 7975 } 7976 } 7977 7978 _isBetterSession(thisStreamCount, thatStreamCount) { 7979 return thisStreamCount > thatStreamCount; 7980 } 7981 7982 _accept(session, listeners, normalizedOrigin, options) { 7983 let index = 0; 7984 7985 while (index < listeners.length && session[kCurrentStreamCount] < session.remoteSettings.maxConcurrentStreams) { 7986 // We assume `resolve(...)` calls `request(...)` *directly*, 7987 // otherwise the session will get overloaded. 7988 listeners[index].resolve(session); 7989 7990 index++; 7991 } 7992 7993 listeners.splice(0, index); 7994 7995 if (listeners.length > 0) { 7996 this.getSession(normalizedOrigin, options, listeners); 7997 listeners.length = 0; 7998 } 7999 } 8000 8001 getSession(origin, options, listeners) { 8002 return new Promise((resolve, reject) => { 8003 if (Array.isArray(listeners) && listeners.length > 0) { 8004 listeners = [...listeners]; 8005 8006 // Resolve the current promise ASAP, we're just moving the listeners. 8007 // They will be executed at a different time. 8008 resolve(); 8009 } else { 8010 listeners = [{resolve, reject}]; 8011 } 8012 8013 try { 8014 // Parse origin 8015 if (typeof origin === 'string') { 8016 origin = new URL(origin); 8017 } else if (!(origin instanceof URL)) { 8018 throw new TypeError('The `origin` argument needs to be a string or an URL object'); 8019 } 8020 8021 if (options) { 8022 // Validate servername 8023 const {servername} = options; 8024 const {hostname} = origin; 8025 if (servername && hostname !== servername) { 8026 throw new Error(`Origin ${hostname} differs from servername ${servername}`); 8027 } 8028 } 8029 } catch (error) { 8030 for (let index = 0; index < listeners.length; index++) { 8031 listeners[index].reject(error); 8032 } 8033 8034 return; 8035 } 8036 8037 const normalizedOptions = this.normalizeOptions(options); 8038 const normalizedOrigin = origin.origin; 8039 8040 if (normalizedOptions in this.sessions) { 8041 const sessions = this.sessions[normalizedOptions]; 8042 8043 let maxConcurrentStreams = -1; 8044 let currentStreamsCount = -1; 8045 let optimalSession; 8046 8047 // We could just do this.sessions[normalizedOptions].find(...) but that isn't optimal. 8048 // Additionally, we are looking for session which has biggest current pending streams count. 8049 // 8050 // |------------| |------------| |------------| |------------| 8051 // | Session: A | | Session: B | | Session: C | | Session: D | 8052 // | Pending: 5 |-| Pending: 8 |-| Pending: 9 |-| Pending: 4 | 8053 // | Max: 10 | | Max: 10 | | Max: 9 | | Max: 5 | 8054 // |------------| |------------| |------------| |------------| 8055 // ^ 8056 // | 8057 // pick this one -- 8058 // 8059 for (let index = 0; index < sessions.length; index++) { 8060 const session = sessions[index]; 8061 8062 const sessionMaxConcurrentStreams = session.remoteSettings.maxConcurrentStreams; 8063 8064 if (sessionMaxConcurrentStreams < maxConcurrentStreams) { 8065 break; 8066 } 8067 8068 if (!session[kOriginSet].includes(normalizedOrigin)) { 8069 continue; 8070 } 8071 8072 const sessionCurrentStreamsCount = session[kCurrentStreamCount]; 8073 8074 if ( 8075 sessionCurrentStreamsCount >= sessionMaxConcurrentStreams 8076 || session[kGracefullyClosing] 8077 // Unfortunately the `close` event isn't called immediately, 8078 // so `session.destroyed` is `true`, but `session.closed` is `false`. 8079 || session.destroyed 8080 ) { 8081 continue; 8082 } 8083 8084 // We only need set this once. 8085 if (!optimalSession) { 8086 maxConcurrentStreams = sessionMaxConcurrentStreams; 8087 } 8088 8089 // Either get the session which has biggest current stream count or the lowest. 8090 if (this._isBetterSession(sessionCurrentStreamsCount, currentStreamsCount)) { 8091 optimalSession = session; 8092 currentStreamsCount = sessionCurrentStreamsCount; 8093 } 8094 } 8095 8096 if (optimalSession) { 8097 this._accept(optimalSession, listeners, normalizedOrigin, options); 8098 return; 8099 } 8100 } 8101 8102 if (normalizedOptions in this.queue) { 8103 if (normalizedOrigin in this.queue[normalizedOptions]) { 8104 // There's already an item in the queue, just attach ourselves to it. 8105 this.queue[normalizedOptions][normalizedOrigin].listeners.push(...listeners); 8106 return; 8107 } 8108 } else { 8109 this.queue[normalizedOptions] = { 8110 [kLength]: 0 8111 }; 8112 } 8113 8114 // The entry must be removed from the queue IMMEDIATELY when: 8115 // 1. the session connects successfully, 8116 // 2. an error occurs. 8117 const removeFromQueue = () => { 8118 // Our entry can be replaced. We cannot remove the new one. 8119 if (normalizedOptions in this.queue && this.queue[normalizedOptions][normalizedOrigin] === entry) { 8120 delete this.queue[normalizedOptions][normalizedOrigin]; 8121 8122 if (--this.queue[normalizedOptions][kLength] === 0) { 8123 delete this.queue[normalizedOptions]; 8124 } 8125 } 8126 }; 8127 8128 // The main logic is here 8129 const entry = async () => { 8130 this._sessionCount++; 8131 8132 const name = `${normalizedOrigin}:${normalizedOptions}`; 8133 let receivedSettings = false; 8134 let socket; 8135 8136 try { 8137 const computedOptions = {...options}; 8138 8139 if (computedOptions.settings === undefined) { 8140 computedOptions.settings = this.settings; 8141 } 8142 8143 if (computedOptions.session === undefined) { 8144 computedOptions.session = this.tlsSessionCache.get(name); 8145 } 8146 8147 const createConnection = computedOptions.createConnection || this.createConnection; 8148 8149 // A hacky workaround to enable async `createConnection` 8150 socket = await createConnection.call(this, origin, computedOptions); 8151 computedOptions.createConnection = () => socket; 8152 8153 const session = http2.connect(origin, computedOptions); 8154 session[kCurrentStreamCount] = 0; 8155 session[kGracefullyClosing] = false; 8156 8157 // Node.js return https://false:443 instead of https://1.1.1.1:443 8158 const getOriginSet = () => { 8159 const {socket} = session; 8160 8161 let originSet; 8162 if (socket.servername === false) { 8163 socket.servername = socket.remoteAddress; 8164 originSet = session.originSet; 8165 socket.servername = false; 8166 } else { 8167 originSet = session.originSet; 8168 } 8169 8170 return originSet; 8171 }; 8172 8173 const isFree = () => session[kCurrentStreamCount] < session.remoteSettings.maxConcurrentStreams; 8174 8175 session.socket.once('session', tlsSession => { 8176 this.tlsSessionCache.set(name, tlsSession); 8177 }); 8178 8179 session.once('error', error => { 8180 // Listeners are empty when the session successfully connected. 8181 for (let index = 0; index < listeners.length; index++) { 8182 listeners[index].reject(error); 8183 } 8184 8185 // The connection got broken, purge the cache. 8186 this.tlsSessionCache.delete(name); 8187 }); 8188 8189 session.setTimeout(this.timeout, () => { 8190 // Terminates all streams owned by this session. 8191 session.destroy(); 8192 }); 8193 8194 session.once('close', () => { 8195 this._sessionCount--; 8196 8197 if (receivedSettings) { 8198 // Assumes session `close` is emitted after request `close` 8199 this._emptySessionCount--; 8200 8201 // This cannot be moved to the stream logic, 8202 // because there may be a session that hadn't made a single request. 8203 const where = this.sessions[normalizedOptions]; 8204 8205 if (where.length === 1) { 8206 delete this.sessions[normalizedOptions]; 8207 } else { 8208 where.splice(where.indexOf(session), 1); 8209 } 8210 } else { 8211 // Broken connection 8212 removeFromQueue(); 8213 8214 const error = new Error('Session closed without receiving a SETTINGS frame'); 8215 error.code = 'HTTP2WRAPPER_NOSETTINGS'; 8216 8217 for (let index = 0; index < listeners.length; index++) { 8218 listeners[index].reject(error); 8219 } 8220 } 8221 8222 // There may be another session awaiting. 8223 this._processQueue(); 8224 }); 8225 8226 // Iterates over the queue and processes listeners. 8227 const processListeners = () => { 8228 const queue = this.queue[normalizedOptions]; 8229 if (!queue) { 8230 return; 8231 } 8232 8233 const originSet = session[kOriginSet]; 8234 8235 for (let index = 0; index < originSet.length; index++) { 8236 const origin = originSet[index]; 8237 8238 if (origin in queue) { 8239 const {listeners, completed} = queue[origin]; 8240 8241 let index = 0; 8242 8243 // Prevents session overloading. 8244 while (index < listeners.length && isFree()) { 8245 // We assume `resolve(...)` calls `request(...)` *directly*, 8246 // otherwise the session will get overloaded. 8247 listeners[index].resolve(session); 8248 8249 index++; 8250 } 8251 8252 queue[origin].listeners.splice(0, index); 8253 8254 if (queue[origin].listeners.length === 0 && !completed) { 8255 delete queue[origin]; 8256 8257 if (--queue[kLength] === 0) { 8258 delete this.queue[normalizedOptions]; 8259 break; 8260 } 8261 } 8262 8263 // We're no longer free, no point in continuing. 8264 if (!isFree()) { 8265 break; 8266 } 8267 } 8268 } 8269 }; 8270 8271 // The Origin Set cannot shrink. No need to check if it suddenly became covered by another one. 8272 session.on('origin', () => { 8273 session[kOriginSet] = getOriginSet() || []; 8274 session[kGracefullyClosing] = false; 8275 closeSessionIfCovered(this.sessions[normalizedOptions], session); 8276 8277 if (session[kGracefullyClosing] || !isFree()) { 8278 return; 8279 } 8280 8281 processListeners(); 8282 8283 if (!isFree()) { 8284 return; 8285 } 8286 8287 // Close covered sessions (if possible). 8288 closeCoveredSessions(this.sessions[normalizedOptions], session); 8289 }); 8290 8291 session.once('remoteSettings', () => { 8292 // The Agent could have been destroyed already. 8293 if (entry.destroyed) { 8294 const error = new Error('Agent has been destroyed'); 8295 8296 for (let index = 0; index < listeners.length; index++) { 8297 listeners[index].reject(error); 8298 } 8299 8300 session.destroy(); 8301 return; 8302 } 8303 8304 // See https://github.com/nodejs/node/issues/38426 8305 if (session.setLocalWindowSize) { 8306 session.setLocalWindowSize(1024 * 1024 * 4); // 4 MB 8307 } 8308 8309 session[kOriginSet] = getOriginSet() || []; 8310 8311 if (session.socket.encrypted) { 8312 const mainOrigin = session[kOriginSet][0]; 8313 if (mainOrigin !== normalizedOrigin) { 8314 const error = new Error(`Requested origin ${normalizedOrigin} does not match server ${mainOrigin}`); 8315 8316 for (let index = 0; index < listeners.length; index++) { 8317 listeners[index].reject(error); 8318 } 8319 8320 session.destroy(); 8321 return; 8322 } 8323 } 8324 8325 removeFromQueue(); 8326 8327 { 8328 const where = this.sessions; 8329 8330 if (normalizedOptions in where) { 8331 const sessions = where[normalizedOptions]; 8332 sessions.splice(getSortedIndex(sessions, session, compareSessions), 0, session); 8333 } else { 8334 where[normalizedOptions] = [session]; 8335 } 8336 } 8337 8338 receivedSettings = true; 8339 this._emptySessionCount++; 8340 8341 this.emit('session', session); 8342 this._accept(session, listeners, normalizedOrigin, options); 8343 8344 if (session[kCurrentStreamCount] === 0 && this._emptySessionCount > this.maxEmptySessions) { 8345 this.closeEmptySessions(this._emptySessionCount - this.maxEmptySessions); 8346 } 8347 8348 // `session.remoteSettings.maxConcurrentStreams` might get increased 8349 session.on('remoteSettings', () => { 8350 if (!isFree()) { 8351 return; 8352 } 8353 8354 processListeners(); 8355 8356 if (!isFree()) { 8357 return; 8358 } 8359 8360 // In case the Origin Set changes 8361 closeCoveredSessions(this.sessions[normalizedOptions], session); 8362 }); 8363 }); 8364 8365 // Shim `session.request()` in order to catch all streams 8366 session[kRequest] = session.request; 8367 session.request = (headers, streamOptions) => { 8368 if (session[kGracefullyClosing]) { 8369 throw new Error('The session is gracefully closing. No new streams are allowed.'); 8370 } 8371 8372 const stream = session[kRequest](headers, streamOptions); 8373 8374 // The process won't exit until the session is closed or all requests are gone. 8375 session.ref(); 8376 8377 if (session[kCurrentStreamCount]++ === 0) { 8378 this._emptySessionCount--; 8379 } 8380 8381 stream.once('close', () => { 8382 if (--session[kCurrentStreamCount] === 0) { 8383 this._emptySessionCount++; 8384 session.unref(); 8385 8386 if (this._emptySessionCount > this.maxEmptySessions || session[kGracefullyClosing]) { 8387 session.close(); 8388 return; 8389 } 8390 } 8391 8392 if (session.destroyed || session.closed) { 8393 return; 8394 } 8395 8396 if (isFree() && !closeSessionIfCovered(this.sessions[normalizedOptions], session)) { 8397 closeCoveredSessions(this.sessions[normalizedOptions], session); 8398 processListeners(); 8399 8400 if (session[kCurrentStreamCount] === 0) { 8401 this._processQueue(); 8402 } 8403 } 8404 }); 8405 8406 return stream; 8407 }; 8408 } catch (error) { 8409 removeFromQueue(); 8410 this._sessionCount--; 8411 8412 for (let index = 0; index < listeners.length; index++) { 8413 listeners[index].reject(error); 8414 } 8415 } 8416 }; 8417 8418 entry.listeners = listeners; 8419 entry.completed = false; 8420 entry.destroyed = false; 8421 8422 this.queue[normalizedOptions][normalizedOrigin] = entry; 8423 this.queue[normalizedOptions][kLength]++; 8424 this._processQueue(); 8425 }); 8426 } 8427 8428 request(origin, options, headers, streamOptions) { 8429 return new Promise((resolve, reject) => { 8430 this.getSession(origin, options, [{ 8431 reject, 8432 resolve: session => { 8433 try { 8434 const stream = session.request(headers, streamOptions); 8435 8436 // Do not throw before `request(...)` has been awaited 8437 delayAsyncDestroy(stream); 8438 8439 resolve(stream); 8440 } catch (error) { 8441 reject(error); 8442 } 8443 } 8444 }]); 8445 }); 8446 } 8447 8448 async createConnection(origin, options) { 8449 return Agent.connect(origin, options); 8450 } 8451 8452 static connect(origin, options) { 8453 options.ALPNProtocols = ['h2']; 8454 8455 const port = origin.port || 443; 8456 const host = origin.hostname; 8457 8458 if (typeof options.servername === 'undefined') { 8459 options.servername = host; 8460 } 8461 8462 const socket = tls.connect(port, host, options); 8463 8464 if (options.socket) { 8465 socket._peername = { 8466 family: undefined, 8467 address: undefined, 8468 port 8469 }; 8470 } 8471 8472 return socket; 8473 } 8474 8475 closeEmptySessions(maxCount = Number.POSITIVE_INFINITY) { 8476 let closedCount = 0; 8477 8478 const {sessions} = this; 8479 8480 // eslint-disable-next-line guard-for-in 8481 for (const key in sessions) { 8482 const thisSessions = sessions[key]; 8483 8484 for (let index = 0; index < thisSessions.length; index++) { 8485 const session = thisSessions[index]; 8486 8487 if (session[kCurrentStreamCount] === 0) { 8488 closedCount++; 8489 session.close(); 8490 8491 if (closedCount >= maxCount) { 8492 return closedCount; 8493 } 8494 } 8495 } 8496 } 8497 8498 return closedCount; 8499 } 8500 8501 destroy(reason) { 8502 const {sessions, queue} = this; 8503 8504 // eslint-disable-next-line guard-for-in 8505 for (const key in sessions) { 8506 const thisSessions = sessions[key]; 8507 8508 for (let index = 0; index < thisSessions.length; index++) { 8509 thisSessions[index].destroy(reason); 8510 } 8511 } 8512 8513 // eslint-disable-next-line guard-for-in 8514 for (const normalizedOptions in queue) { 8515 const entries = queue[normalizedOptions]; 8516 8517 // eslint-disable-next-line guard-for-in 8518 for (const normalizedOrigin in entries) { 8519 entries[normalizedOrigin].destroyed = true; 8520 } 8521 } 8522 8523 // New requests should NOT attach to destroyed sessions 8524 this.queue = {}; 8525 this.tlsSessionCache.clear(); 8526 } 8527 8528 get emptySessionCount() { 8529 return this._emptySessionCount; 8530 } 8531 8532 get pendingSessionCount() { 8533 return this._sessionCount - this._emptySessionCount; 8534 } 8535 8536 get sessionCount() { 8537 return this._sessionCount; 8538 } 8539 } 8540 8541 Agent.kCurrentStreamCount = kCurrentStreamCount; 8542 Agent.kGracefullyClosing = kGracefullyClosing; 8543 8544 module.exports = { 8545 Agent, 8546 globalAgent: new Agent() 8547 }; 8548 8549 8550 /***/ }), 8551 8552 /***/ 7167: 8553 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 8554 8555 8556 // See https://github.com/facebook/jest/issues/2549 8557 // eslint-disable-next-line node/prefer-global/url 8558 const {URL, urlToHttpOptions} = __nccwpck_require__(7310); 8559 const http = __nccwpck_require__(3685); 8560 const https = __nccwpck_require__(5687); 8561 const resolveALPN = __nccwpck_require__(6624); 8562 const QuickLRU = __nccwpck_require__(9273); 8563 const {Agent, globalAgent} = __nccwpck_require__(9898); 8564 const Http2ClientRequest = __nccwpck_require__(9632); 8565 const calculateServerName = __nccwpck_require__(1982); 8566 const delayAsyncDestroy = __nccwpck_require__(9237); 8567 8568 const cache = new QuickLRU({maxSize: 100}); 8569 const queue = new Map(); 8570 8571 const installSocket = (agent, socket, options) => { 8572 socket._httpMessage = {shouldKeepAlive: true}; 8573 8574 const onFree = () => { 8575 agent.emit('free', socket, options); 8576 }; 8577 8578 socket.on('free', onFree); 8579 8580 const onClose = () => { 8581 agent.removeSocket(socket, options); 8582 }; 8583 8584 socket.on('close', onClose); 8585 8586 const onTimeout = () => { 8587 const {freeSockets} = agent; 8588 8589 for (const sockets of Object.values(freeSockets)) { 8590 if (sockets.includes(socket)) { 8591 socket.destroy(); 8592 return; 8593 } 8594 } 8595 }; 8596 8597 socket.on('timeout', onTimeout); 8598 8599 const onRemove = () => { 8600 agent.removeSocket(socket, options); 8601 socket.off('close', onClose); 8602 socket.off('free', onFree); 8603 socket.off('timeout', onTimeout); 8604 socket.off('agentRemove', onRemove); 8605 }; 8606 8607 socket.on('agentRemove', onRemove); 8608 8609 agent.emit('free', socket, options); 8610 }; 8611 8612 const createResolveProtocol = (cache, queue = new Map(), connect = undefined) => { 8613 return async options => { 8614 const name = `${options.host}:${options.port}:${options.ALPNProtocols.sort()}`; 8615 8616 if (!cache.has(name)) { 8617 if (queue.has(name)) { 8618 const result = await queue.get(name); 8619 return {alpnProtocol: result.alpnProtocol}; 8620 } 8621 8622 const {path} = options; 8623 options.path = options.socketPath; 8624 8625 const resultPromise = resolveALPN(options, connect); 8626 queue.set(name, resultPromise); 8627 8628 try { 8629 const result = await resultPromise; 8630 8631 cache.set(name, result.alpnProtocol); 8632 queue.delete(name); 8633 8634 options.path = path; 8635 8636 return result; 8637 } catch (error) { 8638 queue.delete(name); 8639 8640 options.path = path; 8641 8642 throw error; 8643 } 8644 } 8645 8646 return {alpnProtocol: cache.get(name)}; 8647 }; 8648 }; 8649 8650 const defaultResolveProtocol = createResolveProtocol(cache, queue); 8651 8652 module.exports = async (input, options, callback) => { 8653 if (typeof input === 'string') { 8654 input = urlToHttpOptions(new URL(input)); 8655 } else if (input instanceof URL) { 8656 input = urlToHttpOptions(input); 8657 } else { 8658 input = {...input}; 8659 } 8660 8661 if (typeof options === 'function' || options === undefined) { 8662 // (options, callback) 8663 callback = options; 8664 options = input; 8665 } else { 8666 // (input, options, callback) 8667 options = Object.assign(input, options); 8668 } 8669 8670 options.ALPNProtocols = options.ALPNProtocols || ['h2', 'http/1.1']; 8671 8672 if (!Array.isArray(options.ALPNProtocols) || options.ALPNProtocols.length === 0) { 8673 throw new Error('The `ALPNProtocols` option must be an Array with at least one entry'); 8674 } 8675 8676 options.protocol = options.protocol || 'https:'; 8677 const isHttps = options.protocol === 'https:'; 8678 8679 options.host = options.hostname || options.host || 'localhost'; 8680 options.session = options.tlsSession; 8681 options.servername = options.servername || calculateServerName((options.headers && options.headers.host) || options.host); 8682 options.port = options.port || (isHttps ? 443 : 80); 8683 options._defaultAgent = isHttps ? https.globalAgent : http.globalAgent; 8684 8685 const resolveProtocol = options.resolveProtocol || defaultResolveProtocol; 8686 8687 // Note: We don't support `h2session` here 8688 8689 let {agent} = options; 8690 if (agent !== undefined && agent !== false && agent.constructor.name !== 'Object') { 8691 throw new Error('The `options.agent` can be only an object `http`, `https` or `http2` properties'); 8692 } 8693 8694 if (isHttps) { 8695 options.resolveSocket = true; 8696 8697 let {socket, alpnProtocol, timeout} = await resolveProtocol(options); 8698 8699 if (timeout) { 8700 if (socket) { 8701 socket.destroy(); 8702 } 8703 8704 const error = new Error(`Timed out resolving ALPN: ${options.timeout} ms`); 8705 error.code = 'ETIMEDOUT'; 8706 error.ms = options.timeout; 8707 8708 throw error; 8709 } 8710 8711 // We can't accept custom `createConnection` because the API is different for HTTP/2 8712 if (socket && options.createConnection) { 8713 socket.destroy(); 8714 socket = undefined; 8715 } 8716 8717 delete options.resolveSocket; 8718 8719 const isHttp2 = alpnProtocol === 'h2'; 8720 8721 if (agent) { 8722 agent = isHttp2 ? agent.http2 : agent.https; 8723 options.agent = agent; 8724 } 8725 8726 if (agent === undefined) { 8727 agent = isHttp2 ? globalAgent : https.globalAgent; 8728 } 8729 8730 if (socket) { 8731 if (agent === false) { 8732 socket.destroy(); 8733 } else { 8734 const defaultCreateConnection = (isHttp2 ? Agent : https.Agent).prototype.createConnection; 8735 8736 if (agent.createConnection === defaultCreateConnection) { 8737 if (isHttp2) { 8738 options._reuseSocket = socket; 8739 } else { 8740 installSocket(agent, socket, options); 8741 } 8742 } else { 8743 socket.destroy(); 8744 } 8745 } 8746 } 8747 8748 if (isHttp2) { 8749 return delayAsyncDestroy(new Http2ClientRequest(options, callback)); 8750 } 8751 } else if (agent) { 8752 options.agent = agent.http; 8753 } 8754 8755 return delayAsyncDestroy(http.request(options, callback)); 8756 }; 8757 8758 module.exports.protocolCache = cache; 8759 module.exports.resolveProtocol = defaultResolveProtocol; 8760 module.exports.createResolveProtocol = createResolveProtocol; 8761 8762 8763 /***/ }), 8764 8765 /***/ 9632: 8766 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 8767 8768 8769 // See https://github.com/facebook/jest/issues/2549 8770 // eslint-disable-next-line node/prefer-global/url 8771 const {URL, urlToHttpOptions} = __nccwpck_require__(7310); 8772 const http2 = __nccwpck_require__(5158); 8773 const {Writable} = __nccwpck_require__(2781); 8774 const {Agent, globalAgent} = __nccwpck_require__(9898); 8775 const IncomingMessage = __nccwpck_require__(2575); 8776 const proxyEvents = __nccwpck_require__(1818); 8777 const { 8778 ERR_INVALID_ARG_TYPE, 8779 ERR_INVALID_PROTOCOL, 8780 ERR_HTTP_HEADERS_SENT 8781 } = __nccwpck_require__(7087); 8782 const validateHeaderName = __nccwpck_require__(4592); 8783 const validateHeaderValue = __nccwpck_require__(3549); 8784 const proxySocketHandler = __nccwpck_require__(9404); 8785 8786 const { 8787 HTTP2_HEADER_STATUS, 8788 HTTP2_HEADER_METHOD, 8789 HTTP2_HEADER_PATH, 8790 HTTP2_HEADER_AUTHORITY, 8791 HTTP2_METHOD_CONNECT 8792 } = http2.constants; 8793 8794 const kHeaders = Symbol('headers'); 8795 const kOrigin = Symbol('origin'); 8796 const kSession = Symbol('session'); 8797 const kOptions = Symbol('options'); 8798 const kFlushedHeaders = Symbol('flushedHeaders'); 8799 const kJobs = Symbol('jobs'); 8800 const kPendingAgentPromise = Symbol('pendingAgentPromise'); 8801 8802 class ClientRequest extends Writable { 8803 constructor(input, options, callback) { 8804 super({ 8805 autoDestroy: false, 8806 emitClose: false 8807 }); 8808 8809 if (typeof input === 'string') { 8810 input = urlToHttpOptions(new URL(input)); 8811 } else if (input instanceof URL) { 8812 input = urlToHttpOptions(input); 8813 } else { 8814 input = {...input}; 8815 } 8816 8817 if (typeof options === 'function' || options === undefined) { 8818 // (options, callback) 8819 callback = options; 8820 options = input; 8821 } else { 8822 // (input, options, callback) 8823 options = Object.assign(input, options); 8824 } 8825 8826 if (options.h2session) { 8827 this[kSession] = options.h2session; 8828 8829 if (this[kSession].destroyed) { 8830 throw new Error('The session has been closed already'); 8831 } 8832 8833 this.protocol = this[kSession].socket.encrypted ? 'https:' : 'http:'; 8834 } else if (options.agent === false) { 8835 this.agent = new Agent({maxEmptySessions: 0}); 8836 } else if (typeof options.agent === 'undefined' || options.agent === null) { 8837 this.agent = globalAgent; 8838 } else if (typeof options.agent.request === 'function') { 8839 this.agent = options.agent; 8840 } else { 8841 throw new ERR_INVALID_ARG_TYPE('options.agent', ['http2wrapper.Agent-like Object', 'undefined', 'false'], options.agent); 8842 } 8843 8844 if (this.agent) { 8845 this.protocol = this.agent.protocol; 8846 } 8847 8848 if (options.protocol && options.protocol !== this.protocol) { 8849 throw new ERR_INVALID_PROTOCOL(options.protocol, this.protocol); 8850 } 8851 8852 if (!options.port) { 8853 options.port = options.defaultPort || (this.agent && this.agent.defaultPort) || 443; 8854 } 8855 8856 options.host = options.hostname || options.host || 'localhost'; 8857 8858 // Unused 8859 delete options.hostname; 8860 8861 const {timeout} = options; 8862 options.timeout = undefined; 8863 8864 this[kHeaders] = Object.create(null); 8865 this[kJobs] = []; 8866 8867 this[kPendingAgentPromise] = undefined; 8868 8869 this.socket = null; 8870 this.connection = null; 8871 8872 this.method = options.method || 'GET'; 8873 8874 if (!(this.method === 'CONNECT' && (options.path === '/' || options.path === undefined))) { 8875 this.path = options.path; 8876 } 8877 8878 this.res = null; 8879 this.aborted = false; 8880 this.reusedSocket = false; 8881 8882 const {headers} = options; 8883 if (headers) { 8884 // eslint-disable-next-line guard-for-in 8885 for (const header in headers) { 8886 this.setHeader(header, headers[header]); 8887 } 8888 } 8889 8890 if (options.auth && !('authorization' in this[kHeaders])) { 8891 this[kHeaders].authorization = 'Basic ' + Buffer.from(options.auth).toString('base64'); 8892 } 8893 8894 options.session = options.tlsSession; 8895 options.path = options.socketPath; 8896 8897 this[kOptions] = options; 8898 8899 // Clients that generate HTTP/2 requests directly SHOULD use the :authority pseudo-header field instead of the Host header field. 8900 this[kOrigin] = new URL(`${this.protocol}//${options.servername || options.host}:${options.port}`); 8901 8902 // A socket is being reused 8903 const reuseSocket = options._reuseSocket; 8904 if (reuseSocket) { 8905 options.createConnection = (...args) => { 8906 if (reuseSocket.destroyed) { 8907 return this.agent.createConnection(...args); 8908 } 8909 8910 return reuseSocket; 8911 }; 8912 8913 // eslint-disable-next-line promise/prefer-await-to-then 8914 this.agent.getSession(this[kOrigin], this[kOptions]).catch(() => {}); 8915 } 8916 8917 if (timeout) { 8918 this.setTimeout(timeout); 8919 } 8920 8921 if (callback) { 8922 this.once('response', callback); 8923 } 8924 8925 this[kFlushedHeaders] = false; 8926 } 8927 8928 get method() { 8929 return this[kHeaders][HTTP2_HEADER_METHOD]; 8930 } 8931 8932 set method(value) { 8933 if (value) { 8934 this[kHeaders][HTTP2_HEADER_METHOD] = value.toUpperCase(); 8935 } 8936 } 8937 8938 get path() { 8939 const header = this.method === 'CONNECT' ? HTTP2_HEADER_AUTHORITY : HTTP2_HEADER_PATH; 8940 8941 return this[kHeaders][header]; 8942 } 8943 8944 set path(value) { 8945 if (value) { 8946 const header = this.method === 'CONNECT' ? HTTP2_HEADER_AUTHORITY : HTTP2_HEADER_PATH; 8947 8948 this[kHeaders][header] = value; 8949 } 8950 } 8951 8952 get host() { 8953 return this[kOrigin].hostname; 8954 } 8955 8956 set host(_value) { 8957 // Do nothing as this is read only. 8958 } 8959 8960 get _mustNotHaveABody() { 8961 return this.method === 'GET' || this.method === 'HEAD' || this.method === 'DELETE'; 8962 } 8963 8964 _write(chunk, encoding, callback) { 8965 // https://github.com/nodejs/node/blob/654df09ae0c5e17d1b52a900a545f0664d8c7627/lib/internal/http2/util.js#L148-L156 8966 if (this._mustNotHaveABody) { 8967 callback(new Error('The GET, HEAD and DELETE methods must NOT have a body')); 8968 /* istanbul ignore next: Node.js 12 throws directly */ 8969 return; 8970 } 8971 8972 this.flushHeaders(); 8973 8974 const callWrite = () => this._request.write(chunk, encoding, callback); 8975 if (this._request) { 8976 callWrite(); 8977 } else { 8978 this[kJobs].push(callWrite); 8979 } 8980 } 8981 8982 _final(callback) { 8983 this.flushHeaders(); 8984 8985 const callEnd = () => { 8986 // For GET, HEAD and DELETE and CONNECT 8987 if (this._mustNotHaveABody || this.method === 'CONNECT') { 8988 callback(); 8989 return; 8990 } 8991 8992 this._request.end(callback); 8993 }; 8994 8995 if (this._request) { 8996 callEnd(); 8997 } else { 8998 this[kJobs].push(callEnd); 8999 } 9000 } 9001 9002 abort() { 9003 if (this.res && this.res.complete) { 9004 return; 9005 } 9006 9007 if (!this.aborted) { 9008 process.nextTick(() => this.emit('abort')); 9009 } 9010 9011 this.aborted = true; 9012 9013 this.destroy(); 9014 } 9015 9016 async _destroy(error, callback) { 9017 if (this.res) { 9018 this.res._dump(); 9019 } 9020 9021 if (this._request) { 9022 this._request.destroy(); 9023 } else { 9024 process.nextTick(() => { 9025 this.emit('close'); 9026 }); 9027 } 9028 9029 try { 9030 await this[kPendingAgentPromise]; 9031 } catch (internalError) { 9032 if (this.aborted) { 9033 error = internalError; 9034 } 9035 } 9036 9037 callback(error); 9038 } 9039 9040 async flushHeaders() { 9041 if (this[kFlushedHeaders] || this.destroyed) { 9042 return; 9043 } 9044 9045 this[kFlushedHeaders] = true; 9046 9047 const isConnectMethod = this.method === HTTP2_METHOD_CONNECT; 9048 9049 // The real magic is here 9050 const onStream = stream => { 9051 this._request = stream; 9052 9053 if (this.destroyed) { 9054 stream.destroy(); 9055 return; 9056 } 9057 9058 // Forwards `timeout`, `continue`, `close` and `error` events to this instance. 9059 if (!isConnectMethod) { 9060 // TODO: Should we proxy `close` here? 9061 proxyEvents(stream, this, ['timeout', 'continue']); 9062 } 9063 9064 stream.once('error', error => { 9065 this.destroy(error); 9066 }); 9067 9068 stream.once('aborted', () => { 9069 const {res} = this; 9070 if (res) { 9071 res.aborted = true; 9072 res.emit('aborted'); 9073 res.destroy(); 9074 } else { 9075 this.destroy(new Error('The server aborted the HTTP/2 stream')); 9076 } 9077 }); 9078 9079 const onResponse = (headers, flags, rawHeaders) => { 9080 // If we were to emit raw request stream, it would be as fast as the native approach. 9081 // Note that wrapping the raw stream in a Proxy instance won't improve the performance (already tested it). 9082 const response = new IncomingMessage(this.socket, stream.readableHighWaterMark); 9083 this.res = response; 9084 9085 // Undocumented, but it is used by `cacheable-request` 9086 response.url = `${this[kOrigin].origin}${this.path}`; 9087 9088 response.req = this; 9089 response.statusCode = headers[HTTP2_HEADER_STATUS]; 9090 response.headers = headers; 9091 response.rawHeaders = rawHeaders; 9092 9093 response.once('end', () => { 9094 response.complete = true; 9095 9096 // Has no effect, just be consistent with the Node.js behavior 9097 response.socket = null; 9098 response.connection = null; 9099 }); 9100 9101 if (isConnectMethod) { 9102 response.upgrade = true; 9103 9104 // The HTTP1 API says the socket is detached here, 9105 // but we can't do that so we pass the original HTTP2 request. 9106 if (this.emit('connect', response, stream, Buffer.alloc(0))) { 9107 this.emit('close'); 9108 } else { 9109 // No listeners attached, destroy the original request. 9110 stream.destroy(); 9111 } 9112 } else { 9113 // Forwards data 9114 stream.on('data', chunk => { 9115 if (!response._dumped && !response.push(chunk)) { 9116 stream.pause(); 9117 } 9118 }); 9119 9120 stream.once('end', () => { 9121 if (!this.aborted) { 9122 response.push(null); 9123 } 9124 }); 9125 9126 if (!this.emit('response', response)) { 9127 // No listeners attached, dump the response. 9128 response._dump(); 9129 } 9130 } 9131 }; 9132 9133 // This event tells we are ready to listen for the data. 9134 stream.once('response', onResponse); 9135 9136 // Emits `information` event 9137 stream.once('headers', headers => this.emit('information', {statusCode: headers[HTTP2_HEADER_STATUS]})); 9138 9139 stream.once('trailers', (trailers, flags, rawTrailers) => { 9140 const {res} = this; 9141 9142 // https://github.com/nodejs/node/issues/41251 9143 if (res === null) { 9144 onResponse(trailers, flags, rawTrailers); 9145 return; 9146 } 9147 9148 // Assigns trailers to the response object. 9149 res.trailers = trailers; 9150 res.rawTrailers = rawTrailers; 9151 }); 9152 9153 stream.once('close', () => { 9154 const {aborted, res} = this; 9155 if (res) { 9156 if (aborted) { 9157 res.aborted = true; 9158 res.emit('aborted'); 9159 res.destroy(); 9160 } 9161 9162 const finish = () => { 9163 res.emit('close'); 9164 9165 this.destroy(); 9166 this.emit('close'); 9167 }; 9168 9169 if (res.readable) { 9170 res.once('end', finish); 9171 } else { 9172 finish(); 9173 } 9174 9175 return; 9176 } 9177 9178 if (!this.destroyed) { 9179 this.destroy(new Error('The HTTP/2 stream has been early terminated')); 9180 this.emit('close'); 9181 return; 9182 } 9183 9184 this.destroy(); 9185 this.emit('close'); 9186 }); 9187 9188 this.socket = new Proxy(stream, proxySocketHandler); 9189 9190 for (const job of this[kJobs]) { 9191 job(); 9192 } 9193 9194 this[kJobs].length = 0; 9195 9196 this.emit('socket', this.socket); 9197 }; 9198 9199 if (!(HTTP2_HEADER_AUTHORITY in this[kHeaders]) && !isConnectMethod) { 9200 this[kHeaders][HTTP2_HEADER_AUTHORITY] = this[kOrigin].host; 9201 } 9202 9203 // Makes a HTTP2 request 9204 if (this[kSession]) { 9205 try { 9206 onStream(this[kSession].request(this[kHeaders])); 9207 } catch (error) { 9208 this.destroy(error); 9209 } 9210 } else { 9211 this.reusedSocket = true; 9212 9213 try { 9214 const promise = this.agent.request(this[kOrigin], this[kOptions], this[kHeaders]); 9215 this[kPendingAgentPromise] = promise; 9216 9217 onStream(await promise); 9218 9219 this[kPendingAgentPromise] = false; 9220 } catch (error) { 9221 this[kPendingAgentPromise] = false; 9222 9223 this.destroy(error); 9224 } 9225 } 9226 } 9227 9228 get connection() { 9229 return this.socket; 9230 } 9231 9232 set connection(value) { 9233 this.socket = value; 9234 } 9235 9236 getHeaderNames() { 9237 return Object.keys(this[kHeaders]); 9238 } 9239 9240 hasHeader(name) { 9241 if (typeof name !== 'string') { 9242 throw new ERR_INVALID_ARG_TYPE('name', 'string', name); 9243 } 9244 9245 return Boolean(this[kHeaders][name.toLowerCase()]); 9246 } 9247 9248 getHeader(name) { 9249 if (typeof name !== 'string') { 9250 throw new ERR_INVALID_ARG_TYPE('name', 'string', name); 9251 } 9252 9253 return this[kHeaders][name.toLowerCase()]; 9254 } 9255 9256 get headersSent() { 9257 return this[kFlushedHeaders]; 9258 } 9259 9260 removeHeader(name) { 9261 if (typeof name !== 'string') { 9262 throw new ERR_INVALID_ARG_TYPE('name', 'string', name); 9263 } 9264 9265 if (this.headersSent) { 9266 throw new ERR_HTTP_HEADERS_SENT('remove'); 9267 } 9268 9269 delete this[kHeaders][name.toLowerCase()]; 9270 } 9271 9272 setHeader(name, value) { 9273 if (this.headersSent) { 9274 throw new ERR_HTTP_HEADERS_SENT('set'); 9275 } 9276 9277 validateHeaderName(name); 9278 validateHeaderValue(name, value); 9279 9280 const lowercased = name.toLowerCase(); 9281 9282 if (lowercased === 'connection') { 9283 if (value.toLowerCase() === 'keep-alive') { 9284 return; 9285 } 9286 9287 throw new Error(`Invalid 'connection' header: ${value}`); 9288 } 9289 9290 if (lowercased === 'host' && this.method === 'CONNECT') { 9291 this[kHeaders][HTTP2_HEADER_AUTHORITY] = value; 9292 } else { 9293 this[kHeaders][lowercased] = value; 9294 } 9295 } 9296 9297 setNoDelay() { 9298 // HTTP2 sockets cannot be malformed, do nothing. 9299 } 9300 9301 setSocketKeepAlive() { 9302 // HTTP2 sockets cannot be malformed, do nothing. 9303 } 9304 9305 setTimeout(ms, callback) { 9306 const applyTimeout = () => this._request.setTimeout(ms, callback); 9307 9308 if (this._request) { 9309 applyTimeout(); 9310 } else { 9311 this[kJobs].push(applyTimeout); 9312 } 9313 9314 return this; 9315 } 9316 9317 get maxHeadersCount() { 9318 if (!this.destroyed && this._request) { 9319 return this._request.session.localSettings.maxHeaderListSize; 9320 } 9321 9322 return undefined; 9323 } 9324 9325 set maxHeadersCount(_value) { 9326 // Updating HTTP2 settings would affect all requests, do nothing. 9327 } 9328 } 9329 9330 module.exports = ClientRequest; 9331 9332 9333 /***/ }), 9334 9335 /***/ 2575: 9336 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 9337 9338 9339 const {Readable} = __nccwpck_require__(2781); 9340 9341 class IncomingMessage extends Readable { 9342 constructor(socket, highWaterMark) { 9343 super({ 9344 emitClose: false, 9345 autoDestroy: true, 9346 highWaterMark 9347 }); 9348 9349 this.statusCode = null; 9350 this.statusMessage = ''; 9351 this.httpVersion = '2.0'; 9352 this.httpVersionMajor = 2; 9353 this.httpVersionMinor = 0; 9354 this.headers = {}; 9355 this.trailers = {}; 9356 this.req = null; 9357 9358 this.aborted = false; 9359 this.complete = false; 9360 this.upgrade = null; 9361 9362 this.rawHeaders = []; 9363 this.rawTrailers = []; 9364 9365 this.socket = socket; 9366 9367 this._dumped = false; 9368 } 9369 9370 get connection() { 9371 return this.socket; 9372 } 9373 9374 set connection(value) { 9375 this.socket = value; 9376 } 9377 9378 _destroy(error, callback) { 9379 if (!this.readableEnded) { 9380 this.aborted = true; 9381 } 9382 9383 // See https://github.com/nodejs/node/issues/35303 9384 callback(); 9385 9386 this.req._request.destroy(error); 9387 } 9388 9389 setTimeout(ms, callback) { 9390 this.req.setTimeout(ms, callback); 9391 return this; 9392 } 9393 9394 _dump() { 9395 if (!this._dumped) { 9396 this._dumped = true; 9397 9398 this.removeAllListeners('data'); 9399 this.resume(); 9400 } 9401 } 9402 9403 _read() { 9404 if (this.req) { 9405 this.req._request.resume(); 9406 } 9407 } 9408 } 9409 9410 module.exports = IncomingMessage; 9411 9412 9413 /***/ }), 9414 9415 /***/ 4645: 9416 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 9417 9418 9419 const http2 = __nccwpck_require__(5158); 9420 const { 9421 Agent, 9422 globalAgent 9423 } = __nccwpck_require__(9898); 9424 const ClientRequest = __nccwpck_require__(9632); 9425 const IncomingMessage = __nccwpck_require__(2575); 9426 const auto = __nccwpck_require__(7167); 9427 const { 9428 HttpOverHttp2, 9429 HttpsOverHttp2 9430 } = __nccwpck_require__(8795); 9431 const Http2OverHttp2 = __nccwpck_require__(8553); 9432 const { 9433 Http2OverHttp, 9434 Http2OverHttps 9435 } = __nccwpck_require__(9794); 9436 const validateHeaderName = __nccwpck_require__(4592); 9437 const validateHeaderValue = __nccwpck_require__(3549); 9438 9439 const request = (url, options, callback) => new ClientRequest(url, options, callback); 9440 9441 const get = (url, options, callback) => { 9442 // eslint-disable-next-line unicorn/prevent-abbreviations 9443 const req = new ClientRequest(url, options, callback); 9444 req.end(); 9445 9446 return req; 9447 }; 9448 9449 module.exports = { 9450 ...http2, 9451 ClientRequest, 9452 IncomingMessage, 9453 Agent, 9454 globalAgent, 9455 request, 9456 get, 9457 auto, 9458 proxies: { 9459 HttpOverHttp2, 9460 HttpsOverHttp2, 9461 Http2OverHttp2, 9462 Http2OverHttp, 9463 Http2OverHttps 9464 }, 9465 validateHeaderName, 9466 validateHeaderValue 9467 }; 9468 9469 9470 /***/ }), 9471 9472 /***/ 7885: 9473 /***/ ((module) => { 9474 9475 9476 9477 module.exports = self => { 9478 const {username, password} = self.proxyOptions.url; 9479 9480 if (username || password) { 9481 const data = `${username}:${password}`; 9482 const authorization = `Basic ${Buffer.from(data).toString('base64')}`; 9483 9484 return { 9485 'proxy-authorization': authorization, 9486 authorization 9487 }; 9488 } 9489 9490 return {}; 9491 }; 9492 9493 9494 /***/ }), 9495 9496 /***/ 8795: 9497 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 9498 9499 9500 const tls = __nccwpck_require__(4404); 9501 const http = __nccwpck_require__(3685); 9502 const https = __nccwpck_require__(5687); 9503 const JSStreamSocket = __nccwpck_require__(1564); 9504 const {globalAgent} = __nccwpck_require__(9898); 9505 const UnexpectedStatusCodeError = __nccwpck_require__(6203); 9506 const initialize = __nccwpck_require__(1089); 9507 const getAuthorizationHeaders = __nccwpck_require__(7885); 9508 9509 const createConnection = (self, options, callback) => { 9510 (async () => { 9511 try { 9512 const {proxyOptions} = self; 9513 const {url, headers, raw} = proxyOptions; 9514 9515 const stream = await globalAgent.request(url, proxyOptions, { 9516 ...getAuthorizationHeaders(self), 9517 ...headers, 9518 ':method': 'CONNECT', 9519 ':authority': `${options.host}:${options.port}` 9520 }); 9521 9522 stream.once('error', callback); 9523 stream.once('response', headers => { 9524 const statusCode = headers[':status']; 9525 9526 if (statusCode !== 200) { 9527 callback(new UnexpectedStatusCodeError(statusCode, '')); 9528 return; 9529 } 9530 9531 const encrypted = self instanceof https.Agent; 9532 9533 if (raw && encrypted) { 9534 options.socket = stream; 9535 const secureStream = tls.connect(options); 9536 9537 secureStream.once('close', () => { 9538 stream.destroy(); 9539 }); 9540 9541 callback(null, secureStream); 9542 return; 9543 } 9544 9545 const socket = new JSStreamSocket(stream); 9546 socket.encrypted = false; 9547 socket._handle.getpeername = out => { 9548 out.family = undefined; 9549 out.address = undefined; 9550 out.port = undefined; 9551 }; 9552 9553 callback(null, socket); 9554 }); 9555 } catch (error) { 9556 callback(error); 9557 } 9558 })(); 9559 }; 9560 9561 class HttpOverHttp2 extends http.Agent { 9562 constructor(options) { 9563 super(options); 9564 9565 initialize(this, options.proxyOptions); 9566 } 9567 9568 createConnection(options, callback) { 9569 createConnection(this, options, callback); 9570 } 9571 } 9572 9573 class HttpsOverHttp2 extends https.Agent { 9574 constructor(options) { 9575 super(options); 9576 9577 initialize(this, options.proxyOptions); 9578 } 9579 9580 createConnection(options, callback) { 9581 createConnection(this, options, callback); 9582 } 9583 } 9584 9585 module.exports = { 9586 HttpOverHttp2, 9587 HttpsOverHttp2 9588 }; 9589 9590 9591 /***/ }), 9592 9593 /***/ 9794: 9594 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 9595 9596 9597 const http = __nccwpck_require__(3685); 9598 const https = __nccwpck_require__(5687); 9599 const Http2OverHttpX = __nccwpck_require__(1857); 9600 const getAuthorizationHeaders = __nccwpck_require__(7885); 9601 9602 const getStream = request => new Promise((resolve, reject) => { 9603 const onConnect = (response, socket, head) => { 9604 socket.unshift(head); 9605 9606 request.off('error', reject); 9607 resolve([socket, response.statusCode, response.statusMessage]); 9608 }; 9609 9610 request.once('error', reject); 9611 request.once('connect', onConnect); 9612 }); 9613 9614 class Http2OverHttp extends Http2OverHttpX { 9615 async _getProxyStream(authority) { 9616 const {proxyOptions} = this; 9617 const {url, headers} = this.proxyOptions; 9618 9619 const network = url.protocol === 'https:' ? https : http; 9620 9621 // `new URL('https://localhost/httpbin.org:443')` results in 9622 // a `/httpbin.org:443` path, which has an invalid leading slash. 9623 const request = network.request({ 9624 ...proxyOptions, 9625 hostname: url.hostname, 9626 port: url.port, 9627 path: authority, 9628 headers: { 9629 ...getAuthorizationHeaders(this), 9630 ...headers, 9631 host: authority 9632 }, 9633 method: 'CONNECT' 9634 }).end(); 9635 9636 return getStream(request); 9637 } 9638 } 9639 9640 module.exports = { 9641 Http2OverHttp, 9642 Http2OverHttps: Http2OverHttp 9643 }; 9644 9645 9646 /***/ }), 9647 9648 /***/ 8553: 9649 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 9650 9651 9652 const {globalAgent} = __nccwpck_require__(9898); 9653 const Http2OverHttpX = __nccwpck_require__(1857); 9654 const getAuthorizationHeaders = __nccwpck_require__(7885); 9655 9656 const getStatusCode = stream => new Promise((resolve, reject) => { 9657 stream.once('error', reject); 9658 stream.once('response', headers => { 9659 stream.off('error', reject); 9660 resolve(headers[':status']); 9661 }); 9662 }); 9663 9664 class Http2OverHttp2 extends Http2OverHttpX { 9665 async _getProxyStream(authority) { 9666 const {proxyOptions} = this; 9667 9668 const headers = { 9669 ...getAuthorizationHeaders(this), 9670 ...proxyOptions.headers, 9671 ':method': 'CONNECT', 9672 ':authority': authority 9673 }; 9674 9675 const stream = await globalAgent.request(proxyOptions.url, proxyOptions, headers); 9676 const statusCode = await getStatusCode(stream); 9677 9678 return [stream, statusCode, '']; 9679 } 9680 } 9681 9682 module.exports = Http2OverHttp2; 9683 9684 9685 /***/ }), 9686 9687 /***/ 1857: 9688 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 9689 9690 9691 const {Agent} = __nccwpck_require__(9898); 9692 const JSStreamSocket = __nccwpck_require__(1564); 9693 const UnexpectedStatusCodeError = __nccwpck_require__(6203); 9694 const initialize = __nccwpck_require__(1089); 9695 9696 class Http2OverHttpX extends Agent { 9697 constructor(options) { 9698 super(options); 9699 9700 initialize(this, options.proxyOptions); 9701 } 9702 9703 async createConnection(origin, options) { 9704 const authority = `${origin.hostname}:${origin.port || 443}`; 9705 9706 const [stream, statusCode, statusMessage] = await this._getProxyStream(authority); 9707 if (statusCode !== 200) { 9708 throw new UnexpectedStatusCodeError(statusCode, statusMessage); 9709 } 9710 9711 if (this.proxyOptions.raw) { 9712 options.socket = stream; 9713 } else { 9714 const socket = new JSStreamSocket(stream); 9715 socket.encrypted = false; 9716 socket._handle.getpeername = out => { 9717 out.family = undefined; 9718 out.address = undefined; 9719 out.port = undefined; 9720 }; 9721 9722 return socket; 9723 } 9724 9725 return super.createConnection(origin, options); 9726 } 9727 } 9728 9729 module.exports = Http2OverHttpX; 9730 9731 9732 /***/ }), 9733 9734 /***/ 1089: 9735 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 9736 9737 9738 // See https://github.com/facebook/jest/issues/2549 9739 // eslint-disable-next-line node/prefer-global/url 9740 const {URL} = __nccwpck_require__(7310); 9741 const checkType = __nccwpck_require__(3453); 9742 9743 module.exports = (self, proxyOptions) => { 9744 checkType('proxyOptions', proxyOptions, ['object']); 9745 checkType('proxyOptions.headers', proxyOptions.headers, ['object', 'undefined']); 9746 checkType('proxyOptions.raw', proxyOptions.raw, ['boolean', 'undefined']); 9747 checkType('proxyOptions.url', proxyOptions.url, [URL, 'string']); 9748 9749 const url = new URL(proxyOptions.url); 9750 9751 self.proxyOptions = { 9752 raw: true, 9753 ...proxyOptions, 9754 headers: {...proxyOptions.headers}, 9755 url 9756 }; 9757 }; 9758 9759 9760 /***/ }), 9761 9762 /***/ 6203: 9763 /***/ ((module) => { 9764 9765 9766 9767 class UnexpectedStatusCodeError extends Error { 9768 constructor(statusCode, statusMessage = '') { 9769 super(`The proxy server rejected the request with status code ${statusCode} (${statusMessage || 'empty status message'})`); 9770 this.statusCode = statusCode; 9771 this.statusMessage = statusMessage; 9772 } 9773 } 9774 9775 module.exports = UnexpectedStatusCodeError; 9776 9777 9778 /***/ }), 9779 9780 /***/ 1982: 9781 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 9782 9783 9784 const {isIP} = __nccwpck_require__(1808); 9785 const assert = __nccwpck_require__(9491); 9786 9787 const getHost = host => { 9788 if (host[0] === '[') { 9789 const idx = host.indexOf(']'); 9790 9791 assert(idx !== -1); 9792 return host.slice(1, idx); 9793 } 9794 9795 const idx = host.indexOf(':'); 9796 if (idx === -1) { 9797 return host; 9798 } 9799 9800 return host.slice(0, idx); 9801 }; 9802 9803 module.exports = host => { 9804 const servername = getHost(host); 9805 9806 if (isIP(servername)) { 9807 return ''; 9808 } 9809 9810 return servername; 9811 }; 9812 9813 9814 /***/ }), 9815 9816 /***/ 3453: 9817 /***/ ((module) => { 9818 9819 9820 9821 const checkType = (name, value, types) => { 9822 const valid = types.some(type => { 9823 const typeofType = typeof type; 9824 if (typeofType === 'string') { 9825 return typeof value === type; 9826 } 9827 9828 return value instanceof type; 9829 }); 9830 9831 if (!valid) { 9832 const names = types.map(type => typeof type === 'string' ? type : type.name); 9833 9834 throw new TypeError(`Expected '${name}' to be a type of ${names.join(' or ')}, got ${typeof value}`); 9835 } 9836 }; 9837 9838 module.exports = checkType; 9839 9840 9841 /***/ }), 9842 9843 /***/ 9237: 9844 /***/ ((module) => { 9845 9846 9847 9848 module.exports = stream => { 9849 if (stream.listenerCount('error') !== 0) { 9850 return stream; 9851 } 9852 9853 stream.__destroy = stream._destroy; 9854 stream._destroy = (...args) => { 9855 const callback = args.pop(); 9856 9857 stream.__destroy(...args, async error => { 9858 await Promise.resolve(); 9859 callback(error); 9860 }); 9861 }; 9862 9863 const onError = error => { 9864 // eslint-disable-next-line promise/prefer-await-to-then 9865 Promise.resolve().then(() => { 9866 stream.emit('error', error); 9867 }); 9868 }; 9869 9870 stream.once('error', onError); 9871 9872 // eslint-disable-next-line promise/prefer-await-to-then 9873 Promise.resolve().then(() => { 9874 stream.off('error', onError); 9875 }); 9876 9877 return stream; 9878 }; 9879 9880 9881 /***/ }), 9882 9883 /***/ 7087: 9884 /***/ ((module) => { 9885 9886 9887 /* istanbul ignore file: https://github.com/nodejs/node/blob/master/lib/internal/errors.js */ 9888 9889 const makeError = (Base, key, getMessage) => { 9890 module.exports[key] = class NodeError extends Base { 9891 constructor(...args) { 9892 super(typeof getMessage === 'string' ? getMessage : getMessage(args)); 9893 this.name = `${super.name} [${key}]`; 9894 this.code = key; 9895 } 9896 }; 9897 }; 9898 9899 makeError(TypeError, 'ERR_INVALID_ARG_TYPE', args => { 9900 const type = args[0].includes('.') ? 'property' : 'argument'; 9901 9902 let valid = args[1]; 9903 const isManyTypes = Array.isArray(valid); 9904 9905 if (isManyTypes) { 9906 valid = `${valid.slice(0, -1).join(', ')} or ${valid.slice(-1)}`; 9907 } 9908 9909 return `The "${args[0]}" ${type} must be ${isManyTypes ? 'one of' : 'of'} type ${valid}. Received ${typeof args[2]}`; 9910 }); 9911 9912 makeError(TypeError, 'ERR_INVALID_PROTOCOL', args => 9913 `Protocol "${args[0]}" not supported. Expected "${args[1]}"` 9914 ); 9915 9916 makeError(Error, 'ERR_HTTP_HEADERS_SENT', args => 9917 `Cannot ${args[0]} headers after they are sent to the client` 9918 ); 9919 9920 makeError(TypeError, 'ERR_INVALID_HTTP_TOKEN', args => 9921 `${args[0]} must be a valid HTTP token [${args[1]}]` 9922 ); 9923 9924 makeError(TypeError, 'ERR_HTTP_INVALID_HEADER_VALUE', args => 9925 `Invalid value "${args[0]} for header "${args[1]}"` 9926 ); 9927 9928 makeError(TypeError, 'ERR_INVALID_CHAR', args => 9929 `Invalid character in ${args[0]} [${args[1]}]` 9930 ); 9931 9932 makeError( 9933 Error, 9934 'ERR_HTTP2_NO_SOCKET_MANIPULATION', 9935 'HTTP/2 sockets should not be directly manipulated (e.g. read and written)' 9936 ); 9937 9938 9939 /***/ }), 9940 9941 /***/ 1199: 9942 /***/ ((module) => { 9943 9944 9945 9946 module.exports = header => { 9947 switch (header) { 9948 case ':method': 9949 case ':scheme': 9950 case ':authority': 9951 case ':path': 9952 return true; 9953 default: 9954 return false; 9955 } 9956 }; 9957 9958 9959 /***/ }), 9960 9961 /***/ 1564: 9962 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 9963 9964 9965 const stream = __nccwpck_require__(2781); 9966 const tls = __nccwpck_require__(4404); 9967 9968 // Really awesome hack. 9969 const JSStreamSocket = (new tls.TLSSocket(new stream.PassThrough()))._handle._parentWrap.constructor; 9970 9971 module.exports = JSStreamSocket; 9972 9973 9974 /***/ }), 9975 9976 /***/ 1818: 9977 /***/ ((module) => { 9978 9979 9980 9981 module.exports = (from, to, events) => { 9982 for (const event of events) { 9983 from.on(event, (...args) => to.emit(event, ...args)); 9984 } 9985 }; 9986 9987 9988 /***/ }), 9989 9990 /***/ 9404: 9991 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 9992 9993 9994 const {ERR_HTTP2_NO_SOCKET_MANIPULATION} = __nccwpck_require__(7087); 9995 9996 /* istanbul ignore file */ 9997 /* https://github.com/nodejs/node/blob/6eec858f34a40ffa489c1ec54bb24da72a28c781/lib/internal/http2/compat.js#L195-L272 */ 9998 9999 const proxySocketHandler = { 10000 has(stream, property) { 10001 // Replaced [kSocket] with .socket 10002 const reference = stream.session === undefined ? stream : stream.session.socket; 10003 return (property in stream) || (property in reference); 10004 }, 10005 10006 get(stream, property) { 10007 switch (property) { 10008 case 'on': 10009 case 'once': 10010 case 'end': 10011 case 'emit': 10012 case 'destroy': 10013 return stream[property].bind(stream); 10014 case 'writable': 10015 case 'destroyed': 10016 return stream[property]; 10017 case 'readable': 10018 if (stream.destroyed) { 10019 return false; 10020 } 10021 10022 return stream.readable; 10023 case 'setTimeout': { 10024 const {session} = stream; 10025 if (session !== undefined) { 10026 return session.setTimeout.bind(session); 10027 } 10028 10029 return stream.setTimeout.bind(stream); 10030 } 10031 10032 case 'write': 10033 case 'read': 10034 case 'pause': 10035 case 'resume': 10036 throw new ERR_HTTP2_NO_SOCKET_MANIPULATION(); 10037 default: { 10038 // Replaced [kSocket] with .socket 10039 const reference = stream.session === undefined ? stream : stream.session.socket; 10040 const value = reference[property]; 10041 10042 return typeof value === 'function' ? value.bind(reference) : value; 10043 } 10044 } 10045 }, 10046 10047 getPrototypeOf(stream) { 10048 if (stream.session !== undefined) { 10049 // Replaced [kSocket] with .socket 10050 return Reflect.getPrototypeOf(stream.session.socket); 10051 } 10052 10053 return Reflect.getPrototypeOf(stream); 10054 }, 10055 10056 set(stream, property, value) { 10057 switch (property) { 10058 case 'writable': 10059 case 'readable': 10060 case 'destroyed': 10061 case 'on': 10062 case 'once': 10063 case 'end': 10064 case 'emit': 10065 case 'destroy': 10066 stream[property] = value; 10067 return true; 10068 case 'setTimeout': { 10069 const {session} = stream; 10070 if (session === undefined) { 10071 stream.setTimeout = value; 10072 } else { 10073 session.setTimeout = value; 10074 } 10075 10076 return true; 10077 } 10078 10079 case 'write': 10080 case 'read': 10081 case 'pause': 10082 case 'resume': 10083 throw new ERR_HTTP2_NO_SOCKET_MANIPULATION(); 10084 default: { 10085 // Replaced [kSocket] with .socket 10086 const reference = stream.session === undefined ? stream : stream.session.socket; 10087 reference[property] = value; 10088 return true; 10089 } 10090 } 10091 } 10092 }; 10093 10094 module.exports = proxySocketHandler; 10095 10096 10097 /***/ }), 10098 10099 /***/ 4592: 10100 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 10101 10102 10103 const {ERR_INVALID_HTTP_TOKEN} = __nccwpck_require__(7087); 10104 const isRequestPseudoHeader = __nccwpck_require__(1199); 10105 10106 const isValidHttpToken = /^[\^`\-\w!#$%&*+.|~]+$/; 10107 10108 module.exports = name => { 10109 if (typeof name !== 'string' || (!isValidHttpToken.test(name) && !isRequestPseudoHeader(name))) { 10110 throw new ERR_INVALID_HTTP_TOKEN('Header name', name); 10111 } 10112 }; 10113 10114 10115 /***/ }), 10116 10117 /***/ 3549: 10118 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 10119 10120 10121 const { 10122 ERR_HTTP_INVALID_HEADER_VALUE, 10123 ERR_INVALID_CHAR 10124 } = __nccwpck_require__(7087); 10125 10126 const isInvalidHeaderValue = /[^\t\u0020-\u007E\u0080-\u00FF]/; 10127 10128 module.exports = (name, value) => { 10129 if (typeof value === 'undefined') { 10130 throw new ERR_HTTP_INVALID_HEADER_VALUE(value, name); 10131 } 10132 10133 if (isInvalidHeaderValue.test(value)) { 10134 throw new ERR_INVALID_CHAR('header content', name); 10135 } 10136 }; 10137 10138 10139 /***/ }), 10140 10141 /***/ 3287: 10142 /***/ ((__unused_webpack_module, exports) => { 10143 10144 10145 10146 Object.defineProperty(exports, "__esModule", ({ value: true })); 10147 10148 /*! 10149 * is-plain-object <https://github.com/jonschlinkert/is-plain-object> 10150 * 10151 * Copyright (c) 2014-2017, Jon Schlinkert. 10152 * Released under the MIT License. 10153 */ 10154 10155 function isObject(o) { 10156 return Object.prototype.toString.call(o) === '[object Object]'; 10157 } 10158 10159 function isPlainObject(o) { 10160 var ctor,prot; 10161 10162 if (isObject(o) === false) return false; 10163 10164 // If has modified constructor 10165 ctor = o.constructor; 10166 if (ctor === undefined) return true; 10167 10168 // If has modified prototype 10169 prot = ctor.prototype; 10170 if (isObject(prot) === false) return false; 10171 10172 // If constructor does not have an Object-specific method 10173 if (prot.hasOwnProperty('isPrototypeOf') === false) { 10174 return false; 10175 } 10176 10177 // Most likely a plain Object 10178 return true; 10179 } 10180 10181 exports.isPlainObject = isPlainObject; 10182 10183 10184 /***/ }), 10185 10186 /***/ 2820: 10187 /***/ ((__unused_webpack_module, exports) => { 10188 10189 //TODO: handle reviver/dehydrate function like normal 10190 //and handle indentation, like normal. 10191 //if anyone needs this... please send pull request. 10192 10193 exports.stringify = function stringify (o) { 10194 if('undefined' == typeof o) return o 10195 10196 if(o && Buffer.isBuffer(o)) 10197 return JSON.stringify(':base64:' + o.toString('base64')) 10198 10199 if(o && o.toJSON) 10200 o = o.toJSON() 10201 10202 if(o && 'object' === typeof o) { 10203 var s = '' 10204 var array = Array.isArray(o) 10205 s = array ? '[' : '{' 10206 var first = true 10207 10208 for(var k in o) { 10209 var ignore = 'function' == typeof o[k] || (!array && 'undefined' === typeof o[k]) 10210 if(Object.hasOwnProperty.call(o, k) && !ignore) { 10211 if(!first) 10212 s += ',' 10213 first = false 10214 if (array) { 10215 if(o[k] == undefined) 10216 s += 'null' 10217 else 10218 s += stringify(o[k]) 10219 } else if (o[k] !== void(0)) { 10220 s += stringify(k) + ':' + stringify(o[k]) 10221 } 10222 } 10223 } 10224 10225 s += array ? ']' : '}' 10226 10227 return s 10228 } else if ('string' === typeof o) { 10229 return JSON.stringify(/^:/.test(o) ? ':' + o : o) 10230 } else if ('undefined' === typeof o) { 10231 return 'null'; 10232 } else 10233 return JSON.stringify(o) 10234 } 10235 10236 exports.parse = function (s) { 10237 return JSON.parse(s, function (key, value) { 10238 if('string' === typeof value) { 10239 if(/^:base64:/.test(value)) 10240 return Buffer.from(value.substring(8), 'base64') 10241 else 10242 return /^:/.test(value) ? value.substring(1) : value 10243 } 10244 return value 10245 }) 10246 } 10247 10248 10249 /***/ }), 10250 10251 /***/ 1531: 10252 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 10253 10254 10255 10256 const EventEmitter = __nccwpck_require__(2361); 10257 const JSONB = __nccwpck_require__(2820); 10258 10259 const loadStore = options => { 10260 const adapters = { 10261 redis: '@keyv/redis', 10262 rediss: '@keyv/redis', 10263 mongodb: '@keyv/mongo', 10264 mongo: '@keyv/mongo', 10265 sqlite: '@keyv/sqlite', 10266 postgresql: '@keyv/postgres', 10267 postgres: '@keyv/postgres', 10268 mysql: '@keyv/mysql', 10269 etcd: '@keyv/etcd', 10270 offline: '@keyv/offline', 10271 tiered: '@keyv/tiered', 10272 }; 10273 if (options.adapter || options.uri) { 10274 const adapter = options.adapter || /^[^:+]*/.exec(options.uri)[0]; 10275 return new (require(adapters[adapter]))(options); 10276 } 10277 10278 return new Map(); 10279 }; 10280 10281 const iterableAdapters = [ 10282 'sqlite', 10283 'postgres', 10284 'mysql', 10285 'mongo', 10286 'redis', 10287 'tiered', 10288 ]; 10289 10290 class Keyv extends EventEmitter { 10291 constructor(uri, {emitErrors = true, ...options} = {}) { 10292 super(); 10293 this.opts = { 10294 namespace: 'keyv', 10295 serialize: JSONB.stringify, 10296 deserialize: JSONB.parse, 10297 ...((typeof uri === 'string') ? {uri} : uri), 10298 ...options, 10299 }; 10300 10301 if (!this.opts.store) { 10302 const adapterOptions = {...this.opts}; 10303 this.opts.store = loadStore(adapterOptions); 10304 } 10305 10306 if (this.opts.compression) { 10307 const compression = this.opts.compression; 10308 this.opts.serialize = compression.serialize.bind(compression); 10309 this.opts.deserialize = compression.deserialize.bind(compression); 10310 } 10311 10312 if (typeof this.opts.store.on === 'function' && emitErrors) { 10313 this.opts.store.on('error', error => this.emit('error', error)); 10314 } 10315 10316 this.opts.store.namespace = this.opts.namespace; 10317 10318 const generateIterator = iterator => async function * () { 10319 for await (const [key, raw] of typeof iterator === 'function' 10320 ? iterator(this.opts.store.namespace) 10321 : iterator) { 10322 const data = this.opts.deserialize(raw); 10323 if (this.opts.store.namespace && !key.includes(this.opts.store.namespace)) { 10324 continue; 10325 } 10326 10327 if (typeof data.expires === 'number' && Date.now() > data.expires) { 10328 this.delete(key); 10329 continue; 10330 } 10331 10332 yield [this._getKeyUnprefix(key), data.value]; 10333 } 10334 }; 10335 10336 // Attach iterators 10337 if (typeof this.opts.store[Symbol.iterator] === 'function' && this.opts.store instanceof Map) { 10338 this.iterator = generateIterator(this.opts.store); 10339 } else if (typeof this.opts.store.iterator === 'function' && this.opts.store.opts 10340 && this._checkIterableAdaptar()) { 10341 this.iterator = generateIterator(this.opts.store.iterator.bind(this.opts.store)); 10342 } 10343 } 10344 10345 _checkIterableAdaptar() { 10346 return iterableAdapters.includes(this.opts.store.opts.dialect) 10347 || iterableAdapters.findIndex(element => this.opts.store.opts.url.includes(element)) >= 0; 10348 } 10349 10350 _getKeyPrefix(key) { 10351 return `${this.opts.namespace}:${key}`; 10352 } 10353 10354 _getKeyPrefixArray(keys) { 10355 return keys.map(key => `${this.opts.namespace}:${key}`); 10356 } 10357 10358 _getKeyUnprefix(key) { 10359 return key 10360 .split(':') 10361 .splice(1) 10362 .join(':'); 10363 } 10364 10365 get(key, options) { 10366 const {store} = this.opts; 10367 const isArray = Array.isArray(key); 10368 const keyPrefixed = isArray ? this._getKeyPrefixArray(key) : this._getKeyPrefix(key); 10369 if (isArray && store.getMany === undefined) { 10370 const promises = []; 10371 for (const key of keyPrefixed) { 10372 promises.push(Promise.resolve() 10373 .then(() => store.get(key)) 10374 .then(data => (typeof data === 'string') ? this.opts.deserialize(data) : (this.opts.compression ? this.opts.deserialize(data) : data)) 10375 .then(data => { 10376 if (data === undefined || data === null) { 10377 return undefined; 10378 } 10379 10380 if (typeof data.expires === 'number' && Date.now() > data.expires) { 10381 return this.delete(key).then(() => undefined); 10382 } 10383 10384 return (options && options.raw) ? data : data.value; 10385 }), 10386 ); 10387 } 10388 10389 return Promise.allSettled(promises) 10390 .then(values => { 10391 const data = []; 10392 for (const value of values) { 10393 data.push(value.value); 10394 } 10395 10396 return data; 10397 }); 10398 } 10399 10400 return Promise.resolve() 10401 .then(() => isArray ? store.getMany(keyPrefixed) : store.get(keyPrefixed)) 10402 .then(data => (typeof data === 'string') ? this.opts.deserialize(data) : (this.opts.compression ? this.opts.deserialize(data) : data)) 10403 .then(data => { 10404 if (data === undefined || data === null) { 10405 return undefined; 10406 } 10407 10408 if (isArray) { 10409 const result = []; 10410 10411 for (let row of data) { 10412 if ((typeof row === 'string')) { 10413 row = this.opts.deserialize(row); 10414 } 10415 10416 if (row === undefined || row === null) { 10417 result.push(undefined); 10418 continue; 10419 } 10420 10421 if (typeof row.expires === 'number' && Date.now() > row.expires) { 10422 this.delete(key).then(() => undefined); 10423 result.push(undefined); 10424 } else { 10425 result.push((options && options.raw) ? row : row.value); 10426 } 10427 } 10428 10429 return result; 10430 } 10431 10432 if (typeof data.expires === 'number' && Date.now() > data.expires) { 10433 return this.delete(key).then(() => undefined); 10434 } 10435 10436 return (options && options.raw) ? data : data.value; 10437 }); 10438 } 10439 10440 set(key, value, ttl) { 10441 const keyPrefixed = this._getKeyPrefix(key); 10442 if (typeof ttl === 'undefined') { 10443 ttl = this.opts.ttl; 10444 } 10445 10446 if (ttl === 0) { 10447 ttl = undefined; 10448 } 10449 10450 const {store} = this.opts; 10451 10452 return Promise.resolve() 10453 .then(() => { 10454 const expires = (typeof ttl === 'number') ? (Date.now() + ttl) : null; 10455 if (typeof value === 'symbol') { 10456 this.emit('error', 'symbol cannot be serialized'); 10457 } 10458 10459 value = {value, expires}; 10460 return this.opts.serialize(value); 10461 }) 10462 .then(value => store.set(keyPrefixed, value, ttl)) 10463 .then(() => true); 10464 } 10465 10466 delete(key) { 10467 const {store} = this.opts; 10468 if (Array.isArray(key)) { 10469 const keyPrefixed = this._getKeyPrefixArray(key); 10470 if (store.deleteMany === undefined) { 10471 const promises = []; 10472 for (const key of keyPrefixed) { 10473 promises.push(store.delete(key)); 10474 } 10475 10476 return Promise.allSettled(promises) 10477 .then(values => values.every(x => x.value === true)); 10478 } 10479 10480 return Promise.resolve() 10481 .then(() => store.deleteMany(keyPrefixed)); 10482 } 10483 10484 const keyPrefixed = this._getKeyPrefix(key); 10485 return Promise.resolve() 10486 .then(() => store.delete(keyPrefixed)); 10487 } 10488 10489 clear() { 10490 const {store} = this.opts; 10491 return Promise.resolve() 10492 .then(() => store.clear()); 10493 } 10494 10495 has(key) { 10496 const keyPrefixed = this._getKeyPrefix(key); 10497 const {store} = this.opts; 10498 return Promise.resolve() 10499 .then(async () => { 10500 if (typeof store.has === 'function') { 10501 return store.has(keyPrefixed); 10502 } 10503 10504 const value = await store.get(keyPrefixed); 10505 return value !== undefined; 10506 }); 10507 } 10508 10509 disconnect() { 10510 const {store} = this.opts; 10511 if (typeof store.disconnect === 'function') { 10512 return store.disconnect(); 10513 } 10514 } 10515 } 10516 10517 module.exports = Keyv; 10518 10519 10520 /***/ }), 10521 10522 /***/ 3329: 10523 /***/ (function(module) { 10524 10525 (function(root, factory) { 10526 if (typeof define === 'function' && define.amd) { 10527 define([], factory) /* global define */ 10528 } else if ( true && module.exports) { 10529 module.exports = factory() 10530 } else { 10531 root.moo = factory() 10532 } 10533 }(this, function() { 10534 'use strict'; 10535 10536 var hasOwnProperty = Object.prototype.hasOwnProperty 10537 var toString = Object.prototype.toString 10538 var hasSticky = typeof new RegExp().sticky === 'boolean' 10539 10540 /***************************************************************************/ 10541 10542 function isRegExp(o) { return o && toString.call(o) === '[object RegExp]' } 10543 function isObject(o) { return o && typeof o === 'object' && !isRegExp(o) && !Array.isArray(o) } 10544 10545 function reEscape(s) { 10546 return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') 10547 } 10548 function reGroups(s) { 10549 var re = new RegExp('|' + s) 10550 return re.exec('').length - 1 10551 } 10552 function reCapture(s) { 10553 return '(' + s + ')' 10554 } 10555 function reUnion(regexps) { 10556 if (!regexps.length) return '(?!)' 10557 var source = regexps.map(function(s) { 10558 return "(?:" + s + ")" 10559 }).join('|') 10560 return "(?:" + source + ")" 10561 } 10562 10563 function regexpOrLiteral(obj) { 10564 if (typeof obj === 'string') { 10565 return '(?:' + reEscape(obj) + ')' 10566 10567 } else if (isRegExp(obj)) { 10568 // TODO: consider /u support 10569 if (obj.ignoreCase) throw new Error('RegExp /i flag not allowed') 10570 if (obj.global) throw new Error('RegExp /g flag is implied') 10571 if (obj.sticky) throw new Error('RegExp /y flag is implied') 10572 if (obj.multiline) throw new Error('RegExp /m flag is implied') 10573 return obj.source 10574 10575 } else { 10576 throw new Error('Not a pattern: ' + obj) 10577 } 10578 } 10579 10580 function pad(s, length) { 10581 if (s.length > length) { 10582 return s 10583 } 10584 return Array(length - s.length + 1).join(" ") + s 10585 } 10586 10587 function lastNLines(string, numLines) { 10588 var position = string.length 10589 var lineBreaks = 0; 10590 while (true) { 10591 var idx = string.lastIndexOf("\n", position - 1) 10592 if (idx === -1) { 10593 break; 10594 } else { 10595 lineBreaks++ 10596 } 10597 position = idx 10598 if (lineBreaks === numLines) { 10599 break; 10600 } 10601 if (position === 0) { 10602 break; 10603 } 10604 } 10605 var startPosition = 10606 lineBreaks < numLines ? 10607 0 : 10608 position + 1 10609 return string.substring(startPosition).split("\n") 10610 } 10611 10612 function objectToRules(object) { 10613 var keys = Object.getOwnPropertyNames(object) 10614 var result = [] 10615 for (var i = 0; i < keys.length; i++) { 10616 var key = keys[i] 10617 var thing = object[key] 10618 var rules = [].concat(thing) 10619 if (key === 'include') { 10620 for (var j = 0; j < rules.length; j++) { 10621 result.push({include: rules[j]}) 10622 } 10623 continue 10624 } 10625 var match = [] 10626 rules.forEach(function(rule) { 10627 if (isObject(rule)) { 10628 if (match.length) result.push(ruleOptions(key, match)) 10629 result.push(ruleOptions(key, rule)) 10630 match = [] 10631 } else { 10632 match.push(rule) 10633 } 10634 }) 10635 if (match.length) result.push(ruleOptions(key, match)) 10636 } 10637 return result 10638 } 10639 10640 function arrayToRules(array) { 10641 var result = [] 10642 for (var i = 0; i < array.length; i++) { 10643 var obj = array[i] 10644 if (obj.include) { 10645 var include = [].concat(obj.include) 10646 for (var j = 0; j < include.length; j++) { 10647 result.push({include: include[j]}) 10648 } 10649 continue 10650 } 10651 if (!obj.type) { 10652 throw new Error('Rule has no type: ' + JSON.stringify(obj)) 10653 } 10654 result.push(ruleOptions(obj.type, obj)) 10655 } 10656 return result 10657 } 10658 10659 function ruleOptions(type, obj) { 10660 if (!isObject(obj)) { 10661 obj = { match: obj } 10662 } 10663 if (obj.include) { 10664 throw new Error('Matching rules cannot also include states') 10665 } 10666 10667 // nb. error and fallback imply lineBreaks 10668 var options = { 10669 defaultType: type, 10670 lineBreaks: !!obj.error || !!obj.fallback, 10671 pop: false, 10672 next: null, 10673 push: null, 10674 error: false, 10675 fallback: false, 10676 value: null, 10677 type: null, 10678 shouldThrow: false, 10679 } 10680 10681 // Avoid Object.assign(), so we support IE9+ 10682 for (var key in obj) { 10683 if (hasOwnProperty.call(obj, key)) { 10684 options[key] = obj[key] 10685 } 10686 } 10687 10688 // type transform cannot be a string 10689 if (typeof options.type === 'string' && type !== options.type) { 10690 throw new Error("Type transform cannot be a string (type '" + options.type + "' for token '" + type + "')") 10691 } 10692 10693 // convert to array 10694 var match = options.match 10695 options.match = Array.isArray(match) ? match : match ? [match] : [] 10696 options.match.sort(function(a, b) { 10697 return isRegExp(a) && isRegExp(b) ? 0 10698 : isRegExp(b) ? -1 : isRegExp(a) ? +1 : b.length - a.length 10699 }) 10700 return options 10701 } 10702 10703 function toRules(spec) { 10704 return Array.isArray(spec) ? arrayToRules(spec) : objectToRules(spec) 10705 } 10706 10707 var defaultErrorRule = ruleOptions('error', {lineBreaks: true, shouldThrow: true}) 10708 function compileRules(rules, hasStates) { 10709 var errorRule = null 10710 var fast = Object.create(null) 10711 var fastAllowed = true 10712 var unicodeFlag = null 10713 var groups = [] 10714 var parts = [] 10715 10716 // If there is a fallback rule, then disable fast matching 10717 for (var i = 0; i < rules.length; i++) { 10718 if (rules[i].fallback) { 10719 fastAllowed = false 10720 } 10721 } 10722 10723 for (var i = 0; i < rules.length; i++) { 10724 var options = rules[i] 10725 10726 if (options.include) { 10727 // all valid inclusions are removed by states() preprocessor 10728 throw new Error('Inheritance is not allowed in stateless lexers') 10729 } 10730 10731 if (options.error || options.fallback) { 10732 // errorRule can only be set once 10733 if (errorRule) { 10734 if (!options.fallback === !errorRule.fallback) { 10735 throw new Error("Multiple " + (options.fallback ? "fallback" : "error") + " rules not allowed (for token '" + options.defaultType + "')") 10736 } else { 10737 throw new Error("fallback and error are mutually exclusive (for token '" + options.defaultType + "')") 10738 } 10739 } 10740 errorRule = options 10741 } 10742 10743 var match = options.match.slice() 10744 if (fastAllowed) { 10745 while (match.length && typeof match[0] === 'string' && match[0].length === 1) { 10746 var word = match.shift() 10747 fast[word.charCodeAt(0)] = options 10748 } 10749 } 10750 10751 // Warn about inappropriate state-switching options 10752 if (options.pop || options.push || options.next) { 10753 if (!hasStates) { 10754 throw new Error("State-switching options are not allowed in stateless lexers (for token '" + options.defaultType + "')") 10755 } 10756 if (options.fallback) { 10757 throw new Error("State-switching options are not allowed on fallback tokens (for token '" + options.defaultType + "')") 10758 } 10759 } 10760 10761 // Only rules with a .match are included in the RegExp 10762 if (match.length === 0) { 10763 continue 10764 } 10765 fastAllowed = false 10766 10767 groups.push(options) 10768 10769 // Check unicode flag is used everywhere or nowhere 10770 for (var j = 0; j < match.length; j++) { 10771 var obj = match[j] 10772 if (!isRegExp(obj)) { 10773 continue 10774 } 10775 10776 if (unicodeFlag === null) { 10777 unicodeFlag = obj.unicode 10778 } else if (unicodeFlag !== obj.unicode && options.fallback === false) { 10779 throw new Error('If one rule is /u then all must be') 10780 } 10781 } 10782 10783 // convert to RegExp 10784 var pat = reUnion(match.map(regexpOrLiteral)) 10785 10786 // validate 10787 var regexp = new RegExp(pat) 10788 if (regexp.test("")) { 10789 throw new Error("RegExp matches empty string: " + regexp) 10790 } 10791 var groupCount = reGroups(pat) 10792 if (groupCount > 0) { 10793 throw new Error("RegExp has capture groups: " + regexp + "\nUse (?: … ) instead") 10794 } 10795 10796 // try and detect rules matching newlines 10797 if (!options.lineBreaks && regexp.test('\n')) { 10798 throw new Error('Rule should declare lineBreaks: ' + regexp) 10799 } 10800 10801 // store regex 10802 parts.push(reCapture(pat)) 10803 } 10804 10805 10806 // If there's no fallback rule, use the sticky flag so we only look for 10807 // matches at the current index. 10808 // 10809 // If we don't support the sticky flag, then fake it using an irrefutable 10810 // match (i.e. an empty pattern). 10811 var fallbackRule = errorRule && errorRule.fallback 10812 var flags = hasSticky && !fallbackRule ? 'ym' : 'gm' 10813 var suffix = hasSticky || fallbackRule ? '' : '|' 10814 10815 if (unicodeFlag === true) flags += "u" 10816 var combined = new RegExp(reUnion(parts) + suffix, flags) 10817 return {regexp: combined, groups: groups, fast: fast, error: errorRule || defaultErrorRule} 10818 } 10819 10820 function compile(rules) { 10821 var result = compileRules(toRules(rules)) 10822 return new Lexer({start: result}, 'start') 10823 } 10824 10825 function checkStateGroup(g, name, map) { 10826 var state = g && (g.push || g.next) 10827 if (state && !map[state]) { 10828 throw new Error("Missing state '" + state + "' (in token '" + g.defaultType + "' of state '" + name + "')") 10829 } 10830 if (g && g.pop && +g.pop !== 1) { 10831 throw new Error("pop must be 1 (in token '" + g.defaultType + "' of state '" + name + "')") 10832 } 10833 } 10834 function compileStates(states, start) { 10835 var all = states.$all ? toRules(states.$all) : [] 10836 delete states.$all 10837 10838 var keys = Object.getOwnPropertyNames(states) 10839 if (!start) start = keys[0] 10840 10841 var ruleMap = Object.create(null) 10842 for (var i = 0; i < keys.length; i++) { 10843 var key = keys[i] 10844 ruleMap[key] = toRules(states[key]).concat(all) 10845 } 10846 for (var i = 0; i < keys.length; i++) { 10847 var key = keys[i] 10848 var rules = ruleMap[key] 10849 var included = Object.create(null) 10850 for (var j = 0; j < rules.length; j++) { 10851 var rule = rules[j] 10852 if (!rule.include) continue 10853 var splice = [j, 1] 10854 if (rule.include !== key && !included[rule.include]) { 10855 included[rule.include] = true 10856 var newRules = ruleMap[rule.include] 10857 if (!newRules) { 10858 throw new Error("Cannot include nonexistent state '" + rule.include + "' (in state '" + key + "')") 10859 } 10860 for (var k = 0; k < newRules.length; k++) { 10861 var newRule = newRules[k] 10862 if (rules.indexOf(newRule) !== -1) continue 10863 splice.push(newRule) 10864 } 10865 } 10866 rules.splice.apply(rules, splice) 10867 j-- 10868 } 10869 } 10870 10871 var map = Object.create(null) 10872 for (var i = 0; i < keys.length; i++) { 10873 var key = keys[i] 10874 map[key] = compileRules(ruleMap[key], true) 10875 } 10876 10877 for (var i = 0; i < keys.length; i++) { 10878 var name = keys[i] 10879 var state = map[name] 10880 var groups = state.groups 10881 for (var j = 0; j < groups.length; j++) { 10882 checkStateGroup(groups[j], name, map) 10883 } 10884 var fastKeys = Object.getOwnPropertyNames(state.fast) 10885 for (var j = 0; j < fastKeys.length; j++) { 10886 checkStateGroup(state.fast[fastKeys[j]], name, map) 10887 } 10888 } 10889 10890 return new Lexer(map, start) 10891 } 10892 10893 function keywordTransform(map) { 10894 10895 // Use a JavaScript Map to map keywords to their corresponding token type 10896 // unless Map is unsupported, then fall back to using an Object: 10897 var isMap = typeof Map !== 'undefined' 10898 var reverseMap = isMap ? new Map : Object.create(null) 10899 10900 var types = Object.getOwnPropertyNames(map) 10901 for (var i = 0; i < types.length; i++) { 10902 var tokenType = types[i] 10903 var item = map[tokenType] 10904 var keywordList = Array.isArray(item) ? item : [item] 10905 keywordList.forEach(function(keyword) { 10906 if (typeof keyword !== 'string') { 10907 throw new Error("keyword must be string (in keyword '" + tokenType + "')") 10908 } 10909 if (isMap) { 10910 reverseMap.set(keyword, tokenType) 10911 } else { 10912 reverseMap[keyword] = tokenType 10913 } 10914 }) 10915 } 10916 return function(k) { 10917 return isMap ? reverseMap.get(k) : reverseMap[k] 10918 } 10919 } 10920 10921 /***************************************************************************/ 10922 10923 var Lexer = function(states, state) { 10924 this.startState = state 10925 this.states = states 10926 this.buffer = '' 10927 this.stack = [] 10928 this.reset() 10929 } 10930 10931 Lexer.prototype.reset = function(data, info) { 10932 this.buffer = data || '' 10933 this.index = 0 10934 this.line = info ? info.line : 1 10935 this.col = info ? info.col : 1 10936 this.queuedToken = info ? info.queuedToken : null 10937 this.queuedText = info ? info.queuedText: ""; 10938 this.queuedThrow = info ? info.queuedThrow : null 10939 this.setState(info ? info.state : this.startState) 10940 this.stack = info && info.stack ? info.stack.slice() : [] 10941 return this 10942 } 10943 10944 Lexer.prototype.save = function() { 10945 return { 10946 line: this.line, 10947 col: this.col, 10948 state: this.state, 10949 stack: this.stack.slice(), 10950 queuedToken: this.queuedToken, 10951 queuedText: this.queuedText, 10952 queuedThrow: this.queuedThrow, 10953 } 10954 } 10955 10956 Lexer.prototype.setState = function(state) { 10957 if (!state || this.state === state) return 10958 this.state = state 10959 var info = this.states[state] 10960 this.groups = info.groups 10961 this.error = info.error 10962 this.re = info.regexp 10963 this.fast = info.fast 10964 } 10965 10966 Lexer.prototype.popState = function() { 10967 this.setState(this.stack.pop()) 10968 } 10969 10970 Lexer.prototype.pushState = function(state) { 10971 this.stack.push(this.state) 10972 this.setState(state) 10973 } 10974 10975 var eat = hasSticky ? function(re, buffer) { // assume re is /y 10976 return re.exec(buffer) 10977 } : function(re, buffer) { // assume re is /g 10978 var match = re.exec(buffer) 10979 // will always match, since we used the |(?:) trick 10980 if (match[0].length === 0) { 10981 return null 10982 } 10983 return match 10984 } 10985 10986 Lexer.prototype._getGroup = function(match) { 10987 var groupCount = this.groups.length 10988 for (var i = 0; i < groupCount; i++) { 10989 if (match[i + 1] !== undefined) { 10990 return this.groups[i] 10991 } 10992 } 10993 throw new Error('Cannot find token type for matched text') 10994 } 10995 10996 function tokenToString() { 10997 return this.value 10998 } 10999 11000 Lexer.prototype.next = function() { 11001 var index = this.index 11002 11003 // If a fallback token matched, we don't need to re-run the RegExp 11004 if (this.queuedGroup) { 11005 var token = this._token(this.queuedGroup, this.queuedText, index) 11006 this.queuedGroup = null 11007 this.queuedText = "" 11008 return token 11009 } 11010 11011 var buffer = this.buffer 11012 if (index === buffer.length) { 11013 return // EOF 11014 } 11015 11016 // Fast matching for single characters 11017 var group = this.fast[buffer.charCodeAt(index)] 11018 if (group) { 11019 return this._token(group, buffer.charAt(index), index) 11020 } 11021 11022 // Execute RegExp 11023 var re = this.re 11024 re.lastIndex = index 11025 var match = eat(re, buffer) 11026 11027 // Error tokens match the remaining buffer 11028 var error = this.error 11029 if (match == null) { 11030 return this._token(error, buffer.slice(index, buffer.length), index) 11031 } 11032 11033 var group = this._getGroup(match) 11034 var text = match[0] 11035 11036 if (error.fallback && match.index !== index) { 11037 this.queuedGroup = group 11038 this.queuedText = text 11039 11040 // Fallback tokens contain the unmatched portion of the buffer 11041 return this._token(error, buffer.slice(index, match.index), index) 11042 } 11043 11044 return this._token(group, text, index) 11045 } 11046 11047 Lexer.prototype._token = function(group, text, offset) { 11048 // count line breaks 11049 var lineBreaks = 0 11050 if (group.lineBreaks) { 11051 var matchNL = /\n/g 11052 var nl = 1 11053 if (text === '\n') { 11054 lineBreaks = 1 11055 } else { 11056 while (matchNL.exec(text)) { lineBreaks++; nl = matchNL.lastIndex } 11057 } 11058 } 11059 11060 var token = { 11061 type: (typeof group.type === 'function' && group.type(text)) || group.defaultType, 11062 value: typeof group.value === 'function' ? group.value(text) : text, 11063 text: text, 11064 toString: tokenToString, 11065 offset: offset, 11066 lineBreaks: lineBreaks, 11067 line: this.line, 11068 col: this.col, 11069 } 11070 // nb. adding more props to token object will make V8 sad! 11071 11072 var size = text.length 11073 this.index += size 11074 this.line += lineBreaks 11075 if (lineBreaks !== 0) { 11076 this.col = size - nl + 1 11077 } else { 11078 this.col += size 11079 } 11080 11081 // throw, if no rule with {error: true} 11082 if (group.shouldThrow) { 11083 var err = new Error(this.formatError(token, "invalid syntax")) 11084 throw err; 11085 } 11086 11087 if (group.pop) this.popState() 11088 else if (group.push) this.pushState(group.push) 11089 else if (group.next) this.setState(group.next) 11090 11091 return token 11092 } 11093 11094 if (typeof Symbol !== 'undefined' && Symbol.iterator) { 11095 var LexerIterator = function(lexer) { 11096 this.lexer = lexer 11097 } 11098 11099 LexerIterator.prototype.next = function() { 11100 var token = this.lexer.next() 11101 return {value: token, done: !token} 11102 } 11103 11104 LexerIterator.prototype[Symbol.iterator] = function() { 11105 return this 11106 } 11107 11108 Lexer.prototype[Symbol.iterator] = function() { 11109 return new LexerIterator(this) 11110 } 11111 } 11112 11113 Lexer.prototype.formatError = function(token, message) { 11114 if (token == null) { 11115 // An undefined token indicates EOF 11116 var text = this.buffer.slice(this.index) 11117 var token = { 11118 text: text, 11119 offset: this.index, 11120 lineBreaks: text.indexOf('\n') === -1 ? 0 : 1, 11121 line: this.line, 11122 col: this.col, 11123 } 11124 } 11125 11126 var numLinesAround = 2 11127 var firstDisplayedLine = Math.max(token.line - numLinesAround, 1) 11128 var lastDisplayedLine = token.line + numLinesAround 11129 var lastLineDigits = String(lastDisplayedLine).length 11130 var displayedLines = lastNLines( 11131 this.buffer, 11132 (this.line - token.line) + numLinesAround + 1 11133 ) 11134 .slice(0, 5) 11135 var errorLines = [] 11136 errorLines.push(message + " at line " + token.line + " col " + token.col + ":") 11137 errorLines.push("") 11138 for (var i = 0; i < displayedLines.length; i++) { 11139 var line = displayedLines[i] 11140 var lineNo = firstDisplayedLine + i 11141 errorLines.push(pad(String(lineNo), lastLineDigits) + " " + line); 11142 if (lineNo === token.line) { 11143 errorLines.push(pad("", lastLineDigits + token.col + 1) + "^") 11144 } 11145 } 11146 return errorLines.join("\n") 11147 } 11148 11149 Lexer.prototype.clone = function() { 11150 return new Lexer(this.states, this.state) 11151 } 11152 11153 Lexer.prototype.has = function(tokenType) { 11154 return true 11155 } 11156 11157 11158 return { 11159 compile: compile, 11160 states: compileStates, 11161 error: Object.freeze({error: true}), 11162 fallback: Object.freeze({fallback: true}), 11163 keywords: keywordTransform, 11164 } 11165 11166 })); 11167 11168 11169 /***/ }), 11170 11171 /***/ 7800: 11172 /***/ (function(module) { 11173 11174 (function(root, factory) { 11175 if ( true && module.exports) { 11176 module.exports = factory(); 11177 } else { 11178 root.nearley = factory(); 11179 } 11180 }(this, function() { 11181 11182 function Rule(name, symbols, postprocess) { 11183 this.id = ++Rule.highestId; 11184 this.name = name; 11185 this.symbols = symbols; // a list of literal | regex class | nonterminal 11186 this.postprocess = postprocess; 11187 return this; 11188 } 11189 Rule.highestId = 0; 11190 11191 Rule.prototype.toString = function(withCursorAt) { 11192 var symbolSequence = (typeof withCursorAt === "undefined") 11193 ? this.symbols.map(getSymbolShortDisplay).join(' ') 11194 : ( this.symbols.slice(0, withCursorAt).map(getSymbolShortDisplay).join(' ') 11195 + " ● " 11196 + this.symbols.slice(withCursorAt).map(getSymbolShortDisplay).join(' ') ); 11197 return this.name + " → " + symbolSequence; 11198 } 11199 11200 11201 // a State is a rule at a position from a given starting point in the input stream (reference) 11202 function State(rule, dot, reference, wantedBy) { 11203 this.rule = rule; 11204 this.dot = dot; 11205 this.reference = reference; 11206 this.data = []; 11207 this.wantedBy = wantedBy; 11208 this.isComplete = this.dot === rule.symbols.length; 11209 } 11210 11211 State.prototype.toString = function() { 11212 return "{" + this.rule.toString(this.dot) + "}, from: " + (this.reference || 0); 11213 }; 11214 11215 State.prototype.nextState = function(child) { 11216 var state = new State(this.rule, this.dot + 1, this.reference, this.wantedBy); 11217 state.left = this; 11218 state.right = child; 11219 if (state.isComplete) { 11220 state.data = state.build(); 11221 // Having right set here will prevent the right state and its children 11222 // form being garbage collected 11223 state.right = undefined; 11224 } 11225 return state; 11226 }; 11227 11228 State.prototype.build = function() { 11229 var children = []; 11230 var node = this; 11231 do { 11232 children.push(node.right.data); 11233 node = node.left; 11234 } while (node.left); 11235 children.reverse(); 11236 return children; 11237 }; 11238 11239 State.prototype.finish = function() { 11240 if (this.rule.postprocess) { 11241 this.data = this.rule.postprocess(this.data, this.reference, Parser.fail); 11242 } 11243 }; 11244 11245 11246 function Column(grammar, index) { 11247 this.grammar = grammar; 11248 this.index = index; 11249 this.states = []; 11250 this.wants = {}; // states indexed by the non-terminal they expect 11251 this.scannable = []; // list of states that expect a token 11252 this.completed = {}; // states that are nullable 11253 } 11254 11255 11256 Column.prototype.process = function(nextColumn) { 11257 var states = this.states; 11258 var wants = this.wants; 11259 var completed = this.completed; 11260 11261 for (var w = 0; w < states.length; w++) { // nb. we push() during iteration 11262 var state = states[w]; 11263 11264 if (state.isComplete) { 11265 state.finish(); 11266 if (state.data !== Parser.fail) { 11267 // complete 11268 var wantedBy = state.wantedBy; 11269 for (var i = wantedBy.length; i--; ) { // this line is hot 11270 var left = wantedBy[i]; 11271 this.complete(left, state); 11272 } 11273 11274 // special-case nullables 11275 if (state.reference === this.index) { 11276 // make sure future predictors of this rule get completed. 11277 var exp = state.rule.name; 11278 (this.completed[exp] = this.completed[exp] || []).push(state); 11279 } 11280 } 11281 11282 } else { 11283 // queue scannable states 11284 var exp = state.rule.symbols[state.dot]; 11285 if (typeof exp !== 'string') { 11286 this.scannable.push(state); 11287 continue; 11288 } 11289 11290 // predict 11291 if (wants[exp]) { 11292 wants[exp].push(state); 11293 11294 if (completed.hasOwnProperty(exp)) { 11295 var nulls = completed[exp]; 11296 for (var i = 0; i < nulls.length; i++) { 11297 var right = nulls[i]; 11298 this.complete(state, right); 11299 } 11300 } 11301 } else { 11302 wants[exp] = [state]; 11303 this.predict(exp); 11304 } 11305 } 11306 } 11307 } 11308 11309 Column.prototype.predict = function(exp) { 11310 var rules = this.grammar.byName[exp] || []; 11311 11312 for (var i = 0; i < rules.length; i++) { 11313 var r = rules[i]; 11314 var wantedBy = this.wants[exp]; 11315 var s = new State(r, 0, this.index, wantedBy); 11316 this.states.push(s); 11317 } 11318 } 11319 11320 Column.prototype.complete = function(left, right) { 11321 var copy = left.nextState(right); 11322 this.states.push(copy); 11323 } 11324 11325 11326 function Grammar(rules, start) { 11327 this.rules = rules; 11328 this.start = start || this.rules[0].name; 11329 var byName = this.byName = {}; 11330 this.rules.forEach(function(rule) { 11331 if (!byName.hasOwnProperty(rule.name)) { 11332 byName[rule.name] = []; 11333 } 11334 byName[rule.name].push(rule); 11335 }); 11336 } 11337 11338 // So we can allow passing (rules, start) directly to Parser for backwards compatibility 11339 Grammar.fromCompiled = function(rules, start) { 11340 var lexer = rules.Lexer; 11341 if (rules.ParserStart) { 11342 start = rules.ParserStart; 11343 rules = rules.ParserRules; 11344 } 11345 var rules = rules.map(function (r) { return (new Rule(r.name, r.symbols, r.postprocess)); }); 11346 var g = new Grammar(rules, start); 11347 g.lexer = lexer; // nb. storing lexer on Grammar is iffy, but unavoidable 11348 return g; 11349 } 11350 11351 11352 function StreamLexer() { 11353 this.reset(""); 11354 } 11355 11356 StreamLexer.prototype.reset = function(data, state) { 11357 this.buffer = data; 11358 this.index = 0; 11359 this.line = state ? state.line : 1; 11360 this.lastLineBreak = state ? -state.col : 0; 11361 } 11362 11363 StreamLexer.prototype.next = function() { 11364 if (this.index < this.buffer.length) { 11365 var ch = this.buffer[this.index++]; 11366 if (ch === '\n') { 11367 this.line += 1; 11368 this.lastLineBreak = this.index; 11369 } 11370 return {value: ch}; 11371 } 11372 } 11373 11374 StreamLexer.prototype.save = function() { 11375 return { 11376 line: this.line, 11377 col: this.index - this.lastLineBreak, 11378 } 11379 } 11380 11381 StreamLexer.prototype.formatError = function(token, message) { 11382 // nb. this gets called after consuming the offending token, 11383 // so the culprit is index-1 11384 var buffer = this.buffer; 11385 if (typeof buffer === 'string') { 11386 var lines = buffer 11387 .split("\n") 11388 .slice( 11389 Math.max(0, this.line - 5), 11390 this.line 11391 ); 11392 11393 var nextLineBreak = buffer.indexOf('\n', this.index); 11394 if (nextLineBreak === -1) nextLineBreak = buffer.length; 11395 var col = this.index - this.lastLineBreak; 11396 var lastLineDigits = String(this.line).length; 11397 message += " at line " + this.line + " col " + col + ":\n\n"; 11398 message += lines 11399 .map(function(line, i) { 11400 return pad(this.line - lines.length + i + 1, lastLineDigits) + " " + line; 11401 }, this) 11402 .join("\n"); 11403 message += "\n" + pad("", lastLineDigits + col) + "^\n"; 11404 return message; 11405 } else { 11406 return message + " at index " + (this.index - 1); 11407 } 11408 11409 function pad(n, length) { 11410 var s = String(n); 11411 return Array(length - s.length + 1).join(" ") + s; 11412 } 11413 } 11414 11415 function Parser(rules, start, options) { 11416 if (rules instanceof Grammar) { 11417 var grammar = rules; 11418 var options = start; 11419 } else { 11420 var grammar = Grammar.fromCompiled(rules, start); 11421 } 11422 this.grammar = grammar; 11423 11424 // Read options 11425 this.options = { 11426 keepHistory: false, 11427 lexer: grammar.lexer || new StreamLexer, 11428 }; 11429 for (var key in (options || {})) { 11430 this.options[key] = options[key]; 11431 } 11432 11433 // Setup lexer 11434 this.lexer = this.options.lexer; 11435 this.lexerState = undefined; 11436 11437 // Setup a table 11438 var column = new Column(grammar, 0); 11439 var table = this.table = [column]; 11440 11441 // I could be expecting anything. 11442 column.wants[grammar.start] = []; 11443 column.predict(grammar.start); 11444 // TODO what if start rule is nullable? 11445 column.process(); 11446 this.current = 0; // token index 11447 } 11448 11449 // create a reserved token for indicating a parse fail 11450 Parser.fail = {}; 11451 11452 Parser.prototype.feed = function(chunk) { 11453 var lexer = this.lexer; 11454 lexer.reset(chunk, this.lexerState); 11455 11456 var token; 11457 while (true) { 11458 try { 11459 token = lexer.next(); 11460 if (!token) { 11461 break; 11462 } 11463 } catch (e) { 11464 // Create the next column so that the error reporter 11465 // can display the correctly predicted states. 11466 var nextColumn = new Column(this.grammar, this.current + 1); 11467 this.table.push(nextColumn); 11468 var err = new Error(this.reportLexerError(e)); 11469 err.offset = this.current; 11470 err.token = e.token; 11471 throw err; 11472 } 11473 // We add new states to table[current+1] 11474 var column = this.table[this.current]; 11475 11476 // GC unused states 11477 if (!this.options.keepHistory) { 11478 delete this.table[this.current - 1]; 11479 } 11480 11481 var n = this.current + 1; 11482 var nextColumn = new Column(this.grammar, n); 11483 this.table.push(nextColumn); 11484 11485 // Advance all tokens that expect the symbol 11486 var literal = token.text !== undefined ? token.text : token.value; 11487 var value = lexer.constructor === StreamLexer ? token.value : token; 11488 var scannable = column.scannable; 11489 for (var w = scannable.length; w--; ) { 11490 var state = scannable[w]; 11491 var expect = state.rule.symbols[state.dot]; 11492 // Try to consume the token 11493 // either regex or literal 11494 if (expect.test ? expect.test(value) : 11495 expect.type ? expect.type === token.type 11496 : expect.literal === literal) { 11497 // Add it 11498 var next = state.nextState({data: value, token: token, isToken: true, reference: n - 1}); 11499 nextColumn.states.push(next); 11500 } 11501 } 11502 11503 // Next, for each of the rules, we either 11504 // (a) complete it, and try to see if the reference row expected that 11505 // rule 11506 // (b) predict the next nonterminal it expects by adding that 11507 // nonterminal's start state 11508 // To prevent duplication, we also keep track of rules we have already 11509 // added 11510 11511 nextColumn.process(); 11512 11513 // If needed, throw an error: 11514 if (nextColumn.states.length === 0) { 11515 // No states at all! This is not good. 11516 var err = new Error(this.reportError(token)); 11517 err.offset = this.current; 11518 err.token = token; 11519 throw err; 11520 } 11521 11522 // maybe save lexer state 11523 if (this.options.keepHistory) { 11524 column.lexerState = lexer.save() 11525 } 11526 11527 this.current++; 11528 } 11529 if (column) { 11530 this.lexerState = lexer.save() 11531 } 11532 11533 // Incrementally keep track of results 11534 this.results = this.finish(); 11535 11536 // Allow chaining, for whatever it's worth 11537 return this; 11538 }; 11539 11540 Parser.prototype.reportLexerError = function(lexerError) { 11541 var tokenDisplay, lexerMessage; 11542 // Planning to add a token property to moo's thrown error 11543 // even on erroring tokens to be used in error display below 11544 var token = lexerError.token; 11545 if (token) { 11546 tokenDisplay = "input " + JSON.stringify(token.text[0]) + " (lexer error)"; 11547 lexerMessage = this.lexer.formatError(token, "Syntax error"); 11548 } else { 11549 tokenDisplay = "input (lexer error)"; 11550 lexerMessage = lexerError.message; 11551 } 11552 return this.reportErrorCommon(lexerMessage, tokenDisplay); 11553 }; 11554 11555 Parser.prototype.reportError = function(token) { 11556 var tokenDisplay = (token.type ? token.type + " token: " : "") + JSON.stringify(token.value !== undefined ? token.value : token); 11557 var lexerMessage = this.lexer.formatError(token, "Syntax error"); 11558 return this.reportErrorCommon(lexerMessage, tokenDisplay); 11559 }; 11560 11561 Parser.prototype.reportErrorCommon = function(lexerMessage, tokenDisplay) { 11562 var lines = []; 11563 lines.push(lexerMessage); 11564 var lastColumnIndex = this.table.length - 2; 11565 var lastColumn = this.table[lastColumnIndex]; 11566 var expectantStates = lastColumn.states 11567 .filter(function(state) { 11568 var nextSymbol = state.rule.symbols[state.dot]; 11569 return nextSymbol && typeof nextSymbol !== "string"; 11570 }); 11571 11572 if (expectantStates.length === 0) { 11573 lines.push('Unexpected ' + tokenDisplay + '. I did not expect any more input. Here is the state of my parse table:\n'); 11574 this.displayStateStack(lastColumn.states, lines); 11575 } else { 11576 lines.push('Unexpected ' + tokenDisplay + '. Instead, I was expecting to see one of the following:\n'); 11577 // Display a "state stack" for each expectant state 11578 // - which shows you how this state came to be, step by step. 11579 // If there is more than one derivation, we only display the first one. 11580 var stateStacks = expectantStates 11581 .map(function(state) { 11582 return this.buildFirstStateStack(state, []) || [state]; 11583 }, this); 11584 // Display each state that is expecting a terminal symbol next. 11585 stateStacks.forEach(function(stateStack) { 11586 var state = stateStack[0]; 11587 var nextSymbol = state.rule.symbols[state.dot]; 11588 var symbolDisplay = this.getSymbolDisplay(nextSymbol); 11589 lines.push('A ' + symbolDisplay + ' based on:'); 11590 this.displayStateStack(stateStack, lines); 11591 }, this); 11592 } 11593 lines.push(""); 11594 return lines.join("\n"); 11595 } 11596 11597 Parser.prototype.displayStateStack = function(stateStack, lines) { 11598 var lastDisplay; 11599 var sameDisplayCount = 0; 11600 for (var j = 0; j < stateStack.length; j++) { 11601 var state = stateStack[j]; 11602 var display = state.rule.toString(state.dot); 11603 if (display === lastDisplay) { 11604 sameDisplayCount++; 11605 } else { 11606 if (sameDisplayCount > 0) { 11607 lines.push(' ^ ' + sameDisplayCount + ' more lines identical to this'); 11608 } 11609 sameDisplayCount = 0; 11610 lines.push(' ' + display); 11611 } 11612 lastDisplay = display; 11613 } 11614 }; 11615 11616 Parser.prototype.getSymbolDisplay = function(symbol) { 11617 return getSymbolLongDisplay(symbol); 11618 }; 11619 11620 /* 11621 Builds a the first state stack. You can think of a state stack as the call stack 11622 of the recursive-descent parser which the Nearley parse algorithm simulates. 11623 A state stack is represented as an array of state objects. Within a 11624 state stack, the first item of the array will be the starting 11625 state, with each successive item in the array going further back into history. 11626 11627 This function needs to be given a starting state and an empty array representing 11628 the visited states, and it returns an single state stack. 11629 11630 */ 11631 Parser.prototype.buildFirstStateStack = function(state, visited) { 11632 if (visited.indexOf(state) !== -1) { 11633 // Found cycle, return null 11634 // to eliminate this path from the results, because 11635 // we don't know how to display it meaningfully 11636 return null; 11637 } 11638 if (state.wantedBy.length === 0) { 11639 return [state]; 11640 } 11641 var prevState = state.wantedBy[0]; 11642 var childVisited = [state].concat(visited); 11643 var childResult = this.buildFirstStateStack(prevState, childVisited); 11644 if (childResult === null) { 11645 return null; 11646 } 11647 return [state].concat(childResult); 11648 }; 11649 11650 Parser.prototype.save = function() { 11651 var column = this.table[this.current]; 11652 column.lexerState = this.lexerState; 11653 return column; 11654 }; 11655 11656 Parser.prototype.restore = function(column) { 11657 var index = column.index; 11658 this.current = index; 11659 this.table[index] = column; 11660 this.table.splice(index + 1); 11661 this.lexerState = column.lexerState; 11662 11663 // Incrementally keep track of results 11664 this.results = this.finish(); 11665 }; 11666 11667 // nb. deprecated: use save/restore instead! 11668 Parser.prototype.rewind = function(index) { 11669 if (!this.options.keepHistory) { 11670 throw new Error('set option `keepHistory` to enable rewinding') 11671 } 11672 // nb. recall column (table) indicies fall between token indicies. 11673 // col 0 -- token 0 -- col 1 11674 this.restore(this.table[index]); 11675 }; 11676 11677 Parser.prototype.finish = function() { 11678 // Return the possible parsings 11679 var considerations = []; 11680 var start = this.grammar.start; 11681 var column = this.table[this.table.length - 1] 11682 column.states.forEach(function (t) { 11683 if (t.rule.name === start 11684 && t.dot === t.rule.symbols.length 11685 && t.reference === 0 11686 && t.data !== Parser.fail) { 11687 considerations.push(t); 11688 } 11689 }); 11690 return considerations.map(function(c) {return c.data; }); 11691 }; 11692 11693 function getSymbolLongDisplay(symbol) { 11694 var type = typeof symbol; 11695 if (type === "string") { 11696 return symbol; 11697 } else if (type === "object") { 11698 if (symbol.literal) { 11699 return JSON.stringify(symbol.literal); 11700 } else if (symbol instanceof RegExp) { 11701 return 'character matching ' + symbol; 11702 } else if (symbol.type) { 11703 return symbol.type + ' token'; 11704 } else if (symbol.test) { 11705 return 'token matching ' + String(symbol.test); 11706 } else { 11707 throw new Error('Unknown symbol type: ' + symbol); 11708 } 11709 } 11710 } 11711 11712 function getSymbolShortDisplay(symbol) { 11713 var type = typeof symbol; 11714 if (type === "string") { 11715 return symbol; 11716 } else if (type === "object") { 11717 if (symbol.literal) { 11718 return JSON.stringify(symbol.literal); 11719 } else if (symbol instanceof RegExp) { 11720 return symbol.toString(); 11721 } else if (symbol.type) { 11722 return '%' + symbol.type; 11723 } else if (symbol.test) { 11724 return '<' + String(symbol.test) + '>'; 11725 } else { 11726 throw new Error('Unknown symbol type: ' + symbol); 11727 } 11728 } 11729 } 11730 11731 return { 11732 Parser: Parser, 11733 Grammar: Grammar, 11734 Rule: Rule, 11735 }; 11736 11737 })); 11738 11739 11740 /***/ }), 11741 11742 /***/ 467: 11743 /***/ ((module, exports, __nccwpck_require__) => { 11744 11745 11746 11747 Object.defineProperty(exports, "__esModule", ({ value: true })); 11748 11749 function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } 11750 11751 var Stream = _interopDefault(__nccwpck_require__(2781)); 11752 var http = _interopDefault(__nccwpck_require__(3685)); 11753 var Url = _interopDefault(__nccwpck_require__(7310)); 11754 var whatwgUrl = _interopDefault(__nccwpck_require__(8665)); 11755 var https = _interopDefault(__nccwpck_require__(5687)); 11756 var zlib = _interopDefault(__nccwpck_require__(9796)); 11757 11758 // Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js 11759 11760 // fix for "Readable" isn't a named export issue 11761 const Readable = Stream.Readable; 11762 11763 const BUFFER = Symbol('buffer'); 11764 const TYPE = Symbol('type'); 11765 11766 class Blob { 11767 constructor() { 11768 this[TYPE] = ''; 11769 11770 const blobParts = arguments[0]; 11771 const options = arguments[1]; 11772 11773 const buffers = []; 11774 let size = 0; 11775 11776 if (blobParts) { 11777 const a = blobParts; 11778 const length = Number(a.length); 11779 for (let i = 0; i < length; i++) { 11780 const element = a[i]; 11781 let buffer; 11782 if (element instanceof Buffer) { 11783 buffer = element; 11784 } else if (ArrayBuffer.isView(element)) { 11785 buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); 11786 } else if (element instanceof ArrayBuffer) { 11787 buffer = Buffer.from(element); 11788 } else if (element instanceof Blob) { 11789 buffer = element[BUFFER]; 11790 } else { 11791 buffer = Buffer.from(typeof element === 'string' ? element : String(element)); 11792 } 11793 size += buffer.length; 11794 buffers.push(buffer); 11795 } 11796 } 11797 11798 this[BUFFER] = Buffer.concat(buffers); 11799 11800 let type = options && options.type !== undefined && String(options.type).toLowerCase(); 11801 if (type && !/[^\u0020-\u007E]/.test(type)) { 11802 this[TYPE] = type; 11803 } 11804 } 11805 get size() { 11806 return this[BUFFER].length; 11807 } 11808 get type() { 11809 return this[TYPE]; 11810 } 11811 text() { 11812 return Promise.resolve(this[BUFFER].toString()); 11813 } 11814 arrayBuffer() { 11815 const buf = this[BUFFER]; 11816 const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); 11817 return Promise.resolve(ab); 11818 } 11819 stream() { 11820 const readable = new Readable(); 11821 readable._read = function () {}; 11822 readable.push(this[BUFFER]); 11823 readable.push(null); 11824 return readable; 11825 } 11826 toString() { 11827 return '[object Blob]'; 11828 } 11829 slice() { 11830 const size = this.size; 11831 11832 const start = arguments[0]; 11833 const end = arguments[1]; 11834 let relativeStart, relativeEnd; 11835 if (start === undefined) { 11836 relativeStart = 0; 11837 } else if (start < 0) { 11838 relativeStart = Math.max(size + start, 0); 11839 } else { 11840 relativeStart = Math.min(start, size); 11841 } 11842 if (end === undefined) { 11843 relativeEnd = size; 11844 } else if (end < 0) { 11845 relativeEnd = Math.max(size + end, 0); 11846 } else { 11847 relativeEnd = Math.min(end, size); 11848 } 11849 const span = Math.max(relativeEnd - relativeStart, 0); 11850 11851 const buffer = this[BUFFER]; 11852 const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); 11853 const blob = new Blob([], { type: arguments[2] }); 11854 blob[BUFFER] = slicedBuffer; 11855 return blob; 11856 } 11857 } 11858 11859 Object.defineProperties(Blob.prototype, { 11860 size: { enumerable: true }, 11861 type: { enumerable: true }, 11862 slice: { enumerable: true } 11863 }); 11864 11865 Object.defineProperty(Blob.prototype, Symbol.toStringTag, { 11866 value: 'Blob', 11867 writable: false, 11868 enumerable: false, 11869 configurable: true 11870 }); 11871 11872 /** 11873 * fetch-error.js 11874 * 11875 * FetchError interface for operational errors 11876 */ 11877 11878 /** 11879 * Create FetchError instance 11880 * 11881 * @param String message Error message for human 11882 * @param String type Error type for machine 11883 * @param String systemError For Node.js system error 11884 * @return FetchError 11885 */ 11886 function FetchError(message, type, systemError) { 11887 Error.call(this, message); 11888 11889 this.message = message; 11890 this.type = type; 11891 11892 // when err.type is `system`, err.code contains system error code 11893 if (systemError) { 11894 this.code = this.errno = systemError.code; 11895 } 11896 11897 // hide custom error implementation details from end-users 11898 Error.captureStackTrace(this, this.constructor); 11899 } 11900 11901 FetchError.prototype = Object.create(Error.prototype); 11902 FetchError.prototype.constructor = FetchError; 11903 FetchError.prototype.name = 'FetchError'; 11904 11905 let convert; 11906 try { 11907 convert = (__nccwpck_require__(2877).convert); 11908 } catch (e) {} 11909 11910 const INTERNALS = Symbol('Body internals'); 11911 11912 // fix an issue where "PassThrough" isn't a named export for node <10 11913 const PassThrough = Stream.PassThrough; 11914 11915 /** 11916 * Body mixin 11917 * 11918 * Ref: https://fetch.spec.whatwg.org/#body 11919 * 11920 * @param Stream body Readable stream 11921 * @param Object opts Response options 11922 * @return Void 11923 */ 11924 function Body(body) { 11925 var _this = this; 11926 11927 var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, 11928 _ref$size = _ref.size; 11929 11930 let size = _ref$size === undefined ? 0 : _ref$size; 11931 var _ref$timeout = _ref.timeout; 11932 let timeout = _ref$timeout === undefined ? 0 : _ref$timeout; 11933 11934 if (body == null) { 11935 // body is undefined or null 11936 body = null; 11937 } else if (isURLSearchParams(body)) { 11938 // body is a URLSearchParams 11939 body = Buffer.from(body.toString()); 11940 } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { 11941 // body is ArrayBuffer 11942 body = Buffer.from(body); 11943 } else if (ArrayBuffer.isView(body)) { 11944 // body is ArrayBufferView 11945 body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); 11946 } else if (body instanceof Stream) ; else { 11947 // none of the above 11948 // coerce to string then buffer 11949 body = Buffer.from(String(body)); 11950 } 11951 this[INTERNALS] = { 11952 body, 11953 disturbed: false, 11954 error: null 11955 }; 11956 this.size = size; 11957 this.timeout = timeout; 11958 11959 if (body instanceof Stream) { 11960 body.on('error', function (err) { 11961 const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err); 11962 _this[INTERNALS].error = error; 11963 }); 11964 } 11965 } 11966 11967 Body.prototype = { 11968 get body() { 11969 return this[INTERNALS].body; 11970 }, 11971 11972 get bodyUsed() { 11973 return this[INTERNALS].disturbed; 11974 }, 11975 11976 /** 11977 * Decode response as ArrayBuffer 11978 * 11979 * @return Promise 11980 */ 11981 arrayBuffer() { 11982 return consumeBody.call(this).then(function (buf) { 11983 return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); 11984 }); 11985 }, 11986 11987 /** 11988 * Return raw response as Blob 11989 * 11990 * @return Promise 11991 */ 11992 blob() { 11993 let ct = this.headers && this.headers.get('content-type') || ''; 11994 return consumeBody.call(this).then(function (buf) { 11995 return Object.assign( 11996 // Prevent copying 11997 new Blob([], { 11998 type: ct.toLowerCase() 11999 }), { 12000 [BUFFER]: buf 12001 }); 12002 }); 12003 }, 12004 12005 /** 12006 * Decode response as json 12007 * 12008 * @return Promise 12009 */ 12010 json() { 12011 var _this2 = this; 12012 12013 return consumeBody.call(this).then(function (buffer) { 12014 try { 12015 return JSON.parse(buffer.toString()); 12016 } catch (err) { 12017 return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json')); 12018 } 12019 }); 12020 }, 12021 12022 /** 12023 * Decode response as text 12024 * 12025 * @return Promise 12026 */ 12027 text() { 12028 return consumeBody.call(this).then(function (buffer) { 12029 return buffer.toString(); 12030 }); 12031 }, 12032 12033 /** 12034 * Decode response as buffer (non-spec api) 12035 * 12036 * @return Promise 12037 */ 12038 buffer() { 12039 return consumeBody.call(this); 12040 }, 12041 12042 /** 12043 * Decode response as text, while automatically detecting the encoding and 12044 * trying to decode to UTF-8 (non-spec api) 12045 * 12046 * @return Promise 12047 */ 12048 textConverted() { 12049 var _this3 = this; 12050 12051 return consumeBody.call(this).then(function (buffer) { 12052 return convertBody(buffer, _this3.headers); 12053 }); 12054 } 12055 }; 12056 12057 // In browsers, all properties are enumerable. 12058 Object.defineProperties(Body.prototype, { 12059 body: { enumerable: true }, 12060 bodyUsed: { enumerable: true }, 12061 arrayBuffer: { enumerable: true }, 12062 blob: { enumerable: true }, 12063 json: { enumerable: true }, 12064 text: { enumerable: true } 12065 }); 12066 12067 Body.mixIn = function (proto) { 12068 for (const name of Object.getOwnPropertyNames(Body.prototype)) { 12069 // istanbul ignore else: future proof 12070 if (!(name in proto)) { 12071 const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); 12072 Object.defineProperty(proto, name, desc); 12073 } 12074 } 12075 }; 12076 12077 /** 12078 * Consume and convert an entire Body to a Buffer. 12079 * 12080 * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body 12081 * 12082 * @return Promise 12083 */ 12084 function consumeBody() { 12085 var _this4 = this; 12086 12087 if (this[INTERNALS].disturbed) { 12088 return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); 12089 } 12090 12091 this[INTERNALS].disturbed = true; 12092 12093 if (this[INTERNALS].error) { 12094 return Body.Promise.reject(this[INTERNALS].error); 12095 } 12096 12097 let body = this.body; 12098 12099 // body is null 12100 if (body === null) { 12101 return Body.Promise.resolve(Buffer.alloc(0)); 12102 } 12103 12104 // body is blob 12105 if (isBlob(body)) { 12106 body = body.stream(); 12107 } 12108 12109 // body is buffer 12110 if (Buffer.isBuffer(body)) { 12111 return Body.Promise.resolve(body); 12112 } 12113 12114 // istanbul ignore if: should never happen 12115 if (!(body instanceof Stream)) { 12116 return Body.Promise.resolve(Buffer.alloc(0)); 12117 } 12118 12119 // body is stream 12120 // get ready to actually consume the body 12121 let accum = []; 12122 let accumBytes = 0; 12123 let abort = false; 12124 12125 return new Body.Promise(function (resolve, reject) { 12126 let resTimeout; 12127 12128 // allow timeout on slow response body 12129 if (_this4.timeout) { 12130 resTimeout = setTimeout(function () { 12131 abort = true; 12132 reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout')); 12133 }, _this4.timeout); 12134 } 12135 12136 // handle stream errors 12137 body.on('error', function (err) { 12138 if (err.name === 'AbortError') { 12139 // if the request was aborted, reject with this Error 12140 abort = true; 12141 reject(err); 12142 } else { 12143 // other errors, such as incorrect content-encoding 12144 reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err)); 12145 } 12146 }); 12147 12148 body.on('data', function (chunk) { 12149 if (abort || chunk === null) { 12150 return; 12151 } 12152 12153 if (_this4.size && accumBytes + chunk.length > _this4.size) { 12154 abort = true; 12155 reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size')); 12156 return; 12157 } 12158 12159 accumBytes += chunk.length; 12160 accum.push(chunk); 12161 }); 12162 12163 body.on('end', function () { 12164 if (abort) { 12165 return; 12166 } 12167 12168 clearTimeout(resTimeout); 12169 12170 try { 12171 resolve(Buffer.concat(accum, accumBytes)); 12172 } catch (err) { 12173 // handle streams that have accumulated too much data (issue #414) 12174 reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err)); 12175 } 12176 }); 12177 }); 12178 } 12179 12180 /** 12181 * Detect buffer encoding and convert to target encoding 12182 * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding 12183 * 12184 * @param Buffer buffer Incoming buffer 12185 * @param String encoding Target encoding 12186 * @return String 12187 */ 12188 function convertBody(buffer, headers) { 12189 if (typeof convert !== 'function') { 12190 throw new Error('The package `encoding` must be installed to use the textConverted() function'); 12191 } 12192 12193 const ct = headers.get('content-type'); 12194 let charset = 'utf-8'; 12195 let res, str; 12196 12197 // header 12198 if (ct) { 12199 res = /charset=([^;]*)/i.exec(ct); 12200 } 12201 12202 // no charset in content type, peek at response body for at most 1024 bytes 12203 str = buffer.slice(0, 1024).toString(); 12204 12205 // html5 12206 if (!res && str) { 12207 res = /<meta.+?charset=(['"])(.+?)\1/i.exec(str); 12208 } 12209 12210 // html4 12211 if (!res && str) { 12212 res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(str); 12213 if (!res) { 12214 res = /<meta[\s]+?content=(['"])(.+?)\1[\s]+?http-equiv=(['"])content-type\3/i.exec(str); 12215 if (res) { 12216 res.pop(); // drop last quote 12217 } 12218 } 12219 12220 if (res) { 12221 res = /charset=(.*)/i.exec(res.pop()); 12222 } 12223 } 12224 12225 // xml 12226 if (!res && str) { 12227 res = /<\?xml.+?encoding=(['"])(.+?)\1/i.exec(str); 12228 } 12229 12230 // found charset 12231 if (res) { 12232 charset = res.pop(); 12233 12234 // prevent decode issues when sites use incorrect encoding 12235 // ref: https://hsivonen.fi/encoding-menu/ 12236 if (charset === 'gb2312' || charset === 'gbk') { 12237 charset = 'gb18030'; 12238 } 12239 } 12240 12241 // turn raw buffers into a single utf-8 buffer 12242 return convert(buffer, 'UTF-8', charset).toString(); 12243 } 12244 12245 /** 12246 * Detect a URLSearchParams object 12247 * ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143 12248 * 12249 * @param Object obj Object to detect by type or brand 12250 * @return String 12251 */ 12252 function isURLSearchParams(obj) { 12253 // Duck-typing as a necessary condition. 12254 if (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') { 12255 return false; 12256 } 12257 12258 // Brand-checking and more duck-typing as optional condition. 12259 return obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function'; 12260 } 12261 12262 /** 12263 * Check if `obj` is a W3C `Blob` object (which `File` inherits from) 12264 * @param {*} obj 12265 * @return {boolean} 12266 */ 12267 function isBlob(obj) { 12268 return typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]); 12269 } 12270 12271 /** 12272 * Clone body given Res/Req instance 12273 * 12274 * @param Mixed instance Response or Request instance 12275 * @return Mixed 12276 */ 12277 function clone(instance) { 12278 let p1, p2; 12279 let body = instance.body; 12280 12281 // don't allow cloning a used body 12282 if (instance.bodyUsed) { 12283 throw new Error('cannot clone body after it is used'); 12284 } 12285 12286 // check that body is a stream and not form-data object 12287 // note: we can't clone the form-data object without having it as a dependency 12288 if (body instanceof Stream && typeof body.getBoundary !== 'function') { 12289 // tee instance body 12290 p1 = new PassThrough(); 12291 p2 = new PassThrough(); 12292 body.pipe(p1); 12293 body.pipe(p2); 12294 // set instance body to teed body and return the other teed body 12295 instance[INTERNALS].body = p1; 12296 body = p2; 12297 } 12298 12299 return body; 12300 } 12301 12302 /** 12303 * Performs the operation "extract a `Content-Type` value from |object|" as 12304 * specified in the specification: 12305 * https://fetch.spec.whatwg.org/#concept-bodyinit-extract 12306 * 12307 * This function assumes that instance.body is present. 12308 * 12309 * @param Mixed instance Any options.body input 12310 */ 12311 function extractContentType(body) { 12312 if (body === null) { 12313 // body is null 12314 return null; 12315 } else if (typeof body === 'string') { 12316 // body is string 12317 return 'text/plain;charset=UTF-8'; 12318 } else if (isURLSearchParams(body)) { 12319 // body is a URLSearchParams 12320 return 'application/x-www-form-urlencoded;charset=UTF-8'; 12321 } else if (isBlob(body)) { 12322 // body is blob 12323 return body.type || null; 12324 } else if (Buffer.isBuffer(body)) { 12325 // body is buffer 12326 return null; 12327 } else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { 12328 // body is ArrayBuffer 12329 return null; 12330 } else if (ArrayBuffer.isView(body)) { 12331 // body is ArrayBufferView 12332 return null; 12333 } else if (typeof body.getBoundary === 'function') { 12334 // detect form data input from form-data module 12335 return `multipart/form-data;boundary=${body.getBoundary()}`; 12336 } else if (body instanceof Stream) { 12337 // body is stream 12338 // can't really do much about this 12339 return null; 12340 } else { 12341 // Body constructor defaults other things to string 12342 return 'text/plain;charset=UTF-8'; 12343 } 12344 } 12345 12346 /** 12347 * The Fetch Standard treats this as if "total bytes" is a property on the body. 12348 * For us, we have to explicitly get it with a function. 12349 * 12350 * ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes 12351 * 12352 * @param Body instance Instance of Body 12353 * @return Number? Number of bytes, or null if not possible 12354 */ 12355 function getTotalBytes(instance) { 12356 const body = instance.body; 12357 12358 12359 if (body === null) { 12360 // body is null 12361 return 0; 12362 } else if (isBlob(body)) { 12363 return body.size; 12364 } else if (Buffer.isBuffer(body)) { 12365 // body is buffer 12366 return body.length; 12367 } else if (body && typeof body.getLengthSync === 'function') { 12368 // detect form data input from form-data module 12369 if (body._lengthRetrievers && body._lengthRetrievers.length == 0 || // 1.x 12370 body.hasKnownLength && body.hasKnownLength()) { 12371 // 2.x 12372 return body.getLengthSync(); 12373 } 12374 return null; 12375 } else { 12376 // body is stream 12377 return null; 12378 } 12379 } 12380 12381 /** 12382 * Write a Body to a Node.js WritableStream (e.g. http.Request) object. 12383 * 12384 * @param Body instance Instance of Body 12385 * @return Void 12386 */ 12387 function writeToStream(dest, instance) { 12388 const body = instance.body; 12389 12390 12391 if (body === null) { 12392 // body is null 12393 dest.end(); 12394 } else if (isBlob(body)) { 12395 body.stream().pipe(dest); 12396 } else if (Buffer.isBuffer(body)) { 12397 // body is buffer 12398 dest.write(body); 12399 dest.end(); 12400 } else { 12401 // body is stream 12402 body.pipe(dest); 12403 } 12404 } 12405 12406 // expose Promise 12407 Body.Promise = global.Promise; 12408 12409 /** 12410 * headers.js 12411 * 12412 * Headers class offers convenient helpers 12413 */ 12414 12415 const invalidTokenRegex = /[^\^_`a-zA-Z\-0-9!#$%&'*+.|~]/; 12416 const invalidHeaderCharRegex = /[^\t\x20-\x7e\x80-\xff]/; 12417 12418 function validateName(name) { 12419 name = `${name}`; 12420 if (invalidTokenRegex.test(name) || name === '') { 12421 throw new TypeError(`${name} is not a legal HTTP header name`); 12422 } 12423 } 12424 12425 function validateValue(value) { 12426 value = `${value}`; 12427 if (invalidHeaderCharRegex.test(value)) { 12428 throw new TypeError(`${value} is not a legal HTTP header value`); 12429 } 12430 } 12431 12432 /** 12433 * Find the key in the map object given a header name. 12434 * 12435 * Returns undefined if not found. 12436 * 12437 * @param String name Header name 12438 * @return String|Undefined 12439 */ 12440 function find(map, name) { 12441 name = name.toLowerCase(); 12442 for (const key in map) { 12443 if (key.toLowerCase() === name) { 12444 return key; 12445 } 12446 } 12447 return undefined; 12448 } 12449 12450 const MAP = Symbol('map'); 12451 class Headers { 12452 /** 12453 * Headers class 12454 * 12455 * @param Object headers Response headers 12456 * @return Void 12457 */ 12458 constructor() { 12459 let init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; 12460 12461 this[MAP] = Object.create(null); 12462 12463 if (init instanceof Headers) { 12464 const rawHeaders = init.raw(); 12465 const headerNames = Object.keys(rawHeaders); 12466 12467 for (const headerName of headerNames) { 12468 for (const value of rawHeaders[headerName]) { 12469 this.append(headerName, value); 12470 } 12471 } 12472 12473 return; 12474 } 12475 12476 // We don't worry about converting prop to ByteString here as append() 12477 // will handle it. 12478 if (init == null) ; else if (typeof init === 'object') { 12479 const method = init[Symbol.iterator]; 12480 if (method != null) { 12481 if (typeof method !== 'function') { 12482 throw new TypeError('Header pairs must be iterable'); 12483 } 12484 12485 // sequence<sequence<ByteString>> 12486 // Note: per spec we have to first exhaust the lists then process them 12487 const pairs = []; 12488 for (const pair of init) { 12489 if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') { 12490 throw new TypeError('Each header pair must be iterable'); 12491 } 12492 pairs.push(Array.from(pair)); 12493 } 12494 12495 for (const pair of pairs) { 12496 if (pair.length !== 2) { 12497 throw new TypeError('Each header pair must be a name/value tuple'); 12498 } 12499 this.append(pair[0], pair[1]); 12500 } 12501 } else { 12502 // record<ByteString, ByteString> 12503 for (const key of Object.keys(init)) { 12504 const value = init[key]; 12505 this.append(key, value); 12506 } 12507 } 12508 } else { 12509 throw new TypeError('Provided initializer must be an object'); 12510 } 12511 } 12512 12513 /** 12514 * Return combined header value given name 12515 * 12516 * @param String name Header name 12517 * @return Mixed 12518 */ 12519 get(name) { 12520 name = `${name}`; 12521 validateName(name); 12522 const key = find(this[MAP], name); 12523 if (key === undefined) { 12524 return null; 12525 } 12526 12527 return this[MAP][key].join(', '); 12528 } 12529 12530 /** 12531 * Iterate over all headers 12532 * 12533 * @param Function callback Executed for each item with parameters (value, name, thisArg) 12534 * @param Boolean thisArg `this` context for callback function 12535 * @return Void 12536 */ 12537 forEach(callback) { 12538 let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; 12539 12540 let pairs = getHeaders(this); 12541 let i = 0; 12542 while (i < pairs.length) { 12543 var _pairs$i = pairs[i]; 12544 const name = _pairs$i[0], 12545 value = _pairs$i[1]; 12546 12547 callback.call(thisArg, value, name, this); 12548 pairs = getHeaders(this); 12549 i++; 12550 } 12551 } 12552 12553 /** 12554 * Overwrite header values given name 12555 * 12556 * @param String name Header name 12557 * @param String value Header value 12558 * @return Void 12559 */ 12560 set(name, value) { 12561 name = `${name}`; 12562 value = `${value}`; 12563 validateName(name); 12564 validateValue(value); 12565 const key = find(this[MAP], name); 12566 this[MAP][key !== undefined ? key : name] = [value]; 12567 } 12568 12569 /** 12570 * Append a value onto existing header 12571 * 12572 * @param String name Header name 12573 * @param String value Header value 12574 * @return Void 12575 */ 12576 append(name, value) { 12577 name = `${name}`; 12578 value = `${value}`; 12579 validateName(name); 12580 validateValue(value); 12581 const key = find(this[MAP], name); 12582 if (key !== undefined) { 12583 this[MAP][key].push(value); 12584 } else { 12585 this[MAP][name] = [value]; 12586 } 12587 } 12588 12589 /** 12590 * Check for header name existence 12591 * 12592 * @param String name Header name 12593 * @return Boolean 12594 */ 12595 has(name) { 12596 name = `${name}`; 12597 validateName(name); 12598 return find(this[MAP], name) !== undefined; 12599 } 12600 12601 /** 12602 * Delete all header values given name 12603 * 12604 * @param String name Header name 12605 * @return Void 12606 */ 12607 delete(name) { 12608 name = `${name}`; 12609 validateName(name); 12610 const key = find(this[MAP], name); 12611 if (key !== undefined) { 12612 delete this[MAP][key]; 12613 } 12614 } 12615 12616 /** 12617 * Return raw headers (non-spec api) 12618 * 12619 * @return Object 12620 */ 12621 raw() { 12622 return this[MAP]; 12623 } 12624 12625 /** 12626 * Get an iterator on keys. 12627 * 12628 * @return Iterator 12629 */ 12630 keys() { 12631 return createHeadersIterator(this, 'key'); 12632 } 12633 12634 /** 12635 * Get an iterator on values. 12636 * 12637 * @return Iterator 12638 */ 12639 values() { 12640 return createHeadersIterator(this, 'value'); 12641 } 12642 12643 /** 12644 * Get an iterator on entries. 12645 * 12646 * This is the default iterator of the Headers object. 12647 * 12648 * @return Iterator 12649 */ 12650 [Symbol.iterator]() { 12651 return createHeadersIterator(this, 'key+value'); 12652 } 12653 } 12654 Headers.prototype.entries = Headers.prototype[Symbol.iterator]; 12655 12656 Object.defineProperty(Headers.prototype, Symbol.toStringTag, { 12657 value: 'Headers', 12658 writable: false, 12659 enumerable: false, 12660 configurable: true 12661 }); 12662 12663 Object.defineProperties(Headers.prototype, { 12664 get: { enumerable: true }, 12665 forEach: { enumerable: true }, 12666 set: { enumerable: true }, 12667 append: { enumerable: true }, 12668 has: { enumerable: true }, 12669 delete: { enumerable: true }, 12670 keys: { enumerable: true }, 12671 values: { enumerable: true }, 12672 entries: { enumerable: true } 12673 }); 12674 12675 function getHeaders(headers) { 12676 let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value'; 12677 12678 const keys = Object.keys(headers[MAP]).sort(); 12679 return keys.map(kind === 'key' ? function (k) { 12680 return k.toLowerCase(); 12681 } : kind === 'value' ? function (k) { 12682 return headers[MAP][k].join(', '); 12683 } : function (k) { 12684 return [k.toLowerCase(), headers[MAP][k].join(', ')]; 12685 }); 12686 } 12687 12688 const INTERNAL = Symbol('internal'); 12689 12690 function createHeadersIterator(target, kind) { 12691 const iterator = Object.create(HeadersIteratorPrototype); 12692 iterator[INTERNAL] = { 12693 target, 12694 kind, 12695 index: 0 12696 }; 12697 return iterator; 12698 } 12699 12700 const HeadersIteratorPrototype = Object.setPrototypeOf({ 12701 next() { 12702 // istanbul ignore if 12703 if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { 12704 throw new TypeError('Value of `this` is not a HeadersIterator'); 12705 } 12706 12707 var _INTERNAL = this[INTERNAL]; 12708 const target = _INTERNAL.target, 12709 kind = _INTERNAL.kind, 12710 index = _INTERNAL.index; 12711 12712 const values = getHeaders(target, kind); 12713 const len = values.length; 12714 if (index >= len) { 12715 return { 12716 value: undefined, 12717 done: true 12718 }; 12719 } 12720 12721 this[INTERNAL].index = index + 1; 12722 12723 return { 12724 value: values[index], 12725 done: false 12726 }; 12727 } 12728 }, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); 12729 12730 Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { 12731 value: 'HeadersIterator', 12732 writable: false, 12733 enumerable: false, 12734 configurable: true 12735 }); 12736 12737 /** 12738 * Export the Headers object in a form that Node.js can consume. 12739 * 12740 * @param Headers headers 12741 * @return Object 12742 */ 12743 function exportNodeCompatibleHeaders(headers) { 12744 const obj = Object.assign({ __proto__: null }, headers[MAP]); 12745 12746 // http.request() only supports string as Host header. This hack makes 12747 // specifying custom Host header possible. 12748 const hostHeaderKey = find(headers[MAP], 'Host'); 12749 if (hostHeaderKey !== undefined) { 12750 obj[hostHeaderKey] = obj[hostHeaderKey][0]; 12751 } 12752 12753 return obj; 12754 } 12755 12756 /** 12757 * Create a Headers object from an object of headers, ignoring those that do 12758 * not conform to HTTP grammar productions. 12759 * 12760 * @param Object obj Object of headers 12761 * @return Headers 12762 */ 12763 function createHeadersLenient(obj) { 12764 const headers = new Headers(); 12765 for (const name of Object.keys(obj)) { 12766 if (invalidTokenRegex.test(name)) { 12767 continue; 12768 } 12769 if (Array.isArray(obj[name])) { 12770 for (const val of obj[name]) { 12771 if (invalidHeaderCharRegex.test(val)) { 12772 continue; 12773 } 12774 if (headers[MAP][name] === undefined) { 12775 headers[MAP][name] = [val]; 12776 } else { 12777 headers[MAP][name].push(val); 12778 } 12779 } 12780 } else if (!invalidHeaderCharRegex.test(obj[name])) { 12781 headers[MAP][name] = [obj[name]]; 12782 } 12783 } 12784 return headers; 12785 } 12786 12787 const INTERNALS$1 = Symbol('Response internals'); 12788 12789 // fix an issue where "STATUS_CODES" aren't a named export for node <10 12790 const STATUS_CODES = http.STATUS_CODES; 12791 12792 /** 12793 * Response class 12794 * 12795 * @param Stream body Readable stream 12796 * @param Object opts Response options 12797 * @return Void 12798 */ 12799 class Response { 12800 constructor() { 12801 let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; 12802 let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 12803 12804 Body.call(this, body, opts); 12805 12806 const status = opts.status || 200; 12807 const headers = new Headers(opts.headers); 12808 12809 if (body != null && !headers.has('Content-Type')) { 12810 const contentType = extractContentType(body); 12811 if (contentType) { 12812 headers.append('Content-Type', contentType); 12813 } 12814 } 12815 12816 this[INTERNALS$1] = { 12817 url: opts.url, 12818 status, 12819 statusText: opts.statusText || STATUS_CODES[status], 12820 headers, 12821 counter: opts.counter 12822 }; 12823 } 12824 12825 get url() { 12826 return this[INTERNALS$1].url || ''; 12827 } 12828 12829 get status() { 12830 return this[INTERNALS$1].status; 12831 } 12832 12833 /** 12834 * Convenience property representing if the request ended normally 12835 */ 12836 get ok() { 12837 return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; 12838 } 12839 12840 get redirected() { 12841 return this[INTERNALS$1].counter > 0; 12842 } 12843 12844 get statusText() { 12845 return this[INTERNALS$1].statusText; 12846 } 12847 12848 get headers() { 12849 return this[INTERNALS$1].headers; 12850 } 12851 12852 /** 12853 * Clone this response 12854 * 12855 * @return Response 12856 */ 12857 clone() { 12858 return new Response(clone(this), { 12859 url: this.url, 12860 status: this.status, 12861 statusText: this.statusText, 12862 headers: this.headers, 12863 ok: this.ok, 12864 redirected: this.redirected 12865 }); 12866 } 12867 } 12868 12869 Body.mixIn(Response.prototype); 12870 12871 Object.defineProperties(Response.prototype, { 12872 url: { enumerable: true }, 12873 status: { enumerable: true }, 12874 ok: { enumerable: true }, 12875 redirected: { enumerable: true }, 12876 statusText: { enumerable: true }, 12877 headers: { enumerable: true }, 12878 clone: { enumerable: true } 12879 }); 12880 12881 Object.defineProperty(Response.prototype, Symbol.toStringTag, { 12882 value: 'Response', 12883 writable: false, 12884 enumerable: false, 12885 configurable: true 12886 }); 12887 12888 const INTERNALS$2 = Symbol('Request internals'); 12889 const URL = Url.URL || whatwgUrl.URL; 12890 12891 // fix an issue where "format", "parse" aren't a named export for node <10 12892 const parse_url = Url.parse; 12893 const format_url = Url.format; 12894 12895 /** 12896 * Wrapper around `new URL` to handle arbitrary URLs 12897 * 12898 * @param {string} urlStr 12899 * @return {void} 12900 */ 12901 function parseURL(urlStr) { 12902 /* 12903 Check whether the URL is absolute or not 12904 Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 12905 Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 12906 */ 12907 if (/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(urlStr)) { 12908 urlStr = new URL(urlStr).toString(); 12909 } 12910 12911 // Fallback to old implementation for arbitrary URLs 12912 return parse_url(urlStr); 12913 } 12914 12915 const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; 12916 12917 /** 12918 * Check if a value is an instance of Request. 12919 * 12920 * @param Mixed input 12921 * @return Boolean 12922 */ 12923 function isRequest(input) { 12924 return typeof input === 'object' && typeof input[INTERNALS$2] === 'object'; 12925 } 12926 12927 function isAbortSignal(signal) { 12928 const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal); 12929 return !!(proto && proto.constructor.name === 'AbortSignal'); 12930 } 12931 12932 /** 12933 * Request class 12934 * 12935 * @param Mixed input Url or Request instance 12936 * @param Object init Custom options 12937 * @return Void 12938 */ 12939 class Request { 12940 constructor(input) { 12941 let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 12942 12943 let parsedURL; 12944 12945 // normalize input 12946 if (!isRequest(input)) { 12947 if (input && input.href) { 12948 // in order to support Node.js' Url objects; though WHATWG's URL objects 12949 // will fall into this branch also (since their `toString()` will return 12950 // `href` property anyway) 12951 parsedURL = parseURL(input.href); 12952 } else { 12953 // coerce input to a string before attempting to parse 12954 parsedURL = parseURL(`${input}`); 12955 } 12956 input = {}; 12957 } else { 12958 parsedURL = parseURL(input.url); 12959 } 12960 12961 let method = init.method || input.method || 'GET'; 12962 method = method.toUpperCase(); 12963 12964 if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) { 12965 throw new TypeError('Request with GET/HEAD method cannot have body'); 12966 } 12967 12968 let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; 12969 12970 Body.call(this, inputBody, { 12971 timeout: init.timeout || input.timeout || 0, 12972 size: init.size || input.size || 0 12973 }); 12974 12975 const headers = new Headers(init.headers || input.headers || {}); 12976 12977 if (inputBody != null && !headers.has('Content-Type')) { 12978 const contentType = extractContentType(inputBody); 12979 if (contentType) { 12980 headers.append('Content-Type', contentType); 12981 } 12982 } 12983 12984 let signal = isRequest(input) ? input.signal : null; 12985 if ('signal' in init) signal = init.signal; 12986 12987 if (signal != null && !isAbortSignal(signal)) { 12988 throw new TypeError('Expected signal to be an instanceof AbortSignal'); 12989 } 12990 12991 this[INTERNALS$2] = { 12992 method, 12993 redirect: init.redirect || input.redirect || 'follow', 12994 headers, 12995 parsedURL, 12996 signal 12997 }; 12998 12999 // node-fetch-only options 13000 this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20; 13001 this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true; 13002 this.counter = init.counter || input.counter || 0; 13003 this.agent = init.agent || input.agent; 13004 } 13005 13006 get method() { 13007 return this[INTERNALS$2].method; 13008 } 13009 13010 get url() { 13011 return format_url(this[INTERNALS$2].parsedURL); 13012 } 13013 13014 get headers() { 13015 return this[INTERNALS$2].headers; 13016 } 13017 13018 get redirect() { 13019 return this[INTERNALS$2].redirect; 13020 } 13021 13022 get signal() { 13023 return this[INTERNALS$2].signal; 13024 } 13025 13026 /** 13027 * Clone this request 13028 * 13029 * @return Request 13030 */ 13031 clone() { 13032 return new Request(this); 13033 } 13034 } 13035 13036 Body.mixIn(Request.prototype); 13037 13038 Object.defineProperty(Request.prototype, Symbol.toStringTag, { 13039 value: 'Request', 13040 writable: false, 13041 enumerable: false, 13042 configurable: true 13043 }); 13044 13045 Object.defineProperties(Request.prototype, { 13046 method: { enumerable: true }, 13047 url: { enumerable: true }, 13048 headers: { enumerable: true }, 13049 redirect: { enumerable: true }, 13050 clone: { enumerable: true }, 13051 signal: { enumerable: true } 13052 }); 13053 13054 /** 13055 * Convert a Request to Node.js http request options. 13056 * 13057 * @param Request A Request instance 13058 * @return Object The options object to be passed to http.request 13059 */ 13060 function getNodeRequestOptions(request) { 13061 const parsedURL = request[INTERNALS$2].parsedURL; 13062 const headers = new Headers(request[INTERNALS$2].headers); 13063 13064 // fetch step 1.3 13065 if (!headers.has('Accept')) { 13066 headers.set('Accept', '*/*'); 13067 } 13068 13069 // Basic fetch 13070 if (!parsedURL.protocol || !parsedURL.hostname) { 13071 throw new TypeError('Only absolute URLs are supported'); 13072 } 13073 13074 if (!/^https?:$/.test(parsedURL.protocol)) { 13075 throw new TypeError('Only HTTP(S) protocols are supported'); 13076 } 13077 13078 if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) { 13079 throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8'); 13080 } 13081 13082 // HTTP-network-or-cache fetch steps 2.4-2.7 13083 let contentLengthValue = null; 13084 if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { 13085 contentLengthValue = '0'; 13086 } 13087 if (request.body != null) { 13088 const totalBytes = getTotalBytes(request); 13089 if (typeof totalBytes === 'number') { 13090 contentLengthValue = String(totalBytes); 13091 } 13092 } 13093 if (contentLengthValue) { 13094 headers.set('Content-Length', contentLengthValue); 13095 } 13096 13097 // HTTP-network-or-cache fetch step 2.11 13098 if (!headers.has('User-Agent')) { 13099 headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'); 13100 } 13101 13102 // HTTP-network-or-cache fetch step 2.15 13103 if (request.compress && !headers.has('Accept-Encoding')) { 13104 headers.set('Accept-Encoding', 'gzip,deflate'); 13105 } 13106 13107 let agent = request.agent; 13108 if (typeof agent === 'function') { 13109 agent = agent(parsedURL); 13110 } 13111 13112 if (!headers.has('Connection') && !agent) { 13113 headers.set('Connection', 'close'); 13114 } 13115 13116 // HTTP-network fetch step 4.2 13117 // chunked encoding is handled by Node.js 13118 13119 return Object.assign({}, parsedURL, { 13120 method: request.method, 13121 headers: exportNodeCompatibleHeaders(headers), 13122 agent 13123 }); 13124 } 13125 13126 /** 13127 * abort-error.js 13128 * 13129 * AbortError interface for cancelled requests 13130 */ 13131 13132 /** 13133 * Create AbortError instance 13134 * 13135 * @param String message Error message for human 13136 * @return AbortError 13137 */ 13138 function AbortError(message) { 13139 Error.call(this, message); 13140 13141 this.type = 'aborted'; 13142 this.message = message; 13143 13144 // hide custom error implementation details from end-users 13145 Error.captureStackTrace(this, this.constructor); 13146 } 13147 13148 AbortError.prototype = Object.create(Error.prototype); 13149 AbortError.prototype.constructor = AbortError; 13150 AbortError.prototype.name = 'AbortError'; 13151 13152 const URL$1 = Url.URL || whatwgUrl.URL; 13153 13154 // fix an issue where "PassThrough", "resolve" aren't a named export for node <10 13155 const PassThrough$1 = Stream.PassThrough; 13156 13157 const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) { 13158 const orig = new URL$1(original).hostname; 13159 const dest = new URL$1(destination).hostname; 13160 13161 return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest); 13162 }; 13163 13164 /** 13165 * isSameProtocol reports whether the two provided URLs use the same protocol. 13166 * 13167 * Both domains must already be in canonical form. 13168 * @param {string|URL} original 13169 * @param {string|URL} destination 13170 */ 13171 const isSameProtocol = function isSameProtocol(destination, original) { 13172 const orig = new URL$1(original).protocol; 13173 const dest = new URL$1(destination).protocol; 13174 13175 return orig === dest; 13176 }; 13177 13178 /** 13179 * Fetch function 13180 * 13181 * @param Mixed url Absolute url or Request instance 13182 * @param Object opts Fetch options 13183 * @return Promise 13184 */ 13185 function fetch(url, opts) { 13186 13187 // allow custom promise 13188 if (!fetch.Promise) { 13189 throw new Error('native promise missing, set fetch.Promise to your favorite alternative'); 13190 } 13191 13192 Body.Promise = fetch.Promise; 13193 13194 // wrap http.request into fetch 13195 return new fetch.Promise(function (resolve, reject) { 13196 // build request object 13197 const request = new Request(url, opts); 13198 const options = getNodeRequestOptions(request); 13199 13200 const send = (options.protocol === 'https:' ? https : http).request; 13201 const signal = request.signal; 13202 13203 let response = null; 13204 13205 const abort = function abort() { 13206 let error = new AbortError('The user aborted a request.'); 13207 reject(error); 13208 if (request.body && request.body instanceof Stream.Readable) { 13209 destroyStream(request.body, error); 13210 } 13211 if (!response || !response.body) return; 13212 response.body.emit('error', error); 13213 }; 13214 13215 if (signal && signal.aborted) { 13216 abort(); 13217 return; 13218 } 13219 13220 const abortAndFinalize = function abortAndFinalize() { 13221 abort(); 13222 finalize(); 13223 }; 13224 13225 // send request 13226 const req = send(options); 13227 let reqTimeout; 13228 13229 if (signal) { 13230 signal.addEventListener('abort', abortAndFinalize); 13231 } 13232 13233 function finalize() { 13234 req.abort(); 13235 if (signal) signal.removeEventListener('abort', abortAndFinalize); 13236 clearTimeout(reqTimeout); 13237 } 13238 13239 if (request.timeout) { 13240 req.once('socket', function (socket) { 13241 reqTimeout = setTimeout(function () { 13242 reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')); 13243 finalize(); 13244 }, request.timeout); 13245 }); 13246 } 13247 13248 req.on('error', function (err) { 13249 reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); 13250 13251 if (response && response.body) { 13252 destroyStream(response.body, err); 13253 } 13254 13255 finalize(); 13256 }); 13257 13258 fixResponseChunkedTransferBadEnding(req, function (err) { 13259 if (signal && signal.aborted) { 13260 return; 13261 } 13262 13263 if (response && response.body) { 13264 destroyStream(response.body, err); 13265 } 13266 }); 13267 13268 /* c8 ignore next 18 */ 13269 if (parseInt(process.version.substring(1)) < 14) { 13270 // Before Node.js 14, pipeline() does not fully support async iterators and does not always 13271 // properly handle when the socket close/end events are out of order. 13272 req.on('socket', function (s) { 13273 s.addListener('close', function (hadError) { 13274 // if a data listener is still present we didn't end cleanly 13275 const hasDataListener = s.listenerCount('data') > 0; 13276 13277 // if end happened before close but the socket didn't emit an error, do it now 13278 if (response && hasDataListener && !hadError && !(signal && signal.aborted)) { 13279 const err = new Error('Premature close'); 13280 err.code = 'ERR_STREAM_PREMATURE_CLOSE'; 13281 response.body.emit('error', err); 13282 } 13283 }); 13284 }); 13285 } 13286 13287 req.on('response', function (res) { 13288 clearTimeout(reqTimeout); 13289 13290 const headers = createHeadersLenient(res.headers); 13291 13292 // HTTP fetch step 5 13293 if (fetch.isRedirect(res.statusCode)) { 13294 // HTTP fetch step 5.2 13295 const location = headers.get('Location'); 13296 13297 // HTTP fetch step 5.3 13298 let locationURL = null; 13299 try { 13300 locationURL = location === null ? null : new URL$1(location, request.url).toString(); 13301 } catch (err) { 13302 // error here can only be invalid URL in Location: header 13303 // do not throw when options.redirect == manual 13304 // let the user extract the errorneous redirect URL 13305 if (request.redirect !== 'manual') { 13306 reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect')); 13307 finalize(); 13308 return; 13309 } 13310 } 13311 13312 // HTTP fetch step 5.5 13313 switch (request.redirect) { 13314 case 'error': 13315 reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect')); 13316 finalize(); 13317 return; 13318 case 'manual': 13319 // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL. 13320 if (locationURL !== null) { 13321 // handle corrupted header 13322 try { 13323 headers.set('Location', locationURL); 13324 } catch (err) { 13325 // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request 13326 reject(err); 13327 } 13328 } 13329 break; 13330 case 'follow': 13331 // HTTP-redirect fetch step 2 13332 if (locationURL === null) { 13333 break; 13334 } 13335 13336 // HTTP-redirect fetch step 5 13337 if (request.counter >= request.follow) { 13338 reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')); 13339 finalize(); 13340 return; 13341 } 13342 13343 // HTTP-redirect fetch step 6 (counter increment) 13344 // Create a new Request object. 13345 const requestOpts = { 13346 headers: new Headers(request.headers), 13347 follow: request.follow, 13348 counter: request.counter + 1, 13349 agent: request.agent, 13350 compress: request.compress, 13351 method: request.method, 13352 body: request.body, 13353 signal: request.signal, 13354 timeout: request.timeout, 13355 size: request.size 13356 }; 13357 13358 if (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) { 13359 for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) { 13360 requestOpts.headers.delete(name); 13361 } 13362 } 13363 13364 // HTTP-redirect fetch step 9 13365 if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { 13366 reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); 13367 finalize(); 13368 return; 13369 } 13370 13371 // HTTP-redirect fetch step 11 13372 if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') { 13373 requestOpts.method = 'GET'; 13374 requestOpts.body = undefined; 13375 requestOpts.headers.delete('content-length'); 13376 } 13377 13378 // HTTP-redirect fetch step 15 13379 resolve(fetch(new Request(locationURL, requestOpts))); 13380 finalize(); 13381 return; 13382 } 13383 } 13384 13385 // prepare response 13386 res.once('end', function () { 13387 if (signal) signal.removeEventListener('abort', abortAndFinalize); 13388 }); 13389 let body = res.pipe(new PassThrough$1()); 13390 13391 const response_options = { 13392 url: request.url, 13393 status: res.statusCode, 13394 statusText: res.statusMessage, 13395 headers: headers, 13396 size: request.size, 13397 timeout: request.timeout, 13398 counter: request.counter 13399 }; 13400 13401 // HTTP-network fetch step 12.1.1.3 13402 const codings = headers.get('Content-Encoding'); 13403 13404 // HTTP-network fetch step 12.1.1.4: handle content codings 13405 13406 // in following scenarios we ignore compression support 13407 // 1. compression support is disabled 13408 // 2. HEAD request 13409 // 3. no Content-Encoding header 13410 // 4. no content response (204) 13411 // 5. content not modified response (304) 13412 if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) { 13413 response = new Response(body, response_options); 13414 resolve(response); 13415 return; 13416 } 13417 13418 // For Node v6+ 13419 // Be less strict when decoding compressed responses, since sometimes 13420 // servers send slightly invalid responses that are still accepted 13421 // by common browsers. 13422 // Always using Z_SYNC_FLUSH is what cURL does. 13423 const zlibOptions = { 13424 flush: zlib.Z_SYNC_FLUSH, 13425 finishFlush: zlib.Z_SYNC_FLUSH 13426 }; 13427 13428 // for gzip 13429 if (codings == 'gzip' || codings == 'x-gzip') { 13430 body = body.pipe(zlib.createGunzip(zlibOptions)); 13431 response = new Response(body, response_options); 13432 resolve(response); 13433 return; 13434 } 13435 13436 // for deflate 13437 if (codings == 'deflate' || codings == 'x-deflate') { 13438 // handle the infamous raw deflate response from old servers 13439 // a hack for old IIS and Apache servers 13440 const raw = res.pipe(new PassThrough$1()); 13441 raw.once('data', function (chunk) { 13442 // see http://stackoverflow.com/questions/37519828 13443 if ((chunk[0] & 0x0F) === 0x08) { 13444 body = body.pipe(zlib.createInflate()); 13445 } else { 13446 body = body.pipe(zlib.createInflateRaw()); 13447 } 13448 response = new Response(body, response_options); 13449 resolve(response); 13450 }); 13451 raw.on('end', function () { 13452 // some old IIS servers return zero-length OK deflate responses, so 'data' is never emitted. 13453 if (!response) { 13454 response = new Response(body, response_options); 13455 resolve(response); 13456 } 13457 }); 13458 return; 13459 } 13460 13461 // for br 13462 if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') { 13463 body = body.pipe(zlib.createBrotliDecompress()); 13464 response = new Response(body, response_options); 13465 resolve(response); 13466 return; 13467 } 13468 13469 // otherwise, use response as-is 13470 response = new Response(body, response_options); 13471 resolve(response); 13472 }); 13473 13474 writeToStream(req, request); 13475 }); 13476 } 13477 function fixResponseChunkedTransferBadEnding(request, errorCallback) { 13478 let socket; 13479 13480 request.on('socket', function (s) { 13481 socket = s; 13482 }); 13483 13484 request.on('response', function (response) { 13485 const headers = response.headers; 13486 13487 if (headers['transfer-encoding'] === 'chunked' && !headers['content-length']) { 13488 response.once('close', function (hadError) { 13489 // if a data listener is still present we didn't end cleanly 13490 const hasDataListener = socket.listenerCount('data') > 0; 13491 13492 if (hasDataListener && !hadError) { 13493 const err = new Error('Premature close'); 13494 err.code = 'ERR_STREAM_PREMATURE_CLOSE'; 13495 errorCallback(err); 13496 } 13497 }); 13498 } 13499 }); 13500 } 13501 13502 function destroyStream(stream, err) { 13503 if (stream.destroy) { 13504 stream.destroy(err); 13505 } else { 13506 // node < 8 13507 stream.emit('error', err); 13508 stream.end(); 13509 } 13510 } 13511 13512 /** 13513 * Redirect code matching 13514 * 13515 * @param Number code Status code 13516 * @return Boolean 13517 */ 13518 fetch.isRedirect = function (code) { 13519 return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; 13520 }; 13521 13522 // expose Promise 13523 fetch.Promise = global.Promise; 13524 13525 module.exports = exports = fetch; 13526 Object.defineProperty(exports, "__esModule", ({ value: true })); 13527 exports["default"] = exports; 13528 exports.Headers = Headers; 13529 exports.Request = Request; 13530 exports.Response = Response; 13531 exports.FetchError = FetchError; 13532 13533 13534 /***/ }), 13535 13536 /***/ 1223: 13537 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 13538 13539 var wrappy = __nccwpck_require__(2940) 13540 module.exports = wrappy(once) 13541 module.exports.strict = wrappy(onceStrict) 13542 13543 once.proto = once(function () { 13544 Object.defineProperty(Function.prototype, 'once', { 13545 value: function () { 13546 return once(this) 13547 }, 13548 configurable: true 13549 }) 13550 13551 Object.defineProperty(Function.prototype, 'onceStrict', { 13552 value: function () { 13553 return onceStrict(this) 13554 }, 13555 configurable: true 13556 }) 13557 }) 13558 13559 function once (fn) { 13560 var f = function () { 13561 if (f.called) return f.value 13562 f.called = true 13563 return f.value = fn.apply(this, arguments) 13564 } 13565 f.called = false 13566 return f 13567 } 13568 13569 function onceStrict (fn) { 13570 var f = function () { 13571 if (f.called) 13572 throw new Error(f.onceError) 13573 f.called = true 13574 return f.value = fn.apply(this, arguments) 13575 } 13576 var name = fn.name || 'Function wrapped with `once`' 13577 f.onceError = name + " shouldn't be called more than once" 13578 f.called = false 13579 return f 13580 } 13581 13582 13583 /***/ }), 13584 13585 /***/ 9273: 13586 /***/ ((module) => { 13587 13588 13589 13590 class QuickLRU { 13591 constructor(options = {}) { 13592 if (!(options.maxSize && options.maxSize > 0)) { 13593 throw new TypeError('`maxSize` must be a number greater than 0'); 13594 } 13595 13596 this.maxSize = options.maxSize; 13597 this.onEviction = options.onEviction; 13598 this.cache = new Map(); 13599 this.oldCache = new Map(); 13600 this._size = 0; 13601 } 13602 13603 _set(key, value) { 13604 this.cache.set(key, value); 13605 this._size++; 13606 13607 if (this._size >= this.maxSize) { 13608 this._size = 0; 13609 13610 if (typeof this.onEviction === 'function') { 13611 for (const [key, value] of this.oldCache.entries()) { 13612 this.onEviction(key, value); 13613 } 13614 } 13615 13616 this.oldCache = this.cache; 13617 this.cache = new Map(); 13618 } 13619 } 13620 13621 get(key) { 13622 if (this.cache.has(key)) { 13623 return this.cache.get(key); 13624 } 13625 13626 if (this.oldCache.has(key)) { 13627 const value = this.oldCache.get(key); 13628 this.oldCache.delete(key); 13629 this._set(key, value); 13630 return value; 13631 } 13632 } 13633 13634 set(key, value) { 13635 if (this.cache.has(key)) { 13636 this.cache.set(key, value); 13637 } else { 13638 this._set(key, value); 13639 } 13640 13641 return this; 13642 } 13643 13644 has(key) { 13645 return this.cache.has(key) || this.oldCache.has(key); 13646 } 13647 13648 peek(key) { 13649 if (this.cache.has(key)) { 13650 return this.cache.get(key); 13651 } 13652 13653 if (this.oldCache.has(key)) { 13654 return this.oldCache.get(key); 13655 } 13656 } 13657 13658 delete(key) { 13659 const deleted = this.cache.delete(key); 13660 if (deleted) { 13661 this._size--; 13662 } 13663 13664 return this.oldCache.delete(key) || deleted; 13665 } 13666 13667 clear() { 13668 this.cache.clear(); 13669 this.oldCache.clear(); 13670 this._size = 0; 13671 } 13672 13673 * keys() { 13674 for (const [key] of this) { 13675 yield key; 13676 } 13677 } 13678 13679 * values() { 13680 for (const [, value] of this) { 13681 yield value; 13682 } 13683 } 13684 13685 * [Symbol.iterator]() { 13686 for (const item of this.cache) { 13687 yield item; 13688 } 13689 13690 for (const item of this.oldCache) { 13691 const [key] = item; 13692 if (!this.cache.has(key)) { 13693 yield item; 13694 } 13695 } 13696 } 13697 13698 get size() { 13699 let oldCacheSize = 0; 13700 for (const key of this.oldCache.keys()) { 13701 if (!this.cache.has(key)) { 13702 oldCacheSize++; 13703 } 13704 } 13705 13706 return Math.min(this._size + oldCacheSize, this.maxSize); 13707 } 13708 } 13709 13710 module.exports = QuickLRU; 13711 13712 13713 /***/ }), 13714 13715 /***/ 6624: 13716 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 13717 13718 13719 const tls = __nccwpck_require__(4404); 13720 13721 module.exports = (options = {}, connect = tls.connect) => new Promise((resolve, reject) => { 13722 let timeout = false; 13723 13724 let socket; 13725 13726 const callback = async () => { 13727 await socketPromise; 13728 13729 socket.off('timeout', onTimeout); 13730 socket.off('error', reject); 13731 13732 if (options.resolveSocket) { 13733 resolve({alpnProtocol: socket.alpnProtocol, socket, timeout}); 13734 13735 if (timeout) { 13736 await Promise.resolve(); 13737 socket.emit('timeout'); 13738 } 13739 } else { 13740 socket.destroy(); 13741 resolve({alpnProtocol: socket.alpnProtocol, timeout}); 13742 } 13743 }; 13744 13745 const onTimeout = async () => { 13746 timeout = true; 13747 callback(); 13748 }; 13749 13750 const socketPromise = (async () => { 13751 try { 13752 socket = await connect(options, callback); 13753 13754 socket.on('error', reject); 13755 socket.once('timeout', onTimeout); 13756 } catch (error) { 13757 reject(error); 13758 } 13759 })(); 13760 }); 13761 13762 13763 /***/ }), 13764 13765 /***/ 5911: 13766 /***/ ((module, exports) => { 13767 13768 exports = module.exports = SemVer 13769 13770 var debug 13771 /* istanbul ignore next */ 13772 if (typeof process === 'object' && 13773 process.env && 13774 process.env.NODE_DEBUG && 13775 /\bsemver\b/i.test(process.env.NODE_DEBUG)) { 13776 debug = function () { 13777 var args = Array.prototype.slice.call(arguments, 0) 13778 args.unshift('SEMVER') 13779 console.log.apply(console, args) 13780 } 13781 } else { 13782 debug = function () {} 13783 } 13784 13785 // Note: this is the semver.org version of the spec that it implements 13786 // Not necessarily the package version of this code. 13787 exports.SEMVER_SPEC_VERSION = '2.0.0' 13788 13789 var MAX_LENGTH = 256 13790 var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 13791 /* istanbul ignore next */ 9007199254740991 13792 13793 // Max safe segment length for coercion. 13794 var MAX_SAFE_COMPONENT_LENGTH = 16 13795 13796 var MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6 13797 13798 // The actual regexps go on exports.re 13799 var re = exports.re = [] 13800 var safeRe = exports.safeRe = [] 13801 var src = exports.src = [] 13802 var t = exports.tokens = {} 13803 var R = 0 13804 13805 function tok (n) { 13806 t[n] = R++ 13807 } 13808 13809 var LETTERDASHNUMBER = '[a-zA-Z0-9-]' 13810 13811 // Replace some greedy regex tokens to prevent regex dos issues. These regex are 13812 // used internally via the safeRe object since all inputs in this library get 13813 // normalized first to trim and collapse all extra whitespace. The original 13814 // regexes are exported for userland consumption and lower level usage. A 13815 // future breaking change could export the safer regex only with a note that 13816 // all input should have extra whitespace removed. 13817 var safeRegexReplacements = [ 13818 ['\\s', 1], 13819 ['\\d', MAX_LENGTH], 13820 [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH], 13821 ] 13822 13823 function makeSafeRe (value) { 13824 for (var i = 0; i < safeRegexReplacements.length; i++) { 13825 var token = safeRegexReplacements[i][0] 13826 var max = safeRegexReplacements[i][1] 13827 value = value 13828 .split(token + '*').join(token + '{0,' + max + '}') 13829 .split(token + '+').join(token + '{1,' + max + '}') 13830 } 13831 return value 13832 } 13833 13834 // The following Regular Expressions can be used for tokenizing, 13835 // validating, and parsing SemVer version strings. 13836 13837 // ## Numeric Identifier 13838 // A single `0`, or a non-zero digit followed by zero or more digits. 13839 13840 tok('NUMERICIDENTIFIER') 13841 src[t.NUMERICIDENTIFIER] = '0|[1-9]\\d*' 13842 tok('NUMERICIDENTIFIERLOOSE') 13843 src[t.NUMERICIDENTIFIERLOOSE] = '\\d+' 13844 13845 // ## Non-numeric Identifier 13846 // Zero or more digits, followed by a letter or hyphen, and then zero or 13847 // more letters, digits, or hyphens. 13848 13849 tok('NONNUMERICIDENTIFIER') 13850 src[t.NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-]' + LETTERDASHNUMBER + '*' 13851 13852 // ## Main Version 13853 // Three dot-separated numeric identifiers. 13854 13855 tok('MAINVERSION') 13856 src[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\.' + 13857 '(' + src[t.NUMERICIDENTIFIER] + ')\\.' + 13858 '(' + src[t.NUMERICIDENTIFIER] + ')' 13859 13860 tok('MAINVERSIONLOOSE') 13861 src[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + 13862 '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\.' + 13863 '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')' 13864 13865 // ## Pre-release Version Identifier 13866 // A numeric identifier, or a non-numeric identifier. 13867 13868 tok('PRERELEASEIDENTIFIER') 13869 src[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] + 13870 '|' + src[t.NONNUMERICIDENTIFIER] + ')' 13871 13872 tok('PRERELEASEIDENTIFIERLOOSE') 13873 src[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] + 13874 '|' + src[t.NONNUMERICIDENTIFIER] + ')' 13875 13876 // ## Pre-release Version 13877 // Hyphen, followed by one or more dot-separated pre-release version 13878 // identifiers. 13879 13880 tok('PRERELEASE') 13881 src[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] + 13882 '(?:\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))' 13883 13884 tok('PRERELEASELOOSE') 13885 src[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] + 13886 '(?:\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))' 13887 13888 // ## Build Metadata Identifier 13889 // Any combination of digits, letters, or hyphens. 13890 13891 tok('BUILDIDENTIFIER') 13892 src[t.BUILDIDENTIFIER] = LETTERDASHNUMBER + '+' 13893 13894 // ## Build Metadata 13895 // Plus sign, followed by one or more period-separated build metadata 13896 // identifiers. 13897 13898 tok('BUILD') 13899 src[t.BUILD] = '(?:\\+(' + src[t.BUILDIDENTIFIER] + 13900 '(?:\\.' + src[t.BUILDIDENTIFIER] + ')*))' 13901 13902 // ## Full Version String 13903 // A main version, followed optionally by a pre-release version and 13904 // build metadata. 13905 13906 // Note that the only major, minor, patch, and pre-release sections of 13907 // the version string are capturing groups. The build metadata is not a 13908 // capturing group, because it should not ever be used in version 13909 // comparison. 13910 13911 tok('FULL') 13912 tok('FULLPLAIN') 13913 src[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] + 13914 src[t.PRERELEASE] + '?' + 13915 src[t.BUILD] + '?' 13916 13917 src[t.FULL] = '^' + src[t.FULLPLAIN] + '$' 13918 13919 // like full, but allows v1.2.3 and =1.2.3, which people do sometimes. 13920 // also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty 13921 // common in the npm registry. 13922 tok('LOOSEPLAIN') 13923 src[t.LOOSEPLAIN] = '[v=\\s]*' + src[t.MAINVERSIONLOOSE] + 13924 src[t.PRERELEASELOOSE] + '?' + 13925 src[t.BUILD] + '?' 13926 13927 tok('LOOSE') 13928 src[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$' 13929 13930 tok('GTLT') 13931 src[t.GTLT] = '((?:<|>)?=?)' 13932 13933 // Something like "2.*" or "1.2.x". 13934 // Note that "x.x" is a valid xRange identifer, meaning "any version" 13935 // Only the first item is strictly required. 13936 tok('XRANGEIDENTIFIERLOOSE') 13937 src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' 13938 tok('XRANGEIDENTIFIER') 13939 src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\*' 13940 13941 tok('XRANGEPLAIN') 13942 src[t.XRANGEPLAIN] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' + 13943 '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + 13944 '(?:\\.(' + src[t.XRANGEIDENTIFIER] + ')' + 13945 '(?:' + src[t.PRERELEASE] + ')?' + 13946 src[t.BUILD] + '?' + 13947 ')?)?' 13948 13949 tok('XRANGEPLAINLOOSE') 13950 src[t.XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + 13951 '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + 13952 '(?:\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' + 13953 '(?:' + src[t.PRERELEASELOOSE] + ')?' + 13954 src[t.BUILD] + '?' + 13955 ')?)?' 13956 13957 tok('XRANGE') 13958 src[t.XRANGE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAIN] + '$' 13959 tok('XRANGELOOSE') 13960 src[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\s*' + src[t.XRANGEPLAINLOOSE] + '$' 13961 13962 // Coercion. 13963 // Extract anything that could conceivably be a part of a valid semver 13964 tok('COERCE') 13965 src[t.COERCE] = '(^|[^\\d])' + 13966 '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + 13967 '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + 13968 '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + 13969 '(?:$|[^\\d])' 13970 tok('COERCERTL') 13971 re[t.COERCERTL] = new RegExp(src[t.COERCE], 'g') 13972 safeRe[t.COERCERTL] = new RegExp(makeSafeRe(src[t.COERCE]), 'g') 13973 13974 // Tilde ranges. 13975 // Meaning is "reasonably at or greater than" 13976 tok('LONETILDE') 13977 src[t.LONETILDE] = '(?:~>?)' 13978 13979 tok('TILDETRIM') 13980 src[t.TILDETRIM] = '(\\s*)' + src[t.LONETILDE] + '\\s+' 13981 re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g') 13982 safeRe[t.TILDETRIM] = new RegExp(makeSafeRe(src[t.TILDETRIM]), 'g') 13983 var tildeTrimReplace = '$1~' 13984 13985 tok('TILDE') 13986 src[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$' 13987 tok('TILDELOOSE') 13988 src[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$' 13989 13990 // Caret ranges. 13991 // Meaning is "at least and backwards compatible with" 13992 tok('LONECARET') 13993 src[t.LONECARET] = '(?:\\^)' 13994 13995 tok('CARETTRIM') 13996 src[t.CARETTRIM] = '(\\s*)' + src[t.LONECARET] + '\\s+' 13997 re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g') 13998 safeRe[t.CARETTRIM] = new RegExp(makeSafeRe(src[t.CARETTRIM]), 'g') 13999 var caretTrimReplace = '$1^' 14000 14001 tok('CARET') 14002 src[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$' 14003 tok('CARETLOOSE') 14004 src[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$' 14005 14006 // A simple gt/lt/eq thing, or just "" to indicate "any version" 14007 tok('COMPARATORLOOSE') 14008 src[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\s*(' + src[t.LOOSEPLAIN] + ')$|^$' 14009 tok('COMPARATOR') 14010 src[t.COMPARATOR] = '^' + src[t.GTLT] + '\\s*(' + src[t.FULLPLAIN] + ')$|^$' 14011 14012 // An expression to strip any whitespace between the gtlt and the thing 14013 // it modifies, so that `> 1.2.3` ==> `>1.2.3` 14014 tok('COMPARATORTRIM') 14015 src[t.COMPARATORTRIM] = '(\\s*)' + src[t.GTLT] + 14016 '\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')' 14017 14018 // this one has to use the /g flag 14019 re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g') 14020 safeRe[t.COMPARATORTRIM] = new RegExp(makeSafeRe(src[t.COMPARATORTRIM]), 'g') 14021 var comparatorTrimReplace = '$1$2$3' 14022 14023 // Something like `1.2.3 - 1.2.4` 14024 // Note that these all use the loose form, because they'll be 14025 // checked against either the strict or loose comparator form 14026 // later. 14027 tok('HYPHENRANGE') 14028 src[t.HYPHENRANGE] = '^\\s*(' + src[t.XRANGEPLAIN] + ')' + 14029 '\\s+-\\s+' + 14030 '(' + src[t.XRANGEPLAIN] + ')' + 14031 '\\s*$' 14032 14033 tok('HYPHENRANGELOOSE') 14034 src[t.HYPHENRANGELOOSE] = '^\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' + 14035 '\\s+-\\s+' + 14036 '(' + src[t.XRANGEPLAINLOOSE] + ')' + 14037 '\\s*$' 14038 14039 // Star ranges basically just allow anything at all. 14040 tok('STAR') 14041 src[t.STAR] = '(<|>)?=?\\s*\\*' 14042 14043 // Compile to actual regexp objects. 14044 // All are flag-free, unless they were created above with a flag. 14045 for (var i = 0; i < R; i++) { 14046 debug(i, src[i]) 14047 if (!re[i]) { 14048 re[i] = new RegExp(src[i]) 14049 14050 // Replace all greedy whitespace to prevent regex dos issues. These regex are 14051 // used internally via the safeRe object since all inputs in this library get 14052 // normalized first to trim and collapse all extra whitespace. The original 14053 // regexes are exported for userland consumption and lower level usage. A 14054 // future breaking change could export the safer regex only with a note that 14055 // all input should have extra whitespace removed. 14056 safeRe[i] = new RegExp(makeSafeRe(src[i])) 14057 } 14058 } 14059 14060 exports.parse = parse 14061 function parse (version, options) { 14062 if (!options || typeof options !== 'object') { 14063 options = { 14064 loose: !!options, 14065 includePrerelease: false 14066 } 14067 } 14068 14069 if (version instanceof SemVer) { 14070 return version 14071 } 14072 14073 if (typeof version !== 'string') { 14074 return null 14075 } 14076 14077 if (version.length > MAX_LENGTH) { 14078 return null 14079 } 14080 14081 var r = options.loose ? safeRe[t.LOOSE] : safeRe[t.FULL] 14082 if (!r.test(version)) { 14083 return null 14084 } 14085 14086 try { 14087 return new SemVer(version, options) 14088 } catch (er) { 14089 return null 14090 } 14091 } 14092 14093 exports.valid = valid 14094 function valid (version, options) { 14095 var v = parse(version, options) 14096 return v ? v.version : null 14097 } 14098 14099 exports.clean = clean 14100 function clean (version, options) { 14101 var s = parse(version.trim().replace(/^[=v]+/, ''), options) 14102 return s ? s.version : null 14103 } 14104 14105 exports.SemVer = SemVer 14106 14107 function SemVer (version, options) { 14108 if (!options || typeof options !== 'object') { 14109 options = { 14110 loose: !!options, 14111 includePrerelease: false 14112 } 14113 } 14114 if (version instanceof SemVer) { 14115 if (version.loose === options.loose) { 14116 return version 14117 } else { 14118 version = version.version 14119 } 14120 } else if (typeof version !== 'string') { 14121 throw new TypeError('Invalid Version: ' + version) 14122 } 14123 14124 if (version.length > MAX_LENGTH) { 14125 throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') 14126 } 14127 14128 if (!(this instanceof SemVer)) { 14129 return new SemVer(version, options) 14130 } 14131 14132 debug('SemVer', version, options) 14133 this.options = options 14134 this.loose = !!options.loose 14135 14136 var m = version.trim().match(options.loose ? safeRe[t.LOOSE] : safeRe[t.FULL]) 14137 14138 if (!m) { 14139 throw new TypeError('Invalid Version: ' + version) 14140 } 14141 14142 this.raw = version 14143 14144 // these are actually numbers 14145 this.major = +m[1] 14146 this.minor = +m[2] 14147 this.patch = +m[3] 14148 14149 if (this.major > MAX_SAFE_INTEGER || this.major < 0) { 14150 throw new TypeError('Invalid major version') 14151 } 14152 14153 if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { 14154 throw new TypeError('Invalid minor version') 14155 } 14156 14157 if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { 14158 throw new TypeError('Invalid patch version') 14159 } 14160 14161 // numberify any prerelease numeric ids 14162 if (!m[4]) { 14163 this.prerelease = [] 14164 } else { 14165 this.prerelease = m[4].split('.').map(function (id) { 14166 if (/^[0-9]+$/.test(id)) { 14167 var num = +id 14168 if (num >= 0 && num < MAX_SAFE_INTEGER) { 14169 return num 14170 } 14171 } 14172 return id 14173 }) 14174 } 14175 14176 this.build = m[5] ? m[5].split('.') : [] 14177 this.format() 14178 } 14179 14180 SemVer.prototype.format = function () { 14181 this.version = this.major + '.' + this.minor + '.' + this.patch 14182 if (this.prerelease.length) { 14183 this.version += '-' + this.prerelease.join('.') 14184 } 14185 return this.version 14186 } 14187 14188 SemVer.prototype.toString = function () { 14189 return this.version 14190 } 14191 14192 SemVer.prototype.compare = function (other) { 14193 debug('SemVer.compare', this.version, this.options, other) 14194 if (!(other instanceof SemVer)) { 14195 other = new SemVer(other, this.options) 14196 } 14197 14198 return this.compareMain(other) || this.comparePre(other) 14199 } 14200 14201 SemVer.prototype.compareMain = function (other) { 14202 if (!(other instanceof SemVer)) { 14203 other = new SemVer(other, this.options) 14204 } 14205 14206 return compareIdentifiers(this.major, other.major) || 14207 compareIdentifiers(this.minor, other.minor) || 14208 compareIdentifiers(this.patch, other.patch) 14209 } 14210 14211 SemVer.prototype.comparePre = function (other) { 14212 if (!(other instanceof SemVer)) { 14213 other = new SemVer(other, this.options) 14214 } 14215 14216 // NOT having a prerelease is > having one 14217 if (this.prerelease.length && !other.prerelease.length) { 14218 return -1 14219 } else if (!this.prerelease.length && other.prerelease.length) { 14220 return 1 14221 } else if (!this.prerelease.length && !other.prerelease.length) { 14222 return 0 14223 } 14224 14225 var i = 0 14226 do { 14227 var a = this.prerelease[i] 14228 var b = other.prerelease[i] 14229 debug('prerelease compare', i, a, b) 14230 if (a === undefined && b === undefined) { 14231 return 0 14232 } else if (b === undefined) { 14233 return 1 14234 } else if (a === undefined) { 14235 return -1 14236 } else if (a === b) { 14237 continue 14238 } else { 14239 return compareIdentifiers(a, b) 14240 } 14241 } while (++i) 14242 } 14243 14244 SemVer.prototype.compareBuild = function (other) { 14245 if (!(other instanceof SemVer)) { 14246 other = new SemVer(other, this.options) 14247 } 14248 14249 var i = 0 14250 do { 14251 var a = this.build[i] 14252 var b = other.build[i] 14253 debug('prerelease compare', i, a, b) 14254 if (a === undefined && b === undefined) { 14255 return 0 14256 } else if (b === undefined) { 14257 return 1 14258 } else if (a === undefined) { 14259 return -1 14260 } else if (a === b) { 14261 continue 14262 } else { 14263 return compareIdentifiers(a, b) 14264 } 14265 } while (++i) 14266 } 14267 14268 // preminor will bump the version up to the next minor release, and immediately 14269 // down to pre-release. premajor and prepatch work the same way. 14270 SemVer.prototype.inc = function (release, identifier) { 14271 switch (release) { 14272 case 'premajor': 14273 this.prerelease.length = 0 14274 this.patch = 0 14275 this.minor = 0 14276 this.major++ 14277 this.inc('pre', identifier) 14278 break 14279 case 'preminor': 14280 this.prerelease.length = 0 14281 this.patch = 0 14282 this.minor++ 14283 this.inc('pre', identifier) 14284 break 14285 case 'prepatch': 14286 // If this is already a prerelease, it will bump to the next version 14287 // drop any prereleases that might already exist, since they are not 14288 // relevant at this point. 14289 this.prerelease.length = 0 14290 this.inc('patch', identifier) 14291 this.inc('pre', identifier) 14292 break 14293 // If the input is a non-prerelease version, this acts the same as 14294 // prepatch. 14295 case 'prerelease': 14296 if (this.prerelease.length === 0) { 14297 this.inc('patch', identifier) 14298 } 14299 this.inc('pre', identifier) 14300 break 14301 14302 case 'major': 14303 // If this is a pre-major version, bump up to the same major version. 14304 // Otherwise increment major. 14305 // 1.0.0-5 bumps to 1.0.0 14306 // 1.1.0 bumps to 2.0.0 14307 if (this.minor !== 0 || 14308 this.patch !== 0 || 14309 this.prerelease.length === 0) { 14310 this.major++ 14311 } 14312 this.minor = 0 14313 this.patch = 0 14314 this.prerelease = [] 14315 break 14316 case 'minor': 14317 // If this is a pre-minor version, bump up to the same minor version. 14318 // Otherwise increment minor. 14319 // 1.2.0-5 bumps to 1.2.0 14320 // 1.2.1 bumps to 1.3.0 14321 if (this.patch !== 0 || this.prerelease.length === 0) { 14322 this.minor++ 14323 } 14324 this.patch = 0 14325 this.prerelease = [] 14326 break 14327 case 'patch': 14328 // If this is not a pre-release version, it will increment the patch. 14329 // If it is a pre-release it will bump up to the same patch version. 14330 // 1.2.0-5 patches to 1.2.0 14331 // 1.2.0 patches to 1.2.1 14332 if (this.prerelease.length === 0) { 14333 this.patch++ 14334 } 14335 this.prerelease = [] 14336 break 14337 // This probably shouldn't be used publicly. 14338 // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. 14339 case 'pre': 14340 if (this.prerelease.length === 0) { 14341 this.prerelease = [0] 14342 } else { 14343 var i = this.prerelease.length 14344 while (--i >= 0) { 14345 if (typeof this.prerelease[i] === 'number') { 14346 this.prerelease[i]++ 14347 i = -2 14348 } 14349 } 14350 if (i === -1) { 14351 // didn't increment anything 14352 this.prerelease.push(0) 14353 } 14354 } 14355 if (identifier) { 14356 // 1.2.0-beta.1 bumps to 1.2.0-beta.2, 14357 // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 14358 if (this.prerelease[0] === identifier) { 14359 if (isNaN(this.prerelease[1])) { 14360 this.prerelease = [identifier, 0] 14361 } 14362 } else { 14363 this.prerelease = [identifier, 0] 14364 } 14365 } 14366 break 14367 14368 default: 14369 throw new Error('invalid increment argument: ' + release) 14370 } 14371 this.format() 14372 this.raw = this.version 14373 return this 14374 } 14375 14376 exports.inc = inc 14377 function inc (version, release, loose, identifier) { 14378 if (typeof (loose) === 'string') { 14379 identifier = loose 14380 loose = undefined 14381 } 14382 14383 try { 14384 return new SemVer(version, loose).inc(release, identifier).version 14385 } catch (er) { 14386 return null 14387 } 14388 } 14389 14390 exports.diff = diff 14391 function diff (version1, version2) { 14392 if (eq(version1, version2)) { 14393 return null 14394 } else { 14395 var v1 = parse(version1) 14396 var v2 = parse(version2) 14397 var prefix = '' 14398 if (v1.prerelease.length || v2.prerelease.length) { 14399 prefix = 'pre' 14400 var defaultResult = 'prerelease' 14401 } 14402 for (var key in v1) { 14403 if (key === 'major' || key === 'minor' || key === 'patch') { 14404 if (v1[key] !== v2[key]) { 14405 return prefix + key 14406 } 14407 } 14408 } 14409 return defaultResult // may be undefined 14410 } 14411 } 14412 14413 exports.compareIdentifiers = compareIdentifiers 14414 14415 var numeric = /^[0-9]+$/ 14416 function compareIdentifiers (a, b) { 14417 var anum = numeric.test(a) 14418 var bnum = numeric.test(b) 14419 14420 if (anum && bnum) { 14421 a = +a 14422 b = +b 14423 } 14424 14425 return a === b ? 0 14426 : (anum && !bnum) ? -1 14427 : (bnum && !anum) ? 1 14428 : a < b ? -1 14429 : 1 14430 } 14431 14432 exports.rcompareIdentifiers = rcompareIdentifiers 14433 function rcompareIdentifiers (a, b) { 14434 return compareIdentifiers(b, a) 14435 } 14436 14437 exports.major = major 14438 function major (a, loose) { 14439 return new SemVer(a, loose).major 14440 } 14441 14442 exports.minor = minor 14443 function minor (a, loose) { 14444 return new SemVer(a, loose).minor 14445 } 14446 14447 exports.patch = patch 14448 function patch (a, loose) { 14449 return new SemVer(a, loose).patch 14450 } 14451 14452 exports.compare = compare 14453 function compare (a, b, loose) { 14454 return new SemVer(a, loose).compare(new SemVer(b, loose)) 14455 } 14456 14457 exports.compareLoose = compareLoose 14458 function compareLoose (a, b) { 14459 return compare(a, b, true) 14460 } 14461 14462 exports.compareBuild = compareBuild 14463 function compareBuild (a, b, loose) { 14464 var versionA = new SemVer(a, loose) 14465 var versionB = new SemVer(b, loose) 14466 return versionA.compare(versionB) || versionA.compareBuild(versionB) 14467 } 14468 14469 exports.rcompare = rcompare 14470 function rcompare (a, b, loose) { 14471 return compare(b, a, loose) 14472 } 14473 14474 exports.sort = sort 14475 function sort (list, loose) { 14476 return list.sort(function (a, b) { 14477 return exports.compareBuild(a, b, loose) 14478 }) 14479 } 14480 14481 exports.rsort = rsort 14482 function rsort (list, loose) { 14483 return list.sort(function (a, b) { 14484 return exports.compareBuild(b, a, loose) 14485 }) 14486 } 14487 14488 exports.gt = gt 14489 function gt (a, b, loose) { 14490 return compare(a, b, loose) > 0 14491 } 14492 14493 exports.lt = lt 14494 function lt (a, b, loose) { 14495 return compare(a, b, loose) < 0 14496 } 14497 14498 exports.eq = eq 14499 function eq (a, b, loose) { 14500 return compare(a, b, loose) === 0 14501 } 14502 14503 exports.neq = neq 14504 function neq (a, b, loose) { 14505 return compare(a, b, loose) !== 0 14506 } 14507 14508 exports.gte = gte 14509 function gte (a, b, loose) { 14510 return compare(a, b, loose) >= 0 14511 } 14512 14513 exports.lte = lte 14514 function lte (a, b, loose) { 14515 return compare(a, b, loose) <= 0 14516 } 14517 14518 exports.cmp = cmp 14519 function cmp (a, op, b, loose) { 14520 switch (op) { 14521 case '===': 14522 if (typeof a === 'object') 14523 a = a.version 14524 if (typeof b === 'object') 14525 b = b.version 14526 return a === b 14527 14528 case '!==': 14529 if (typeof a === 'object') 14530 a = a.version 14531 if (typeof b === 'object') 14532 b = b.version 14533 return a !== b 14534 14535 case '': 14536 case '=': 14537 case '==': 14538 return eq(a, b, loose) 14539 14540 case '!=': 14541 return neq(a, b, loose) 14542 14543 case '>': 14544 return gt(a, b, loose) 14545 14546 case '>=': 14547 return gte(a, b, loose) 14548 14549 case '<': 14550 return lt(a, b, loose) 14551 14552 case '<=': 14553 return lte(a, b, loose) 14554 14555 default: 14556 throw new TypeError('Invalid operator: ' + op) 14557 } 14558 } 14559 14560 exports.Comparator = Comparator 14561 function Comparator (comp, options) { 14562 if (!options || typeof options !== 'object') { 14563 options = { 14564 loose: !!options, 14565 includePrerelease: false 14566 } 14567 } 14568 14569 if (comp instanceof Comparator) { 14570 if (comp.loose === !!options.loose) { 14571 return comp 14572 } else { 14573 comp = comp.value 14574 } 14575 } 14576 14577 if (!(this instanceof Comparator)) { 14578 return new Comparator(comp, options) 14579 } 14580 14581 comp = comp.trim().split(/\s+/).join(' ') 14582 debug('comparator', comp, options) 14583 this.options = options 14584 this.loose = !!options.loose 14585 this.parse(comp) 14586 14587 if (this.semver === ANY) { 14588 this.value = '' 14589 } else { 14590 this.value = this.operator + this.semver.version 14591 } 14592 14593 debug('comp', this) 14594 } 14595 14596 var ANY = {} 14597 Comparator.prototype.parse = function (comp) { 14598 var r = this.options.loose ? safeRe[t.COMPARATORLOOSE] : safeRe[t.COMPARATOR] 14599 var m = comp.match(r) 14600 14601 if (!m) { 14602 throw new TypeError('Invalid comparator: ' + comp) 14603 } 14604 14605 this.operator = m[1] !== undefined ? m[1] : '' 14606 if (this.operator === '=') { 14607 this.operator = '' 14608 } 14609 14610 // if it literally is just '>' or '' then allow anything. 14611 if (!m[2]) { 14612 this.semver = ANY 14613 } else { 14614 this.semver = new SemVer(m[2], this.options.loose) 14615 } 14616 } 14617 14618 Comparator.prototype.toString = function () { 14619 return this.value 14620 } 14621 14622 Comparator.prototype.test = function (version) { 14623 debug('Comparator.test', version, this.options.loose) 14624 14625 if (this.semver === ANY || version === ANY) { 14626 return true 14627 } 14628 14629 if (typeof version === 'string') { 14630 try { 14631 version = new SemVer(version, this.options) 14632 } catch (er) { 14633 return false 14634 } 14635 } 14636 14637 return cmp(version, this.operator, this.semver, this.options) 14638 } 14639 14640 Comparator.prototype.intersects = function (comp, options) { 14641 if (!(comp instanceof Comparator)) { 14642 throw new TypeError('a Comparator is required') 14643 } 14644 14645 if (!options || typeof options !== 'object') { 14646 options = { 14647 loose: !!options, 14648 includePrerelease: false 14649 } 14650 } 14651 14652 var rangeTmp 14653 14654 if (this.operator === '') { 14655 if (this.value === '') { 14656 return true 14657 } 14658 rangeTmp = new Range(comp.value, options) 14659 return satisfies(this.value, rangeTmp, options) 14660 } else if (comp.operator === '') { 14661 if (comp.value === '') { 14662 return true 14663 } 14664 rangeTmp = new Range(this.value, options) 14665 return satisfies(comp.semver, rangeTmp, options) 14666 } 14667 14668 var sameDirectionIncreasing = 14669 (this.operator === '>=' || this.operator === '>') && 14670 (comp.operator === '>=' || comp.operator === '>') 14671 var sameDirectionDecreasing = 14672 (this.operator === '<=' || this.operator === '<') && 14673 (comp.operator === '<=' || comp.operator === '<') 14674 var sameSemVer = this.semver.version === comp.semver.version 14675 var differentDirectionsInclusive = 14676 (this.operator === '>=' || this.operator === '<=') && 14677 (comp.operator === '>=' || comp.operator === '<=') 14678 var oppositeDirectionsLessThan = 14679 cmp(this.semver, '<', comp.semver, options) && 14680 ((this.operator === '>=' || this.operator === '>') && 14681 (comp.operator === '<=' || comp.operator === '<')) 14682 var oppositeDirectionsGreaterThan = 14683 cmp(this.semver, '>', comp.semver, options) && 14684 ((this.operator === '<=' || this.operator === '<') && 14685 (comp.operator === '>=' || comp.operator === '>')) 14686 14687 return sameDirectionIncreasing || sameDirectionDecreasing || 14688 (sameSemVer && differentDirectionsInclusive) || 14689 oppositeDirectionsLessThan || oppositeDirectionsGreaterThan 14690 } 14691 14692 exports.Range = Range 14693 function Range (range, options) { 14694 if (!options || typeof options !== 'object') { 14695 options = { 14696 loose: !!options, 14697 includePrerelease: false 14698 } 14699 } 14700 14701 if (range instanceof Range) { 14702 if (range.loose === !!options.loose && 14703 range.includePrerelease === !!options.includePrerelease) { 14704 return range 14705 } else { 14706 return new Range(range.raw, options) 14707 } 14708 } 14709 14710 if (range instanceof Comparator) { 14711 return new Range(range.value, options) 14712 } 14713 14714 if (!(this instanceof Range)) { 14715 return new Range(range, options) 14716 } 14717 14718 this.options = options 14719 this.loose = !!options.loose 14720 this.includePrerelease = !!options.includePrerelease 14721 14722 // First reduce all whitespace as much as possible so we do not have to rely 14723 // on potentially slow regexes like \s*. This is then stored and used for 14724 // future error messages as well. 14725 this.raw = range 14726 .trim() 14727 .split(/\s+/) 14728 .join(' ') 14729 14730 // First, split based on boolean or || 14731 this.set = this.raw.split('||').map(function (range) { 14732 return this.parseRange(range.trim()) 14733 }, this).filter(function (c) { 14734 // throw out any that are not relevant for whatever reason 14735 return c.length 14736 }) 14737 14738 if (!this.set.length) { 14739 throw new TypeError('Invalid SemVer Range: ' + this.raw) 14740 } 14741 14742 this.format() 14743 } 14744 14745 Range.prototype.format = function () { 14746 this.range = this.set.map(function (comps) { 14747 return comps.join(' ').trim() 14748 }).join('||').trim() 14749 return this.range 14750 } 14751 14752 Range.prototype.toString = function () { 14753 return this.range 14754 } 14755 14756 Range.prototype.parseRange = function (range) { 14757 var loose = this.options.loose 14758 // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` 14759 var hr = loose ? safeRe[t.HYPHENRANGELOOSE] : safeRe[t.HYPHENRANGE] 14760 range = range.replace(hr, hyphenReplace) 14761 debug('hyphen replace', range) 14762 // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` 14763 range = range.replace(safeRe[t.COMPARATORTRIM], comparatorTrimReplace) 14764 debug('comparator trim', range, safeRe[t.COMPARATORTRIM]) 14765 14766 // `~ 1.2.3` => `~1.2.3` 14767 range = range.replace(safeRe[t.TILDETRIM], tildeTrimReplace) 14768 14769 // `^ 1.2.3` => `^1.2.3` 14770 range = range.replace(safeRe[t.CARETTRIM], caretTrimReplace) 14771 14772 // normalize spaces 14773 range = range.split(/\s+/).join(' ') 14774 14775 // At this point, the range is completely trimmed and 14776 // ready to be split into comparators. 14777 14778 var compRe = loose ? safeRe[t.COMPARATORLOOSE] : safeRe[t.COMPARATOR] 14779 var set = range.split(' ').map(function (comp) { 14780 return parseComparator(comp, this.options) 14781 }, this).join(' ').split(/\s+/) 14782 if (this.options.loose) { 14783 // in loose mode, throw out any that are not valid comparators 14784 set = set.filter(function (comp) { 14785 return !!comp.match(compRe) 14786 }) 14787 } 14788 set = set.map(function (comp) { 14789 return new Comparator(comp, this.options) 14790 }, this) 14791 14792 return set 14793 } 14794 14795 Range.prototype.intersects = function (range, options) { 14796 if (!(range instanceof Range)) { 14797 throw new TypeError('a Range is required') 14798 } 14799 14800 return this.set.some(function (thisComparators) { 14801 return ( 14802 isSatisfiable(thisComparators, options) && 14803 range.set.some(function (rangeComparators) { 14804 return ( 14805 isSatisfiable(rangeComparators, options) && 14806 thisComparators.every(function (thisComparator) { 14807 return rangeComparators.every(function (rangeComparator) { 14808 return thisComparator.intersects(rangeComparator, options) 14809 }) 14810 }) 14811 ) 14812 }) 14813 ) 14814 }) 14815 } 14816 14817 // take a set of comparators and determine whether there 14818 // exists a version which can satisfy it 14819 function isSatisfiable (comparators, options) { 14820 var result = true 14821 var remainingComparators = comparators.slice() 14822 var testComparator = remainingComparators.pop() 14823 14824 while (result && remainingComparators.length) { 14825 result = remainingComparators.every(function (otherComparator) { 14826 return testComparator.intersects(otherComparator, options) 14827 }) 14828 14829 testComparator = remainingComparators.pop() 14830 } 14831 14832 return result 14833 } 14834 14835 // Mostly just for testing and legacy API reasons 14836 exports.toComparators = toComparators 14837 function toComparators (range, options) { 14838 return new Range(range, options).set.map(function (comp) { 14839 return comp.map(function (c) { 14840 return c.value 14841 }).join(' ').trim().split(' ') 14842 }) 14843 } 14844 14845 // comprised of xranges, tildes, stars, and gtlt's at this point. 14846 // already replaced the hyphen ranges 14847 // turn into a set of JUST comparators. 14848 function parseComparator (comp, options) { 14849 debug('comp', comp, options) 14850 comp = replaceCarets(comp, options) 14851 debug('caret', comp) 14852 comp = replaceTildes(comp, options) 14853 debug('tildes', comp) 14854 comp = replaceXRanges(comp, options) 14855 debug('xrange', comp) 14856 comp = replaceStars(comp, options) 14857 debug('stars', comp) 14858 return comp 14859 } 14860 14861 function isX (id) { 14862 return !id || id.toLowerCase() === 'x' || id === '*' 14863 } 14864 14865 // ~, ~> --> * (any, kinda silly) 14866 // ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 14867 // ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 14868 // ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 14869 // ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 14870 // ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 14871 function replaceTildes (comp, options) { 14872 return comp.trim().split(/\s+/).map(function (comp) { 14873 return replaceTilde(comp, options) 14874 }).join(' ') 14875 } 14876 14877 function replaceTilde (comp, options) { 14878 var r = options.loose ? safeRe[t.TILDELOOSE] : safeRe[t.TILDE] 14879 return comp.replace(r, function (_, M, m, p, pr) { 14880 debug('tilde', comp, _, M, m, p, pr) 14881 var ret 14882 14883 if (isX(M)) { 14884 ret = '' 14885 } else if (isX(m)) { 14886 ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' 14887 } else if (isX(p)) { 14888 // ~1.2 == >=1.2.0 <1.3.0 14889 ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' 14890 } else if (pr) { 14891 debug('replaceTilde pr', pr) 14892 ret = '>=' + M + '.' + m + '.' + p + '-' + pr + 14893 ' <' + M + '.' + (+m + 1) + '.0' 14894 } else { 14895 // ~1.2.3 == >=1.2.3 <1.3.0 14896 ret = '>=' + M + '.' + m + '.' + p + 14897 ' <' + M + '.' + (+m + 1) + '.0' 14898 } 14899 14900 debug('tilde return', ret) 14901 return ret 14902 }) 14903 } 14904 14905 // ^ --> * (any, kinda silly) 14906 // ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 14907 // ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 14908 // ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 14909 // ^1.2.3 --> >=1.2.3 <2.0.0 14910 // ^1.2.0 --> >=1.2.0 <2.0.0 14911 function replaceCarets (comp, options) { 14912 return comp.trim().split(/\s+/).map(function (comp) { 14913 return replaceCaret(comp, options) 14914 }).join(' ') 14915 } 14916 14917 function replaceCaret (comp, options) { 14918 debug('caret', comp, options) 14919 var r = options.loose ? safeRe[t.CARETLOOSE] : safeRe[t.CARET] 14920 return comp.replace(r, function (_, M, m, p, pr) { 14921 debug('caret', comp, _, M, m, p, pr) 14922 var ret 14923 14924 if (isX(M)) { 14925 ret = '' 14926 } else if (isX(m)) { 14927 ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' 14928 } else if (isX(p)) { 14929 if (M === '0') { 14930 ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' 14931 } else { 14932 ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0' 14933 } 14934 } else if (pr) { 14935 debug('replaceCaret pr', pr) 14936 if (M === '0') { 14937 if (m === '0') { 14938 ret = '>=' + M + '.' + m + '.' + p + '-' + pr + 14939 ' <' + M + '.' + m + '.' + (+p + 1) 14940 } else { 14941 ret = '>=' + M + '.' + m + '.' + p + '-' + pr + 14942 ' <' + M + '.' + (+m + 1) + '.0' 14943 } 14944 } else { 14945 ret = '>=' + M + '.' + m + '.' + p + '-' + pr + 14946 ' <' + (+M + 1) + '.0.0' 14947 } 14948 } else { 14949 debug('no pr') 14950 if (M === '0') { 14951 if (m === '0') { 14952 ret = '>=' + M + '.' + m + '.' + p + 14953 ' <' + M + '.' + m + '.' + (+p + 1) 14954 } else { 14955 ret = '>=' + M + '.' + m + '.' + p + 14956 ' <' + M + '.' + (+m + 1) + '.0' 14957 } 14958 } else { 14959 ret = '>=' + M + '.' + m + '.' + p + 14960 ' <' + (+M + 1) + '.0.0' 14961 } 14962 } 14963 14964 debug('caret return', ret) 14965 return ret 14966 }) 14967 } 14968 14969 function replaceXRanges (comp, options) { 14970 debug('replaceXRanges', comp, options) 14971 return comp.split(/\s+/).map(function (comp) { 14972 return replaceXRange(comp, options) 14973 }).join(' ') 14974 } 14975 14976 function replaceXRange (comp, options) { 14977 comp = comp.trim() 14978 var r = options.loose ? safeRe[t.XRANGELOOSE] : safeRe[t.XRANGE] 14979 return comp.replace(r, function (ret, gtlt, M, m, p, pr) { 14980 debug('xRange', comp, ret, gtlt, M, m, p, pr) 14981 var xM = isX(M) 14982 var xm = xM || isX(m) 14983 var xp = xm || isX(p) 14984 var anyX = xp 14985 14986 if (gtlt === '=' && anyX) { 14987 gtlt = '' 14988 } 14989 14990 // if we're including prereleases in the match, then we need 14991 // to fix this to -0, the lowest possible prerelease value 14992 pr = options.includePrerelease ? '-0' : '' 14993 14994 if (xM) { 14995 if (gtlt === '>' || gtlt === '<') { 14996 // nothing is allowed 14997 ret = '<0.0.0-0' 14998 } else { 14999 // nothing is forbidden 15000 ret = '*' 15001 } 15002 } else if (gtlt && anyX) { 15003 // we know patch is an x, because we have any x at all. 15004 // replace X with 0 15005 if (xm) { 15006 m = 0 15007 } 15008 p = 0 15009 15010 if (gtlt === '>') { 15011 // >1 => >=2.0.0 15012 // >1.2 => >=1.3.0 15013 // >1.2.3 => >= 1.2.4 15014 gtlt = '>=' 15015 if (xm) { 15016 M = +M + 1 15017 m = 0 15018 p = 0 15019 } else { 15020 m = +m + 1 15021 p = 0 15022 } 15023 } else if (gtlt === '<=') { 15024 // <=0.7.x is actually <0.8.0, since any 0.7.x should 15025 // pass. Similarly, <=7.x is actually <8.0.0, etc. 15026 gtlt = '<' 15027 if (xm) { 15028 M = +M + 1 15029 } else { 15030 m = +m + 1 15031 } 15032 } 15033 15034 ret = gtlt + M + '.' + m + '.' + p + pr 15035 } else if (xm) { 15036 ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr 15037 } else if (xp) { 15038 ret = '>=' + M + '.' + m + '.0' + pr + 15039 ' <' + M + '.' + (+m + 1) + '.0' + pr 15040 } 15041 15042 debug('xRange return', ret) 15043 15044 return ret 15045 }) 15046 } 15047 15048 // Because * is AND-ed with everything else in the comparator, 15049 // and '' means "any version", just remove the *s entirely. 15050 function replaceStars (comp, options) { 15051 debug('replaceStars', comp, options) 15052 // Looseness is ignored here. star is always as loose as it gets! 15053 return comp.trim().replace(safeRe[t.STAR], '') 15054 } 15055 15056 // This function is passed to string.replace(re[t.HYPHENRANGE]) 15057 // M, m, patch, prerelease, build 15058 // 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 15059 // 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do 15060 // 1.2 - 3.4 => >=1.2.0 <3.5.0 15061 function hyphenReplace ($0, 15062 from, fM, fm, fp, fpr, fb, 15063 to, tM, tm, tp, tpr, tb) { 15064 if (isX(fM)) { 15065 from = '' 15066 } else if (isX(fm)) { 15067 from = '>=' + fM + '.0.0' 15068 } else if (isX(fp)) { 15069 from = '>=' + fM + '.' + fm + '.0' 15070 } else { 15071 from = '>=' + from 15072 } 15073 15074 if (isX(tM)) { 15075 to = '' 15076 } else if (isX(tm)) { 15077 to = '<' + (+tM + 1) + '.0.0' 15078 } else if (isX(tp)) { 15079 to = '<' + tM + '.' + (+tm + 1) + '.0' 15080 } else if (tpr) { 15081 to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr 15082 } else { 15083 to = '<=' + to 15084 } 15085 15086 return (from + ' ' + to).trim() 15087 } 15088 15089 // if ANY of the sets match ALL of its comparators, then pass 15090 Range.prototype.test = function (version) { 15091 if (!version) { 15092 return false 15093 } 15094 15095 if (typeof version === 'string') { 15096 try { 15097 version = new SemVer(version, this.options) 15098 } catch (er) { 15099 return false 15100 } 15101 } 15102 15103 for (var i = 0; i < this.set.length; i++) { 15104 if (testSet(this.set[i], version, this.options)) { 15105 return true 15106 } 15107 } 15108 return false 15109 } 15110 15111 function testSet (set, version, options) { 15112 for (var i = 0; i < set.length; i++) { 15113 if (!set[i].test(version)) { 15114 return false 15115 } 15116 } 15117 15118 if (version.prerelease.length && !options.includePrerelease) { 15119 // Find the set of versions that are allowed to have prereleases 15120 // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 15121 // That should allow `1.2.3-pr.2` to pass. 15122 // However, `1.2.4-alpha.notready` should NOT be allowed, 15123 // even though it's within the range set by the comparators. 15124 for (i = 0; i < set.length; i++) { 15125 debug(set[i].semver) 15126 if (set[i].semver === ANY) { 15127 continue 15128 } 15129 15130 if (set[i].semver.prerelease.length > 0) { 15131 var allowed = set[i].semver 15132 if (allowed.major === version.major && 15133 allowed.minor === version.minor && 15134 allowed.patch === version.patch) { 15135 return true 15136 } 15137 } 15138 } 15139 15140 // Version has a -pre, but it's not one of the ones we like. 15141 return false 15142 } 15143 15144 return true 15145 } 15146 15147 exports.satisfies = satisfies 15148 function satisfies (version, range, options) { 15149 try { 15150 range = new Range(range, options) 15151 } catch (er) { 15152 return false 15153 } 15154 return range.test(version) 15155 } 15156 15157 exports.maxSatisfying = maxSatisfying 15158 function maxSatisfying (versions, range, options) { 15159 var max = null 15160 var maxSV = null 15161 try { 15162 var rangeObj = new Range(range, options) 15163 } catch (er) { 15164 return null 15165 } 15166 versions.forEach(function (v) { 15167 if (rangeObj.test(v)) { 15168 // satisfies(v, range, options) 15169 if (!max || maxSV.compare(v) === -1) { 15170 // compare(max, v, true) 15171 max = v 15172 maxSV = new SemVer(max, options) 15173 } 15174 } 15175 }) 15176 return max 15177 } 15178 15179 exports.minSatisfying = minSatisfying 15180 function minSatisfying (versions, range, options) { 15181 var min = null 15182 var minSV = null 15183 try { 15184 var rangeObj = new Range(range, options) 15185 } catch (er) { 15186 return null 15187 } 15188 versions.forEach(function (v) { 15189 if (rangeObj.test(v)) { 15190 // satisfies(v, range, options) 15191 if (!min || minSV.compare(v) === 1) { 15192 // compare(min, v, true) 15193 min = v 15194 minSV = new SemVer(min, options) 15195 } 15196 } 15197 }) 15198 return min 15199 } 15200 15201 exports.minVersion = minVersion 15202 function minVersion (range, loose) { 15203 range = new Range(range, loose) 15204 15205 var minver = new SemVer('0.0.0') 15206 if (range.test(minver)) { 15207 return minver 15208 } 15209 15210 minver = new SemVer('0.0.0-0') 15211 if (range.test(minver)) { 15212 return minver 15213 } 15214 15215 minver = null 15216 for (var i = 0; i < range.set.length; ++i) { 15217 var comparators = range.set[i] 15218 15219 comparators.forEach(function (comparator) { 15220 // Clone to avoid manipulating the comparator's semver object. 15221 var compver = new SemVer(comparator.semver.version) 15222 switch (comparator.operator) { 15223 case '>': 15224 if (compver.prerelease.length === 0) { 15225 compver.patch++ 15226 } else { 15227 compver.prerelease.push(0) 15228 } 15229 compver.raw = compver.format() 15230 /* fallthrough */ 15231 case '': 15232 case '>=': 15233 if (!minver || gt(minver, compver)) { 15234 minver = compver 15235 } 15236 break 15237 case '<': 15238 case '<=': 15239 /* Ignore maximum versions */ 15240 break 15241 /* istanbul ignore next */ 15242 default: 15243 throw new Error('Unexpected operation: ' + comparator.operator) 15244 } 15245 }) 15246 } 15247 15248 if (minver && range.test(minver)) { 15249 return minver 15250 } 15251 15252 return null 15253 } 15254 15255 exports.validRange = validRange 15256 function validRange (range, options) { 15257 try { 15258 // Return '*' instead of '' so that truthiness works. 15259 // This will throw if it's invalid anyway 15260 return new Range(range, options).range || '*' 15261 } catch (er) { 15262 return null 15263 } 15264 } 15265 15266 // Determine if version is less than all the versions possible in the range 15267 exports.ltr = ltr 15268 function ltr (version, range, options) { 15269 return outside(version, range, '<', options) 15270 } 15271 15272 // Determine if version is greater than all the versions possible in the range. 15273 exports.gtr = gtr 15274 function gtr (version, range, options) { 15275 return outside(version, range, '>', options) 15276 } 15277 15278 exports.outside = outside 15279 function outside (version, range, hilo, options) { 15280 version = new SemVer(version, options) 15281 range = new Range(range, options) 15282 15283 var gtfn, ltefn, ltfn, comp, ecomp 15284 switch (hilo) { 15285 case '>': 15286 gtfn = gt 15287 ltefn = lte 15288 ltfn = lt 15289 comp = '>' 15290 ecomp = '>=' 15291 break 15292 case '<': 15293 gtfn = lt 15294 ltefn = gte 15295 ltfn = gt 15296 comp = '<' 15297 ecomp = '<=' 15298 break 15299 default: 15300 throw new TypeError('Must provide a hilo val of "<" or ">"') 15301 } 15302 15303 // If it satisifes the range it is not outside 15304 if (satisfies(version, range, options)) { 15305 return false 15306 } 15307 15308 // From now on, variable terms are as if we're in "gtr" mode. 15309 // but note that everything is flipped for the "ltr" function. 15310 15311 for (var i = 0; i < range.set.length; ++i) { 15312 var comparators = range.set[i] 15313 15314 var high = null 15315 var low = null 15316 15317 comparators.forEach(function (comparator) { 15318 if (comparator.semver === ANY) { 15319 comparator = new Comparator('>=0.0.0') 15320 } 15321 high = high || comparator 15322 low = low || comparator 15323 if (gtfn(comparator.semver, high.semver, options)) { 15324 high = comparator 15325 } else if (ltfn(comparator.semver, low.semver, options)) { 15326 low = comparator 15327 } 15328 }) 15329 15330 // If the edge version comparator has a operator then our version 15331 // isn't outside it 15332 if (high.operator === comp || high.operator === ecomp) { 15333 return false 15334 } 15335 15336 // If the lowest version comparator has an operator and our version 15337 // is less than it then it isn't higher than the range 15338 if ((!low.operator || low.operator === comp) && 15339 ltefn(version, low.semver)) { 15340 return false 15341 } else if (low.operator === ecomp && ltfn(version, low.semver)) { 15342 return false 15343 } 15344 } 15345 return true 15346 } 15347 15348 exports.prerelease = prerelease 15349 function prerelease (version, options) { 15350 var parsed = parse(version, options) 15351 return (parsed && parsed.prerelease.length) ? parsed.prerelease : null 15352 } 15353 15354 exports.intersects = intersects 15355 function intersects (r1, r2, options) { 15356 r1 = new Range(r1, options) 15357 r2 = new Range(r2, options) 15358 return r1.intersects(r2) 15359 } 15360 15361 exports.coerce = coerce 15362 function coerce (version, options) { 15363 if (version instanceof SemVer) { 15364 return version 15365 } 15366 15367 if (typeof version === 'number') { 15368 version = String(version) 15369 } 15370 15371 if (typeof version !== 'string') { 15372 return null 15373 } 15374 15375 options = options || {} 15376 15377 var match = null 15378 if (!options.rtl) { 15379 match = version.match(safeRe[t.COERCE]) 15380 } else { 15381 // Find the right-most coercible string that does not share 15382 // a terminus with a more left-ward coercible string. 15383 // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' 15384 // 15385 // Walk through the string checking with a /g regexp 15386 // Manually set the index so as to pick up overlapping matches. 15387 // Stop when we get a match that ends at the string end, since no 15388 // coercible string can be more right-ward without the same terminus. 15389 var next 15390 while ((next = safeRe[t.COERCERTL].exec(version)) && 15391 (!match || match.index + match[0].length !== version.length) 15392 ) { 15393 if (!match || 15394 next.index + next[0].length !== match.index + match[0].length) { 15395 match = next 15396 } 15397 safeRe[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length 15398 } 15399 // leave it in a clean state 15400 safeRe[t.COERCERTL].lastIndex = -1 15401 } 15402 15403 if (match === null) { 15404 return null 15405 } 15406 15407 return parse(match[2] + 15408 '.' + (match[3] || '0') + 15409 '.' + (match[4] || '0'), options) 15410 } 15411 15412 15413 /***/ }), 15414 15415 /***/ 4256: 15416 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 15417 15418 15419 15420 var punycode = __nccwpck_require__(5477); 15421 var mappingTable = __nccwpck_require__(2020); 15422 15423 var PROCESSING_OPTIONS = { 15424 TRANSITIONAL: 0, 15425 NONTRANSITIONAL: 1 15426 }; 15427 15428 function normalize(str) { // fix bug in v8 15429 return str.split('\u0000').map(function (s) { return s.normalize('NFC'); }).join('\u0000'); 15430 } 15431 15432 function findStatus(val) { 15433 var start = 0; 15434 var end = mappingTable.length - 1; 15435 15436 while (start <= end) { 15437 var mid = Math.floor((start + end) / 2); 15438 15439 var target = mappingTable[mid]; 15440 if (target[0][0] <= val && target[0][1] >= val) { 15441 return target; 15442 } else if (target[0][0] > val) { 15443 end = mid - 1; 15444 } else { 15445 start = mid + 1; 15446 } 15447 } 15448 15449 return null; 15450 } 15451 15452 var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; 15453 15454 function countSymbols(string) { 15455 return string 15456 // replace every surrogate pair with a BMP symbol 15457 .replace(regexAstralSymbols, '_') 15458 // then get the length 15459 .length; 15460 } 15461 15462 function mapChars(domain_name, useSTD3, processing_option) { 15463 var hasError = false; 15464 var processed = ""; 15465 15466 var len = countSymbols(domain_name); 15467 for (var i = 0; i < len; ++i) { 15468 var codePoint = domain_name.codePointAt(i); 15469 var status = findStatus(codePoint); 15470 15471 switch (status[1]) { 15472 case "disallowed": 15473 hasError = true; 15474 processed += String.fromCodePoint(codePoint); 15475 break; 15476 case "ignored": 15477 break; 15478 case "mapped": 15479 processed += String.fromCodePoint.apply(String, status[2]); 15480 break; 15481 case "deviation": 15482 if (processing_option === PROCESSING_OPTIONS.TRANSITIONAL) { 15483 processed += String.fromCodePoint.apply(String, status[2]); 15484 } else { 15485 processed += String.fromCodePoint(codePoint); 15486 } 15487 break; 15488 case "valid": 15489 processed += String.fromCodePoint(codePoint); 15490 break; 15491 case "disallowed_STD3_mapped": 15492 if (useSTD3) { 15493 hasError = true; 15494 processed += String.fromCodePoint(codePoint); 15495 } else { 15496 processed += String.fromCodePoint.apply(String, status[2]); 15497 } 15498 break; 15499 case "disallowed_STD3_valid": 15500 if (useSTD3) { 15501 hasError = true; 15502 } 15503 15504 processed += String.fromCodePoint(codePoint); 15505 break; 15506 } 15507 } 15508 15509 return { 15510 string: processed, 15511 error: hasError 15512 }; 15513 } 15514 15515 var combiningMarksRegex = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u19B0-\u19C0\u19C8\u19C9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFC-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2D]|\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDE2C-\uDE37\uDEDF-\uDEEA\uDF01-\uDF03\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDE30-\uDE40\uDEAB-\uDEB7]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD83A[\uDCD0-\uDCD6]|\uDB40[\uDD00-\uDDEF]/; 15516 15517 function validateLabel(label, processing_option) { 15518 if (label.substr(0, 4) === "xn--") { 15519 label = punycode.toUnicode(label); 15520 processing_option = PROCESSING_OPTIONS.NONTRANSITIONAL; 15521 } 15522 15523 var error = false; 15524 15525 if (normalize(label) !== label || 15526 (label[3] === "-" && label[4] === "-") || 15527 label[0] === "-" || label[label.length - 1] === "-" || 15528 label.indexOf(".") !== -1 || 15529 label.search(combiningMarksRegex) === 0) { 15530 error = true; 15531 } 15532 15533 var len = countSymbols(label); 15534 for (var i = 0; i < len; ++i) { 15535 var status = findStatus(label.codePointAt(i)); 15536 if ((processing === PROCESSING_OPTIONS.TRANSITIONAL && status[1] !== "valid") || 15537 (processing === PROCESSING_OPTIONS.NONTRANSITIONAL && 15538 status[1] !== "valid" && status[1] !== "deviation")) { 15539 error = true; 15540 break; 15541 } 15542 } 15543 15544 return { 15545 label: label, 15546 error: error 15547 }; 15548 } 15549 15550 function processing(domain_name, useSTD3, processing_option) { 15551 var result = mapChars(domain_name, useSTD3, processing_option); 15552 result.string = normalize(result.string); 15553 15554 var labels = result.string.split("."); 15555 for (var i = 0; i < labels.length; ++i) { 15556 try { 15557 var validation = validateLabel(labels[i]); 15558 labels[i] = validation.label; 15559 result.error = result.error || validation.error; 15560 } catch(e) { 15561 result.error = true; 15562 } 15563 } 15564 15565 return { 15566 string: labels.join("."), 15567 error: result.error 15568 }; 15569 } 15570 15571 module.exports.toASCII = function(domain_name, useSTD3, processing_option, verifyDnsLength) { 15572 var result = processing(domain_name, useSTD3, processing_option); 15573 var labels = result.string.split("."); 15574 labels = labels.map(function(l) { 15575 try { 15576 return punycode.toASCII(l); 15577 } catch(e) { 15578 result.error = true; 15579 return l; 15580 } 15581 }); 15582 15583 if (verifyDnsLength) { 15584 var total = labels.slice(0, labels.length - 1).join(".").length; 15585 if (total.length > 253 || total.length === 0) { 15586 result.error = true; 15587 } 15588 15589 for (var i=0; i < labels.length; ++i) { 15590 if (labels.length > 63 || labels.length === 0) { 15591 result.error = true; 15592 break; 15593 } 15594 } 15595 } 15596 15597 if (result.error) return null; 15598 return labels.join("."); 15599 }; 15600 15601 module.exports.toUnicode = function(domain_name, useSTD3) { 15602 var result = processing(domain_name, useSTD3, PROCESSING_OPTIONS.NONTRANSITIONAL); 15603 15604 return { 15605 domain: result.string, 15606 error: result.error 15607 }; 15608 }; 15609 15610 module.exports.PROCESSING_OPTIONS = PROCESSING_OPTIONS; 15611 15612 15613 /***/ }), 15614 15615 /***/ 4294: 15616 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 15617 15618 module.exports = __nccwpck_require__(4219); 15619 15620 15621 /***/ }), 15622 15623 /***/ 4219: 15624 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 15625 15626 15627 15628 var net = __nccwpck_require__(1808); 15629 var tls = __nccwpck_require__(4404); 15630 var http = __nccwpck_require__(3685); 15631 var https = __nccwpck_require__(5687); 15632 var events = __nccwpck_require__(2361); 15633 var assert = __nccwpck_require__(9491); 15634 var util = __nccwpck_require__(3837); 15635 15636 15637 exports.httpOverHttp = httpOverHttp; 15638 exports.httpsOverHttp = httpsOverHttp; 15639 exports.httpOverHttps = httpOverHttps; 15640 exports.httpsOverHttps = httpsOverHttps; 15641 15642 15643 function httpOverHttp(options) { 15644 var agent = new TunnelingAgent(options); 15645 agent.request = http.request; 15646 return agent; 15647 } 15648 15649 function httpsOverHttp(options) { 15650 var agent = new TunnelingAgent(options); 15651 agent.request = http.request; 15652 agent.createSocket = createSecureSocket; 15653 agent.defaultPort = 443; 15654 return agent; 15655 } 15656 15657 function httpOverHttps(options) { 15658 var agent = new TunnelingAgent(options); 15659 agent.request = https.request; 15660 return agent; 15661 } 15662 15663 function httpsOverHttps(options) { 15664 var agent = new TunnelingAgent(options); 15665 agent.request = https.request; 15666 agent.createSocket = createSecureSocket; 15667 agent.defaultPort = 443; 15668 return agent; 15669 } 15670 15671 15672 function TunnelingAgent(options) { 15673 var self = this; 15674 self.options = options || {}; 15675 self.proxyOptions = self.options.proxy || {}; 15676 self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets; 15677 self.requests = []; 15678 self.sockets = []; 15679 15680 self.on('free', function onFree(socket, host, port, localAddress) { 15681 var options = toOptions(host, port, localAddress); 15682 for (var i = 0, len = self.requests.length; i < len; ++i) { 15683 var pending = self.requests[i]; 15684 if (pending.host === options.host && pending.port === options.port) { 15685 // Detect the request to connect same origin server, 15686 // reuse the connection. 15687 self.requests.splice(i, 1); 15688 pending.request.onSocket(socket); 15689 return; 15690 } 15691 } 15692 socket.destroy(); 15693 self.removeSocket(socket); 15694 }); 15695 } 15696 util.inherits(TunnelingAgent, events.EventEmitter); 15697 15698 TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) { 15699 var self = this; 15700 var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress)); 15701 15702 if (self.sockets.length >= this.maxSockets) { 15703 // We are over limit so we'll add it to the queue. 15704 self.requests.push(options); 15705 return; 15706 } 15707 15708 // If we are under maxSockets create a new one. 15709 self.createSocket(options, function(socket) { 15710 socket.on('free', onFree); 15711 socket.on('close', onCloseOrRemove); 15712 socket.on('agentRemove', onCloseOrRemove); 15713 req.onSocket(socket); 15714 15715 function onFree() { 15716 self.emit('free', socket, options); 15717 } 15718 15719 function onCloseOrRemove(err) { 15720 self.removeSocket(socket); 15721 socket.removeListener('free', onFree); 15722 socket.removeListener('close', onCloseOrRemove); 15723 socket.removeListener('agentRemove', onCloseOrRemove); 15724 } 15725 }); 15726 }; 15727 15728 TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { 15729 var self = this; 15730 var placeholder = {}; 15731 self.sockets.push(placeholder); 15732 15733 var connectOptions = mergeOptions({}, self.proxyOptions, { 15734 method: 'CONNECT', 15735 path: options.host + ':' + options.port, 15736 agent: false, 15737 headers: { 15738 host: options.host + ':' + options.port 15739 } 15740 }); 15741 if (options.localAddress) { 15742 connectOptions.localAddress = options.localAddress; 15743 } 15744 if (connectOptions.proxyAuth) { 15745 connectOptions.headers = connectOptions.headers || {}; 15746 connectOptions.headers['Proxy-Authorization'] = 'Basic ' + 15747 new Buffer(connectOptions.proxyAuth).toString('base64'); 15748 } 15749 15750 debug('making CONNECT request'); 15751 var connectReq = self.request(connectOptions); 15752 connectReq.useChunkedEncodingByDefault = false; // for v0.6 15753 connectReq.once('response', onResponse); // for v0.6 15754 connectReq.once('upgrade', onUpgrade); // for v0.6 15755 connectReq.once('connect', onConnect); // for v0.7 or later 15756 connectReq.once('error', onError); 15757 connectReq.end(); 15758 15759 function onResponse(res) { 15760 // Very hacky. This is necessary to avoid http-parser leaks. 15761 res.upgrade = true; 15762 } 15763 15764 function onUpgrade(res, socket, head) { 15765 // Hacky. 15766 process.nextTick(function() { 15767 onConnect(res, socket, head); 15768 }); 15769 } 15770 15771 function onConnect(res, socket, head) { 15772 connectReq.removeAllListeners(); 15773 socket.removeAllListeners(); 15774 15775 if (res.statusCode !== 200) { 15776 debug('tunneling socket could not be established, statusCode=%d', 15777 res.statusCode); 15778 socket.destroy(); 15779 var error = new Error('tunneling socket could not be established, ' + 15780 'statusCode=' + res.statusCode); 15781 error.code = 'ECONNRESET'; 15782 options.request.emit('error', error); 15783 self.removeSocket(placeholder); 15784 return; 15785 } 15786 if (head.length > 0) { 15787 debug('got illegal response body from proxy'); 15788 socket.destroy(); 15789 var error = new Error('got illegal response body from proxy'); 15790 error.code = 'ECONNRESET'; 15791 options.request.emit('error', error); 15792 self.removeSocket(placeholder); 15793 return; 15794 } 15795 debug('tunneling connection has established'); 15796 self.sockets[self.sockets.indexOf(placeholder)] = socket; 15797 return cb(socket); 15798 } 15799 15800 function onError(cause) { 15801 connectReq.removeAllListeners(); 15802 15803 debug('tunneling socket could not be established, cause=%s\n', 15804 cause.message, cause.stack); 15805 var error = new Error('tunneling socket could not be established, ' + 15806 'cause=' + cause.message); 15807 error.code = 'ECONNRESET'; 15808 options.request.emit('error', error); 15809 self.removeSocket(placeholder); 15810 } 15811 }; 15812 15813 TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { 15814 var pos = this.sockets.indexOf(socket) 15815 if (pos === -1) { 15816 return; 15817 } 15818 this.sockets.splice(pos, 1); 15819 15820 var pending = this.requests.shift(); 15821 if (pending) { 15822 // If we have pending requests and a socket gets closed a new one 15823 // needs to be created to take over in the pool for the one that closed. 15824 this.createSocket(pending, function(socket) { 15825 pending.request.onSocket(socket); 15826 }); 15827 } 15828 }; 15829 15830 function createSecureSocket(options, cb) { 15831 var self = this; 15832 TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { 15833 var hostHeader = options.request.getHeader('host'); 15834 var tlsOptions = mergeOptions({}, self.options, { 15835 socket: socket, 15836 servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host 15837 }); 15838 15839 // 0 is dummy port for v0.6 15840 var secureSocket = tls.connect(0, tlsOptions); 15841 self.sockets[self.sockets.indexOf(socket)] = secureSocket; 15842 cb(secureSocket); 15843 }); 15844 } 15845 15846 15847 function toOptions(host, port, localAddress) { 15848 if (typeof host === 'string') { // since v0.10 15849 return { 15850 host: host, 15851 port: port, 15852 localAddress: localAddress 15853 }; 15854 } 15855 return host; // for v0.11 or later 15856 } 15857 15858 function mergeOptions(target) { 15859 for (var i = 1, len = arguments.length; i < len; ++i) { 15860 var overrides = arguments[i]; 15861 if (typeof overrides === 'object') { 15862 var keys = Object.keys(overrides); 15863 for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { 15864 var k = keys[j]; 15865 if (overrides[k] !== undefined) { 15866 target[k] = overrides[k]; 15867 } 15868 } 15869 } 15870 } 15871 return target; 15872 } 15873 15874 15875 var debug; 15876 if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { 15877 debug = function() { 15878 var args = Array.prototype.slice.call(arguments); 15879 if (typeof args[0] === 'string') { 15880 args[0] = 'TUNNEL: ' + args[0]; 15881 } else { 15882 args.unshift('TUNNEL:'); 15883 } 15884 console.error.apply(console, args); 15885 } 15886 } else { 15887 debug = function() {}; 15888 } 15889 exports.debug = debug; // for test 15890 15891 15892 /***/ }), 15893 15894 /***/ 5030: 15895 /***/ ((__unused_webpack_module, exports) => { 15896 15897 15898 15899 Object.defineProperty(exports, "__esModule", ({ value: true })); 15900 15901 function getUserAgent() { 15902 if (typeof navigator === "object" && "userAgent" in navigator) { 15903 return navigator.userAgent; 15904 } 15905 15906 if (typeof process === "object" && "version" in process) { 15907 return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; 15908 } 15909 15910 return "<environment undetectable>"; 15911 } 15912 15913 exports.getUserAgent = getUserAgent; 15914 //# sourceMappingURL=index.js.map 15915 15916 15917 /***/ }), 15918 15919 /***/ 5840: 15920 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 15921 15922 15923 15924 Object.defineProperty(exports, "__esModule", ({ 15925 value: true 15926 })); 15927 Object.defineProperty(exports, "v1", ({ 15928 enumerable: true, 15929 get: function () { 15930 return _v.default; 15931 } 15932 })); 15933 Object.defineProperty(exports, "v3", ({ 15934 enumerable: true, 15935 get: function () { 15936 return _v2.default; 15937 } 15938 })); 15939 Object.defineProperty(exports, "v4", ({ 15940 enumerable: true, 15941 get: function () { 15942 return _v3.default; 15943 } 15944 })); 15945 Object.defineProperty(exports, "v5", ({ 15946 enumerable: true, 15947 get: function () { 15948 return _v4.default; 15949 } 15950 })); 15951 Object.defineProperty(exports, "NIL", ({ 15952 enumerable: true, 15953 get: function () { 15954 return _nil.default; 15955 } 15956 })); 15957 Object.defineProperty(exports, "version", ({ 15958 enumerable: true, 15959 get: function () { 15960 return _version.default; 15961 } 15962 })); 15963 Object.defineProperty(exports, "validate", ({ 15964 enumerable: true, 15965 get: function () { 15966 return _validate.default; 15967 } 15968 })); 15969 Object.defineProperty(exports, "stringify", ({ 15970 enumerable: true, 15971 get: function () { 15972 return _stringify.default; 15973 } 15974 })); 15975 Object.defineProperty(exports, "parse", ({ 15976 enumerable: true, 15977 get: function () { 15978 return _parse.default; 15979 } 15980 })); 15981 15982 var _v = _interopRequireDefault(__nccwpck_require__(8628)); 15983 15984 var _v2 = _interopRequireDefault(__nccwpck_require__(6409)); 15985 15986 var _v3 = _interopRequireDefault(__nccwpck_require__(5122)); 15987 15988 var _v4 = _interopRequireDefault(__nccwpck_require__(9120)); 15989 15990 var _nil = _interopRequireDefault(__nccwpck_require__(5332)); 15991 15992 var _version = _interopRequireDefault(__nccwpck_require__(1595)); 15993 15994 var _validate = _interopRequireDefault(__nccwpck_require__(6900)); 15995 15996 var _stringify = _interopRequireDefault(__nccwpck_require__(8950)); 15997 15998 var _parse = _interopRequireDefault(__nccwpck_require__(2746)); 15999 16000 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 16001 16002 /***/ }), 16003 16004 /***/ 4569: 16005 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 16006 16007 16008 16009 Object.defineProperty(exports, "__esModule", ({ 16010 value: true 16011 })); 16012 exports["default"] = void 0; 16013 16014 var _crypto = _interopRequireDefault(__nccwpck_require__(6113)); 16015 16016 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 16017 16018 function md5(bytes) { 16019 if (Array.isArray(bytes)) { 16020 bytes = Buffer.from(bytes); 16021 } else if (typeof bytes === 'string') { 16022 bytes = Buffer.from(bytes, 'utf8'); 16023 } 16024 16025 return _crypto.default.createHash('md5').update(bytes).digest(); 16026 } 16027 16028 var _default = md5; 16029 exports["default"] = _default; 16030 16031 /***/ }), 16032 16033 /***/ 5332: 16034 /***/ ((__unused_webpack_module, exports) => { 16035 16036 16037 16038 Object.defineProperty(exports, "__esModule", ({ 16039 value: true 16040 })); 16041 exports["default"] = void 0; 16042 var _default = '00000000-0000-0000-0000-000000000000'; 16043 exports["default"] = _default; 16044 16045 /***/ }), 16046 16047 /***/ 2746: 16048 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 16049 16050 16051 16052 Object.defineProperty(exports, "__esModule", ({ 16053 value: true 16054 })); 16055 exports["default"] = void 0; 16056 16057 var _validate = _interopRequireDefault(__nccwpck_require__(6900)); 16058 16059 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 16060 16061 function parse(uuid) { 16062 if (!(0, _validate.default)(uuid)) { 16063 throw TypeError('Invalid UUID'); 16064 } 16065 16066 let v; 16067 const arr = new Uint8Array(16); // Parse ########-....-....-....-............ 16068 16069 arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; 16070 arr[1] = v >>> 16 & 0xff; 16071 arr[2] = v >>> 8 & 0xff; 16072 arr[3] = v & 0xff; // Parse ........-####-....-....-............ 16073 16074 arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; 16075 arr[5] = v & 0xff; // Parse ........-....-####-....-............ 16076 16077 arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; 16078 arr[7] = v & 0xff; // Parse ........-....-....-####-............ 16079 16080 arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; 16081 arr[9] = v & 0xff; // Parse ........-....-....-....-############ 16082 // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) 16083 16084 arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; 16085 arr[11] = v / 0x100000000 & 0xff; 16086 arr[12] = v >>> 24 & 0xff; 16087 arr[13] = v >>> 16 & 0xff; 16088 arr[14] = v >>> 8 & 0xff; 16089 arr[15] = v & 0xff; 16090 return arr; 16091 } 16092 16093 var _default = parse; 16094 exports["default"] = _default; 16095 16096 /***/ }), 16097 16098 /***/ 814: 16099 /***/ ((__unused_webpack_module, exports) => { 16100 16101 16102 16103 Object.defineProperty(exports, "__esModule", ({ 16104 value: true 16105 })); 16106 exports["default"] = void 0; 16107 var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; 16108 exports["default"] = _default; 16109 16110 /***/ }), 16111 16112 /***/ 807: 16113 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 16114 16115 16116 16117 Object.defineProperty(exports, "__esModule", ({ 16118 value: true 16119 })); 16120 exports["default"] = rng; 16121 16122 var _crypto = _interopRequireDefault(__nccwpck_require__(6113)); 16123 16124 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 16125 16126 const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate 16127 16128 let poolPtr = rnds8Pool.length; 16129 16130 function rng() { 16131 if (poolPtr > rnds8Pool.length - 16) { 16132 _crypto.default.randomFillSync(rnds8Pool); 16133 16134 poolPtr = 0; 16135 } 16136 16137 return rnds8Pool.slice(poolPtr, poolPtr += 16); 16138 } 16139 16140 /***/ }), 16141 16142 /***/ 5274: 16143 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 16144 16145 16146 16147 Object.defineProperty(exports, "__esModule", ({ 16148 value: true 16149 })); 16150 exports["default"] = void 0; 16151 16152 var _crypto = _interopRequireDefault(__nccwpck_require__(6113)); 16153 16154 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 16155 16156 function sha1(bytes) { 16157 if (Array.isArray(bytes)) { 16158 bytes = Buffer.from(bytes); 16159 } else if (typeof bytes === 'string') { 16160 bytes = Buffer.from(bytes, 'utf8'); 16161 } 16162 16163 return _crypto.default.createHash('sha1').update(bytes).digest(); 16164 } 16165 16166 var _default = sha1; 16167 exports["default"] = _default; 16168 16169 /***/ }), 16170 16171 /***/ 8950: 16172 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 16173 16174 16175 16176 Object.defineProperty(exports, "__esModule", ({ 16177 value: true 16178 })); 16179 exports["default"] = void 0; 16180 16181 var _validate = _interopRequireDefault(__nccwpck_require__(6900)); 16182 16183 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 16184 16185 /** 16186 * Convert array of 16 byte values to UUID string format of the form: 16187 * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 16188 */ 16189 const byteToHex = []; 16190 16191 for (let i = 0; i < 256; ++i) { 16192 byteToHex.push((i + 0x100).toString(16).substr(1)); 16193 } 16194 16195 function stringify(arr, offset = 0) { 16196 // Note: Be careful editing this code! It's been tuned for performance 16197 // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 16198 const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one 16199 // of the following: 16200 // - One or more input array values don't map to a hex octet (leading to 16201 // "undefined" in the uuid) 16202 // - Invalid input values for the RFC `version` or `variant` fields 16203 16204 if (!(0, _validate.default)(uuid)) { 16205 throw TypeError('Stringified UUID is invalid'); 16206 } 16207 16208 return uuid; 16209 } 16210 16211 var _default = stringify; 16212 exports["default"] = _default; 16213 16214 /***/ }), 16215 16216 /***/ 8628: 16217 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 16218 16219 16220 16221 Object.defineProperty(exports, "__esModule", ({ 16222 value: true 16223 })); 16224 exports["default"] = void 0; 16225 16226 var _rng = _interopRequireDefault(__nccwpck_require__(807)); 16227 16228 var _stringify = _interopRequireDefault(__nccwpck_require__(8950)); 16229 16230 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 16231 16232 // **`v1()` - Generate time-based UUID** 16233 // 16234 // Inspired by https://github.com/LiosK/UUID.js 16235 // and http://docs.python.org/library/uuid.html 16236 let _nodeId; 16237 16238 let _clockseq; // Previous uuid creation time 16239 16240 16241 let _lastMSecs = 0; 16242 let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details 16243 16244 function v1(options, buf, offset) { 16245 let i = buf && offset || 0; 16246 const b = buf || new Array(16); 16247 options = options || {}; 16248 let node = options.node || _nodeId; 16249 let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not 16250 // specified. We do this lazily to minimize issues related to insufficient 16251 // system entropy. See #189 16252 16253 if (node == null || clockseq == null) { 16254 const seedBytes = options.random || (options.rng || _rng.default)(); 16255 16256 if (node == null) { 16257 // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) 16258 node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; 16259 } 16260 16261 if (clockseq == null) { 16262 // Per 4.2.2, randomize (14 bit) clockseq 16263 clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; 16264 } 16265 } // UUID timestamps are 100 nano-second units since the Gregorian epoch, 16266 // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so 16267 // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' 16268 // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. 16269 16270 16271 let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock 16272 // cycle to simulate higher resolution clock 16273 16274 let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) 16275 16276 const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression 16277 16278 if (dt < 0 && options.clockseq === undefined) { 16279 clockseq = clockseq + 1 & 0x3fff; 16280 } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new 16281 // time interval 16282 16283 16284 if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { 16285 nsecs = 0; 16286 } // Per 4.2.1.2 Throw error if too many uuids are requested 16287 16288 16289 if (nsecs >= 10000) { 16290 throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); 16291 } 16292 16293 _lastMSecs = msecs; 16294 _lastNSecs = nsecs; 16295 _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch 16296 16297 msecs += 12219292800000; // `time_low` 16298 16299 const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; 16300 b[i++] = tl >>> 24 & 0xff; 16301 b[i++] = tl >>> 16 & 0xff; 16302 b[i++] = tl >>> 8 & 0xff; 16303 b[i++] = tl & 0xff; // `time_mid` 16304 16305 const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; 16306 b[i++] = tmh >>> 8 & 0xff; 16307 b[i++] = tmh & 0xff; // `time_high_and_version` 16308 16309 b[i++] = tmh >>> 24 & 0xf | 0x10; // include version 16310 16311 b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) 16312 16313 b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` 16314 16315 b[i++] = clockseq & 0xff; // `node` 16316 16317 for (let n = 0; n < 6; ++n) { 16318 b[i + n] = node[n]; 16319 } 16320 16321 return buf || (0, _stringify.default)(b); 16322 } 16323 16324 var _default = v1; 16325 exports["default"] = _default; 16326 16327 /***/ }), 16328 16329 /***/ 6409: 16330 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 16331 16332 16333 16334 Object.defineProperty(exports, "__esModule", ({ 16335 value: true 16336 })); 16337 exports["default"] = void 0; 16338 16339 var _v = _interopRequireDefault(__nccwpck_require__(5998)); 16340 16341 var _md = _interopRequireDefault(__nccwpck_require__(4569)); 16342 16343 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 16344 16345 const v3 = (0, _v.default)('v3', 0x30, _md.default); 16346 var _default = v3; 16347 exports["default"] = _default; 16348 16349 /***/ }), 16350 16351 /***/ 5998: 16352 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 16353 16354 16355 16356 Object.defineProperty(exports, "__esModule", ({ 16357 value: true 16358 })); 16359 exports["default"] = _default; 16360 exports.URL = exports.DNS = void 0; 16361 16362 var _stringify = _interopRequireDefault(__nccwpck_require__(8950)); 16363 16364 var _parse = _interopRequireDefault(__nccwpck_require__(2746)); 16365 16366 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 16367 16368 function stringToBytes(str) { 16369 str = unescape(encodeURIComponent(str)); // UTF8 escape 16370 16371 const bytes = []; 16372 16373 for (let i = 0; i < str.length; ++i) { 16374 bytes.push(str.charCodeAt(i)); 16375 } 16376 16377 return bytes; 16378 } 16379 16380 const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; 16381 exports.DNS = DNS; 16382 const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; 16383 exports.URL = URL; 16384 16385 function _default(name, version, hashfunc) { 16386 function generateUUID(value, namespace, buf, offset) { 16387 if (typeof value === 'string') { 16388 value = stringToBytes(value); 16389 } 16390 16391 if (typeof namespace === 'string') { 16392 namespace = (0, _parse.default)(namespace); 16393 } 16394 16395 if (namespace.length !== 16) { 16396 throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); 16397 } // Compute hash of namespace and value, Per 4.3 16398 // Future: Use spread syntax when supported on all platforms, e.g. `bytes = 16399 // hashfunc([...namespace, ... value])` 16400 16401 16402 let bytes = new Uint8Array(16 + value.length); 16403 bytes.set(namespace); 16404 bytes.set(value, namespace.length); 16405 bytes = hashfunc(bytes); 16406 bytes[6] = bytes[6] & 0x0f | version; 16407 bytes[8] = bytes[8] & 0x3f | 0x80; 16408 16409 if (buf) { 16410 offset = offset || 0; 16411 16412 for (let i = 0; i < 16; ++i) { 16413 buf[offset + i] = bytes[i]; 16414 } 16415 16416 return buf; 16417 } 16418 16419 return (0, _stringify.default)(bytes); 16420 } // Function#name is not settable on some platforms (#270) 16421 16422 16423 try { 16424 generateUUID.name = name; // eslint-disable-next-line no-empty 16425 } catch (err) {} // For CommonJS default export support 16426 16427 16428 generateUUID.DNS = DNS; 16429 generateUUID.URL = URL; 16430 return generateUUID; 16431 } 16432 16433 /***/ }), 16434 16435 /***/ 5122: 16436 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 16437 16438 16439 16440 Object.defineProperty(exports, "__esModule", ({ 16441 value: true 16442 })); 16443 exports["default"] = void 0; 16444 16445 var _rng = _interopRequireDefault(__nccwpck_require__(807)); 16446 16447 var _stringify = _interopRequireDefault(__nccwpck_require__(8950)); 16448 16449 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 16450 16451 function v4(options, buf, offset) { 16452 options = options || {}; 16453 16454 const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` 16455 16456 16457 rnds[6] = rnds[6] & 0x0f | 0x40; 16458 rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided 16459 16460 if (buf) { 16461 offset = offset || 0; 16462 16463 for (let i = 0; i < 16; ++i) { 16464 buf[offset + i] = rnds[i]; 16465 } 16466 16467 return buf; 16468 } 16469 16470 return (0, _stringify.default)(rnds); 16471 } 16472 16473 var _default = v4; 16474 exports["default"] = _default; 16475 16476 /***/ }), 16477 16478 /***/ 9120: 16479 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 16480 16481 16482 16483 Object.defineProperty(exports, "__esModule", ({ 16484 value: true 16485 })); 16486 exports["default"] = void 0; 16487 16488 var _v = _interopRequireDefault(__nccwpck_require__(5998)); 16489 16490 var _sha = _interopRequireDefault(__nccwpck_require__(5274)); 16491 16492 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 16493 16494 const v5 = (0, _v.default)('v5', 0x50, _sha.default); 16495 var _default = v5; 16496 exports["default"] = _default; 16497 16498 /***/ }), 16499 16500 /***/ 6900: 16501 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 16502 16503 16504 16505 Object.defineProperty(exports, "__esModule", ({ 16506 value: true 16507 })); 16508 exports["default"] = void 0; 16509 16510 var _regex = _interopRequireDefault(__nccwpck_require__(814)); 16511 16512 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 16513 16514 function validate(uuid) { 16515 return typeof uuid === 'string' && _regex.default.test(uuid); 16516 } 16517 16518 var _default = validate; 16519 exports["default"] = _default; 16520 16521 /***/ }), 16522 16523 /***/ 1595: 16524 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 16525 16526 16527 16528 Object.defineProperty(exports, "__esModule", ({ 16529 value: true 16530 })); 16531 exports["default"] = void 0; 16532 16533 var _validate = _interopRequireDefault(__nccwpck_require__(6900)); 16534 16535 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 16536 16537 function version(uuid) { 16538 if (!(0, _validate.default)(uuid)) { 16539 throw TypeError('Invalid UUID'); 16540 } 16541 16542 return parseInt(uuid.substr(14, 1), 16); 16543 } 16544 16545 var _default = version; 16546 exports["default"] = _default; 16547 16548 /***/ }), 16549 16550 /***/ 4886: 16551 /***/ ((module) => { 16552 16553 16554 16555 var conversions = {}; 16556 module.exports = conversions; 16557 16558 function sign(x) { 16559 return x < 0 ? -1 : 1; 16560 } 16561 16562 function evenRound(x) { 16563 // Round x to the nearest integer, choosing the even integer if it lies halfway between two. 16564 if ((x % 1) === 0.5 && (x & 1) === 0) { // [even number].5; round down (i.e. floor) 16565 return Math.floor(x); 16566 } else { 16567 return Math.round(x); 16568 } 16569 } 16570 16571 function createNumberConversion(bitLength, typeOpts) { 16572 if (!typeOpts.unsigned) { 16573 --bitLength; 16574 } 16575 const lowerBound = typeOpts.unsigned ? 0 : -Math.pow(2, bitLength); 16576 const upperBound = Math.pow(2, bitLength) - 1; 16577 16578 const moduloVal = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength) : Math.pow(2, bitLength); 16579 const moduloBound = typeOpts.moduloBitLength ? Math.pow(2, typeOpts.moduloBitLength - 1) : Math.pow(2, bitLength - 1); 16580 16581 return function(V, opts) { 16582 if (!opts) opts = {}; 16583 16584 let x = +V; 16585 16586 if (opts.enforceRange) { 16587 if (!Number.isFinite(x)) { 16588 throw new TypeError("Argument is not a finite number"); 16589 } 16590 16591 x = sign(x) * Math.floor(Math.abs(x)); 16592 if (x < lowerBound || x > upperBound) { 16593 throw new TypeError("Argument is not in byte range"); 16594 } 16595 16596 return x; 16597 } 16598 16599 if (!isNaN(x) && opts.clamp) { 16600 x = evenRound(x); 16601 16602 if (x < lowerBound) x = lowerBound; 16603 if (x > upperBound) x = upperBound; 16604 return x; 16605 } 16606 16607 if (!Number.isFinite(x) || x === 0) { 16608 return 0; 16609 } 16610 16611 x = sign(x) * Math.floor(Math.abs(x)); 16612 x = x % moduloVal; 16613 16614 if (!typeOpts.unsigned && x >= moduloBound) { 16615 return x - moduloVal; 16616 } else if (typeOpts.unsigned) { 16617 if (x < 0) { 16618 x += moduloVal; 16619 } else if (x === -0) { // don't return negative zero 16620 return 0; 16621 } 16622 } 16623 16624 return x; 16625 } 16626 } 16627 16628 conversions["void"] = function () { 16629 return undefined; 16630 }; 16631 16632 conversions["boolean"] = function (val) { 16633 return !!val; 16634 }; 16635 16636 conversions["byte"] = createNumberConversion(8, { unsigned: false }); 16637 conversions["octet"] = createNumberConversion(8, { unsigned: true }); 16638 16639 conversions["short"] = createNumberConversion(16, { unsigned: false }); 16640 conversions["unsigned short"] = createNumberConversion(16, { unsigned: true }); 16641 16642 conversions["long"] = createNumberConversion(32, { unsigned: false }); 16643 conversions["unsigned long"] = createNumberConversion(32, { unsigned: true }); 16644 16645 conversions["long long"] = createNumberConversion(32, { unsigned: false, moduloBitLength: 64 }); 16646 conversions["unsigned long long"] = createNumberConversion(32, { unsigned: true, moduloBitLength: 64 }); 16647 16648 conversions["double"] = function (V) { 16649 const x = +V; 16650 16651 if (!Number.isFinite(x)) { 16652 throw new TypeError("Argument is not a finite floating-point value"); 16653 } 16654 16655 return x; 16656 }; 16657 16658 conversions["unrestricted double"] = function (V) { 16659 const x = +V; 16660 16661 if (isNaN(x)) { 16662 throw new TypeError("Argument is NaN"); 16663 } 16664 16665 return x; 16666 }; 16667 16668 // not quite valid, but good enough for JS 16669 conversions["float"] = conversions["double"]; 16670 conversions["unrestricted float"] = conversions["unrestricted double"]; 16671 16672 conversions["DOMString"] = function (V, opts) { 16673 if (!opts) opts = {}; 16674 16675 if (opts.treatNullAsEmptyString && V === null) { 16676 return ""; 16677 } 16678 16679 return String(V); 16680 }; 16681 16682 conversions["ByteString"] = function (V, opts) { 16683 const x = String(V); 16684 let c = undefined; 16685 for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) { 16686 if (c > 255) { 16687 throw new TypeError("Argument is not a valid bytestring"); 16688 } 16689 } 16690 16691 return x; 16692 }; 16693 16694 conversions["USVString"] = function (V) { 16695 const S = String(V); 16696 const n = S.length; 16697 const U = []; 16698 for (let i = 0; i < n; ++i) { 16699 const c = S.charCodeAt(i); 16700 if (c < 0xD800 || c > 0xDFFF) { 16701 U.push(String.fromCodePoint(c)); 16702 } else if (0xDC00 <= c && c <= 0xDFFF) { 16703 U.push(String.fromCodePoint(0xFFFD)); 16704 } else { 16705 if (i === n - 1) { 16706 U.push(String.fromCodePoint(0xFFFD)); 16707 } else { 16708 const d = S.charCodeAt(i + 1); 16709 if (0xDC00 <= d && d <= 0xDFFF) { 16710 const a = c & 0x3FF; 16711 const b = d & 0x3FF; 16712 U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b)); 16713 ++i; 16714 } else { 16715 U.push(String.fromCodePoint(0xFFFD)); 16716 } 16717 } 16718 } 16719 } 16720 16721 return U.join(''); 16722 }; 16723 16724 conversions["Date"] = function (V, opts) { 16725 if (!(V instanceof Date)) { 16726 throw new TypeError("Argument is not a Date object"); 16727 } 16728 if (isNaN(V)) { 16729 return undefined; 16730 } 16731 16732 return V; 16733 }; 16734 16735 conversions["RegExp"] = function (V, opts) { 16736 if (!(V instanceof RegExp)) { 16737 V = new RegExp(V); 16738 } 16739 16740 return V; 16741 }; 16742 16743 16744 /***/ }), 16745 16746 /***/ 7537: 16747 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 16748 16749 16750 const usm = __nccwpck_require__(2158); 16751 16752 exports.implementation = class URLImpl { 16753 constructor(constructorArgs) { 16754 const url = constructorArgs[0]; 16755 const base = constructorArgs[1]; 16756 16757 let parsedBase = null; 16758 if (base !== undefined) { 16759 parsedBase = usm.basicURLParse(base); 16760 if (parsedBase === "failure") { 16761 throw new TypeError("Invalid base URL"); 16762 } 16763 } 16764 16765 const parsedURL = usm.basicURLParse(url, { baseURL: parsedBase }); 16766 if (parsedURL === "failure") { 16767 throw new TypeError("Invalid URL"); 16768 } 16769 16770 this._url = parsedURL; 16771 16772 // TODO: query stuff 16773 } 16774 16775 get href() { 16776 return usm.serializeURL(this._url); 16777 } 16778 16779 set href(v) { 16780 const parsedURL = usm.basicURLParse(v); 16781 if (parsedURL === "failure") { 16782 throw new TypeError("Invalid URL"); 16783 } 16784 16785 this._url = parsedURL; 16786 } 16787 16788 get origin() { 16789 return usm.serializeURLOrigin(this._url); 16790 } 16791 16792 get protocol() { 16793 return this._url.scheme + ":"; 16794 } 16795 16796 set protocol(v) { 16797 usm.basicURLParse(v + ":", { url: this._url, stateOverride: "scheme start" }); 16798 } 16799 16800 get username() { 16801 return this._url.username; 16802 } 16803 16804 set username(v) { 16805 if (usm.cannotHaveAUsernamePasswordPort(this._url)) { 16806 return; 16807 } 16808 16809 usm.setTheUsername(this._url, v); 16810 } 16811 16812 get password() { 16813 return this._url.password; 16814 } 16815 16816 set password(v) { 16817 if (usm.cannotHaveAUsernamePasswordPort(this._url)) { 16818 return; 16819 } 16820 16821 usm.setThePassword(this._url, v); 16822 } 16823 16824 get host() { 16825 const url = this._url; 16826 16827 if (url.host === null) { 16828 return ""; 16829 } 16830 16831 if (url.port === null) { 16832 return usm.serializeHost(url.host); 16833 } 16834 16835 return usm.serializeHost(url.host) + ":" + usm.serializeInteger(url.port); 16836 } 16837 16838 set host(v) { 16839 if (this._url.cannotBeABaseURL) { 16840 return; 16841 } 16842 16843 usm.basicURLParse(v, { url: this._url, stateOverride: "host" }); 16844 } 16845 16846 get hostname() { 16847 if (this._url.host === null) { 16848 return ""; 16849 } 16850 16851 return usm.serializeHost(this._url.host); 16852 } 16853 16854 set hostname(v) { 16855 if (this._url.cannotBeABaseURL) { 16856 return; 16857 } 16858 16859 usm.basicURLParse(v, { url: this._url, stateOverride: "hostname" }); 16860 } 16861 16862 get port() { 16863 if (this._url.port === null) { 16864 return ""; 16865 } 16866 16867 return usm.serializeInteger(this._url.port); 16868 } 16869 16870 set port(v) { 16871 if (usm.cannotHaveAUsernamePasswordPort(this._url)) { 16872 return; 16873 } 16874 16875 if (v === "") { 16876 this._url.port = null; 16877 } else { 16878 usm.basicURLParse(v, { url: this._url, stateOverride: "port" }); 16879 } 16880 } 16881 16882 get pathname() { 16883 if (this._url.cannotBeABaseURL) { 16884 return this._url.path[0]; 16885 } 16886 16887 if (this._url.path.length === 0) { 16888 return ""; 16889 } 16890 16891 return "/" + this._url.path.join("/"); 16892 } 16893 16894 set pathname(v) { 16895 if (this._url.cannotBeABaseURL) { 16896 return; 16897 } 16898 16899 this._url.path = []; 16900 usm.basicURLParse(v, { url: this._url, stateOverride: "path start" }); 16901 } 16902 16903 get search() { 16904 if (this._url.query === null || this._url.query === "") { 16905 return ""; 16906 } 16907 16908 return "?" + this._url.query; 16909 } 16910 16911 set search(v) { 16912 // TODO: query stuff 16913 16914 const url = this._url; 16915 16916 if (v === "") { 16917 url.query = null; 16918 return; 16919 } 16920 16921 const input = v[0] === "?" ? v.substring(1) : v; 16922 url.query = ""; 16923 usm.basicURLParse(input, { url, stateOverride: "query" }); 16924 } 16925 16926 get hash() { 16927 if (this._url.fragment === null || this._url.fragment === "") { 16928 return ""; 16929 } 16930 16931 return "#" + this._url.fragment; 16932 } 16933 16934 set hash(v) { 16935 if (v === "") { 16936 this._url.fragment = null; 16937 return; 16938 } 16939 16940 const input = v[0] === "#" ? v.substring(1) : v; 16941 this._url.fragment = ""; 16942 usm.basicURLParse(input, { url: this._url, stateOverride: "fragment" }); 16943 } 16944 16945 toJSON() { 16946 return this.href; 16947 } 16948 }; 16949 16950 16951 /***/ }), 16952 16953 /***/ 3394: 16954 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 16955 16956 16957 16958 const conversions = __nccwpck_require__(4886); 16959 const utils = __nccwpck_require__(3185); 16960 const Impl = __nccwpck_require__(7537); 16961 16962 const impl = utils.implSymbol; 16963 16964 function URL(url) { 16965 if (!this || this[impl] || !(this instanceof URL)) { 16966 throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function."); 16967 } 16968 if (arguments.length < 1) { 16969 throw new TypeError("Failed to construct 'URL': 1 argument required, but only " + arguments.length + " present."); 16970 } 16971 const args = []; 16972 for (let i = 0; i < arguments.length && i < 2; ++i) { 16973 args[i] = arguments[i]; 16974 } 16975 args[0] = conversions["USVString"](args[0]); 16976 if (args[1] !== undefined) { 16977 args[1] = conversions["USVString"](args[1]); 16978 } 16979 16980 module.exports.setup(this, args); 16981 } 16982 16983 URL.prototype.toJSON = function toJSON() { 16984 if (!this || !module.exports.is(this)) { 16985 throw new TypeError("Illegal invocation"); 16986 } 16987 const args = []; 16988 for (let i = 0; i < arguments.length && i < 0; ++i) { 16989 args[i] = arguments[i]; 16990 } 16991 return this[impl].toJSON.apply(this[impl], args); 16992 }; 16993 Object.defineProperty(URL.prototype, "href", { 16994 get() { 16995 return this[impl].href; 16996 }, 16997 set(V) { 16998 V = conversions["USVString"](V); 16999 this[impl].href = V; 17000 }, 17001 enumerable: true, 17002 configurable: true 17003 }); 17004 17005 URL.prototype.toString = function () { 17006 if (!this || !module.exports.is(this)) { 17007 throw new TypeError("Illegal invocation"); 17008 } 17009 return this.href; 17010 }; 17011 17012 Object.defineProperty(URL.prototype, "origin", { 17013 get() { 17014 return this[impl].origin; 17015 }, 17016 enumerable: true, 17017 configurable: true 17018 }); 17019 17020 Object.defineProperty(URL.prototype, "protocol", { 17021 get() { 17022 return this[impl].protocol; 17023 }, 17024 set(V) { 17025 V = conversions["USVString"](V); 17026 this[impl].protocol = V; 17027 }, 17028 enumerable: true, 17029 configurable: true 17030 }); 17031 17032 Object.defineProperty(URL.prototype, "username", { 17033 get() { 17034 return this[impl].username; 17035 }, 17036 set(V) { 17037 V = conversions["USVString"](V); 17038 this[impl].username = V; 17039 }, 17040 enumerable: true, 17041 configurable: true 17042 }); 17043 17044 Object.defineProperty(URL.prototype, "password", { 17045 get() { 17046 return this[impl].password; 17047 }, 17048 set(V) { 17049 V = conversions["USVString"](V); 17050 this[impl].password = V; 17051 }, 17052 enumerable: true, 17053 configurable: true 17054 }); 17055 17056 Object.defineProperty(URL.prototype, "host", { 17057 get() { 17058 return this[impl].host; 17059 }, 17060 set(V) { 17061 V = conversions["USVString"](V); 17062 this[impl].host = V; 17063 }, 17064 enumerable: true, 17065 configurable: true 17066 }); 17067 17068 Object.defineProperty(URL.prototype, "hostname", { 17069 get() { 17070 return this[impl].hostname; 17071 }, 17072 set(V) { 17073 V = conversions["USVString"](V); 17074 this[impl].hostname = V; 17075 }, 17076 enumerable: true, 17077 configurable: true 17078 }); 17079 17080 Object.defineProperty(URL.prototype, "port", { 17081 get() { 17082 return this[impl].port; 17083 }, 17084 set(V) { 17085 V = conversions["USVString"](V); 17086 this[impl].port = V; 17087 }, 17088 enumerable: true, 17089 configurable: true 17090 }); 17091 17092 Object.defineProperty(URL.prototype, "pathname", { 17093 get() { 17094 return this[impl].pathname; 17095 }, 17096 set(V) { 17097 V = conversions["USVString"](V); 17098 this[impl].pathname = V; 17099 }, 17100 enumerable: true, 17101 configurable: true 17102 }); 17103 17104 Object.defineProperty(URL.prototype, "search", { 17105 get() { 17106 return this[impl].search; 17107 }, 17108 set(V) { 17109 V = conversions["USVString"](V); 17110 this[impl].search = V; 17111 }, 17112 enumerable: true, 17113 configurable: true 17114 }); 17115 17116 Object.defineProperty(URL.prototype, "hash", { 17117 get() { 17118 return this[impl].hash; 17119 }, 17120 set(V) { 17121 V = conversions["USVString"](V); 17122 this[impl].hash = V; 17123 }, 17124 enumerable: true, 17125 configurable: true 17126 }); 17127 17128 17129 module.exports = { 17130 is(obj) { 17131 return !!obj && obj[impl] instanceof Impl.implementation; 17132 }, 17133 create(constructorArgs, privateData) { 17134 let obj = Object.create(URL.prototype); 17135 this.setup(obj, constructorArgs, privateData); 17136 return obj; 17137 }, 17138 setup(obj, constructorArgs, privateData) { 17139 if (!privateData) privateData = {}; 17140 privateData.wrapper = obj; 17141 17142 obj[impl] = new Impl.implementation(constructorArgs, privateData); 17143 obj[impl][utils.wrapperSymbol] = obj; 17144 }, 17145 interface: URL, 17146 expose: { 17147 Window: { URL: URL }, 17148 Worker: { URL: URL } 17149 } 17150 }; 17151 17152 17153 17154 /***/ }), 17155 17156 /***/ 8665: 17157 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 17158 17159 17160 17161 exports.URL = __nccwpck_require__(3394)["interface"]; 17162 exports.serializeURL = __nccwpck_require__(2158).serializeURL; 17163 exports.serializeURLOrigin = __nccwpck_require__(2158).serializeURLOrigin; 17164 exports.basicURLParse = __nccwpck_require__(2158).basicURLParse; 17165 exports.setTheUsername = __nccwpck_require__(2158).setTheUsername; 17166 exports.setThePassword = __nccwpck_require__(2158).setThePassword; 17167 exports.serializeHost = __nccwpck_require__(2158).serializeHost; 17168 exports.serializeInteger = __nccwpck_require__(2158).serializeInteger; 17169 exports.parseURL = __nccwpck_require__(2158).parseURL; 17170 17171 17172 /***/ }), 17173 17174 /***/ 2158: 17175 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 17176 17177 17178 const punycode = __nccwpck_require__(5477); 17179 const tr46 = __nccwpck_require__(4256); 17180 17181 const specialSchemes = { 17182 ftp: 21, 17183 file: null, 17184 gopher: 70, 17185 http: 80, 17186 https: 443, 17187 ws: 80, 17188 wss: 443 17189 }; 17190 17191 const failure = Symbol("failure"); 17192 17193 function countSymbols(str) { 17194 return punycode.ucs2.decode(str).length; 17195 } 17196 17197 function at(input, idx) { 17198 const c = input[idx]; 17199 return isNaN(c) ? undefined : String.fromCodePoint(c); 17200 } 17201 17202 function isASCIIDigit(c) { 17203 return c >= 0x30 && c <= 0x39; 17204 } 17205 17206 function isASCIIAlpha(c) { 17207 return (c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A); 17208 } 17209 17210 function isASCIIAlphanumeric(c) { 17211 return isASCIIAlpha(c) || isASCIIDigit(c); 17212 } 17213 17214 function isASCIIHex(c) { 17215 return isASCIIDigit(c) || (c >= 0x41 && c <= 0x46) || (c >= 0x61 && c <= 0x66); 17216 } 17217 17218 function isSingleDot(buffer) { 17219 return buffer === "." || buffer.toLowerCase() === "%2e"; 17220 } 17221 17222 function isDoubleDot(buffer) { 17223 buffer = buffer.toLowerCase(); 17224 return buffer === ".." || buffer === "%2e." || buffer === ".%2e" || buffer === "%2e%2e"; 17225 } 17226 17227 function isWindowsDriveLetterCodePoints(cp1, cp2) { 17228 return isASCIIAlpha(cp1) && (cp2 === 58 || cp2 === 124); 17229 } 17230 17231 function isWindowsDriveLetterString(string) { 17232 return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && (string[1] === ":" || string[1] === "|"); 17233 } 17234 17235 function isNormalizedWindowsDriveLetterString(string) { 17236 return string.length === 2 && isASCIIAlpha(string.codePointAt(0)) && string[1] === ":"; 17237 } 17238 17239 function containsForbiddenHostCodePoint(string) { 17240 return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/) !== -1; 17241 } 17242 17243 function containsForbiddenHostCodePointExcludingPercent(string) { 17244 return string.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/) !== -1; 17245 } 17246 17247 function isSpecialScheme(scheme) { 17248 return specialSchemes[scheme] !== undefined; 17249 } 17250 17251 function isSpecial(url) { 17252 return isSpecialScheme(url.scheme); 17253 } 17254 17255 function defaultPort(scheme) { 17256 return specialSchemes[scheme]; 17257 } 17258 17259 function percentEncode(c) { 17260 let hex = c.toString(16).toUpperCase(); 17261 if (hex.length === 1) { 17262 hex = "0" + hex; 17263 } 17264 17265 return "%" + hex; 17266 } 17267 17268 function utf8PercentEncode(c) { 17269 const buf = new Buffer(c); 17270 17271 let str = ""; 17272 17273 for (let i = 0; i < buf.length; ++i) { 17274 str += percentEncode(buf[i]); 17275 } 17276 17277 return str; 17278 } 17279 17280 function utf8PercentDecode(str) { 17281 const input = new Buffer(str); 17282 const output = []; 17283 for (let i = 0; i < input.length; ++i) { 17284 if (input[i] !== 37) { 17285 output.push(input[i]); 17286 } else if (input[i] === 37 && isASCIIHex(input[i + 1]) && isASCIIHex(input[i + 2])) { 17287 output.push(parseInt(input.slice(i + 1, i + 3).toString(), 16)); 17288 i += 2; 17289 } else { 17290 output.push(input[i]); 17291 } 17292 } 17293 return new Buffer(output).toString(); 17294 } 17295 17296 function isC0ControlPercentEncode(c) { 17297 return c <= 0x1F || c > 0x7E; 17298 } 17299 17300 const extraPathPercentEncodeSet = new Set([32, 34, 35, 60, 62, 63, 96, 123, 125]); 17301 function isPathPercentEncode(c) { 17302 return isC0ControlPercentEncode(c) || extraPathPercentEncodeSet.has(c); 17303 } 17304 17305 const extraUserinfoPercentEncodeSet = 17306 new Set([47, 58, 59, 61, 64, 91, 92, 93, 94, 124]); 17307 function isUserinfoPercentEncode(c) { 17308 return isPathPercentEncode(c) || extraUserinfoPercentEncodeSet.has(c); 17309 } 17310 17311 function percentEncodeChar(c, encodeSetPredicate) { 17312 const cStr = String.fromCodePoint(c); 17313 17314 if (encodeSetPredicate(c)) { 17315 return utf8PercentEncode(cStr); 17316 } 17317 17318 return cStr; 17319 } 17320 17321 function parseIPv4Number(input) { 17322 let R = 10; 17323 17324 if (input.length >= 2 && input.charAt(0) === "0" && input.charAt(1).toLowerCase() === "x") { 17325 input = input.substring(2); 17326 R = 16; 17327 } else if (input.length >= 2 && input.charAt(0) === "0") { 17328 input = input.substring(1); 17329 R = 8; 17330 } 17331 17332 if (input === "") { 17333 return 0; 17334 } 17335 17336 const regex = R === 10 ? /[^0-9]/ : (R === 16 ? /[^0-9A-Fa-f]/ : /[^0-7]/); 17337 if (regex.test(input)) { 17338 return failure; 17339 } 17340 17341 return parseInt(input, R); 17342 } 17343 17344 function parseIPv4(input) { 17345 const parts = input.split("."); 17346 if (parts[parts.length - 1] === "") { 17347 if (parts.length > 1) { 17348 parts.pop(); 17349 } 17350 } 17351 17352 if (parts.length > 4) { 17353 return input; 17354 } 17355 17356 const numbers = []; 17357 for (const part of parts) { 17358 if (part === "") { 17359 return input; 17360 } 17361 const n = parseIPv4Number(part); 17362 if (n === failure) { 17363 return input; 17364 } 17365 17366 numbers.push(n); 17367 } 17368 17369 for (let i = 0; i < numbers.length - 1; ++i) { 17370 if (numbers[i] > 255) { 17371 return failure; 17372 } 17373 } 17374 if (numbers[numbers.length - 1] >= Math.pow(256, 5 - numbers.length)) { 17375 return failure; 17376 } 17377 17378 let ipv4 = numbers.pop(); 17379 let counter = 0; 17380 17381 for (const n of numbers) { 17382 ipv4 += n * Math.pow(256, 3 - counter); 17383 ++counter; 17384 } 17385 17386 return ipv4; 17387 } 17388 17389 function serializeIPv4(address) { 17390 let output = ""; 17391 let n = address; 17392 17393 for (let i = 1; i <= 4; ++i) { 17394 output = String(n % 256) + output; 17395 if (i !== 4) { 17396 output = "." + output; 17397 } 17398 n = Math.floor(n / 256); 17399 } 17400 17401 return output; 17402 } 17403 17404 function parseIPv6(input) { 17405 const address = [0, 0, 0, 0, 0, 0, 0, 0]; 17406 let pieceIndex = 0; 17407 let compress = null; 17408 let pointer = 0; 17409 17410 input = punycode.ucs2.decode(input); 17411 17412 if (input[pointer] === 58) { 17413 if (input[pointer + 1] !== 58) { 17414 return failure; 17415 } 17416 17417 pointer += 2; 17418 ++pieceIndex; 17419 compress = pieceIndex; 17420 } 17421 17422 while (pointer < input.length) { 17423 if (pieceIndex === 8) { 17424 return failure; 17425 } 17426 17427 if (input[pointer] === 58) { 17428 if (compress !== null) { 17429 return failure; 17430 } 17431 ++pointer; 17432 ++pieceIndex; 17433 compress = pieceIndex; 17434 continue; 17435 } 17436 17437 let value = 0; 17438 let length = 0; 17439 17440 while (length < 4 && isASCIIHex(input[pointer])) { 17441 value = value * 0x10 + parseInt(at(input, pointer), 16); 17442 ++pointer; 17443 ++length; 17444 } 17445 17446 if (input[pointer] === 46) { 17447 if (length === 0) { 17448 return failure; 17449 } 17450 17451 pointer -= length; 17452 17453 if (pieceIndex > 6) { 17454 return failure; 17455 } 17456 17457 let numbersSeen = 0; 17458 17459 while (input[pointer] !== undefined) { 17460 let ipv4Piece = null; 17461 17462 if (numbersSeen > 0) { 17463 if (input[pointer] === 46 && numbersSeen < 4) { 17464 ++pointer; 17465 } else { 17466 return failure; 17467 } 17468 } 17469 17470 if (!isASCIIDigit(input[pointer])) { 17471 return failure; 17472 } 17473 17474 while (isASCIIDigit(input[pointer])) { 17475 const number = parseInt(at(input, pointer)); 17476 if (ipv4Piece === null) { 17477 ipv4Piece = number; 17478 } else if (ipv4Piece === 0) { 17479 return failure; 17480 } else { 17481 ipv4Piece = ipv4Piece * 10 + number; 17482 } 17483 if (ipv4Piece > 255) { 17484 return failure; 17485 } 17486 ++pointer; 17487 } 17488 17489 address[pieceIndex] = address[pieceIndex] * 0x100 + ipv4Piece; 17490 17491 ++numbersSeen; 17492 17493 if (numbersSeen === 2 || numbersSeen === 4) { 17494 ++pieceIndex; 17495 } 17496 } 17497 17498 if (numbersSeen !== 4) { 17499 return failure; 17500 } 17501 17502 break; 17503 } else if (input[pointer] === 58) { 17504 ++pointer; 17505 if (input[pointer] === undefined) { 17506 return failure; 17507 } 17508 } else if (input[pointer] !== undefined) { 17509 return failure; 17510 } 17511 17512 address[pieceIndex] = value; 17513 ++pieceIndex; 17514 } 17515 17516 if (compress !== null) { 17517 let swaps = pieceIndex - compress; 17518 pieceIndex = 7; 17519 while (pieceIndex !== 0 && swaps > 0) { 17520 const temp = address[compress + swaps - 1]; 17521 address[compress + swaps - 1] = address[pieceIndex]; 17522 address[pieceIndex] = temp; 17523 --pieceIndex; 17524 --swaps; 17525 } 17526 } else if (compress === null && pieceIndex !== 8) { 17527 return failure; 17528 } 17529 17530 return address; 17531 } 17532 17533 function serializeIPv6(address) { 17534 let output = ""; 17535 const seqResult = findLongestZeroSequence(address); 17536 const compress = seqResult.idx; 17537 let ignore0 = false; 17538 17539 for (let pieceIndex = 0; pieceIndex <= 7; ++pieceIndex) { 17540 if (ignore0 && address[pieceIndex] === 0) { 17541 continue; 17542 } else if (ignore0) { 17543 ignore0 = false; 17544 } 17545 17546 if (compress === pieceIndex) { 17547 const separator = pieceIndex === 0 ? "::" : ":"; 17548 output += separator; 17549 ignore0 = true; 17550 continue; 17551 } 17552 17553 output += address[pieceIndex].toString(16); 17554 17555 if (pieceIndex !== 7) { 17556 output += ":"; 17557 } 17558 } 17559 17560 return output; 17561 } 17562 17563 function parseHost(input, isSpecialArg) { 17564 if (input[0] === "[") { 17565 if (input[input.length - 1] !== "]") { 17566 return failure; 17567 } 17568 17569 return parseIPv6(input.substring(1, input.length - 1)); 17570 } 17571 17572 if (!isSpecialArg) { 17573 return parseOpaqueHost(input); 17574 } 17575 17576 const domain = utf8PercentDecode(input); 17577 const asciiDomain = tr46.toASCII(domain, false, tr46.PROCESSING_OPTIONS.NONTRANSITIONAL, false); 17578 if (asciiDomain === null) { 17579 return failure; 17580 } 17581 17582 if (containsForbiddenHostCodePoint(asciiDomain)) { 17583 return failure; 17584 } 17585 17586 const ipv4Host = parseIPv4(asciiDomain); 17587 if (typeof ipv4Host === "number" || ipv4Host === failure) { 17588 return ipv4Host; 17589 } 17590 17591 return asciiDomain; 17592 } 17593 17594 function parseOpaqueHost(input) { 17595 if (containsForbiddenHostCodePointExcludingPercent(input)) { 17596 return failure; 17597 } 17598 17599 let output = ""; 17600 const decoded = punycode.ucs2.decode(input); 17601 for (let i = 0; i < decoded.length; ++i) { 17602 output += percentEncodeChar(decoded[i], isC0ControlPercentEncode); 17603 } 17604 return output; 17605 } 17606 17607 function findLongestZeroSequence(arr) { 17608 let maxIdx = null; 17609 let maxLen = 1; // only find elements > 1 17610 let currStart = null; 17611 let currLen = 0; 17612 17613 for (let i = 0; i < arr.length; ++i) { 17614 if (arr[i] !== 0) { 17615 if (currLen > maxLen) { 17616 maxIdx = currStart; 17617 maxLen = currLen; 17618 } 17619 17620 currStart = null; 17621 currLen = 0; 17622 } else { 17623 if (currStart === null) { 17624 currStart = i; 17625 } 17626 ++currLen; 17627 } 17628 } 17629 17630 // if trailing zeros 17631 if (currLen > maxLen) { 17632 maxIdx = currStart; 17633 maxLen = currLen; 17634 } 17635 17636 return { 17637 idx: maxIdx, 17638 len: maxLen 17639 }; 17640 } 17641 17642 function serializeHost(host) { 17643 if (typeof host === "number") { 17644 return serializeIPv4(host); 17645 } 17646 17647 // IPv6 serializer 17648 if (host instanceof Array) { 17649 return "[" + serializeIPv6(host) + "]"; 17650 } 17651 17652 return host; 17653 } 17654 17655 function trimControlChars(url) { 17656 return url.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g, ""); 17657 } 17658 17659 function trimTabAndNewline(url) { 17660 return url.replace(/\u0009|\u000A|\u000D/g, ""); 17661 } 17662 17663 function shortenPath(url) { 17664 const path = url.path; 17665 if (path.length === 0) { 17666 return; 17667 } 17668 if (url.scheme === "file" && path.length === 1 && isNormalizedWindowsDriveLetter(path[0])) { 17669 return; 17670 } 17671 17672 path.pop(); 17673 } 17674 17675 function includesCredentials(url) { 17676 return url.username !== "" || url.password !== ""; 17677 } 17678 17679 function cannotHaveAUsernamePasswordPort(url) { 17680 return url.host === null || url.host === "" || url.cannotBeABaseURL || url.scheme === "file"; 17681 } 17682 17683 function isNormalizedWindowsDriveLetter(string) { 17684 return /^[A-Za-z]:$/.test(string); 17685 } 17686 17687 function URLStateMachine(input, base, encodingOverride, url, stateOverride) { 17688 this.pointer = 0; 17689 this.input = input; 17690 this.base = base || null; 17691 this.encodingOverride = encodingOverride || "utf-8"; 17692 this.stateOverride = stateOverride; 17693 this.url = url; 17694 this.failure = false; 17695 this.parseError = false; 17696 17697 if (!this.url) { 17698 this.url = { 17699 scheme: "", 17700 username: "", 17701 password: "", 17702 host: null, 17703 port: null, 17704 path: [], 17705 query: null, 17706 fragment: null, 17707 17708 cannotBeABaseURL: false 17709 }; 17710 17711 const res = trimControlChars(this.input); 17712 if (res !== this.input) { 17713 this.parseError = true; 17714 } 17715 this.input = res; 17716 } 17717 17718 const res = trimTabAndNewline(this.input); 17719 if (res !== this.input) { 17720 this.parseError = true; 17721 } 17722 this.input = res; 17723 17724 this.state = stateOverride || "scheme start"; 17725 17726 this.buffer = ""; 17727 this.atFlag = false; 17728 this.arrFlag = false; 17729 this.passwordTokenSeenFlag = false; 17730 17731 this.input = punycode.ucs2.decode(this.input); 17732 17733 for (; this.pointer <= this.input.length; ++this.pointer) { 17734 const c = this.input[this.pointer]; 17735 const cStr = isNaN(c) ? undefined : String.fromCodePoint(c); 17736 17737 // exec state machine 17738 const ret = this["parse " + this.state](c, cStr); 17739 if (!ret) { 17740 break; // terminate algorithm 17741 } else if (ret === failure) { 17742 this.failure = true; 17743 break; 17744 } 17745 } 17746 } 17747 17748 URLStateMachine.prototype["parse scheme start"] = function parseSchemeStart(c, cStr) { 17749 if (isASCIIAlpha(c)) { 17750 this.buffer += cStr.toLowerCase(); 17751 this.state = "scheme"; 17752 } else if (!this.stateOverride) { 17753 this.state = "no scheme"; 17754 --this.pointer; 17755 } else { 17756 this.parseError = true; 17757 return failure; 17758 } 17759 17760 return true; 17761 }; 17762 17763 URLStateMachine.prototype["parse scheme"] = function parseScheme(c, cStr) { 17764 if (isASCIIAlphanumeric(c) || c === 43 || c === 45 || c === 46) { 17765 this.buffer += cStr.toLowerCase(); 17766 } else if (c === 58) { 17767 if (this.stateOverride) { 17768 if (isSpecial(this.url) && !isSpecialScheme(this.buffer)) { 17769 return false; 17770 } 17771 17772 if (!isSpecial(this.url) && isSpecialScheme(this.buffer)) { 17773 return false; 17774 } 17775 17776 if ((includesCredentials(this.url) || this.url.port !== null) && this.buffer === "file") { 17777 return false; 17778 } 17779 17780 if (this.url.scheme === "file" && (this.url.host === "" || this.url.host === null)) { 17781 return false; 17782 } 17783 } 17784 this.url.scheme = this.buffer; 17785 this.buffer = ""; 17786 if (this.stateOverride) { 17787 return false; 17788 } 17789 if (this.url.scheme === "file") { 17790 if (this.input[this.pointer + 1] !== 47 || this.input[this.pointer + 2] !== 47) { 17791 this.parseError = true; 17792 } 17793 this.state = "file"; 17794 } else if (isSpecial(this.url) && this.base !== null && this.base.scheme === this.url.scheme) { 17795 this.state = "special relative or authority"; 17796 } else if (isSpecial(this.url)) { 17797 this.state = "special authority slashes"; 17798 } else if (this.input[this.pointer + 1] === 47) { 17799 this.state = "path or authority"; 17800 ++this.pointer; 17801 } else { 17802 this.url.cannotBeABaseURL = true; 17803 this.url.path.push(""); 17804 this.state = "cannot-be-a-base-URL path"; 17805 } 17806 } else if (!this.stateOverride) { 17807 this.buffer = ""; 17808 this.state = "no scheme"; 17809 this.pointer = -1; 17810 } else { 17811 this.parseError = true; 17812 return failure; 17813 } 17814 17815 return true; 17816 }; 17817 17818 URLStateMachine.prototype["parse no scheme"] = function parseNoScheme(c) { 17819 if (this.base === null || (this.base.cannotBeABaseURL && c !== 35)) { 17820 return failure; 17821 } else if (this.base.cannotBeABaseURL && c === 35) { 17822 this.url.scheme = this.base.scheme; 17823 this.url.path = this.base.path.slice(); 17824 this.url.query = this.base.query; 17825 this.url.fragment = ""; 17826 this.url.cannotBeABaseURL = true; 17827 this.state = "fragment"; 17828 } else if (this.base.scheme === "file") { 17829 this.state = "file"; 17830 --this.pointer; 17831 } else { 17832 this.state = "relative"; 17833 --this.pointer; 17834 } 17835 17836 return true; 17837 }; 17838 17839 URLStateMachine.prototype["parse special relative or authority"] = function parseSpecialRelativeOrAuthority(c) { 17840 if (c === 47 && this.input[this.pointer + 1] === 47) { 17841 this.state = "special authority ignore slashes"; 17842 ++this.pointer; 17843 } else { 17844 this.parseError = true; 17845 this.state = "relative"; 17846 --this.pointer; 17847 } 17848 17849 return true; 17850 }; 17851 17852 URLStateMachine.prototype["parse path or authority"] = function parsePathOrAuthority(c) { 17853 if (c === 47) { 17854 this.state = "authority"; 17855 } else { 17856 this.state = "path"; 17857 --this.pointer; 17858 } 17859 17860 return true; 17861 }; 17862 17863 URLStateMachine.prototype["parse relative"] = function parseRelative(c) { 17864 this.url.scheme = this.base.scheme; 17865 if (isNaN(c)) { 17866 this.url.username = this.base.username; 17867 this.url.password = this.base.password; 17868 this.url.host = this.base.host; 17869 this.url.port = this.base.port; 17870 this.url.path = this.base.path.slice(); 17871 this.url.query = this.base.query; 17872 } else if (c === 47) { 17873 this.state = "relative slash"; 17874 } else if (c === 63) { 17875 this.url.username = this.base.username; 17876 this.url.password = this.base.password; 17877 this.url.host = this.base.host; 17878 this.url.port = this.base.port; 17879 this.url.path = this.base.path.slice(); 17880 this.url.query = ""; 17881 this.state = "query"; 17882 } else if (c === 35) { 17883 this.url.username = this.base.username; 17884 this.url.password = this.base.password; 17885 this.url.host = this.base.host; 17886 this.url.port = this.base.port; 17887 this.url.path = this.base.path.slice(); 17888 this.url.query = this.base.query; 17889 this.url.fragment = ""; 17890 this.state = "fragment"; 17891 } else if (isSpecial(this.url) && c === 92) { 17892 this.parseError = true; 17893 this.state = "relative slash"; 17894 } else { 17895 this.url.username = this.base.username; 17896 this.url.password = this.base.password; 17897 this.url.host = this.base.host; 17898 this.url.port = this.base.port; 17899 this.url.path = this.base.path.slice(0, this.base.path.length - 1); 17900 17901 this.state = "path"; 17902 --this.pointer; 17903 } 17904 17905 return true; 17906 }; 17907 17908 URLStateMachine.prototype["parse relative slash"] = function parseRelativeSlash(c) { 17909 if (isSpecial(this.url) && (c === 47 || c === 92)) { 17910 if (c === 92) { 17911 this.parseError = true; 17912 } 17913 this.state = "special authority ignore slashes"; 17914 } else if (c === 47) { 17915 this.state = "authority"; 17916 } else { 17917 this.url.username = this.base.username; 17918 this.url.password = this.base.password; 17919 this.url.host = this.base.host; 17920 this.url.port = this.base.port; 17921 this.state = "path"; 17922 --this.pointer; 17923 } 17924 17925 return true; 17926 }; 17927 17928 URLStateMachine.prototype["parse special authority slashes"] = function parseSpecialAuthoritySlashes(c) { 17929 if (c === 47 && this.input[this.pointer + 1] === 47) { 17930 this.state = "special authority ignore slashes"; 17931 ++this.pointer; 17932 } else { 17933 this.parseError = true; 17934 this.state = "special authority ignore slashes"; 17935 --this.pointer; 17936 } 17937 17938 return true; 17939 }; 17940 17941 URLStateMachine.prototype["parse special authority ignore slashes"] = function parseSpecialAuthorityIgnoreSlashes(c) { 17942 if (c !== 47 && c !== 92) { 17943 this.state = "authority"; 17944 --this.pointer; 17945 } else { 17946 this.parseError = true; 17947 } 17948 17949 return true; 17950 }; 17951 17952 URLStateMachine.prototype["parse authority"] = function parseAuthority(c, cStr) { 17953 if (c === 64) { 17954 this.parseError = true; 17955 if (this.atFlag) { 17956 this.buffer = "%40" + this.buffer; 17957 } 17958 this.atFlag = true; 17959 17960 // careful, this is based on buffer and has its own pointer (this.pointer != pointer) and inner chars 17961 const len = countSymbols(this.buffer); 17962 for (let pointer = 0; pointer < len; ++pointer) { 17963 const codePoint = this.buffer.codePointAt(pointer); 17964 17965 if (codePoint === 58 && !this.passwordTokenSeenFlag) { 17966 this.passwordTokenSeenFlag = true; 17967 continue; 17968 } 17969 const encodedCodePoints = percentEncodeChar(codePoint, isUserinfoPercentEncode); 17970 if (this.passwordTokenSeenFlag) { 17971 this.url.password += encodedCodePoints; 17972 } else { 17973 this.url.username += encodedCodePoints; 17974 } 17975 } 17976 this.buffer = ""; 17977 } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || 17978 (isSpecial(this.url) && c === 92)) { 17979 if (this.atFlag && this.buffer === "") { 17980 this.parseError = true; 17981 return failure; 17982 } 17983 this.pointer -= countSymbols(this.buffer) + 1; 17984 this.buffer = ""; 17985 this.state = "host"; 17986 } else { 17987 this.buffer += cStr; 17988 } 17989 17990 return true; 17991 }; 17992 17993 URLStateMachine.prototype["parse hostname"] = 17994 URLStateMachine.prototype["parse host"] = function parseHostName(c, cStr) { 17995 if (this.stateOverride && this.url.scheme === "file") { 17996 --this.pointer; 17997 this.state = "file host"; 17998 } else if (c === 58 && !this.arrFlag) { 17999 if (this.buffer === "") { 18000 this.parseError = true; 18001 return failure; 18002 } 18003 18004 const host = parseHost(this.buffer, isSpecial(this.url)); 18005 if (host === failure) { 18006 return failure; 18007 } 18008 18009 this.url.host = host; 18010 this.buffer = ""; 18011 this.state = "port"; 18012 if (this.stateOverride === "hostname") { 18013 return false; 18014 } 18015 } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || 18016 (isSpecial(this.url) && c === 92)) { 18017 --this.pointer; 18018 if (isSpecial(this.url) && this.buffer === "") { 18019 this.parseError = true; 18020 return failure; 18021 } else if (this.stateOverride && this.buffer === "" && 18022 (includesCredentials(this.url) || this.url.port !== null)) { 18023 this.parseError = true; 18024 return false; 18025 } 18026 18027 const host = parseHost(this.buffer, isSpecial(this.url)); 18028 if (host === failure) { 18029 return failure; 18030 } 18031 18032 this.url.host = host; 18033 this.buffer = ""; 18034 this.state = "path start"; 18035 if (this.stateOverride) { 18036 return false; 18037 } 18038 } else { 18039 if (c === 91) { 18040 this.arrFlag = true; 18041 } else if (c === 93) { 18042 this.arrFlag = false; 18043 } 18044 this.buffer += cStr; 18045 } 18046 18047 return true; 18048 }; 18049 18050 URLStateMachine.prototype["parse port"] = function parsePort(c, cStr) { 18051 if (isASCIIDigit(c)) { 18052 this.buffer += cStr; 18053 } else if (isNaN(c) || c === 47 || c === 63 || c === 35 || 18054 (isSpecial(this.url) && c === 92) || 18055 this.stateOverride) { 18056 if (this.buffer !== "") { 18057 const port = parseInt(this.buffer); 18058 if (port > Math.pow(2, 16) - 1) { 18059 this.parseError = true; 18060 return failure; 18061 } 18062 this.url.port = port === defaultPort(this.url.scheme) ? null : port; 18063 this.buffer = ""; 18064 } 18065 if (this.stateOverride) { 18066 return false; 18067 } 18068 this.state = "path start"; 18069 --this.pointer; 18070 } else { 18071 this.parseError = true; 18072 return failure; 18073 } 18074 18075 return true; 18076 }; 18077 18078 const fileOtherwiseCodePoints = new Set([47, 92, 63, 35]); 18079 18080 URLStateMachine.prototype["parse file"] = function parseFile(c) { 18081 this.url.scheme = "file"; 18082 18083 if (c === 47 || c === 92) { 18084 if (c === 92) { 18085 this.parseError = true; 18086 } 18087 this.state = "file slash"; 18088 } else if (this.base !== null && this.base.scheme === "file") { 18089 if (isNaN(c)) { 18090 this.url.host = this.base.host; 18091 this.url.path = this.base.path.slice(); 18092 this.url.query = this.base.query; 18093 } else if (c === 63) { 18094 this.url.host = this.base.host; 18095 this.url.path = this.base.path.slice(); 18096 this.url.query = ""; 18097 this.state = "query"; 18098 } else if (c === 35) { 18099 this.url.host = this.base.host; 18100 this.url.path = this.base.path.slice(); 18101 this.url.query = this.base.query; 18102 this.url.fragment = ""; 18103 this.state = "fragment"; 18104 } else { 18105 if (this.input.length - this.pointer - 1 === 0 || // remaining consists of 0 code points 18106 !isWindowsDriveLetterCodePoints(c, this.input[this.pointer + 1]) || 18107 (this.input.length - this.pointer - 1 >= 2 && // remaining has at least 2 code points 18108 !fileOtherwiseCodePoints.has(this.input[this.pointer + 2]))) { 18109 this.url.host = this.base.host; 18110 this.url.path = this.base.path.slice(); 18111 shortenPath(this.url); 18112 } else { 18113 this.parseError = true; 18114 } 18115 18116 this.state = "path"; 18117 --this.pointer; 18118 } 18119 } else { 18120 this.state = "path"; 18121 --this.pointer; 18122 } 18123 18124 return true; 18125 }; 18126 18127 URLStateMachine.prototype["parse file slash"] = function parseFileSlash(c) { 18128 if (c === 47 || c === 92) { 18129 if (c === 92) { 18130 this.parseError = true; 18131 } 18132 this.state = "file host"; 18133 } else { 18134 if (this.base !== null && this.base.scheme === "file") { 18135 if (isNormalizedWindowsDriveLetterString(this.base.path[0])) { 18136 this.url.path.push(this.base.path[0]); 18137 } else { 18138 this.url.host = this.base.host; 18139 } 18140 } 18141 this.state = "path"; 18142 --this.pointer; 18143 } 18144 18145 return true; 18146 }; 18147 18148 URLStateMachine.prototype["parse file host"] = function parseFileHost(c, cStr) { 18149 if (isNaN(c) || c === 47 || c === 92 || c === 63 || c === 35) { 18150 --this.pointer; 18151 if (!this.stateOverride && isWindowsDriveLetterString(this.buffer)) { 18152 this.parseError = true; 18153 this.state = "path"; 18154 } else if (this.buffer === "") { 18155 this.url.host = ""; 18156 if (this.stateOverride) { 18157 return false; 18158 } 18159 this.state = "path start"; 18160 } else { 18161 let host = parseHost(this.buffer, isSpecial(this.url)); 18162 if (host === failure) { 18163 return failure; 18164 } 18165 if (host === "localhost") { 18166 host = ""; 18167 } 18168 this.url.host = host; 18169 18170 if (this.stateOverride) { 18171 return false; 18172 } 18173 18174 this.buffer = ""; 18175 this.state = "path start"; 18176 } 18177 } else { 18178 this.buffer += cStr; 18179 } 18180 18181 return true; 18182 }; 18183 18184 URLStateMachine.prototype["parse path start"] = function parsePathStart(c) { 18185 if (isSpecial(this.url)) { 18186 if (c === 92) { 18187 this.parseError = true; 18188 } 18189 this.state = "path"; 18190 18191 if (c !== 47 && c !== 92) { 18192 --this.pointer; 18193 } 18194 } else if (!this.stateOverride && c === 63) { 18195 this.url.query = ""; 18196 this.state = "query"; 18197 } else if (!this.stateOverride && c === 35) { 18198 this.url.fragment = ""; 18199 this.state = "fragment"; 18200 } else if (c !== undefined) { 18201 this.state = "path"; 18202 if (c !== 47) { 18203 --this.pointer; 18204 } 18205 } 18206 18207 return true; 18208 }; 18209 18210 URLStateMachine.prototype["parse path"] = function parsePath(c) { 18211 if (isNaN(c) || c === 47 || (isSpecial(this.url) && c === 92) || 18212 (!this.stateOverride && (c === 63 || c === 35))) { 18213 if (isSpecial(this.url) && c === 92) { 18214 this.parseError = true; 18215 } 18216 18217 if (isDoubleDot(this.buffer)) { 18218 shortenPath(this.url); 18219 if (c !== 47 && !(isSpecial(this.url) && c === 92)) { 18220 this.url.path.push(""); 18221 } 18222 } else if (isSingleDot(this.buffer) && c !== 47 && 18223 !(isSpecial(this.url) && c === 92)) { 18224 this.url.path.push(""); 18225 } else if (!isSingleDot(this.buffer)) { 18226 if (this.url.scheme === "file" && this.url.path.length === 0 && isWindowsDriveLetterString(this.buffer)) { 18227 if (this.url.host !== "" && this.url.host !== null) { 18228 this.parseError = true; 18229 this.url.host = ""; 18230 } 18231 this.buffer = this.buffer[0] + ":"; 18232 } 18233 this.url.path.push(this.buffer); 18234 } 18235 this.buffer = ""; 18236 if (this.url.scheme === "file" && (c === undefined || c === 63 || c === 35)) { 18237 while (this.url.path.length > 1 && this.url.path[0] === "") { 18238 this.parseError = true; 18239 this.url.path.shift(); 18240 } 18241 } 18242 if (c === 63) { 18243 this.url.query = ""; 18244 this.state = "query"; 18245 } 18246 if (c === 35) { 18247 this.url.fragment = ""; 18248 this.state = "fragment"; 18249 } 18250 } else { 18251 // TODO: If c is not a URL code point and not "%", parse error. 18252 18253 if (c === 37 && 18254 (!isASCIIHex(this.input[this.pointer + 1]) || 18255 !isASCIIHex(this.input[this.pointer + 2]))) { 18256 this.parseError = true; 18257 } 18258 18259 this.buffer += percentEncodeChar(c, isPathPercentEncode); 18260 } 18261 18262 return true; 18263 }; 18264 18265 URLStateMachine.prototype["parse cannot-be-a-base-URL path"] = function parseCannotBeABaseURLPath(c) { 18266 if (c === 63) { 18267 this.url.query = ""; 18268 this.state = "query"; 18269 } else if (c === 35) { 18270 this.url.fragment = ""; 18271 this.state = "fragment"; 18272 } else { 18273 // TODO: Add: not a URL code point 18274 if (!isNaN(c) && c !== 37) { 18275 this.parseError = true; 18276 } 18277 18278 if (c === 37 && 18279 (!isASCIIHex(this.input[this.pointer + 1]) || 18280 !isASCIIHex(this.input[this.pointer + 2]))) { 18281 this.parseError = true; 18282 } 18283 18284 if (!isNaN(c)) { 18285 this.url.path[0] = this.url.path[0] + percentEncodeChar(c, isC0ControlPercentEncode); 18286 } 18287 } 18288 18289 return true; 18290 }; 18291 18292 URLStateMachine.prototype["parse query"] = function parseQuery(c, cStr) { 18293 if (isNaN(c) || (!this.stateOverride && c === 35)) { 18294 if (!isSpecial(this.url) || this.url.scheme === "ws" || this.url.scheme === "wss") { 18295 this.encodingOverride = "utf-8"; 18296 } 18297 18298 const buffer = new Buffer(this.buffer); // TODO: Use encoding override instead 18299 for (let i = 0; i < buffer.length; ++i) { 18300 if (buffer[i] < 0x21 || buffer[i] > 0x7E || buffer[i] === 0x22 || buffer[i] === 0x23 || 18301 buffer[i] === 0x3C || buffer[i] === 0x3E) { 18302 this.url.query += percentEncode(buffer[i]); 18303 } else { 18304 this.url.query += String.fromCodePoint(buffer[i]); 18305 } 18306 } 18307 18308 this.buffer = ""; 18309 if (c === 35) { 18310 this.url.fragment = ""; 18311 this.state = "fragment"; 18312 } 18313 } else { 18314 // TODO: If c is not a URL code point and not "%", parse error. 18315 if (c === 37 && 18316 (!isASCIIHex(this.input[this.pointer + 1]) || 18317 !isASCIIHex(this.input[this.pointer + 2]))) { 18318 this.parseError = true; 18319 } 18320 18321 this.buffer += cStr; 18322 } 18323 18324 return true; 18325 }; 18326 18327 URLStateMachine.prototype["parse fragment"] = function parseFragment(c) { 18328 if (isNaN(c)) { // do nothing 18329 } else if (c === 0x0) { 18330 this.parseError = true; 18331 } else { 18332 // TODO: If c is not a URL code point and not "%", parse error. 18333 if (c === 37 && 18334 (!isASCIIHex(this.input[this.pointer + 1]) || 18335 !isASCIIHex(this.input[this.pointer + 2]))) { 18336 this.parseError = true; 18337 } 18338 18339 this.url.fragment += percentEncodeChar(c, isC0ControlPercentEncode); 18340 } 18341 18342 return true; 18343 }; 18344 18345 function serializeURL(url, excludeFragment) { 18346 let output = url.scheme + ":"; 18347 if (url.host !== null) { 18348 output += "//"; 18349 18350 if (url.username !== "" || url.password !== "") { 18351 output += url.username; 18352 if (url.password !== "") { 18353 output += ":" + url.password; 18354 } 18355 output += "@"; 18356 } 18357 18358 output += serializeHost(url.host); 18359 18360 if (url.port !== null) { 18361 output += ":" + url.port; 18362 } 18363 } else if (url.host === null && url.scheme === "file") { 18364 output += "//"; 18365 } 18366 18367 if (url.cannotBeABaseURL) { 18368 output += url.path[0]; 18369 } else { 18370 for (const string of url.path) { 18371 output += "/" + string; 18372 } 18373 } 18374 18375 if (url.query !== null) { 18376 output += "?" + url.query; 18377 } 18378 18379 if (!excludeFragment && url.fragment !== null) { 18380 output += "#" + url.fragment; 18381 } 18382 18383 return output; 18384 } 18385 18386 function serializeOrigin(tuple) { 18387 let result = tuple.scheme + "://"; 18388 result += serializeHost(tuple.host); 18389 18390 if (tuple.port !== null) { 18391 result += ":" + tuple.port; 18392 } 18393 18394 return result; 18395 } 18396 18397 module.exports.serializeURL = serializeURL; 18398 18399 module.exports.serializeURLOrigin = function (url) { 18400 // https://url.spec.whatwg.org/#concept-url-origin 18401 switch (url.scheme) { 18402 case "blob": 18403 try { 18404 return module.exports.serializeURLOrigin(module.exports.parseURL(url.path[0])); 18405 } catch (e) { 18406 // serializing an opaque origin returns "null" 18407 return "null"; 18408 } 18409 case "ftp": 18410 case "gopher": 18411 case "http": 18412 case "https": 18413 case "ws": 18414 case "wss": 18415 return serializeOrigin({ 18416 scheme: url.scheme, 18417 host: url.host, 18418 port: url.port 18419 }); 18420 case "file": 18421 // spec says "exercise to the reader", chrome says "file://" 18422 return "file://"; 18423 default: 18424 // serializing an opaque origin returns "null" 18425 return "null"; 18426 } 18427 }; 18428 18429 module.exports.basicURLParse = function (input, options) { 18430 if (options === undefined) { 18431 options = {}; 18432 } 18433 18434 const usm = new URLStateMachine(input, options.baseURL, options.encodingOverride, options.url, options.stateOverride); 18435 if (usm.failure) { 18436 return "failure"; 18437 } 18438 18439 return usm.url; 18440 }; 18441 18442 module.exports.setTheUsername = function (url, username) { 18443 url.username = ""; 18444 const decoded = punycode.ucs2.decode(username); 18445 for (let i = 0; i < decoded.length; ++i) { 18446 url.username += percentEncodeChar(decoded[i], isUserinfoPercentEncode); 18447 } 18448 }; 18449 18450 module.exports.setThePassword = function (url, password) { 18451 url.password = ""; 18452 const decoded = punycode.ucs2.decode(password); 18453 for (let i = 0; i < decoded.length; ++i) { 18454 url.password += percentEncodeChar(decoded[i], isUserinfoPercentEncode); 18455 } 18456 }; 18457 18458 module.exports.serializeHost = serializeHost; 18459 18460 module.exports.cannotHaveAUsernamePasswordPort = cannotHaveAUsernamePasswordPort; 18461 18462 module.exports.serializeInteger = function (integer) { 18463 return String(integer); 18464 }; 18465 18466 module.exports.parseURL = function (input, options) { 18467 if (options === undefined) { 18468 options = {}; 18469 } 18470 18471 // We don't handle blobs, so this just delegates: 18472 return module.exports.basicURLParse(input, { baseURL: options.baseURL, encodingOverride: options.encodingOverride }); 18473 }; 18474 18475 18476 /***/ }), 18477 18478 /***/ 3185: 18479 /***/ ((module) => { 18480 18481 18482 18483 module.exports.mixin = function mixin(target, source) { 18484 const keys = Object.getOwnPropertyNames(source); 18485 for (let i = 0; i < keys.length; ++i) { 18486 Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i])); 18487 } 18488 }; 18489 18490 module.exports.wrapperSymbol = Symbol("wrapper"); 18491 module.exports.implSymbol = Symbol("impl"); 18492 18493 module.exports.wrapperForImpl = function (impl) { 18494 return impl[module.exports.wrapperSymbol]; 18495 }; 18496 18497 module.exports.implForWrapper = function (wrapper) { 18498 return wrapper[module.exports.implSymbol]; 18499 }; 18500 18501 18502 18503 /***/ }), 18504 18505 /***/ 2940: 18506 /***/ ((module) => { 18507 18508 // Returns a wrapper function that returns a wrapped callback 18509 // The wrapper function should do some stuff, and return a 18510 // presumably different callback function. 18511 // This makes sure that own properties are retained, so that 18512 // decorations and such are not lost along the way. 18513 module.exports = wrappy 18514 function wrappy (fn, cb) { 18515 if (fn && cb) return wrappy(fn)(cb) 18516 18517 if (typeof fn !== 'function') 18518 throw new TypeError('need wrapper function') 18519 18520 Object.keys(fn).forEach(function (k) { 18521 wrapper[k] = fn[k] 18522 }) 18523 18524 return wrapper 18525 18526 function wrapper() { 18527 var args = new Array(arguments.length) 18528 for (var i = 0; i < args.length; i++) { 18529 args[i] = arguments[i] 18530 } 18531 var ret = fn.apply(this, args) 18532 var cb = args[args.length-1] 18533 if (typeof ret === 'function' && ret !== cb) { 18534 Object.keys(cb).forEach(function (k) { 18535 ret[k] = cb[k] 18536 }) 18537 } 18538 return ret 18539 } 18540 } 18541 18542 18543 /***/ }), 18544 18545 /***/ 2877: 18546 /***/ ((module) => { 18547 18548 module.exports = eval("require")("encoding"); 18549 18550 18551 /***/ }), 18552 18553 /***/ 9491: 18554 /***/ ((module) => { 18555 18556 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("assert"); 18557 18558 /***/ }), 18559 18560 /***/ 4300: 18561 /***/ ((module) => { 18562 18563 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("buffer"); 18564 18565 /***/ }), 18566 18567 /***/ 2081: 18568 /***/ ((module) => { 18569 18570 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("child_process"); 18571 18572 /***/ }), 18573 18574 /***/ 6113: 18575 /***/ ((module) => { 18576 18577 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("crypto"); 18578 18579 /***/ }), 18580 18581 /***/ 2361: 18582 /***/ ((module) => { 18583 18584 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("events"); 18585 18586 /***/ }), 18587 18588 /***/ 7147: 18589 /***/ ((module) => { 18590 18591 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("fs"); 18592 18593 /***/ }), 18594 18595 /***/ 3685: 18596 /***/ ((module) => { 18597 18598 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("http"); 18599 18600 /***/ }), 18601 18602 /***/ 5158: 18603 /***/ ((module) => { 18604 18605 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("http2"); 18606 18607 /***/ }), 18608 18609 /***/ 5687: 18610 /***/ ((module) => { 18611 18612 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("https"); 18613 18614 /***/ }), 18615 18616 /***/ 1808: 18617 /***/ ((module) => { 18618 18619 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("net"); 18620 18621 /***/ }), 18622 18623 /***/ 2037: 18624 /***/ ((module) => { 18625 18626 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("os"); 18627 18628 /***/ }), 18629 18630 /***/ 1017: 18631 /***/ ((module) => { 18632 18633 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("path"); 18634 18635 /***/ }), 18636 18637 /***/ 5477: 18638 /***/ ((module) => { 18639 18640 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("punycode"); 18641 18642 /***/ }), 18643 18644 /***/ 2781: 18645 /***/ ((module) => { 18646 18647 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("stream"); 18648 18649 /***/ }), 18650 18651 /***/ 1576: 18652 /***/ ((module) => { 18653 18654 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("string_decoder"); 18655 18656 /***/ }), 18657 18658 /***/ 9512: 18659 /***/ ((module) => { 18660 18661 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("timers"); 18662 18663 /***/ }), 18664 18665 /***/ 4404: 18666 /***/ ((module) => { 18667 18668 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("tls"); 18669 18670 /***/ }), 18671 18672 /***/ 7310: 18673 /***/ ((module) => { 18674 18675 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("url"); 18676 18677 /***/ }), 18678 18679 /***/ 3837: 18680 /***/ ((module) => { 18681 18682 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("util"); 18683 18684 /***/ }), 18685 18686 /***/ 9796: 18687 /***/ ((module) => { 18688 18689 module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("zlib"); 18690 18691 /***/ }), 18692 18693 /***/ 2020: 18694 /***/ ((module) => { 18695 18696 module.exports = JSON.parse('[[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"],[[47,47],"disallowed_STD3_valid"],[[48,57],"valid"],[[58,64],"disallowed_STD3_valid"],[[65,65],"mapped",[97]],[[66,66],"mapped",[98]],[[67,67],"mapped",[99]],[[68,68],"mapped",[100]],[[69,69],"mapped",[101]],[[70,70],"mapped",[102]],[[71,71],"mapped",[103]],[[72,72],"mapped",[104]],[[73,73],"mapped",[105]],[[74,74],"mapped",[106]],[[75,75],"mapped",[107]],[[76,76],"mapped",[108]],[[77,77],"mapped",[109]],[[78,78],"mapped",[110]],[[79,79],"mapped",[111]],[[80,80],"mapped",[112]],[[81,81],"mapped",[113]],[[82,82],"mapped",[114]],[[83,83],"mapped",[115]],[[84,84],"mapped",[116]],[[85,85],"mapped",[117]],[[86,86],"mapped",[118]],[[87,87],"mapped",[119]],[[88,88],"mapped",[120]],[[89,89],"mapped",[121]],[[90,90],"mapped",[122]],[[91,96],"disallowed_STD3_valid"],[[97,122],"valid"],[[123,127],"disallowed_STD3_valid"],[[128,159],"disallowed"],[[160,160],"disallowed_STD3_mapped",[32]],[[161,167],"valid",[],"NV8"],[[168,168],"disallowed_STD3_mapped",[32,776]],[[169,169],"valid",[],"NV8"],[[170,170],"mapped",[97]],[[171,172],"valid",[],"NV8"],[[173,173],"ignored"],[[174,174],"valid",[],"NV8"],[[175,175],"disallowed_STD3_mapped",[32,772]],[[176,177],"valid",[],"NV8"],[[178,178],"mapped",[50]],[[179,179],"mapped",[51]],[[180,180],"disallowed_STD3_mapped",[32,769]],[[181,181],"mapped",[956]],[[182,182],"valid",[],"NV8"],[[183,183],"valid"],[[184,184],"disallowed_STD3_mapped",[32,807]],[[185,185],"mapped",[49]],[[186,186],"mapped",[111]],[[187,187],"valid",[],"NV8"],[[188,188],"mapped",[49,8260,52]],[[189,189],"mapped",[49,8260,50]],[[190,190],"mapped",[51,8260,52]],[[191,191],"valid",[],"NV8"],[[192,192],"mapped",[224]],[[193,193],"mapped",[225]],[[194,194],"mapped",[226]],[[195,195],"mapped",[227]],[[196,196],"mapped",[228]],[[197,197],"mapped",[229]],[[198,198],"mapped",[230]],[[199,199],"mapped",[231]],[[200,200],"mapped",[232]],[[201,201],"mapped",[233]],[[202,202],"mapped",[234]],[[203,203],"mapped",[235]],[[204,204],"mapped",[236]],[[205,205],"mapped",[237]],[[206,206],"mapped",[238]],[[207,207],"mapped",[239]],[[208,208],"mapped",[240]],[[209,209],"mapped",[241]],[[210,210],"mapped",[242]],[[211,211],"mapped",[243]],[[212,212],"mapped",[244]],[[213,213],"mapped",[245]],[[214,214],"mapped",[246]],[[215,215],"valid",[],"NV8"],[[216,216],"mapped",[248]],[[217,217],"mapped",[249]],[[218,218],"mapped",[250]],[[219,219],"mapped",[251]],[[220,220],"mapped",[252]],[[221,221],"mapped",[253]],[[222,222],"mapped",[254]],[[223,223],"deviation",[115,115]],[[224,246],"valid"],[[247,247],"valid",[],"NV8"],[[248,255],"valid"],[[256,256],"mapped",[257]],[[257,257],"valid"],[[258,258],"mapped",[259]],[[259,259],"valid"],[[260,260],"mapped",[261]],[[261,261],"valid"],[[262,262],"mapped",[263]],[[263,263],"valid"],[[264,264],"mapped",[265]],[[265,265],"valid"],[[266,266],"mapped",[267]],[[267,267],"valid"],[[268,268],"mapped",[269]],[[269,269],"valid"],[[270,270],"mapped",[271]],[[271,271],"valid"],[[272,272],"mapped",[273]],[[273,273],"valid"],[[274,274],"mapped",[275]],[[275,275],"valid"],[[276,276],"mapped",[277]],[[277,277],"valid"],[[278,278],"mapped",[279]],[[279,279],"valid"],[[280,280],"mapped",[281]],[[281,281],"valid"],[[282,282],"mapped",[283]],[[283,283],"valid"],[[284,284],"mapped",[285]],[[285,285],"valid"],[[286,286],"mapped",[287]],[[287,287],"valid"],[[288,288],"mapped",[289]],[[289,289],"valid"],[[290,290],"mapped",[291]],[[291,291],"valid"],[[292,292],"mapped",[293]],[[293,293],"valid"],[[294,294],"mapped",[295]],[[295,295],"valid"],[[296,296],"mapped",[297]],[[297,297],"valid"],[[298,298],"mapped",[299]],[[299,299],"valid"],[[300,300],"mapped",[301]],[[301,301],"valid"],[[302,302],"mapped",[303]],[[303,303],"valid"],[[304,304],"mapped",[105,775]],[[305,305],"valid"],[[306,307],"mapped",[105,106]],[[308,308],"mapped",[309]],[[309,309],"valid"],[[310,310],"mapped",[311]],[[311,312],"valid"],[[313,313],"mapped",[314]],[[314,314],"valid"],[[315,315],"mapped",[316]],[[316,316],"valid"],[[317,317],"mapped",[318]],[[318,318],"valid"],[[319,320],"mapped",[108,183]],[[321,321],"mapped",[322]],[[322,322],"valid"],[[323,323],"mapped",[324]],[[324,324],"valid"],[[325,325],"mapped",[326]],[[326,326],"valid"],[[327,327],"mapped",[328]],[[328,328],"valid"],[[329,329],"mapped",[700,110]],[[330,330],"mapped",[331]],[[331,331],"valid"],[[332,332],"mapped",[333]],[[333,333],"valid"],[[334,334],"mapped",[335]],[[335,335],"valid"],[[336,336],"mapped",[337]],[[337,337],"valid"],[[338,338],"mapped",[339]],[[339,339],"valid"],[[340,340],"mapped",[341]],[[341,341],"valid"],[[342,342],"mapped",[343]],[[343,343],"valid"],[[344,344],"mapped",[345]],[[345,345],"valid"],[[346,346],"mapped",[347]],[[347,347],"valid"],[[348,348],"mapped",[349]],[[349,349],"valid"],[[350,350],"mapped",[351]],[[351,351],"valid"],[[352,352],"mapped",[353]],[[353,353],"valid"],[[354,354],"mapped",[355]],[[355,355],"valid"],[[356,356],"mapped",[357]],[[357,357],"valid"],[[358,358],"mapped",[359]],[[359,359],"valid"],[[360,360],"mapped",[361]],[[361,361],"valid"],[[362,362],"mapped",[363]],[[363,363],"valid"],[[364,364],"mapped",[365]],[[365,365],"valid"],[[366,366],"mapped",[367]],[[367,367],"valid"],[[368,368],"mapped",[369]],[[369,369],"valid"],[[370,370],"mapped",[371]],[[371,371],"valid"],[[372,372],"mapped",[373]],[[373,373],"valid"],[[374,374],"mapped",[375]],[[375,375],"valid"],[[376,376],"mapped",[255]],[[377,377],"mapped",[378]],[[378,378],"valid"],[[379,379],"mapped",[380]],[[380,380],"valid"],[[381,381],"mapped",[382]],[[382,382],"valid"],[[383,383],"mapped",[115]],[[384,384],"valid"],[[385,385],"mapped",[595]],[[386,386],"mapped",[387]],[[387,387],"valid"],[[388,388],"mapped",[389]],[[389,389],"valid"],[[390,390],"mapped",[596]],[[391,391],"mapped",[392]],[[392,392],"valid"],[[393,393],"mapped",[598]],[[394,394],"mapped",[599]],[[395,395],"mapped",[396]],[[396,397],"valid"],[[398,398],"mapped",[477]],[[399,399],"mapped",[601]],[[400,400],"mapped",[603]],[[401,401],"mapped",[402]],[[402,402],"valid"],[[403,403],"mapped",[608]],[[404,404],"mapped",[611]],[[405,405],"valid"],[[406,406],"mapped",[617]],[[407,407],"mapped",[616]],[[408,408],"mapped",[409]],[[409,411],"valid"],[[412,412],"mapped",[623]],[[413,413],"mapped",[626]],[[414,414],"valid"],[[415,415],"mapped",[629]],[[416,416],"mapped",[417]],[[417,417],"valid"],[[418,418],"mapped",[419]],[[419,419],"valid"],[[420,420],"mapped",[421]],[[421,421],"valid"],[[422,422],"mapped",[640]],[[423,423],"mapped",[424]],[[424,424],"valid"],[[425,425],"mapped",[643]],[[426,427],"valid"],[[428,428],"mapped",[429]],[[429,429],"valid"],[[430,430],"mapped",[648]],[[431,431],"mapped",[432]],[[432,432],"valid"],[[433,433],"mapped",[650]],[[434,434],"mapped",[651]],[[435,435],"mapped",[436]],[[436,436],"valid"],[[437,437],"mapped",[438]],[[438,438],"valid"],[[439,439],"mapped",[658]],[[440,440],"mapped",[441]],[[441,443],"valid"],[[444,444],"mapped",[445]],[[445,451],"valid"],[[452,454],"mapped",[100,382]],[[455,457],"mapped",[108,106]],[[458,460],"mapped",[110,106]],[[461,461],"mapped",[462]],[[462,462],"valid"],[[463,463],"mapped",[464]],[[464,464],"valid"],[[465,465],"mapped",[466]],[[466,466],"valid"],[[467,467],"mapped",[468]],[[468,468],"valid"],[[469,469],"mapped",[470]],[[470,470],"valid"],[[471,471],"mapped",[472]],[[472,472],"valid"],[[473,473],"mapped",[474]],[[474,474],"valid"],[[475,475],"mapped",[476]],[[476,477],"valid"],[[478,478],"mapped",[479]],[[479,479],"valid"],[[480,480],"mapped",[481]],[[481,481],"valid"],[[482,482],"mapped",[483]],[[483,483],"valid"],[[484,484],"mapped",[485]],[[485,485],"valid"],[[486,486],"mapped",[487]],[[487,487],"valid"],[[488,488],"mapped",[489]],[[489,489],"valid"],[[490,490],"mapped",[491]],[[491,491],"valid"],[[492,492],"mapped",[493]],[[493,493],"valid"],[[494,494],"mapped",[495]],[[495,496],"valid"],[[497,499],"mapped",[100,122]],[[500,500],"mapped",[501]],[[501,501],"valid"],[[502,502],"mapped",[405]],[[503,503],"mapped",[447]],[[504,504],"mapped",[505]],[[505,505],"valid"],[[506,506],"mapped",[507]],[[507,507],"valid"],[[508,508],"mapped",[509]],[[509,509],"valid"],[[510,510],"mapped",[511]],[[511,511],"valid"],[[512,512],"mapped",[513]],[[513,513],"valid"],[[514,514],"mapped",[515]],[[515,515],"valid"],[[516,516],"mapped",[517]],[[517,517],"valid"],[[518,518],"mapped",[519]],[[519,519],"valid"],[[520,520],"mapped",[521]],[[521,521],"valid"],[[522,522],"mapped",[523]],[[523,523],"valid"],[[524,524],"mapped",[525]],[[525,525],"valid"],[[526,526],"mapped",[527]],[[527,527],"valid"],[[528,528],"mapped",[529]],[[529,529],"valid"],[[530,530],"mapped",[531]],[[531,531],"valid"],[[532,532],"mapped",[533]],[[533,533],"valid"],[[534,534],"mapped",[535]],[[535,535],"valid"],[[536,536],"mapped",[537]],[[537,537],"valid"],[[538,538],"mapped",[539]],[[539,539],"valid"],[[540,540],"mapped",[541]],[[541,541],"valid"],[[542,542],"mapped",[543]],[[543,543],"valid"],[[544,544],"mapped",[414]],[[545,545],"valid"],[[546,546],"mapped",[547]],[[547,547],"valid"],[[548,548],"mapped",[549]],[[549,549],"valid"],[[550,550],"mapped",[551]],[[551,551],"valid"],[[552,552],"mapped",[553]],[[553,553],"valid"],[[554,554],"mapped",[555]],[[555,555],"valid"],[[556,556],"mapped",[557]],[[557,557],"valid"],[[558,558],"mapped",[559]],[[559,559],"valid"],[[560,560],"mapped",[561]],[[561,561],"valid"],[[562,562],"mapped",[563]],[[563,563],"valid"],[[564,566],"valid"],[[567,569],"valid"],[[570,570],"mapped",[11365]],[[571,571],"mapped",[572]],[[572,572],"valid"],[[573,573],"mapped",[410]],[[574,574],"mapped",[11366]],[[575,576],"valid"],[[577,577],"mapped",[578]],[[578,578],"valid"],[[579,579],"mapped",[384]],[[580,580],"mapped",[649]],[[581,581],"mapped",[652]],[[582,582],"mapped",[583]],[[583,583],"valid"],[[584,584],"mapped",[585]],[[585,585],"valid"],[[586,586],"mapped",[587]],[[587,587],"valid"],[[588,588],"mapped",[589]],[[589,589],"valid"],[[590,590],"mapped",[591]],[[591,591],"valid"],[[592,680],"valid"],[[681,685],"valid"],[[686,687],"valid"],[[688,688],"mapped",[104]],[[689,689],"mapped",[614]],[[690,690],"mapped",[106]],[[691,691],"mapped",[114]],[[692,692],"mapped",[633]],[[693,693],"mapped",[635]],[[694,694],"mapped",[641]],[[695,695],"mapped",[119]],[[696,696],"mapped",[121]],[[697,705],"valid"],[[706,709],"valid",[],"NV8"],[[710,721],"valid"],[[722,727],"valid",[],"NV8"],[[728,728],"disallowed_STD3_mapped",[32,774]],[[729,729],"disallowed_STD3_mapped",[32,775]],[[730,730],"disallowed_STD3_mapped",[32,778]],[[731,731],"disallowed_STD3_mapped",[32,808]],[[732,732],"disallowed_STD3_mapped",[32,771]],[[733,733],"disallowed_STD3_mapped",[32,779]],[[734,734],"valid",[],"NV8"],[[735,735],"valid",[],"NV8"],[[736,736],"mapped",[611]],[[737,737],"mapped",[108]],[[738,738],"mapped",[115]],[[739,739],"mapped",[120]],[[740,740],"mapped",[661]],[[741,745],"valid",[],"NV8"],[[746,747],"valid",[],"NV8"],[[748,748],"valid"],[[749,749],"valid",[],"NV8"],[[750,750],"valid"],[[751,767],"valid",[],"NV8"],[[768,831],"valid"],[[832,832],"mapped",[768]],[[833,833],"mapped",[769]],[[834,834],"valid"],[[835,835],"mapped",[787]],[[836,836],"mapped",[776,769]],[[837,837],"mapped",[953]],[[838,846],"valid"],[[847,847],"ignored"],[[848,855],"valid"],[[856,860],"valid"],[[861,863],"valid"],[[864,865],"valid"],[[866,866],"valid"],[[867,879],"valid"],[[880,880],"mapped",[881]],[[881,881],"valid"],[[882,882],"mapped",[883]],[[883,883],"valid"],[[884,884],"mapped",[697]],[[885,885],"valid"],[[886,886],"mapped",[887]],[[887,887],"valid"],[[888,889],"disallowed"],[[890,890],"disallowed_STD3_mapped",[32,953]],[[891,893],"valid"],[[894,894],"disallowed_STD3_mapped",[59]],[[895,895],"mapped",[1011]],[[896,899],"disallowed"],[[900,900],"disallowed_STD3_mapped",[32,769]],[[901,901],"disallowed_STD3_mapped",[32,776,769]],[[902,902],"mapped",[940]],[[903,903],"mapped",[183]],[[904,904],"mapped",[941]],[[905,905],"mapped",[942]],[[906,906],"mapped",[943]],[[907,907],"disallowed"],[[908,908],"mapped",[972]],[[909,909],"disallowed"],[[910,910],"mapped",[973]],[[911,911],"mapped",[974]],[[912,912],"valid"],[[913,913],"mapped",[945]],[[914,914],"mapped",[946]],[[915,915],"mapped",[947]],[[916,916],"mapped",[948]],[[917,917],"mapped",[949]],[[918,918],"mapped",[950]],[[919,919],"mapped",[951]],[[920,920],"mapped",[952]],[[921,921],"mapped",[953]],[[922,922],"mapped",[954]],[[923,923],"mapped",[955]],[[924,924],"mapped",[956]],[[925,925],"mapped",[957]],[[926,926],"mapped",[958]],[[927,927],"mapped",[959]],[[928,928],"mapped",[960]],[[929,929],"mapped",[961]],[[930,930],"disallowed"],[[931,931],"mapped",[963]],[[932,932],"mapped",[964]],[[933,933],"mapped",[965]],[[934,934],"mapped",[966]],[[935,935],"mapped",[967]],[[936,936],"mapped",[968]],[[937,937],"mapped",[969]],[[938,938],"mapped",[970]],[[939,939],"mapped",[971]],[[940,961],"valid"],[[962,962],"deviation",[963]],[[963,974],"valid"],[[975,975],"mapped",[983]],[[976,976],"mapped",[946]],[[977,977],"mapped",[952]],[[978,978],"mapped",[965]],[[979,979],"mapped",[973]],[[980,980],"mapped",[971]],[[981,981],"mapped",[966]],[[982,982],"mapped",[960]],[[983,983],"valid"],[[984,984],"mapped",[985]],[[985,985],"valid"],[[986,986],"mapped",[987]],[[987,987],"valid"],[[988,988],"mapped",[989]],[[989,989],"valid"],[[990,990],"mapped",[991]],[[991,991],"valid"],[[992,992],"mapped",[993]],[[993,993],"valid"],[[994,994],"mapped",[995]],[[995,995],"valid"],[[996,996],"mapped",[997]],[[997,997],"valid"],[[998,998],"mapped",[999]],[[999,999],"valid"],[[1000,1000],"mapped",[1001]],[[1001,1001],"valid"],[[1002,1002],"mapped",[1003]],[[1003,1003],"valid"],[[1004,1004],"mapped",[1005]],[[1005,1005],"valid"],[[1006,1006],"mapped",[1007]],[[1007,1007],"valid"],[[1008,1008],"mapped",[954]],[[1009,1009],"mapped",[961]],[[1010,1010],"mapped",[963]],[[1011,1011],"valid"],[[1012,1012],"mapped",[952]],[[1013,1013],"mapped",[949]],[[1014,1014],"valid",[],"NV8"],[[1015,1015],"mapped",[1016]],[[1016,1016],"valid"],[[1017,1017],"mapped",[963]],[[1018,1018],"mapped",[1019]],[[1019,1019],"valid"],[[1020,1020],"valid"],[[1021,1021],"mapped",[891]],[[1022,1022],"mapped",[892]],[[1023,1023],"mapped",[893]],[[1024,1024],"mapped",[1104]],[[1025,1025],"mapped",[1105]],[[1026,1026],"mapped",[1106]],[[1027,1027],"mapped",[1107]],[[1028,1028],"mapped",[1108]],[[1029,1029],"mapped",[1109]],[[1030,1030],"mapped",[1110]],[[1031,1031],"mapped",[1111]],[[1032,1032],"mapped",[1112]],[[1033,1033],"mapped",[1113]],[[1034,1034],"mapped",[1114]],[[1035,1035],"mapped",[1115]],[[1036,1036],"mapped",[1116]],[[1037,1037],"mapped",[1117]],[[1038,1038],"mapped",[1118]],[[1039,1039],"mapped",[1119]],[[1040,1040],"mapped",[1072]],[[1041,1041],"mapped",[1073]],[[1042,1042],"mapped",[1074]],[[1043,1043],"mapped",[1075]],[[1044,1044],"mapped",[1076]],[[1045,1045],"mapped",[1077]],[[1046,1046],"mapped",[1078]],[[1047,1047],"mapped",[1079]],[[1048,1048],"mapped",[1080]],[[1049,1049],"mapped",[1081]],[[1050,1050],"mapped",[1082]],[[1051,1051],"mapped",[1083]],[[1052,1052],"mapped",[1084]],[[1053,1053],"mapped",[1085]],[[1054,1054],"mapped",[1086]],[[1055,1055],"mapped",[1087]],[[1056,1056],"mapped",[1088]],[[1057,1057],"mapped",[1089]],[[1058,1058],"mapped",[1090]],[[1059,1059],"mapped",[1091]],[[1060,1060],"mapped",[1092]],[[1061,1061],"mapped",[1093]],[[1062,1062],"mapped",[1094]],[[1063,1063],"mapped",[1095]],[[1064,1064],"mapped",[1096]],[[1065,1065],"mapped",[1097]],[[1066,1066],"mapped",[1098]],[[1067,1067],"mapped",[1099]],[[1068,1068],"mapped",[1100]],[[1069,1069],"mapped",[1101]],[[1070,1070],"mapped",[1102]],[[1071,1071],"mapped",[1103]],[[1072,1103],"valid"],[[1104,1104],"valid"],[[1105,1116],"valid"],[[1117,1117],"valid"],[[1118,1119],"valid"],[[1120,1120],"mapped",[1121]],[[1121,1121],"valid"],[[1122,1122],"mapped",[1123]],[[1123,1123],"valid"],[[1124,1124],"mapped",[1125]],[[1125,1125],"valid"],[[1126,1126],"mapped",[1127]],[[1127,1127],"valid"],[[1128,1128],"mapped",[1129]],[[1129,1129],"valid"],[[1130,1130],"mapped",[1131]],[[1131,1131],"valid"],[[1132,1132],"mapped",[1133]],[[1133,1133],"valid"],[[1134,1134],"mapped",[1135]],[[1135,1135],"valid"],[[1136,1136],"mapped",[1137]],[[1137,1137],"valid"],[[1138,1138],"mapped",[1139]],[[1139,1139],"valid"],[[1140,1140],"mapped",[1141]],[[1141,1141],"valid"],[[1142,1142],"mapped",[1143]],[[1143,1143],"valid"],[[1144,1144],"mapped",[1145]],[[1145,1145],"valid"],[[1146,1146],"mapped",[1147]],[[1147,1147],"valid"],[[1148,1148],"mapped",[1149]],[[1149,1149],"valid"],[[1150,1150],"mapped",[1151]],[[1151,1151],"valid"],[[1152,1152],"mapped",[1153]],[[1153,1153],"valid"],[[1154,1154],"valid",[],"NV8"],[[1155,1158],"valid"],[[1159,1159],"valid"],[[1160,1161],"valid",[],"NV8"],[[1162,1162],"mapped",[1163]],[[1163,1163],"valid"],[[1164,1164],"mapped",[1165]],[[1165,1165],"valid"],[[1166,1166],"mapped",[1167]],[[1167,1167],"valid"],[[1168,1168],"mapped",[1169]],[[1169,1169],"valid"],[[1170,1170],"mapped",[1171]],[[1171,1171],"valid"],[[1172,1172],"mapped",[1173]],[[1173,1173],"valid"],[[1174,1174],"mapped",[1175]],[[1175,1175],"valid"],[[1176,1176],"mapped",[1177]],[[1177,1177],"valid"],[[1178,1178],"mapped",[1179]],[[1179,1179],"valid"],[[1180,1180],"mapped",[1181]],[[1181,1181],"valid"],[[1182,1182],"mapped",[1183]],[[1183,1183],"valid"],[[1184,1184],"mapped",[1185]],[[1185,1185],"valid"],[[1186,1186],"mapped",[1187]],[[1187,1187],"valid"],[[1188,1188],"mapped",[1189]],[[1189,1189],"valid"],[[1190,1190],"mapped",[1191]],[[1191,1191],"valid"],[[1192,1192],"mapped",[1193]],[[1193,1193],"valid"],[[1194,1194],"mapped",[1195]],[[1195,1195],"valid"],[[1196,1196],"mapped",[1197]],[[1197,1197],"valid"],[[1198,1198],"mapped",[1199]],[[1199,1199],"valid"],[[1200,1200],"mapped",[1201]],[[1201,1201],"valid"],[[1202,1202],"mapped",[1203]],[[1203,1203],"valid"],[[1204,1204],"mapped",[1205]],[[1205,1205],"valid"],[[1206,1206],"mapped",[1207]],[[1207,1207],"valid"],[[1208,1208],"mapped",[1209]],[[1209,1209],"valid"],[[1210,1210],"mapped",[1211]],[[1211,1211],"valid"],[[1212,1212],"mapped",[1213]],[[1213,1213],"valid"],[[1214,1214],"mapped",[1215]],[[1215,1215],"valid"],[[1216,1216],"disallowed"],[[1217,1217],"mapped",[1218]],[[1218,1218],"valid"],[[1219,1219],"mapped",[1220]],[[1220,1220],"valid"],[[1221,1221],"mapped",[1222]],[[1222,1222],"valid"],[[1223,1223],"mapped",[1224]],[[1224,1224],"valid"],[[1225,1225],"mapped",[1226]],[[1226,1226],"valid"],[[1227,1227],"mapped",[1228]],[[1228,1228],"valid"],[[1229,1229],"mapped",[1230]],[[1230,1230],"valid"],[[1231,1231],"valid"],[[1232,1232],"mapped",[1233]],[[1233,1233],"valid"],[[1234,1234],"mapped",[1235]],[[1235,1235],"valid"],[[1236,1236],"mapped",[1237]],[[1237,1237],"valid"],[[1238,1238],"mapped",[1239]],[[1239,1239],"valid"],[[1240,1240],"mapped",[1241]],[[1241,1241],"valid"],[[1242,1242],"mapped",[1243]],[[1243,1243],"valid"],[[1244,1244],"mapped",[1245]],[[1245,1245],"valid"],[[1246,1246],"mapped",[1247]],[[1247,1247],"valid"],[[1248,1248],"mapped",[1249]],[[1249,1249],"valid"],[[1250,1250],"mapped",[1251]],[[1251,1251],"valid"],[[1252,1252],"mapped",[1253]],[[1253,1253],"valid"],[[1254,1254],"mapped",[1255]],[[1255,1255],"valid"],[[1256,1256],"mapped",[1257]],[[1257,1257],"valid"],[[1258,1258],"mapped",[1259]],[[1259,1259],"valid"],[[1260,1260],"mapped",[1261]],[[1261,1261],"valid"],[[1262,1262],"mapped",[1263]],[[1263,1263],"valid"],[[1264,1264],"mapped",[1265]],[[1265,1265],"valid"],[[1266,1266],"mapped",[1267]],[[1267,1267],"valid"],[[1268,1268],"mapped",[1269]],[[1269,1269],"valid"],[[1270,1270],"mapped",[1271]],[[1271,1271],"valid"],[[1272,1272],"mapped",[1273]],[[1273,1273],"valid"],[[1274,1274],"mapped",[1275]],[[1275,1275],"valid"],[[1276,1276],"mapped",[1277]],[[1277,1277],"valid"],[[1278,1278],"mapped",[1279]],[[1279,1279],"valid"],[[1280,1280],"mapped",[1281]],[[1281,1281],"valid"],[[1282,1282],"mapped",[1283]],[[1283,1283],"valid"],[[1284,1284],"mapped",[1285]],[[1285,1285],"valid"],[[1286,1286],"mapped",[1287]],[[1287,1287],"valid"],[[1288,1288],"mapped",[1289]],[[1289,1289],"valid"],[[1290,1290],"mapped",[1291]],[[1291,1291],"valid"],[[1292,1292],"mapped",[1293]],[[1293,1293],"valid"],[[1294,1294],"mapped",[1295]],[[1295,1295],"valid"],[[1296,1296],"mapped",[1297]],[[1297,1297],"valid"],[[1298,1298],"mapped",[1299]],[[1299,1299],"valid"],[[1300,1300],"mapped",[1301]],[[1301,1301],"valid"],[[1302,1302],"mapped",[1303]],[[1303,1303],"valid"],[[1304,1304],"mapped",[1305]],[[1305,1305],"valid"],[[1306,1306],"mapped",[1307]],[[1307,1307],"valid"],[[1308,1308],"mapped",[1309]],[[1309,1309],"valid"],[[1310,1310],"mapped",[1311]],[[1311,1311],"valid"],[[1312,1312],"mapped",[1313]],[[1313,1313],"valid"],[[1314,1314],"mapped",[1315]],[[1315,1315],"valid"],[[1316,1316],"mapped",[1317]],[[1317,1317],"valid"],[[1318,1318],"mapped",[1319]],[[1319,1319],"valid"],[[1320,1320],"mapped",[1321]],[[1321,1321],"valid"],[[1322,1322],"mapped",[1323]],[[1323,1323],"valid"],[[1324,1324],"mapped",[1325]],[[1325,1325],"valid"],[[1326,1326],"mapped",[1327]],[[1327,1327],"valid"],[[1328,1328],"disallowed"],[[1329,1329],"mapped",[1377]],[[1330,1330],"mapped",[1378]],[[1331,1331],"mapped",[1379]],[[1332,1332],"mapped",[1380]],[[1333,1333],"mapped",[1381]],[[1334,1334],"mapped",[1382]],[[1335,1335],"mapped",[1383]],[[1336,1336],"mapped",[1384]],[[1337,1337],"mapped",[1385]],[[1338,1338],"mapped",[1386]],[[1339,1339],"mapped",[1387]],[[1340,1340],"mapped",[1388]],[[1341,1341],"mapped",[1389]],[[1342,1342],"mapped",[1390]],[[1343,1343],"mapped",[1391]],[[1344,1344],"mapped",[1392]],[[1345,1345],"mapped",[1393]],[[1346,1346],"mapped",[1394]],[[1347,1347],"mapped",[1395]],[[1348,1348],"mapped",[1396]],[[1349,1349],"mapped",[1397]],[[1350,1350],"mapped",[1398]],[[1351,1351],"mapped",[1399]],[[1352,1352],"mapped",[1400]],[[1353,1353],"mapped",[1401]],[[1354,1354],"mapped",[1402]],[[1355,1355],"mapped",[1403]],[[1356,1356],"mapped",[1404]],[[1357,1357],"mapped",[1405]],[[1358,1358],"mapped",[1406]],[[1359,1359],"mapped",[1407]],[[1360,1360],"mapped",[1408]],[[1361,1361],"mapped",[1409]],[[1362,1362],"mapped",[1410]],[[1363,1363],"mapped",[1411]],[[1364,1364],"mapped",[1412]],[[1365,1365],"mapped",[1413]],[[1366,1366],"mapped",[1414]],[[1367,1368],"disallowed"],[[1369,1369],"valid"],[[1370,1375],"valid",[],"NV8"],[[1376,1376],"disallowed"],[[1377,1414],"valid"],[[1415,1415],"mapped",[1381,1410]],[[1416,1416],"disallowed"],[[1417,1417],"valid",[],"NV8"],[[1418,1418],"valid",[],"NV8"],[[1419,1420],"disallowed"],[[1421,1422],"valid",[],"NV8"],[[1423,1423],"valid",[],"NV8"],[[1424,1424],"disallowed"],[[1425,1441],"valid"],[[1442,1442],"valid"],[[1443,1455],"valid"],[[1456,1465],"valid"],[[1466,1466],"valid"],[[1467,1469],"valid"],[[1470,1470],"valid",[],"NV8"],[[1471,1471],"valid"],[[1472,1472],"valid",[],"NV8"],[[1473,1474],"valid"],[[1475,1475],"valid",[],"NV8"],[[1476,1476],"valid"],[[1477,1477],"valid"],[[1478,1478],"valid",[],"NV8"],[[1479,1479],"valid"],[[1480,1487],"disallowed"],[[1488,1514],"valid"],[[1515,1519],"disallowed"],[[1520,1524],"valid"],[[1525,1535],"disallowed"],[[1536,1539],"disallowed"],[[1540,1540],"disallowed"],[[1541,1541],"disallowed"],[[1542,1546],"valid",[],"NV8"],[[1547,1547],"valid",[],"NV8"],[[1548,1548],"valid",[],"NV8"],[[1549,1551],"valid",[],"NV8"],[[1552,1557],"valid"],[[1558,1562],"valid"],[[1563,1563],"valid",[],"NV8"],[[1564,1564],"disallowed"],[[1565,1565],"disallowed"],[[1566,1566],"valid",[],"NV8"],[[1567,1567],"valid",[],"NV8"],[[1568,1568],"valid"],[[1569,1594],"valid"],[[1595,1599],"valid"],[[1600,1600],"valid",[],"NV8"],[[1601,1618],"valid"],[[1619,1621],"valid"],[[1622,1624],"valid"],[[1625,1630],"valid"],[[1631,1631],"valid"],[[1632,1641],"valid"],[[1642,1645],"valid",[],"NV8"],[[1646,1647],"valid"],[[1648,1652],"valid"],[[1653,1653],"mapped",[1575,1652]],[[1654,1654],"mapped",[1608,1652]],[[1655,1655],"mapped",[1735,1652]],[[1656,1656],"mapped",[1610,1652]],[[1657,1719],"valid"],[[1720,1721],"valid"],[[1722,1726],"valid"],[[1727,1727],"valid"],[[1728,1742],"valid"],[[1743,1743],"valid"],[[1744,1747],"valid"],[[1748,1748],"valid",[],"NV8"],[[1749,1756],"valid"],[[1757,1757],"disallowed"],[[1758,1758],"valid",[],"NV8"],[[1759,1768],"valid"],[[1769,1769],"valid",[],"NV8"],[[1770,1773],"valid"],[[1774,1775],"valid"],[[1776,1785],"valid"],[[1786,1790],"valid"],[[1791,1791],"valid"],[[1792,1805],"valid",[],"NV8"],[[1806,1806],"disallowed"],[[1807,1807],"disallowed"],[[1808,1836],"valid"],[[1837,1839],"valid"],[[1840,1866],"valid"],[[1867,1868],"disallowed"],[[1869,1871],"valid"],[[1872,1901],"valid"],[[1902,1919],"valid"],[[1920,1968],"valid"],[[1969,1969],"valid"],[[1970,1983],"disallowed"],[[1984,2037],"valid"],[[2038,2042],"valid",[],"NV8"],[[2043,2047],"disallowed"],[[2048,2093],"valid"],[[2094,2095],"disallowed"],[[2096,2110],"valid",[],"NV8"],[[2111,2111],"disallowed"],[[2112,2139],"valid"],[[2140,2141],"disallowed"],[[2142,2142],"valid",[],"NV8"],[[2143,2207],"disallowed"],[[2208,2208],"valid"],[[2209,2209],"valid"],[[2210,2220],"valid"],[[2221,2226],"valid"],[[2227,2228],"valid"],[[2229,2274],"disallowed"],[[2275,2275],"valid"],[[2276,2302],"valid"],[[2303,2303],"valid"],[[2304,2304],"valid"],[[2305,2307],"valid"],[[2308,2308],"valid"],[[2309,2361],"valid"],[[2362,2363],"valid"],[[2364,2381],"valid"],[[2382,2382],"valid"],[[2383,2383],"valid"],[[2384,2388],"valid"],[[2389,2389],"valid"],[[2390,2391],"valid"],[[2392,2392],"mapped",[2325,2364]],[[2393,2393],"mapped",[2326,2364]],[[2394,2394],"mapped",[2327,2364]],[[2395,2395],"mapped",[2332,2364]],[[2396,2396],"mapped",[2337,2364]],[[2397,2397],"mapped",[2338,2364]],[[2398,2398],"mapped",[2347,2364]],[[2399,2399],"mapped",[2351,2364]],[[2400,2403],"valid"],[[2404,2405],"valid",[],"NV8"],[[2406,2415],"valid"],[[2416,2416],"valid",[],"NV8"],[[2417,2418],"valid"],[[2419,2423],"valid"],[[2424,2424],"valid"],[[2425,2426],"valid"],[[2427,2428],"valid"],[[2429,2429],"valid"],[[2430,2431],"valid"],[[2432,2432],"valid"],[[2433,2435],"valid"],[[2436,2436],"disallowed"],[[2437,2444],"valid"],[[2445,2446],"disallowed"],[[2447,2448],"valid"],[[2449,2450],"disallowed"],[[2451,2472],"valid"],[[2473,2473],"disallowed"],[[2474,2480],"valid"],[[2481,2481],"disallowed"],[[2482,2482],"valid"],[[2483,2485],"disallowed"],[[2486,2489],"valid"],[[2490,2491],"disallowed"],[[2492,2492],"valid"],[[2493,2493],"valid"],[[2494,2500],"valid"],[[2501,2502],"disallowed"],[[2503,2504],"valid"],[[2505,2506],"disallowed"],[[2507,2509],"valid"],[[2510,2510],"valid"],[[2511,2518],"disallowed"],[[2519,2519],"valid"],[[2520,2523],"disallowed"],[[2524,2524],"mapped",[2465,2492]],[[2525,2525],"mapped",[2466,2492]],[[2526,2526],"disallowed"],[[2527,2527],"mapped",[2479,2492]],[[2528,2531],"valid"],[[2532,2533],"disallowed"],[[2534,2545],"valid"],[[2546,2554],"valid",[],"NV8"],[[2555,2555],"valid",[],"NV8"],[[2556,2560],"disallowed"],[[2561,2561],"valid"],[[2562,2562],"valid"],[[2563,2563],"valid"],[[2564,2564],"disallowed"],[[2565,2570],"valid"],[[2571,2574],"disallowed"],[[2575,2576],"valid"],[[2577,2578],"disallowed"],[[2579,2600],"valid"],[[2601,2601],"disallowed"],[[2602,2608],"valid"],[[2609,2609],"disallowed"],[[2610,2610],"valid"],[[2611,2611],"mapped",[2610,2620]],[[2612,2612],"disallowed"],[[2613,2613],"valid"],[[2614,2614],"mapped",[2616,2620]],[[2615,2615],"disallowed"],[[2616,2617],"valid"],[[2618,2619],"disallowed"],[[2620,2620],"valid"],[[2621,2621],"disallowed"],[[2622,2626],"valid"],[[2627,2630],"disallowed"],[[2631,2632],"valid"],[[2633,2634],"disallowed"],[[2635,2637],"valid"],[[2638,2640],"disallowed"],[[2641,2641],"valid"],[[2642,2648],"disallowed"],[[2649,2649],"mapped",[2582,2620]],[[2650,2650],"mapped",[2583,2620]],[[2651,2651],"mapped",[2588,2620]],[[2652,2652],"valid"],[[2653,2653],"disallowed"],[[2654,2654],"mapped",[2603,2620]],[[2655,2661],"disallowed"],[[2662,2676],"valid"],[[2677,2677],"valid"],[[2678,2688],"disallowed"],[[2689,2691],"valid"],[[2692,2692],"disallowed"],[[2693,2699],"valid"],[[2700,2700],"valid"],[[2701,2701],"valid"],[[2702,2702],"disallowed"],[[2703,2705],"valid"],[[2706,2706],"disallowed"],[[2707,2728],"valid"],[[2729,2729],"disallowed"],[[2730,2736],"valid"],[[2737,2737],"disallowed"],[[2738,2739],"valid"],[[2740,2740],"disallowed"],[[2741,2745],"valid"],[[2746,2747],"disallowed"],[[2748,2757],"valid"],[[2758,2758],"disallowed"],[[2759,2761],"valid"],[[2762,2762],"disallowed"],[[2763,2765],"valid"],[[2766,2767],"disallowed"],[[2768,2768],"valid"],[[2769,2783],"disallowed"],[[2784,2784],"valid"],[[2785,2787],"valid"],[[2788,2789],"disallowed"],[[2790,2799],"valid"],[[2800,2800],"valid",[],"NV8"],[[2801,2801],"valid",[],"NV8"],[[2802,2808],"disallowed"],[[2809,2809],"valid"],[[2810,2816],"disallowed"],[[2817,2819],"valid"],[[2820,2820],"disallowed"],[[2821,2828],"valid"],[[2829,2830],"disallowed"],[[2831,2832],"valid"],[[2833,2834],"disallowed"],[[2835,2856],"valid"],[[2857,2857],"disallowed"],[[2858,2864],"valid"],[[2865,2865],"disallowed"],[[2866,2867],"valid"],[[2868,2868],"disallowed"],[[2869,2869],"valid"],[[2870,2873],"valid"],[[2874,2875],"disallowed"],[[2876,2883],"valid"],[[2884,2884],"valid"],[[2885,2886],"disallowed"],[[2887,2888],"valid"],[[2889,2890],"disallowed"],[[2891,2893],"valid"],[[2894,2901],"disallowed"],[[2902,2903],"valid"],[[2904,2907],"disallowed"],[[2908,2908],"mapped",[2849,2876]],[[2909,2909],"mapped",[2850,2876]],[[2910,2910],"disallowed"],[[2911,2913],"valid"],[[2914,2915],"valid"],[[2916,2917],"disallowed"],[[2918,2927],"valid"],[[2928,2928],"valid",[],"NV8"],[[2929,2929],"valid"],[[2930,2935],"valid",[],"NV8"],[[2936,2945],"disallowed"],[[2946,2947],"valid"],[[2948,2948],"disallowed"],[[2949,2954],"valid"],[[2955,2957],"disallowed"],[[2958,2960],"valid"],[[2961,2961],"disallowed"],[[2962,2965],"valid"],[[2966,2968],"disallowed"],[[2969,2970],"valid"],[[2971,2971],"disallowed"],[[2972,2972],"valid"],[[2973,2973],"disallowed"],[[2974,2975],"valid"],[[2976,2978],"disallowed"],[[2979,2980],"valid"],[[2981,2983],"disallowed"],[[2984,2986],"valid"],[[2987,2989],"disallowed"],[[2990,2997],"valid"],[[2998,2998],"valid"],[[2999,3001],"valid"],[[3002,3005],"disallowed"],[[3006,3010],"valid"],[[3011,3013],"disallowed"],[[3014,3016],"valid"],[[3017,3017],"disallowed"],[[3018,3021],"valid"],[[3022,3023],"disallowed"],[[3024,3024],"valid"],[[3025,3030],"disallowed"],[[3031,3031],"valid"],[[3032,3045],"disallowed"],[[3046,3046],"valid"],[[3047,3055],"valid"],[[3056,3058],"valid",[],"NV8"],[[3059,3066],"valid",[],"NV8"],[[3067,3071],"disallowed"],[[3072,3072],"valid"],[[3073,3075],"valid"],[[3076,3076],"disallowed"],[[3077,3084],"valid"],[[3085,3085],"disallowed"],[[3086,3088],"valid"],[[3089,3089],"disallowed"],[[3090,3112],"valid"],[[3113,3113],"disallowed"],[[3114,3123],"valid"],[[3124,3124],"valid"],[[3125,3129],"valid"],[[3130,3132],"disallowed"],[[3133,3133],"valid"],[[3134,3140],"valid"],[[3141,3141],"disallowed"],[[3142,3144],"valid"],[[3145,3145],"disallowed"],[[3146,3149],"valid"],[[3150,3156],"disallowed"],[[3157,3158],"valid"],[[3159,3159],"disallowed"],[[3160,3161],"valid"],[[3162,3162],"valid"],[[3163,3167],"disallowed"],[[3168,3169],"valid"],[[3170,3171],"valid"],[[3172,3173],"disallowed"],[[3174,3183],"valid"],[[3184,3191],"disallowed"],[[3192,3199],"valid",[],"NV8"],[[3200,3200],"disallowed"],[[3201,3201],"valid"],[[3202,3203],"valid"],[[3204,3204],"disallowed"],[[3205,3212],"valid"],[[3213,3213],"disallowed"],[[3214,3216],"valid"],[[3217,3217],"disallowed"],[[3218,3240],"valid"],[[3241,3241],"disallowed"],[[3242,3251],"valid"],[[3252,3252],"disallowed"],[[3253,3257],"valid"],[[3258,3259],"disallowed"],[[3260,3261],"valid"],[[3262,3268],"valid"],[[3269,3269],"disallowed"],[[3270,3272],"valid"],[[3273,3273],"disallowed"],[[3274,3277],"valid"],[[3278,3284],"disallowed"],[[3285,3286],"valid"],[[3287,3293],"disallowed"],[[3294,3294],"valid"],[[3295,3295],"disallowed"],[[3296,3297],"valid"],[[3298,3299],"valid"],[[3300,3301],"disallowed"],[[3302,3311],"valid"],[[3312,3312],"disallowed"],[[3313,3314],"valid"],[[3315,3328],"disallowed"],[[3329,3329],"valid"],[[3330,3331],"valid"],[[3332,3332],"disallowed"],[[3333,3340],"valid"],[[3341,3341],"disallowed"],[[3342,3344],"valid"],[[3345,3345],"disallowed"],[[3346,3368],"valid"],[[3369,3369],"valid"],[[3370,3385],"valid"],[[3386,3386],"valid"],[[3387,3388],"disallowed"],[[3389,3389],"valid"],[[3390,3395],"valid"],[[3396,3396],"valid"],[[3397,3397],"disallowed"],[[3398,3400],"valid"],[[3401,3401],"disallowed"],[[3402,3405],"valid"],[[3406,3406],"valid"],[[3407,3414],"disallowed"],[[3415,3415],"valid"],[[3416,3422],"disallowed"],[[3423,3423],"valid"],[[3424,3425],"valid"],[[3426,3427],"valid"],[[3428,3429],"disallowed"],[[3430,3439],"valid"],[[3440,3445],"valid",[],"NV8"],[[3446,3448],"disallowed"],[[3449,3449],"valid",[],"NV8"],[[3450,3455],"valid"],[[3456,3457],"disallowed"],[[3458,3459],"valid"],[[3460,3460],"disallowed"],[[3461,3478],"valid"],[[3479,3481],"disallowed"],[[3482,3505],"valid"],[[3506,3506],"disallowed"],[[3507,3515],"valid"],[[3516,3516],"disallowed"],[[3517,3517],"valid"],[[3518,3519],"disallowed"],[[3520,3526],"valid"],[[3527,3529],"disallowed"],[[3530,3530],"valid"],[[3531,3534],"disallowed"],[[3535,3540],"valid"],[[3541,3541],"disallowed"],[[3542,3542],"valid"],[[3543,3543],"disallowed"],[[3544,3551],"valid"],[[3552,3557],"disallowed"],[[3558,3567],"valid"],[[3568,3569],"disallowed"],[[3570,3571],"valid"],[[3572,3572],"valid",[],"NV8"],[[3573,3584],"disallowed"],[[3585,3634],"valid"],[[3635,3635],"mapped",[3661,3634]],[[3636,3642],"valid"],[[3643,3646],"disallowed"],[[3647,3647],"valid",[],"NV8"],[[3648,3662],"valid"],[[3663,3663],"valid",[],"NV8"],[[3664,3673],"valid"],[[3674,3675],"valid",[],"NV8"],[[3676,3712],"disallowed"],[[3713,3714],"valid"],[[3715,3715],"disallowed"],[[3716,3716],"valid"],[[3717,3718],"disallowed"],[[3719,3720],"valid"],[[3721,3721],"disallowed"],[[3722,3722],"valid"],[[3723,3724],"disallowed"],[[3725,3725],"valid"],[[3726,3731],"disallowed"],[[3732,3735],"valid"],[[3736,3736],"disallowed"],[[3737,3743],"valid"],[[3744,3744],"disallowed"],[[3745,3747],"valid"],[[3748,3748],"disallowed"],[[3749,3749],"valid"],[[3750,3750],"disallowed"],[[3751,3751],"valid"],[[3752,3753],"disallowed"],[[3754,3755],"valid"],[[3756,3756],"disallowed"],[[3757,3762],"valid"],[[3763,3763],"mapped",[3789,3762]],[[3764,3769],"valid"],[[3770,3770],"disallowed"],[[3771,3773],"valid"],[[3774,3775],"disallowed"],[[3776,3780],"valid"],[[3781,3781],"disallowed"],[[3782,3782],"valid"],[[3783,3783],"disallowed"],[[3784,3789],"valid"],[[3790,3791],"disallowed"],[[3792,3801],"valid"],[[3802,3803],"disallowed"],[[3804,3804],"mapped",[3755,3737]],[[3805,3805],"mapped",[3755,3745]],[[3806,3807],"valid"],[[3808,3839],"disallowed"],[[3840,3840],"valid"],[[3841,3850],"valid",[],"NV8"],[[3851,3851],"valid"],[[3852,3852],"mapped",[3851]],[[3853,3863],"valid",[],"NV8"],[[3864,3865],"valid"],[[3866,3871],"valid",[],"NV8"],[[3872,3881],"valid"],[[3882,3892],"valid",[],"NV8"],[[3893,3893],"valid"],[[3894,3894],"valid",[],"NV8"],[[3895,3895],"valid"],[[3896,3896],"valid",[],"NV8"],[[3897,3897],"valid"],[[3898,3901],"valid",[],"NV8"],[[3902,3906],"valid"],[[3907,3907],"mapped",[3906,4023]],[[3908,3911],"valid"],[[3912,3912],"disallowed"],[[3913,3916],"valid"],[[3917,3917],"mapped",[3916,4023]],[[3918,3921],"valid"],[[3922,3922],"mapped",[3921,4023]],[[3923,3926],"valid"],[[3927,3927],"mapped",[3926,4023]],[[3928,3931],"valid"],[[3932,3932],"mapped",[3931,4023]],[[3933,3944],"valid"],[[3945,3945],"mapped",[3904,4021]],[[3946,3946],"valid"],[[3947,3948],"valid"],[[3949,3952],"disallowed"],[[3953,3954],"valid"],[[3955,3955],"mapped",[3953,3954]],[[3956,3956],"valid"],[[3957,3957],"mapped",[3953,3956]],[[3958,3958],"mapped",[4018,3968]],[[3959,3959],"mapped",[4018,3953,3968]],[[3960,3960],"mapped",[4019,3968]],[[3961,3961],"mapped",[4019,3953,3968]],[[3962,3968],"valid"],[[3969,3969],"mapped",[3953,3968]],[[3970,3972],"valid"],[[3973,3973],"valid",[],"NV8"],[[3974,3979],"valid"],[[3980,3983],"valid"],[[3984,3986],"valid"],[[3987,3987],"mapped",[3986,4023]],[[3988,3989],"valid"],[[3990,3990],"valid"],[[3991,3991],"valid"],[[3992,3992],"disallowed"],[[3993,3996],"valid"],[[3997,3997],"mapped",[3996,4023]],[[3998,4001],"valid"],[[4002,4002],"mapped",[4001,4023]],[[4003,4006],"valid"],[[4007,4007],"mapped",[4006,4023]],[[4008,4011],"valid"],[[4012,4012],"mapped",[4011,4023]],[[4013,4013],"valid"],[[4014,4016],"valid"],[[4017,4023],"valid"],[[4024,4024],"valid"],[[4025,4025],"mapped",[3984,4021]],[[4026,4028],"valid"],[[4029,4029],"disallowed"],[[4030,4037],"valid",[],"NV8"],[[4038,4038],"valid"],[[4039,4044],"valid",[],"NV8"],[[4045,4045],"disallowed"],[[4046,4046],"valid",[],"NV8"],[[4047,4047],"valid",[],"NV8"],[[4048,4049],"valid",[],"NV8"],[[4050,4052],"valid",[],"NV8"],[[4053,4056],"valid",[],"NV8"],[[4057,4058],"valid",[],"NV8"],[[4059,4095],"disallowed"],[[4096,4129],"valid"],[[4130,4130],"valid"],[[4131,4135],"valid"],[[4136,4136],"valid"],[[4137,4138],"valid"],[[4139,4139],"valid"],[[4140,4146],"valid"],[[4147,4149],"valid"],[[4150,4153],"valid"],[[4154,4159],"valid"],[[4160,4169],"valid"],[[4170,4175],"valid",[],"NV8"],[[4176,4185],"valid"],[[4186,4249],"valid"],[[4250,4253],"valid"],[[4254,4255],"valid",[],"NV8"],[[4256,4293],"disallowed"],[[4294,4294],"disallowed"],[[4295,4295],"mapped",[11559]],[[4296,4300],"disallowed"],[[4301,4301],"mapped",[11565]],[[4302,4303],"disallowed"],[[4304,4342],"valid"],[[4343,4344],"valid"],[[4345,4346],"valid"],[[4347,4347],"valid",[],"NV8"],[[4348,4348],"mapped",[4316]],[[4349,4351],"valid"],[[4352,4441],"valid",[],"NV8"],[[4442,4446],"valid",[],"NV8"],[[4447,4448],"disallowed"],[[4449,4514],"valid",[],"NV8"],[[4515,4519],"valid",[],"NV8"],[[4520,4601],"valid",[],"NV8"],[[4602,4607],"valid",[],"NV8"],[[4608,4614],"valid"],[[4615,4615],"valid"],[[4616,4678],"valid"],[[4679,4679],"valid"],[[4680,4680],"valid"],[[4681,4681],"disallowed"],[[4682,4685],"valid"],[[4686,4687],"disallowed"],[[4688,4694],"valid"],[[4695,4695],"disallowed"],[[4696,4696],"valid"],[[4697,4697],"disallowed"],[[4698,4701],"valid"],[[4702,4703],"disallowed"],[[4704,4742],"valid"],[[4743,4743],"valid"],[[4744,4744],"valid"],[[4745,4745],"disallowed"],[[4746,4749],"valid"],[[4750,4751],"disallowed"],[[4752,4782],"valid"],[[4783,4783],"valid"],[[4784,4784],"valid"],[[4785,4785],"disallowed"],[[4786,4789],"valid"],[[4790,4791],"disallowed"],[[4792,4798],"valid"],[[4799,4799],"disallowed"],[[4800,4800],"valid"],[[4801,4801],"disallowed"],[[4802,4805],"valid"],[[4806,4807],"disallowed"],[[4808,4814],"valid"],[[4815,4815],"valid"],[[4816,4822],"valid"],[[4823,4823],"disallowed"],[[4824,4846],"valid"],[[4847,4847],"valid"],[[4848,4878],"valid"],[[4879,4879],"valid"],[[4880,4880],"valid"],[[4881,4881],"disallowed"],[[4882,4885],"valid"],[[4886,4887],"disallowed"],[[4888,4894],"valid"],[[4895,4895],"valid"],[[4896,4934],"valid"],[[4935,4935],"valid"],[[4936,4954],"valid"],[[4955,4956],"disallowed"],[[4957,4958],"valid"],[[4959,4959],"valid"],[[4960,4960],"valid",[],"NV8"],[[4961,4988],"valid",[],"NV8"],[[4989,4991],"disallowed"],[[4992,5007],"valid"],[[5008,5017],"valid",[],"NV8"],[[5018,5023],"disallowed"],[[5024,5108],"valid"],[[5109,5109],"valid"],[[5110,5111],"disallowed"],[[5112,5112],"mapped",[5104]],[[5113,5113],"mapped",[5105]],[[5114,5114],"mapped",[5106]],[[5115,5115],"mapped",[5107]],[[5116,5116],"mapped",[5108]],[[5117,5117],"mapped",[5109]],[[5118,5119],"disallowed"],[[5120,5120],"valid",[],"NV8"],[[5121,5740],"valid"],[[5741,5742],"valid",[],"NV8"],[[5743,5750],"valid"],[[5751,5759],"valid"],[[5760,5760],"disallowed"],[[5761,5786],"valid"],[[5787,5788],"valid",[],"NV8"],[[5789,5791],"disallowed"],[[5792,5866],"valid"],[[5867,5872],"valid",[],"NV8"],[[5873,5880],"valid"],[[5881,5887],"disallowed"],[[5888,5900],"valid"],[[5901,5901],"disallowed"],[[5902,5908],"valid"],[[5909,5919],"disallowed"],[[5920,5940],"valid"],[[5941,5942],"valid",[],"NV8"],[[5943,5951],"disallowed"],[[5952,5971],"valid"],[[5972,5983],"disallowed"],[[5984,5996],"valid"],[[5997,5997],"disallowed"],[[5998,6000],"valid"],[[6001,6001],"disallowed"],[[6002,6003],"valid"],[[6004,6015],"disallowed"],[[6016,6067],"valid"],[[6068,6069],"disallowed"],[[6070,6099],"valid"],[[6100,6102],"valid",[],"NV8"],[[6103,6103],"valid"],[[6104,6107],"valid",[],"NV8"],[[6108,6108],"valid"],[[6109,6109],"valid"],[[6110,6111],"disallowed"],[[6112,6121],"valid"],[[6122,6127],"disallowed"],[[6128,6137],"valid",[],"NV8"],[[6138,6143],"disallowed"],[[6144,6149],"valid",[],"NV8"],[[6150,6150],"disallowed"],[[6151,6154],"valid",[],"NV8"],[[6155,6157],"ignored"],[[6158,6158],"disallowed"],[[6159,6159],"disallowed"],[[6160,6169],"valid"],[[6170,6175],"disallowed"],[[6176,6263],"valid"],[[6264,6271],"disallowed"],[[6272,6313],"valid"],[[6314,6314],"valid"],[[6315,6319],"disallowed"],[[6320,6389],"valid"],[[6390,6399],"disallowed"],[[6400,6428],"valid"],[[6429,6430],"valid"],[[6431,6431],"disallowed"],[[6432,6443],"valid"],[[6444,6447],"disallowed"],[[6448,6459],"valid"],[[6460,6463],"disallowed"],[[6464,6464],"valid",[],"NV8"],[[6465,6467],"disallowed"],[[6468,6469],"valid",[],"NV8"],[[6470,6509],"valid"],[[6510,6511],"disallowed"],[[6512,6516],"valid"],[[6517,6527],"disallowed"],[[6528,6569],"valid"],[[6570,6571],"valid"],[[6572,6575],"disallowed"],[[6576,6601],"valid"],[[6602,6607],"disallowed"],[[6608,6617],"valid"],[[6618,6618],"valid",[],"XV8"],[[6619,6621],"disallowed"],[[6622,6623],"valid",[],"NV8"],[[6624,6655],"valid",[],"NV8"],[[6656,6683],"valid"],[[6684,6685],"disallowed"],[[6686,6687],"valid",[],"NV8"],[[6688,6750],"valid"],[[6751,6751],"disallowed"],[[6752,6780],"valid"],[[6781,6782],"disallowed"],[[6783,6793],"valid"],[[6794,6799],"disallowed"],[[6800,6809],"valid"],[[6810,6815],"disallowed"],[[6816,6822],"valid",[],"NV8"],[[6823,6823],"valid"],[[6824,6829],"valid",[],"NV8"],[[6830,6831],"disallowed"],[[6832,6845],"valid"],[[6846,6846],"valid",[],"NV8"],[[6847,6911],"disallowed"],[[6912,6987],"valid"],[[6988,6991],"disallowed"],[[6992,7001],"valid"],[[7002,7018],"valid",[],"NV8"],[[7019,7027],"valid"],[[7028,7036],"valid",[],"NV8"],[[7037,7039],"disallowed"],[[7040,7082],"valid"],[[7083,7085],"valid"],[[7086,7097],"valid"],[[7098,7103],"valid"],[[7104,7155],"valid"],[[7156,7163],"disallowed"],[[7164,7167],"valid",[],"NV8"],[[7168,7223],"valid"],[[7224,7226],"disallowed"],[[7227,7231],"valid",[],"NV8"],[[7232,7241],"valid"],[[7242,7244],"disallowed"],[[7245,7293],"valid"],[[7294,7295],"valid",[],"NV8"],[[7296,7359],"disallowed"],[[7360,7367],"valid",[],"NV8"],[[7368,7375],"disallowed"],[[7376,7378],"valid"],[[7379,7379],"valid",[],"NV8"],[[7380,7410],"valid"],[[7411,7414],"valid"],[[7415,7415],"disallowed"],[[7416,7417],"valid"],[[7418,7423],"disallowed"],[[7424,7467],"valid"],[[7468,7468],"mapped",[97]],[[7469,7469],"mapped",[230]],[[7470,7470],"mapped",[98]],[[7471,7471],"valid"],[[7472,7472],"mapped",[100]],[[7473,7473],"mapped",[101]],[[7474,7474],"mapped",[477]],[[7475,7475],"mapped",[103]],[[7476,7476],"mapped",[104]],[[7477,7477],"mapped",[105]],[[7478,7478],"mapped",[106]],[[7479,7479],"mapped",[107]],[[7480,7480],"mapped",[108]],[[7481,7481],"mapped",[109]],[[7482,7482],"mapped",[110]],[[7483,7483],"valid"],[[7484,7484],"mapped",[111]],[[7485,7485],"mapped",[547]],[[7486,7486],"mapped",[112]],[[7487,7487],"mapped",[114]],[[7488,7488],"mapped",[116]],[[7489,7489],"mapped",[117]],[[7490,7490],"mapped",[119]],[[7491,7491],"mapped",[97]],[[7492,7492],"mapped",[592]],[[7493,7493],"mapped",[593]],[[7494,7494],"mapped",[7426]],[[7495,7495],"mapped",[98]],[[7496,7496],"mapped",[100]],[[7497,7497],"mapped",[101]],[[7498,7498],"mapped",[601]],[[7499,7499],"mapped",[603]],[[7500,7500],"mapped",[604]],[[7501,7501],"mapped",[103]],[[7502,7502],"valid"],[[7503,7503],"mapped",[107]],[[7504,7504],"mapped",[109]],[[7505,7505],"mapped",[331]],[[7506,7506],"mapped",[111]],[[7507,7507],"mapped",[596]],[[7508,7508],"mapped",[7446]],[[7509,7509],"mapped",[7447]],[[7510,7510],"mapped",[112]],[[7511,7511],"mapped",[116]],[[7512,7512],"mapped",[117]],[[7513,7513],"mapped",[7453]],[[7514,7514],"mapped",[623]],[[7515,7515],"mapped",[118]],[[7516,7516],"mapped",[7461]],[[7517,7517],"mapped",[946]],[[7518,7518],"mapped",[947]],[[7519,7519],"mapped",[948]],[[7520,7520],"mapped",[966]],[[7521,7521],"mapped",[967]],[[7522,7522],"mapped",[105]],[[7523,7523],"mapped",[114]],[[7524,7524],"mapped",[117]],[[7525,7525],"mapped",[118]],[[7526,7526],"mapped",[946]],[[7527,7527],"mapped",[947]],[[7528,7528],"mapped",[961]],[[7529,7529],"mapped",[966]],[[7530,7530],"mapped",[967]],[[7531,7531],"valid"],[[7532,7543],"valid"],[[7544,7544],"mapped",[1085]],[[7545,7578],"valid"],[[7579,7579],"mapped",[594]],[[7580,7580],"mapped",[99]],[[7581,7581],"mapped",[597]],[[7582,7582],"mapped",[240]],[[7583,7583],"mapped",[604]],[[7584,7584],"mapped",[102]],[[7585,7585],"mapped",[607]],[[7586,7586],"mapped",[609]],[[7587,7587],"mapped",[613]],[[7588,7588],"mapped",[616]],[[7589,7589],"mapped",[617]],[[7590,7590],"mapped",[618]],[[7591,7591],"mapped",[7547]],[[7592,7592],"mapped",[669]],[[7593,7593],"mapped",[621]],[[7594,7594],"mapped",[7557]],[[7595,7595],"mapped",[671]],[[7596,7596],"mapped",[625]],[[7597,7597],"mapped",[624]],[[7598,7598],"mapped",[626]],[[7599,7599],"mapped",[627]],[[7600,7600],"mapped",[628]],[[7601,7601],"mapped",[629]],[[7602,7602],"mapped",[632]],[[7603,7603],"mapped",[642]],[[7604,7604],"mapped",[643]],[[7605,7605],"mapped",[427]],[[7606,7606],"mapped",[649]],[[7607,7607],"mapped",[650]],[[7608,7608],"mapped",[7452]],[[7609,7609],"mapped",[651]],[[7610,7610],"mapped",[652]],[[7611,7611],"mapped",[122]],[[7612,7612],"mapped",[656]],[[7613,7613],"mapped",[657]],[[7614,7614],"mapped",[658]],[[7615,7615],"mapped",[952]],[[7616,7619],"valid"],[[7620,7626],"valid"],[[7627,7654],"valid"],[[7655,7669],"valid"],[[7670,7675],"disallowed"],[[7676,7676],"valid"],[[7677,7677],"valid"],[[7678,7679],"valid"],[[7680,7680],"mapped",[7681]],[[7681,7681],"valid"],[[7682,7682],"mapped",[7683]],[[7683,7683],"valid"],[[7684,7684],"mapped",[7685]],[[7685,7685],"valid"],[[7686,7686],"mapped",[7687]],[[7687,7687],"valid"],[[7688,7688],"mapped",[7689]],[[7689,7689],"valid"],[[7690,7690],"mapped",[7691]],[[7691,7691],"valid"],[[7692,7692],"mapped",[7693]],[[7693,7693],"valid"],[[7694,7694],"mapped",[7695]],[[7695,7695],"valid"],[[7696,7696],"mapped",[7697]],[[7697,7697],"valid"],[[7698,7698],"mapped",[7699]],[[7699,7699],"valid"],[[7700,7700],"mapped",[7701]],[[7701,7701],"valid"],[[7702,7702],"mapped",[7703]],[[7703,7703],"valid"],[[7704,7704],"mapped",[7705]],[[7705,7705],"valid"],[[7706,7706],"mapped",[7707]],[[7707,7707],"valid"],[[7708,7708],"mapped",[7709]],[[7709,7709],"valid"],[[7710,7710],"mapped",[7711]],[[7711,7711],"valid"],[[7712,7712],"mapped",[7713]],[[7713,7713],"valid"],[[7714,7714],"mapped",[7715]],[[7715,7715],"valid"],[[7716,7716],"mapped",[7717]],[[7717,7717],"valid"],[[7718,7718],"mapped",[7719]],[[7719,7719],"valid"],[[7720,7720],"mapped",[7721]],[[7721,7721],"valid"],[[7722,7722],"mapped",[7723]],[[7723,7723],"valid"],[[7724,7724],"mapped",[7725]],[[7725,7725],"valid"],[[7726,7726],"mapped",[7727]],[[7727,7727],"valid"],[[7728,7728],"mapped",[7729]],[[7729,7729],"valid"],[[7730,7730],"mapped",[7731]],[[7731,7731],"valid"],[[7732,7732],"mapped",[7733]],[[7733,7733],"valid"],[[7734,7734],"mapped",[7735]],[[7735,7735],"valid"],[[7736,7736],"mapped",[7737]],[[7737,7737],"valid"],[[7738,7738],"mapped",[7739]],[[7739,7739],"valid"],[[7740,7740],"mapped",[7741]],[[7741,7741],"valid"],[[7742,7742],"mapped",[7743]],[[7743,7743],"valid"],[[7744,7744],"mapped",[7745]],[[7745,7745],"valid"],[[7746,7746],"mapped",[7747]],[[7747,7747],"valid"],[[7748,7748],"mapped",[7749]],[[7749,7749],"valid"],[[7750,7750],"mapped",[7751]],[[7751,7751],"valid"],[[7752,7752],"mapped",[7753]],[[7753,7753],"valid"],[[7754,7754],"mapped",[7755]],[[7755,7755],"valid"],[[7756,7756],"mapped",[7757]],[[7757,7757],"valid"],[[7758,7758],"mapped",[7759]],[[7759,7759],"valid"],[[7760,7760],"mapped",[7761]],[[7761,7761],"valid"],[[7762,7762],"mapped",[7763]],[[7763,7763],"valid"],[[7764,7764],"mapped",[7765]],[[7765,7765],"valid"],[[7766,7766],"mapped",[7767]],[[7767,7767],"valid"],[[7768,7768],"mapped",[7769]],[[7769,7769],"valid"],[[7770,7770],"mapped",[7771]],[[7771,7771],"valid"],[[7772,7772],"mapped",[7773]],[[7773,7773],"valid"],[[7774,7774],"mapped",[7775]],[[7775,7775],"valid"],[[7776,7776],"mapped",[7777]],[[7777,7777],"valid"],[[7778,7778],"mapped",[7779]],[[7779,7779],"valid"],[[7780,7780],"mapped",[7781]],[[7781,7781],"valid"],[[7782,7782],"mapped",[7783]],[[7783,7783],"valid"],[[7784,7784],"mapped",[7785]],[[7785,7785],"valid"],[[7786,7786],"mapped",[7787]],[[7787,7787],"valid"],[[7788,7788],"mapped",[7789]],[[7789,7789],"valid"],[[7790,7790],"mapped",[7791]],[[7791,7791],"valid"],[[7792,7792],"mapped",[7793]],[[7793,7793],"valid"],[[7794,7794],"mapped",[7795]],[[7795,7795],"valid"],[[7796,7796],"mapped",[7797]],[[7797,7797],"valid"],[[7798,7798],"mapped",[7799]],[[7799,7799],"valid"],[[7800,7800],"mapped",[7801]],[[7801,7801],"valid"],[[7802,7802],"mapped",[7803]],[[7803,7803],"valid"],[[7804,7804],"mapped",[7805]],[[7805,7805],"valid"],[[7806,7806],"mapped",[7807]],[[7807,7807],"valid"],[[7808,7808],"mapped",[7809]],[[7809,7809],"valid"],[[7810,7810],"mapped",[7811]],[[7811,7811],"valid"],[[7812,7812],"mapped",[7813]],[[7813,7813],"valid"],[[7814,7814],"mapped",[7815]],[[7815,7815],"valid"],[[7816,7816],"mapped",[7817]],[[7817,7817],"valid"],[[7818,7818],"mapped",[7819]],[[7819,7819],"valid"],[[7820,7820],"mapped",[7821]],[[7821,7821],"valid"],[[7822,7822],"mapped",[7823]],[[7823,7823],"valid"],[[7824,7824],"mapped",[7825]],[[7825,7825],"valid"],[[7826,7826],"mapped",[7827]],[[7827,7827],"valid"],[[7828,7828],"mapped",[7829]],[[7829,7833],"valid"],[[7834,7834],"mapped",[97,702]],[[7835,7835],"mapped",[7777]],[[7836,7837],"valid"],[[7838,7838],"mapped",[115,115]],[[7839,7839],"valid"],[[7840,7840],"mapped",[7841]],[[7841,7841],"valid"],[[7842,7842],"mapped",[7843]],[[7843,7843],"valid"],[[7844,7844],"mapped",[7845]],[[7845,7845],"valid"],[[7846,7846],"mapped",[7847]],[[7847,7847],"valid"],[[7848,7848],"mapped",[7849]],[[7849,7849],"valid"],[[7850,7850],"mapped",[7851]],[[7851,7851],"valid"],[[7852,7852],"mapped",[7853]],[[7853,7853],"valid"],[[7854,7854],"mapped",[7855]],[[7855,7855],"valid"],[[7856,7856],"mapped",[7857]],[[7857,7857],"valid"],[[7858,7858],"mapped",[7859]],[[7859,7859],"valid"],[[7860,7860],"mapped",[7861]],[[7861,7861],"valid"],[[7862,7862],"mapped",[7863]],[[7863,7863],"valid"],[[7864,7864],"mapped",[7865]],[[7865,7865],"valid"],[[7866,7866],"mapped",[7867]],[[7867,7867],"valid"],[[7868,7868],"mapped",[7869]],[[7869,7869],"valid"],[[7870,7870],"mapped",[7871]],[[7871,7871],"valid"],[[7872,7872],"mapped",[7873]],[[7873,7873],"valid"],[[7874,7874],"mapped",[7875]],[[7875,7875],"valid"],[[7876,7876],"mapped",[7877]],[[7877,7877],"valid"],[[7878,7878],"mapped",[7879]],[[7879,7879],"valid"],[[7880,7880],"mapped",[7881]],[[7881,7881],"valid"],[[7882,7882],"mapped",[7883]],[[7883,7883],"valid"],[[7884,7884],"mapped",[7885]],[[7885,7885],"valid"],[[7886,7886],"mapped",[7887]],[[7887,7887],"valid"],[[7888,7888],"mapped",[7889]],[[7889,7889],"valid"],[[7890,7890],"mapped",[7891]],[[7891,7891],"valid"],[[7892,7892],"mapped",[7893]],[[7893,7893],"valid"],[[7894,7894],"mapped",[7895]],[[7895,7895],"valid"],[[7896,7896],"mapped",[7897]],[[7897,7897],"valid"],[[7898,7898],"mapped",[7899]],[[7899,7899],"valid"],[[7900,7900],"mapped",[7901]],[[7901,7901],"valid"],[[7902,7902],"mapped",[7903]],[[7903,7903],"valid"],[[7904,7904],"mapped",[7905]],[[7905,7905],"valid"],[[7906,7906],"mapped",[7907]],[[7907,7907],"valid"],[[7908,7908],"mapped",[7909]],[[7909,7909],"valid"],[[7910,7910],"mapped",[7911]],[[7911,7911],"valid"],[[7912,7912],"mapped",[7913]],[[7913,7913],"valid"],[[7914,7914],"mapped",[7915]],[[7915,7915],"valid"],[[7916,7916],"mapped",[7917]],[[7917,7917],"valid"],[[7918,7918],"mapped",[7919]],[[7919,7919],"valid"],[[7920,7920],"mapped",[7921]],[[7921,7921],"valid"],[[7922,7922],"mapped",[7923]],[[7923,7923],"valid"],[[7924,7924],"mapped",[7925]],[[7925,7925],"valid"],[[7926,7926],"mapped",[7927]],[[7927,7927],"valid"],[[7928,7928],"mapped",[7929]],[[7929,7929],"valid"],[[7930,7930],"mapped",[7931]],[[7931,7931],"valid"],[[7932,7932],"mapped",[7933]],[[7933,7933],"valid"],[[7934,7934],"mapped",[7935]],[[7935,7935],"valid"],[[7936,7943],"valid"],[[7944,7944],"mapped",[7936]],[[7945,7945],"mapped",[7937]],[[7946,7946],"mapped",[7938]],[[7947,7947],"mapped",[7939]],[[7948,7948],"mapped",[7940]],[[7949,7949],"mapped",[7941]],[[7950,7950],"mapped",[7942]],[[7951,7951],"mapped",[7943]],[[7952,7957],"valid"],[[7958,7959],"disallowed"],[[7960,7960],"mapped",[7952]],[[7961,7961],"mapped",[7953]],[[7962,7962],"mapped",[7954]],[[7963,7963],"mapped",[7955]],[[7964,7964],"mapped",[7956]],[[7965,7965],"mapped",[7957]],[[7966,7967],"disallowed"],[[7968,7975],"valid"],[[7976,7976],"mapped",[7968]],[[7977,7977],"mapped",[7969]],[[7978,7978],"mapped",[7970]],[[7979,7979],"mapped",[7971]],[[7980,7980],"mapped",[7972]],[[7981,7981],"mapped",[7973]],[[7982,7982],"mapped",[7974]],[[7983,7983],"mapped",[7975]],[[7984,7991],"valid"],[[7992,7992],"mapped",[7984]],[[7993,7993],"mapped",[7985]],[[7994,7994],"mapped",[7986]],[[7995,7995],"mapped",[7987]],[[7996,7996],"mapped",[7988]],[[7997,7997],"mapped",[7989]],[[7998,7998],"mapped",[7990]],[[7999,7999],"mapped",[7991]],[[8000,8005],"valid"],[[8006,8007],"disallowed"],[[8008,8008],"mapped",[8000]],[[8009,8009],"mapped",[8001]],[[8010,8010],"mapped",[8002]],[[8011,8011],"mapped",[8003]],[[8012,8012],"mapped",[8004]],[[8013,8013],"mapped",[8005]],[[8014,8015],"disallowed"],[[8016,8023],"valid"],[[8024,8024],"disallowed"],[[8025,8025],"mapped",[8017]],[[8026,8026],"disallowed"],[[8027,8027],"mapped",[8019]],[[8028,8028],"disallowed"],[[8029,8029],"mapped",[8021]],[[8030,8030],"disallowed"],[[8031,8031],"mapped",[8023]],[[8032,8039],"valid"],[[8040,8040],"mapped",[8032]],[[8041,8041],"mapped",[8033]],[[8042,8042],"mapped",[8034]],[[8043,8043],"mapped",[8035]],[[8044,8044],"mapped",[8036]],[[8045,8045],"mapped",[8037]],[[8046,8046],"mapped",[8038]],[[8047,8047],"mapped",[8039]],[[8048,8048],"valid"],[[8049,8049],"mapped",[940]],[[8050,8050],"valid"],[[8051,8051],"mapped",[941]],[[8052,8052],"valid"],[[8053,8053],"mapped",[942]],[[8054,8054],"valid"],[[8055,8055],"mapped",[943]],[[8056,8056],"valid"],[[8057,8057],"mapped",[972]],[[8058,8058],"valid"],[[8059,8059],"mapped",[973]],[[8060,8060],"valid"],[[8061,8061],"mapped",[974]],[[8062,8063],"disallowed"],[[8064,8064],"mapped",[7936,953]],[[8065,8065],"mapped",[7937,953]],[[8066,8066],"mapped",[7938,953]],[[8067,8067],"mapped",[7939,953]],[[8068,8068],"mapped",[7940,953]],[[8069,8069],"mapped",[7941,953]],[[8070,8070],"mapped",[7942,953]],[[8071,8071],"mapped",[7943,953]],[[8072,8072],"mapped",[7936,953]],[[8073,8073],"mapped",[7937,953]],[[8074,8074],"mapped",[7938,953]],[[8075,8075],"mapped",[7939,953]],[[8076,8076],"mapped",[7940,953]],[[8077,8077],"mapped",[7941,953]],[[8078,8078],"mapped",[7942,953]],[[8079,8079],"mapped",[7943,953]],[[8080,8080],"mapped",[7968,953]],[[8081,8081],"mapped",[7969,953]],[[8082,8082],"mapped",[7970,953]],[[8083,8083],"mapped",[7971,953]],[[8084,8084],"mapped",[7972,953]],[[8085,8085],"mapped",[7973,953]],[[8086,8086],"mapped",[7974,953]],[[8087,8087],"mapped",[7975,953]],[[8088,8088],"mapped",[7968,953]],[[8089,8089],"mapped",[7969,953]],[[8090,8090],"mapped",[7970,953]],[[8091,8091],"mapped",[7971,953]],[[8092,8092],"mapped",[7972,953]],[[8093,8093],"mapped",[7973,953]],[[8094,8094],"mapped",[7974,953]],[[8095,8095],"mapped",[7975,953]],[[8096,8096],"mapped",[8032,953]],[[8097,8097],"mapped",[8033,953]],[[8098,8098],"mapped",[8034,953]],[[8099,8099],"mapped",[8035,953]],[[8100,8100],"mapped",[8036,953]],[[8101,8101],"mapped",[8037,953]],[[8102,8102],"mapped",[8038,953]],[[8103,8103],"mapped",[8039,953]],[[8104,8104],"mapped",[8032,953]],[[8105,8105],"mapped",[8033,953]],[[8106,8106],"mapped",[8034,953]],[[8107,8107],"mapped",[8035,953]],[[8108,8108],"mapped",[8036,953]],[[8109,8109],"mapped",[8037,953]],[[8110,8110],"mapped",[8038,953]],[[8111,8111],"mapped",[8039,953]],[[8112,8113],"valid"],[[8114,8114],"mapped",[8048,953]],[[8115,8115],"mapped",[945,953]],[[8116,8116],"mapped",[940,953]],[[8117,8117],"disallowed"],[[8118,8118],"valid"],[[8119,8119],"mapped",[8118,953]],[[8120,8120],"mapped",[8112]],[[8121,8121],"mapped",[8113]],[[8122,8122],"mapped",[8048]],[[8123,8123],"mapped",[940]],[[8124,8124],"mapped",[945,953]],[[8125,8125],"disallowed_STD3_mapped",[32,787]],[[8126,8126],"mapped",[953]],[[8127,8127],"disallowed_STD3_mapped",[32,787]],[[8128,8128],"disallowed_STD3_mapped",[32,834]],[[8129,8129],"disallowed_STD3_mapped",[32,776,834]],[[8130,8130],"mapped",[8052,953]],[[8131,8131],"mapped",[951,953]],[[8132,8132],"mapped",[942,953]],[[8133,8133],"disallowed"],[[8134,8134],"valid"],[[8135,8135],"mapped",[8134,953]],[[8136,8136],"mapped",[8050]],[[8137,8137],"mapped",[941]],[[8138,8138],"mapped",[8052]],[[8139,8139],"mapped",[942]],[[8140,8140],"mapped",[951,953]],[[8141,8141],"disallowed_STD3_mapped",[32,787,768]],[[8142,8142],"disallowed_STD3_mapped",[32,787,769]],[[8143,8143],"disallowed_STD3_mapped",[32,787,834]],[[8144,8146],"valid"],[[8147,8147],"mapped",[912]],[[8148,8149],"disallowed"],[[8150,8151],"valid"],[[8152,8152],"mapped",[8144]],[[8153,8153],"mapped",[8145]],[[8154,8154],"mapped",[8054]],[[8155,8155],"mapped",[943]],[[8156,8156],"disallowed"],[[8157,8157],"disallowed_STD3_mapped",[32,788,768]],[[8158,8158],"disallowed_STD3_mapped",[32,788,769]],[[8159,8159],"disallowed_STD3_mapped",[32,788,834]],[[8160,8162],"valid"],[[8163,8163],"mapped",[944]],[[8164,8167],"valid"],[[8168,8168],"mapped",[8160]],[[8169,8169],"mapped",[8161]],[[8170,8170],"mapped",[8058]],[[8171,8171],"mapped",[973]],[[8172,8172],"mapped",[8165]],[[8173,8173],"disallowed_STD3_mapped",[32,776,768]],[[8174,8174],"disallowed_STD3_mapped",[32,776,769]],[[8175,8175],"disallowed_STD3_mapped",[96]],[[8176,8177],"disallowed"],[[8178,8178],"mapped",[8060,953]],[[8179,8179],"mapped",[969,953]],[[8180,8180],"mapped",[974,953]],[[8181,8181],"disallowed"],[[8182,8182],"valid"],[[8183,8183],"mapped",[8182,953]],[[8184,8184],"mapped",[8056]],[[8185,8185],"mapped",[972]],[[8186,8186],"mapped",[8060]],[[8187,8187],"mapped",[974]],[[8188,8188],"mapped",[969,953]],[[8189,8189],"disallowed_STD3_mapped",[32,769]],[[8190,8190],"disallowed_STD3_mapped",[32,788]],[[8191,8191],"disallowed"],[[8192,8202],"disallowed_STD3_mapped",[32]],[[8203,8203],"ignored"],[[8204,8205],"deviation",[]],[[8206,8207],"disallowed"],[[8208,8208],"valid",[],"NV8"],[[8209,8209],"mapped",[8208]],[[8210,8214],"valid",[],"NV8"],[[8215,8215],"disallowed_STD3_mapped",[32,819]],[[8216,8227],"valid",[],"NV8"],[[8228,8230],"disallowed"],[[8231,8231],"valid",[],"NV8"],[[8232,8238],"disallowed"],[[8239,8239],"disallowed_STD3_mapped",[32]],[[8240,8242],"valid",[],"NV8"],[[8243,8243],"mapped",[8242,8242]],[[8244,8244],"mapped",[8242,8242,8242]],[[8245,8245],"valid",[],"NV8"],[[8246,8246],"mapped",[8245,8245]],[[8247,8247],"mapped",[8245,8245,8245]],[[8248,8251],"valid",[],"NV8"],[[8252,8252],"disallowed_STD3_mapped",[33,33]],[[8253,8253],"valid",[],"NV8"],[[8254,8254],"disallowed_STD3_mapped",[32,773]],[[8255,8262],"valid",[],"NV8"],[[8263,8263],"disallowed_STD3_mapped",[63,63]],[[8264,8264],"disallowed_STD3_mapped",[63,33]],[[8265,8265],"disallowed_STD3_mapped",[33,63]],[[8266,8269],"valid",[],"NV8"],[[8270,8274],"valid",[],"NV8"],[[8275,8276],"valid",[],"NV8"],[[8277,8278],"valid",[],"NV8"],[[8279,8279],"mapped",[8242,8242,8242,8242]],[[8280,8286],"valid",[],"NV8"],[[8287,8287],"disallowed_STD3_mapped",[32]],[[8288,8288],"ignored"],[[8289,8291],"disallowed"],[[8292,8292],"ignored"],[[8293,8293],"disallowed"],[[8294,8297],"disallowed"],[[8298,8303],"disallowed"],[[8304,8304],"mapped",[48]],[[8305,8305],"mapped",[105]],[[8306,8307],"disallowed"],[[8308,8308],"mapped",[52]],[[8309,8309],"mapped",[53]],[[8310,8310],"mapped",[54]],[[8311,8311],"mapped",[55]],[[8312,8312],"mapped",[56]],[[8313,8313],"mapped",[57]],[[8314,8314],"disallowed_STD3_mapped",[43]],[[8315,8315],"mapped",[8722]],[[8316,8316],"disallowed_STD3_mapped",[61]],[[8317,8317],"disallowed_STD3_mapped",[40]],[[8318,8318],"disallowed_STD3_mapped",[41]],[[8319,8319],"mapped",[110]],[[8320,8320],"mapped",[48]],[[8321,8321],"mapped",[49]],[[8322,8322],"mapped",[50]],[[8323,8323],"mapped",[51]],[[8324,8324],"mapped",[52]],[[8325,8325],"mapped",[53]],[[8326,8326],"mapped",[54]],[[8327,8327],"mapped",[55]],[[8328,8328],"mapped",[56]],[[8329,8329],"mapped",[57]],[[8330,8330],"disallowed_STD3_mapped",[43]],[[8331,8331],"mapped",[8722]],[[8332,8332],"disallowed_STD3_mapped",[61]],[[8333,8333],"disallowed_STD3_mapped",[40]],[[8334,8334],"disallowed_STD3_mapped",[41]],[[8335,8335],"disallowed"],[[8336,8336],"mapped",[97]],[[8337,8337],"mapped",[101]],[[8338,8338],"mapped",[111]],[[8339,8339],"mapped",[120]],[[8340,8340],"mapped",[601]],[[8341,8341],"mapped",[104]],[[8342,8342],"mapped",[107]],[[8343,8343],"mapped",[108]],[[8344,8344],"mapped",[109]],[[8345,8345],"mapped",[110]],[[8346,8346],"mapped",[112]],[[8347,8347],"mapped",[115]],[[8348,8348],"mapped",[116]],[[8349,8351],"disallowed"],[[8352,8359],"valid",[],"NV8"],[[8360,8360],"mapped",[114,115]],[[8361,8362],"valid",[],"NV8"],[[8363,8363],"valid",[],"NV8"],[[8364,8364],"valid",[],"NV8"],[[8365,8367],"valid",[],"NV8"],[[8368,8369],"valid",[],"NV8"],[[8370,8373],"valid",[],"NV8"],[[8374,8376],"valid",[],"NV8"],[[8377,8377],"valid",[],"NV8"],[[8378,8378],"valid",[],"NV8"],[[8379,8381],"valid",[],"NV8"],[[8382,8382],"valid",[],"NV8"],[[8383,8399],"disallowed"],[[8400,8417],"valid",[],"NV8"],[[8418,8419],"valid",[],"NV8"],[[8420,8426],"valid",[],"NV8"],[[8427,8427],"valid",[],"NV8"],[[8428,8431],"valid",[],"NV8"],[[8432,8432],"valid",[],"NV8"],[[8433,8447],"disallowed"],[[8448,8448],"disallowed_STD3_mapped",[97,47,99]],[[8449,8449],"disallowed_STD3_mapped",[97,47,115]],[[8450,8450],"mapped",[99]],[[8451,8451],"mapped",[176,99]],[[8452,8452],"valid",[],"NV8"],[[8453,8453],"disallowed_STD3_mapped",[99,47,111]],[[8454,8454],"disallowed_STD3_mapped",[99,47,117]],[[8455,8455],"mapped",[603]],[[8456,8456],"valid",[],"NV8"],[[8457,8457],"mapped",[176,102]],[[8458,8458],"mapped",[103]],[[8459,8462],"mapped",[104]],[[8463,8463],"mapped",[295]],[[8464,8465],"mapped",[105]],[[8466,8467],"mapped",[108]],[[8468,8468],"valid",[],"NV8"],[[8469,8469],"mapped",[110]],[[8470,8470],"mapped",[110,111]],[[8471,8472],"valid",[],"NV8"],[[8473,8473],"mapped",[112]],[[8474,8474],"mapped",[113]],[[8475,8477],"mapped",[114]],[[8478,8479],"valid",[],"NV8"],[[8480,8480],"mapped",[115,109]],[[8481,8481],"mapped",[116,101,108]],[[8482,8482],"mapped",[116,109]],[[8483,8483],"valid",[],"NV8"],[[8484,8484],"mapped",[122]],[[8485,8485],"valid",[],"NV8"],[[8486,8486],"mapped",[969]],[[8487,8487],"valid",[],"NV8"],[[8488,8488],"mapped",[122]],[[8489,8489],"valid",[],"NV8"],[[8490,8490],"mapped",[107]],[[8491,8491],"mapped",[229]],[[8492,8492],"mapped",[98]],[[8493,8493],"mapped",[99]],[[8494,8494],"valid",[],"NV8"],[[8495,8496],"mapped",[101]],[[8497,8497],"mapped",[102]],[[8498,8498],"disallowed"],[[8499,8499],"mapped",[109]],[[8500,8500],"mapped",[111]],[[8501,8501],"mapped",[1488]],[[8502,8502],"mapped",[1489]],[[8503,8503],"mapped",[1490]],[[8504,8504],"mapped",[1491]],[[8505,8505],"mapped",[105]],[[8506,8506],"valid",[],"NV8"],[[8507,8507],"mapped",[102,97,120]],[[8508,8508],"mapped",[960]],[[8509,8510],"mapped",[947]],[[8511,8511],"mapped",[960]],[[8512,8512],"mapped",[8721]],[[8513,8516],"valid",[],"NV8"],[[8517,8518],"mapped",[100]],[[8519,8519],"mapped",[101]],[[8520,8520],"mapped",[105]],[[8521,8521],"mapped",[106]],[[8522,8523],"valid",[],"NV8"],[[8524,8524],"valid",[],"NV8"],[[8525,8525],"valid",[],"NV8"],[[8526,8526],"valid"],[[8527,8527],"valid",[],"NV8"],[[8528,8528],"mapped",[49,8260,55]],[[8529,8529],"mapped",[49,8260,57]],[[8530,8530],"mapped",[49,8260,49,48]],[[8531,8531],"mapped",[49,8260,51]],[[8532,8532],"mapped",[50,8260,51]],[[8533,8533],"mapped",[49,8260,53]],[[8534,8534],"mapped",[50,8260,53]],[[8535,8535],"mapped",[51,8260,53]],[[8536,8536],"mapped",[52,8260,53]],[[8537,8537],"mapped",[49,8260,54]],[[8538,8538],"mapped",[53,8260,54]],[[8539,8539],"mapped",[49,8260,56]],[[8540,8540],"mapped",[51,8260,56]],[[8541,8541],"mapped",[53,8260,56]],[[8542,8542],"mapped",[55,8260,56]],[[8543,8543],"mapped",[49,8260]],[[8544,8544],"mapped",[105]],[[8545,8545],"mapped",[105,105]],[[8546,8546],"mapped",[105,105,105]],[[8547,8547],"mapped",[105,118]],[[8548,8548],"mapped",[118]],[[8549,8549],"mapped",[118,105]],[[8550,8550],"mapped",[118,105,105]],[[8551,8551],"mapped",[118,105,105,105]],[[8552,8552],"mapped",[105,120]],[[8553,8553],"mapped",[120]],[[8554,8554],"mapped",[120,105]],[[8555,8555],"mapped",[120,105,105]],[[8556,8556],"mapped",[108]],[[8557,8557],"mapped",[99]],[[8558,8558],"mapped",[100]],[[8559,8559],"mapped",[109]],[[8560,8560],"mapped",[105]],[[8561,8561],"mapped",[105,105]],[[8562,8562],"mapped",[105,105,105]],[[8563,8563],"mapped",[105,118]],[[8564,8564],"mapped",[118]],[[8565,8565],"mapped",[118,105]],[[8566,8566],"mapped",[118,105,105]],[[8567,8567],"mapped",[118,105,105,105]],[[8568,8568],"mapped",[105,120]],[[8569,8569],"mapped",[120]],[[8570,8570],"mapped",[120,105]],[[8571,8571],"mapped",[120,105,105]],[[8572,8572],"mapped",[108]],[[8573,8573],"mapped",[99]],[[8574,8574],"mapped",[100]],[[8575,8575],"mapped",[109]],[[8576,8578],"valid",[],"NV8"],[[8579,8579],"disallowed"],[[8580,8580],"valid"],[[8581,8584],"valid",[],"NV8"],[[8585,8585],"mapped",[48,8260,51]],[[8586,8587],"valid",[],"NV8"],[[8588,8591],"disallowed"],[[8592,8682],"valid",[],"NV8"],[[8683,8691],"valid",[],"NV8"],[[8692,8703],"valid",[],"NV8"],[[8704,8747],"valid",[],"NV8"],[[8748,8748],"mapped",[8747,8747]],[[8749,8749],"mapped",[8747,8747,8747]],[[8750,8750],"valid",[],"NV8"],[[8751,8751],"mapped",[8750,8750]],[[8752,8752],"mapped",[8750,8750,8750]],[[8753,8799],"valid",[],"NV8"],[[8800,8800],"disallowed_STD3_valid"],[[8801,8813],"valid",[],"NV8"],[[8814,8815],"disallowed_STD3_valid"],[[8816,8945],"valid",[],"NV8"],[[8946,8959],"valid",[],"NV8"],[[8960,8960],"valid",[],"NV8"],[[8961,8961],"valid",[],"NV8"],[[8962,9000],"valid",[],"NV8"],[[9001,9001],"mapped",[12296]],[[9002,9002],"mapped",[12297]],[[9003,9082],"valid",[],"NV8"],[[9083,9083],"valid",[],"NV8"],[[9084,9084],"valid",[],"NV8"],[[9085,9114],"valid",[],"NV8"],[[9115,9166],"valid",[],"NV8"],[[9167,9168],"valid",[],"NV8"],[[9169,9179],"valid",[],"NV8"],[[9180,9191],"valid",[],"NV8"],[[9192,9192],"valid",[],"NV8"],[[9193,9203],"valid",[],"NV8"],[[9204,9210],"valid",[],"NV8"],[[9211,9215],"disallowed"],[[9216,9252],"valid",[],"NV8"],[[9253,9254],"valid",[],"NV8"],[[9255,9279],"disallowed"],[[9280,9290],"valid",[],"NV8"],[[9291,9311],"disallowed"],[[9312,9312],"mapped",[49]],[[9313,9313],"mapped",[50]],[[9314,9314],"mapped",[51]],[[9315,9315],"mapped",[52]],[[9316,9316],"mapped",[53]],[[9317,9317],"mapped",[54]],[[9318,9318],"mapped",[55]],[[9319,9319],"mapped",[56]],[[9320,9320],"mapped",[57]],[[9321,9321],"mapped",[49,48]],[[9322,9322],"mapped",[49,49]],[[9323,9323],"mapped",[49,50]],[[9324,9324],"mapped",[49,51]],[[9325,9325],"mapped",[49,52]],[[9326,9326],"mapped",[49,53]],[[9327,9327],"mapped",[49,54]],[[9328,9328],"mapped",[49,55]],[[9329,9329],"mapped",[49,56]],[[9330,9330],"mapped",[49,57]],[[9331,9331],"mapped",[50,48]],[[9332,9332],"disallowed_STD3_mapped",[40,49,41]],[[9333,9333],"disallowed_STD3_mapped",[40,50,41]],[[9334,9334],"disallowed_STD3_mapped",[40,51,41]],[[9335,9335],"disallowed_STD3_mapped",[40,52,41]],[[9336,9336],"disallowed_STD3_mapped",[40,53,41]],[[9337,9337],"disallowed_STD3_mapped",[40,54,41]],[[9338,9338],"disallowed_STD3_mapped",[40,55,41]],[[9339,9339],"disallowed_STD3_mapped",[40,56,41]],[[9340,9340],"disallowed_STD3_mapped",[40,57,41]],[[9341,9341],"disallowed_STD3_mapped",[40,49,48,41]],[[9342,9342],"disallowed_STD3_mapped",[40,49,49,41]],[[9343,9343],"disallowed_STD3_mapped",[40,49,50,41]],[[9344,9344],"disallowed_STD3_mapped",[40,49,51,41]],[[9345,9345],"disallowed_STD3_mapped",[40,49,52,41]],[[9346,9346],"disallowed_STD3_mapped",[40,49,53,41]],[[9347,9347],"disallowed_STD3_mapped",[40,49,54,41]],[[9348,9348],"disallowed_STD3_mapped",[40,49,55,41]],[[9349,9349],"disallowed_STD3_mapped",[40,49,56,41]],[[9350,9350],"disallowed_STD3_mapped",[40,49,57,41]],[[9351,9351],"disallowed_STD3_mapped",[40,50,48,41]],[[9352,9371],"disallowed"],[[9372,9372],"disallowed_STD3_mapped",[40,97,41]],[[9373,9373],"disallowed_STD3_mapped",[40,98,41]],[[9374,9374],"disallowed_STD3_mapped",[40,99,41]],[[9375,9375],"disallowed_STD3_mapped",[40,100,41]],[[9376,9376],"disallowed_STD3_mapped",[40,101,41]],[[9377,9377],"disallowed_STD3_mapped",[40,102,41]],[[9378,9378],"disallowed_STD3_mapped",[40,103,41]],[[9379,9379],"disallowed_STD3_mapped",[40,104,41]],[[9380,9380],"disallowed_STD3_mapped",[40,105,41]],[[9381,9381],"disallowed_STD3_mapped",[40,106,41]],[[9382,9382],"disallowed_STD3_mapped",[40,107,41]],[[9383,9383],"disallowed_STD3_mapped",[40,108,41]],[[9384,9384],"disallowed_STD3_mapped",[40,109,41]],[[9385,9385],"disallowed_STD3_mapped",[40,110,41]],[[9386,9386],"disallowed_STD3_mapped",[40,111,41]],[[9387,9387],"disallowed_STD3_mapped",[40,112,41]],[[9388,9388],"disallowed_STD3_mapped",[40,113,41]],[[9389,9389],"disallowed_STD3_mapped",[40,114,41]],[[9390,9390],"disallowed_STD3_mapped",[40,115,41]],[[9391,9391],"disallowed_STD3_mapped",[40,116,41]],[[9392,9392],"disallowed_STD3_mapped",[40,117,41]],[[9393,9393],"disallowed_STD3_mapped",[40,118,41]],[[9394,9394],"disallowed_STD3_mapped",[40,119,41]],[[9395,9395],"disallowed_STD3_mapped",[40,120,41]],[[9396,9396],"disallowed_STD3_mapped",[40,121,41]],[[9397,9397],"disallowed_STD3_mapped",[40,122,41]],[[9398,9398],"mapped",[97]],[[9399,9399],"mapped",[98]],[[9400,9400],"mapped",[99]],[[9401,9401],"mapped",[100]],[[9402,9402],"mapped",[101]],[[9403,9403],"mapped",[102]],[[9404,9404],"mapped",[103]],[[9405,9405],"mapped",[104]],[[9406,9406],"mapped",[105]],[[9407,9407],"mapped",[106]],[[9408,9408],"mapped",[107]],[[9409,9409],"mapped",[108]],[[9410,9410],"mapped",[109]],[[9411,9411],"mapped",[110]],[[9412,9412],"mapped",[111]],[[9413,9413],"mapped",[112]],[[9414,9414],"mapped",[113]],[[9415,9415],"mapped",[114]],[[9416,9416],"mapped",[115]],[[9417,9417],"mapped",[116]],[[9418,9418],"mapped",[117]],[[9419,9419],"mapped",[118]],[[9420,9420],"mapped",[119]],[[9421,9421],"mapped",[120]],[[9422,9422],"mapped",[121]],[[9423,9423],"mapped",[122]],[[9424,9424],"mapped",[97]],[[9425,9425],"mapped",[98]],[[9426,9426],"mapped",[99]],[[9427,9427],"mapped",[100]],[[9428,9428],"mapped",[101]],[[9429,9429],"mapped",[102]],[[9430,9430],"mapped",[103]],[[9431,9431],"mapped",[104]],[[9432,9432],"mapped",[105]],[[9433,9433],"mapped",[106]],[[9434,9434],"mapped",[107]],[[9435,9435],"mapped",[108]],[[9436,9436],"mapped",[109]],[[9437,9437],"mapped",[110]],[[9438,9438],"mapped",[111]],[[9439,9439],"mapped",[112]],[[9440,9440],"mapped",[113]],[[9441,9441],"mapped",[114]],[[9442,9442],"mapped",[115]],[[9443,9443],"mapped",[116]],[[9444,9444],"mapped",[117]],[[9445,9445],"mapped",[118]],[[9446,9446],"mapped",[119]],[[9447,9447],"mapped",[120]],[[9448,9448],"mapped",[121]],[[9449,9449],"mapped",[122]],[[9450,9450],"mapped",[48]],[[9451,9470],"valid",[],"NV8"],[[9471,9471],"valid",[],"NV8"],[[9472,9621],"valid",[],"NV8"],[[9622,9631],"valid",[],"NV8"],[[9632,9711],"valid",[],"NV8"],[[9712,9719],"valid",[],"NV8"],[[9720,9727],"valid",[],"NV8"],[[9728,9747],"valid",[],"NV8"],[[9748,9749],"valid",[],"NV8"],[[9750,9751],"valid",[],"NV8"],[[9752,9752],"valid",[],"NV8"],[[9753,9753],"valid",[],"NV8"],[[9754,9839],"valid",[],"NV8"],[[9840,9841],"valid",[],"NV8"],[[9842,9853],"valid",[],"NV8"],[[9854,9855],"valid",[],"NV8"],[[9856,9865],"valid",[],"NV8"],[[9866,9873],"valid",[],"NV8"],[[9874,9884],"valid",[],"NV8"],[[9885,9885],"valid",[],"NV8"],[[9886,9887],"valid",[],"NV8"],[[9888,9889],"valid",[],"NV8"],[[9890,9905],"valid",[],"NV8"],[[9906,9906],"valid",[],"NV8"],[[9907,9916],"valid",[],"NV8"],[[9917,9919],"valid",[],"NV8"],[[9920,9923],"valid",[],"NV8"],[[9924,9933],"valid",[],"NV8"],[[9934,9934],"valid",[],"NV8"],[[9935,9953],"valid",[],"NV8"],[[9954,9954],"valid",[],"NV8"],[[9955,9955],"valid",[],"NV8"],[[9956,9959],"valid",[],"NV8"],[[9960,9983],"valid",[],"NV8"],[[9984,9984],"valid",[],"NV8"],[[9985,9988],"valid",[],"NV8"],[[9989,9989],"valid",[],"NV8"],[[9990,9993],"valid",[],"NV8"],[[9994,9995],"valid",[],"NV8"],[[9996,10023],"valid",[],"NV8"],[[10024,10024],"valid",[],"NV8"],[[10025,10059],"valid",[],"NV8"],[[10060,10060],"valid",[],"NV8"],[[10061,10061],"valid",[],"NV8"],[[10062,10062],"valid",[],"NV8"],[[10063,10066],"valid",[],"NV8"],[[10067,10069],"valid",[],"NV8"],[[10070,10070],"valid",[],"NV8"],[[10071,10071],"valid",[],"NV8"],[[10072,10078],"valid",[],"NV8"],[[10079,10080],"valid",[],"NV8"],[[10081,10087],"valid",[],"NV8"],[[10088,10101],"valid",[],"NV8"],[[10102,10132],"valid",[],"NV8"],[[10133,10135],"valid",[],"NV8"],[[10136,10159],"valid",[],"NV8"],[[10160,10160],"valid",[],"NV8"],[[10161,10174],"valid",[],"NV8"],[[10175,10175],"valid",[],"NV8"],[[10176,10182],"valid",[],"NV8"],[[10183,10186],"valid",[],"NV8"],[[10187,10187],"valid",[],"NV8"],[[10188,10188],"valid",[],"NV8"],[[10189,10189],"valid",[],"NV8"],[[10190,10191],"valid",[],"NV8"],[[10192,10219],"valid",[],"NV8"],[[10220,10223],"valid",[],"NV8"],[[10224,10239],"valid",[],"NV8"],[[10240,10495],"valid",[],"NV8"],[[10496,10763],"valid",[],"NV8"],[[10764,10764],"mapped",[8747,8747,8747,8747]],[[10765,10867],"valid",[],"NV8"],[[10868,10868],"disallowed_STD3_mapped",[58,58,61]],[[10869,10869],"disallowed_STD3_mapped",[61,61]],[[10870,10870],"disallowed_STD3_mapped",[61,61,61]],[[10871,10971],"valid",[],"NV8"],[[10972,10972],"mapped",[10973,824]],[[10973,11007],"valid",[],"NV8"],[[11008,11021],"valid",[],"NV8"],[[11022,11027],"valid",[],"NV8"],[[11028,11034],"valid",[],"NV8"],[[11035,11039],"valid",[],"NV8"],[[11040,11043],"valid",[],"NV8"],[[11044,11084],"valid",[],"NV8"],[[11085,11087],"valid",[],"NV8"],[[11088,11092],"valid",[],"NV8"],[[11093,11097],"valid",[],"NV8"],[[11098,11123],"valid",[],"NV8"],[[11124,11125],"disallowed"],[[11126,11157],"valid",[],"NV8"],[[11158,11159],"disallowed"],[[11160,11193],"valid",[],"NV8"],[[11194,11196],"disallowed"],[[11197,11208],"valid",[],"NV8"],[[11209,11209],"disallowed"],[[11210,11217],"valid",[],"NV8"],[[11218,11243],"disallowed"],[[11244,11247],"valid",[],"NV8"],[[11248,11263],"disallowed"],[[11264,11264],"mapped",[11312]],[[11265,11265],"mapped",[11313]],[[11266,11266],"mapped",[11314]],[[11267,11267],"mapped",[11315]],[[11268,11268],"mapped",[11316]],[[11269,11269],"mapped",[11317]],[[11270,11270],"mapped",[11318]],[[11271,11271],"mapped",[11319]],[[11272,11272],"mapped",[11320]],[[11273,11273],"mapped",[11321]],[[11274,11274],"mapped",[11322]],[[11275,11275],"mapped",[11323]],[[11276,11276],"mapped",[11324]],[[11277,11277],"mapped",[11325]],[[11278,11278],"mapped",[11326]],[[11279,11279],"mapped",[11327]],[[11280,11280],"mapped",[11328]],[[11281,11281],"mapped",[11329]],[[11282,11282],"mapped",[11330]],[[11283,11283],"mapped",[11331]],[[11284,11284],"mapped",[11332]],[[11285,11285],"mapped",[11333]],[[11286,11286],"mapped",[11334]],[[11287,11287],"mapped",[11335]],[[11288,11288],"mapped",[11336]],[[11289,11289],"mapped",[11337]],[[11290,11290],"mapped",[11338]],[[11291,11291],"mapped",[11339]],[[11292,11292],"mapped",[11340]],[[11293,11293],"mapped",[11341]],[[11294,11294],"mapped",[11342]],[[11295,11295],"mapped",[11343]],[[11296,11296],"mapped",[11344]],[[11297,11297],"mapped",[11345]],[[11298,11298],"mapped",[11346]],[[11299,11299],"mapped",[11347]],[[11300,11300],"mapped",[11348]],[[11301,11301],"mapped",[11349]],[[11302,11302],"mapped",[11350]],[[11303,11303],"mapped",[11351]],[[11304,11304],"mapped",[11352]],[[11305,11305],"mapped",[11353]],[[11306,11306],"mapped",[11354]],[[11307,11307],"mapped",[11355]],[[11308,11308],"mapped",[11356]],[[11309,11309],"mapped",[11357]],[[11310,11310],"mapped",[11358]],[[11311,11311],"disallowed"],[[11312,11358],"valid"],[[11359,11359],"disallowed"],[[11360,11360],"mapped",[11361]],[[11361,11361],"valid"],[[11362,11362],"mapped",[619]],[[11363,11363],"mapped",[7549]],[[11364,11364],"mapped",[637]],[[11365,11366],"valid"],[[11367,11367],"mapped",[11368]],[[11368,11368],"valid"],[[11369,11369],"mapped",[11370]],[[11370,11370],"valid"],[[11371,11371],"mapped",[11372]],[[11372,11372],"valid"],[[11373,11373],"mapped",[593]],[[11374,11374],"mapped",[625]],[[11375,11375],"mapped",[592]],[[11376,11376],"mapped",[594]],[[11377,11377],"valid"],[[11378,11378],"mapped",[11379]],[[11379,11379],"valid"],[[11380,11380],"valid"],[[11381,11381],"mapped",[11382]],[[11382,11383],"valid"],[[11384,11387],"valid"],[[11388,11388],"mapped",[106]],[[11389,11389],"mapped",[118]],[[11390,11390],"mapped",[575]],[[11391,11391],"mapped",[576]],[[11392,11392],"mapped",[11393]],[[11393,11393],"valid"],[[11394,11394],"mapped",[11395]],[[11395,11395],"valid"],[[11396,11396],"mapped",[11397]],[[11397,11397],"valid"],[[11398,11398],"mapped",[11399]],[[11399,11399],"valid"],[[11400,11400],"mapped",[11401]],[[11401,11401],"valid"],[[11402,11402],"mapped",[11403]],[[11403,11403],"valid"],[[11404,11404],"mapped",[11405]],[[11405,11405],"valid"],[[11406,11406],"mapped",[11407]],[[11407,11407],"valid"],[[11408,11408],"mapped",[11409]],[[11409,11409],"valid"],[[11410,11410],"mapped",[11411]],[[11411,11411],"valid"],[[11412,11412],"mapped",[11413]],[[11413,11413],"valid"],[[11414,11414],"mapped",[11415]],[[11415,11415],"valid"],[[11416,11416],"mapped",[11417]],[[11417,11417],"valid"],[[11418,11418],"mapped",[11419]],[[11419,11419],"valid"],[[11420,11420],"mapped",[11421]],[[11421,11421],"valid"],[[11422,11422],"mapped",[11423]],[[11423,11423],"valid"],[[11424,11424],"mapped",[11425]],[[11425,11425],"valid"],[[11426,11426],"mapped",[11427]],[[11427,11427],"valid"],[[11428,11428],"mapped",[11429]],[[11429,11429],"valid"],[[11430,11430],"mapped",[11431]],[[11431,11431],"valid"],[[11432,11432],"mapped",[11433]],[[11433,11433],"valid"],[[11434,11434],"mapped",[11435]],[[11435,11435],"valid"],[[11436,11436],"mapped",[11437]],[[11437,11437],"valid"],[[11438,11438],"mapped",[11439]],[[11439,11439],"valid"],[[11440,11440],"mapped",[11441]],[[11441,11441],"valid"],[[11442,11442],"mapped",[11443]],[[11443,11443],"valid"],[[11444,11444],"mapped",[11445]],[[11445,11445],"valid"],[[11446,11446],"mapped",[11447]],[[11447,11447],"valid"],[[11448,11448],"mapped",[11449]],[[11449,11449],"valid"],[[11450,11450],"mapped",[11451]],[[11451,11451],"valid"],[[11452,11452],"mapped",[11453]],[[11453,11453],"valid"],[[11454,11454],"mapped",[11455]],[[11455,11455],"valid"],[[11456,11456],"mapped",[11457]],[[11457,11457],"valid"],[[11458,11458],"mapped",[11459]],[[11459,11459],"valid"],[[11460,11460],"mapped",[11461]],[[11461,11461],"valid"],[[11462,11462],"mapped",[11463]],[[11463,11463],"valid"],[[11464,11464],"mapped",[11465]],[[11465,11465],"valid"],[[11466,11466],"mapped",[11467]],[[11467,11467],"valid"],[[11468,11468],"mapped",[11469]],[[11469,11469],"valid"],[[11470,11470],"mapped",[11471]],[[11471,11471],"valid"],[[11472,11472],"mapped",[11473]],[[11473,11473],"valid"],[[11474,11474],"mapped",[11475]],[[11475,11475],"valid"],[[11476,11476],"mapped",[11477]],[[11477,11477],"valid"],[[11478,11478],"mapped",[11479]],[[11479,11479],"valid"],[[11480,11480],"mapped",[11481]],[[11481,11481],"valid"],[[11482,11482],"mapped",[11483]],[[11483,11483],"valid"],[[11484,11484],"mapped",[11485]],[[11485,11485],"valid"],[[11486,11486],"mapped",[11487]],[[11487,11487],"valid"],[[11488,11488],"mapped",[11489]],[[11489,11489],"valid"],[[11490,11490],"mapped",[11491]],[[11491,11492],"valid"],[[11493,11498],"valid",[],"NV8"],[[11499,11499],"mapped",[11500]],[[11500,11500],"valid"],[[11501,11501],"mapped",[11502]],[[11502,11505],"valid"],[[11506,11506],"mapped",[11507]],[[11507,11507],"valid"],[[11508,11512],"disallowed"],[[11513,11519],"valid",[],"NV8"],[[11520,11557],"valid"],[[11558,11558],"disallowed"],[[11559,11559],"valid"],[[11560,11564],"disallowed"],[[11565,11565],"valid"],[[11566,11567],"disallowed"],[[11568,11621],"valid"],[[11622,11623],"valid"],[[11624,11630],"disallowed"],[[11631,11631],"mapped",[11617]],[[11632,11632],"valid",[],"NV8"],[[11633,11646],"disallowed"],[[11647,11647],"valid"],[[11648,11670],"valid"],[[11671,11679],"disallowed"],[[11680,11686],"valid"],[[11687,11687],"disallowed"],[[11688,11694],"valid"],[[11695,11695],"disallowed"],[[11696,11702],"valid"],[[11703,11703],"disallowed"],[[11704,11710],"valid"],[[11711,11711],"disallowed"],[[11712,11718],"valid"],[[11719,11719],"disallowed"],[[11720,11726],"valid"],[[11727,11727],"disallowed"],[[11728,11734],"valid"],[[11735,11735],"disallowed"],[[11736,11742],"valid"],[[11743,11743],"disallowed"],[[11744,11775],"valid"],[[11776,11799],"valid",[],"NV8"],[[11800,11803],"valid",[],"NV8"],[[11804,11805],"valid",[],"NV8"],[[11806,11822],"valid",[],"NV8"],[[11823,11823],"valid"],[[11824,11824],"valid",[],"NV8"],[[11825,11825],"valid",[],"NV8"],[[11826,11835],"valid",[],"NV8"],[[11836,11842],"valid",[],"NV8"],[[11843,11903],"disallowed"],[[11904,11929],"valid",[],"NV8"],[[11930,11930],"disallowed"],[[11931,11934],"valid",[],"NV8"],[[11935,11935],"mapped",[27597]],[[11936,12018],"valid",[],"NV8"],[[12019,12019],"mapped",[40863]],[[12020,12031],"disallowed"],[[12032,12032],"mapped",[19968]],[[12033,12033],"mapped",[20008]],[[12034,12034],"mapped",[20022]],[[12035,12035],"mapped",[20031]],[[12036,12036],"mapped",[20057]],[[12037,12037],"mapped",[20101]],[[12038,12038],"mapped",[20108]],[[12039,12039],"mapped",[20128]],[[12040,12040],"mapped",[20154]],[[12041,12041],"mapped",[20799]],[[12042,12042],"mapped",[20837]],[[12043,12043],"mapped",[20843]],[[12044,12044],"mapped",[20866]],[[12045,12045],"mapped",[20886]],[[12046,12046],"mapped",[20907]],[[12047,12047],"mapped",[20960]],[[12048,12048],"mapped",[20981]],[[12049,12049],"mapped",[20992]],[[12050,12050],"mapped",[21147]],[[12051,12051],"mapped",[21241]],[[12052,12052],"mapped",[21269]],[[12053,12053],"mapped",[21274]],[[12054,12054],"mapped",[21304]],[[12055,12055],"mapped",[21313]],[[12056,12056],"mapped",[21340]],[[12057,12057],"mapped",[21353]],[[12058,12058],"mapped",[21378]],[[12059,12059],"mapped",[21430]],[[12060,12060],"mapped",[21448]],[[12061,12061],"mapped",[21475]],[[12062,12062],"mapped",[22231]],[[12063,12063],"mapped",[22303]],[[12064,12064],"mapped",[22763]],[[12065,12065],"mapped",[22786]],[[12066,12066],"mapped",[22794]],[[12067,12067],"mapped",[22805]],[[12068,12068],"mapped",[22823]],[[12069,12069],"mapped",[22899]],[[12070,12070],"mapped",[23376]],[[12071,12071],"mapped",[23424]],[[12072,12072],"mapped",[23544]],[[12073,12073],"mapped",[23567]],[[12074,12074],"mapped",[23586]],[[12075,12075],"mapped",[23608]],[[12076,12076],"mapped",[23662]],[[12077,12077],"mapped",[23665]],[[12078,12078],"mapped",[24027]],[[12079,12079],"mapped",[24037]],[[12080,12080],"mapped",[24049]],[[12081,12081],"mapped",[24062]],[[12082,12082],"mapped",[24178]],[[12083,12083],"mapped",[24186]],[[12084,12084],"mapped",[24191]],[[12085,12085],"mapped",[24308]],[[12086,12086],"mapped",[24318]],[[12087,12087],"mapped",[24331]],[[12088,12088],"mapped",[24339]],[[12089,12089],"mapped",[24400]],[[12090,12090],"mapped",[24417]],[[12091,12091],"mapped",[24435]],[[12092,12092],"mapped",[24515]],[[12093,12093],"mapped",[25096]],[[12094,12094],"mapped",[25142]],[[12095,12095],"mapped",[25163]],[[12096,12096],"mapped",[25903]],[[12097,12097],"mapped",[25908]],[[12098,12098],"mapped",[25991]],[[12099,12099],"mapped",[26007]],[[12100,12100],"mapped",[26020]],[[12101,12101],"mapped",[26041]],[[12102,12102],"mapped",[26080]],[[12103,12103],"mapped",[26085]],[[12104,12104],"mapped",[26352]],[[12105,12105],"mapped",[26376]],[[12106,12106],"mapped",[26408]],[[12107,12107],"mapped",[27424]],[[12108,12108],"mapped",[27490]],[[12109,12109],"mapped",[27513]],[[12110,12110],"mapped",[27571]],[[12111,12111],"mapped",[27595]],[[12112,12112],"mapped",[27604]],[[12113,12113],"mapped",[27611]],[[12114,12114],"mapped",[27663]],[[12115,12115],"mapped",[27668]],[[12116,12116],"mapped",[27700]],[[12117,12117],"mapped",[28779]],[[12118,12118],"mapped",[29226]],[[12119,12119],"mapped",[29238]],[[12120,12120],"mapped",[29243]],[[12121,12121],"mapped",[29247]],[[12122,12122],"mapped",[29255]],[[12123,12123],"mapped",[29273]],[[12124,12124],"mapped",[29275]],[[12125,12125],"mapped",[29356]],[[12126,12126],"mapped",[29572]],[[12127,12127],"mapped",[29577]],[[12128,12128],"mapped",[29916]],[[12129,12129],"mapped",[29926]],[[12130,12130],"mapped",[29976]],[[12131,12131],"mapped",[29983]],[[12132,12132],"mapped",[29992]],[[12133,12133],"mapped",[30000]],[[12134,12134],"mapped",[30091]],[[12135,12135],"mapped",[30098]],[[12136,12136],"mapped",[30326]],[[12137,12137],"mapped",[30333]],[[12138,12138],"mapped",[30382]],[[12139,12139],"mapped",[30399]],[[12140,12140],"mapped",[30446]],[[12141,12141],"mapped",[30683]],[[12142,12142],"mapped",[30690]],[[12143,12143],"mapped",[30707]],[[12144,12144],"mapped",[31034]],[[12145,12145],"mapped",[31160]],[[12146,12146],"mapped",[31166]],[[12147,12147],"mapped",[31348]],[[12148,12148],"mapped",[31435]],[[12149,12149],"mapped",[31481]],[[12150,12150],"mapped",[31859]],[[12151,12151],"mapped",[31992]],[[12152,12152],"mapped",[32566]],[[12153,12153],"mapped",[32593]],[[12154,12154],"mapped",[32650]],[[12155,12155],"mapped",[32701]],[[12156,12156],"mapped",[32769]],[[12157,12157],"mapped",[32780]],[[12158,12158],"mapped",[32786]],[[12159,12159],"mapped",[32819]],[[12160,12160],"mapped",[32895]],[[12161,12161],"mapped",[32905]],[[12162,12162],"mapped",[33251]],[[12163,12163],"mapped",[33258]],[[12164,12164],"mapped",[33267]],[[12165,12165],"mapped",[33276]],[[12166,12166],"mapped",[33292]],[[12167,12167],"mapped",[33307]],[[12168,12168],"mapped",[33311]],[[12169,12169],"mapped",[33390]],[[12170,12170],"mapped",[33394]],[[12171,12171],"mapped",[33400]],[[12172,12172],"mapped",[34381]],[[12173,12173],"mapped",[34411]],[[12174,12174],"mapped",[34880]],[[12175,12175],"mapped",[34892]],[[12176,12176],"mapped",[34915]],[[12177,12177],"mapped",[35198]],[[12178,12178],"mapped",[35211]],[[12179,12179],"mapped",[35282]],[[12180,12180],"mapped",[35328]],[[12181,12181],"mapped",[35895]],[[12182,12182],"mapped",[35910]],[[12183,12183],"mapped",[35925]],[[12184,12184],"mapped",[35960]],[[12185,12185],"mapped",[35997]],[[12186,12186],"mapped",[36196]],[[12187,12187],"mapped",[36208]],[[12188,12188],"mapped",[36275]],[[12189,12189],"mapped",[36523]],[[12190,12190],"mapped",[36554]],[[12191,12191],"mapped",[36763]],[[12192,12192],"mapped",[36784]],[[12193,12193],"mapped",[36789]],[[12194,12194],"mapped",[37009]],[[12195,12195],"mapped",[37193]],[[12196,12196],"mapped",[37318]],[[12197,12197],"mapped",[37324]],[[12198,12198],"mapped",[37329]],[[12199,12199],"mapped",[38263]],[[12200,12200],"mapped",[38272]],[[12201,12201],"mapped",[38428]],[[12202,12202],"mapped",[38582]],[[12203,12203],"mapped",[38585]],[[12204,12204],"mapped",[38632]],[[12205,12205],"mapped",[38737]],[[12206,12206],"mapped",[38750]],[[12207,12207],"mapped",[38754]],[[12208,12208],"mapped",[38761]],[[12209,12209],"mapped",[38859]],[[12210,12210],"mapped",[38893]],[[12211,12211],"mapped",[38899]],[[12212,12212],"mapped",[38913]],[[12213,12213],"mapped",[39080]],[[12214,12214],"mapped",[39131]],[[12215,12215],"mapped",[39135]],[[12216,12216],"mapped",[39318]],[[12217,12217],"mapped",[39321]],[[12218,12218],"mapped",[39340]],[[12219,12219],"mapped",[39592]],[[12220,12220],"mapped",[39640]],[[12221,12221],"mapped",[39647]],[[12222,12222],"mapped",[39717]],[[12223,12223],"mapped",[39727]],[[12224,12224],"mapped",[39730]],[[12225,12225],"mapped",[39740]],[[12226,12226],"mapped",[39770]],[[12227,12227],"mapped",[40165]],[[12228,12228],"mapped",[40565]],[[12229,12229],"mapped",[40575]],[[12230,12230],"mapped",[40613]],[[12231,12231],"mapped",[40635]],[[12232,12232],"mapped",[40643]],[[12233,12233],"mapped",[40653]],[[12234,12234],"mapped",[40657]],[[12235,12235],"mapped",[40697]],[[12236,12236],"mapped",[40701]],[[12237,12237],"mapped",[40718]],[[12238,12238],"mapped",[40723]],[[12239,12239],"mapped",[40736]],[[12240,12240],"mapped",[40763]],[[12241,12241],"mapped",[40778]],[[12242,12242],"mapped",[40786]],[[12243,12243],"mapped",[40845]],[[12244,12244],"mapped",[40860]],[[12245,12245],"mapped",[40864]],[[12246,12271],"disallowed"],[[12272,12283],"disallowed"],[[12284,12287],"disallowed"],[[12288,12288],"disallowed_STD3_mapped",[32]],[[12289,12289],"valid",[],"NV8"],[[12290,12290],"mapped",[46]],[[12291,12292],"valid",[],"NV8"],[[12293,12295],"valid"],[[12296,12329],"valid",[],"NV8"],[[12330,12333],"valid"],[[12334,12341],"valid",[],"NV8"],[[12342,12342],"mapped",[12306]],[[12343,12343],"valid",[],"NV8"],[[12344,12344],"mapped",[21313]],[[12345,12345],"mapped",[21316]],[[12346,12346],"mapped",[21317]],[[12347,12347],"valid",[],"NV8"],[[12348,12348],"valid"],[[12349,12349],"valid",[],"NV8"],[[12350,12350],"valid",[],"NV8"],[[12351,12351],"valid",[],"NV8"],[[12352,12352],"disallowed"],[[12353,12436],"valid"],[[12437,12438],"valid"],[[12439,12440],"disallowed"],[[12441,12442],"valid"],[[12443,12443],"disallowed_STD3_mapped",[32,12441]],[[12444,12444],"disallowed_STD3_mapped",[32,12442]],[[12445,12446],"valid"],[[12447,12447],"mapped",[12424,12426]],[[12448,12448],"valid",[],"NV8"],[[12449,12542],"valid"],[[12543,12543],"mapped",[12467,12488]],[[12544,12548],"disallowed"],[[12549,12588],"valid"],[[12589,12589],"valid"],[[12590,12592],"disallowed"],[[12593,12593],"mapped",[4352]],[[12594,12594],"mapped",[4353]],[[12595,12595],"mapped",[4522]],[[12596,12596],"mapped",[4354]],[[12597,12597],"mapped",[4524]],[[12598,12598],"mapped",[4525]],[[12599,12599],"mapped",[4355]],[[12600,12600],"mapped",[4356]],[[12601,12601],"mapped",[4357]],[[12602,12602],"mapped",[4528]],[[12603,12603],"mapped",[4529]],[[12604,12604],"mapped",[4530]],[[12605,12605],"mapped",[4531]],[[12606,12606],"mapped",[4532]],[[12607,12607],"mapped",[4533]],[[12608,12608],"mapped",[4378]],[[12609,12609],"mapped",[4358]],[[12610,12610],"mapped",[4359]],[[12611,12611],"mapped",[4360]],[[12612,12612],"mapped",[4385]],[[12613,12613],"mapped",[4361]],[[12614,12614],"mapped",[4362]],[[12615,12615],"mapped",[4363]],[[12616,12616],"mapped",[4364]],[[12617,12617],"mapped",[4365]],[[12618,12618],"mapped",[4366]],[[12619,12619],"mapped",[4367]],[[12620,12620],"mapped",[4368]],[[12621,12621],"mapped",[4369]],[[12622,12622],"mapped",[4370]],[[12623,12623],"mapped",[4449]],[[12624,12624],"mapped",[4450]],[[12625,12625],"mapped",[4451]],[[12626,12626],"mapped",[4452]],[[12627,12627],"mapped",[4453]],[[12628,12628],"mapped",[4454]],[[12629,12629],"mapped",[4455]],[[12630,12630],"mapped",[4456]],[[12631,12631],"mapped",[4457]],[[12632,12632],"mapped",[4458]],[[12633,12633],"mapped",[4459]],[[12634,12634],"mapped",[4460]],[[12635,12635],"mapped",[4461]],[[12636,12636],"mapped",[4462]],[[12637,12637],"mapped",[4463]],[[12638,12638],"mapped",[4464]],[[12639,12639],"mapped",[4465]],[[12640,12640],"mapped",[4466]],[[12641,12641],"mapped",[4467]],[[12642,12642],"mapped",[4468]],[[12643,12643],"mapped",[4469]],[[12644,12644],"disallowed"],[[12645,12645],"mapped",[4372]],[[12646,12646],"mapped",[4373]],[[12647,12647],"mapped",[4551]],[[12648,12648],"mapped",[4552]],[[12649,12649],"mapped",[4556]],[[12650,12650],"mapped",[4558]],[[12651,12651],"mapped",[4563]],[[12652,12652],"mapped",[4567]],[[12653,12653],"mapped",[4569]],[[12654,12654],"mapped",[4380]],[[12655,12655],"mapped",[4573]],[[12656,12656],"mapped",[4575]],[[12657,12657],"mapped",[4381]],[[12658,12658],"mapped",[4382]],[[12659,12659],"mapped",[4384]],[[12660,12660],"mapped",[4386]],[[12661,12661],"mapped",[4387]],[[12662,12662],"mapped",[4391]],[[12663,12663],"mapped",[4393]],[[12664,12664],"mapped",[4395]],[[12665,12665],"mapped",[4396]],[[12666,12666],"mapped",[4397]],[[12667,12667],"mapped",[4398]],[[12668,12668],"mapped",[4399]],[[12669,12669],"mapped",[4402]],[[12670,12670],"mapped",[4406]],[[12671,12671],"mapped",[4416]],[[12672,12672],"mapped",[4423]],[[12673,12673],"mapped",[4428]],[[12674,12674],"mapped",[4593]],[[12675,12675],"mapped",[4594]],[[12676,12676],"mapped",[4439]],[[12677,12677],"mapped",[4440]],[[12678,12678],"mapped",[4441]],[[12679,12679],"mapped",[4484]],[[12680,12680],"mapped",[4485]],[[12681,12681],"mapped",[4488]],[[12682,12682],"mapped",[4497]],[[12683,12683],"mapped",[4498]],[[12684,12684],"mapped",[4500]],[[12685,12685],"mapped",[4510]],[[12686,12686],"mapped",[4513]],[[12687,12687],"disallowed"],[[12688,12689],"valid",[],"NV8"],[[12690,12690],"mapped",[19968]],[[12691,12691],"mapped",[20108]],[[12692,12692],"mapped",[19977]],[[12693,12693],"mapped",[22235]],[[12694,12694],"mapped",[19978]],[[12695,12695],"mapped",[20013]],[[12696,12696],"mapped",[19979]],[[12697,12697],"mapped",[30002]],[[12698,12698],"mapped",[20057]],[[12699,12699],"mapped",[19993]],[[12700,12700],"mapped",[19969]],[[12701,12701],"mapped",[22825]],[[12702,12702],"mapped",[22320]],[[12703,12703],"mapped",[20154]],[[12704,12727],"valid"],[[12728,12730],"valid"],[[12731,12735],"disallowed"],[[12736,12751],"valid",[],"NV8"],[[12752,12771],"valid",[],"NV8"],[[12772,12783],"disallowed"],[[12784,12799],"valid"],[[12800,12800],"disallowed_STD3_mapped",[40,4352,41]],[[12801,12801],"disallowed_STD3_mapped",[40,4354,41]],[[12802,12802],"disallowed_STD3_mapped",[40,4355,41]],[[12803,12803],"disallowed_STD3_mapped",[40,4357,41]],[[12804,12804],"disallowed_STD3_mapped",[40,4358,41]],[[12805,12805],"disallowed_STD3_mapped",[40,4359,41]],[[12806,12806],"disallowed_STD3_mapped",[40,4361,41]],[[12807,12807],"disallowed_STD3_mapped",[40,4363,41]],[[12808,12808],"disallowed_STD3_mapped",[40,4364,41]],[[12809,12809],"disallowed_STD3_mapped",[40,4366,41]],[[12810,12810],"disallowed_STD3_mapped",[40,4367,41]],[[12811,12811],"disallowed_STD3_mapped",[40,4368,41]],[[12812,12812],"disallowed_STD3_mapped",[40,4369,41]],[[12813,12813],"disallowed_STD3_mapped",[40,4370,41]],[[12814,12814],"disallowed_STD3_mapped",[40,44032,41]],[[12815,12815],"disallowed_STD3_mapped",[40,45208,41]],[[12816,12816],"disallowed_STD3_mapped",[40,45796,41]],[[12817,12817],"disallowed_STD3_mapped",[40,46972,41]],[[12818,12818],"disallowed_STD3_mapped",[40,47560,41]],[[12819,12819],"disallowed_STD3_mapped",[40,48148,41]],[[12820,12820],"disallowed_STD3_mapped",[40,49324,41]],[[12821,12821],"disallowed_STD3_mapped",[40,50500,41]],[[12822,12822],"disallowed_STD3_mapped",[40,51088,41]],[[12823,12823],"disallowed_STD3_mapped",[40,52264,41]],[[12824,12824],"disallowed_STD3_mapped",[40,52852,41]],[[12825,12825],"disallowed_STD3_mapped",[40,53440,41]],[[12826,12826],"disallowed_STD3_mapped",[40,54028,41]],[[12827,12827],"disallowed_STD3_mapped",[40,54616,41]],[[12828,12828],"disallowed_STD3_mapped",[40,51452,41]],[[12829,12829],"disallowed_STD3_mapped",[40,50724,51204,41]],[[12830,12830],"disallowed_STD3_mapped",[40,50724,54980,41]],[[12831,12831],"disallowed"],[[12832,12832],"disallowed_STD3_mapped",[40,19968,41]],[[12833,12833],"disallowed_STD3_mapped",[40,20108,41]],[[12834,12834],"disallowed_STD3_mapped",[40,19977,41]],[[12835,12835],"disallowed_STD3_mapped",[40,22235,41]],[[12836,12836],"disallowed_STD3_mapped",[40,20116,41]],[[12837,12837],"disallowed_STD3_mapped",[40,20845,41]],[[12838,12838],"disallowed_STD3_mapped",[40,19971,41]],[[12839,12839],"disallowed_STD3_mapped",[40,20843,41]],[[12840,12840],"disallowed_STD3_mapped",[40,20061,41]],[[12841,12841],"disallowed_STD3_mapped",[40,21313,41]],[[12842,12842],"disallowed_STD3_mapped",[40,26376,41]],[[12843,12843],"disallowed_STD3_mapped",[40,28779,41]],[[12844,12844],"disallowed_STD3_mapped",[40,27700,41]],[[12845,12845],"disallowed_STD3_mapped",[40,26408,41]],[[12846,12846],"disallowed_STD3_mapped",[40,37329,41]],[[12847,12847],"disallowed_STD3_mapped",[40,22303,41]],[[12848,12848],"disallowed_STD3_mapped",[40,26085,41]],[[12849,12849],"disallowed_STD3_mapped",[40,26666,41]],[[12850,12850],"disallowed_STD3_mapped",[40,26377,41]],[[12851,12851],"disallowed_STD3_mapped",[40,31038,41]],[[12852,12852],"disallowed_STD3_mapped",[40,21517,41]],[[12853,12853],"disallowed_STD3_mapped",[40,29305,41]],[[12854,12854],"disallowed_STD3_mapped",[40,36001,41]],[[12855,12855],"disallowed_STD3_mapped",[40,31069,41]],[[12856,12856],"disallowed_STD3_mapped",[40,21172,41]],[[12857,12857],"disallowed_STD3_mapped",[40,20195,41]],[[12858,12858],"disallowed_STD3_mapped",[40,21628,41]],[[12859,12859],"disallowed_STD3_mapped",[40,23398,41]],[[12860,12860],"disallowed_STD3_mapped",[40,30435,41]],[[12861,12861],"disallowed_STD3_mapped",[40,20225,41]],[[12862,12862],"disallowed_STD3_mapped",[40,36039,41]],[[12863,12863],"disallowed_STD3_mapped",[40,21332,41]],[[12864,12864],"disallowed_STD3_mapped",[40,31085,41]],[[12865,12865],"disallowed_STD3_mapped",[40,20241,41]],[[12866,12866],"disallowed_STD3_mapped",[40,33258,41]],[[12867,12867],"disallowed_STD3_mapped",[40,33267,41]],[[12868,12868],"mapped",[21839]],[[12869,12869],"mapped",[24188]],[[12870,12870],"mapped",[25991]],[[12871,12871],"mapped",[31631]],[[12872,12879],"valid",[],"NV8"],[[12880,12880],"mapped",[112,116,101]],[[12881,12881],"mapped",[50,49]],[[12882,12882],"mapped",[50,50]],[[12883,12883],"mapped",[50,51]],[[12884,12884],"mapped",[50,52]],[[12885,12885],"mapped",[50,53]],[[12886,12886],"mapped",[50,54]],[[12887,12887],"mapped",[50,55]],[[12888,12888],"mapped",[50,56]],[[12889,12889],"mapped",[50,57]],[[12890,12890],"mapped",[51,48]],[[12891,12891],"mapped",[51,49]],[[12892,12892],"mapped",[51,50]],[[12893,12893],"mapped",[51,51]],[[12894,12894],"mapped",[51,52]],[[12895,12895],"mapped",[51,53]],[[12896,12896],"mapped",[4352]],[[12897,12897],"mapped",[4354]],[[12898,12898],"mapped",[4355]],[[12899,12899],"mapped",[4357]],[[12900,12900],"mapped",[4358]],[[12901,12901],"mapped",[4359]],[[12902,12902],"mapped",[4361]],[[12903,12903],"mapped",[4363]],[[12904,12904],"mapped",[4364]],[[12905,12905],"mapped",[4366]],[[12906,12906],"mapped",[4367]],[[12907,12907],"mapped",[4368]],[[12908,12908],"mapped",[4369]],[[12909,12909],"mapped",[4370]],[[12910,12910],"mapped",[44032]],[[12911,12911],"mapped",[45208]],[[12912,12912],"mapped",[45796]],[[12913,12913],"mapped",[46972]],[[12914,12914],"mapped",[47560]],[[12915,12915],"mapped",[48148]],[[12916,12916],"mapped",[49324]],[[12917,12917],"mapped",[50500]],[[12918,12918],"mapped",[51088]],[[12919,12919],"mapped",[52264]],[[12920,12920],"mapped",[52852]],[[12921,12921],"mapped",[53440]],[[12922,12922],"mapped",[54028]],[[12923,12923],"mapped",[54616]],[[12924,12924],"mapped",[52280,44256]],[[12925,12925],"mapped",[51452,51032]],[[12926,12926],"mapped",[50864]],[[12927,12927],"valid",[],"NV8"],[[12928,12928],"mapped",[19968]],[[12929,12929],"mapped",[20108]],[[12930,12930],"mapped",[19977]],[[12931,12931],"mapped",[22235]],[[12932,12932],"mapped",[20116]],[[12933,12933],"mapped",[20845]],[[12934,12934],"mapped",[19971]],[[12935,12935],"mapped",[20843]],[[12936,12936],"mapped",[20061]],[[12937,12937],"mapped",[21313]],[[12938,12938],"mapped",[26376]],[[12939,12939],"mapped",[28779]],[[12940,12940],"mapped",[27700]],[[12941,12941],"mapped",[26408]],[[12942,12942],"mapped",[37329]],[[12943,12943],"mapped",[22303]],[[12944,12944],"mapped",[26085]],[[12945,12945],"mapped",[26666]],[[12946,12946],"mapped",[26377]],[[12947,12947],"mapped",[31038]],[[12948,12948],"mapped",[21517]],[[12949,12949],"mapped",[29305]],[[12950,12950],"mapped",[36001]],[[12951,12951],"mapped",[31069]],[[12952,12952],"mapped",[21172]],[[12953,12953],"mapped",[31192]],[[12954,12954],"mapped",[30007]],[[12955,12955],"mapped",[22899]],[[12956,12956],"mapped",[36969]],[[12957,12957],"mapped",[20778]],[[12958,12958],"mapped",[21360]],[[12959,12959],"mapped",[27880]],[[12960,12960],"mapped",[38917]],[[12961,12961],"mapped",[20241]],[[12962,12962],"mapped",[20889]],[[12963,12963],"mapped",[27491]],[[12964,12964],"mapped",[19978]],[[12965,12965],"mapped",[20013]],[[12966,12966],"mapped",[19979]],[[12967,12967],"mapped",[24038]],[[12968,12968],"mapped",[21491]],[[12969,12969],"mapped",[21307]],[[12970,12970],"mapped",[23447]],[[12971,12971],"mapped",[23398]],[[12972,12972],"mapped",[30435]],[[12973,12973],"mapped",[20225]],[[12974,12974],"mapped",[36039]],[[12975,12975],"mapped",[21332]],[[12976,12976],"mapped",[22812]],[[12977,12977],"mapped",[51,54]],[[12978,12978],"mapped",[51,55]],[[12979,12979],"mapped",[51,56]],[[12980,12980],"mapped",[51,57]],[[12981,12981],"mapped",[52,48]],[[12982,12982],"mapped",[52,49]],[[12983,12983],"mapped",[52,50]],[[12984,12984],"mapped",[52,51]],[[12985,12985],"mapped",[52,52]],[[12986,12986],"mapped",[52,53]],[[12987,12987],"mapped",[52,54]],[[12988,12988],"mapped",[52,55]],[[12989,12989],"mapped",[52,56]],[[12990,12990],"mapped",[52,57]],[[12991,12991],"mapped",[53,48]],[[12992,12992],"mapped",[49,26376]],[[12993,12993],"mapped",[50,26376]],[[12994,12994],"mapped",[51,26376]],[[12995,12995],"mapped",[52,26376]],[[12996,12996],"mapped",[53,26376]],[[12997,12997],"mapped",[54,26376]],[[12998,12998],"mapped",[55,26376]],[[12999,12999],"mapped",[56,26376]],[[13000,13000],"mapped",[57,26376]],[[13001,13001],"mapped",[49,48,26376]],[[13002,13002],"mapped",[49,49,26376]],[[13003,13003],"mapped",[49,50,26376]],[[13004,13004],"mapped",[104,103]],[[13005,13005],"mapped",[101,114,103]],[[13006,13006],"mapped",[101,118]],[[13007,13007],"mapped",[108,116,100]],[[13008,13008],"mapped",[12450]],[[13009,13009],"mapped",[12452]],[[13010,13010],"mapped",[12454]],[[13011,13011],"mapped",[12456]],[[13012,13012],"mapped",[12458]],[[13013,13013],"mapped",[12459]],[[13014,13014],"mapped",[12461]],[[13015,13015],"mapped",[12463]],[[13016,13016],"mapped",[12465]],[[13017,13017],"mapped",[12467]],[[13018,13018],"mapped",[12469]],[[13019,13019],"mapped",[12471]],[[13020,13020],"mapped",[12473]],[[13021,13021],"mapped",[12475]],[[13022,13022],"mapped",[12477]],[[13023,13023],"mapped",[12479]],[[13024,13024],"mapped",[12481]],[[13025,13025],"mapped",[12484]],[[13026,13026],"mapped",[12486]],[[13027,13027],"mapped",[12488]],[[13028,13028],"mapped",[12490]],[[13029,13029],"mapped",[12491]],[[13030,13030],"mapped",[12492]],[[13031,13031],"mapped",[12493]],[[13032,13032],"mapped",[12494]],[[13033,13033],"mapped",[12495]],[[13034,13034],"mapped",[12498]],[[13035,13035],"mapped",[12501]],[[13036,13036],"mapped",[12504]],[[13037,13037],"mapped",[12507]],[[13038,13038],"mapped",[12510]],[[13039,13039],"mapped",[12511]],[[13040,13040],"mapped",[12512]],[[13041,13041],"mapped",[12513]],[[13042,13042],"mapped",[12514]],[[13043,13043],"mapped",[12516]],[[13044,13044],"mapped",[12518]],[[13045,13045],"mapped",[12520]],[[13046,13046],"mapped",[12521]],[[13047,13047],"mapped",[12522]],[[13048,13048],"mapped",[12523]],[[13049,13049],"mapped",[12524]],[[13050,13050],"mapped",[12525]],[[13051,13051],"mapped",[12527]],[[13052,13052],"mapped",[12528]],[[13053,13053],"mapped",[12529]],[[13054,13054],"mapped",[12530]],[[13055,13055],"disallowed"],[[13056,13056],"mapped",[12450,12497,12540,12488]],[[13057,13057],"mapped",[12450,12523,12501,12449]],[[13058,13058],"mapped",[12450,12531,12506,12450]],[[13059,13059],"mapped",[12450,12540,12523]],[[13060,13060],"mapped",[12452,12491,12531,12464]],[[13061,13061],"mapped",[12452,12531,12481]],[[13062,13062],"mapped",[12454,12457,12531]],[[13063,13063],"mapped",[12456,12473,12463,12540,12489]],[[13064,13064],"mapped",[12456,12540,12459,12540]],[[13065,13065],"mapped",[12458,12531,12473]],[[13066,13066],"mapped",[12458,12540,12512]],[[13067,13067],"mapped",[12459,12452,12522]],[[13068,13068],"mapped",[12459,12521,12483,12488]],[[13069,13069],"mapped",[12459,12525,12522,12540]],[[13070,13070],"mapped",[12460,12525,12531]],[[13071,13071],"mapped",[12460,12531,12510]],[[13072,13072],"mapped",[12462,12460]],[[13073,13073],"mapped",[12462,12491,12540]],[[13074,13074],"mapped",[12461,12517,12522,12540]],[[13075,13075],"mapped",[12462,12523,12480,12540]],[[13076,13076],"mapped",[12461,12525]],[[13077,13077],"mapped",[12461,12525,12464,12521,12512]],[[13078,13078],"mapped",[12461,12525,12513,12540,12488,12523]],[[13079,13079],"mapped",[12461,12525,12527,12483,12488]],[[13080,13080],"mapped",[12464,12521,12512]],[[13081,13081],"mapped",[12464,12521,12512,12488,12531]],[[13082,13082],"mapped",[12463,12523,12476,12452,12525]],[[13083,13083],"mapped",[12463,12525,12540,12493]],[[13084,13084],"mapped",[12465,12540,12473]],[[13085,13085],"mapped",[12467,12523,12490]],[[13086,13086],"mapped",[12467,12540,12509]],[[13087,13087],"mapped",[12469,12452,12463,12523]],[[13088,13088],"mapped",[12469,12531,12481,12540,12512]],[[13089,13089],"mapped",[12471,12522,12531,12464]],[[13090,13090],"mapped",[12475,12531,12481]],[[13091,13091],"mapped",[12475,12531,12488]],[[13092,13092],"mapped",[12480,12540,12473]],[[13093,13093],"mapped",[12487,12471]],[[13094,13094],"mapped",[12489,12523]],[[13095,13095],"mapped",[12488,12531]],[[13096,13096],"mapped",[12490,12494]],[[13097,13097],"mapped",[12494,12483,12488]],[[13098,13098],"mapped",[12495,12452,12484]],[[13099,13099],"mapped",[12497,12540,12475,12531,12488]],[[13100,13100],"mapped",[12497,12540,12484]],[[13101,13101],"mapped",[12496,12540,12524,12523]],[[13102,13102],"mapped",[12500,12450,12473,12488,12523]],[[13103,13103],"mapped",[12500,12463,12523]],[[13104,13104],"mapped",[12500,12467]],[[13105,13105],"mapped",[12499,12523]],[[13106,13106],"mapped",[12501,12449,12521,12483,12489]],[[13107,13107],"mapped",[12501,12451,12540,12488]],[[13108,13108],"mapped",[12502,12483,12471,12455,12523]],[[13109,13109],"mapped",[12501,12521,12531]],[[13110,13110],"mapped",[12504,12463,12479,12540,12523]],[[13111,13111],"mapped",[12506,12477]],[[13112,13112],"mapped",[12506,12491,12498]],[[13113,13113],"mapped",[12504,12523,12484]],[[13114,13114],"mapped",[12506,12531,12473]],[[13115,13115],"mapped",[12506,12540,12472]],[[13116,13116],"mapped",[12505,12540,12479]],[[13117,13117],"mapped",[12509,12452,12531,12488]],[[13118,13118],"mapped",[12508,12523,12488]],[[13119,13119],"mapped",[12507,12531]],[[13120,13120],"mapped",[12509,12531,12489]],[[13121,13121],"mapped",[12507,12540,12523]],[[13122,13122],"mapped",[12507,12540,12531]],[[13123,13123],"mapped",[12510,12452,12463,12525]],[[13124,13124],"mapped",[12510,12452,12523]],[[13125,13125],"mapped",[12510,12483,12495]],[[13126,13126],"mapped",[12510,12523,12463]],[[13127,13127],"mapped",[12510,12531,12471,12519,12531]],[[13128,13128],"mapped",[12511,12463,12525,12531]],[[13129,13129],"mapped",[12511,12522]],[[13130,13130],"mapped",[12511,12522,12496,12540,12523]],[[13131,13131],"mapped",[12513,12460]],[[13132,13132],"mapped",[12513,12460,12488,12531]],[[13133,13133],"mapped",[12513,12540,12488,12523]],[[13134,13134],"mapped",[12516,12540,12489]],[[13135,13135],"mapped",[12516,12540,12523]],[[13136,13136],"mapped",[12518,12450,12531]],[[13137,13137],"mapped",[12522,12483,12488,12523]],[[13138,13138],"mapped",[12522,12521]],[[13139,13139],"mapped",[12523,12500,12540]],[[13140,13140],"mapped",[12523,12540,12502,12523]],[[13141,13141],"mapped",[12524,12512]],[[13142,13142],"mapped",[12524,12531,12488,12466,12531]],[[13143,13143],"mapped",[12527,12483,12488]],[[13144,13144],"mapped",[48,28857]],[[13145,13145],"mapped",[49,28857]],[[13146,13146],"mapped",[50,28857]],[[13147,13147],"mapped",[51,28857]],[[13148,13148],"mapped",[52,28857]],[[13149,13149],"mapped",[53,28857]],[[13150,13150],"mapped",[54,28857]],[[13151,13151],"mapped",[55,28857]],[[13152,13152],"mapped",[56,28857]],[[13153,13153],"mapped",[57,28857]],[[13154,13154],"mapped",[49,48,28857]],[[13155,13155],"mapped",[49,49,28857]],[[13156,13156],"mapped",[49,50,28857]],[[13157,13157],"mapped",[49,51,28857]],[[13158,13158],"mapped",[49,52,28857]],[[13159,13159],"mapped",[49,53,28857]],[[13160,13160],"mapped",[49,54,28857]],[[13161,13161],"mapped",[49,55,28857]],[[13162,13162],"mapped",[49,56,28857]],[[13163,13163],"mapped",[49,57,28857]],[[13164,13164],"mapped",[50,48,28857]],[[13165,13165],"mapped",[50,49,28857]],[[13166,13166],"mapped",[50,50,28857]],[[13167,13167],"mapped",[50,51,28857]],[[13168,13168],"mapped",[50,52,28857]],[[13169,13169],"mapped",[104,112,97]],[[13170,13170],"mapped",[100,97]],[[13171,13171],"mapped",[97,117]],[[13172,13172],"mapped",[98,97,114]],[[13173,13173],"mapped",[111,118]],[[13174,13174],"mapped",[112,99]],[[13175,13175],"mapped",[100,109]],[[13176,13176],"mapped",[100,109,50]],[[13177,13177],"mapped",[100,109,51]],[[13178,13178],"mapped",[105,117]],[[13179,13179],"mapped",[24179,25104]],[[13180,13180],"mapped",[26157,21644]],[[13181,13181],"mapped",[22823,27491]],[[13182,13182],"mapped",[26126,27835]],[[13183,13183],"mapped",[26666,24335,20250,31038]],[[13184,13184],"mapped",[112,97]],[[13185,13185],"mapped",[110,97]],[[13186,13186],"mapped",[956,97]],[[13187,13187],"mapped",[109,97]],[[13188,13188],"mapped",[107,97]],[[13189,13189],"mapped",[107,98]],[[13190,13190],"mapped",[109,98]],[[13191,13191],"mapped",[103,98]],[[13192,13192],"mapped",[99,97,108]],[[13193,13193],"mapped",[107,99,97,108]],[[13194,13194],"mapped",[112,102]],[[13195,13195],"mapped",[110,102]],[[13196,13196],"mapped",[956,102]],[[13197,13197],"mapped",[956,103]],[[13198,13198],"mapped",[109,103]],[[13199,13199],"mapped",[107,103]],[[13200,13200],"mapped",[104,122]],[[13201,13201],"mapped",[107,104,122]],[[13202,13202],"mapped",[109,104,122]],[[13203,13203],"mapped",[103,104,122]],[[13204,13204],"mapped",[116,104,122]],[[13205,13205],"mapped",[956,108]],[[13206,13206],"mapped",[109,108]],[[13207,13207],"mapped",[100,108]],[[13208,13208],"mapped",[107,108]],[[13209,13209],"mapped",[102,109]],[[13210,13210],"mapped",[110,109]],[[13211,13211],"mapped",[956,109]],[[13212,13212],"mapped",[109,109]],[[13213,13213],"mapped",[99,109]],[[13214,13214],"mapped",[107,109]],[[13215,13215],"mapped",[109,109,50]],[[13216,13216],"mapped",[99,109,50]],[[13217,13217],"mapped",[109,50]],[[13218,13218],"mapped",[107,109,50]],[[13219,13219],"mapped",[109,109,51]],[[13220,13220],"mapped",[99,109,51]],[[13221,13221],"mapped",[109,51]],[[13222,13222],"mapped",[107,109,51]],[[13223,13223],"mapped",[109,8725,115]],[[13224,13224],"mapped",[109,8725,115,50]],[[13225,13225],"mapped",[112,97]],[[13226,13226],"mapped",[107,112,97]],[[13227,13227],"mapped",[109,112,97]],[[13228,13228],"mapped",[103,112,97]],[[13229,13229],"mapped",[114,97,100]],[[13230,13230],"mapped",[114,97,100,8725,115]],[[13231,13231],"mapped",[114,97,100,8725,115,50]],[[13232,13232],"mapped",[112,115]],[[13233,13233],"mapped",[110,115]],[[13234,13234],"mapped",[956,115]],[[13235,13235],"mapped",[109,115]],[[13236,13236],"mapped",[112,118]],[[13237,13237],"mapped",[110,118]],[[13238,13238],"mapped",[956,118]],[[13239,13239],"mapped",[109,118]],[[13240,13240],"mapped",[107,118]],[[13241,13241],"mapped",[109,118]],[[13242,13242],"mapped",[112,119]],[[13243,13243],"mapped",[110,119]],[[13244,13244],"mapped",[956,119]],[[13245,13245],"mapped",[109,119]],[[13246,13246],"mapped",[107,119]],[[13247,13247],"mapped",[109,119]],[[13248,13248],"mapped",[107,969]],[[13249,13249],"mapped",[109,969]],[[13250,13250],"disallowed"],[[13251,13251],"mapped",[98,113]],[[13252,13252],"mapped",[99,99]],[[13253,13253],"mapped",[99,100]],[[13254,13254],"mapped",[99,8725,107,103]],[[13255,13255],"disallowed"],[[13256,13256],"mapped",[100,98]],[[13257,13257],"mapped",[103,121]],[[13258,13258],"mapped",[104,97]],[[13259,13259],"mapped",[104,112]],[[13260,13260],"mapped",[105,110]],[[13261,13261],"mapped",[107,107]],[[13262,13262],"mapped",[107,109]],[[13263,13263],"mapped",[107,116]],[[13264,13264],"mapped",[108,109]],[[13265,13265],"mapped",[108,110]],[[13266,13266],"mapped",[108,111,103]],[[13267,13267],"mapped",[108,120]],[[13268,13268],"mapped",[109,98]],[[13269,13269],"mapped",[109,105,108]],[[13270,13270],"mapped",[109,111,108]],[[13271,13271],"mapped",[112,104]],[[13272,13272],"disallowed"],[[13273,13273],"mapped",[112,112,109]],[[13274,13274],"mapped",[112,114]],[[13275,13275],"mapped",[115,114]],[[13276,13276],"mapped",[115,118]],[[13277,13277],"mapped",[119,98]],[[13278,13278],"mapped",[118,8725,109]],[[13279,13279],"mapped",[97,8725,109]],[[13280,13280],"mapped",[49,26085]],[[13281,13281],"mapped",[50,26085]],[[13282,13282],"mapped",[51,26085]],[[13283,13283],"mapped",[52,26085]],[[13284,13284],"mapped",[53,26085]],[[13285,13285],"mapped",[54,26085]],[[13286,13286],"mapped",[55,26085]],[[13287,13287],"mapped",[56,26085]],[[13288,13288],"mapped",[57,26085]],[[13289,13289],"mapped",[49,48,26085]],[[13290,13290],"mapped",[49,49,26085]],[[13291,13291],"mapped",[49,50,26085]],[[13292,13292],"mapped",[49,51,26085]],[[13293,13293],"mapped",[49,52,26085]],[[13294,13294],"mapped",[49,53,26085]],[[13295,13295],"mapped",[49,54,26085]],[[13296,13296],"mapped",[49,55,26085]],[[13297,13297],"mapped",[49,56,26085]],[[13298,13298],"mapped",[49,57,26085]],[[13299,13299],"mapped",[50,48,26085]],[[13300,13300],"mapped",[50,49,26085]],[[13301,13301],"mapped",[50,50,26085]],[[13302,13302],"mapped",[50,51,26085]],[[13303,13303],"mapped",[50,52,26085]],[[13304,13304],"mapped",[50,53,26085]],[[13305,13305],"mapped",[50,54,26085]],[[13306,13306],"mapped",[50,55,26085]],[[13307,13307],"mapped",[50,56,26085]],[[13308,13308],"mapped",[50,57,26085]],[[13309,13309],"mapped",[51,48,26085]],[[13310,13310],"mapped",[51,49,26085]],[[13311,13311],"mapped",[103,97,108]],[[13312,19893],"valid"],[[19894,19903],"disallowed"],[[19904,19967],"valid",[],"NV8"],[[19968,40869],"valid"],[[40870,40891],"valid"],[[40892,40899],"valid"],[[40900,40907],"valid"],[[40908,40908],"valid"],[[40909,40917],"valid"],[[40918,40959],"disallowed"],[[40960,42124],"valid"],[[42125,42127],"disallowed"],[[42128,42145],"valid",[],"NV8"],[[42146,42147],"valid",[],"NV8"],[[42148,42163],"valid",[],"NV8"],[[42164,42164],"valid",[],"NV8"],[[42165,42176],"valid",[],"NV8"],[[42177,42177],"valid",[],"NV8"],[[42178,42180],"valid",[],"NV8"],[[42181,42181],"valid",[],"NV8"],[[42182,42182],"valid",[],"NV8"],[[42183,42191],"disallowed"],[[42192,42237],"valid"],[[42238,42239],"valid",[],"NV8"],[[42240,42508],"valid"],[[42509,42511],"valid",[],"NV8"],[[42512,42539],"valid"],[[42540,42559],"disallowed"],[[42560,42560],"mapped",[42561]],[[42561,42561],"valid"],[[42562,42562],"mapped",[42563]],[[42563,42563],"valid"],[[42564,42564],"mapped",[42565]],[[42565,42565],"valid"],[[42566,42566],"mapped",[42567]],[[42567,42567],"valid"],[[42568,42568],"mapped",[42569]],[[42569,42569],"valid"],[[42570,42570],"mapped",[42571]],[[42571,42571],"valid"],[[42572,42572],"mapped",[42573]],[[42573,42573],"valid"],[[42574,42574],"mapped",[42575]],[[42575,42575],"valid"],[[42576,42576],"mapped",[42577]],[[42577,42577],"valid"],[[42578,42578],"mapped",[42579]],[[42579,42579],"valid"],[[42580,42580],"mapped",[42581]],[[42581,42581],"valid"],[[42582,42582],"mapped",[42583]],[[42583,42583],"valid"],[[42584,42584],"mapped",[42585]],[[42585,42585],"valid"],[[42586,42586],"mapped",[42587]],[[42587,42587],"valid"],[[42588,42588],"mapped",[42589]],[[42589,42589],"valid"],[[42590,42590],"mapped",[42591]],[[42591,42591],"valid"],[[42592,42592],"mapped",[42593]],[[42593,42593],"valid"],[[42594,42594],"mapped",[42595]],[[42595,42595],"valid"],[[42596,42596],"mapped",[42597]],[[42597,42597],"valid"],[[42598,42598],"mapped",[42599]],[[42599,42599],"valid"],[[42600,42600],"mapped",[42601]],[[42601,42601],"valid"],[[42602,42602],"mapped",[42603]],[[42603,42603],"valid"],[[42604,42604],"mapped",[42605]],[[42605,42607],"valid"],[[42608,42611],"valid",[],"NV8"],[[42612,42619],"valid"],[[42620,42621],"valid"],[[42622,42622],"valid",[],"NV8"],[[42623,42623],"valid"],[[42624,42624],"mapped",[42625]],[[42625,42625],"valid"],[[42626,42626],"mapped",[42627]],[[42627,42627],"valid"],[[42628,42628],"mapped",[42629]],[[42629,42629],"valid"],[[42630,42630],"mapped",[42631]],[[42631,42631],"valid"],[[42632,42632],"mapped",[42633]],[[42633,42633],"valid"],[[42634,42634],"mapped",[42635]],[[42635,42635],"valid"],[[42636,42636],"mapped",[42637]],[[42637,42637],"valid"],[[42638,42638],"mapped",[42639]],[[42639,42639],"valid"],[[42640,42640],"mapped",[42641]],[[42641,42641],"valid"],[[42642,42642],"mapped",[42643]],[[42643,42643],"valid"],[[42644,42644],"mapped",[42645]],[[42645,42645],"valid"],[[42646,42646],"mapped",[42647]],[[42647,42647],"valid"],[[42648,42648],"mapped",[42649]],[[42649,42649],"valid"],[[42650,42650],"mapped",[42651]],[[42651,42651],"valid"],[[42652,42652],"mapped",[1098]],[[42653,42653],"mapped",[1100]],[[42654,42654],"valid"],[[42655,42655],"valid"],[[42656,42725],"valid"],[[42726,42735],"valid",[],"NV8"],[[42736,42737],"valid"],[[42738,42743],"valid",[],"NV8"],[[42744,42751],"disallowed"],[[42752,42774],"valid",[],"NV8"],[[42775,42778],"valid"],[[42779,42783],"valid"],[[42784,42785],"valid",[],"NV8"],[[42786,42786],"mapped",[42787]],[[42787,42787],"valid"],[[42788,42788],"mapped",[42789]],[[42789,42789],"valid"],[[42790,42790],"mapped",[42791]],[[42791,42791],"valid"],[[42792,42792],"mapped",[42793]],[[42793,42793],"valid"],[[42794,42794],"mapped",[42795]],[[42795,42795],"valid"],[[42796,42796],"mapped",[42797]],[[42797,42797],"valid"],[[42798,42798],"mapped",[42799]],[[42799,42801],"valid"],[[42802,42802],"mapped",[42803]],[[42803,42803],"valid"],[[42804,42804],"mapped",[42805]],[[42805,42805],"valid"],[[42806,42806],"mapped",[42807]],[[42807,42807],"valid"],[[42808,42808],"mapped",[42809]],[[42809,42809],"valid"],[[42810,42810],"mapped",[42811]],[[42811,42811],"valid"],[[42812,42812],"mapped",[42813]],[[42813,42813],"valid"],[[42814,42814],"mapped",[42815]],[[42815,42815],"valid"],[[42816,42816],"mapped",[42817]],[[42817,42817],"valid"],[[42818,42818],"mapped",[42819]],[[42819,42819],"valid"],[[42820,42820],"mapped",[42821]],[[42821,42821],"valid"],[[42822,42822],"mapped",[42823]],[[42823,42823],"valid"],[[42824,42824],"mapped",[42825]],[[42825,42825],"valid"],[[42826,42826],"mapped",[42827]],[[42827,42827],"valid"],[[42828,42828],"mapped",[42829]],[[42829,42829],"valid"],[[42830,42830],"mapped",[42831]],[[42831,42831],"valid"],[[42832,42832],"mapped",[42833]],[[42833,42833],"valid"],[[42834,42834],"mapped",[42835]],[[42835,42835],"valid"],[[42836,42836],"mapped",[42837]],[[42837,42837],"valid"],[[42838,42838],"mapped",[42839]],[[42839,42839],"valid"],[[42840,42840],"mapped",[42841]],[[42841,42841],"valid"],[[42842,42842],"mapped",[42843]],[[42843,42843],"valid"],[[42844,42844],"mapped",[42845]],[[42845,42845],"valid"],[[42846,42846],"mapped",[42847]],[[42847,42847],"valid"],[[42848,42848],"mapped",[42849]],[[42849,42849],"valid"],[[42850,42850],"mapped",[42851]],[[42851,42851],"valid"],[[42852,42852],"mapped",[42853]],[[42853,42853],"valid"],[[42854,42854],"mapped",[42855]],[[42855,42855],"valid"],[[42856,42856],"mapped",[42857]],[[42857,42857],"valid"],[[42858,42858],"mapped",[42859]],[[42859,42859],"valid"],[[42860,42860],"mapped",[42861]],[[42861,42861],"valid"],[[42862,42862],"mapped",[42863]],[[42863,42863],"valid"],[[42864,42864],"mapped",[42863]],[[42865,42872],"valid"],[[42873,42873],"mapped",[42874]],[[42874,42874],"valid"],[[42875,42875],"mapped",[42876]],[[42876,42876],"valid"],[[42877,42877],"mapped",[7545]],[[42878,42878],"mapped",[42879]],[[42879,42879],"valid"],[[42880,42880],"mapped",[42881]],[[42881,42881],"valid"],[[42882,42882],"mapped",[42883]],[[42883,42883],"valid"],[[42884,42884],"mapped",[42885]],[[42885,42885],"valid"],[[42886,42886],"mapped",[42887]],[[42887,42888],"valid"],[[42889,42890],"valid",[],"NV8"],[[42891,42891],"mapped",[42892]],[[42892,42892],"valid"],[[42893,42893],"mapped",[613]],[[42894,42894],"valid"],[[42895,42895],"valid"],[[42896,42896],"mapped",[42897]],[[42897,42897],"valid"],[[42898,42898],"mapped",[42899]],[[42899,42899],"valid"],[[42900,42901],"valid"],[[42902,42902],"mapped",[42903]],[[42903,42903],"valid"],[[42904,42904],"mapped",[42905]],[[42905,42905],"valid"],[[42906,42906],"mapped",[42907]],[[42907,42907],"valid"],[[42908,42908],"mapped",[42909]],[[42909,42909],"valid"],[[42910,42910],"mapped",[42911]],[[42911,42911],"valid"],[[42912,42912],"mapped",[42913]],[[42913,42913],"valid"],[[42914,42914],"mapped",[42915]],[[42915,42915],"valid"],[[42916,42916],"mapped",[42917]],[[42917,42917],"valid"],[[42918,42918],"mapped",[42919]],[[42919,42919],"valid"],[[42920,42920],"mapped",[42921]],[[42921,42921],"valid"],[[42922,42922],"mapped",[614]],[[42923,42923],"mapped",[604]],[[42924,42924],"mapped",[609]],[[42925,42925],"mapped",[620]],[[42926,42927],"disallowed"],[[42928,42928],"mapped",[670]],[[42929,42929],"mapped",[647]],[[42930,42930],"mapped",[669]],[[42931,42931],"mapped",[43859]],[[42932,42932],"mapped",[42933]],[[42933,42933],"valid"],[[42934,42934],"mapped",[42935]],[[42935,42935],"valid"],[[42936,42998],"disallowed"],[[42999,42999],"valid"],[[43000,43000],"mapped",[295]],[[43001,43001],"mapped",[339]],[[43002,43002],"valid"],[[43003,43007],"valid"],[[43008,43047],"valid"],[[43048,43051],"valid",[],"NV8"],[[43052,43055],"disallowed"],[[43056,43065],"valid",[],"NV8"],[[43066,43071],"disallowed"],[[43072,43123],"valid"],[[43124,43127],"valid",[],"NV8"],[[43128,43135],"disallowed"],[[43136,43204],"valid"],[[43205,43213],"disallowed"],[[43214,43215],"valid",[],"NV8"],[[43216,43225],"valid"],[[43226,43231],"disallowed"],[[43232,43255],"valid"],[[43256,43258],"valid",[],"NV8"],[[43259,43259],"valid"],[[43260,43260],"valid",[],"NV8"],[[43261,43261],"valid"],[[43262,43263],"disallowed"],[[43264,43309],"valid"],[[43310,43311],"valid",[],"NV8"],[[43312,43347],"valid"],[[43348,43358],"disallowed"],[[43359,43359],"valid",[],"NV8"],[[43360,43388],"valid",[],"NV8"],[[43389,43391],"disallowed"],[[43392,43456],"valid"],[[43457,43469],"valid",[],"NV8"],[[43470,43470],"disallowed"],[[43471,43481],"valid"],[[43482,43485],"disallowed"],[[43486,43487],"valid",[],"NV8"],[[43488,43518],"valid"],[[43519,43519],"disallowed"],[[43520,43574],"valid"],[[43575,43583],"disallowed"],[[43584,43597],"valid"],[[43598,43599],"disallowed"],[[43600,43609],"valid"],[[43610,43611],"disallowed"],[[43612,43615],"valid",[],"NV8"],[[43616,43638],"valid"],[[43639,43641],"valid",[],"NV8"],[[43642,43643],"valid"],[[43644,43647],"valid"],[[43648,43714],"valid"],[[43715,43738],"disallowed"],[[43739,43741],"valid"],[[43742,43743],"valid",[],"NV8"],[[43744,43759],"valid"],[[43760,43761],"valid",[],"NV8"],[[43762,43766],"valid"],[[43767,43776],"disallowed"],[[43777,43782],"valid"],[[43783,43784],"disallowed"],[[43785,43790],"valid"],[[43791,43792],"disallowed"],[[43793,43798],"valid"],[[43799,43807],"disallowed"],[[43808,43814],"valid"],[[43815,43815],"disallowed"],[[43816,43822],"valid"],[[43823,43823],"disallowed"],[[43824,43866],"valid"],[[43867,43867],"valid",[],"NV8"],[[43868,43868],"mapped",[42791]],[[43869,43869],"mapped",[43831]],[[43870,43870],"mapped",[619]],[[43871,43871],"mapped",[43858]],[[43872,43875],"valid"],[[43876,43877],"valid"],[[43878,43887],"disallowed"],[[43888,43888],"mapped",[5024]],[[43889,43889],"mapped",[5025]],[[43890,43890],"mapped",[5026]],[[43891,43891],"mapped",[5027]],[[43892,43892],"mapped",[5028]],[[43893,43893],"mapped",[5029]],[[43894,43894],"mapped",[5030]],[[43895,43895],"mapped",[5031]],[[43896,43896],"mapped",[5032]],[[43897,43897],"mapped",[5033]],[[43898,43898],"mapped",[5034]],[[43899,43899],"mapped",[5035]],[[43900,43900],"mapped",[5036]],[[43901,43901],"mapped",[5037]],[[43902,43902],"mapped",[5038]],[[43903,43903],"mapped",[5039]],[[43904,43904],"mapped",[5040]],[[43905,43905],"mapped",[5041]],[[43906,43906],"mapped",[5042]],[[43907,43907],"mapped",[5043]],[[43908,43908],"mapped",[5044]],[[43909,43909],"mapped",[5045]],[[43910,43910],"mapped",[5046]],[[43911,43911],"mapped",[5047]],[[43912,43912],"mapped",[5048]],[[43913,43913],"mapped",[5049]],[[43914,43914],"mapped",[5050]],[[43915,43915],"mapped",[5051]],[[43916,43916],"mapped",[5052]],[[43917,43917],"mapped",[5053]],[[43918,43918],"mapped",[5054]],[[43919,43919],"mapped",[5055]],[[43920,43920],"mapped",[5056]],[[43921,43921],"mapped",[5057]],[[43922,43922],"mapped",[5058]],[[43923,43923],"mapped",[5059]],[[43924,43924],"mapped",[5060]],[[43925,43925],"mapped",[5061]],[[43926,43926],"mapped",[5062]],[[43927,43927],"mapped",[5063]],[[43928,43928],"mapped",[5064]],[[43929,43929],"mapped",[5065]],[[43930,43930],"mapped",[5066]],[[43931,43931],"mapped",[5067]],[[43932,43932],"mapped",[5068]],[[43933,43933],"mapped",[5069]],[[43934,43934],"mapped",[5070]],[[43935,43935],"mapped",[5071]],[[43936,43936],"mapped",[5072]],[[43937,43937],"mapped",[5073]],[[43938,43938],"mapped",[5074]],[[43939,43939],"mapped",[5075]],[[43940,43940],"mapped",[5076]],[[43941,43941],"mapped",[5077]],[[43942,43942],"mapped",[5078]],[[43943,43943],"mapped",[5079]],[[43944,43944],"mapped",[5080]],[[43945,43945],"mapped",[5081]],[[43946,43946],"mapped",[5082]],[[43947,43947],"mapped",[5083]],[[43948,43948],"mapped",[5084]],[[43949,43949],"mapped",[5085]],[[43950,43950],"mapped",[5086]],[[43951,43951],"mapped",[5087]],[[43952,43952],"mapped",[5088]],[[43953,43953],"mapped",[5089]],[[43954,43954],"mapped",[5090]],[[43955,43955],"mapped",[5091]],[[43956,43956],"mapped",[5092]],[[43957,43957],"mapped",[5093]],[[43958,43958],"mapped",[5094]],[[43959,43959],"mapped",[5095]],[[43960,43960],"mapped",[5096]],[[43961,43961],"mapped",[5097]],[[43962,43962],"mapped",[5098]],[[43963,43963],"mapped",[5099]],[[43964,43964],"mapped",[5100]],[[43965,43965],"mapped",[5101]],[[43966,43966],"mapped",[5102]],[[43967,43967],"mapped",[5103]],[[43968,44010],"valid"],[[44011,44011],"valid",[],"NV8"],[[44012,44013],"valid"],[[44014,44015],"disallowed"],[[44016,44025],"valid"],[[44026,44031],"disallowed"],[[44032,55203],"valid"],[[55204,55215],"disallowed"],[[55216,55238],"valid",[],"NV8"],[[55239,55242],"disallowed"],[[55243,55291],"valid",[],"NV8"],[[55292,55295],"disallowed"],[[55296,57343],"disallowed"],[[57344,63743],"disallowed"],[[63744,63744],"mapped",[35912]],[[63745,63745],"mapped",[26356]],[[63746,63746],"mapped",[36554]],[[63747,63747],"mapped",[36040]],[[63748,63748],"mapped",[28369]],[[63749,63749],"mapped",[20018]],[[63750,63750],"mapped",[21477]],[[63751,63752],"mapped",[40860]],[[63753,63753],"mapped",[22865]],[[63754,63754],"mapped",[37329]],[[63755,63755],"mapped",[21895]],[[63756,63756],"mapped",[22856]],[[63757,63757],"mapped",[25078]],[[63758,63758],"mapped",[30313]],[[63759,63759],"mapped",[32645]],[[63760,63760],"mapped",[34367]],[[63761,63761],"mapped",[34746]],[[63762,63762],"mapped",[35064]],[[63763,63763],"mapped",[37007]],[[63764,63764],"mapped",[27138]],[[63765,63765],"mapped",[27931]],[[63766,63766],"mapped",[28889]],[[63767,63767],"mapped",[29662]],[[63768,63768],"mapped",[33853]],[[63769,63769],"mapped",[37226]],[[63770,63770],"mapped",[39409]],[[63771,63771],"mapped",[20098]],[[63772,63772],"mapped",[21365]],[[63773,63773],"mapped",[27396]],[[63774,63774],"mapped",[29211]],[[63775,63775],"mapped",[34349]],[[63776,63776],"mapped",[40478]],[[63777,63777],"mapped",[23888]],[[63778,63778],"mapped",[28651]],[[63779,63779],"mapped",[34253]],[[63780,63780],"mapped",[35172]],[[63781,63781],"mapped",[25289]],[[63782,63782],"mapped",[33240]],[[63783,63783],"mapped",[34847]],[[63784,63784],"mapped",[24266]],[[63785,63785],"mapped",[26391]],[[63786,63786],"mapped",[28010]],[[63787,63787],"mapped",[29436]],[[63788,63788],"mapped",[37070]],[[63789,63789],"mapped",[20358]],[[63790,63790],"mapped",[20919]],[[63791,63791],"mapped",[21214]],[[63792,63792],"mapped",[25796]],[[63793,63793],"mapped",[27347]],[[63794,63794],"mapped",[29200]],[[63795,63795],"mapped",[30439]],[[63796,63796],"mapped",[32769]],[[63797,63797],"mapped",[34310]],[[63798,63798],"mapped",[34396]],[[63799,63799],"mapped",[36335]],[[63800,63800],"mapped",[38706]],[[63801,63801],"mapped",[39791]],[[63802,63802],"mapped",[40442]],[[63803,63803],"mapped",[30860]],[[63804,63804],"mapped",[31103]],[[63805,63805],"mapped",[32160]],[[63806,63806],"mapped",[33737]],[[63807,63807],"mapped",[37636]],[[63808,63808],"mapped",[40575]],[[63809,63809],"mapped",[35542]],[[63810,63810],"mapped",[22751]],[[63811,63811],"mapped",[24324]],[[63812,63812],"mapped",[31840]],[[63813,63813],"mapped",[32894]],[[63814,63814],"mapped",[29282]],[[63815,63815],"mapped",[30922]],[[63816,63816],"mapped",[36034]],[[63817,63817],"mapped",[38647]],[[63818,63818],"mapped",[22744]],[[63819,63819],"mapped",[23650]],[[63820,63820],"mapped",[27155]],[[63821,63821],"mapped",[28122]],[[63822,63822],"mapped",[28431]],[[63823,63823],"mapped",[32047]],[[63824,63824],"mapped",[32311]],[[63825,63825],"mapped",[38475]],[[63826,63826],"mapped",[21202]],[[63827,63827],"mapped",[32907]],[[63828,63828],"mapped",[20956]],[[63829,63829],"mapped",[20940]],[[63830,63830],"mapped",[31260]],[[63831,63831],"mapped",[32190]],[[63832,63832],"mapped",[33777]],[[63833,63833],"mapped",[38517]],[[63834,63834],"mapped",[35712]],[[63835,63835],"mapped",[25295]],[[63836,63836],"mapped",[27138]],[[63837,63837],"mapped",[35582]],[[63838,63838],"mapped",[20025]],[[63839,63839],"mapped",[23527]],[[63840,63840],"mapped",[24594]],[[63841,63841],"mapped",[29575]],[[63842,63842],"mapped",[30064]],[[63843,63843],"mapped",[21271]],[[63844,63844],"mapped",[30971]],[[63845,63845],"mapped",[20415]],[[63846,63846],"mapped",[24489]],[[63847,63847],"mapped",[19981]],[[63848,63848],"mapped",[27852]],[[63849,63849],"mapped",[25976]],[[63850,63850],"mapped",[32034]],[[63851,63851],"mapped",[21443]],[[63852,63852],"mapped",[22622]],[[63853,63853],"mapped",[30465]],[[63854,63854],"mapped",[33865]],[[63855,63855],"mapped",[35498]],[[63856,63856],"mapped",[27578]],[[63857,63857],"mapped",[36784]],[[63858,63858],"mapped",[27784]],[[63859,63859],"mapped",[25342]],[[63860,63860],"mapped",[33509]],[[63861,63861],"mapped",[25504]],[[63862,63862],"mapped",[30053]],[[63863,63863],"mapped",[20142]],[[63864,63864],"mapped",[20841]],[[63865,63865],"mapped",[20937]],[[63866,63866],"mapped",[26753]],[[63867,63867],"mapped",[31975]],[[63868,63868],"mapped",[33391]],[[63869,63869],"mapped",[35538]],[[63870,63870],"mapped",[37327]],[[63871,63871],"mapped",[21237]],[[63872,63872],"mapped",[21570]],[[63873,63873],"mapped",[22899]],[[63874,63874],"mapped",[24300]],[[63875,63875],"mapped",[26053]],[[63876,63876],"mapped",[28670]],[[63877,63877],"mapped",[31018]],[[63878,63878],"mapped",[38317]],[[63879,63879],"mapped",[39530]],[[63880,63880],"mapped",[40599]],[[63881,63881],"mapped",[40654]],[[63882,63882],"mapped",[21147]],[[63883,63883],"mapped",[26310]],[[63884,63884],"mapped",[27511]],[[63885,63885],"mapped",[36706]],[[63886,63886],"mapped",[24180]],[[63887,63887],"mapped",[24976]],[[63888,63888],"mapped",[25088]],[[63889,63889],"mapped",[25754]],[[63890,63890],"mapped",[28451]],[[63891,63891],"mapped",[29001]],[[63892,63892],"mapped",[29833]],[[63893,63893],"mapped",[31178]],[[63894,63894],"mapped",[32244]],[[63895,63895],"mapped",[32879]],[[63896,63896],"mapped",[36646]],[[63897,63897],"mapped",[34030]],[[63898,63898],"mapped",[36899]],[[63899,63899],"mapped",[37706]],[[63900,63900],"mapped",[21015]],[[63901,63901],"mapped",[21155]],[[63902,63902],"mapped",[21693]],[[63903,63903],"mapped",[28872]],[[63904,63904],"mapped",[35010]],[[63905,63905],"mapped",[35498]],[[63906,63906],"mapped",[24265]],[[63907,63907],"mapped",[24565]],[[63908,63908],"mapped",[25467]],[[63909,63909],"mapped",[27566]],[[63910,63910],"mapped",[31806]],[[63911,63911],"mapped",[29557]],[[63912,63912],"mapped",[20196]],[[63913,63913],"mapped",[22265]],[[63914,63914],"mapped",[23527]],[[63915,63915],"mapped",[23994]],[[63916,63916],"mapped",[24604]],[[63917,63917],"mapped",[29618]],[[63918,63918],"mapped",[29801]],[[63919,63919],"mapped",[32666]],[[63920,63920],"mapped",[32838]],[[63921,63921],"mapped",[37428]],[[63922,63922],"mapped",[38646]],[[63923,63923],"mapped",[38728]],[[63924,63924],"mapped",[38936]],[[63925,63925],"mapped",[20363]],[[63926,63926],"mapped",[31150]],[[63927,63927],"mapped",[37300]],[[63928,63928],"mapped",[38584]],[[63929,63929],"mapped",[24801]],[[63930,63930],"mapped",[20102]],[[63931,63931],"mapped",[20698]],[[63932,63932],"mapped",[23534]],[[63933,63933],"mapped",[23615]],[[63934,63934],"mapped",[26009]],[[63935,63935],"mapped",[27138]],[[63936,63936],"mapped",[29134]],[[63937,63937],"mapped",[30274]],[[63938,63938],"mapped",[34044]],[[63939,63939],"mapped",[36988]],[[63940,63940],"mapped",[40845]],[[63941,63941],"mapped",[26248]],[[63942,63942],"mapped",[38446]],[[63943,63943],"mapped",[21129]],[[63944,63944],"mapped",[26491]],[[63945,63945],"mapped",[26611]],[[63946,63946],"mapped",[27969]],[[63947,63947],"mapped",[28316]],[[63948,63948],"mapped",[29705]],[[63949,63949],"mapped",[30041]],[[63950,63950],"mapped",[30827]],[[63951,63951],"mapped",[32016]],[[63952,63952],"mapped",[39006]],[[63953,63953],"mapped",[20845]],[[63954,63954],"mapped",[25134]],[[63955,63955],"mapped",[38520]],[[63956,63956],"mapped",[20523]],[[63957,63957],"mapped",[23833]],[[63958,63958],"mapped",[28138]],[[63959,63959],"mapped",[36650]],[[63960,63960],"mapped",[24459]],[[63961,63961],"mapped",[24900]],[[63962,63962],"mapped",[26647]],[[63963,63963],"mapped",[29575]],[[63964,63964],"mapped",[38534]],[[63965,63965],"mapped",[21033]],[[63966,63966],"mapped",[21519]],[[63967,63967],"mapped",[23653]],[[63968,63968],"mapped",[26131]],[[63969,63969],"mapped",[26446]],[[63970,63970],"mapped",[26792]],[[63971,63971],"mapped",[27877]],[[63972,63972],"mapped",[29702]],[[63973,63973],"mapped",[30178]],[[63974,63974],"mapped",[32633]],[[63975,63975],"mapped",[35023]],[[63976,63976],"mapped",[35041]],[[63977,63977],"mapped",[37324]],[[63978,63978],"mapped",[38626]],[[63979,63979],"mapped",[21311]],[[63980,63980],"mapped",[28346]],[[63981,63981],"mapped",[21533]],[[63982,63982],"mapped",[29136]],[[63983,63983],"mapped",[29848]],[[63984,63984],"mapped",[34298]],[[63985,63985],"mapped",[38563]],[[63986,63986],"mapped",[40023]],[[63987,63987],"mapped",[40607]],[[63988,63988],"mapped",[26519]],[[63989,63989],"mapped",[28107]],[[63990,63990],"mapped",[33256]],[[63991,63991],"mapped",[31435]],[[63992,63992],"mapped",[31520]],[[63993,63993],"mapped",[31890]],[[63994,63994],"mapped",[29376]],[[63995,63995],"mapped",[28825]],[[63996,63996],"mapped",[35672]],[[63997,63997],"mapped",[20160]],[[63998,63998],"mapped",[33590]],[[63999,63999],"mapped",[21050]],[[64000,64000],"mapped",[20999]],[[64001,64001],"mapped",[24230]],[[64002,64002],"mapped",[25299]],[[64003,64003],"mapped",[31958]],[[64004,64004],"mapped",[23429]],[[64005,64005],"mapped",[27934]],[[64006,64006],"mapped",[26292]],[[64007,64007],"mapped",[36667]],[[64008,64008],"mapped",[34892]],[[64009,64009],"mapped",[38477]],[[64010,64010],"mapped",[35211]],[[64011,64011],"mapped",[24275]],[[64012,64012],"mapped",[20800]],[[64013,64013],"mapped",[21952]],[[64014,64015],"valid"],[[64016,64016],"mapped",[22618]],[[64017,64017],"valid"],[[64018,64018],"mapped",[26228]],[[64019,64020],"valid"],[[64021,64021],"mapped",[20958]],[[64022,64022],"mapped",[29482]],[[64023,64023],"mapped",[30410]],[[64024,64024],"mapped",[31036]],[[64025,64025],"mapped",[31070]],[[64026,64026],"mapped",[31077]],[[64027,64027],"mapped",[31119]],[[64028,64028],"mapped",[38742]],[[64029,64029],"mapped",[31934]],[[64030,64030],"mapped",[32701]],[[64031,64031],"valid"],[[64032,64032],"mapped",[34322]],[[64033,64033],"valid"],[[64034,64034],"mapped",[35576]],[[64035,64036],"valid"],[[64037,64037],"mapped",[36920]],[[64038,64038],"mapped",[37117]],[[64039,64041],"valid"],[[64042,64042],"mapped",[39151]],[[64043,64043],"mapped",[39164]],[[64044,64044],"mapped",[39208]],[[64045,64045],"mapped",[40372]],[[64046,64046],"mapped",[37086]],[[64047,64047],"mapped",[38583]],[[64048,64048],"mapped",[20398]],[[64049,64049],"mapped",[20711]],[[64050,64050],"mapped",[20813]],[[64051,64051],"mapped",[21193]],[[64052,64052],"mapped",[21220]],[[64053,64053],"mapped",[21329]],[[64054,64054],"mapped",[21917]],[[64055,64055],"mapped",[22022]],[[64056,64056],"mapped",[22120]],[[64057,64057],"mapped",[22592]],[[64058,64058],"mapped",[22696]],[[64059,64059],"mapped",[23652]],[[64060,64060],"mapped",[23662]],[[64061,64061],"mapped",[24724]],[[64062,64062],"mapped",[24936]],[[64063,64063],"mapped",[24974]],[[64064,64064],"mapped",[25074]],[[64065,64065],"mapped",[25935]],[[64066,64066],"mapped",[26082]],[[64067,64067],"mapped",[26257]],[[64068,64068],"mapped",[26757]],[[64069,64069],"mapped",[28023]],[[64070,64070],"mapped",[28186]],[[64071,64071],"mapped",[28450]],[[64072,64072],"mapped",[29038]],[[64073,64073],"mapped",[29227]],[[64074,64074],"mapped",[29730]],[[64075,64075],"mapped",[30865]],[[64076,64076],"mapped",[31038]],[[64077,64077],"mapped",[31049]],[[64078,64078],"mapped",[31048]],[[64079,64079],"mapped",[31056]],[[64080,64080],"mapped",[31062]],[[64081,64081],"mapped",[31069]],[[64082,64082],"mapped",[31117]],[[64083,64083],"mapped",[31118]],[[64084,64084],"mapped",[31296]],[[64085,64085],"mapped",[31361]],[[64086,64086],"mapped",[31680]],[[64087,64087],"mapped",[32244]],[[64088,64088],"mapped",[32265]],[[64089,64089],"mapped",[32321]],[[64090,64090],"mapped",[32626]],[[64091,64091],"mapped",[32773]],[[64092,64092],"mapped",[33261]],[[64093,64094],"mapped",[33401]],[[64095,64095],"mapped",[33879]],[[64096,64096],"mapped",[35088]],[[64097,64097],"mapped",[35222]],[[64098,64098],"mapped",[35585]],[[64099,64099],"mapped",[35641]],[[64100,64100],"mapped",[36051]],[[64101,64101],"mapped",[36104]],[[64102,64102],"mapped",[36790]],[[64103,64103],"mapped",[36920]],[[64104,64104],"mapped",[38627]],[[64105,64105],"mapped",[38911]],[[64106,64106],"mapped",[38971]],[[64107,64107],"mapped",[24693]],[[64108,64108],"mapped",[148206]],[[64109,64109],"mapped",[33304]],[[64110,64111],"disallowed"],[[64112,64112],"mapped",[20006]],[[64113,64113],"mapped",[20917]],[[64114,64114],"mapped",[20840]],[[64115,64115],"mapped",[20352]],[[64116,64116],"mapped",[20805]],[[64117,64117],"mapped",[20864]],[[64118,64118],"mapped",[21191]],[[64119,64119],"mapped",[21242]],[[64120,64120],"mapped",[21917]],[[64121,64121],"mapped",[21845]],[[64122,64122],"mapped",[21913]],[[64123,64123],"mapped",[21986]],[[64124,64124],"mapped",[22618]],[[64125,64125],"mapped",[22707]],[[64126,64126],"mapped",[22852]],[[64127,64127],"mapped",[22868]],[[64128,64128],"mapped",[23138]],[[64129,64129],"mapped",[23336]],[[64130,64130],"mapped",[24274]],[[64131,64131],"mapped",[24281]],[[64132,64132],"mapped",[24425]],[[64133,64133],"mapped",[24493]],[[64134,64134],"mapped",[24792]],[[64135,64135],"mapped",[24910]],[[64136,64136],"mapped",[24840]],[[64137,64137],"mapped",[24974]],[[64138,64138],"mapped",[24928]],[[64139,64139],"mapped",[25074]],[[64140,64140],"mapped",[25140]],[[64141,64141],"mapped",[25540]],[[64142,64142],"mapped",[25628]],[[64143,64143],"mapped",[25682]],[[64144,64144],"mapped",[25942]],[[64145,64145],"mapped",[26228]],[[64146,64146],"mapped",[26391]],[[64147,64147],"mapped",[26395]],[[64148,64148],"mapped",[26454]],[[64149,64149],"mapped",[27513]],[[64150,64150],"mapped",[27578]],[[64151,64151],"mapped",[27969]],[[64152,64152],"mapped",[28379]],[[64153,64153],"mapped",[28363]],[[64154,64154],"mapped",[28450]],[[64155,64155],"mapped",[28702]],[[64156,64156],"mapped",[29038]],[[64157,64157],"mapped",[30631]],[[64158,64158],"mapped",[29237]],[[64159,64159],"mapped",[29359]],[[64160,64160],"mapped",[29482]],[[64161,64161],"mapped",[29809]],[[64162,64162],"mapped",[29958]],[[64163,64163],"mapped",[30011]],[[64164,64164],"mapped",[30237]],[[64165,64165],"mapped",[30239]],[[64166,64166],"mapped",[30410]],[[64167,64167],"mapped",[30427]],[[64168,64168],"mapped",[30452]],[[64169,64169],"mapped",[30538]],[[64170,64170],"mapped",[30528]],[[64171,64171],"mapped",[30924]],[[64172,64172],"mapped",[31409]],[[64173,64173],"mapped",[31680]],[[64174,64174],"mapped",[31867]],[[64175,64175],"mapped",[32091]],[[64176,64176],"mapped",[32244]],[[64177,64177],"mapped",[32574]],[[64178,64178],"mapped",[32773]],[[64179,64179],"mapped",[33618]],[[64180,64180],"mapped",[33775]],[[64181,64181],"mapped",[34681]],[[64182,64182],"mapped",[35137]],[[64183,64183],"mapped",[35206]],[[64184,64184],"mapped",[35222]],[[64185,64185],"mapped",[35519]],[[64186,64186],"mapped",[35576]],[[64187,64187],"mapped",[35531]],[[64188,64188],"mapped",[35585]],[[64189,64189],"mapped",[35582]],[[64190,64190],"mapped",[35565]],[[64191,64191],"mapped",[35641]],[[64192,64192],"mapped",[35722]],[[64193,64193],"mapped",[36104]],[[64194,64194],"mapped",[36664]],[[64195,64195],"mapped",[36978]],[[64196,64196],"mapped",[37273]],[[64197,64197],"mapped",[37494]],[[64198,64198],"mapped",[38524]],[[64199,64199],"mapped",[38627]],[[64200,64200],"mapped",[38742]],[[64201,64201],"mapped",[38875]],[[64202,64202],"mapped",[38911]],[[64203,64203],"mapped",[38923]],[[64204,64204],"mapped",[38971]],[[64205,64205],"mapped",[39698]],[[64206,64206],"mapped",[40860]],[[64207,64207],"mapped",[141386]],[[64208,64208],"mapped",[141380]],[[64209,64209],"mapped",[144341]],[[64210,64210],"mapped",[15261]],[[64211,64211],"mapped",[16408]],[[64212,64212],"mapped",[16441]],[[64213,64213],"mapped",[152137]],[[64214,64214],"mapped",[154832]],[[64215,64215],"mapped",[163539]],[[64216,64216],"mapped",[40771]],[[64217,64217],"mapped",[40846]],[[64218,64255],"disallowed"],[[64256,64256],"mapped",[102,102]],[[64257,64257],"mapped",[102,105]],[[64258,64258],"mapped",[102,108]],[[64259,64259],"mapped",[102,102,105]],[[64260,64260],"mapped",[102,102,108]],[[64261,64262],"mapped",[115,116]],[[64263,64274],"disallowed"],[[64275,64275],"mapped",[1396,1398]],[[64276,64276],"mapped",[1396,1381]],[[64277,64277],"mapped",[1396,1387]],[[64278,64278],"mapped",[1406,1398]],[[64279,64279],"mapped",[1396,1389]],[[64280,64284],"disallowed"],[[64285,64285],"mapped",[1497,1460]],[[64286,64286],"valid"],[[64287,64287],"mapped",[1522,1463]],[[64288,64288],"mapped",[1506]],[[64289,64289],"mapped",[1488]],[[64290,64290],"mapped",[1491]],[[64291,64291],"mapped",[1492]],[[64292,64292],"mapped",[1499]],[[64293,64293],"mapped",[1500]],[[64294,64294],"mapped",[1501]],[[64295,64295],"mapped",[1512]],[[64296,64296],"mapped",[1514]],[[64297,64297],"disallowed_STD3_mapped",[43]],[[64298,64298],"mapped",[1513,1473]],[[64299,64299],"mapped",[1513,1474]],[[64300,64300],"mapped",[1513,1468,1473]],[[64301,64301],"mapped",[1513,1468,1474]],[[64302,64302],"mapped",[1488,1463]],[[64303,64303],"mapped",[1488,1464]],[[64304,64304],"mapped",[1488,1468]],[[64305,64305],"mapped",[1489,1468]],[[64306,64306],"mapped",[1490,1468]],[[64307,64307],"mapped",[1491,1468]],[[64308,64308],"mapped",[1492,1468]],[[64309,64309],"mapped",[1493,1468]],[[64310,64310],"mapped",[1494,1468]],[[64311,64311],"disallowed"],[[64312,64312],"mapped",[1496,1468]],[[64313,64313],"mapped",[1497,1468]],[[64314,64314],"mapped",[1498,1468]],[[64315,64315],"mapped",[1499,1468]],[[64316,64316],"mapped",[1500,1468]],[[64317,64317],"disallowed"],[[64318,64318],"mapped",[1502,1468]],[[64319,64319],"disallowed"],[[64320,64320],"mapped",[1504,1468]],[[64321,64321],"mapped",[1505,1468]],[[64322,64322],"disallowed"],[[64323,64323],"mapped",[1507,1468]],[[64324,64324],"mapped",[1508,1468]],[[64325,64325],"disallowed"],[[64326,64326],"mapped",[1510,1468]],[[64327,64327],"mapped",[1511,1468]],[[64328,64328],"mapped",[1512,1468]],[[64329,64329],"mapped",[1513,1468]],[[64330,64330],"mapped",[1514,1468]],[[64331,64331],"mapped",[1493,1465]],[[64332,64332],"mapped",[1489,1471]],[[64333,64333],"mapped",[1499,1471]],[[64334,64334],"mapped",[1508,1471]],[[64335,64335],"mapped",[1488,1500]],[[64336,64337],"mapped",[1649]],[[64338,64341],"mapped",[1659]],[[64342,64345],"mapped",[1662]],[[64346,64349],"mapped",[1664]],[[64350,64353],"mapped",[1658]],[[64354,64357],"mapped",[1663]],[[64358,64361],"mapped",[1657]],[[64362,64365],"mapped",[1700]],[[64366,64369],"mapped",[1702]],[[64370,64373],"mapped",[1668]],[[64374,64377],"mapped",[1667]],[[64378,64381],"mapped",[1670]],[[64382,64385],"mapped",[1671]],[[64386,64387],"mapped",[1677]],[[64388,64389],"mapped",[1676]],[[64390,64391],"mapped",[1678]],[[64392,64393],"mapped",[1672]],[[64394,64395],"mapped",[1688]],[[64396,64397],"mapped",[1681]],[[64398,64401],"mapped",[1705]],[[64402,64405],"mapped",[1711]],[[64406,64409],"mapped",[1715]],[[64410,64413],"mapped",[1713]],[[64414,64415],"mapped",[1722]],[[64416,64419],"mapped",[1723]],[[64420,64421],"mapped",[1728]],[[64422,64425],"mapped",[1729]],[[64426,64429],"mapped",[1726]],[[64430,64431],"mapped",[1746]],[[64432,64433],"mapped",[1747]],[[64434,64449],"valid",[],"NV8"],[[64450,64466],"disallowed"],[[64467,64470],"mapped",[1709]],[[64471,64472],"mapped",[1735]],[[64473,64474],"mapped",[1734]],[[64475,64476],"mapped",[1736]],[[64477,64477],"mapped",[1735,1652]],[[64478,64479],"mapped",[1739]],[[64480,64481],"mapped",[1733]],[[64482,64483],"mapped",[1737]],[[64484,64487],"mapped",[1744]],[[64488,64489],"mapped",[1609]],[[64490,64491],"mapped",[1574,1575]],[[64492,64493],"mapped",[1574,1749]],[[64494,64495],"mapped",[1574,1608]],[[64496,64497],"mapped",[1574,1735]],[[64498,64499],"mapped",[1574,1734]],[[64500,64501],"mapped",[1574,1736]],[[64502,64504],"mapped",[1574,1744]],[[64505,64507],"mapped",[1574,1609]],[[64508,64511],"mapped",[1740]],[[64512,64512],"mapped",[1574,1580]],[[64513,64513],"mapped",[1574,1581]],[[64514,64514],"mapped",[1574,1605]],[[64515,64515],"mapped",[1574,1609]],[[64516,64516],"mapped",[1574,1610]],[[64517,64517],"mapped",[1576,1580]],[[64518,64518],"mapped",[1576,1581]],[[64519,64519],"mapped",[1576,1582]],[[64520,64520],"mapped",[1576,1605]],[[64521,64521],"mapped",[1576,1609]],[[64522,64522],"mapped",[1576,1610]],[[64523,64523],"mapped",[1578,1580]],[[64524,64524],"mapped",[1578,1581]],[[64525,64525],"mapped",[1578,1582]],[[64526,64526],"mapped",[1578,1605]],[[64527,64527],"mapped",[1578,1609]],[[64528,64528],"mapped",[1578,1610]],[[64529,64529],"mapped",[1579,1580]],[[64530,64530],"mapped",[1579,1605]],[[64531,64531],"mapped",[1579,1609]],[[64532,64532],"mapped",[1579,1610]],[[64533,64533],"mapped",[1580,1581]],[[64534,64534],"mapped",[1580,1605]],[[64535,64535],"mapped",[1581,1580]],[[64536,64536],"mapped",[1581,1605]],[[64537,64537],"mapped",[1582,1580]],[[64538,64538],"mapped",[1582,1581]],[[64539,64539],"mapped",[1582,1605]],[[64540,64540],"mapped",[1587,1580]],[[64541,64541],"mapped",[1587,1581]],[[64542,64542],"mapped",[1587,1582]],[[64543,64543],"mapped",[1587,1605]],[[64544,64544],"mapped",[1589,1581]],[[64545,64545],"mapped",[1589,1605]],[[64546,64546],"mapped",[1590,1580]],[[64547,64547],"mapped",[1590,1581]],[[64548,64548],"mapped",[1590,1582]],[[64549,64549],"mapped",[1590,1605]],[[64550,64550],"mapped",[1591,1581]],[[64551,64551],"mapped",[1591,1605]],[[64552,64552],"mapped",[1592,1605]],[[64553,64553],"mapped",[1593,1580]],[[64554,64554],"mapped",[1593,1605]],[[64555,64555],"mapped",[1594,1580]],[[64556,64556],"mapped",[1594,1605]],[[64557,64557],"mapped",[1601,1580]],[[64558,64558],"mapped",[1601,1581]],[[64559,64559],"mapped",[1601,1582]],[[64560,64560],"mapped",[1601,1605]],[[64561,64561],"mapped",[1601,1609]],[[64562,64562],"mapped",[1601,1610]],[[64563,64563],"mapped",[1602,1581]],[[64564,64564],"mapped",[1602,1605]],[[64565,64565],"mapped",[1602,1609]],[[64566,64566],"mapped",[1602,1610]],[[64567,64567],"mapped",[1603,1575]],[[64568,64568],"mapped",[1603,1580]],[[64569,64569],"mapped",[1603,1581]],[[64570,64570],"mapped",[1603,1582]],[[64571,64571],"mapped",[1603,1604]],[[64572,64572],"mapped",[1603,1605]],[[64573,64573],"mapped",[1603,1609]],[[64574,64574],"mapped",[1603,1610]],[[64575,64575],"mapped",[1604,1580]],[[64576,64576],"mapped",[1604,1581]],[[64577,64577],"mapped",[1604,1582]],[[64578,64578],"mapped",[1604,1605]],[[64579,64579],"mapped",[1604,1609]],[[64580,64580],"mapped",[1604,1610]],[[64581,64581],"mapped",[1605,1580]],[[64582,64582],"mapped",[1605,1581]],[[64583,64583],"mapped",[1605,1582]],[[64584,64584],"mapped",[1605,1605]],[[64585,64585],"mapped",[1605,1609]],[[64586,64586],"mapped",[1605,1610]],[[64587,64587],"mapped",[1606,1580]],[[64588,64588],"mapped",[1606,1581]],[[64589,64589],"mapped",[1606,1582]],[[64590,64590],"mapped",[1606,1605]],[[64591,64591],"mapped",[1606,1609]],[[64592,64592],"mapped",[1606,1610]],[[64593,64593],"mapped",[1607,1580]],[[64594,64594],"mapped",[1607,1605]],[[64595,64595],"mapped",[1607,1609]],[[64596,64596],"mapped",[1607,1610]],[[64597,64597],"mapped",[1610,1580]],[[64598,64598],"mapped",[1610,1581]],[[64599,64599],"mapped",[1610,1582]],[[64600,64600],"mapped",[1610,1605]],[[64601,64601],"mapped",[1610,1609]],[[64602,64602],"mapped",[1610,1610]],[[64603,64603],"mapped",[1584,1648]],[[64604,64604],"mapped",[1585,1648]],[[64605,64605],"mapped",[1609,1648]],[[64606,64606],"disallowed_STD3_mapped",[32,1612,1617]],[[64607,64607],"disallowed_STD3_mapped",[32,1613,1617]],[[64608,64608],"disallowed_STD3_mapped",[32,1614,1617]],[[64609,64609],"disallowed_STD3_mapped",[32,1615,1617]],[[64610,64610],"disallowed_STD3_mapped",[32,1616,1617]],[[64611,64611],"disallowed_STD3_mapped",[32,1617,1648]],[[64612,64612],"mapped",[1574,1585]],[[64613,64613],"mapped",[1574,1586]],[[64614,64614],"mapped",[1574,1605]],[[64615,64615],"mapped",[1574,1606]],[[64616,64616],"mapped",[1574,1609]],[[64617,64617],"mapped",[1574,1610]],[[64618,64618],"mapped",[1576,1585]],[[64619,64619],"mapped",[1576,1586]],[[64620,64620],"mapped",[1576,1605]],[[64621,64621],"mapped",[1576,1606]],[[64622,64622],"mapped",[1576,1609]],[[64623,64623],"mapped",[1576,1610]],[[64624,64624],"mapped",[1578,1585]],[[64625,64625],"mapped",[1578,1586]],[[64626,64626],"mapped",[1578,1605]],[[64627,64627],"mapped",[1578,1606]],[[64628,64628],"mapped",[1578,1609]],[[64629,64629],"mapped",[1578,1610]],[[64630,64630],"mapped",[1579,1585]],[[64631,64631],"mapped",[1579,1586]],[[64632,64632],"mapped",[1579,1605]],[[64633,64633],"mapped",[1579,1606]],[[64634,64634],"mapped",[1579,1609]],[[64635,64635],"mapped",[1579,1610]],[[64636,64636],"mapped",[1601,1609]],[[64637,64637],"mapped",[1601,1610]],[[64638,64638],"mapped",[1602,1609]],[[64639,64639],"mapped",[1602,1610]],[[64640,64640],"mapped",[1603,1575]],[[64641,64641],"mapped",[1603,1604]],[[64642,64642],"mapped",[1603,1605]],[[64643,64643],"mapped",[1603,1609]],[[64644,64644],"mapped",[1603,1610]],[[64645,64645],"mapped",[1604,1605]],[[64646,64646],"mapped",[1604,1609]],[[64647,64647],"mapped",[1604,1610]],[[64648,64648],"mapped",[1605,1575]],[[64649,64649],"mapped",[1605,1605]],[[64650,64650],"mapped",[1606,1585]],[[64651,64651],"mapped",[1606,1586]],[[64652,64652],"mapped",[1606,1605]],[[64653,64653],"mapped",[1606,1606]],[[64654,64654],"mapped",[1606,1609]],[[64655,64655],"mapped",[1606,1610]],[[64656,64656],"mapped",[1609,1648]],[[64657,64657],"mapped",[1610,1585]],[[64658,64658],"mapped",[1610,1586]],[[64659,64659],"mapped",[1610,1605]],[[64660,64660],"mapped",[1610,1606]],[[64661,64661],"mapped",[1610,1609]],[[64662,64662],"mapped",[1610,1610]],[[64663,64663],"mapped",[1574,1580]],[[64664,64664],"mapped",[1574,1581]],[[64665,64665],"mapped",[1574,1582]],[[64666,64666],"mapped",[1574,1605]],[[64667,64667],"mapped",[1574,1607]],[[64668,64668],"mapped",[1576,1580]],[[64669,64669],"mapped",[1576,1581]],[[64670,64670],"mapped",[1576,1582]],[[64671,64671],"mapped",[1576,1605]],[[64672,64672],"mapped",[1576,1607]],[[64673,64673],"mapped",[1578,1580]],[[64674,64674],"mapped",[1578,1581]],[[64675,64675],"mapped",[1578,1582]],[[64676,64676],"mapped",[1578,1605]],[[64677,64677],"mapped",[1578,1607]],[[64678,64678],"mapped",[1579,1605]],[[64679,64679],"mapped",[1580,1581]],[[64680,64680],"mapped",[1580,1605]],[[64681,64681],"mapped",[1581,1580]],[[64682,64682],"mapped",[1581,1605]],[[64683,64683],"mapped",[1582,1580]],[[64684,64684],"mapped",[1582,1605]],[[64685,64685],"mapped",[1587,1580]],[[64686,64686],"mapped",[1587,1581]],[[64687,64687],"mapped",[1587,1582]],[[64688,64688],"mapped",[1587,1605]],[[64689,64689],"mapped",[1589,1581]],[[64690,64690],"mapped",[1589,1582]],[[64691,64691],"mapped",[1589,1605]],[[64692,64692],"mapped",[1590,1580]],[[64693,64693],"mapped",[1590,1581]],[[64694,64694],"mapped",[1590,1582]],[[64695,64695],"mapped",[1590,1605]],[[64696,64696],"mapped",[1591,1581]],[[64697,64697],"mapped",[1592,1605]],[[64698,64698],"mapped",[1593,1580]],[[64699,64699],"mapped",[1593,1605]],[[64700,64700],"mapped",[1594,1580]],[[64701,64701],"mapped",[1594,1605]],[[64702,64702],"mapped",[1601,1580]],[[64703,64703],"mapped",[1601,1581]],[[64704,64704],"mapped",[1601,1582]],[[64705,64705],"mapped",[1601,1605]],[[64706,64706],"mapped",[1602,1581]],[[64707,64707],"mapped",[1602,1605]],[[64708,64708],"mapped",[1603,1580]],[[64709,64709],"mapped",[1603,1581]],[[64710,64710],"mapped",[1603,1582]],[[64711,64711],"mapped",[1603,1604]],[[64712,64712],"mapped",[1603,1605]],[[64713,64713],"mapped",[1604,1580]],[[64714,64714],"mapped",[1604,1581]],[[64715,64715],"mapped",[1604,1582]],[[64716,64716],"mapped",[1604,1605]],[[64717,64717],"mapped",[1604,1607]],[[64718,64718],"mapped",[1605,1580]],[[64719,64719],"mapped",[1605,1581]],[[64720,64720],"mapped",[1605,1582]],[[64721,64721],"mapped",[1605,1605]],[[64722,64722],"mapped",[1606,1580]],[[64723,64723],"mapped",[1606,1581]],[[64724,64724],"mapped",[1606,1582]],[[64725,64725],"mapped",[1606,1605]],[[64726,64726],"mapped",[1606,1607]],[[64727,64727],"mapped",[1607,1580]],[[64728,64728],"mapped",[1607,1605]],[[64729,64729],"mapped",[1607,1648]],[[64730,64730],"mapped",[1610,1580]],[[64731,64731],"mapped",[1610,1581]],[[64732,64732],"mapped",[1610,1582]],[[64733,64733],"mapped",[1610,1605]],[[64734,64734],"mapped",[1610,1607]],[[64735,64735],"mapped",[1574,1605]],[[64736,64736],"mapped",[1574,1607]],[[64737,64737],"mapped",[1576,1605]],[[64738,64738],"mapped",[1576,1607]],[[64739,64739],"mapped",[1578,1605]],[[64740,64740],"mapped",[1578,1607]],[[64741,64741],"mapped",[1579,1605]],[[64742,64742],"mapped",[1579,1607]],[[64743,64743],"mapped",[1587,1605]],[[64744,64744],"mapped",[1587,1607]],[[64745,64745],"mapped",[1588,1605]],[[64746,64746],"mapped",[1588,1607]],[[64747,64747],"mapped",[1603,1604]],[[64748,64748],"mapped",[1603,1605]],[[64749,64749],"mapped",[1604,1605]],[[64750,64750],"mapped",[1606,1605]],[[64751,64751],"mapped",[1606,1607]],[[64752,64752],"mapped",[1610,1605]],[[64753,64753],"mapped",[1610,1607]],[[64754,64754],"mapped",[1600,1614,1617]],[[64755,64755],"mapped",[1600,1615,1617]],[[64756,64756],"mapped",[1600,1616,1617]],[[64757,64757],"mapped",[1591,1609]],[[64758,64758],"mapped",[1591,1610]],[[64759,64759],"mapped",[1593,1609]],[[64760,64760],"mapped",[1593,1610]],[[64761,64761],"mapped",[1594,1609]],[[64762,64762],"mapped",[1594,1610]],[[64763,64763],"mapped",[1587,1609]],[[64764,64764],"mapped",[1587,1610]],[[64765,64765],"mapped",[1588,1609]],[[64766,64766],"mapped",[1588,1610]],[[64767,64767],"mapped",[1581,1609]],[[64768,64768],"mapped",[1581,1610]],[[64769,64769],"mapped",[1580,1609]],[[64770,64770],"mapped",[1580,1610]],[[64771,64771],"mapped",[1582,1609]],[[64772,64772],"mapped",[1582,1610]],[[64773,64773],"mapped",[1589,1609]],[[64774,64774],"mapped",[1589,1610]],[[64775,64775],"mapped",[1590,1609]],[[64776,64776],"mapped",[1590,1610]],[[64777,64777],"mapped",[1588,1580]],[[64778,64778],"mapped",[1588,1581]],[[64779,64779],"mapped",[1588,1582]],[[64780,64780],"mapped",[1588,1605]],[[64781,64781],"mapped",[1588,1585]],[[64782,64782],"mapped",[1587,1585]],[[64783,64783],"mapped",[1589,1585]],[[64784,64784],"mapped",[1590,1585]],[[64785,64785],"mapped",[1591,1609]],[[64786,64786],"mapped",[1591,1610]],[[64787,64787],"mapped",[1593,1609]],[[64788,64788],"mapped",[1593,1610]],[[64789,64789],"mapped",[1594,1609]],[[64790,64790],"mapped",[1594,1610]],[[64791,64791],"mapped",[1587,1609]],[[64792,64792],"mapped",[1587,1610]],[[64793,64793],"mapped",[1588,1609]],[[64794,64794],"mapped",[1588,1610]],[[64795,64795],"mapped",[1581,1609]],[[64796,64796],"mapped",[1581,1610]],[[64797,64797],"mapped",[1580,1609]],[[64798,64798],"mapped",[1580,1610]],[[64799,64799],"mapped",[1582,1609]],[[64800,64800],"mapped",[1582,1610]],[[64801,64801],"mapped",[1589,1609]],[[64802,64802],"mapped",[1589,1610]],[[64803,64803],"mapped",[1590,1609]],[[64804,64804],"mapped",[1590,1610]],[[64805,64805],"mapped",[1588,1580]],[[64806,64806],"mapped",[1588,1581]],[[64807,64807],"mapped",[1588,1582]],[[64808,64808],"mapped",[1588,1605]],[[64809,64809],"mapped",[1588,1585]],[[64810,64810],"mapped",[1587,1585]],[[64811,64811],"mapped",[1589,1585]],[[64812,64812],"mapped",[1590,1585]],[[64813,64813],"mapped",[1588,1580]],[[64814,64814],"mapped",[1588,1581]],[[64815,64815],"mapped",[1588,1582]],[[64816,64816],"mapped",[1588,1605]],[[64817,64817],"mapped",[1587,1607]],[[64818,64818],"mapped",[1588,1607]],[[64819,64819],"mapped",[1591,1605]],[[64820,64820],"mapped",[1587,1580]],[[64821,64821],"mapped",[1587,1581]],[[64822,64822],"mapped",[1587,1582]],[[64823,64823],"mapped",[1588,1580]],[[64824,64824],"mapped",[1588,1581]],[[64825,64825],"mapped",[1588,1582]],[[64826,64826],"mapped",[1591,1605]],[[64827,64827],"mapped",[1592,1605]],[[64828,64829],"mapped",[1575,1611]],[[64830,64831],"valid",[],"NV8"],[[64832,64847],"disallowed"],[[64848,64848],"mapped",[1578,1580,1605]],[[64849,64850],"mapped",[1578,1581,1580]],[[64851,64851],"mapped",[1578,1581,1605]],[[64852,64852],"mapped",[1578,1582,1605]],[[64853,64853],"mapped",[1578,1605,1580]],[[64854,64854],"mapped",[1578,1605,1581]],[[64855,64855],"mapped",[1578,1605,1582]],[[64856,64857],"mapped",[1580,1605,1581]],[[64858,64858],"mapped",[1581,1605,1610]],[[64859,64859],"mapped",[1581,1605,1609]],[[64860,64860],"mapped",[1587,1581,1580]],[[64861,64861],"mapped",[1587,1580,1581]],[[64862,64862],"mapped",[1587,1580,1609]],[[64863,64864],"mapped",[1587,1605,1581]],[[64865,64865],"mapped",[1587,1605,1580]],[[64866,64867],"mapped",[1587,1605,1605]],[[64868,64869],"mapped",[1589,1581,1581]],[[64870,64870],"mapped",[1589,1605,1605]],[[64871,64872],"mapped",[1588,1581,1605]],[[64873,64873],"mapped",[1588,1580,1610]],[[64874,64875],"mapped",[1588,1605,1582]],[[64876,64877],"mapped",[1588,1605,1605]],[[64878,64878],"mapped",[1590,1581,1609]],[[64879,64880],"mapped",[1590,1582,1605]],[[64881,64882],"mapped",[1591,1605,1581]],[[64883,64883],"mapped",[1591,1605,1605]],[[64884,64884],"mapped",[1591,1605,1610]],[[64885,64885],"mapped",[1593,1580,1605]],[[64886,64887],"mapped",[1593,1605,1605]],[[64888,64888],"mapped",[1593,1605,1609]],[[64889,64889],"mapped",[1594,1605,1605]],[[64890,64890],"mapped",[1594,1605,1610]],[[64891,64891],"mapped",[1594,1605,1609]],[[64892,64893],"mapped",[1601,1582,1605]],[[64894,64894],"mapped",[1602,1605,1581]],[[64895,64895],"mapped",[1602,1605,1605]],[[64896,64896],"mapped",[1604,1581,1605]],[[64897,64897],"mapped",[1604,1581,1610]],[[64898,64898],"mapped",[1604,1581,1609]],[[64899,64900],"mapped",[1604,1580,1580]],[[64901,64902],"mapped",[1604,1582,1605]],[[64903,64904],"mapped",[1604,1605,1581]],[[64905,64905],"mapped",[1605,1581,1580]],[[64906,64906],"mapped",[1605,1581,1605]],[[64907,64907],"mapped",[1605,1581,1610]],[[64908,64908],"mapped",[1605,1580,1581]],[[64909,64909],"mapped",[1605,1580,1605]],[[64910,64910],"mapped",[1605,1582,1580]],[[64911,64911],"mapped",[1605,1582,1605]],[[64912,64913],"disallowed"],[[64914,64914],"mapped",[1605,1580,1582]],[[64915,64915],"mapped",[1607,1605,1580]],[[64916,64916],"mapped",[1607,1605,1605]],[[64917,64917],"mapped",[1606,1581,1605]],[[64918,64918],"mapped",[1606,1581,1609]],[[64919,64920],"mapped",[1606,1580,1605]],[[64921,64921],"mapped",[1606,1580,1609]],[[64922,64922],"mapped",[1606,1605,1610]],[[64923,64923],"mapped",[1606,1605,1609]],[[64924,64925],"mapped",[1610,1605,1605]],[[64926,64926],"mapped",[1576,1582,1610]],[[64927,64927],"mapped",[1578,1580,1610]],[[64928,64928],"mapped",[1578,1580,1609]],[[64929,64929],"mapped",[1578,1582,1610]],[[64930,64930],"mapped",[1578,1582,1609]],[[64931,64931],"mapped",[1578,1605,1610]],[[64932,64932],"mapped",[1578,1605,1609]],[[64933,64933],"mapped",[1580,1605,1610]],[[64934,64934],"mapped",[1580,1581,1609]],[[64935,64935],"mapped",[1580,1605,1609]],[[64936,64936],"mapped",[1587,1582,1609]],[[64937,64937],"mapped",[1589,1581,1610]],[[64938,64938],"mapped",[1588,1581,1610]],[[64939,64939],"mapped",[1590,1581,1610]],[[64940,64940],"mapped",[1604,1580,1610]],[[64941,64941],"mapped",[1604,1605,1610]],[[64942,64942],"mapped",[1610,1581,1610]],[[64943,64943],"mapped",[1610,1580,1610]],[[64944,64944],"mapped",[1610,1605,1610]],[[64945,64945],"mapped",[1605,1605,1610]],[[64946,64946],"mapped",[1602,1605,1610]],[[64947,64947],"mapped",[1606,1581,1610]],[[64948,64948],"mapped",[1602,1605,1581]],[[64949,64949],"mapped",[1604,1581,1605]],[[64950,64950],"mapped",[1593,1605,1610]],[[64951,64951],"mapped",[1603,1605,1610]],[[64952,64952],"mapped",[1606,1580,1581]],[[64953,64953],"mapped",[1605,1582,1610]],[[64954,64954],"mapped",[1604,1580,1605]],[[64955,64955],"mapped",[1603,1605,1605]],[[64956,64956],"mapped",[1604,1580,1605]],[[64957,64957],"mapped",[1606,1580,1581]],[[64958,64958],"mapped",[1580,1581,1610]],[[64959,64959],"mapped",[1581,1580,1610]],[[64960,64960],"mapped",[1605,1580,1610]],[[64961,64961],"mapped",[1601,1605,1610]],[[64962,64962],"mapped",[1576,1581,1610]],[[64963,64963],"mapped",[1603,1605,1605]],[[64964,64964],"mapped",[1593,1580,1605]],[[64965,64965],"mapped",[1589,1605,1605]],[[64966,64966],"mapped",[1587,1582,1610]],[[64967,64967],"mapped",[1606,1580,1610]],[[64968,64975],"disallowed"],[[64976,65007],"disallowed"],[[65008,65008],"mapped",[1589,1604,1746]],[[65009,65009],"mapped",[1602,1604,1746]],[[65010,65010],"mapped",[1575,1604,1604,1607]],[[65011,65011],"mapped",[1575,1603,1576,1585]],[[65012,65012],"mapped",[1605,1581,1605,1583]],[[65013,65013],"mapped",[1589,1604,1593,1605]],[[65014,65014],"mapped",[1585,1587,1608,1604]],[[65015,65015],"mapped",[1593,1604,1610,1607]],[[65016,65016],"mapped",[1608,1587,1604,1605]],[[65017,65017],"mapped",[1589,1604,1609]],[[65018,65018],"disallowed_STD3_mapped",[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605]],[[65019,65019],"disallowed_STD3_mapped",[1580,1604,32,1580,1604,1575,1604,1607]],[[65020,65020],"mapped",[1585,1740,1575,1604]],[[65021,65021],"valid",[],"NV8"],[[65022,65023],"disallowed"],[[65024,65039],"ignored"],[[65040,65040],"disallowed_STD3_mapped",[44]],[[65041,65041],"mapped",[12289]],[[65042,65042],"disallowed"],[[65043,65043],"disallowed_STD3_mapped",[58]],[[65044,65044],"disallowed_STD3_mapped",[59]],[[65045,65045],"disallowed_STD3_mapped",[33]],[[65046,65046],"disallowed_STD3_mapped",[63]],[[65047,65047],"mapped",[12310]],[[65048,65048],"mapped",[12311]],[[65049,65049],"disallowed"],[[65050,65055],"disallowed"],[[65056,65059],"valid"],[[65060,65062],"valid"],[[65063,65069],"valid"],[[65070,65071],"valid"],[[65072,65072],"disallowed"],[[65073,65073],"mapped",[8212]],[[65074,65074],"mapped",[8211]],[[65075,65076],"disallowed_STD3_mapped",[95]],[[65077,65077],"disallowed_STD3_mapped",[40]],[[65078,65078],"disallowed_STD3_mapped",[41]],[[65079,65079],"disallowed_STD3_mapped",[123]],[[65080,65080],"disallowed_STD3_mapped",[125]],[[65081,65081],"mapped",[12308]],[[65082,65082],"mapped",[12309]],[[65083,65083],"mapped",[12304]],[[65084,65084],"mapped",[12305]],[[65085,65085],"mapped",[12298]],[[65086,65086],"mapped",[12299]],[[65087,65087],"mapped",[12296]],[[65088,65088],"mapped",[12297]],[[65089,65089],"mapped",[12300]],[[65090,65090],"mapped",[12301]],[[65091,65091],"mapped",[12302]],[[65092,65092],"mapped",[12303]],[[65093,65094],"valid",[],"NV8"],[[65095,65095],"disallowed_STD3_mapped",[91]],[[65096,65096],"disallowed_STD3_mapped",[93]],[[65097,65100],"disallowed_STD3_mapped",[32,773]],[[65101,65103],"disallowed_STD3_mapped",[95]],[[65104,65104],"disallowed_STD3_mapped",[44]],[[65105,65105],"mapped",[12289]],[[65106,65106],"disallowed"],[[65107,65107],"disallowed"],[[65108,65108],"disallowed_STD3_mapped",[59]],[[65109,65109],"disallowed_STD3_mapped",[58]],[[65110,65110],"disallowed_STD3_mapped",[63]],[[65111,65111],"disallowed_STD3_mapped",[33]],[[65112,65112],"mapped",[8212]],[[65113,65113],"disallowed_STD3_mapped",[40]],[[65114,65114],"disallowed_STD3_mapped",[41]],[[65115,65115],"disallowed_STD3_mapped",[123]],[[65116,65116],"disallowed_STD3_mapped",[125]],[[65117,65117],"mapped",[12308]],[[65118,65118],"mapped",[12309]],[[65119,65119],"disallowed_STD3_mapped",[35]],[[65120,65120],"disallowed_STD3_mapped",[38]],[[65121,65121],"disallowed_STD3_mapped",[42]],[[65122,65122],"disallowed_STD3_mapped",[43]],[[65123,65123],"mapped",[45]],[[65124,65124],"disallowed_STD3_mapped",[60]],[[65125,65125],"disallowed_STD3_mapped",[62]],[[65126,65126],"disallowed_STD3_mapped",[61]],[[65127,65127],"disallowed"],[[65128,65128],"disallowed_STD3_mapped",[92]],[[65129,65129],"disallowed_STD3_mapped",[36]],[[65130,65130],"disallowed_STD3_mapped",[37]],[[65131,65131],"disallowed_STD3_mapped",[64]],[[65132,65135],"disallowed"],[[65136,65136],"disallowed_STD3_mapped",[32,1611]],[[65137,65137],"mapped",[1600,1611]],[[65138,65138],"disallowed_STD3_mapped",[32,1612]],[[65139,65139],"valid"],[[65140,65140],"disallowed_STD3_mapped",[32,1613]],[[65141,65141],"disallowed"],[[65142,65142],"disallowed_STD3_mapped",[32,1614]],[[65143,65143],"mapped",[1600,1614]],[[65144,65144],"disallowed_STD3_mapped",[32,1615]],[[65145,65145],"mapped",[1600,1615]],[[65146,65146],"disallowed_STD3_mapped",[32,1616]],[[65147,65147],"mapped",[1600,1616]],[[65148,65148],"disallowed_STD3_mapped",[32,1617]],[[65149,65149],"mapped",[1600,1617]],[[65150,65150],"disallowed_STD3_mapped",[32,1618]],[[65151,65151],"mapped",[1600,1618]],[[65152,65152],"mapped",[1569]],[[65153,65154],"mapped",[1570]],[[65155,65156],"mapped",[1571]],[[65157,65158],"mapped",[1572]],[[65159,65160],"mapped",[1573]],[[65161,65164],"mapped",[1574]],[[65165,65166],"mapped",[1575]],[[65167,65170],"mapped",[1576]],[[65171,65172],"mapped",[1577]],[[65173,65176],"mapped",[1578]],[[65177,65180],"mapped",[1579]],[[65181,65184],"mapped",[1580]],[[65185,65188],"mapped",[1581]],[[65189,65192],"mapped",[1582]],[[65193,65194],"mapped",[1583]],[[65195,65196],"mapped",[1584]],[[65197,65198],"mapped",[1585]],[[65199,65200],"mapped",[1586]],[[65201,65204],"mapped",[1587]],[[65205,65208],"mapped",[1588]],[[65209,65212],"mapped",[1589]],[[65213,65216],"mapped",[1590]],[[65217,65220],"mapped",[1591]],[[65221,65224],"mapped",[1592]],[[65225,65228],"mapped",[1593]],[[65229,65232],"mapped",[1594]],[[65233,65236],"mapped",[1601]],[[65237,65240],"mapped",[1602]],[[65241,65244],"mapped",[1603]],[[65245,65248],"mapped",[1604]],[[65249,65252],"mapped",[1605]],[[65253,65256],"mapped",[1606]],[[65257,65260],"mapped",[1607]],[[65261,65262],"mapped",[1608]],[[65263,65264],"mapped",[1609]],[[65265,65268],"mapped",[1610]],[[65269,65270],"mapped",[1604,1570]],[[65271,65272],"mapped",[1604,1571]],[[65273,65274],"mapped",[1604,1573]],[[65275,65276],"mapped",[1604,1575]],[[65277,65278],"disallowed"],[[65279,65279],"ignored"],[[65280,65280],"disallowed"],[[65281,65281],"disallowed_STD3_mapped",[33]],[[65282,65282],"disallowed_STD3_mapped",[34]],[[65283,65283],"disallowed_STD3_mapped",[35]],[[65284,65284],"disallowed_STD3_mapped",[36]],[[65285,65285],"disallowed_STD3_mapped",[37]],[[65286,65286],"disallowed_STD3_mapped",[38]],[[65287,65287],"disallowed_STD3_mapped",[39]],[[65288,65288],"disallowed_STD3_mapped",[40]],[[65289,65289],"disallowed_STD3_mapped",[41]],[[65290,65290],"disallowed_STD3_mapped",[42]],[[65291,65291],"disallowed_STD3_mapped",[43]],[[65292,65292],"disallowed_STD3_mapped",[44]],[[65293,65293],"mapped",[45]],[[65294,65294],"mapped",[46]],[[65295,65295],"disallowed_STD3_mapped",[47]],[[65296,65296],"mapped",[48]],[[65297,65297],"mapped",[49]],[[65298,65298],"mapped",[50]],[[65299,65299],"mapped",[51]],[[65300,65300],"mapped",[52]],[[65301,65301],"mapped",[53]],[[65302,65302],"mapped",[54]],[[65303,65303],"mapped",[55]],[[65304,65304],"mapped",[56]],[[65305,65305],"mapped",[57]],[[65306,65306],"disallowed_STD3_mapped",[58]],[[65307,65307],"disallowed_STD3_mapped",[59]],[[65308,65308],"disallowed_STD3_mapped",[60]],[[65309,65309],"disallowed_STD3_mapped",[61]],[[65310,65310],"disallowed_STD3_mapped",[62]],[[65311,65311],"disallowed_STD3_mapped",[63]],[[65312,65312],"disallowed_STD3_mapped",[64]],[[65313,65313],"mapped",[97]],[[65314,65314],"mapped",[98]],[[65315,65315],"mapped",[99]],[[65316,65316],"mapped",[100]],[[65317,65317],"mapped",[101]],[[65318,65318],"mapped",[102]],[[65319,65319],"mapped",[103]],[[65320,65320],"mapped",[104]],[[65321,65321],"mapped",[105]],[[65322,65322],"mapped",[106]],[[65323,65323],"mapped",[107]],[[65324,65324],"mapped",[108]],[[65325,65325],"mapped",[109]],[[65326,65326],"mapped",[110]],[[65327,65327],"mapped",[111]],[[65328,65328],"mapped",[112]],[[65329,65329],"mapped",[113]],[[65330,65330],"mapped",[114]],[[65331,65331],"mapped",[115]],[[65332,65332],"mapped",[116]],[[65333,65333],"mapped",[117]],[[65334,65334],"mapped",[118]],[[65335,65335],"mapped",[119]],[[65336,65336],"mapped",[120]],[[65337,65337],"mapped",[121]],[[65338,65338],"mapped",[122]],[[65339,65339],"disallowed_STD3_mapped",[91]],[[65340,65340],"disallowed_STD3_mapped",[92]],[[65341,65341],"disallowed_STD3_mapped",[93]],[[65342,65342],"disallowed_STD3_mapped",[94]],[[65343,65343],"disallowed_STD3_mapped",[95]],[[65344,65344],"disallowed_STD3_mapped",[96]],[[65345,65345],"mapped",[97]],[[65346,65346],"mapped",[98]],[[65347,65347],"mapped",[99]],[[65348,65348],"mapped",[100]],[[65349,65349],"mapped",[101]],[[65350,65350],"mapped",[102]],[[65351,65351],"mapped",[103]],[[65352,65352],"mapped",[104]],[[65353,65353],"mapped",[105]],[[65354,65354],"mapped",[106]],[[65355,65355],"mapped",[107]],[[65356,65356],"mapped",[108]],[[65357,65357],"mapped",[109]],[[65358,65358],"mapped",[110]],[[65359,65359],"mapped",[111]],[[65360,65360],"mapped",[112]],[[65361,65361],"mapped",[113]],[[65362,65362],"mapped",[114]],[[65363,65363],"mapped",[115]],[[65364,65364],"mapped",[116]],[[65365,65365],"mapped",[117]],[[65366,65366],"mapped",[118]],[[65367,65367],"mapped",[119]],[[65368,65368],"mapped",[120]],[[65369,65369],"mapped",[121]],[[65370,65370],"mapped",[122]],[[65371,65371],"disallowed_STD3_mapped",[123]],[[65372,65372],"disallowed_STD3_mapped",[124]],[[65373,65373],"disallowed_STD3_mapped",[125]],[[65374,65374],"disallowed_STD3_mapped",[126]],[[65375,65375],"mapped",[10629]],[[65376,65376],"mapped",[10630]],[[65377,65377],"mapped",[46]],[[65378,65378],"mapped",[12300]],[[65379,65379],"mapped",[12301]],[[65380,65380],"mapped",[12289]],[[65381,65381],"mapped",[12539]],[[65382,65382],"mapped",[12530]],[[65383,65383],"mapped",[12449]],[[65384,65384],"mapped",[12451]],[[65385,65385],"mapped",[12453]],[[65386,65386],"mapped",[12455]],[[65387,65387],"mapped",[12457]],[[65388,65388],"mapped",[12515]],[[65389,65389],"mapped",[12517]],[[65390,65390],"mapped",[12519]],[[65391,65391],"mapped",[12483]],[[65392,65392],"mapped",[12540]],[[65393,65393],"mapped",[12450]],[[65394,65394],"mapped",[12452]],[[65395,65395],"mapped",[12454]],[[65396,65396],"mapped",[12456]],[[65397,65397],"mapped",[12458]],[[65398,65398],"mapped",[12459]],[[65399,65399],"mapped",[12461]],[[65400,65400],"mapped",[12463]],[[65401,65401],"mapped",[12465]],[[65402,65402],"mapped",[12467]],[[65403,65403],"mapped",[12469]],[[65404,65404],"mapped",[12471]],[[65405,65405],"mapped",[12473]],[[65406,65406],"mapped",[12475]],[[65407,65407],"mapped",[12477]],[[65408,65408],"mapped",[12479]],[[65409,65409],"mapped",[12481]],[[65410,65410],"mapped",[12484]],[[65411,65411],"mapped",[12486]],[[65412,65412],"mapped",[12488]],[[65413,65413],"mapped",[12490]],[[65414,65414],"mapped",[12491]],[[65415,65415],"mapped",[12492]],[[65416,65416],"mapped",[12493]],[[65417,65417],"mapped",[12494]],[[65418,65418],"mapped",[12495]],[[65419,65419],"mapped",[12498]],[[65420,65420],"mapped",[12501]],[[65421,65421],"mapped",[12504]],[[65422,65422],"mapped",[12507]],[[65423,65423],"mapped",[12510]],[[65424,65424],"mapped",[12511]],[[65425,65425],"mapped",[12512]],[[65426,65426],"mapped",[12513]],[[65427,65427],"mapped",[12514]],[[65428,65428],"mapped",[12516]],[[65429,65429],"mapped",[12518]],[[65430,65430],"mapped",[12520]],[[65431,65431],"mapped",[12521]],[[65432,65432],"mapped",[12522]],[[65433,65433],"mapped",[12523]],[[65434,65434],"mapped",[12524]],[[65435,65435],"mapped",[12525]],[[65436,65436],"mapped",[12527]],[[65437,65437],"mapped",[12531]],[[65438,65438],"mapped",[12441]],[[65439,65439],"mapped",[12442]],[[65440,65440],"disallowed"],[[65441,65441],"mapped",[4352]],[[65442,65442],"mapped",[4353]],[[65443,65443],"mapped",[4522]],[[65444,65444],"mapped",[4354]],[[65445,65445],"mapped",[4524]],[[65446,65446],"mapped",[4525]],[[65447,65447],"mapped",[4355]],[[65448,65448],"mapped",[4356]],[[65449,65449],"mapped",[4357]],[[65450,65450],"mapped",[4528]],[[65451,65451],"mapped",[4529]],[[65452,65452],"mapped",[4530]],[[65453,65453],"mapped",[4531]],[[65454,65454],"mapped",[4532]],[[65455,65455],"mapped",[4533]],[[65456,65456],"mapped",[4378]],[[65457,65457],"mapped",[4358]],[[65458,65458],"mapped",[4359]],[[65459,65459],"mapped",[4360]],[[65460,65460],"mapped",[4385]],[[65461,65461],"mapped",[4361]],[[65462,65462],"mapped",[4362]],[[65463,65463],"mapped",[4363]],[[65464,65464],"mapped",[4364]],[[65465,65465],"mapped",[4365]],[[65466,65466],"mapped",[4366]],[[65467,65467],"mapped",[4367]],[[65468,65468],"mapped",[4368]],[[65469,65469],"mapped",[4369]],[[65470,65470],"mapped",[4370]],[[65471,65473],"disallowed"],[[65474,65474],"mapped",[4449]],[[65475,65475],"mapped",[4450]],[[65476,65476],"mapped",[4451]],[[65477,65477],"mapped",[4452]],[[65478,65478],"mapped",[4453]],[[65479,65479],"mapped",[4454]],[[65480,65481],"disallowed"],[[65482,65482],"mapped",[4455]],[[65483,65483],"mapped",[4456]],[[65484,65484],"mapped",[4457]],[[65485,65485],"mapped",[4458]],[[65486,65486],"mapped",[4459]],[[65487,65487],"mapped",[4460]],[[65488,65489],"disallowed"],[[65490,65490],"mapped",[4461]],[[65491,65491],"mapped",[4462]],[[65492,65492],"mapped",[4463]],[[65493,65493],"mapped",[4464]],[[65494,65494],"mapped",[4465]],[[65495,65495],"mapped",[4466]],[[65496,65497],"disallowed"],[[65498,65498],"mapped",[4467]],[[65499,65499],"mapped",[4468]],[[65500,65500],"mapped",[4469]],[[65501,65503],"disallowed"],[[65504,65504],"mapped",[162]],[[65505,65505],"mapped",[163]],[[65506,65506],"mapped",[172]],[[65507,65507],"disallowed_STD3_mapped",[32,772]],[[65508,65508],"mapped",[166]],[[65509,65509],"mapped",[165]],[[65510,65510],"mapped",[8361]],[[65511,65511],"disallowed"],[[65512,65512],"mapped",[9474]],[[65513,65513],"mapped",[8592]],[[65514,65514],"mapped",[8593]],[[65515,65515],"mapped",[8594]],[[65516,65516],"mapped",[8595]],[[65517,65517],"mapped",[9632]],[[65518,65518],"mapped",[9675]],[[65519,65528],"disallowed"],[[65529,65531],"disallowed"],[[65532,65532],"disallowed"],[[65533,65533],"disallowed"],[[65534,65535],"disallowed"],[[65536,65547],"valid"],[[65548,65548],"disallowed"],[[65549,65574],"valid"],[[65575,65575],"disallowed"],[[65576,65594],"valid"],[[65595,65595],"disallowed"],[[65596,65597],"valid"],[[65598,65598],"disallowed"],[[65599,65613],"valid"],[[65614,65615],"disallowed"],[[65616,65629],"valid"],[[65630,65663],"disallowed"],[[65664,65786],"valid"],[[65787,65791],"disallowed"],[[65792,65794],"valid",[],"NV8"],[[65795,65798],"disallowed"],[[65799,65843],"valid",[],"NV8"],[[65844,65846],"disallowed"],[[65847,65855],"valid",[],"NV8"],[[65856,65930],"valid",[],"NV8"],[[65931,65932],"valid",[],"NV8"],[[65933,65935],"disallowed"],[[65936,65947],"valid",[],"NV8"],[[65948,65951],"disallowed"],[[65952,65952],"valid",[],"NV8"],[[65953,65999],"disallowed"],[[66000,66044],"valid",[],"NV8"],[[66045,66045],"valid"],[[66046,66175],"disallowed"],[[66176,66204],"valid"],[[66205,66207],"disallowed"],[[66208,66256],"valid"],[[66257,66271],"disallowed"],[[66272,66272],"valid"],[[66273,66299],"valid",[],"NV8"],[[66300,66303],"disallowed"],[[66304,66334],"valid"],[[66335,66335],"valid"],[[66336,66339],"valid",[],"NV8"],[[66340,66351],"disallowed"],[[66352,66368],"valid"],[[66369,66369],"valid",[],"NV8"],[[66370,66377],"valid"],[[66378,66378],"valid",[],"NV8"],[[66379,66383],"disallowed"],[[66384,66426],"valid"],[[66427,66431],"disallowed"],[[66432,66461],"valid"],[[66462,66462],"disallowed"],[[66463,66463],"valid",[],"NV8"],[[66464,66499],"valid"],[[66500,66503],"disallowed"],[[66504,66511],"valid"],[[66512,66517],"valid",[],"NV8"],[[66518,66559],"disallowed"],[[66560,66560],"mapped",[66600]],[[66561,66561],"mapped",[66601]],[[66562,66562],"mapped",[66602]],[[66563,66563],"mapped",[66603]],[[66564,66564],"mapped",[66604]],[[66565,66565],"mapped",[66605]],[[66566,66566],"mapped",[66606]],[[66567,66567],"mapped",[66607]],[[66568,66568],"mapped",[66608]],[[66569,66569],"mapped",[66609]],[[66570,66570],"mapped",[66610]],[[66571,66571],"mapped",[66611]],[[66572,66572],"mapped",[66612]],[[66573,66573],"mapped",[66613]],[[66574,66574],"mapped",[66614]],[[66575,66575],"mapped",[66615]],[[66576,66576],"mapped",[66616]],[[66577,66577],"mapped",[66617]],[[66578,66578],"mapped",[66618]],[[66579,66579],"mapped",[66619]],[[66580,66580],"mapped",[66620]],[[66581,66581],"mapped",[66621]],[[66582,66582],"mapped",[66622]],[[66583,66583],"mapped",[66623]],[[66584,66584],"mapped",[66624]],[[66585,66585],"mapped",[66625]],[[66586,66586],"mapped",[66626]],[[66587,66587],"mapped",[66627]],[[66588,66588],"mapped",[66628]],[[66589,66589],"mapped",[66629]],[[66590,66590],"mapped",[66630]],[[66591,66591],"mapped",[66631]],[[66592,66592],"mapped",[66632]],[[66593,66593],"mapped",[66633]],[[66594,66594],"mapped",[66634]],[[66595,66595],"mapped",[66635]],[[66596,66596],"mapped",[66636]],[[66597,66597],"mapped",[66637]],[[66598,66598],"mapped",[66638]],[[66599,66599],"mapped",[66639]],[[66600,66637],"valid"],[[66638,66717],"valid"],[[66718,66719],"disallowed"],[[66720,66729],"valid"],[[66730,66815],"disallowed"],[[66816,66855],"valid"],[[66856,66863],"disallowed"],[[66864,66915],"valid"],[[66916,66926],"disallowed"],[[66927,66927],"valid",[],"NV8"],[[66928,67071],"disallowed"],[[67072,67382],"valid"],[[67383,67391],"disallowed"],[[67392,67413],"valid"],[[67414,67423],"disallowed"],[[67424,67431],"valid"],[[67432,67583],"disallowed"],[[67584,67589],"valid"],[[67590,67591],"disallowed"],[[67592,67592],"valid"],[[67593,67593],"disallowed"],[[67594,67637],"valid"],[[67638,67638],"disallowed"],[[67639,67640],"valid"],[[67641,67643],"disallowed"],[[67644,67644],"valid"],[[67645,67646],"disallowed"],[[67647,67647],"valid"],[[67648,67669],"valid"],[[67670,67670],"disallowed"],[[67671,67679],"valid",[],"NV8"],[[67680,67702],"valid"],[[67703,67711],"valid",[],"NV8"],[[67712,67742],"valid"],[[67743,67750],"disallowed"],[[67751,67759],"valid",[],"NV8"],[[67760,67807],"disallowed"],[[67808,67826],"valid"],[[67827,67827],"disallowed"],[[67828,67829],"valid"],[[67830,67834],"disallowed"],[[67835,67839],"valid",[],"NV8"],[[67840,67861],"valid"],[[67862,67865],"valid",[],"NV8"],[[67866,67867],"valid",[],"NV8"],[[67868,67870],"disallowed"],[[67871,67871],"valid",[],"NV8"],[[67872,67897],"valid"],[[67898,67902],"disallowed"],[[67903,67903],"valid",[],"NV8"],[[67904,67967],"disallowed"],[[67968,68023],"valid"],[[68024,68027],"disallowed"],[[68028,68029],"valid",[],"NV8"],[[68030,68031],"valid"],[[68032,68047],"valid",[],"NV8"],[[68048,68049],"disallowed"],[[68050,68095],"valid",[],"NV8"],[[68096,68099],"valid"],[[68100,68100],"disallowed"],[[68101,68102],"valid"],[[68103,68107],"disallowed"],[[68108,68115],"valid"],[[68116,68116],"disallowed"],[[68117,68119],"valid"],[[68120,68120],"disallowed"],[[68121,68147],"valid"],[[68148,68151],"disallowed"],[[68152,68154],"valid"],[[68155,68158],"disallowed"],[[68159,68159],"valid"],[[68160,68167],"valid",[],"NV8"],[[68168,68175],"disallowed"],[[68176,68184],"valid",[],"NV8"],[[68185,68191],"disallowed"],[[68192,68220],"valid"],[[68221,68223],"valid",[],"NV8"],[[68224,68252],"valid"],[[68253,68255],"valid",[],"NV8"],[[68256,68287],"disallowed"],[[68288,68295],"valid"],[[68296,68296],"valid",[],"NV8"],[[68297,68326],"valid"],[[68327,68330],"disallowed"],[[68331,68342],"valid",[],"NV8"],[[68343,68351],"disallowed"],[[68352,68405],"valid"],[[68406,68408],"disallowed"],[[68409,68415],"valid",[],"NV8"],[[68416,68437],"valid"],[[68438,68439],"disallowed"],[[68440,68447],"valid",[],"NV8"],[[68448,68466],"valid"],[[68467,68471],"disallowed"],[[68472,68479],"valid",[],"NV8"],[[68480,68497],"valid"],[[68498,68504],"disallowed"],[[68505,68508],"valid",[],"NV8"],[[68509,68520],"disallowed"],[[68521,68527],"valid",[],"NV8"],[[68528,68607],"disallowed"],[[68608,68680],"valid"],[[68681,68735],"disallowed"],[[68736,68736],"mapped",[68800]],[[68737,68737],"mapped",[68801]],[[68738,68738],"mapped",[68802]],[[68739,68739],"mapped",[68803]],[[68740,68740],"mapped",[68804]],[[68741,68741],"mapped",[68805]],[[68742,68742],"mapped",[68806]],[[68743,68743],"mapped",[68807]],[[68744,68744],"mapped",[68808]],[[68745,68745],"mapped",[68809]],[[68746,68746],"mapped",[68810]],[[68747,68747],"mapped",[68811]],[[68748,68748],"mapped",[68812]],[[68749,68749],"mapped",[68813]],[[68750,68750],"mapped",[68814]],[[68751,68751],"mapped",[68815]],[[68752,68752],"mapped",[68816]],[[68753,68753],"mapped",[68817]],[[68754,68754],"mapped",[68818]],[[68755,68755],"mapped",[68819]],[[68756,68756],"mapped",[68820]],[[68757,68757],"mapped",[68821]],[[68758,68758],"mapped",[68822]],[[68759,68759],"mapped",[68823]],[[68760,68760],"mapped",[68824]],[[68761,68761],"mapped",[68825]],[[68762,68762],"mapped",[68826]],[[68763,68763],"mapped",[68827]],[[68764,68764],"mapped",[68828]],[[68765,68765],"mapped",[68829]],[[68766,68766],"mapped",[68830]],[[68767,68767],"mapped",[68831]],[[68768,68768],"mapped",[68832]],[[68769,68769],"mapped",[68833]],[[68770,68770],"mapped",[68834]],[[68771,68771],"mapped",[68835]],[[68772,68772],"mapped",[68836]],[[68773,68773],"mapped",[68837]],[[68774,68774],"mapped",[68838]],[[68775,68775],"mapped",[68839]],[[68776,68776],"mapped",[68840]],[[68777,68777],"mapped",[68841]],[[68778,68778],"mapped",[68842]],[[68779,68779],"mapped",[68843]],[[68780,68780],"mapped",[68844]],[[68781,68781],"mapped",[68845]],[[68782,68782],"mapped",[68846]],[[68783,68783],"mapped",[68847]],[[68784,68784],"mapped",[68848]],[[68785,68785],"mapped",[68849]],[[68786,68786],"mapped",[68850]],[[68787,68799],"disallowed"],[[68800,68850],"valid"],[[68851,68857],"disallowed"],[[68858,68863],"valid",[],"NV8"],[[68864,69215],"disallowed"],[[69216,69246],"valid",[],"NV8"],[[69247,69631],"disallowed"],[[69632,69702],"valid"],[[69703,69709],"valid",[],"NV8"],[[69710,69713],"disallowed"],[[69714,69733],"valid",[],"NV8"],[[69734,69743],"valid"],[[69744,69758],"disallowed"],[[69759,69759],"valid"],[[69760,69818],"valid"],[[69819,69820],"valid",[],"NV8"],[[69821,69821],"disallowed"],[[69822,69825],"valid",[],"NV8"],[[69826,69839],"disallowed"],[[69840,69864],"valid"],[[69865,69871],"disallowed"],[[69872,69881],"valid"],[[69882,69887],"disallowed"],[[69888,69940],"valid"],[[69941,69941],"disallowed"],[[69942,69951],"valid"],[[69952,69955],"valid",[],"NV8"],[[69956,69967],"disallowed"],[[69968,70003],"valid"],[[70004,70005],"valid",[],"NV8"],[[70006,70006],"valid"],[[70007,70015],"disallowed"],[[70016,70084],"valid"],[[70085,70088],"valid",[],"NV8"],[[70089,70089],"valid",[],"NV8"],[[70090,70092],"valid"],[[70093,70093],"valid",[],"NV8"],[[70094,70095],"disallowed"],[[70096,70105],"valid"],[[70106,70106],"valid"],[[70107,70107],"valid",[],"NV8"],[[70108,70108],"valid"],[[70109,70111],"valid",[],"NV8"],[[70112,70112],"disallowed"],[[70113,70132],"valid",[],"NV8"],[[70133,70143],"disallowed"],[[70144,70161],"valid"],[[70162,70162],"disallowed"],[[70163,70199],"valid"],[[70200,70205],"valid",[],"NV8"],[[70206,70271],"disallowed"],[[70272,70278],"valid"],[[70279,70279],"disallowed"],[[70280,70280],"valid"],[[70281,70281],"disallowed"],[[70282,70285],"valid"],[[70286,70286],"disallowed"],[[70287,70301],"valid"],[[70302,70302],"disallowed"],[[70303,70312],"valid"],[[70313,70313],"valid",[],"NV8"],[[70314,70319],"disallowed"],[[70320,70378],"valid"],[[70379,70383],"disallowed"],[[70384,70393],"valid"],[[70394,70399],"disallowed"],[[70400,70400],"valid"],[[70401,70403],"valid"],[[70404,70404],"disallowed"],[[70405,70412],"valid"],[[70413,70414],"disallowed"],[[70415,70416],"valid"],[[70417,70418],"disallowed"],[[70419,70440],"valid"],[[70441,70441],"disallowed"],[[70442,70448],"valid"],[[70449,70449],"disallowed"],[[70450,70451],"valid"],[[70452,70452],"disallowed"],[[70453,70457],"valid"],[[70458,70459],"disallowed"],[[70460,70468],"valid"],[[70469,70470],"disallowed"],[[70471,70472],"valid"],[[70473,70474],"disallowed"],[[70475,70477],"valid"],[[70478,70479],"disallowed"],[[70480,70480],"valid"],[[70481,70486],"disallowed"],[[70487,70487],"valid"],[[70488,70492],"disallowed"],[[70493,70499],"valid"],[[70500,70501],"disallowed"],[[70502,70508],"valid"],[[70509,70511],"disallowed"],[[70512,70516],"valid"],[[70517,70783],"disallowed"],[[70784,70853],"valid"],[[70854,70854],"valid",[],"NV8"],[[70855,70855],"valid"],[[70856,70863],"disallowed"],[[70864,70873],"valid"],[[70874,71039],"disallowed"],[[71040,71093],"valid"],[[71094,71095],"disallowed"],[[71096,71104],"valid"],[[71105,71113],"valid",[],"NV8"],[[71114,71127],"valid",[],"NV8"],[[71128,71133],"valid"],[[71134,71167],"disallowed"],[[71168,71232],"valid"],[[71233,71235],"valid",[],"NV8"],[[71236,71236],"valid"],[[71237,71247],"disallowed"],[[71248,71257],"valid"],[[71258,71295],"disallowed"],[[71296,71351],"valid"],[[71352,71359],"disallowed"],[[71360,71369],"valid"],[[71370,71423],"disallowed"],[[71424,71449],"valid"],[[71450,71452],"disallowed"],[[71453,71467],"valid"],[[71468,71471],"disallowed"],[[71472,71481],"valid"],[[71482,71487],"valid",[],"NV8"],[[71488,71839],"disallowed"],[[71840,71840],"mapped",[71872]],[[71841,71841],"mapped",[71873]],[[71842,71842],"mapped",[71874]],[[71843,71843],"mapped",[71875]],[[71844,71844],"mapped",[71876]],[[71845,71845],"mapped",[71877]],[[71846,71846],"mapped",[71878]],[[71847,71847],"mapped",[71879]],[[71848,71848],"mapped",[71880]],[[71849,71849],"mapped",[71881]],[[71850,71850],"mapped",[71882]],[[71851,71851],"mapped",[71883]],[[71852,71852],"mapped",[71884]],[[71853,71853],"mapped",[71885]],[[71854,71854],"mapped",[71886]],[[71855,71855],"mapped",[71887]],[[71856,71856],"mapped",[71888]],[[71857,71857],"mapped",[71889]],[[71858,71858],"mapped",[71890]],[[71859,71859],"mapped",[71891]],[[71860,71860],"mapped",[71892]],[[71861,71861],"mapped",[71893]],[[71862,71862],"mapped",[71894]],[[71863,71863],"mapped",[71895]],[[71864,71864],"mapped",[71896]],[[71865,71865],"mapped",[71897]],[[71866,71866],"mapped",[71898]],[[71867,71867],"mapped",[71899]],[[71868,71868],"mapped",[71900]],[[71869,71869],"mapped",[71901]],[[71870,71870],"mapped",[71902]],[[71871,71871],"mapped",[71903]],[[71872,71913],"valid"],[[71914,71922],"valid",[],"NV8"],[[71923,71934],"disallowed"],[[71935,71935],"valid"],[[71936,72383],"disallowed"],[[72384,72440],"valid"],[[72441,73727],"disallowed"],[[73728,74606],"valid"],[[74607,74648],"valid"],[[74649,74649],"valid"],[[74650,74751],"disallowed"],[[74752,74850],"valid",[],"NV8"],[[74851,74862],"valid",[],"NV8"],[[74863,74863],"disallowed"],[[74864,74867],"valid",[],"NV8"],[[74868,74868],"valid",[],"NV8"],[[74869,74879],"disallowed"],[[74880,75075],"valid"],[[75076,77823],"disallowed"],[[77824,78894],"valid"],[[78895,82943],"disallowed"],[[82944,83526],"valid"],[[83527,92159],"disallowed"],[[92160,92728],"valid"],[[92729,92735],"disallowed"],[[92736,92766],"valid"],[[92767,92767],"disallowed"],[[92768,92777],"valid"],[[92778,92781],"disallowed"],[[92782,92783],"valid",[],"NV8"],[[92784,92879],"disallowed"],[[92880,92909],"valid"],[[92910,92911],"disallowed"],[[92912,92916],"valid"],[[92917,92917],"valid",[],"NV8"],[[92918,92927],"disallowed"],[[92928,92982],"valid"],[[92983,92991],"valid",[],"NV8"],[[92992,92995],"valid"],[[92996,92997],"valid",[],"NV8"],[[92998,93007],"disallowed"],[[93008,93017],"valid"],[[93018,93018],"disallowed"],[[93019,93025],"valid",[],"NV8"],[[93026,93026],"disallowed"],[[93027,93047],"valid"],[[93048,93052],"disallowed"],[[93053,93071],"valid"],[[93072,93951],"disallowed"],[[93952,94020],"valid"],[[94021,94031],"disallowed"],[[94032,94078],"valid"],[[94079,94094],"disallowed"],[[94095,94111],"valid"],[[94112,110591],"disallowed"],[[110592,110593],"valid"],[[110594,113663],"disallowed"],[[113664,113770],"valid"],[[113771,113775],"disallowed"],[[113776,113788],"valid"],[[113789,113791],"disallowed"],[[113792,113800],"valid"],[[113801,113807],"disallowed"],[[113808,113817],"valid"],[[113818,113819],"disallowed"],[[113820,113820],"valid",[],"NV8"],[[113821,113822],"valid"],[[113823,113823],"valid",[],"NV8"],[[113824,113827],"ignored"],[[113828,118783],"disallowed"],[[118784,119029],"valid",[],"NV8"],[[119030,119039],"disallowed"],[[119040,119078],"valid",[],"NV8"],[[119079,119080],"disallowed"],[[119081,119081],"valid",[],"NV8"],[[119082,119133],"valid",[],"NV8"],[[119134,119134],"mapped",[119127,119141]],[[119135,119135],"mapped",[119128,119141]],[[119136,119136],"mapped",[119128,119141,119150]],[[119137,119137],"mapped",[119128,119141,119151]],[[119138,119138],"mapped",[119128,119141,119152]],[[119139,119139],"mapped",[119128,119141,119153]],[[119140,119140],"mapped",[119128,119141,119154]],[[119141,119154],"valid",[],"NV8"],[[119155,119162],"disallowed"],[[119163,119226],"valid",[],"NV8"],[[119227,119227],"mapped",[119225,119141]],[[119228,119228],"mapped",[119226,119141]],[[119229,119229],"mapped",[119225,119141,119150]],[[119230,119230],"mapped",[119226,119141,119150]],[[119231,119231],"mapped",[119225,119141,119151]],[[119232,119232],"mapped",[119226,119141,119151]],[[119233,119261],"valid",[],"NV8"],[[119262,119272],"valid",[],"NV8"],[[119273,119295],"disallowed"],[[119296,119365],"valid",[],"NV8"],[[119366,119551],"disallowed"],[[119552,119638],"valid",[],"NV8"],[[119639,119647],"disallowed"],[[119648,119665],"valid",[],"NV8"],[[119666,119807],"disallowed"],[[119808,119808],"mapped",[97]],[[119809,119809],"mapped",[98]],[[119810,119810],"mapped",[99]],[[119811,119811],"mapped",[100]],[[119812,119812],"mapped",[101]],[[119813,119813],"mapped",[102]],[[119814,119814],"mapped",[103]],[[119815,119815],"mapped",[104]],[[119816,119816],"mapped",[105]],[[119817,119817],"mapped",[106]],[[119818,119818],"mapped",[107]],[[119819,119819],"mapped",[108]],[[119820,119820],"mapped",[109]],[[119821,119821],"mapped",[110]],[[119822,119822],"mapped",[111]],[[119823,119823],"mapped",[112]],[[119824,119824],"mapped",[113]],[[119825,119825],"mapped",[114]],[[119826,119826],"mapped",[115]],[[119827,119827],"mapped",[116]],[[119828,119828],"mapped",[117]],[[119829,119829],"mapped",[118]],[[119830,119830],"mapped",[119]],[[119831,119831],"mapped",[120]],[[119832,119832],"mapped",[121]],[[119833,119833],"mapped",[122]],[[119834,119834],"mapped",[97]],[[119835,119835],"mapped",[98]],[[119836,119836],"mapped",[99]],[[119837,119837],"mapped",[100]],[[119838,119838],"mapped",[101]],[[119839,119839],"mapped",[102]],[[119840,119840],"mapped",[103]],[[119841,119841],"mapped",[104]],[[119842,119842],"mapped",[105]],[[119843,119843],"mapped",[106]],[[119844,119844],"mapped",[107]],[[119845,119845],"mapped",[108]],[[119846,119846],"mapped",[109]],[[119847,119847],"mapped",[110]],[[119848,119848],"mapped",[111]],[[119849,119849],"mapped",[112]],[[119850,119850],"mapped",[113]],[[119851,119851],"mapped",[114]],[[119852,119852],"mapped",[115]],[[119853,119853],"mapped",[116]],[[119854,119854],"mapped",[117]],[[119855,119855],"mapped",[118]],[[119856,119856],"mapped",[119]],[[119857,119857],"mapped",[120]],[[119858,119858],"mapped",[121]],[[119859,119859],"mapped",[122]],[[119860,119860],"mapped",[97]],[[119861,119861],"mapped",[98]],[[119862,119862],"mapped",[99]],[[119863,119863],"mapped",[100]],[[119864,119864],"mapped",[101]],[[119865,119865],"mapped",[102]],[[119866,119866],"mapped",[103]],[[119867,119867],"mapped",[104]],[[119868,119868],"mapped",[105]],[[119869,119869],"mapped",[106]],[[119870,119870],"mapped",[107]],[[119871,119871],"mapped",[108]],[[119872,119872],"mapped",[109]],[[119873,119873],"mapped",[110]],[[119874,119874],"mapped",[111]],[[119875,119875],"mapped",[112]],[[119876,119876],"mapped",[113]],[[119877,119877],"mapped",[114]],[[119878,119878],"mapped",[115]],[[119879,119879],"mapped",[116]],[[119880,119880],"mapped",[117]],[[119881,119881],"mapped",[118]],[[119882,119882],"mapped",[119]],[[119883,119883],"mapped",[120]],[[119884,119884],"mapped",[121]],[[119885,119885],"mapped",[122]],[[119886,119886],"mapped",[97]],[[119887,119887],"mapped",[98]],[[119888,119888],"mapped",[99]],[[119889,119889],"mapped",[100]],[[119890,119890],"mapped",[101]],[[119891,119891],"mapped",[102]],[[119892,119892],"mapped",[103]],[[119893,119893],"disallowed"],[[119894,119894],"mapped",[105]],[[119895,119895],"mapped",[106]],[[119896,119896],"mapped",[107]],[[119897,119897],"mapped",[108]],[[119898,119898],"mapped",[109]],[[119899,119899],"mapped",[110]],[[119900,119900],"mapped",[111]],[[119901,119901],"mapped",[112]],[[119902,119902],"mapped",[113]],[[119903,119903],"mapped",[114]],[[119904,119904],"mapped",[115]],[[119905,119905],"mapped",[116]],[[119906,119906],"mapped",[117]],[[119907,119907],"mapped",[118]],[[119908,119908],"mapped",[119]],[[119909,119909],"mapped",[120]],[[119910,119910],"mapped",[121]],[[119911,119911],"mapped",[122]],[[119912,119912],"mapped",[97]],[[119913,119913],"mapped",[98]],[[119914,119914],"mapped",[99]],[[119915,119915],"mapped",[100]],[[119916,119916],"mapped",[101]],[[119917,119917],"mapped",[102]],[[119918,119918],"mapped",[103]],[[119919,119919],"mapped",[104]],[[119920,119920],"mapped",[105]],[[119921,119921],"mapped",[106]],[[119922,119922],"mapped",[107]],[[119923,119923],"mapped",[108]],[[119924,119924],"mapped",[109]],[[119925,119925],"mapped",[110]],[[119926,119926],"mapped",[111]],[[119927,119927],"mapped",[112]],[[119928,119928],"mapped",[113]],[[119929,119929],"mapped",[114]],[[119930,119930],"mapped",[115]],[[119931,119931],"mapped",[116]],[[119932,119932],"mapped",[117]],[[119933,119933],"mapped",[118]],[[119934,119934],"mapped",[119]],[[119935,119935],"mapped",[120]],[[119936,119936],"mapped",[121]],[[119937,119937],"mapped",[122]],[[119938,119938],"mapped",[97]],[[119939,119939],"mapped",[98]],[[119940,119940],"mapped",[99]],[[119941,119941],"mapped",[100]],[[119942,119942],"mapped",[101]],[[119943,119943],"mapped",[102]],[[119944,119944],"mapped",[103]],[[119945,119945],"mapped",[104]],[[119946,119946],"mapped",[105]],[[119947,119947],"mapped",[106]],[[119948,119948],"mapped",[107]],[[119949,119949],"mapped",[108]],[[119950,119950],"mapped",[109]],[[119951,119951],"mapped",[110]],[[119952,119952],"mapped",[111]],[[119953,119953],"mapped",[112]],[[119954,119954],"mapped",[113]],[[119955,119955],"mapped",[114]],[[119956,119956],"mapped",[115]],[[119957,119957],"mapped",[116]],[[119958,119958],"mapped",[117]],[[119959,119959],"mapped",[118]],[[119960,119960],"mapped",[119]],[[119961,119961],"mapped",[120]],[[119962,119962],"mapped",[121]],[[119963,119963],"mapped",[122]],[[119964,119964],"mapped",[97]],[[119965,119965],"disallowed"],[[119966,119966],"mapped",[99]],[[119967,119967],"mapped",[100]],[[119968,119969],"disallowed"],[[119970,119970],"mapped",[103]],[[119971,119972],"disallowed"],[[119973,119973],"mapped",[106]],[[119974,119974],"mapped",[107]],[[119975,119976],"disallowed"],[[119977,119977],"mapped",[110]],[[119978,119978],"mapped",[111]],[[119979,119979],"mapped",[112]],[[119980,119980],"mapped",[113]],[[119981,119981],"disallowed"],[[119982,119982],"mapped",[115]],[[119983,119983],"mapped",[116]],[[119984,119984],"mapped",[117]],[[119985,119985],"mapped",[118]],[[119986,119986],"mapped",[119]],[[119987,119987],"mapped",[120]],[[119988,119988],"mapped",[121]],[[119989,119989],"mapped",[122]],[[119990,119990],"mapped",[97]],[[119991,119991],"mapped",[98]],[[119992,119992],"mapped",[99]],[[119993,119993],"mapped",[100]],[[119994,119994],"disallowed"],[[119995,119995],"mapped",[102]],[[119996,119996],"disallowed"],[[119997,119997],"mapped",[104]],[[119998,119998],"mapped",[105]],[[119999,119999],"mapped",[106]],[[120000,120000],"mapped",[107]],[[120001,120001],"mapped",[108]],[[120002,120002],"mapped",[109]],[[120003,120003],"mapped",[110]],[[120004,120004],"disallowed"],[[120005,120005],"mapped",[112]],[[120006,120006],"mapped",[113]],[[120007,120007],"mapped",[114]],[[120008,120008],"mapped",[115]],[[120009,120009],"mapped",[116]],[[120010,120010],"mapped",[117]],[[120011,120011],"mapped",[118]],[[120012,120012],"mapped",[119]],[[120013,120013],"mapped",[120]],[[120014,120014],"mapped",[121]],[[120015,120015],"mapped",[122]],[[120016,120016],"mapped",[97]],[[120017,120017],"mapped",[98]],[[120018,120018],"mapped",[99]],[[120019,120019],"mapped",[100]],[[120020,120020],"mapped",[101]],[[120021,120021],"mapped",[102]],[[120022,120022],"mapped",[103]],[[120023,120023],"mapped",[104]],[[120024,120024],"mapped",[105]],[[120025,120025],"mapped",[106]],[[120026,120026],"mapped",[107]],[[120027,120027],"mapped",[108]],[[120028,120028],"mapped",[109]],[[120029,120029],"mapped",[110]],[[120030,120030],"mapped",[111]],[[120031,120031],"mapped",[112]],[[120032,120032],"mapped",[113]],[[120033,120033],"mapped",[114]],[[120034,120034],"mapped",[115]],[[120035,120035],"mapped",[116]],[[120036,120036],"mapped",[117]],[[120037,120037],"mapped",[118]],[[120038,120038],"mapped",[119]],[[120039,120039],"mapped",[120]],[[120040,120040],"mapped",[121]],[[120041,120041],"mapped",[122]],[[120042,120042],"mapped",[97]],[[120043,120043],"mapped",[98]],[[120044,120044],"mapped",[99]],[[120045,120045],"mapped",[100]],[[120046,120046],"mapped",[101]],[[120047,120047],"mapped",[102]],[[120048,120048],"mapped",[103]],[[120049,120049],"mapped",[104]],[[120050,120050],"mapped",[105]],[[120051,120051],"mapped",[106]],[[120052,120052],"mapped",[107]],[[120053,120053],"mapped",[108]],[[120054,120054],"mapped",[109]],[[120055,120055],"mapped",[110]],[[120056,120056],"mapped",[111]],[[120057,120057],"mapped",[112]],[[120058,120058],"mapped",[113]],[[120059,120059],"mapped",[114]],[[120060,120060],"mapped",[115]],[[120061,120061],"mapped",[116]],[[120062,120062],"mapped",[117]],[[120063,120063],"mapped",[118]],[[120064,120064],"mapped",[119]],[[120065,120065],"mapped",[120]],[[120066,120066],"mapped",[121]],[[120067,120067],"mapped",[122]],[[120068,120068],"mapped",[97]],[[120069,120069],"mapped",[98]],[[120070,120070],"disallowed"],[[120071,120071],"mapped",[100]],[[120072,120072],"mapped",[101]],[[120073,120073],"mapped",[102]],[[120074,120074],"mapped",[103]],[[120075,120076],"disallowed"],[[120077,120077],"mapped",[106]],[[120078,120078],"mapped",[107]],[[120079,120079],"mapped",[108]],[[120080,120080],"mapped",[109]],[[120081,120081],"mapped",[110]],[[120082,120082],"mapped",[111]],[[120083,120083],"mapped",[112]],[[120084,120084],"mapped",[113]],[[120085,120085],"disallowed"],[[120086,120086],"mapped",[115]],[[120087,120087],"mapped",[116]],[[120088,120088],"mapped",[117]],[[120089,120089],"mapped",[118]],[[120090,120090],"mapped",[119]],[[120091,120091],"mapped",[120]],[[120092,120092],"mapped",[121]],[[120093,120093],"disallowed"],[[120094,120094],"mapped",[97]],[[120095,120095],"mapped",[98]],[[120096,120096],"mapped",[99]],[[120097,120097],"mapped",[100]],[[120098,120098],"mapped",[101]],[[120099,120099],"mapped",[102]],[[120100,120100],"mapped",[103]],[[120101,120101],"mapped",[104]],[[120102,120102],"mapped",[105]],[[120103,120103],"mapped",[106]],[[120104,120104],"mapped",[107]],[[120105,120105],"mapped",[108]],[[120106,120106],"mapped",[109]],[[120107,120107],"mapped",[110]],[[120108,120108],"mapped",[111]],[[120109,120109],"mapped",[112]],[[120110,120110],"mapped",[113]],[[120111,120111],"mapped",[114]],[[120112,120112],"mapped",[115]],[[120113,120113],"mapped",[116]],[[120114,120114],"mapped",[117]],[[120115,120115],"mapped",[118]],[[120116,120116],"mapped",[119]],[[120117,120117],"mapped",[120]],[[120118,120118],"mapped",[121]],[[120119,120119],"mapped",[122]],[[120120,120120],"mapped",[97]],[[120121,120121],"mapped",[98]],[[120122,120122],"disallowed"],[[120123,120123],"mapped",[100]],[[120124,120124],"mapped",[101]],[[120125,120125],"mapped",[102]],[[120126,120126],"mapped",[103]],[[120127,120127],"disallowed"],[[120128,120128],"mapped",[105]],[[120129,120129],"mapped",[106]],[[120130,120130],"mapped",[107]],[[120131,120131],"mapped",[108]],[[120132,120132],"mapped",[109]],[[120133,120133],"disallowed"],[[120134,120134],"mapped",[111]],[[120135,120137],"disallowed"],[[120138,120138],"mapped",[115]],[[120139,120139],"mapped",[116]],[[120140,120140],"mapped",[117]],[[120141,120141],"mapped",[118]],[[120142,120142],"mapped",[119]],[[120143,120143],"mapped",[120]],[[120144,120144],"mapped",[121]],[[120145,120145],"disallowed"],[[120146,120146],"mapped",[97]],[[120147,120147],"mapped",[98]],[[120148,120148],"mapped",[99]],[[120149,120149],"mapped",[100]],[[120150,120150],"mapped",[101]],[[120151,120151],"mapped",[102]],[[120152,120152],"mapped",[103]],[[120153,120153],"mapped",[104]],[[120154,120154],"mapped",[105]],[[120155,120155],"mapped",[106]],[[120156,120156],"mapped",[107]],[[120157,120157],"mapped",[108]],[[120158,120158],"mapped",[109]],[[120159,120159],"mapped",[110]],[[120160,120160],"mapped",[111]],[[120161,120161],"mapped",[112]],[[120162,120162],"mapped",[113]],[[120163,120163],"mapped",[114]],[[120164,120164],"mapped",[115]],[[120165,120165],"mapped",[116]],[[120166,120166],"mapped",[117]],[[120167,120167],"mapped",[118]],[[120168,120168],"mapped",[119]],[[120169,120169],"mapped",[120]],[[120170,120170],"mapped",[121]],[[120171,120171],"mapped",[122]],[[120172,120172],"mapped",[97]],[[120173,120173],"mapped",[98]],[[120174,120174],"mapped",[99]],[[120175,120175],"mapped",[100]],[[120176,120176],"mapped",[101]],[[120177,120177],"mapped",[102]],[[120178,120178],"mapped",[103]],[[120179,120179],"mapped",[104]],[[120180,120180],"mapped",[105]],[[120181,120181],"mapped",[106]],[[120182,120182],"mapped",[107]],[[120183,120183],"mapped",[108]],[[120184,120184],"mapped",[109]],[[120185,120185],"mapped",[110]],[[120186,120186],"mapped",[111]],[[120187,120187],"mapped",[112]],[[120188,120188],"mapped",[113]],[[120189,120189],"mapped",[114]],[[120190,120190],"mapped",[115]],[[120191,120191],"mapped",[116]],[[120192,120192],"mapped",[117]],[[120193,120193],"mapped",[118]],[[120194,120194],"mapped",[119]],[[120195,120195],"mapped",[120]],[[120196,120196],"mapped",[121]],[[120197,120197],"mapped",[122]],[[120198,120198],"mapped",[97]],[[120199,120199],"mapped",[98]],[[120200,120200],"mapped",[99]],[[120201,120201],"mapped",[100]],[[120202,120202],"mapped",[101]],[[120203,120203],"mapped",[102]],[[120204,120204],"mapped",[103]],[[120205,120205],"mapped",[104]],[[120206,120206],"mapped",[105]],[[120207,120207],"mapped",[106]],[[120208,120208],"mapped",[107]],[[120209,120209],"mapped",[108]],[[120210,120210],"mapped",[109]],[[120211,120211],"mapped",[110]],[[120212,120212],"mapped",[111]],[[120213,120213],"mapped",[112]],[[120214,120214],"mapped",[113]],[[120215,120215],"mapped",[114]],[[120216,120216],"mapped",[115]],[[120217,120217],"mapped",[116]],[[120218,120218],"mapped",[117]],[[120219,120219],"mapped",[118]],[[120220,120220],"mapped",[119]],[[120221,120221],"mapped",[120]],[[120222,120222],"mapped",[121]],[[120223,120223],"mapped",[122]],[[120224,120224],"mapped",[97]],[[120225,120225],"mapped",[98]],[[120226,120226],"mapped",[99]],[[120227,120227],"mapped",[100]],[[120228,120228],"mapped",[101]],[[120229,120229],"mapped",[102]],[[120230,120230],"mapped",[103]],[[120231,120231],"mapped",[104]],[[120232,120232],"mapped",[105]],[[120233,120233],"mapped",[106]],[[120234,120234],"mapped",[107]],[[120235,120235],"mapped",[108]],[[120236,120236],"mapped",[109]],[[120237,120237],"mapped",[110]],[[120238,120238],"mapped",[111]],[[120239,120239],"mapped",[112]],[[120240,120240],"mapped",[113]],[[120241,120241],"mapped",[114]],[[120242,120242],"mapped",[115]],[[120243,120243],"mapped",[116]],[[120244,120244],"mapped",[117]],[[120245,120245],"mapped",[118]],[[120246,120246],"mapped",[119]],[[120247,120247],"mapped",[120]],[[120248,120248],"mapped",[121]],[[120249,120249],"mapped",[122]],[[120250,120250],"mapped",[97]],[[120251,120251],"mapped",[98]],[[120252,120252],"mapped",[99]],[[120253,120253],"mapped",[100]],[[120254,120254],"mapped",[101]],[[120255,120255],"mapped",[102]],[[120256,120256],"mapped",[103]],[[120257,120257],"mapped",[104]],[[120258,120258],"mapped",[105]],[[120259,120259],"mapped",[106]],[[120260,120260],"mapped",[107]],[[120261,120261],"mapped",[108]],[[120262,120262],"mapped",[109]],[[120263,120263],"mapped",[110]],[[120264,120264],"mapped",[111]],[[120265,120265],"mapped",[112]],[[120266,120266],"mapped",[113]],[[120267,120267],"mapped",[114]],[[120268,120268],"mapped",[115]],[[120269,120269],"mapped",[116]],[[120270,120270],"mapped",[117]],[[120271,120271],"mapped",[118]],[[120272,120272],"mapped",[119]],[[120273,120273],"mapped",[120]],[[120274,120274],"mapped",[121]],[[120275,120275],"mapped",[122]],[[120276,120276],"mapped",[97]],[[120277,120277],"mapped",[98]],[[120278,120278],"mapped",[99]],[[120279,120279],"mapped",[100]],[[120280,120280],"mapped",[101]],[[120281,120281],"mapped",[102]],[[120282,120282],"mapped",[103]],[[120283,120283],"mapped",[104]],[[120284,120284],"mapped",[105]],[[120285,120285],"mapped",[106]],[[120286,120286],"mapped",[107]],[[120287,120287],"mapped",[108]],[[120288,120288],"mapped",[109]],[[120289,120289],"mapped",[110]],[[120290,120290],"mapped",[111]],[[120291,120291],"mapped",[112]],[[120292,120292],"mapped",[113]],[[120293,120293],"mapped",[114]],[[120294,120294],"mapped",[115]],[[120295,120295],"mapped",[116]],[[120296,120296],"mapped",[117]],[[120297,120297],"mapped",[118]],[[120298,120298],"mapped",[119]],[[120299,120299],"mapped",[120]],[[120300,120300],"mapped",[121]],[[120301,120301],"mapped",[122]],[[120302,120302],"mapped",[97]],[[120303,120303],"mapped",[98]],[[120304,120304],"mapped",[99]],[[120305,120305],"mapped",[100]],[[120306,120306],"mapped",[101]],[[120307,120307],"mapped",[102]],[[120308,120308],"mapped",[103]],[[120309,120309],"mapped",[104]],[[120310,120310],"mapped",[105]],[[120311,120311],"mapped",[106]],[[120312,120312],"mapped",[107]],[[120313,120313],"mapped",[108]],[[120314,120314],"mapped",[109]],[[120315,120315],"mapped",[110]],[[120316,120316],"mapped",[111]],[[120317,120317],"mapped",[112]],[[120318,120318],"mapped",[113]],[[120319,120319],"mapped",[114]],[[120320,120320],"mapped",[115]],[[120321,120321],"mapped",[116]],[[120322,120322],"mapped",[117]],[[120323,120323],"mapped",[118]],[[120324,120324],"mapped",[119]],[[120325,120325],"mapped",[120]],[[120326,120326],"mapped",[121]],[[120327,120327],"mapped",[122]],[[120328,120328],"mapped",[97]],[[120329,120329],"mapped",[98]],[[120330,120330],"mapped",[99]],[[120331,120331],"mapped",[100]],[[120332,120332],"mapped",[101]],[[120333,120333],"mapped",[102]],[[120334,120334],"mapped",[103]],[[120335,120335],"mapped",[104]],[[120336,120336],"mapped",[105]],[[120337,120337],"mapped",[106]],[[120338,120338],"mapped",[107]],[[120339,120339],"mapped",[108]],[[120340,120340],"mapped",[109]],[[120341,120341],"mapped",[110]],[[120342,120342],"mapped",[111]],[[120343,120343],"mapped",[112]],[[120344,120344],"mapped",[113]],[[120345,120345],"mapped",[114]],[[120346,120346],"mapped",[115]],[[120347,120347],"mapped",[116]],[[120348,120348],"mapped",[117]],[[120349,120349],"mapped",[118]],[[120350,120350],"mapped",[119]],[[120351,120351],"mapped",[120]],[[120352,120352],"mapped",[121]],[[120353,120353],"mapped",[122]],[[120354,120354],"mapped",[97]],[[120355,120355],"mapped",[98]],[[120356,120356],"mapped",[99]],[[120357,120357],"mapped",[100]],[[120358,120358],"mapped",[101]],[[120359,120359],"mapped",[102]],[[120360,120360],"mapped",[103]],[[120361,120361],"mapped",[104]],[[120362,120362],"mapped",[105]],[[120363,120363],"mapped",[106]],[[120364,120364],"mapped",[107]],[[120365,120365],"mapped",[108]],[[120366,120366],"mapped",[109]],[[120367,120367],"mapped",[110]],[[120368,120368],"mapped",[111]],[[120369,120369],"mapped",[112]],[[120370,120370],"mapped",[113]],[[120371,120371],"mapped",[114]],[[120372,120372],"mapped",[115]],[[120373,120373],"mapped",[116]],[[120374,120374],"mapped",[117]],[[120375,120375],"mapped",[118]],[[120376,120376],"mapped",[119]],[[120377,120377],"mapped",[120]],[[120378,120378],"mapped",[121]],[[120379,120379],"mapped",[122]],[[120380,120380],"mapped",[97]],[[120381,120381],"mapped",[98]],[[120382,120382],"mapped",[99]],[[120383,120383],"mapped",[100]],[[120384,120384],"mapped",[101]],[[120385,120385],"mapped",[102]],[[120386,120386],"mapped",[103]],[[120387,120387],"mapped",[104]],[[120388,120388],"mapped",[105]],[[120389,120389],"mapped",[106]],[[120390,120390],"mapped",[107]],[[120391,120391],"mapped",[108]],[[120392,120392],"mapped",[109]],[[120393,120393],"mapped",[110]],[[120394,120394],"mapped",[111]],[[120395,120395],"mapped",[112]],[[120396,120396],"mapped",[113]],[[120397,120397],"mapped",[114]],[[120398,120398],"mapped",[115]],[[120399,120399],"mapped",[116]],[[120400,120400],"mapped",[117]],[[120401,120401],"mapped",[118]],[[120402,120402],"mapped",[119]],[[120403,120403],"mapped",[120]],[[120404,120404],"mapped",[121]],[[120405,120405],"mapped",[122]],[[120406,120406],"mapped",[97]],[[120407,120407],"mapped",[98]],[[120408,120408],"mapped",[99]],[[120409,120409],"mapped",[100]],[[120410,120410],"mapped",[101]],[[120411,120411],"mapped",[102]],[[120412,120412],"mapped",[103]],[[120413,120413],"mapped",[104]],[[120414,120414],"mapped",[105]],[[120415,120415],"mapped",[106]],[[120416,120416],"mapped",[107]],[[120417,120417],"mapped",[108]],[[120418,120418],"mapped",[109]],[[120419,120419],"mapped",[110]],[[120420,120420],"mapped",[111]],[[120421,120421],"mapped",[112]],[[120422,120422],"mapped",[113]],[[120423,120423],"mapped",[114]],[[120424,120424],"mapped",[115]],[[120425,120425],"mapped",[116]],[[120426,120426],"mapped",[117]],[[120427,120427],"mapped",[118]],[[120428,120428],"mapped",[119]],[[120429,120429],"mapped",[120]],[[120430,120430],"mapped",[121]],[[120431,120431],"mapped",[122]],[[120432,120432],"mapped",[97]],[[120433,120433],"mapped",[98]],[[120434,120434],"mapped",[99]],[[120435,120435],"mapped",[100]],[[120436,120436],"mapped",[101]],[[120437,120437],"mapped",[102]],[[120438,120438],"mapped",[103]],[[120439,120439],"mapped",[104]],[[120440,120440],"mapped",[105]],[[120441,120441],"mapped",[106]],[[120442,120442],"mapped",[107]],[[120443,120443],"mapped",[108]],[[120444,120444],"mapped",[109]],[[120445,120445],"mapped",[110]],[[120446,120446],"mapped",[111]],[[120447,120447],"mapped",[112]],[[120448,120448],"mapped",[113]],[[120449,120449],"mapped",[114]],[[120450,120450],"mapped",[115]],[[120451,120451],"mapped",[116]],[[120452,120452],"mapped",[117]],[[120453,120453],"mapped",[118]],[[120454,120454],"mapped",[119]],[[120455,120455],"mapped",[120]],[[120456,120456],"mapped",[121]],[[120457,120457],"mapped",[122]],[[120458,120458],"mapped",[97]],[[120459,120459],"mapped",[98]],[[120460,120460],"mapped",[99]],[[120461,120461],"mapped",[100]],[[120462,120462],"mapped",[101]],[[120463,120463],"mapped",[102]],[[120464,120464],"mapped",[103]],[[120465,120465],"mapped",[104]],[[120466,120466],"mapped",[105]],[[120467,120467],"mapped",[106]],[[120468,120468],"mapped",[107]],[[120469,120469],"mapped",[108]],[[120470,120470],"mapped",[109]],[[120471,120471],"mapped",[110]],[[120472,120472],"mapped",[111]],[[120473,120473],"mapped",[112]],[[120474,120474],"mapped",[113]],[[120475,120475],"mapped",[114]],[[120476,120476],"mapped",[115]],[[120477,120477],"mapped",[116]],[[120478,120478],"mapped",[117]],[[120479,120479],"mapped",[118]],[[120480,120480],"mapped",[119]],[[120481,120481],"mapped",[120]],[[120482,120482],"mapped",[121]],[[120483,120483],"mapped",[122]],[[120484,120484],"mapped",[305]],[[120485,120485],"mapped",[567]],[[120486,120487],"disallowed"],[[120488,120488],"mapped",[945]],[[120489,120489],"mapped",[946]],[[120490,120490],"mapped",[947]],[[120491,120491],"mapped",[948]],[[120492,120492],"mapped",[949]],[[120493,120493],"mapped",[950]],[[120494,120494],"mapped",[951]],[[120495,120495],"mapped",[952]],[[120496,120496],"mapped",[953]],[[120497,120497],"mapped",[954]],[[120498,120498],"mapped",[955]],[[120499,120499],"mapped",[956]],[[120500,120500],"mapped",[957]],[[120501,120501],"mapped",[958]],[[120502,120502],"mapped",[959]],[[120503,120503],"mapped",[960]],[[120504,120504],"mapped",[961]],[[120505,120505],"mapped",[952]],[[120506,120506],"mapped",[963]],[[120507,120507],"mapped",[964]],[[120508,120508],"mapped",[965]],[[120509,120509],"mapped",[966]],[[120510,120510],"mapped",[967]],[[120511,120511],"mapped",[968]],[[120512,120512],"mapped",[969]],[[120513,120513],"mapped",[8711]],[[120514,120514],"mapped",[945]],[[120515,120515],"mapped",[946]],[[120516,120516],"mapped",[947]],[[120517,120517],"mapped",[948]],[[120518,120518],"mapped",[949]],[[120519,120519],"mapped",[950]],[[120520,120520],"mapped",[951]],[[120521,120521],"mapped",[952]],[[120522,120522],"mapped",[953]],[[120523,120523],"mapped",[954]],[[120524,120524],"mapped",[955]],[[120525,120525],"mapped",[956]],[[120526,120526],"mapped",[957]],[[120527,120527],"mapped",[958]],[[120528,120528],"mapped",[959]],[[120529,120529],"mapped",[960]],[[120530,120530],"mapped",[961]],[[120531,120532],"mapped",[963]],[[120533,120533],"mapped",[964]],[[120534,120534],"mapped",[965]],[[120535,120535],"mapped",[966]],[[120536,120536],"mapped",[967]],[[120537,120537],"mapped",[968]],[[120538,120538],"mapped",[969]],[[120539,120539],"mapped",[8706]],[[120540,120540],"mapped",[949]],[[120541,120541],"mapped",[952]],[[120542,120542],"mapped",[954]],[[120543,120543],"mapped",[966]],[[120544,120544],"mapped",[961]],[[120545,120545],"mapped",[960]],[[120546,120546],"mapped",[945]],[[120547,120547],"mapped",[946]],[[120548,120548],"mapped",[947]],[[120549,120549],"mapped",[948]],[[120550,120550],"mapped",[949]],[[120551,120551],"mapped",[950]],[[120552,120552],"mapped",[951]],[[120553,120553],"mapped",[952]],[[120554,120554],"mapped",[953]],[[120555,120555],"mapped",[954]],[[120556,120556],"mapped",[955]],[[120557,120557],"mapped",[956]],[[120558,120558],"mapped",[957]],[[120559,120559],"mapped",[958]],[[120560,120560],"mapped",[959]],[[120561,120561],"mapped",[960]],[[120562,120562],"mapped",[961]],[[120563,120563],"mapped",[952]],[[120564,120564],"mapped",[963]],[[120565,120565],"mapped",[964]],[[120566,120566],"mapped",[965]],[[120567,120567],"mapped",[966]],[[120568,120568],"mapped",[967]],[[120569,120569],"mapped",[968]],[[120570,120570],"mapped",[969]],[[120571,120571],"mapped",[8711]],[[120572,120572],"mapped",[945]],[[120573,120573],"mapped",[946]],[[120574,120574],"mapped",[947]],[[120575,120575],"mapped",[948]],[[120576,120576],"mapped",[949]],[[120577,120577],"mapped",[950]],[[120578,120578],"mapped",[951]],[[120579,120579],"mapped",[952]],[[120580,120580],"mapped",[953]],[[120581,120581],"mapped",[954]],[[120582,120582],"mapped",[955]],[[120583,120583],"mapped",[956]],[[120584,120584],"mapped",[957]],[[120585,120585],"mapped",[958]],[[120586,120586],"mapped",[959]],[[120587,120587],"mapped",[960]],[[120588,120588],"mapped",[961]],[[120589,120590],"mapped",[963]],[[120591,120591],"mapped",[964]],[[120592,120592],"mapped",[965]],[[120593,120593],"mapped",[966]],[[120594,120594],"mapped",[967]],[[120595,120595],"mapped",[968]],[[120596,120596],"mapped",[969]],[[120597,120597],"mapped",[8706]],[[120598,120598],"mapped",[949]],[[120599,120599],"mapped",[952]],[[120600,120600],"mapped",[954]],[[120601,120601],"mapped",[966]],[[120602,120602],"mapped",[961]],[[120603,120603],"mapped",[960]],[[120604,120604],"mapped",[945]],[[120605,120605],"mapped",[946]],[[120606,120606],"mapped",[947]],[[120607,120607],"mapped",[948]],[[120608,120608],"mapped",[949]],[[120609,120609],"mapped",[950]],[[120610,120610],"mapped",[951]],[[120611,120611],"mapped",[952]],[[120612,120612],"mapped",[953]],[[120613,120613],"mapped",[954]],[[120614,120614],"mapped",[955]],[[120615,120615],"mapped",[956]],[[120616,120616],"mapped",[957]],[[120617,120617],"mapped",[958]],[[120618,120618],"mapped",[959]],[[120619,120619],"mapped",[960]],[[120620,120620],"mapped",[961]],[[120621,120621],"mapped",[952]],[[120622,120622],"mapped",[963]],[[120623,120623],"mapped",[964]],[[120624,120624],"mapped",[965]],[[120625,120625],"mapped",[966]],[[120626,120626],"mapped",[967]],[[120627,120627],"mapped",[968]],[[120628,120628],"mapped",[969]],[[120629,120629],"mapped",[8711]],[[120630,120630],"mapped",[945]],[[120631,120631],"mapped",[946]],[[120632,120632],"mapped",[947]],[[120633,120633],"mapped",[948]],[[120634,120634],"mapped",[949]],[[120635,120635],"mapped",[950]],[[120636,120636],"mapped",[951]],[[120637,120637],"mapped",[952]],[[120638,120638],"mapped",[953]],[[120639,120639],"mapped",[954]],[[120640,120640],"mapped",[955]],[[120641,120641],"mapped",[956]],[[120642,120642],"mapped",[957]],[[120643,120643],"mapped",[958]],[[120644,120644],"mapped",[959]],[[120645,120645],"mapped",[960]],[[120646,120646],"mapped",[961]],[[120647,120648],"mapped",[963]],[[120649,120649],"mapped",[964]],[[120650,120650],"mapped",[965]],[[120651,120651],"mapped",[966]],[[120652,120652],"mapped",[967]],[[120653,120653],"mapped",[968]],[[120654,120654],"mapped",[969]],[[120655,120655],"mapped",[8706]],[[120656,120656],"mapped",[949]],[[120657,120657],"mapped",[952]],[[120658,120658],"mapped",[954]],[[120659,120659],"mapped",[966]],[[120660,120660],"mapped",[961]],[[120661,120661],"mapped",[960]],[[120662,120662],"mapped",[945]],[[120663,120663],"mapped",[946]],[[120664,120664],"mapped",[947]],[[120665,120665],"mapped",[948]],[[120666,120666],"mapped",[949]],[[120667,120667],"mapped",[950]],[[120668,120668],"mapped",[951]],[[120669,120669],"mapped",[952]],[[120670,120670],"mapped",[953]],[[120671,120671],"mapped",[954]],[[120672,120672],"mapped",[955]],[[120673,120673],"mapped",[956]],[[120674,120674],"mapped",[957]],[[120675,120675],"mapped",[958]],[[120676,120676],"mapped",[959]],[[120677,120677],"mapped",[960]],[[120678,120678],"mapped",[961]],[[120679,120679],"mapped",[952]],[[120680,120680],"mapped",[963]],[[120681,120681],"mapped",[964]],[[120682,120682],"mapped",[965]],[[120683,120683],"mapped",[966]],[[120684,120684],"mapped",[967]],[[120685,120685],"mapped",[968]],[[120686,120686],"mapped",[969]],[[120687,120687],"mapped",[8711]],[[120688,120688],"mapped",[945]],[[120689,120689],"mapped",[946]],[[120690,120690],"mapped",[947]],[[120691,120691],"mapped",[948]],[[120692,120692],"mapped",[949]],[[120693,120693],"mapped",[950]],[[120694,120694],"mapped",[951]],[[120695,120695],"mapped",[952]],[[120696,120696],"mapped",[953]],[[120697,120697],"mapped",[954]],[[120698,120698],"mapped",[955]],[[120699,120699],"mapped",[956]],[[120700,120700],"mapped",[957]],[[120701,120701],"mapped",[958]],[[120702,120702],"mapped",[959]],[[120703,120703],"mapped",[960]],[[120704,120704],"mapped",[961]],[[120705,120706],"mapped",[963]],[[120707,120707],"mapped",[964]],[[120708,120708],"mapped",[965]],[[120709,120709],"mapped",[966]],[[120710,120710],"mapped",[967]],[[120711,120711],"mapped",[968]],[[120712,120712],"mapped",[969]],[[120713,120713],"mapped",[8706]],[[120714,120714],"mapped",[949]],[[120715,120715],"mapped",[952]],[[120716,120716],"mapped",[954]],[[120717,120717],"mapped",[966]],[[120718,120718],"mapped",[961]],[[120719,120719],"mapped",[960]],[[120720,120720],"mapped",[945]],[[120721,120721],"mapped",[946]],[[120722,120722],"mapped",[947]],[[120723,120723],"mapped",[948]],[[120724,120724],"mapped",[949]],[[120725,120725],"mapped",[950]],[[120726,120726],"mapped",[951]],[[120727,120727],"mapped",[952]],[[120728,120728],"mapped",[953]],[[120729,120729],"mapped",[954]],[[120730,120730],"mapped",[955]],[[120731,120731],"mapped",[956]],[[120732,120732],"mapped",[957]],[[120733,120733],"mapped",[958]],[[120734,120734],"mapped",[959]],[[120735,120735],"mapped",[960]],[[120736,120736],"mapped",[961]],[[120737,120737],"mapped",[952]],[[120738,120738],"mapped",[963]],[[120739,120739],"mapped",[964]],[[120740,120740],"mapped",[965]],[[120741,120741],"mapped",[966]],[[120742,120742],"mapped",[967]],[[120743,120743],"mapped",[968]],[[120744,120744],"mapped",[969]],[[120745,120745],"mapped",[8711]],[[120746,120746],"mapped",[945]],[[120747,120747],"mapped",[946]],[[120748,120748],"mapped",[947]],[[120749,120749],"mapped",[948]],[[120750,120750],"mapped",[949]],[[120751,120751],"mapped",[950]],[[120752,120752],"mapped",[951]],[[120753,120753],"mapped",[952]],[[120754,120754],"mapped",[953]],[[120755,120755],"mapped",[954]],[[120756,120756],"mapped",[955]],[[120757,120757],"mapped",[956]],[[120758,120758],"mapped",[957]],[[120759,120759],"mapped",[958]],[[120760,120760],"mapped",[959]],[[120761,120761],"mapped",[960]],[[120762,120762],"mapped",[961]],[[120763,120764],"mapped",[963]],[[120765,120765],"mapped",[964]],[[120766,120766],"mapped",[965]],[[120767,120767],"mapped",[966]],[[120768,120768],"mapped",[967]],[[120769,120769],"mapped",[968]],[[120770,120770],"mapped",[969]],[[120771,120771],"mapped",[8706]],[[120772,120772],"mapped",[949]],[[120773,120773],"mapped",[952]],[[120774,120774],"mapped",[954]],[[120775,120775],"mapped",[966]],[[120776,120776],"mapped",[961]],[[120777,120777],"mapped",[960]],[[120778,120779],"mapped",[989]],[[120780,120781],"disallowed"],[[120782,120782],"mapped",[48]],[[120783,120783],"mapped",[49]],[[120784,120784],"mapped",[50]],[[120785,120785],"mapped",[51]],[[120786,120786],"mapped",[52]],[[120787,120787],"mapped",[53]],[[120788,120788],"mapped",[54]],[[120789,120789],"mapped",[55]],[[120790,120790],"mapped",[56]],[[120791,120791],"mapped",[57]],[[120792,120792],"mapped",[48]],[[120793,120793],"mapped",[49]],[[120794,120794],"mapped",[50]],[[120795,120795],"mapped",[51]],[[120796,120796],"mapped",[52]],[[120797,120797],"mapped",[53]],[[120798,120798],"mapped",[54]],[[120799,120799],"mapped",[55]],[[120800,120800],"mapped",[56]],[[120801,120801],"mapped",[57]],[[120802,120802],"mapped",[48]],[[120803,120803],"mapped",[49]],[[120804,120804],"mapped",[50]],[[120805,120805],"mapped",[51]],[[120806,120806],"mapped",[52]],[[120807,120807],"mapped",[53]],[[120808,120808],"mapped",[54]],[[120809,120809],"mapped",[55]],[[120810,120810],"mapped",[56]],[[120811,120811],"mapped",[57]],[[120812,120812],"mapped",[48]],[[120813,120813],"mapped",[49]],[[120814,120814],"mapped",[50]],[[120815,120815],"mapped",[51]],[[120816,120816],"mapped",[52]],[[120817,120817],"mapped",[53]],[[120818,120818],"mapped",[54]],[[120819,120819],"mapped",[55]],[[120820,120820],"mapped",[56]],[[120821,120821],"mapped",[57]],[[120822,120822],"mapped",[48]],[[120823,120823],"mapped",[49]],[[120824,120824],"mapped",[50]],[[120825,120825],"mapped",[51]],[[120826,120826],"mapped",[52]],[[120827,120827],"mapped",[53]],[[120828,120828],"mapped",[54]],[[120829,120829],"mapped",[55]],[[120830,120830],"mapped",[56]],[[120831,120831],"mapped",[57]],[[120832,121343],"valid",[],"NV8"],[[121344,121398],"valid"],[[121399,121402],"valid",[],"NV8"],[[121403,121452],"valid"],[[121453,121460],"valid",[],"NV8"],[[121461,121461],"valid"],[[121462,121475],"valid",[],"NV8"],[[121476,121476],"valid"],[[121477,121483],"valid",[],"NV8"],[[121484,121498],"disallowed"],[[121499,121503],"valid"],[[121504,121504],"disallowed"],[[121505,121519],"valid"],[[121520,124927],"disallowed"],[[124928,125124],"valid"],[[125125,125126],"disallowed"],[[125127,125135],"valid",[],"NV8"],[[125136,125142],"valid"],[[125143,126463],"disallowed"],[[126464,126464],"mapped",[1575]],[[126465,126465],"mapped",[1576]],[[126466,126466],"mapped",[1580]],[[126467,126467],"mapped",[1583]],[[126468,126468],"disallowed"],[[126469,126469],"mapped",[1608]],[[126470,126470],"mapped",[1586]],[[126471,126471],"mapped",[1581]],[[126472,126472],"mapped",[1591]],[[126473,126473],"mapped",[1610]],[[126474,126474],"mapped",[1603]],[[126475,126475],"mapped",[1604]],[[126476,126476],"mapped",[1605]],[[126477,126477],"mapped",[1606]],[[126478,126478],"mapped",[1587]],[[126479,126479],"mapped",[1593]],[[126480,126480],"mapped",[1601]],[[126481,126481],"mapped",[1589]],[[126482,126482],"mapped",[1602]],[[126483,126483],"mapped",[1585]],[[126484,126484],"mapped",[1588]],[[126485,126485],"mapped",[1578]],[[126486,126486],"mapped",[1579]],[[126487,126487],"mapped",[1582]],[[126488,126488],"mapped",[1584]],[[126489,126489],"mapped",[1590]],[[126490,126490],"mapped",[1592]],[[126491,126491],"mapped",[1594]],[[126492,126492],"mapped",[1646]],[[126493,126493],"mapped",[1722]],[[126494,126494],"mapped",[1697]],[[126495,126495],"mapped",[1647]],[[126496,126496],"disallowed"],[[126497,126497],"mapped",[1576]],[[126498,126498],"mapped",[1580]],[[126499,126499],"disallowed"],[[126500,126500],"mapped",[1607]],[[126501,126502],"disallowed"],[[126503,126503],"mapped",[1581]],[[126504,126504],"disallowed"],[[126505,126505],"mapped",[1610]],[[126506,126506],"mapped",[1603]],[[126507,126507],"mapped",[1604]],[[126508,126508],"mapped",[1605]],[[126509,126509],"mapped",[1606]],[[126510,126510],"mapped",[1587]],[[126511,126511],"mapped",[1593]],[[126512,126512],"mapped",[1601]],[[126513,126513],"mapped",[1589]],[[126514,126514],"mapped",[1602]],[[126515,126515],"disallowed"],[[126516,126516],"mapped",[1588]],[[126517,126517],"mapped",[1578]],[[126518,126518],"mapped",[1579]],[[126519,126519],"mapped",[1582]],[[126520,126520],"disallowed"],[[126521,126521],"mapped",[1590]],[[126522,126522],"disallowed"],[[126523,126523],"mapped",[1594]],[[126524,126529],"disallowed"],[[126530,126530],"mapped",[1580]],[[126531,126534],"disallowed"],[[126535,126535],"mapped",[1581]],[[126536,126536],"disallowed"],[[126537,126537],"mapped",[1610]],[[126538,126538],"disallowed"],[[126539,126539],"mapped",[1604]],[[126540,126540],"disallowed"],[[126541,126541],"mapped",[1606]],[[126542,126542],"mapped",[1587]],[[126543,126543],"mapped",[1593]],[[126544,126544],"disallowed"],[[126545,126545],"mapped",[1589]],[[126546,126546],"mapped",[1602]],[[126547,126547],"disallowed"],[[126548,126548],"mapped",[1588]],[[126549,126550],"disallowed"],[[126551,126551],"mapped",[1582]],[[126552,126552],"disallowed"],[[126553,126553],"mapped",[1590]],[[126554,126554],"disallowed"],[[126555,126555],"mapped",[1594]],[[126556,126556],"disallowed"],[[126557,126557],"mapped",[1722]],[[126558,126558],"disallowed"],[[126559,126559],"mapped",[1647]],[[126560,126560],"disallowed"],[[126561,126561],"mapped",[1576]],[[126562,126562],"mapped",[1580]],[[126563,126563],"disallowed"],[[126564,126564],"mapped",[1607]],[[126565,126566],"disallowed"],[[126567,126567],"mapped",[1581]],[[126568,126568],"mapped",[1591]],[[126569,126569],"mapped",[1610]],[[126570,126570],"mapped",[1603]],[[126571,126571],"disallowed"],[[126572,126572],"mapped",[1605]],[[126573,126573],"mapped",[1606]],[[126574,126574],"mapped",[1587]],[[126575,126575],"mapped",[1593]],[[126576,126576],"mapped",[1601]],[[126577,126577],"mapped",[1589]],[[126578,126578],"mapped",[1602]],[[126579,126579],"disallowed"],[[126580,126580],"mapped",[1588]],[[126581,126581],"mapped",[1578]],[[126582,126582],"mapped",[1579]],[[126583,126583],"mapped",[1582]],[[126584,126584],"disallowed"],[[126585,126585],"mapped",[1590]],[[126586,126586],"mapped",[1592]],[[126587,126587],"mapped",[1594]],[[126588,126588],"mapped",[1646]],[[126589,126589],"disallowed"],[[126590,126590],"mapped",[1697]],[[126591,126591],"disallowed"],[[126592,126592],"mapped",[1575]],[[126593,126593],"mapped",[1576]],[[126594,126594],"mapped",[1580]],[[126595,126595],"mapped",[1583]],[[126596,126596],"mapped",[1607]],[[126597,126597],"mapped",[1608]],[[126598,126598],"mapped",[1586]],[[126599,126599],"mapped",[1581]],[[126600,126600],"mapped",[1591]],[[126601,126601],"mapped",[1610]],[[126602,126602],"disallowed"],[[126603,126603],"mapped",[1604]],[[126604,126604],"mapped",[1605]],[[126605,126605],"mapped",[1606]],[[126606,126606],"mapped",[1587]],[[126607,126607],"mapped",[1593]],[[126608,126608],"mapped",[1601]],[[126609,126609],"mapped",[1589]],[[126610,126610],"mapped",[1602]],[[126611,126611],"mapped",[1585]],[[126612,126612],"mapped",[1588]],[[126613,126613],"mapped",[1578]],[[126614,126614],"mapped",[1579]],[[126615,126615],"mapped",[1582]],[[126616,126616],"mapped",[1584]],[[126617,126617],"mapped",[1590]],[[126618,126618],"mapped",[1592]],[[126619,126619],"mapped",[1594]],[[126620,126624],"disallowed"],[[126625,126625],"mapped",[1576]],[[126626,126626],"mapped",[1580]],[[126627,126627],"mapped",[1583]],[[126628,126628],"disallowed"],[[126629,126629],"mapped",[1608]],[[126630,126630],"mapped",[1586]],[[126631,126631],"mapped",[1581]],[[126632,126632],"mapped",[1591]],[[126633,126633],"mapped",[1610]],[[126634,126634],"disallowed"],[[126635,126635],"mapped",[1604]],[[126636,126636],"mapped",[1605]],[[126637,126637],"mapped",[1606]],[[126638,126638],"mapped",[1587]],[[126639,126639],"mapped",[1593]],[[126640,126640],"mapped",[1601]],[[126641,126641],"mapped",[1589]],[[126642,126642],"mapped",[1602]],[[126643,126643],"mapped",[1585]],[[126644,126644],"mapped",[1588]],[[126645,126645],"mapped",[1578]],[[126646,126646],"mapped",[1579]],[[126647,126647],"mapped",[1582]],[[126648,126648],"mapped",[1584]],[[126649,126649],"mapped",[1590]],[[126650,126650],"mapped",[1592]],[[126651,126651],"mapped",[1594]],[[126652,126703],"disallowed"],[[126704,126705],"valid",[],"NV8"],[[126706,126975],"disallowed"],[[126976,127019],"valid",[],"NV8"],[[127020,127023],"disallowed"],[[127024,127123],"valid",[],"NV8"],[[127124,127135],"disallowed"],[[127136,127150],"valid",[],"NV8"],[[127151,127152],"disallowed"],[[127153,127166],"valid",[],"NV8"],[[127167,127167],"valid",[],"NV8"],[[127168,127168],"disallowed"],[[127169,127183],"valid",[],"NV8"],[[127184,127184],"disallowed"],[[127185,127199],"valid",[],"NV8"],[[127200,127221],"valid",[],"NV8"],[[127222,127231],"disallowed"],[[127232,127232],"disallowed"],[[127233,127233],"disallowed_STD3_mapped",[48,44]],[[127234,127234],"disallowed_STD3_mapped",[49,44]],[[127235,127235],"disallowed_STD3_mapped",[50,44]],[[127236,127236],"disallowed_STD3_mapped",[51,44]],[[127237,127237],"disallowed_STD3_mapped",[52,44]],[[127238,127238],"disallowed_STD3_mapped",[53,44]],[[127239,127239],"disallowed_STD3_mapped",[54,44]],[[127240,127240],"disallowed_STD3_mapped",[55,44]],[[127241,127241],"disallowed_STD3_mapped",[56,44]],[[127242,127242],"disallowed_STD3_mapped",[57,44]],[[127243,127244],"valid",[],"NV8"],[[127245,127247],"disallowed"],[[127248,127248],"disallowed_STD3_mapped",[40,97,41]],[[127249,127249],"disallowed_STD3_mapped",[40,98,41]],[[127250,127250],"disallowed_STD3_mapped",[40,99,41]],[[127251,127251],"disallowed_STD3_mapped",[40,100,41]],[[127252,127252],"disallowed_STD3_mapped",[40,101,41]],[[127253,127253],"disallowed_STD3_mapped",[40,102,41]],[[127254,127254],"disallowed_STD3_mapped",[40,103,41]],[[127255,127255],"disallowed_STD3_mapped",[40,104,41]],[[127256,127256],"disallowed_STD3_mapped",[40,105,41]],[[127257,127257],"disallowed_STD3_mapped",[40,106,41]],[[127258,127258],"disallowed_STD3_mapped",[40,107,41]],[[127259,127259],"disallowed_STD3_mapped",[40,108,41]],[[127260,127260],"disallowed_STD3_mapped",[40,109,41]],[[127261,127261],"disallowed_STD3_mapped",[40,110,41]],[[127262,127262],"disallowed_STD3_mapped",[40,111,41]],[[127263,127263],"disallowed_STD3_mapped",[40,112,41]],[[127264,127264],"disallowed_STD3_mapped",[40,113,41]],[[127265,127265],"disallowed_STD3_mapped",[40,114,41]],[[127266,127266],"disallowed_STD3_mapped",[40,115,41]],[[127267,127267],"disallowed_STD3_mapped",[40,116,41]],[[127268,127268],"disallowed_STD3_mapped",[40,117,41]],[[127269,127269],"disallowed_STD3_mapped",[40,118,41]],[[127270,127270],"disallowed_STD3_mapped",[40,119,41]],[[127271,127271],"disallowed_STD3_mapped",[40,120,41]],[[127272,127272],"disallowed_STD3_mapped",[40,121,41]],[[127273,127273],"disallowed_STD3_mapped",[40,122,41]],[[127274,127274],"mapped",[12308,115,12309]],[[127275,127275],"mapped",[99]],[[127276,127276],"mapped",[114]],[[127277,127277],"mapped",[99,100]],[[127278,127278],"mapped",[119,122]],[[127279,127279],"disallowed"],[[127280,127280],"mapped",[97]],[[127281,127281],"mapped",[98]],[[127282,127282],"mapped",[99]],[[127283,127283],"mapped",[100]],[[127284,127284],"mapped",[101]],[[127285,127285],"mapped",[102]],[[127286,127286],"mapped",[103]],[[127287,127287],"mapped",[104]],[[127288,127288],"mapped",[105]],[[127289,127289],"mapped",[106]],[[127290,127290],"mapped",[107]],[[127291,127291],"mapped",[108]],[[127292,127292],"mapped",[109]],[[127293,127293],"mapped",[110]],[[127294,127294],"mapped",[111]],[[127295,127295],"mapped",[112]],[[127296,127296],"mapped",[113]],[[127297,127297],"mapped",[114]],[[127298,127298],"mapped",[115]],[[127299,127299],"mapped",[116]],[[127300,127300],"mapped",[117]],[[127301,127301],"mapped",[118]],[[127302,127302],"mapped",[119]],[[127303,127303],"mapped",[120]],[[127304,127304],"mapped",[121]],[[127305,127305],"mapped",[122]],[[127306,127306],"mapped",[104,118]],[[127307,127307],"mapped",[109,118]],[[127308,127308],"mapped",[115,100]],[[127309,127309],"mapped",[115,115]],[[127310,127310],"mapped",[112,112,118]],[[127311,127311],"mapped",[119,99]],[[127312,127318],"valid",[],"NV8"],[[127319,127319],"valid",[],"NV8"],[[127320,127326],"valid",[],"NV8"],[[127327,127327],"valid",[],"NV8"],[[127328,127337],"valid",[],"NV8"],[[127338,127338],"mapped",[109,99]],[[127339,127339],"mapped",[109,100]],[[127340,127343],"disallowed"],[[127344,127352],"valid",[],"NV8"],[[127353,127353],"valid",[],"NV8"],[[127354,127354],"valid",[],"NV8"],[[127355,127356],"valid",[],"NV8"],[[127357,127358],"valid",[],"NV8"],[[127359,127359],"valid",[],"NV8"],[[127360,127369],"valid",[],"NV8"],[[127370,127373],"valid",[],"NV8"],[[127374,127375],"valid",[],"NV8"],[[127376,127376],"mapped",[100,106]],[[127377,127386],"valid",[],"NV8"],[[127387,127461],"disallowed"],[[127462,127487],"valid",[],"NV8"],[[127488,127488],"mapped",[12411,12363]],[[127489,127489],"mapped",[12467,12467]],[[127490,127490],"mapped",[12469]],[[127491,127503],"disallowed"],[[127504,127504],"mapped",[25163]],[[127505,127505],"mapped",[23383]],[[127506,127506],"mapped",[21452]],[[127507,127507],"mapped",[12487]],[[127508,127508],"mapped",[20108]],[[127509,127509],"mapped",[22810]],[[127510,127510],"mapped",[35299]],[[127511,127511],"mapped",[22825]],[[127512,127512],"mapped",[20132]],[[127513,127513],"mapped",[26144]],[[127514,127514],"mapped",[28961]],[[127515,127515],"mapped",[26009]],[[127516,127516],"mapped",[21069]],[[127517,127517],"mapped",[24460]],[[127518,127518],"mapped",[20877]],[[127519,127519],"mapped",[26032]],[[127520,127520],"mapped",[21021]],[[127521,127521],"mapped",[32066]],[[127522,127522],"mapped",[29983]],[[127523,127523],"mapped",[36009]],[[127524,127524],"mapped",[22768]],[[127525,127525],"mapped",[21561]],[[127526,127526],"mapped",[28436]],[[127527,127527],"mapped",[25237]],[[127528,127528],"mapped",[25429]],[[127529,127529],"mapped",[19968]],[[127530,127530],"mapped",[19977]],[[127531,127531],"mapped",[36938]],[[127532,127532],"mapped",[24038]],[[127533,127533],"mapped",[20013]],[[127534,127534],"mapped",[21491]],[[127535,127535],"mapped",[25351]],[[127536,127536],"mapped",[36208]],[[127537,127537],"mapped",[25171]],[[127538,127538],"mapped",[31105]],[[127539,127539],"mapped",[31354]],[[127540,127540],"mapped",[21512]],[[127541,127541],"mapped",[28288]],[[127542,127542],"mapped",[26377]],[[127543,127543],"mapped",[26376]],[[127544,127544],"mapped",[30003]],[[127545,127545],"mapped",[21106]],[[127546,127546],"mapped",[21942]],[[127547,127551],"disallowed"],[[127552,127552],"mapped",[12308,26412,12309]],[[127553,127553],"mapped",[12308,19977,12309]],[[127554,127554],"mapped",[12308,20108,12309]],[[127555,127555],"mapped",[12308,23433,12309]],[[127556,127556],"mapped",[12308,28857,12309]],[[127557,127557],"mapped",[12308,25171,12309]],[[127558,127558],"mapped",[12308,30423,12309]],[[127559,127559],"mapped",[12308,21213,12309]],[[127560,127560],"mapped",[12308,25943,12309]],[[127561,127567],"disallowed"],[[127568,127568],"mapped",[24471]],[[127569,127569],"mapped",[21487]],[[127570,127743],"disallowed"],[[127744,127776],"valid",[],"NV8"],[[127777,127788],"valid",[],"NV8"],[[127789,127791],"valid",[],"NV8"],[[127792,127797],"valid",[],"NV8"],[[127798,127798],"valid",[],"NV8"],[[127799,127868],"valid",[],"NV8"],[[127869,127869],"valid",[],"NV8"],[[127870,127871],"valid",[],"NV8"],[[127872,127891],"valid",[],"NV8"],[[127892,127903],"valid",[],"NV8"],[[127904,127940],"valid",[],"NV8"],[[127941,127941],"valid",[],"NV8"],[[127942,127946],"valid",[],"NV8"],[[127947,127950],"valid",[],"NV8"],[[127951,127955],"valid",[],"NV8"],[[127956,127967],"valid",[],"NV8"],[[127968,127984],"valid",[],"NV8"],[[127985,127991],"valid",[],"NV8"],[[127992,127999],"valid",[],"NV8"],[[128000,128062],"valid",[],"NV8"],[[128063,128063],"valid",[],"NV8"],[[128064,128064],"valid",[],"NV8"],[[128065,128065],"valid",[],"NV8"],[[128066,128247],"valid",[],"NV8"],[[128248,128248],"valid",[],"NV8"],[[128249,128252],"valid",[],"NV8"],[[128253,128254],"valid",[],"NV8"],[[128255,128255],"valid",[],"NV8"],[[128256,128317],"valid",[],"NV8"],[[128318,128319],"valid",[],"NV8"],[[128320,128323],"valid",[],"NV8"],[[128324,128330],"valid",[],"NV8"],[[128331,128335],"valid",[],"NV8"],[[128336,128359],"valid",[],"NV8"],[[128360,128377],"valid",[],"NV8"],[[128378,128378],"disallowed"],[[128379,128419],"valid",[],"NV8"],[[128420,128420],"disallowed"],[[128421,128506],"valid",[],"NV8"],[[128507,128511],"valid",[],"NV8"],[[128512,128512],"valid",[],"NV8"],[[128513,128528],"valid",[],"NV8"],[[128529,128529],"valid",[],"NV8"],[[128530,128532],"valid",[],"NV8"],[[128533,128533],"valid",[],"NV8"],[[128534,128534],"valid",[],"NV8"],[[128535,128535],"valid",[],"NV8"],[[128536,128536],"valid",[],"NV8"],[[128537,128537],"valid",[],"NV8"],[[128538,128538],"valid",[],"NV8"],[[128539,128539],"valid",[],"NV8"],[[128540,128542],"valid",[],"NV8"],[[128543,128543],"valid",[],"NV8"],[[128544,128549],"valid",[],"NV8"],[[128550,128551],"valid",[],"NV8"],[[128552,128555],"valid",[],"NV8"],[[128556,128556],"valid",[],"NV8"],[[128557,128557],"valid",[],"NV8"],[[128558,128559],"valid",[],"NV8"],[[128560,128563],"valid",[],"NV8"],[[128564,128564],"valid",[],"NV8"],[[128565,128576],"valid",[],"NV8"],[[128577,128578],"valid",[],"NV8"],[[128579,128580],"valid",[],"NV8"],[[128581,128591],"valid",[],"NV8"],[[128592,128639],"valid",[],"NV8"],[[128640,128709],"valid",[],"NV8"],[[128710,128719],"valid",[],"NV8"],[[128720,128720],"valid",[],"NV8"],[[128721,128735],"disallowed"],[[128736,128748],"valid",[],"NV8"],[[128749,128751],"disallowed"],[[128752,128755],"valid",[],"NV8"],[[128756,128767],"disallowed"],[[128768,128883],"valid",[],"NV8"],[[128884,128895],"disallowed"],[[128896,128980],"valid",[],"NV8"],[[128981,129023],"disallowed"],[[129024,129035],"valid",[],"NV8"],[[129036,129039],"disallowed"],[[129040,129095],"valid",[],"NV8"],[[129096,129103],"disallowed"],[[129104,129113],"valid",[],"NV8"],[[129114,129119],"disallowed"],[[129120,129159],"valid",[],"NV8"],[[129160,129167],"disallowed"],[[129168,129197],"valid",[],"NV8"],[[129198,129295],"disallowed"],[[129296,129304],"valid",[],"NV8"],[[129305,129407],"disallowed"],[[129408,129412],"valid",[],"NV8"],[[129413,129471],"disallowed"],[[129472,129472],"valid",[],"NV8"],[[129473,131069],"disallowed"],[[131070,131071],"disallowed"],[[131072,173782],"valid"],[[173783,173823],"disallowed"],[[173824,177972],"valid"],[[177973,177983],"disallowed"],[[177984,178205],"valid"],[[178206,178207],"disallowed"],[[178208,183969],"valid"],[[183970,194559],"disallowed"],[[194560,194560],"mapped",[20029]],[[194561,194561],"mapped",[20024]],[[194562,194562],"mapped",[20033]],[[194563,194563],"mapped",[131362]],[[194564,194564],"mapped",[20320]],[[194565,194565],"mapped",[20398]],[[194566,194566],"mapped",[20411]],[[194567,194567],"mapped",[20482]],[[194568,194568],"mapped",[20602]],[[194569,194569],"mapped",[20633]],[[194570,194570],"mapped",[20711]],[[194571,194571],"mapped",[20687]],[[194572,194572],"mapped",[13470]],[[194573,194573],"mapped",[132666]],[[194574,194574],"mapped",[20813]],[[194575,194575],"mapped",[20820]],[[194576,194576],"mapped",[20836]],[[194577,194577],"mapped",[20855]],[[194578,194578],"mapped",[132380]],[[194579,194579],"mapped",[13497]],[[194580,194580],"mapped",[20839]],[[194581,194581],"mapped",[20877]],[[194582,194582],"mapped",[132427]],[[194583,194583],"mapped",[20887]],[[194584,194584],"mapped",[20900]],[[194585,194585],"mapped",[20172]],[[194586,194586],"mapped",[20908]],[[194587,194587],"mapped",[20917]],[[194588,194588],"mapped",[168415]],[[194589,194589],"mapped",[20981]],[[194590,194590],"mapped",[20995]],[[194591,194591],"mapped",[13535]],[[194592,194592],"mapped",[21051]],[[194593,194593],"mapped",[21062]],[[194594,194594],"mapped",[21106]],[[194595,194595],"mapped",[21111]],[[194596,194596],"mapped",[13589]],[[194597,194597],"mapped",[21191]],[[194598,194598],"mapped",[21193]],[[194599,194599],"mapped",[21220]],[[194600,194600],"mapped",[21242]],[[194601,194601],"mapped",[21253]],[[194602,194602],"mapped",[21254]],[[194603,194603],"mapped",[21271]],[[194604,194604],"mapped",[21321]],[[194605,194605],"mapped",[21329]],[[194606,194606],"mapped",[21338]],[[194607,194607],"mapped",[21363]],[[194608,194608],"mapped",[21373]],[[194609,194611],"mapped",[21375]],[[194612,194612],"mapped",[133676]],[[194613,194613],"mapped",[28784]],[[194614,194614],"mapped",[21450]],[[194615,194615],"mapped",[21471]],[[194616,194616],"mapped",[133987]],[[194617,194617],"mapped",[21483]],[[194618,194618],"mapped",[21489]],[[194619,194619],"mapped",[21510]],[[194620,194620],"mapped",[21662]],[[194621,194621],"mapped",[21560]],[[194622,194622],"mapped",[21576]],[[194623,194623],"mapped",[21608]],[[194624,194624],"mapped",[21666]],[[194625,194625],"mapped",[21750]],[[194626,194626],"mapped",[21776]],[[194627,194627],"mapped",[21843]],[[194628,194628],"mapped",[21859]],[[194629,194630],"mapped",[21892]],[[194631,194631],"mapped",[21913]],[[194632,194632],"mapped",[21931]],[[194633,194633],"mapped",[21939]],[[194634,194634],"mapped",[21954]],[[194635,194635],"mapped",[22294]],[[194636,194636],"mapped",[22022]],[[194637,194637],"mapped",[22295]],[[194638,194638],"mapped",[22097]],[[194639,194639],"mapped",[22132]],[[194640,194640],"mapped",[20999]],[[194641,194641],"mapped",[22766]],[[194642,194642],"mapped",[22478]],[[194643,194643],"mapped",[22516]],[[194644,194644],"mapped",[22541]],[[194645,194645],"mapped",[22411]],[[194646,194646],"mapped",[22578]],[[194647,194647],"mapped",[22577]],[[194648,194648],"mapped",[22700]],[[194649,194649],"mapped",[136420]],[[194650,194650],"mapped",[22770]],[[194651,194651],"mapped",[22775]],[[194652,194652],"mapped",[22790]],[[194653,194653],"mapped",[22810]],[[194654,194654],"mapped",[22818]],[[194655,194655],"mapped",[22882]],[[194656,194656],"mapped",[136872]],[[194657,194657],"mapped",[136938]],[[194658,194658],"mapped",[23020]],[[194659,194659],"mapped",[23067]],[[194660,194660],"mapped",[23079]],[[194661,194661],"mapped",[23000]],[[194662,194662],"mapped",[23142]],[[194663,194663],"mapped",[14062]],[[194664,194664],"disallowed"],[[194665,194665],"mapped",[23304]],[[194666,194667],"mapped",[23358]],[[194668,194668],"mapped",[137672]],[[194669,194669],"mapped",[23491]],[[194670,194670],"mapped",[23512]],[[194671,194671],"mapped",[23527]],[[194672,194672],"mapped",[23539]],[[194673,194673],"mapped",[138008]],[[194674,194674],"mapped",[23551]],[[194675,194675],"mapped",[23558]],[[194676,194676],"disallowed"],[[194677,194677],"mapped",[23586]],[[194678,194678],"mapped",[14209]],[[194679,194679],"mapped",[23648]],[[194680,194680],"mapped",[23662]],[[194681,194681],"mapped",[23744]],[[194682,194682],"mapped",[23693]],[[194683,194683],"mapped",[138724]],[[194684,194684],"mapped",[23875]],[[194685,194685],"mapped",[138726]],[[194686,194686],"mapped",[23918]],[[194687,194687],"mapped",[23915]],[[194688,194688],"mapped",[23932]],[[194689,194689],"mapped",[24033]],[[194690,194690],"mapped",[24034]],[[194691,194691],"mapped",[14383]],[[194692,194692],"mapped",[24061]],[[194693,194693],"mapped",[24104]],[[194694,194694],"mapped",[24125]],[[194695,194695],"mapped",[24169]],[[194696,194696],"mapped",[14434]],[[194697,194697],"mapped",[139651]],[[194698,194698],"mapped",[14460]],[[194699,194699],"mapped",[24240]],[[194700,194700],"mapped",[24243]],[[194701,194701],"mapped",[24246]],[[194702,194702],"mapped",[24266]],[[194703,194703],"mapped",[172946]],[[194704,194704],"mapped",[24318]],[[194705,194706],"mapped",[140081]],[[194707,194707],"mapped",[33281]],[[194708,194709],"mapped",[24354]],[[194710,194710],"mapped",[14535]],[[194711,194711],"mapped",[144056]],[[194712,194712],"mapped",[156122]],[[194713,194713],"mapped",[24418]],[[194714,194714],"mapped",[24427]],[[194715,194715],"mapped",[14563]],[[194716,194716],"mapped",[24474]],[[194717,194717],"mapped",[24525]],[[194718,194718],"mapped",[24535]],[[194719,194719],"mapped",[24569]],[[194720,194720],"mapped",[24705]],[[194721,194721],"mapped",[14650]],[[194722,194722],"mapped",[14620]],[[194723,194723],"mapped",[24724]],[[194724,194724],"mapped",[141012]],[[194725,194725],"mapped",[24775]],[[194726,194726],"mapped",[24904]],[[194727,194727],"mapped",[24908]],[[194728,194728],"mapped",[24910]],[[194729,194729],"mapped",[24908]],[[194730,194730],"mapped",[24954]],[[194731,194731],"mapped",[24974]],[[194732,194732],"mapped",[25010]],[[194733,194733],"mapped",[24996]],[[194734,194734],"mapped",[25007]],[[194735,194735],"mapped",[25054]],[[194736,194736],"mapped",[25074]],[[194737,194737],"mapped",[25078]],[[194738,194738],"mapped",[25104]],[[194739,194739],"mapped",[25115]],[[194740,194740],"mapped",[25181]],[[194741,194741],"mapped",[25265]],[[194742,194742],"mapped",[25300]],[[194743,194743],"mapped",[25424]],[[194744,194744],"mapped",[142092]],[[194745,194745],"mapped",[25405]],[[194746,194746],"mapped",[25340]],[[194747,194747],"mapped",[25448]],[[194748,194748],"mapped",[25475]],[[194749,194749],"mapped",[25572]],[[194750,194750],"mapped",[142321]],[[194751,194751],"mapped",[25634]],[[194752,194752],"mapped",[25541]],[[194753,194753],"mapped",[25513]],[[194754,194754],"mapped",[14894]],[[194755,194755],"mapped",[25705]],[[194756,194756],"mapped",[25726]],[[194757,194757],"mapped",[25757]],[[194758,194758],"mapped",[25719]],[[194759,194759],"mapped",[14956]],[[194760,194760],"mapped",[25935]],[[194761,194761],"mapped",[25964]],[[194762,194762],"mapped",[143370]],[[194763,194763],"mapped",[26083]],[[194764,194764],"mapped",[26360]],[[194765,194765],"mapped",[26185]],[[194766,194766],"mapped",[15129]],[[194767,194767],"mapped",[26257]],[[194768,194768],"mapped",[15112]],[[194769,194769],"mapped",[15076]],[[194770,194770],"mapped",[20882]],[[194771,194771],"mapped",[20885]],[[194772,194772],"mapped",[26368]],[[194773,194773],"mapped",[26268]],[[194774,194774],"mapped",[32941]],[[194775,194775],"mapped",[17369]],[[194776,194776],"mapped",[26391]],[[194777,194777],"mapped",[26395]],[[194778,194778],"mapped",[26401]],[[194779,194779],"mapped",[26462]],[[194780,194780],"mapped",[26451]],[[194781,194781],"mapped",[144323]],[[194782,194782],"mapped",[15177]],[[194783,194783],"mapped",[26618]],[[194784,194784],"mapped",[26501]],[[194785,194785],"mapped",[26706]],[[194786,194786],"mapped",[26757]],[[194787,194787],"mapped",[144493]],[[194788,194788],"mapped",[26766]],[[194789,194789],"mapped",[26655]],[[194790,194790],"mapped",[26900]],[[194791,194791],"mapped",[15261]],[[194792,194792],"mapped",[26946]],[[194793,194793],"mapped",[27043]],[[194794,194794],"mapped",[27114]],[[194795,194795],"mapped",[27304]],[[194796,194796],"mapped",[145059]],[[194797,194797],"mapped",[27355]],[[194798,194798],"mapped",[15384]],[[194799,194799],"mapped",[27425]],[[194800,194800],"mapped",[145575]],[[194801,194801],"mapped",[27476]],[[194802,194802],"mapped",[15438]],[[194803,194803],"mapped",[27506]],[[194804,194804],"mapped",[27551]],[[194805,194805],"mapped",[27578]],[[194806,194806],"mapped",[27579]],[[194807,194807],"mapped",[146061]],[[194808,194808],"mapped",[138507]],[[194809,194809],"mapped",[146170]],[[194810,194810],"mapped",[27726]],[[194811,194811],"mapped",[146620]],[[194812,194812],"mapped",[27839]],[[194813,194813],"mapped",[27853]],[[194814,194814],"mapped",[27751]],[[194815,194815],"mapped",[27926]],[[194816,194816],"mapped",[27966]],[[194817,194817],"mapped",[28023]],[[194818,194818],"mapped",[27969]],[[194819,194819],"mapped",[28009]],[[194820,194820],"mapped",[28024]],[[194821,194821],"mapped",[28037]],[[194822,194822],"mapped",[146718]],[[194823,194823],"mapped",[27956]],[[194824,194824],"mapped",[28207]],[[194825,194825],"mapped",[28270]],[[194826,194826],"mapped",[15667]],[[194827,194827],"mapped",[28363]],[[194828,194828],"mapped",[28359]],[[194829,194829],"mapped",[147153]],[[194830,194830],"mapped",[28153]],[[194831,194831],"mapped",[28526]],[[194832,194832],"mapped",[147294]],[[194833,194833],"mapped",[147342]],[[194834,194834],"mapped",[28614]],[[194835,194835],"mapped",[28729]],[[194836,194836],"mapped",[28702]],[[194837,194837],"mapped",[28699]],[[194838,194838],"mapped",[15766]],[[194839,194839],"mapped",[28746]],[[194840,194840],"mapped",[28797]],[[194841,194841],"mapped",[28791]],[[194842,194842],"mapped",[28845]],[[194843,194843],"mapped",[132389]],[[194844,194844],"mapped",[28997]],[[194845,194845],"mapped",[148067]],[[194846,194846],"mapped",[29084]],[[194847,194847],"disallowed"],[[194848,194848],"mapped",[29224]],[[194849,194849],"mapped",[29237]],[[194850,194850],"mapped",[29264]],[[194851,194851],"mapped",[149000]],[[194852,194852],"mapped",[29312]],[[194853,194853],"mapped",[29333]],[[194854,194854],"mapped",[149301]],[[194855,194855],"mapped",[149524]],[[194856,194856],"mapped",[29562]],[[194857,194857],"mapped",[29579]],[[194858,194858],"mapped",[16044]],[[194859,194859],"mapped",[29605]],[[194860,194861],"mapped",[16056]],[[194862,194862],"mapped",[29767]],[[194863,194863],"mapped",[29788]],[[194864,194864],"mapped",[29809]],[[194865,194865],"mapped",[29829]],[[194866,194866],"mapped",[29898]],[[194867,194867],"mapped",[16155]],[[194868,194868],"mapped",[29988]],[[194869,194869],"mapped",[150582]],[[194870,194870],"mapped",[30014]],[[194871,194871],"mapped",[150674]],[[194872,194872],"mapped",[30064]],[[194873,194873],"mapped",[139679]],[[194874,194874],"mapped",[30224]],[[194875,194875],"mapped",[151457]],[[194876,194876],"mapped",[151480]],[[194877,194877],"mapped",[151620]],[[194878,194878],"mapped",[16380]],[[194879,194879],"mapped",[16392]],[[194880,194880],"mapped",[30452]],[[194881,194881],"mapped",[151795]],[[194882,194882],"mapped",[151794]],[[194883,194883],"mapped",[151833]],[[194884,194884],"mapped",[151859]],[[194885,194885],"mapped",[30494]],[[194886,194887],"mapped",[30495]],[[194888,194888],"mapped",[30538]],[[194889,194889],"mapped",[16441]],[[194890,194890],"mapped",[30603]],[[194891,194891],"mapped",[16454]],[[194892,194892],"mapped",[16534]],[[194893,194893],"mapped",[152605]],[[194894,194894],"mapped",[30798]],[[194895,194895],"mapped",[30860]],[[194896,194896],"mapped",[30924]],[[194897,194897],"mapped",[16611]],[[194898,194898],"mapped",[153126]],[[194899,194899],"mapped",[31062]],[[194900,194900],"mapped",[153242]],[[194901,194901],"mapped",[153285]],[[194902,194902],"mapped",[31119]],[[194903,194903],"mapped",[31211]],[[194904,194904],"mapped",[16687]],[[194905,194905],"mapped",[31296]],[[194906,194906],"mapped",[31306]],[[194907,194907],"mapped",[31311]],[[194908,194908],"mapped",[153980]],[[194909,194910],"mapped",[154279]],[[194911,194911],"disallowed"],[[194912,194912],"mapped",[16898]],[[194913,194913],"mapped",[154539]],[[194914,194914],"mapped",[31686]],[[194915,194915],"mapped",[31689]],[[194916,194916],"mapped",[16935]],[[194917,194917],"mapped",[154752]],[[194918,194918],"mapped",[31954]],[[194919,194919],"mapped",[17056]],[[194920,194920],"mapped",[31976]],[[194921,194921],"mapped",[31971]],[[194922,194922],"mapped",[32000]],[[194923,194923],"mapped",[155526]],[[194924,194924],"mapped",[32099]],[[194925,194925],"mapped",[17153]],[[194926,194926],"mapped",[32199]],[[194927,194927],"mapped",[32258]],[[194928,194928],"mapped",[32325]],[[194929,194929],"mapped",[17204]],[[194930,194930],"mapped",[156200]],[[194931,194931],"mapped",[156231]],[[194932,194932],"mapped",[17241]],[[194933,194933],"mapped",[156377]],[[194934,194934],"mapped",[32634]],[[194935,194935],"mapped",[156478]],[[194936,194936],"mapped",[32661]],[[194937,194937],"mapped",[32762]],[[194938,194938],"mapped",[32773]],[[194939,194939],"mapped",[156890]],[[194940,194940],"mapped",[156963]],[[194941,194941],"mapped",[32864]],[[194942,194942],"mapped",[157096]],[[194943,194943],"mapped",[32880]],[[194944,194944],"mapped",[144223]],[[194945,194945],"mapped",[17365]],[[194946,194946],"mapped",[32946]],[[194947,194947],"mapped",[33027]],[[194948,194948],"mapped",[17419]],[[194949,194949],"mapped",[33086]],[[194950,194950],"mapped",[23221]],[[194951,194951],"mapped",[157607]],[[194952,194952],"mapped",[157621]],[[194953,194953],"mapped",[144275]],[[194954,194954],"mapped",[144284]],[[194955,194955],"mapped",[33281]],[[194956,194956],"mapped",[33284]],[[194957,194957],"mapped",[36766]],[[194958,194958],"mapped",[17515]],[[194959,194959],"mapped",[33425]],[[194960,194960],"mapped",[33419]],[[194961,194961],"mapped",[33437]],[[194962,194962],"mapped",[21171]],[[194963,194963],"mapped",[33457]],[[194964,194964],"mapped",[33459]],[[194965,194965],"mapped",[33469]],[[194966,194966],"mapped",[33510]],[[194967,194967],"mapped",[158524]],[[194968,194968],"mapped",[33509]],[[194969,194969],"mapped",[33565]],[[194970,194970],"mapped",[33635]],[[194971,194971],"mapped",[33709]],[[194972,194972],"mapped",[33571]],[[194973,194973],"mapped",[33725]],[[194974,194974],"mapped",[33767]],[[194975,194975],"mapped",[33879]],[[194976,194976],"mapped",[33619]],[[194977,194977],"mapped",[33738]],[[194978,194978],"mapped",[33740]],[[194979,194979],"mapped",[33756]],[[194980,194980],"mapped",[158774]],[[194981,194981],"mapped",[159083]],[[194982,194982],"mapped",[158933]],[[194983,194983],"mapped",[17707]],[[194984,194984],"mapped",[34033]],[[194985,194985],"mapped",[34035]],[[194986,194986],"mapped",[34070]],[[194987,194987],"mapped",[160714]],[[194988,194988],"mapped",[34148]],[[194989,194989],"mapped",[159532]],[[194990,194990],"mapped",[17757]],[[194991,194991],"mapped",[17761]],[[194992,194992],"mapped",[159665]],[[194993,194993],"mapped",[159954]],[[194994,194994],"mapped",[17771]],[[194995,194995],"mapped",[34384]],[[194996,194996],"mapped",[34396]],[[194997,194997],"mapped",[34407]],[[194998,194998],"mapped",[34409]],[[194999,194999],"mapped",[34473]],[[195000,195000],"mapped",[34440]],[[195001,195001],"mapped",[34574]],[[195002,195002],"mapped",[34530]],[[195003,195003],"mapped",[34681]],[[195004,195004],"mapped",[34600]],[[195005,195005],"mapped",[34667]],[[195006,195006],"mapped",[34694]],[[195007,195007],"disallowed"],[[195008,195008],"mapped",[34785]],[[195009,195009],"mapped",[34817]],[[195010,195010],"mapped",[17913]],[[195011,195011],"mapped",[34912]],[[195012,195012],"mapped",[34915]],[[195013,195013],"mapped",[161383]],[[195014,195014],"mapped",[35031]],[[195015,195015],"mapped",[35038]],[[195016,195016],"mapped",[17973]],[[195017,195017],"mapped",[35066]],[[195018,195018],"mapped",[13499]],[[195019,195019],"mapped",[161966]],[[195020,195020],"mapped",[162150]],[[195021,195021],"mapped",[18110]],[[195022,195022],"mapped",[18119]],[[195023,195023],"mapped",[35488]],[[195024,195024],"mapped",[35565]],[[195025,195025],"mapped",[35722]],[[195026,195026],"mapped",[35925]],[[195027,195027],"mapped",[162984]],[[195028,195028],"mapped",[36011]],[[195029,195029],"mapped",[36033]],[[195030,195030],"mapped",[36123]],[[195031,195031],"mapped",[36215]],[[195032,195032],"mapped",[163631]],[[195033,195033],"mapped",[133124]],[[195034,195034],"mapped",[36299]],[[195035,195035],"mapped",[36284]],[[195036,195036],"mapped",[36336]],[[195037,195037],"mapped",[133342]],[[195038,195038],"mapped",[36564]],[[195039,195039],"mapped",[36664]],[[195040,195040],"mapped",[165330]],[[195041,195041],"mapped",[165357]],[[195042,195042],"mapped",[37012]],[[195043,195043],"mapped",[37105]],[[195044,195044],"mapped",[37137]],[[195045,195045],"mapped",[165678]],[[195046,195046],"mapped",[37147]],[[195047,195047],"mapped",[37432]],[[195048,195048],"mapped",[37591]],[[195049,195049],"mapped",[37592]],[[195050,195050],"mapped",[37500]],[[195051,195051],"mapped",[37881]],[[195052,195052],"mapped",[37909]],[[195053,195053],"mapped",[166906]],[[195054,195054],"mapped",[38283]],[[195055,195055],"mapped",[18837]],[[195056,195056],"mapped",[38327]],[[195057,195057],"mapped",[167287]],[[195058,195058],"mapped",[18918]],[[195059,195059],"mapped",[38595]],[[195060,195060],"mapped",[23986]],[[195061,195061],"mapped",[38691]],[[195062,195062],"mapped",[168261]],[[195063,195063],"mapped",[168474]],[[195064,195064],"mapped",[19054]],[[195065,195065],"mapped",[19062]],[[195066,195066],"mapped",[38880]],[[195067,195067],"mapped",[168970]],[[195068,195068],"mapped",[19122]],[[195069,195069],"mapped",[169110]],[[195070,195071],"mapped",[38923]],[[195072,195072],"mapped",[38953]],[[195073,195073],"mapped",[169398]],[[195074,195074],"mapped",[39138]],[[195075,195075],"mapped",[19251]],[[195076,195076],"mapped",[39209]],[[195077,195077],"mapped",[39335]],[[195078,195078],"mapped",[39362]],[[195079,195079],"mapped",[39422]],[[195080,195080],"mapped",[19406]],[[195081,195081],"mapped",[170800]],[[195082,195082],"mapped",[39698]],[[195083,195083],"mapped",[40000]],[[195084,195084],"mapped",[40189]],[[195085,195085],"mapped",[19662]],[[195086,195086],"mapped",[19693]],[[195087,195087],"mapped",[40295]],[[195088,195088],"mapped",[172238]],[[195089,195089],"mapped",[19704]],[[195090,195090],"mapped",[172293]],[[195091,195091],"mapped",[172558]],[[195092,195092],"mapped",[172689]],[[195093,195093],"mapped",[40635]],[[195094,195094],"mapped",[19798]],[[195095,195095],"mapped",[40697]],[[195096,195096],"mapped",[40702]],[[195097,195097],"mapped",[40709]],[[195098,195098],"mapped",[40719]],[[195099,195099],"mapped",[40726]],[[195100,195100],"mapped",[40763]],[[195101,195101],"mapped",[173568]],[[195102,196605],"disallowed"],[[196606,196607],"disallowed"],[[196608,262141],"disallowed"],[[262142,262143],"disallowed"],[[262144,327677],"disallowed"],[[327678,327679],"disallowed"],[[327680,393213],"disallowed"],[[393214,393215],"disallowed"],[[393216,458749],"disallowed"],[[458750,458751],"disallowed"],[[458752,524285],"disallowed"],[[524286,524287],"disallowed"],[[524288,589821],"disallowed"],[[589822,589823],"disallowed"],[[589824,655357],"disallowed"],[[655358,655359],"disallowed"],[[655360,720893],"disallowed"],[[720894,720895],"disallowed"],[[720896,786429],"disallowed"],[[786430,786431],"disallowed"],[[786432,851965],"disallowed"],[[851966,851967],"disallowed"],[[851968,917501],"disallowed"],[[917502,917503],"disallowed"],[[917504,917504],"disallowed"],[[917505,917505],"disallowed"],[[917506,917535],"disallowed"],[[917536,917631],"disallowed"],[[917632,917759],"disallowed"],[[917760,917999],"ignored"],[[918000,983037],"disallowed"],[[983038,983039],"disallowed"],[[983040,1048573],"disallowed"],[[1048574,1048575],"disallowed"],[[1048576,1114109],"disallowed"],[[1114110,1114111],"disallowed"]]'); 18697 18698 /***/ }) 18699 18700 /******/ }); 18701 /************************************************************************/ 18702 /******/ // The module cache 18703 /******/ var __webpack_module_cache__ = {}; 18704 /******/ 18705 /******/ // The require function 18706 /******/ function __nccwpck_require__(moduleId) { 18707 /******/ // Check if module is in cache 18708 /******/ var cachedModule = __webpack_module_cache__[moduleId]; 18709 /******/ if (cachedModule !== undefined) { 18710 /******/ return cachedModule.exports; 18711 /******/ } 18712 /******/ // Create a new module (and put it into the cache) 18713 /******/ var module = __webpack_module_cache__[moduleId] = { 18714 /******/ // no module.id needed 18715 /******/ // no module.loaded needed 18716 /******/ exports: {} 18717 /******/ }; 18718 /******/ 18719 /******/ // Execute the module function 18720 /******/ var threw = true; 18721 /******/ try { 18722 /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __nccwpck_require__); 18723 /******/ threw = false; 18724 /******/ } finally { 18725 /******/ if(threw) delete __webpack_module_cache__[moduleId]; 18726 /******/ } 18727 /******/ 18728 /******/ // Return the exports of the module 18729 /******/ return module.exports; 18730 /******/ } 18731 /******/ 18732 /************************************************************************/ 18733 /******/ /* webpack/runtime/define property getters */ 18734 /******/ (() => { 18735 /******/ // define getter functions for harmony exports 18736 /******/ __nccwpck_require__.d = (exports, definition) => { 18737 /******/ for(var key in definition) { 18738 /******/ if(__nccwpck_require__.o(definition, key) && !__nccwpck_require__.o(exports, key)) { 18739 /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 18740 /******/ } 18741 /******/ } 18742 /******/ }; 18743 /******/ })(); 18744 /******/ 18745 /******/ /* webpack/runtime/hasOwnProperty shorthand */ 18746 /******/ (() => { 18747 /******/ __nccwpck_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) 18748 /******/ })(); 18749 /******/ 18750 /******/ /* webpack/runtime/compat */ 18751 /******/ 18752 /******/ if (typeof __nccwpck_require__ !== 'undefined') __nccwpck_require__.ab = new URL('.', import.meta.url).pathname.slice(import.meta.url.match(/^file:\/\/\/\w:/) ? 1 : 0, -1) + "/"; 18753 /******/ 18754 /************************************************************************/ 18755 var __webpack_exports__ = {}; 18756 // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. 18757 (() => { 18758 18759 // EXPORTS 18760 __nccwpck_require__.d(__webpack_exports__, { 18761 "K": () => (/* binding */ run) 18762 }); 18763 18764 // EXTERNAL MODULE: ./node_modules/@actions/core/lib/core.js 18765 var core = __nccwpck_require__(2186); 18766 // EXTERNAL MODULE: ./node_modules/@actions/exec/lib/exec.js 18767 var exec = __nccwpck_require__(1514); 18768 // EXTERNAL MODULE: ./node_modules/@actions/github/lib/github.js 18769 var github = __nccwpck_require__(5438); 18770 // EXTERNAL MODULE: ./node_modules/@actions/io/lib/io.js 18771 var io = __nccwpck_require__(7436); 18772 // EXTERNAL MODULE: ./node_modules/@actions/tool-cache/lib/tool-cache.js 18773 var tool_cache = __nccwpck_require__(7784); 18774 ;// CONCATENATED MODULE: external "fs/promises" 18775 const promises_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("fs/promises"); 18776 // EXTERNAL MODULE: external "path" 18777 var external_path_ = __nccwpck_require__(1017); 18778 // EXTERNAL MODULE: ./node_modules/moo/moo.js 18779 var moo = __nccwpck_require__(3329); 18780 ;// CONCATENATED MODULE: ./lib/grammar.js 18781 // Generated automatically by nearley, version 2.20.1 18782 // http://github.com/Hardmath123/nearley 18783 // Bypasses TS6133. Allow declared but unused functions. 18784 // @ts-ignore 18785 function id(d) { return d[0]; } 18786 18787 const { compile, keywords, error } = moo; 18788 const appendItem = function (a, b) { return function (d) { return d[a].concat(d[b]); }; }; 18789 const empty = function (d) { return []; }; 18790 const lexer = compile({ 18791 count: /(?:0|[1-9][0-9]*)\./, 18792 ws: /[ \t]+/, 18793 keyword: ["Error:", "Broken link in", "to"], 18794 number: /[0-9]+/, 18795 internalMetaMessage: ["> Successfully checked"], 18796 metaMessages: ["pages (", "orphan),", "sections", "-> Site content:", "Checking site...", "Checking all internal links with anchors.", "internal link(s) with anchors.", "Checking", "external link(s).", "Skipping", "> Checked", "external link(s):", "error(s) found.", "Done in"], 18797 misc: [":", "ms."], 18798 path: /(?:(?:.\/|\/)[.a-zA-Z0-9_-]+)+/, 18799 url_with_error: /\w*?:\/\/.*?(?=: )/, 18800 string: /(?!\s*$).+/, 18801 lexerError: error, 18802 newline: { match: '\n', lineBreaks: true } 18803 }); 18804 ; 18805 ; 18806 ; 18807 ; 18808 const grammar = { 18809 Lexer: lexer, 18810 ParserRules: [ 18811 { "name": "stdOutInput", "symbols": ["stdOutRow"], "postprocess": id }, 18812 { "name": "stdOutInput", "symbols": ["stdOutInput", (lexer.has("newline") ? { type: "newline" } : newline), "stdOutRow"], "postprocess": appendItem(0, 2) }, 18813 { "name": "stdOutInput", "symbols": ["input"], "postprocess": id }, 18814 { "name": "stdOutRow", "symbols": ["metaMessage"], "postprocess": empty }, 18815 { "name": "stdOutRow", "symbols": ["successReport"], "postprocess": function (data) { 18816 return { 18817 successReport: data[0], 18818 }; 18819 } 18820 }, 18821 { "name": "stdOutRow", "symbols": ["internalLinkMessage"], "postprocess": function (data) { 18822 return { 18823 internal_links: data[0], 18824 }; 18825 } 18826 }, 18827 { "name": "stdOutRow", "symbols": ["externalLinkCheckingWithSkippedLinkMessage"], "postprocess": function (data) { 18828 return { 18829 external_links_planed_checking: data[0], 18830 }; 18831 } 18832 }, 18833 { "name": "stdOutRow", "symbols": ["externalLinkCheckingMessage"], "postprocess": function (data) { 18834 return { 18835 external_links_planed_checking: data[0], 18836 }; 18837 } 18838 }, 18839 { "name": "stdOutRow", "symbols": ["externalLinkCheckingLinkMessage"], "postprocess": function (data) { 18840 return { 18841 external_links_checked: data[0], 18842 }; 18843 } 18844 }, 18845 { "name": "stdOutRow", "symbols": [], "postprocess": empty }, 18846 { "name": "metaMessage", "symbols": [(lexer.has("metaMessages") ? { type: "metaMessages" } : metaMessages)] }, 18847 { "name": "metaMessage", "symbols": [(lexer.has("metaMessages") ? { type: "metaMessages" } : metaMessages), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("number") ? { type: "number" } : number), (lexer.has("misc") ? { type: "misc" } : misc)] }, 18848 { "name": "successReport", "symbols": [(lexer.has("metaMessages") ? { type: "metaMessages" } : metaMessages), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("number") ? { type: "number" } : number), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("metaMessages") ? { type: "metaMessages" } : metaMessages), (lexer.has("number") ? { type: "number" } : number), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("metaMessages") ? { type: "metaMessages" } : metaMessages), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("number") ? { type: "number" } : number), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("metaMessages") ? { type: "metaMessages" } : metaMessages)], "postprocess": function (data) { 18849 return { 18850 pages: data[2]["value"], 18851 orphans: data[5]["value"], 18852 sections: data[9]["value"], 18853 }; 18854 } 18855 }, 18856 { "name": "internalLinkMessage", "symbols": [(lexer.has("internalMetaMessage") ? { type: "internalMetaMessage" } : internalMetaMessage), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("number") ? { type: "number" } : number), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("metaMessages") ? { type: "metaMessages" } : metaMessages)], "postprocess": function (data) { 18857 return { 18858 total: data[2]["value"], 18859 }; 18860 } 18861 }, 18862 { "name": "externalLinkCheckingWithSkippedLinkMessage", "symbols": [(lexer.has("metaMessages") ? { type: "metaMessages" } : metaMessages), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("number") ? { type: "number" } : number), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("metaMessages") ? { type: "metaMessages" } : metaMessages), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("metaMessages") ? { type: "metaMessages" } : metaMessages), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("number") ? { type: "number" } : number), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("metaMessages") ? { type: "metaMessages" } : metaMessages)], "postprocess": function (data) { 18863 return { 18864 total: data[2]["value"], 18865 skipped: data[8]["value"] 18866 }; 18867 } 18868 }, 18869 { "name": "externalLinkCheckingMessage", "symbols": [{ "literal": "Checking" }, (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("number") ? { type: "number" } : number), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("metaMessages") ? { type: "metaMessages" } : metaMessages)], "postprocess": function (data) { 18870 return { 18871 total: data[2]["value"], 18872 }; 18873 } 18874 }, 18875 { "name": "externalLinkCheckingLinkMessage", "symbols": [(lexer.has("metaMessages") ? { type: "metaMessages" } : metaMessages), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("number") ? { type: "number" } : number), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("metaMessages") ? { type: "metaMessages" } : metaMessages), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("number") ? { type: "number" } : number), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("metaMessages") ? { type: "metaMessages" } : metaMessages)], "postprocess": function (data) { 18876 return { 18877 total: data[2]["value"], 18878 errors: data[6]["value"] 18879 }; 18880 } 18881 }, 18882 { "name": "input", "symbols": ["row"], "postprocess": id }, 18883 { "name": "input", "symbols": ["input", (lexer.has("newline") ? { type: "newline" } : newline), "row"], "postprocess": appendItem(0, 2) }, 18884 { "name": "row", "symbols": ["broke_link_message"] }, 18885 { "name": "row", "symbols": ["error"] }, 18886 { "name": "row", "symbols": [], "postprocess": empty }, 18887 { "name": "error_message", "symbols": [(lexer.has("string") ? { type: "string" } : string)], "postprocess": function (data) { return data[0]["value"]; } }, 18888 { "name": "error", "symbols": [(lexer.has("keyword") ? { type: "keyword" } : keyword), (lexer.has("ws") ? { type: "ws" } : ws), "error_message"], "postprocess": function (data) { return { error_message: data[2] }; } }, 18889 { "name": "prefix", "symbols": [] }, 18890 { "name": "prefix", "symbols": [(lexer.has("ws") ? { type: "ws" } : ws)] }, 18891 { "name": "broke_link_message", "symbols": ["prefix", (lexer.has("count") ? { type: "count" } : count), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("keyword") ? { type: "keyword" } : keyword), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("path") ? { type: "path" } : path), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("keyword") ? { type: "keyword" } : keyword), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("url_with_error") ? { type: "url_with_error" } : url_with_error), (lexer.has("misc") ? { type: "misc" } : misc), (lexer.has("ws") ? { type: "ws" } : ws), (lexer.has("string") ? { type: "string" } : string)], "postprocess": function (data) { 18892 return { 18893 file: data[5]["value"], 18894 url: data[9]["value"], 18895 error_message: data[12]["value"] 18896 }; 18897 } 18898 } 18899 ], 18900 ParserStart: "stdOutInput", 18901 }; 18902 /* harmony default export */ const lib_grammar = (grammar); 18903 18904 ;// CONCATENATED MODULE: ./node_modules/@sindresorhus/is/dist/index.js 18905 const typedArrayTypeNames = [ 18906 'Int8Array', 18907 'Uint8Array', 18908 'Uint8ClampedArray', 18909 'Int16Array', 18910 'Uint16Array', 18911 'Int32Array', 18912 'Uint32Array', 18913 'Float32Array', 18914 'Float64Array', 18915 'BigInt64Array', 18916 'BigUint64Array', 18917 ]; 18918 function isTypedArrayName(name) { 18919 return typedArrayTypeNames.includes(name); 18920 } 18921 const objectTypeNames = [ 18922 'Function', 18923 'Generator', 18924 'AsyncGenerator', 18925 'GeneratorFunction', 18926 'AsyncGeneratorFunction', 18927 'AsyncFunction', 18928 'Observable', 18929 'Array', 18930 'Buffer', 18931 'Blob', 18932 'Object', 18933 'RegExp', 18934 'Date', 18935 'Error', 18936 'Map', 18937 'Set', 18938 'WeakMap', 18939 'WeakSet', 18940 'WeakRef', 18941 'ArrayBuffer', 18942 'SharedArrayBuffer', 18943 'DataView', 18944 'Promise', 18945 'URL', 18946 'FormData', 18947 'URLSearchParams', 18948 'HTMLElement', 18949 'NaN', 18950 ...typedArrayTypeNames, 18951 ]; 18952 function isObjectTypeName(name) { 18953 return objectTypeNames.includes(name); 18954 } 18955 const primitiveTypeNames = [ 18956 'null', 18957 'undefined', 18958 'string', 18959 'number', 18960 'bigint', 18961 'boolean', 18962 'symbol', 18963 ]; 18964 function isPrimitiveTypeName(name) { 18965 return primitiveTypeNames.includes(name); 18966 } 18967 // eslint-disable-next-line @typescript-eslint/ban-types 18968 function isOfType(type) { 18969 return (value) => typeof value === type; 18970 } 18971 const { toString: dist_toString } = Object.prototype; 18972 const getObjectType = (value) => { 18973 const objectTypeName = dist_toString.call(value).slice(8, -1); 18974 if (/HTML\w+Element/.test(objectTypeName) && is.domElement(value)) { 18975 return 'HTMLElement'; 18976 } 18977 if (isObjectTypeName(objectTypeName)) { 18978 return objectTypeName; 18979 } 18980 return undefined; 18981 }; 18982 const isObjectOfType = (type) => (value) => getObjectType(value) === type; 18983 function is(value) { 18984 if (value === null) { 18985 return 'null'; 18986 } 18987 switch (typeof value) { 18988 case 'undefined': 18989 return 'undefined'; 18990 case 'string': 18991 return 'string'; 18992 case 'number': 18993 return Number.isNaN(value) ? 'NaN' : 'number'; 18994 case 'boolean': 18995 return 'boolean'; 18996 case 'function': 18997 return 'Function'; 18998 case 'bigint': 18999 return 'bigint'; 19000 case 'symbol': 19001 return 'symbol'; 19002 default: 19003 } 19004 if (is.observable(value)) { 19005 return 'Observable'; 19006 } 19007 if (is.array(value)) { 19008 return 'Array'; 19009 } 19010 if (is.buffer(value)) { 19011 return 'Buffer'; 19012 } 19013 const tagType = getObjectType(value); 19014 if (tagType) { 19015 return tagType; 19016 } 19017 if (value instanceof String || value instanceof Boolean || value instanceof Number) { 19018 throw new TypeError('Please don\'t use object wrappers for primitive types'); 19019 } 19020 return 'Object'; 19021 } 19022 is.undefined = isOfType('undefined'); 19023 is.string = isOfType('string'); 19024 const isNumberType = isOfType('number'); 19025 is.number = (value) => isNumberType(value) && !is.nan(value); 19026 is.bigint = isOfType('bigint'); 19027 // eslint-disable-next-line @typescript-eslint/ban-types 19028 is.function_ = isOfType('function'); 19029 // eslint-disable-next-line @typescript-eslint/ban-types 19030 is.null_ = (value) => value === null; 19031 is.class_ = (value) => is.function_(value) && value.toString().startsWith('class '); 19032 is.boolean = (value) => value === true || value === false; 19033 is.symbol = isOfType('symbol'); 19034 is.numericString = (value) => is.string(value) && !is.emptyStringOrWhitespace(value) && !Number.isNaN(Number(value)); 19035 is.array = (value, assertion) => { 19036 if (!Array.isArray(value)) { 19037 return false; 19038 } 19039 if (!is.function_(assertion)) { 19040 return true; 19041 } 19042 return value.every(element => assertion(element)); 19043 }; 19044 // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call 19045 is.buffer = (value) => value?.constructor?.isBuffer?.(value) ?? false; 19046 is.blob = (value) => isObjectOfType('Blob')(value); 19047 is.nullOrUndefined = (value) => is.null_(value) || is.undefined(value); // eslint-disable-line @typescript-eslint/ban-types 19048 is.object = (value) => !is.null_(value) && (typeof value === 'object' || is.function_(value)); // eslint-disable-line @typescript-eslint/ban-types 19049 is.iterable = (value) => is.function_(value?.[Symbol.iterator]); 19050 is.asyncIterable = (value) => is.function_(value?.[Symbol.asyncIterator]); 19051 is.generator = (value) => is.iterable(value) && is.function_(value?.next) && is.function_(value?.throw); 19052 is.asyncGenerator = (value) => is.asyncIterable(value) && is.function_(value.next) && is.function_(value.throw); 19053 is.nativePromise = (value) => isObjectOfType('Promise')(value); 19054 const hasPromiseApi = (value) => is.function_(value?.then) 19055 && is.function_(value?.catch); 19056 is.promise = (value) => is.nativePromise(value) || hasPromiseApi(value); 19057 is.generatorFunction = isObjectOfType('GeneratorFunction'); 19058 is.asyncGeneratorFunction = (value) => getObjectType(value) === 'AsyncGeneratorFunction'; 19059 is.asyncFunction = (value) => getObjectType(value) === 'AsyncFunction'; 19060 // eslint-disable-next-line no-prototype-builtins, @typescript-eslint/ban-types 19061 is.boundFunction = (value) => is.function_(value) && !value.hasOwnProperty('prototype'); 19062 is.regExp = isObjectOfType('RegExp'); 19063 is.date = isObjectOfType('Date'); 19064 is.error = isObjectOfType('Error'); 19065 is.map = (value) => isObjectOfType('Map')(value); 19066 is.set = (value) => isObjectOfType('Set')(value); 19067 is.weakMap = (value) => isObjectOfType('WeakMap')(value); // eslint-disable-line @typescript-eslint/ban-types 19068 is.weakSet = (value) => isObjectOfType('WeakSet')(value); // eslint-disable-line @typescript-eslint/ban-types 19069 is.weakRef = (value) => isObjectOfType('WeakRef')(value); // eslint-disable-line @typescript-eslint/ban-types 19070 is.int8Array = isObjectOfType('Int8Array'); 19071 is.uint8Array = isObjectOfType('Uint8Array'); 19072 is.uint8ClampedArray = isObjectOfType('Uint8ClampedArray'); 19073 is.int16Array = isObjectOfType('Int16Array'); 19074 is.uint16Array = isObjectOfType('Uint16Array'); 19075 is.int32Array = isObjectOfType('Int32Array'); 19076 is.uint32Array = isObjectOfType('Uint32Array'); 19077 is.float32Array = isObjectOfType('Float32Array'); 19078 is.float64Array = isObjectOfType('Float64Array'); 19079 is.bigInt64Array = isObjectOfType('BigInt64Array'); 19080 is.bigUint64Array = isObjectOfType('BigUint64Array'); 19081 is.arrayBuffer = isObjectOfType('ArrayBuffer'); 19082 is.sharedArrayBuffer = isObjectOfType('SharedArrayBuffer'); 19083 is.dataView = isObjectOfType('DataView'); 19084 is.enumCase = (value, targetEnum) => Object.values(targetEnum).includes(value); 19085 is.directInstanceOf = (instance, class_) => Object.getPrototypeOf(instance) === class_.prototype; 19086 is.urlInstance = (value) => isObjectOfType('URL')(value); 19087 is.urlString = (value) => { 19088 if (!is.string(value)) { 19089 return false; 19090 } 19091 try { 19092 new URL(value); // eslint-disable-line no-new 19093 return true; 19094 } 19095 catch { 19096 return false; 19097 } 19098 }; 19099 // Example: `is.truthy = (value: unknown): value is (not false | not 0 | not '' | not undefined | not null) => Boolean(value);` 19100 is.truthy = (value) => Boolean(value); // eslint-disable-line unicorn/prefer-native-coercion-functions 19101 // Example: `is.falsy = (value: unknown): value is (not true | 0 | '' | undefined | null) => Boolean(value);` 19102 is.falsy = (value) => !value; 19103 is.nan = (value) => Number.isNaN(value); 19104 is.primitive = (value) => is.null_(value) || isPrimitiveTypeName(typeof value); 19105 is.integer = (value) => Number.isInteger(value); 19106 is.safeInteger = (value) => Number.isSafeInteger(value); 19107 is.plainObject = (value) => { 19108 // From: https://github.com/sindresorhus/is-plain-obj/blob/main/index.js 19109 if (typeof value !== 'object' || value === null) { 19110 return false; 19111 } 19112 // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment 19113 const prototype = Object.getPrototypeOf(value); 19114 return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value); 19115 }; 19116 is.typedArray = (value) => isTypedArrayName(getObjectType(value)); 19117 const isValidLength = (value) => is.safeInteger(value) && value >= 0; 19118 is.arrayLike = (value) => !is.nullOrUndefined(value) && !is.function_(value) && isValidLength(value.length); 19119 is.inRange = (value, range) => { 19120 if (is.number(range)) { 19121 return value >= Math.min(0, range) && value <= Math.max(range, 0); 19122 } 19123 if (is.array(range) && range.length === 2) { 19124 return value >= Math.min(...range) && value <= Math.max(...range); 19125 } 19126 throw new TypeError(`Invalid range: ${JSON.stringify(range)}`); 19127 }; 19128 // eslint-disable-next-line @typescript-eslint/naming-convention 19129 const NODE_TYPE_ELEMENT = 1; 19130 // eslint-disable-next-line @typescript-eslint/naming-convention 19131 const DOM_PROPERTIES_TO_CHECK = [ 19132 'innerHTML', 19133 'ownerDocument', 19134 'style', 19135 'attributes', 19136 'nodeValue', 19137 ]; 19138 is.domElement = (value) => is.object(value) 19139 && value.nodeType === NODE_TYPE_ELEMENT 19140 && is.string(value.nodeName) 19141 && !is.plainObject(value) 19142 && DOM_PROPERTIES_TO_CHECK.every(property => property in value); 19143 is.observable = (value) => { 19144 if (!value) { 19145 return false; 19146 } 19147 // eslint-disable-next-line no-use-extend-native/no-use-extend-native, @typescript-eslint/no-unsafe-call 19148 if (value === value[Symbol.observable]?.()) { 19149 return true; 19150 } 19151 // eslint-disable-next-line @typescript-eslint/no-unsafe-call 19152 if (value === value['@@observable']?.()) { 19153 return true; 19154 } 19155 return false; 19156 }; 19157 is.nodeStream = (value) => is.object(value) && is.function_(value.pipe) && !is.observable(value); 19158 is.infinite = (value) => value === Number.POSITIVE_INFINITY || value === Number.NEGATIVE_INFINITY; 19159 const isAbsoluteMod2 = (remainder) => (value) => is.integer(value) && Math.abs(value % 2) === remainder; 19160 is.evenInteger = isAbsoluteMod2(0); 19161 is.oddInteger = isAbsoluteMod2(1); 19162 is.emptyArray = (value) => is.array(value) && value.length === 0; 19163 is.nonEmptyArray = (value) => is.array(value) && value.length > 0; 19164 is.emptyString = (value) => is.string(value) && value.length === 0; 19165 const isWhiteSpaceString = (value) => is.string(value) && !/\S/.test(value); 19166 is.emptyStringOrWhitespace = (value) => is.emptyString(value) || isWhiteSpaceString(value); 19167 // TODO: Use `not ''` when the `not` operator is available. 19168 is.nonEmptyString = (value) => is.string(value) && value.length > 0; 19169 // TODO: Use `not ''` when the `not` operator is available. 19170 is.nonEmptyStringAndNotWhitespace = (value) => is.string(value) && !is.emptyStringOrWhitespace(value); 19171 // eslint-disable-next-line unicorn/no-array-callback-reference 19172 is.emptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length === 0; 19173 // TODO: Use `not` operator here to remove `Map` and `Set` from type guard: 19174 // - https://github.com/Microsoft/TypeScript/pull/29317 19175 // eslint-disable-next-line unicorn/no-array-callback-reference 19176 is.nonEmptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length > 0; 19177 is.emptySet = (value) => is.set(value) && value.size === 0; 19178 is.nonEmptySet = (value) => is.set(value) && value.size > 0; 19179 // eslint-disable-next-line unicorn/no-array-callback-reference 19180 is.emptyMap = (value) => is.map(value) && value.size === 0; 19181 // eslint-disable-next-line unicorn/no-array-callback-reference 19182 is.nonEmptyMap = (value) => is.map(value) && value.size > 0; 19183 // `PropertyKey` is any value that can be used as an object key (string, number, or symbol) 19184 is.propertyKey = (value) => is.any([is.string, is.number, is.symbol], value); 19185 is.formData = (value) => isObjectOfType('FormData')(value); 19186 is.urlSearchParams = (value) => isObjectOfType('URLSearchParams')(value); 19187 const predicateOnArray = (method, predicate, values) => { 19188 if (!is.function_(predicate)) { 19189 throw new TypeError(`Invalid predicate: ${JSON.stringify(predicate)}`); 19190 } 19191 if (values.length === 0) { 19192 throw new TypeError('Invalid number of values'); 19193 } 19194 return method.call(values, predicate); 19195 }; 19196 is.any = (predicate, ...values) => { 19197 const predicates = is.array(predicate) ? predicate : [predicate]; 19198 return predicates.some(singlePredicate => predicateOnArray(Array.prototype.some, singlePredicate, values)); 19199 }; 19200 is.all = (predicate, ...values) => predicateOnArray(Array.prototype.every, predicate, values); 19201 const assertType = (condition, description, value, options = {}) => { 19202 if (!condition) { 19203 const { multipleValues } = options; 19204 const valuesMessage = multipleValues 19205 ? `received values of types ${[ 19206 ...new Set(value.map(singleValue => `\`${is(singleValue)}\``)), 19207 ].join(', ')}` 19208 : `received value of type \`${is(value)}\``; 19209 throw new TypeError(`Expected value which is \`${description}\`, ${valuesMessage}.`); 19210 } 19211 }; 19212 /* eslint-disable @typescript-eslint/no-confusing-void-expression */ 19213 const assert = { 19214 // Unknowns. 19215 undefined: (value) => assertType(is.undefined(value), 'undefined', value), 19216 string: (value) => assertType(is.string(value), 'string', value), 19217 number: (value) => assertType(is.number(value), 'number', value), 19218 bigint: (value) => assertType(is.bigint(value), 'bigint', value), 19219 // eslint-disable-next-line @typescript-eslint/ban-types 19220 function_: (value) => assertType(is.function_(value), 'Function', value), 19221 null_: (value) => assertType(is.null_(value), 'null', value), 19222 class_: (value) => assertType(is.class_(value), "Class" /* AssertionTypeDescription.class_ */, value), 19223 boolean: (value) => assertType(is.boolean(value), 'boolean', value), 19224 symbol: (value) => assertType(is.symbol(value), 'symbol', value), 19225 numericString: (value) => assertType(is.numericString(value), "string with a number" /* AssertionTypeDescription.numericString */, value), 19226 array: (value, assertion) => { 19227 const assert = assertType; 19228 assert(is.array(value), 'Array', value); 19229 if (assertion) { 19230 // eslint-disable-next-line unicorn/no-array-for-each, unicorn/no-array-callback-reference 19231 value.forEach(assertion); 19232 } 19233 }, 19234 buffer: (value) => assertType(is.buffer(value), 'Buffer', value), 19235 blob: (value) => assertType(is.blob(value), 'Blob', value), 19236 nullOrUndefined: (value) => assertType(is.nullOrUndefined(value), "null or undefined" /* AssertionTypeDescription.nullOrUndefined */, value), 19237 object: (value) => assertType(is.object(value), 'Object', value), 19238 iterable: (value) => assertType(is.iterable(value), "Iterable" /* AssertionTypeDescription.iterable */, value), 19239 asyncIterable: (value) => assertType(is.asyncIterable(value), "AsyncIterable" /* AssertionTypeDescription.asyncIterable */, value), 19240 generator: (value) => assertType(is.generator(value), 'Generator', value), 19241 asyncGenerator: (value) => assertType(is.asyncGenerator(value), 'AsyncGenerator', value), 19242 nativePromise: (value) => assertType(is.nativePromise(value), "native Promise" /* AssertionTypeDescription.nativePromise */, value), 19243 promise: (value) => assertType(is.promise(value), 'Promise', value), 19244 generatorFunction: (value) => assertType(is.generatorFunction(value), 'GeneratorFunction', value), 19245 asyncGeneratorFunction: (value) => assertType(is.asyncGeneratorFunction(value), 'AsyncGeneratorFunction', value), 19246 // eslint-disable-next-line @typescript-eslint/ban-types 19247 asyncFunction: (value) => assertType(is.asyncFunction(value), 'AsyncFunction', value), 19248 // eslint-disable-next-line @typescript-eslint/ban-types 19249 boundFunction: (value) => assertType(is.boundFunction(value), 'Function', value), 19250 regExp: (value) => assertType(is.regExp(value), 'RegExp', value), 19251 date: (value) => assertType(is.date(value), 'Date', value), 19252 error: (value) => assertType(is.error(value), 'Error', value), 19253 map: (value) => assertType(is.map(value), 'Map', value), 19254 set: (value) => assertType(is.set(value), 'Set', value), 19255 weakMap: (value) => assertType(is.weakMap(value), 'WeakMap', value), 19256 weakSet: (value) => assertType(is.weakSet(value), 'WeakSet', value), 19257 weakRef: (value) => assertType(is.weakRef(value), 'WeakRef', value), 19258 int8Array: (value) => assertType(is.int8Array(value), 'Int8Array', value), 19259 uint8Array: (value) => assertType(is.uint8Array(value), 'Uint8Array', value), 19260 uint8ClampedArray: (value) => assertType(is.uint8ClampedArray(value), 'Uint8ClampedArray', value), 19261 int16Array: (value) => assertType(is.int16Array(value), 'Int16Array', value), 19262 uint16Array: (value) => assertType(is.uint16Array(value), 'Uint16Array', value), 19263 int32Array: (value) => assertType(is.int32Array(value), 'Int32Array', value), 19264 uint32Array: (value) => assertType(is.uint32Array(value), 'Uint32Array', value), 19265 float32Array: (value) => assertType(is.float32Array(value), 'Float32Array', value), 19266 float64Array: (value) => assertType(is.float64Array(value), 'Float64Array', value), 19267 bigInt64Array: (value) => assertType(is.bigInt64Array(value), 'BigInt64Array', value), 19268 bigUint64Array: (value) => assertType(is.bigUint64Array(value), 'BigUint64Array', value), 19269 arrayBuffer: (value) => assertType(is.arrayBuffer(value), 'ArrayBuffer', value), 19270 sharedArrayBuffer: (value) => assertType(is.sharedArrayBuffer(value), 'SharedArrayBuffer', value), 19271 dataView: (value) => assertType(is.dataView(value), 'DataView', value), 19272 enumCase: (value, targetEnum) => assertType(is.enumCase(value, targetEnum), 'EnumCase', value), 19273 urlInstance: (value) => assertType(is.urlInstance(value), 'URL', value), 19274 urlString: (value) => assertType(is.urlString(value), "string with a URL" /* AssertionTypeDescription.urlString */, value), 19275 truthy: (value) => assertType(is.truthy(value), "truthy" /* AssertionTypeDescription.truthy */, value), 19276 falsy: (value) => assertType(is.falsy(value), "falsy" /* AssertionTypeDescription.falsy */, value), 19277 nan: (value) => assertType(is.nan(value), "NaN" /* AssertionTypeDescription.nan */, value), 19278 primitive: (value) => assertType(is.primitive(value), "primitive" /* AssertionTypeDescription.primitive */, value), 19279 integer: (value) => assertType(is.integer(value), "integer" /* AssertionTypeDescription.integer */, value), 19280 safeInteger: (value) => assertType(is.safeInteger(value), "integer" /* AssertionTypeDescription.safeInteger */, value), 19281 plainObject: (value) => assertType(is.plainObject(value), "plain object" /* AssertionTypeDescription.plainObject */, value), 19282 typedArray: (value) => assertType(is.typedArray(value), "TypedArray" /* AssertionTypeDescription.typedArray */, value), 19283 arrayLike: (value) => assertType(is.arrayLike(value), "array-like" /* AssertionTypeDescription.arrayLike */, value), 19284 domElement: (value) => assertType(is.domElement(value), "HTMLElement" /* AssertionTypeDescription.domElement */, value), 19285 observable: (value) => assertType(is.observable(value), 'Observable', value), 19286 nodeStream: (value) => assertType(is.nodeStream(value), "Node.js Stream" /* AssertionTypeDescription.nodeStream */, value), 19287 infinite: (value) => assertType(is.infinite(value), "infinite number" /* AssertionTypeDescription.infinite */, value), 19288 emptyArray: (value) => assertType(is.emptyArray(value), "empty array" /* AssertionTypeDescription.emptyArray */, value), 19289 nonEmptyArray: (value) => assertType(is.nonEmptyArray(value), "non-empty array" /* AssertionTypeDescription.nonEmptyArray */, value), 19290 emptyString: (value) => assertType(is.emptyString(value), "empty string" /* AssertionTypeDescription.emptyString */, value), 19291 emptyStringOrWhitespace: (value) => assertType(is.emptyStringOrWhitespace(value), "empty string or whitespace" /* AssertionTypeDescription.emptyStringOrWhitespace */, value), 19292 nonEmptyString: (value) => assertType(is.nonEmptyString(value), "non-empty string" /* AssertionTypeDescription.nonEmptyString */, value), 19293 nonEmptyStringAndNotWhitespace: (value) => assertType(is.nonEmptyStringAndNotWhitespace(value), "non-empty string and not whitespace" /* AssertionTypeDescription.nonEmptyStringAndNotWhitespace */, value), 19294 emptyObject: (value) => assertType(is.emptyObject(value), "empty object" /* AssertionTypeDescription.emptyObject */, value), 19295 nonEmptyObject: (value) => assertType(is.nonEmptyObject(value), "non-empty object" /* AssertionTypeDescription.nonEmptyObject */, value), 19296 emptySet: (value) => assertType(is.emptySet(value), "empty set" /* AssertionTypeDescription.emptySet */, value), 19297 nonEmptySet: (value) => assertType(is.nonEmptySet(value), "non-empty set" /* AssertionTypeDescription.nonEmptySet */, value), 19298 emptyMap: (value) => assertType(is.emptyMap(value), "empty map" /* AssertionTypeDescription.emptyMap */, value), 19299 nonEmptyMap: (value) => assertType(is.nonEmptyMap(value), "non-empty map" /* AssertionTypeDescription.nonEmptyMap */, value), 19300 propertyKey: (value) => assertType(is.propertyKey(value), 'PropertyKey', value), 19301 formData: (value) => assertType(is.formData(value), 'FormData', value), 19302 urlSearchParams: (value) => assertType(is.urlSearchParams(value), 'URLSearchParams', value), 19303 // Numbers. 19304 evenInteger: (value) => assertType(is.evenInteger(value), "even integer" /* AssertionTypeDescription.evenInteger */, value), 19305 oddInteger: (value) => assertType(is.oddInteger(value), "odd integer" /* AssertionTypeDescription.oddInteger */, value), 19306 // Two arguments. 19307 directInstanceOf: (instance, class_) => assertType(is.directInstanceOf(instance, class_), "T" /* AssertionTypeDescription.directInstanceOf */, instance), 19308 inRange: (value, range) => assertType(is.inRange(value, range), "in range" /* AssertionTypeDescription.inRange */, value), 19309 // Variadic functions. 19310 any: (predicate, ...values) => assertType(is.any(predicate, ...values), "predicate returns truthy for any value" /* AssertionTypeDescription.any */, values, { multipleValues: true }), 19311 all: (predicate, ...values) => assertType(is.all(predicate, ...values), "predicate returns truthy for all values" /* AssertionTypeDescription.all */, values, { multipleValues: true }), 19312 }; 19313 /* eslint-enable @typescript-eslint/no-confusing-void-expression */ 19314 // Some few keywords are reserved, but we'll populate them for Node.js users 19315 // See https://github.com/Microsoft/TypeScript/issues/2536 19316 Object.defineProperties(is, { 19317 class: { 19318 value: is.class_, 19319 }, 19320 function: { 19321 value: is.function_, 19322 }, 19323 null: { 19324 value: is.null_, 19325 }, 19326 }); 19327 Object.defineProperties(assert, { 19328 class: { 19329 value: assert.class_, 19330 }, 19331 function: { 19332 value: assert.function_, 19333 }, 19334 null: { 19335 value: assert.null_, 19336 }, 19337 }); 19338 /* harmony default export */ const dist = (is); 19339 19340 ;// CONCATENATED MODULE: external "node:events" 19341 const external_node_events_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:events"); 19342 ;// CONCATENATED MODULE: ./node_modules/p-cancelable/index.js 19343 class CancelError extends Error { 19344 constructor(reason) { 19345 super(reason || 'Promise was canceled'); 19346 this.name = 'CancelError'; 19347 } 19348 19349 get isCanceled() { 19350 return true; 19351 } 19352 } 19353 19354 // TODO: Use private class fields when ESLint 8 is out. 19355 19356 class PCancelable { 19357 static fn(userFunction) { 19358 return (...arguments_) => { 19359 return new PCancelable((resolve, reject, onCancel) => { 19360 arguments_.push(onCancel); 19361 // eslint-disable-next-line promise/prefer-await-to-then 19362 userFunction(...arguments_).then(resolve, reject); 19363 }); 19364 }; 19365 } 19366 19367 constructor(executor) { 19368 this._cancelHandlers = []; 19369 this._isPending = true; 19370 this._isCanceled = false; 19371 this._rejectOnCancel = true; 19372 19373 this._promise = new Promise((resolve, reject) => { 19374 this._reject = reject; 19375 19376 const onResolve = value => { 19377 if (!this._isCanceled || !onCancel.shouldReject) { 19378 this._isPending = false; 19379 resolve(value); 19380 } 19381 }; 19382 19383 const onReject = error => { 19384 this._isPending = false; 19385 reject(error); 19386 }; 19387 19388 const onCancel = handler => { 19389 if (!this._isPending) { 19390 throw new Error('The `onCancel` handler was attached after the promise settled.'); 19391 } 19392 19393 this._cancelHandlers.push(handler); 19394 }; 19395 19396 Object.defineProperties(onCancel, { 19397 shouldReject: { 19398 get: () => this._rejectOnCancel, 19399 set: boolean => { 19400 this._rejectOnCancel = boolean; 19401 } 19402 } 19403 }); 19404 19405 executor(onResolve, onReject, onCancel); 19406 }); 19407 } 19408 19409 then(onFulfilled, onRejected) { 19410 // eslint-disable-next-line promise/prefer-await-to-then 19411 return this._promise.then(onFulfilled, onRejected); 19412 } 19413 19414 catch(onRejected) { 19415 // eslint-disable-next-line promise/prefer-await-to-then 19416 return this._promise.catch(onRejected); 19417 } 19418 19419 finally(onFinally) { 19420 // eslint-disable-next-line promise/prefer-await-to-then 19421 return this._promise.finally(onFinally); 19422 } 19423 19424 cancel(reason) { 19425 if (!this._isPending || this._isCanceled) { 19426 return; 19427 } 19428 19429 this._isCanceled = true; 19430 19431 if (this._cancelHandlers.length > 0) { 19432 try { 19433 for (const handler of this._cancelHandlers) { 19434 handler(); 19435 } 19436 } catch (error) { 19437 this._reject(error); 19438 return; 19439 } 19440 } 19441 19442 if (this._rejectOnCancel) { 19443 this._reject(new CancelError(reason)); 19444 } 19445 } 19446 19447 get isCanceled() { 19448 return this._isCanceled; 19449 } 19450 } 19451 19452 Object.setPrototypeOf(PCancelable.prototype, Promise.prototype); 19453 19454 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/errors.js 19455 19456 // A hacky check to prevent circular references. 19457 function isRequest(x) { 19458 return dist.object(x) && '_onResponse' in x; 19459 } 19460 /** 19461 An error to be thrown when a request fails. 19462 Contains a `code` property with error class code, like `ECONNREFUSED`. 19463 */ 19464 class RequestError extends Error { 19465 constructor(message, error, self) { 19466 super(message); 19467 Object.defineProperty(this, "input", { 19468 enumerable: true, 19469 configurable: true, 19470 writable: true, 19471 value: void 0 19472 }); 19473 Object.defineProperty(this, "code", { 19474 enumerable: true, 19475 configurable: true, 19476 writable: true, 19477 value: void 0 19478 }); 19479 Object.defineProperty(this, "stack", { 19480 enumerable: true, 19481 configurable: true, 19482 writable: true, 19483 value: void 0 19484 }); 19485 Object.defineProperty(this, "response", { 19486 enumerable: true, 19487 configurable: true, 19488 writable: true, 19489 value: void 0 19490 }); 19491 Object.defineProperty(this, "request", { 19492 enumerable: true, 19493 configurable: true, 19494 writable: true, 19495 value: void 0 19496 }); 19497 Object.defineProperty(this, "timings", { 19498 enumerable: true, 19499 configurable: true, 19500 writable: true, 19501 value: void 0 19502 }); 19503 Error.captureStackTrace(this, this.constructor); 19504 this.name = 'RequestError'; 19505 this.code = error.code ?? 'ERR_GOT_REQUEST_ERROR'; 19506 this.input = error.input; 19507 if (isRequest(self)) { 19508 Object.defineProperty(this, 'request', { 19509 enumerable: false, 19510 value: self, 19511 }); 19512 Object.defineProperty(this, 'response', { 19513 enumerable: false, 19514 value: self.response, 19515 }); 19516 this.options = self.options; 19517 } 19518 else { 19519 this.options = self; 19520 } 19521 this.timings = this.request?.timings; 19522 // Recover the original stacktrace 19523 if (dist.string(error.stack) && dist.string(this.stack)) { 19524 const indexOfMessage = this.stack.indexOf(this.message) + this.message.length; 19525 const thisStackTrace = this.stack.slice(indexOfMessage).split('\n').reverse(); 19526 const errorStackTrace = error.stack.slice(error.stack.indexOf(error.message) + error.message.length).split('\n').reverse(); 19527 // Remove duplicated traces 19528 while (errorStackTrace.length > 0 && errorStackTrace[0] === thisStackTrace[0]) { 19529 thisStackTrace.shift(); 19530 } 19531 this.stack = `${this.stack.slice(0, indexOfMessage)}${thisStackTrace.reverse().join('\n')}${errorStackTrace.reverse().join('\n')}`; 19532 } 19533 } 19534 } 19535 /** 19536 An error to be thrown when the server redirects you more than ten times. 19537 Includes a `response` property. 19538 */ 19539 class MaxRedirectsError extends RequestError { 19540 constructor(request) { 19541 super(`Redirected ${request.options.maxRedirects} times. Aborting.`, {}, request); 19542 this.name = 'MaxRedirectsError'; 19543 this.code = 'ERR_TOO_MANY_REDIRECTS'; 19544 } 19545 } 19546 /** 19547 An error to be thrown when the server response code is not 2xx nor 3xx if `options.followRedirect` is `true`, but always except for 304. 19548 Includes a `response` property. 19549 */ 19550 // eslint-disable-next-line @typescript-eslint/naming-convention 19551 class HTTPError extends RequestError { 19552 constructor(response) { 19553 super(`Response code ${response.statusCode} (${response.statusMessage})`, {}, response.request); 19554 this.name = 'HTTPError'; 19555 this.code = 'ERR_NON_2XX_3XX_RESPONSE'; 19556 } 19557 } 19558 /** 19559 An error to be thrown when a cache method fails. 19560 For example, if the database goes down or there's a filesystem error. 19561 */ 19562 class CacheError extends RequestError { 19563 constructor(error, request) { 19564 super(error.message, error, request); 19565 this.name = 'CacheError'; 19566 this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_CACHE_ACCESS' : this.code; 19567 } 19568 } 19569 /** 19570 An error to be thrown when the request body is a stream and an error occurs while reading from that stream. 19571 */ 19572 class UploadError extends RequestError { 19573 constructor(error, request) { 19574 super(error.message, error, request); 19575 this.name = 'UploadError'; 19576 this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_UPLOAD' : this.code; 19577 } 19578 } 19579 /** 19580 An error to be thrown when the request is aborted due to a timeout. 19581 Includes an `event` and `timings` property. 19582 */ 19583 class TimeoutError extends RequestError { 19584 constructor(error, timings, request) { 19585 super(error.message, error, request); 19586 Object.defineProperty(this, "timings", { 19587 enumerable: true, 19588 configurable: true, 19589 writable: true, 19590 value: void 0 19591 }); 19592 Object.defineProperty(this, "event", { 19593 enumerable: true, 19594 configurable: true, 19595 writable: true, 19596 value: void 0 19597 }); 19598 this.name = 'TimeoutError'; 19599 this.event = error.event; 19600 this.timings = timings; 19601 } 19602 } 19603 /** 19604 An error to be thrown when reading from response stream fails. 19605 */ 19606 class ReadError extends RequestError { 19607 constructor(error, request) { 19608 super(error.message, error, request); 19609 this.name = 'ReadError'; 19610 this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_READING_RESPONSE_STREAM' : this.code; 19611 } 19612 } 19613 /** 19614 An error which always triggers a new retry when thrown. 19615 */ 19616 class RetryError extends RequestError { 19617 constructor(request) { 19618 super('Retrying', {}, request); 19619 this.name = 'RetryError'; 19620 this.code = 'ERR_RETRYING'; 19621 } 19622 } 19623 /** 19624 An error to be thrown when the request is aborted by AbortController. 19625 */ 19626 class AbortError extends RequestError { 19627 constructor(request) { 19628 super('This operation was aborted.', {}, request); 19629 this.code = 'ERR_ABORTED'; 19630 this.name = 'AbortError'; 19631 } 19632 } 19633 19634 ;// CONCATENATED MODULE: external "node:process" 19635 const external_node_process_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:process"); 19636 ;// CONCATENATED MODULE: external "node:buffer" 19637 const external_node_buffer_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:buffer"); 19638 ;// CONCATENATED MODULE: external "node:stream" 19639 const external_node_stream_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:stream"); 19640 ;// CONCATENATED MODULE: external "node:http" 19641 const external_node_http_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:http"); 19642 // EXTERNAL MODULE: external "events" 19643 var external_events_ = __nccwpck_require__(2361); 19644 // EXTERNAL MODULE: external "util" 19645 var external_util_ = __nccwpck_require__(3837); 19646 // EXTERNAL MODULE: ./node_modules/defer-to-connect/dist/source/index.js 19647 var source = __nccwpck_require__(6214); 19648 ;// CONCATENATED MODULE: ./node_modules/@szmarczak/http-timer/dist/source/index.js 19649 19650 19651 19652 const timer = (request) => { 19653 if (request.timings) { 19654 return request.timings; 19655 } 19656 const timings = { 19657 start: Date.now(), 19658 socket: undefined, 19659 lookup: undefined, 19660 connect: undefined, 19661 secureConnect: undefined, 19662 upload: undefined, 19663 response: undefined, 19664 end: undefined, 19665 error: undefined, 19666 abort: undefined, 19667 phases: { 19668 wait: undefined, 19669 dns: undefined, 19670 tcp: undefined, 19671 tls: undefined, 19672 request: undefined, 19673 firstByte: undefined, 19674 download: undefined, 19675 total: undefined, 19676 }, 19677 }; 19678 request.timings = timings; 19679 const handleError = (origin) => { 19680 origin.once(external_events_.errorMonitor, () => { 19681 timings.error = Date.now(); 19682 timings.phases.total = timings.error - timings.start; 19683 }); 19684 }; 19685 handleError(request); 19686 const onAbort = () => { 19687 timings.abort = Date.now(); 19688 timings.phases.total = timings.abort - timings.start; 19689 }; 19690 request.prependOnceListener('abort', onAbort); 19691 const onSocket = (socket) => { 19692 timings.socket = Date.now(); 19693 timings.phases.wait = timings.socket - timings.start; 19694 if (external_util_.types.isProxy(socket)) { 19695 return; 19696 } 19697 const lookupListener = () => { 19698 timings.lookup = Date.now(); 19699 timings.phases.dns = timings.lookup - timings.socket; 19700 }; 19701 socket.prependOnceListener('lookup', lookupListener); 19702 source(socket, { 19703 connect: () => { 19704 timings.connect = Date.now(); 19705 if (timings.lookup === undefined) { 19706 socket.removeListener('lookup', lookupListener); 19707 timings.lookup = timings.connect; 19708 timings.phases.dns = timings.lookup - timings.socket; 19709 } 19710 timings.phases.tcp = timings.connect - timings.lookup; 19711 }, 19712 secureConnect: () => { 19713 timings.secureConnect = Date.now(); 19714 timings.phases.tls = timings.secureConnect - timings.connect; 19715 }, 19716 }); 19717 }; 19718 if (request.socket) { 19719 onSocket(request.socket); 19720 } 19721 else { 19722 request.prependOnceListener('socket', onSocket); 19723 } 19724 const onUpload = () => { 19725 timings.upload = Date.now(); 19726 timings.phases.request = timings.upload - (timings.secureConnect ?? timings.connect); 19727 }; 19728 if (request.writableFinished) { 19729 onUpload(); 19730 } 19731 else { 19732 request.prependOnceListener('finish', onUpload); 19733 } 19734 request.prependOnceListener('response', (response) => { 19735 timings.response = Date.now(); 19736 timings.phases.firstByte = timings.response - timings.upload; 19737 response.timings = timings; 19738 handleError(response); 19739 response.prependOnceListener('end', () => { 19740 request.off('abort', onAbort); 19741 response.off('aborted', onAbort); 19742 if (timings.phases.total) { 19743 // Aborted or errored 19744 return; 19745 } 19746 timings.end = Date.now(); 19747 timings.phases.download = timings.end - timings.response; 19748 timings.phases.total = timings.end - timings.start; 19749 }); 19750 response.prependOnceListener('aborted', onAbort); 19751 }); 19752 return timings; 19753 }; 19754 /* harmony default export */ const dist_source = (timer); 19755 19756 ;// CONCATENATED MODULE: external "node:url" 19757 const external_node_url_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:url"); 19758 ;// CONCATENATED MODULE: external "node:crypto" 19759 const external_node_crypto_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:crypto"); 19760 ;// CONCATENATED MODULE: ./node_modules/normalize-url/index.js 19761 // https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs 19762 const DATA_URL_DEFAULT_MIME_TYPE = 'text/plain'; 19763 const DATA_URL_DEFAULT_CHARSET = 'us-ascii'; 19764 19765 const testParameter = (name, filters) => filters.some(filter => filter instanceof RegExp ? filter.test(name) : filter === name); 19766 19767 const supportedProtocols = new Set([ 19768 'https:', 19769 'http:', 19770 'file:', 19771 ]); 19772 19773 const hasCustomProtocol = urlString => { 19774 try { 19775 const {protocol} = new URL(urlString); 19776 return protocol.endsWith(':') && !supportedProtocols.has(protocol); 19777 } catch { 19778 return false; 19779 } 19780 }; 19781 19782 const normalizeDataURL = (urlString, {stripHash}) => { 19783 const match = /^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(urlString); 19784 19785 if (!match) { 19786 throw new Error(`Invalid URL: ${urlString}`); 19787 } 19788 19789 let {type, data, hash} = match.groups; 19790 const mediaType = type.split(';'); 19791 hash = stripHash ? '' : hash; 19792 19793 let isBase64 = false; 19794 if (mediaType[mediaType.length - 1] === 'base64') { 19795 mediaType.pop(); 19796 isBase64 = true; 19797 } 19798 19799 // Lowercase MIME type 19800 const mimeType = mediaType.shift()?.toLowerCase() ?? ''; 19801 const attributes = mediaType 19802 .map(attribute => { 19803 let [key, value = ''] = attribute.split('=').map(string => string.trim()); 19804 19805 // Lowercase `charset` 19806 if (key === 'charset') { 19807 value = value.toLowerCase(); 19808 19809 if (value === DATA_URL_DEFAULT_CHARSET) { 19810 return ''; 19811 } 19812 } 19813 19814 return `${key}${value ? `=${value}` : ''}`; 19815 }) 19816 .filter(Boolean); 19817 19818 const normalizedMediaType = [ 19819 ...attributes, 19820 ]; 19821 19822 if (isBase64) { 19823 normalizedMediaType.push('base64'); 19824 } 19825 19826 if (normalizedMediaType.length > 0 || (mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE)) { 19827 normalizedMediaType.unshift(mimeType); 19828 } 19829 19830 return `data:${normalizedMediaType.join(';')},${isBase64 ? data.trim() : data}${hash ? `#${hash}` : ''}`; 19831 }; 19832 19833 function normalizeUrl(urlString, options) { 19834 options = { 19835 defaultProtocol: 'http', 19836 normalizeProtocol: true, 19837 forceHttp: false, 19838 forceHttps: false, 19839 stripAuthentication: true, 19840 stripHash: false, 19841 stripTextFragment: true, 19842 stripWWW: true, 19843 removeQueryParameters: [/^utm_\w+/i], 19844 removeTrailingSlash: true, 19845 removeSingleSlash: true, 19846 removeDirectoryIndex: false, 19847 removeExplicitPort: false, 19848 sortQueryParameters: true, 19849 ...options, 19850 }; 19851 19852 // Legacy: Append `:` to the protocol if missing. 19853 if (typeof options.defaultProtocol === 'string' && !options.defaultProtocol.endsWith(':')) { 19854 options.defaultProtocol = `${options.defaultProtocol}:`; 19855 } 19856 19857 urlString = urlString.trim(); 19858 19859 // Data URL 19860 if (/^data:/i.test(urlString)) { 19861 return normalizeDataURL(urlString, options); 19862 } 19863 19864 if (hasCustomProtocol(urlString)) { 19865 return urlString; 19866 } 19867 19868 const hasRelativeProtocol = urlString.startsWith('//'); 19869 const isRelativeUrl = !hasRelativeProtocol && /^\.*\//.test(urlString); 19870 19871 // Prepend protocol 19872 if (!isRelativeUrl) { 19873 urlString = urlString.replace(/^(?!(?:\w+:)?\/\/)|^\/\//, options.defaultProtocol); 19874 } 19875 19876 const urlObject = new URL(urlString); 19877 19878 if (options.forceHttp && options.forceHttps) { 19879 throw new Error('The `forceHttp` and `forceHttps` options cannot be used together'); 19880 } 19881 19882 if (options.forceHttp && urlObject.protocol === 'https:') { 19883 urlObject.protocol = 'http:'; 19884 } 19885 19886 if (options.forceHttps && urlObject.protocol === 'http:') { 19887 urlObject.protocol = 'https:'; 19888 } 19889 19890 // Remove auth 19891 if (options.stripAuthentication) { 19892 urlObject.username = ''; 19893 urlObject.password = ''; 19894 } 19895 19896 // Remove hash 19897 if (options.stripHash) { 19898 urlObject.hash = ''; 19899 } else if (options.stripTextFragment) { 19900 urlObject.hash = urlObject.hash.replace(/#?:~:text.*?$/i, ''); 19901 } 19902 19903 // Remove duplicate slashes if not preceded by a protocol 19904 // NOTE: This could be implemented using a single negative lookbehind 19905 // regex, but we avoid that to maintain compatibility with older js engines 19906 // which do not have support for that feature. 19907 if (urlObject.pathname) { 19908 // TODO: Replace everything below with `urlObject.pathname = urlObject.pathname.replace(/(?<!\b[a-z][a-z\d+\-.]{1,50}:)\/{2,}/g, '/');` when Safari supports negative lookbehind. 19909 19910 // Split the string by occurrences of this protocol regex, and perform 19911 // duplicate-slash replacement on the strings between those occurrences 19912 // (if any). 19913 const protocolRegex = /\b[a-z][a-z\d+\-.]{1,50}:\/\//g; 19914 19915 let lastIndex = 0; 19916 let result = ''; 19917 for (;;) { 19918 const match = protocolRegex.exec(urlObject.pathname); 19919 if (!match) { 19920 break; 19921 } 19922 19923 const protocol = match[0]; 19924 const protocolAtIndex = match.index; 19925 const intermediate = urlObject.pathname.slice(lastIndex, protocolAtIndex); 19926 19927 result += intermediate.replace(/\/{2,}/g, '/'); 19928 result += protocol; 19929 lastIndex = protocolAtIndex + protocol.length; 19930 } 19931 19932 const remnant = urlObject.pathname.slice(lastIndex, urlObject.pathname.length); 19933 result += remnant.replace(/\/{2,}/g, '/'); 19934 19935 urlObject.pathname = result; 19936 } 19937 19938 // Decode URI octets 19939 if (urlObject.pathname) { 19940 try { 19941 urlObject.pathname = decodeURI(urlObject.pathname); 19942 } catch {} 19943 } 19944 19945 // Remove directory index 19946 if (options.removeDirectoryIndex === true) { 19947 options.removeDirectoryIndex = [/^index\.[a-z]+$/]; 19948 } 19949 19950 if (Array.isArray(options.removeDirectoryIndex) && options.removeDirectoryIndex.length > 0) { 19951 let pathComponents = urlObject.pathname.split('/'); 19952 const lastComponent = pathComponents[pathComponents.length - 1]; 19953 19954 if (testParameter(lastComponent, options.removeDirectoryIndex)) { 19955 pathComponents = pathComponents.slice(0, -1); 19956 urlObject.pathname = pathComponents.slice(1).join('/') + '/'; 19957 } 19958 } 19959 19960 if (urlObject.hostname) { 19961 // Remove trailing dot 19962 urlObject.hostname = urlObject.hostname.replace(/\.$/, ''); 19963 19964 // Remove `www.` 19965 if (options.stripWWW && /^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(urlObject.hostname)) { 19966 // Each label should be max 63 at length (min: 1). 19967 // Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names 19968 // Each TLD should be up to 63 characters long (min: 2). 19969 // It is technically possible to have a single character TLD, but none currently exist. 19970 urlObject.hostname = urlObject.hostname.replace(/^www\./, ''); 19971 } 19972 } 19973 19974 // Remove query unwanted parameters 19975 if (Array.isArray(options.removeQueryParameters)) { 19976 // eslint-disable-next-line unicorn/no-useless-spread -- We are intentionally spreading to get a copy. 19977 for (const key of [...urlObject.searchParams.keys()]) { 19978 if (testParameter(key, options.removeQueryParameters)) { 19979 urlObject.searchParams.delete(key); 19980 } 19981 } 19982 } 19983 19984 if (!Array.isArray(options.keepQueryParameters) && options.removeQueryParameters === true) { 19985 urlObject.search = ''; 19986 } 19987 19988 // Keep wanted query parameters 19989 if (Array.isArray(options.keepQueryParameters) && options.keepQueryParameters.length > 0) { 19990 // eslint-disable-next-line unicorn/no-useless-spread -- We are intentionally spreading to get a copy. 19991 for (const key of [...urlObject.searchParams.keys()]) { 19992 if (!testParameter(key, options.keepQueryParameters)) { 19993 urlObject.searchParams.delete(key); 19994 } 19995 } 19996 } 19997 19998 // Sort query parameters 19999 if (options.sortQueryParameters) { 20000 urlObject.searchParams.sort(); 20001 20002 // Calling `.sort()` encodes the search parameters, so we need to decode them again. 20003 try { 20004 urlObject.search = decodeURIComponent(urlObject.search); 20005 } catch {} 20006 } 20007 20008 if (options.removeTrailingSlash) { 20009 urlObject.pathname = urlObject.pathname.replace(/\/$/, ''); 20010 } 20011 20012 // Remove an explicit port number, excluding a default port number, if applicable 20013 if (options.removeExplicitPort && urlObject.port) { 20014 urlObject.port = ''; 20015 } 20016 20017 const oldUrlString = urlString; 20018 20019 // Take advantage of many of the Node `url` normalizations 20020 urlString = urlObject.toString(); 20021 20022 if (!options.removeSingleSlash && urlObject.pathname === '/' && !oldUrlString.endsWith('/') && urlObject.hash === '') { 20023 urlString = urlString.replace(/\/$/, ''); 20024 } 20025 20026 // Remove ending `/` unless removeSingleSlash is false 20027 if ((options.removeTrailingSlash || urlObject.pathname === '/') && urlObject.hash === '' && options.removeSingleSlash) { 20028 urlString = urlString.replace(/\/$/, ''); 20029 } 20030 20031 // Restore relative protocol, if applicable 20032 if (hasRelativeProtocol && !options.normalizeProtocol) { 20033 urlString = urlString.replace(/^http:\/\//, '//'); 20034 } 20035 20036 // Remove http/https 20037 if (options.stripProtocol) { 20038 urlString = urlString.replace(/^(?:https?:)?\/\//, ''); 20039 } 20040 20041 return urlString; 20042 } 20043 20044 // EXTERNAL MODULE: ./node_modules/get-stream/index.js 20045 var get_stream = __nccwpck_require__(1766); 20046 // EXTERNAL MODULE: ./node_modules/http-cache-semantics/index.js 20047 var http_cache_semantics = __nccwpck_require__(1002); 20048 ;// CONCATENATED MODULE: ./node_modules/lowercase-keys/index.js 20049 function lowercaseKeys(object) { 20050 return Object.fromEntries(Object.entries(object).map(([key, value]) => [key.toLowerCase(), value])); 20051 } 20052 20053 ;// CONCATENATED MODULE: ./node_modules/responselike/index.js 20054 20055 20056 20057 class Response extends external_node_stream_namespaceObject.Readable { 20058 statusCode; 20059 headers; 20060 body; 20061 url; 20062 20063 constructor({statusCode, headers, body, url}) { 20064 if (typeof statusCode !== 'number') { 20065 throw new TypeError('Argument `statusCode` should be a number'); 20066 } 20067 20068 if (typeof headers !== 'object') { 20069 throw new TypeError('Argument `headers` should be an object'); 20070 } 20071 20072 if (!(body instanceof Uint8Array)) { 20073 throw new TypeError('Argument `body` should be a buffer'); 20074 } 20075 20076 if (typeof url !== 'string') { 20077 throw new TypeError('Argument `url` should be a string'); 20078 } 20079 20080 super({ 20081 read() { 20082 this.push(body); 20083 this.push(null); 20084 }, 20085 }); 20086 20087 this.statusCode = statusCode; 20088 this.headers = lowercaseKeys(headers); 20089 this.body = body; 20090 this.url = url; 20091 } 20092 } 20093 20094 // EXTERNAL MODULE: ./node_modules/keyv/src/index.js 20095 var src = __nccwpck_require__(1531); 20096 ;// CONCATENATED MODULE: ./node_modules/mimic-response/index.js 20097 // We define these manually to ensure they're always copied 20098 // even if they would move up the prototype chain 20099 // https://nodejs.org/api/http.html#http_class_http_incomingmessage 20100 const knownProperties = [ 20101 'aborted', 20102 'complete', 20103 'headers', 20104 'httpVersion', 20105 'httpVersionMinor', 20106 'httpVersionMajor', 20107 'method', 20108 'rawHeaders', 20109 'rawTrailers', 20110 'setTimeout', 20111 'socket', 20112 'statusCode', 20113 'statusMessage', 20114 'trailers', 20115 'url', 20116 ]; 20117 20118 function mimicResponse(fromStream, toStream) { 20119 if (toStream._readableState.autoDestroy) { 20120 throw new Error('The second stream must have the `autoDestroy` option set to `false`'); 20121 } 20122 20123 const fromProperties = new Set([...Object.keys(fromStream), ...knownProperties]); 20124 20125 const properties = {}; 20126 20127 for (const property of fromProperties) { 20128 // Don't overwrite existing properties. 20129 if (property in toStream) { 20130 continue; 20131 } 20132 20133 properties[property] = { 20134 get() { 20135 const value = fromStream[property]; 20136 const isFunction = typeof value === 'function'; 20137 20138 return isFunction ? value.bind(fromStream) : value; 20139 }, 20140 set(value) { 20141 fromStream[property] = value; 20142 }, 20143 enumerable: true, 20144 configurable: false, 20145 }; 20146 } 20147 20148 Object.defineProperties(toStream, properties); 20149 20150 fromStream.once('aborted', () => { 20151 toStream.destroy(); 20152 20153 toStream.emit('aborted'); 20154 }); 20155 20156 fromStream.once('close', () => { 20157 if (fromStream.complete) { 20158 if (toStream.readable) { 20159 toStream.once('end', () => { 20160 toStream.emit('close'); 20161 }); 20162 } else { 20163 toStream.emit('close'); 20164 } 20165 } else { 20166 toStream.emit('close'); 20167 } 20168 }); 20169 20170 return toStream; 20171 } 20172 20173 ;// CONCATENATED MODULE: ./node_modules/cacheable-request/dist/types.js 20174 // Type definitions for cacheable-request 6.0 20175 // Project: https://github.com/lukechilds/cacheable-request#readme 20176 // Definitions by: BendingBender <https://github.com/BendingBender> 20177 // Paul Melnikow <https://github.com/paulmelnikow> 20178 // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped 20179 // TypeScript Version: 2.3 20180 class types_RequestError extends Error { 20181 constructor(error) { 20182 super(error.message); 20183 Object.assign(this, error); 20184 } 20185 } 20186 class types_CacheError extends Error { 20187 constructor(error) { 20188 super(error.message); 20189 Object.assign(this, error); 20190 } 20191 } 20192 //# sourceMappingURL=types.js.map 20193 ;// CONCATENATED MODULE: ./node_modules/cacheable-request/dist/index.js 20194 20195 20196 20197 20198 20199 20200 20201 20202 20203 20204 20205 class CacheableRequest { 20206 constructor(cacheRequest, cacheAdapter) { 20207 this.hooks = new Map(); 20208 this.request = () => (options, cb) => { 20209 let url; 20210 if (typeof options === 'string') { 20211 url = normalizeUrlObject(external_node_url_namespaceObject.parse(options)); 20212 options = {}; 20213 } 20214 else if (options instanceof external_node_url_namespaceObject.URL) { 20215 url = normalizeUrlObject(external_node_url_namespaceObject.parse(options.toString())); 20216 options = {}; 20217 } 20218 else { 20219 const [pathname, ...searchParts] = (options.path ?? '').split('?'); 20220 const search = searchParts.length > 0 20221 ? `?${searchParts.join('?')}` 20222 : ''; 20223 url = normalizeUrlObject({ ...options, pathname, search }); 20224 } 20225 options = { 20226 headers: {}, 20227 method: 'GET', 20228 cache: true, 20229 strictTtl: false, 20230 automaticFailover: false, 20231 ...options, 20232 ...urlObjectToRequestOptions(url), 20233 }; 20234 options.headers = Object.fromEntries(entries(options.headers).map(([key, value]) => [key.toLowerCase(), value])); 20235 const ee = new external_node_events_namespaceObject(); 20236 const normalizedUrlString = normalizeUrl(external_node_url_namespaceObject.format(url), { 20237 stripWWW: false, 20238 removeTrailingSlash: false, 20239 stripAuthentication: false, 20240 }); 20241 let key = `${options.method}:${normalizedUrlString}`; 20242 // POST, PATCH, and PUT requests may be cached, depending on the response 20243 // cache-control headers. As a result, the body of the request should be 20244 // added to the cache key in order to avoid collisions. 20245 if (options.body && options.method !== undefined && ['POST', 'PATCH', 'PUT'].includes(options.method)) { 20246 if (options.body instanceof external_node_stream_namespaceObject.Readable) { 20247 // Streamed bodies should completely skip the cache because they may 20248 // or may not be hashable and in either case the stream would need to 20249 // close before the cache key could be generated. 20250 options.cache = false; 20251 } 20252 else { 20253 key += `:${external_node_crypto_namespaceObject.createHash('md5').update(options.body).digest('hex')}`; 20254 } 20255 } 20256 let revalidate = false; 20257 let madeRequest = false; 20258 const makeRequest = (options_) => { 20259 madeRequest = true; 20260 let requestErrored = false; 20261 let requestErrorCallback = () => { }; 20262 const requestErrorPromise = new Promise(resolve => { 20263 requestErrorCallback = () => { 20264 if (!requestErrored) { 20265 requestErrored = true; 20266 resolve(); 20267 } 20268 }; 20269 }); 20270 const handler = async (response) => { 20271 if (revalidate) { 20272 response.status = response.statusCode; 20273 const revalidatedPolicy = http_cache_semantics.fromObject(revalidate.cachePolicy).revalidatedPolicy(options_, response); 20274 if (!revalidatedPolicy.modified) { 20275 response.resume(); 20276 await new Promise(resolve => { 20277 // Skipping 'error' handler cause 'error' event should't be emitted for 304 response 20278 response 20279 .once('end', resolve); 20280 }); 20281 const headers = convertHeaders(revalidatedPolicy.policy.responseHeaders()); 20282 response = new Response({ statusCode: revalidate.statusCode, headers, body: revalidate.body, url: revalidate.url }); 20283 response.cachePolicy = revalidatedPolicy.policy; 20284 response.fromCache = true; 20285 } 20286 } 20287 if (!response.fromCache) { 20288 response.cachePolicy = new http_cache_semantics(options_, response, options_); 20289 response.fromCache = false; 20290 } 20291 let clonedResponse; 20292 if (options_.cache && response.cachePolicy.storable()) { 20293 clonedResponse = cloneResponse(response); 20294 (async () => { 20295 try { 20296 const bodyPromise = get_stream.buffer(response); 20297 await Promise.race([ 20298 requestErrorPromise, 20299 new Promise(resolve => response.once('end', resolve)), 20300 new Promise(resolve => response.once('close', resolve)), // eslint-disable-line no-promise-executor-return 20301 ]); 20302 const body = await bodyPromise; 20303 let value = { 20304 url: response.url, 20305 statusCode: response.fromCache ? revalidate.statusCode : response.statusCode, 20306 body, 20307 cachePolicy: response.cachePolicy.toObject(), 20308 }; 20309 let ttl = options_.strictTtl ? response.cachePolicy.timeToLive() : undefined; 20310 if (options_.maxTtl) { 20311 ttl = ttl ? Math.min(ttl, options_.maxTtl) : options_.maxTtl; 20312 } 20313 if (this.hooks.size > 0) { 20314 /* eslint-disable no-await-in-loop */ 20315 for (const key_ of this.hooks.keys()) { 20316 value = await this.runHook(key_, value, response); 20317 } 20318 /* eslint-enable no-await-in-loop */ 20319 } 20320 await this.cache.set(key, value, ttl); 20321 } 20322 catch (error) { 20323 ee.emit('error', new types_CacheError(error)); 20324 } 20325 })(); 20326 } 20327 else if (options_.cache && revalidate) { 20328 (async () => { 20329 try { 20330 await this.cache.delete(key); 20331 } 20332 catch (error) { 20333 ee.emit('error', new types_CacheError(error)); 20334 } 20335 })(); 20336 } 20337 ee.emit('response', clonedResponse ?? response); 20338 if (typeof cb === 'function') { 20339 cb(clonedResponse ?? response); 20340 } 20341 }; 20342 try { 20343 const request_ = this.cacheRequest(options_, handler); 20344 request_.once('error', requestErrorCallback); 20345 request_.once('abort', requestErrorCallback); 20346 request_.once('destroy', requestErrorCallback); 20347 ee.emit('request', request_); 20348 } 20349 catch (error) { 20350 ee.emit('error', new types_RequestError(error)); 20351 } 20352 }; 20353 (async () => { 20354 const get = async (options_) => { 20355 await Promise.resolve(); 20356 const cacheEntry = options_.cache ? await this.cache.get(key) : undefined; 20357 if (typeof cacheEntry === 'undefined' && !options_.forceRefresh) { 20358 makeRequest(options_); 20359 return; 20360 } 20361 const policy = http_cache_semantics.fromObject(cacheEntry.cachePolicy); 20362 if (policy.satisfiesWithoutRevalidation(options_) && !options_.forceRefresh) { 20363 const headers = convertHeaders(policy.responseHeaders()); 20364 const response = new Response({ statusCode: cacheEntry.statusCode, headers, body: cacheEntry.body, url: cacheEntry.url }); 20365 response.cachePolicy = policy; 20366 response.fromCache = true; 20367 ee.emit('response', response); 20368 if (typeof cb === 'function') { 20369 cb(response); 20370 } 20371 } 20372 else if (policy.satisfiesWithoutRevalidation(options_) && Date.now() >= policy.timeToLive() && options_.forceRefresh) { 20373 await this.cache.delete(key); 20374 options_.headers = policy.revalidationHeaders(options_); 20375 makeRequest(options_); 20376 } 20377 else { 20378 revalidate = cacheEntry; 20379 options_.headers = policy.revalidationHeaders(options_); 20380 makeRequest(options_); 20381 } 20382 }; 20383 const errorHandler = (error) => ee.emit('error', new types_CacheError(error)); 20384 if (this.cache instanceof src) { 20385 const cachek = this.cache; 20386 cachek.once('error', errorHandler); 20387 ee.on('error', () => cachek.removeListener('error', errorHandler)); 20388 ee.on('response', () => cachek.removeListener('error', errorHandler)); 20389 } 20390 try { 20391 await get(options); 20392 } 20393 catch (error) { 20394 if (options.automaticFailover && !madeRequest) { 20395 makeRequest(options); 20396 } 20397 ee.emit('error', new types_CacheError(error)); 20398 } 20399 })(); 20400 return ee; 20401 }; 20402 this.addHook = (name, fn) => { 20403 if (!this.hooks.has(name)) { 20404 this.hooks.set(name, fn); 20405 } 20406 }; 20407 this.removeHook = (name) => this.hooks.delete(name); 20408 this.getHook = (name) => this.hooks.get(name); 20409 this.runHook = async (name, ...args) => this.hooks.get(name)?.(...args); 20410 if (cacheAdapter instanceof src) { 20411 this.cache = cacheAdapter; 20412 } 20413 else if (typeof cacheAdapter === 'string') { 20414 this.cache = new src({ 20415 uri: cacheAdapter, 20416 namespace: 'cacheable-request', 20417 }); 20418 } 20419 else { 20420 this.cache = new src({ 20421 store: cacheAdapter, 20422 namespace: 'cacheable-request', 20423 }); 20424 } 20425 this.request = this.request.bind(this); 20426 this.cacheRequest = cacheRequest; 20427 } 20428 } 20429 const entries = Object.entries; 20430 const cloneResponse = (response) => { 20431 const clone = new external_node_stream_namespaceObject.PassThrough({ autoDestroy: false }); 20432 mimicResponse(response, clone); 20433 return response.pipe(clone); 20434 }; 20435 const urlObjectToRequestOptions = (url) => { 20436 const options = { ...url }; 20437 options.path = `${url.pathname || '/'}${url.search || ''}`; 20438 delete options.pathname; 20439 delete options.search; 20440 return options; 20441 }; 20442 const normalizeUrlObject = (url) => 20443 // If url was parsed by url.parse or new URL: 20444 // - hostname will be set 20445 // - host will be hostname[:port] 20446 // - port will be set if it was explicit in the parsed string 20447 // Otherwise, url was from request options: 20448 // - hostname or host may be set 20449 // - host shall not have port encoded 20450 ({ 20451 protocol: url.protocol, 20452 auth: url.auth, 20453 hostname: url.hostname || url.host || 'localhost', 20454 port: url.port, 20455 pathname: url.pathname, 20456 search: url.search, 20457 }); 20458 const convertHeaders = (headers) => { 20459 const result = []; 20460 for (const name of Object.keys(headers)) { 20461 result[name.toLowerCase()] = headers[name]; 20462 } 20463 return result; 20464 }; 20465 /* harmony default export */ const cacheable_request_dist = (CacheableRequest); 20466 20467 const onResponse = 'onResponse'; 20468 //# sourceMappingURL=index.js.map 20469 // EXTERNAL MODULE: ./node_modules/decompress-response/index.js 20470 var decompress_response = __nccwpck_require__(2391); 20471 ;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/util/isFunction.js 20472 const isFunction = (value) => (typeof value === "function"); 20473 20474 ;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/util/isFormData.js 20475 20476 const isFormData = (value) => Boolean(value 20477 && isFunction(value.constructor) 20478 && value[Symbol.toStringTag] === "FormData" 20479 && isFunction(value.append) 20480 && isFunction(value.getAll) 20481 && isFunction(value.entries) 20482 && isFunction(value[Symbol.iterator])); 20483 20484 ;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/util/getStreamIterator.js 20485 20486 const isAsyncIterable = (value) => (isFunction(value[Symbol.asyncIterator])); 20487 async function* readStream(readable) { 20488 const reader = readable.getReader(); 20489 while (true) { 20490 const { done, value } = await reader.read(); 20491 if (done) { 20492 break; 20493 } 20494 yield value; 20495 } 20496 } 20497 const getStreamIterator = (source) => { 20498 if (isAsyncIterable(source)) { 20499 return source; 20500 } 20501 if (isFunction(source.getReader)) { 20502 return readStream(source); 20503 } 20504 throw new TypeError("Unsupported data source: Expected either ReadableStream or async iterable."); 20505 }; 20506 20507 ;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/util/createBoundary.js 20508 const alphabet = "abcdefghijklmnopqrstuvwxyz0123456789"; 20509 function createBoundary() { 20510 let size = 16; 20511 let res = ""; 20512 while (size--) { 20513 res += alphabet[(Math.random() * alphabet.length) << 0]; 20514 } 20515 return res; 20516 } 20517 20518 ;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/util/normalizeValue.js 20519 const normalizeValue = (value) => String(value) 20520 .replace(/\r|\n/g, (match, i, str) => { 20521 if ((match === "\r" && str[i + 1] !== "\n") 20522 || (match === "\n" && str[i - 1] !== "\r")) { 20523 return "\r\n"; 20524 } 20525 return match; 20526 }); 20527 20528 ;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/util/isPlainObject.js 20529 const getType = (value) => (Object.prototype.toString.call(value).slice(8, -1).toLowerCase()); 20530 function isPlainObject(value) { 20531 if (getType(value) !== "object") { 20532 return false; 20533 } 20534 const pp = Object.getPrototypeOf(value); 20535 if (pp === null || pp === undefined) { 20536 return true; 20537 } 20538 const Ctor = pp.constructor && pp.constructor.toString(); 20539 return Ctor === Object.toString(); 20540 } 20541 20542 ;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/util/proxyHeaders.js 20543 function getProperty(target, prop) { 20544 if (typeof prop === "string") { 20545 for (const [name, value] of Object.entries(target)) { 20546 if (prop.toLowerCase() === name.toLowerCase()) { 20547 return value; 20548 } 20549 } 20550 } 20551 return undefined; 20552 } 20553 const proxyHeaders = (object) => new Proxy(object, { 20554 get: (target, prop) => getProperty(target, prop), 20555 has: (target, prop) => getProperty(target, prop) !== undefined 20556 }); 20557 20558 ;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/util/escapeName.js 20559 const escapeName = (name) => String(name) 20560 .replace(/\r/g, "%0D") 20561 .replace(/\n/g, "%0A") 20562 .replace(/"/g, "%22"); 20563 20564 ;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/util/isFile.js 20565 20566 const isFile = (value) => Boolean(value 20567 && typeof value === "object" 20568 && isFunction(value.constructor) 20569 && value[Symbol.toStringTag] === "File" 20570 && isFunction(value.stream) 20571 && value.name != null); 20572 const isFileLike = (/* unused pure expression or super */ null && (isFile)); 20573 20574 ;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/FormDataEncoder.js 20575 var __classPrivateFieldSet = (undefined && undefined.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { 20576 if (kind === "m") throw new TypeError("Private method is not writable"); 20577 if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); 20578 if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); 20579 return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; 20580 }; 20581 var __classPrivateFieldGet = (undefined && undefined.__classPrivateFieldGet) || function (receiver, state, kind, f) { 20582 if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); 20583 if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); 20584 return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); 20585 }; 20586 var _FormDataEncoder_instances, _FormDataEncoder_CRLF, _FormDataEncoder_CRLF_BYTES, _FormDataEncoder_CRLF_BYTES_LENGTH, _FormDataEncoder_DASHES, _FormDataEncoder_encoder, _FormDataEncoder_footer, _FormDataEncoder_form, _FormDataEncoder_options, _FormDataEncoder_getFieldHeader, _FormDataEncoder_getContentLength; 20587 20588 20589 20590 20591 20592 20593 20594 20595 const defaultOptions = { 20596 enableAdditionalHeaders: false 20597 }; 20598 const readonlyProp = { writable: false, configurable: false }; 20599 class FormDataEncoder { 20600 constructor(form, boundaryOrOptions, options) { 20601 _FormDataEncoder_instances.add(this); 20602 _FormDataEncoder_CRLF.set(this, "\r\n"); 20603 _FormDataEncoder_CRLF_BYTES.set(this, void 0); 20604 _FormDataEncoder_CRLF_BYTES_LENGTH.set(this, void 0); 20605 _FormDataEncoder_DASHES.set(this, "-".repeat(2)); 20606 _FormDataEncoder_encoder.set(this, new TextEncoder()); 20607 _FormDataEncoder_footer.set(this, void 0); 20608 _FormDataEncoder_form.set(this, void 0); 20609 _FormDataEncoder_options.set(this, void 0); 20610 if (!isFormData(form)) { 20611 throw new TypeError("Expected first argument to be a FormData instance."); 20612 } 20613 let boundary; 20614 if (isPlainObject(boundaryOrOptions)) { 20615 options = boundaryOrOptions; 20616 } 20617 else { 20618 boundary = boundaryOrOptions; 20619 } 20620 if (!boundary) { 20621 boundary = createBoundary(); 20622 } 20623 if (typeof boundary !== "string") { 20624 throw new TypeError("Expected boundary argument to be a string."); 20625 } 20626 if (options && !isPlainObject(options)) { 20627 throw new TypeError("Expected options argument to be an object."); 20628 } 20629 __classPrivateFieldSet(this, _FormDataEncoder_form, Array.from(form.entries()), "f"); 20630 __classPrivateFieldSet(this, _FormDataEncoder_options, { ...defaultOptions, ...options }, "f"); 20631 __classPrivateFieldSet(this, _FormDataEncoder_CRLF_BYTES, __classPrivateFieldGet(this, _FormDataEncoder_encoder, "f").encode(__classPrivateFieldGet(this, _FormDataEncoder_CRLF, "f")), "f"); 20632 __classPrivateFieldSet(this, _FormDataEncoder_CRLF_BYTES_LENGTH, __classPrivateFieldGet(this, _FormDataEncoder_CRLF_BYTES, "f").byteLength, "f"); 20633 this.boundary = `form-data-boundary-${boundary}`; 20634 this.contentType = `multipart/form-data; boundary=${this.boundary}`; 20635 __classPrivateFieldSet(this, _FormDataEncoder_footer, __classPrivateFieldGet(this, _FormDataEncoder_encoder, "f").encode(`${__classPrivateFieldGet(this, _FormDataEncoder_DASHES, "f")}${this.boundary}${__classPrivateFieldGet(this, _FormDataEncoder_DASHES, "f")}${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, "f").repeat(2)}`), "f"); 20636 const headers = { 20637 "Content-Type": this.contentType 20638 }; 20639 const contentLength = __classPrivateFieldGet(this, _FormDataEncoder_instances, "m", _FormDataEncoder_getContentLength).call(this); 20640 if (contentLength) { 20641 this.contentLength = contentLength; 20642 headers["Content-Length"] = contentLength; 20643 } 20644 this.headers = proxyHeaders(Object.freeze(headers)); 20645 Object.defineProperties(this, { 20646 boundary: readonlyProp, 20647 contentType: readonlyProp, 20648 contentLength: readonlyProp, 20649 headers: readonlyProp 20650 }); 20651 } 20652 getContentLength() { 20653 return this.contentLength == null ? undefined : Number(this.contentLength); 20654 } 20655 *values() { 20656 for (const [name, raw] of __classPrivateFieldGet(this, _FormDataEncoder_form, "f")) { 20657 const value = isFile(raw) ? raw : __classPrivateFieldGet(this, _FormDataEncoder_encoder, "f").encode(normalizeValue(raw)); 20658 yield __classPrivateFieldGet(this, _FormDataEncoder_instances, "m", _FormDataEncoder_getFieldHeader).call(this, name, value); 20659 yield value; 20660 yield __classPrivateFieldGet(this, _FormDataEncoder_CRLF_BYTES, "f"); 20661 } 20662 yield __classPrivateFieldGet(this, _FormDataEncoder_footer, "f"); 20663 } 20664 async *encode() { 20665 for (const part of this.values()) { 20666 if (isFile(part)) { 20667 yield* getStreamIterator(part.stream()); 20668 } 20669 else { 20670 yield part; 20671 } 20672 } 20673 } 20674 [(_FormDataEncoder_CRLF = new WeakMap(), _FormDataEncoder_CRLF_BYTES = new WeakMap(), _FormDataEncoder_CRLF_BYTES_LENGTH = new WeakMap(), _FormDataEncoder_DASHES = new WeakMap(), _FormDataEncoder_encoder = new WeakMap(), _FormDataEncoder_footer = new WeakMap(), _FormDataEncoder_form = new WeakMap(), _FormDataEncoder_options = new WeakMap(), _FormDataEncoder_instances = new WeakSet(), _FormDataEncoder_getFieldHeader = function _FormDataEncoder_getFieldHeader(name, value) { 20675 let header = ""; 20676 header += `${__classPrivateFieldGet(this, _FormDataEncoder_DASHES, "f")}${this.boundary}${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, "f")}`; 20677 header += `Content-Disposition: form-data; name="${escapeName(name)}"`; 20678 if (isFile(value)) { 20679 header += `; filename="${escapeName(value.name)}"${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, "f")}`; 20680 header += `Content-Type: ${value.type || "application/octet-stream"}`; 20681 } 20682 const size = isFile(value) ? value.size : value.byteLength; 20683 if (__classPrivateFieldGet(this, _FormDataEncoder_options, "f").enableAdditionalHeaders === true 20684 && size != null 20685 && !isNaN(size)) { 20686 header += `${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, "f")}Content-Length: ${isFile(value) ? value.size : value.byteLength}`; 20687 } 20688 return __classPrivateFieldGet(this, _FormDataEncoder_encoder, "f").encode(`${header}${__classPrivateFieldGet(this, _FormDataEncoder_CRLF, "f").repeat(2)}`); 20689 }, _FormDataEncoder_getContentLength = function _FormDataEncoder_getContentLength() { 20690 let length = 0; 20691 for (const [name, raw] of __classPrivateFieldGet(this, _FormDataEncoder_form, "f")) { 20692 const value = isFile(raw) ? raw : __classPrivateFieldGet(this, _FormDataEncoder_encoder, "f").encode(normalizeValue(raw)); 20693 const size = isFile(value) ? value.size : value.byteLength; 20694 if (size == null || isNaN(size)) { 20695 return undefined; 20696 } 20697 length += __classPrivateFieldGet(this, _FormDataEncoder_instances, "m", _FormDataEncoder_getFieldHeader).call(this, name, value).byteLength; 20698 length += size; 20699 length += __classPrivateFieldGet(this, _FormDataEncoder_CRLF_BYTES_LENGTH, "f"); 20700 } 20701 return String(length + __classPrivateFieldGet(this, _FormDataEncoder_footer, "f").byteLength); 20702 }, Symbol.iterator)]() { 20703 return this.values(); 20704 } 20705 [Symbol.asyncIterator]() { 20706 return this.encode(); 20707 } 20708 } 20709 20710 ;// CONCATENATED MODULE: external "node:util" 20711 const external_node_util_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:util"); 20712 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/is-form-data.js 20713 20714 function is_form_data_isFormData(body) { 20715 return dist.nodeStream(body) && dist.function_(body.getBoundary); 20716 } 20717 20718 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/get-body-size.js 20719 20720 20721 20722 20723 async function getBodySize(body, headers) { 20724 if (headers && 'content-length' in headers) { 20725 return Number(headers['content-length']); 20726 } 20727 if (!body) { 20728 return 0; 20729 } 20730 if (dist.string(body)) { 20731 return external_node_buffer_namespaceObject.Buffer.byteLength(body); 20732 } 20733 if (dist.buffer(body)) { 20734 return body.length; 20735 } 20736 if (is_form_data_isFormData(body)) { 20737 return (0,external_node_util_namespaceObject.promisify)(body.getLength.bind(body))(); 20738 } 20739 return undefined; 20740 } 20741 20742 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/proxy-events.js 20743 function proxyEvents(from, to, events) { 20744 const eventFunctions = {}; 20745 for (const event of events) { 20746 const eventFunction = (...args) => { 20747 to.emit(event, ...args); 20748 }; 20749 eventFunctions[event] = eventFunction; 20750 from.on(event, eventFunction); 20751 } 20752 return () => { 20753 for (const [event, eventFunction] of Object.entries(eventFunctions)) { 20754 from.off(event, eventFunction); 20755 } 20756 }; 20757 } 20758 20759 ;// CONCATENATED MODULE: external "node:net" 20760 const external_node_net_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:net"); 20761 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/unhandle.js 20762 // When attaching listeners, it's very easy to forget about them. 20763 // Especially if you do error handling and set timeouts. 20764 // So instead of checking if it's proper to throw an error on every timeout ever, 20765 // use this simple tool which will remove all listeners you have attached. 20766 function unhandle() { 20767 const handlers = []; 20768 return { 20769 once(origin, event, fn) { 20770 origin.once(event, fn); 20771 handlers.push({ origin, event, fn }); 20772 }, 20773 unhandleAll() { 20774 for (const handler of handlers) { 20775 const { origin, event, fn } = handler; 20776 origin.removeListener(event, fn); 20777 } 20778 handlers.length = 0; 20779 }, 20780 }; 20781 } 20782 20783 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/timed-out.js 20784 20785 20786 const reentry = Symbol('reentry'); 20787 const noop = () => { }; 20788 class timed_out_TimeoutError extends Error { 20789 constructor(threshold, event) { 20790 super(`Timeout awaiting '${event}' for ${threshold}ms`); 20791 Object.defineProperty(this, "event", { 20792 enumerable: true, 20793 configurable: true, 20794 writable: true, 20795 value: event 20796 }); 20797 Object.defineProperty(this, "code", { 20798 enumerable: true, 20799 configurable: true, 20800 writable: true, 20801 value: void 0 20802 }); 20803 this.name = 'TimeoutError'; 20804 this.code = 'ETIMEDOUT'; 20805 } 20806 } 20807 function timedOut(request, delays, options) { 20808 if (reentry in request) { 20809 return noop; 20810 } 20811 request[reentry] = true; 20812 const cancelers = []; 20813 const { once, unhandleAll } = unhandle(); 20814 const addTimeout = (delay, callback, event) => { 20815 const timeout = setTimeout(callback, delay, delay, event); 20816 timeout.unref?.(); 20817 const cancel = () => { 20818 clearTimeout(timeout); 20819 }; 20820 cancelers.push(cancel); 20821 return cancel; 20822 }; 20823 const { host, hostname } = options; 20824 const timeoutHandler = (delay, event) => { 20825 request.destroy(new timed_out_TimeoutError(delay, event)); 20826 }; 20827 const cancelTimeouts = () => { 20828 for (const cancel of cancelers) { 20829 cancel(); 20830 } 20831 unhandleAll(); 20832 }; 20833 request.once('error', error => { 20834 cancelTimeouts(); 20835 // Save original behavior 20836 /* istanbul ignore next */ 20837 if (request.listenerCount('error') === 0) { 20838 throw error; 20839 } 20840 }); 20841 if (delays.request !== undefined) { 20842 const cancelTimeout = addTimeout(delays.request, timeoutHandler, 'request'); 20843 once(request, 'response', (response) => { 20844 once(response, 'end', cancelTimeout); 20845 }); 20846 } 20847 if (delays.socket !== undefined) { 20848 const { socket } = delays; 20849 const socketTimeoutHandler = () => { 20850 timeoutHandler(socket, 'socket'); 20851 }; 20852 request.setTimeout(socket, socketTimeoutHandler); 20853 // `request.setTimeout(0)` causes a memory leak. 20854 // We can just remove the listener and forget about the timer - it's unreffed. 20855 // See https://github.com/sindresorhus/got/issues/690 20856 cancelers.push(() => { 20857 request.removeListener('timeout', socketTimeoutHandler); 20858 }); 20859 } 20860 const hasLookup = delays.lookup !== undefined; 20861 const hasConnect = delays.connect !== undefined; 20862 const hasSecureConnect = delays.secureConnect !== undefined; 20863 const hasSend = delays.send !== undefined; 20864 if (hasLookup || hasConnect || hasSecureConnect || hasSend) { 20865 once(request, 'socket', (socket) => { 20866 const { socketPath } = request; 20867 /* istanbul ignore next: hard to test */ 20868 if (socket.connecting) { 20869 const hasPath = Boolean(socketPath ?? external_node_net_namespaceObject.isIP(hostname ?? host ?? '') !== 0); 20870 if (hasLookup && !hasPath && socket.address().address === undefined) { 20871 const cancelTimeout = addTimeout(delays.lookup, timeoutHandler, 'lookup'); 20872 once(socket, 'lookup', cancelTimeout); 20873 } 20874 if (hasConnect) { 20875 const timeConnect = () => addTimeout(delays.connect, timeoutHandler, 'connect'); 20876 if (hasPath) { 20877 once(socket, 'connect', timeConnect()); 20878 } 20879 else { 20880 once(socket, 'lookup', (error) => { 20881 if (error === null) { 20882 once(socket, 'connect', timeConnect()); 20883 } 20884 }); 20885 } 20886 } 20887 if (hasSecureConnect && options.protocol === 'https:') { 20888 once(socket, 'connect', () => { 20889 const cancelTimeout = addTimeout(delays.secureConnect, timeoutHandler, 'secureConnect'); 20890 once(socket, 'secureConnect', cancelTimeout); 20891 }); 20892 } 20893 } 20894 if (hasSend) { 20895 const timeRequest = () => addTimeout(delays.send, timeoutHandler, 'send'); 20896 /* istanbul ignore next: hard to test */ 20897 if (socket.connecting) { 20898 once(socket, 'connect', () => { 20899 once(request, 'upload-complete', timeRequest()); 20900 }); 20901 } 20902 else { 20903 once(request, 'upload-complete', timeRequest()); 20904 } 20905 } 20906 }); 20907 } 20908 if (delays.response !== undefined) { 20909 once(request, 'upload-complete', () => { 20910 const cancelTimeout = addTimeout(delays.response, timeoutHandler, 'response'); 20911 once(request, 'response', cancelTimeout); 20912 }); 20913 } 20914 if (delays.read !== undefined) { 20915 once(request, 'response', (response) => { 20916 const cancelTimeout = addTimeout(delays.read, timeoutHandler, 'read'); 20917 once(response, 'end', cancelTimeout); 20918 }); 20919 } 20920 return cancelTimeouts; 20921 } 20922 20923 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/url-to-options.js 20924 20925 function urlToOptions(url) { 20926 // Cast to URL 20927 url = url; 20928 const options = { 20929 protocol: url.protocol, 20930 hostname: dist.string(url.hostname) && url.hostname.startsWith('[') ? url.hostname.slice(1, -1) : url.hostname, 20931 host: url.host, 20932 hash: url.hash, 20933 search: url.search, 20934 pathname: url.pathname, 20935 href: url.href, 20936 path: `${url.pathname || ''}${url.search || ''}`, 20937 }; 20938 if (dist.string(url.port) && url.port.length > 0) { 20939 options.port = Number(url.port); 20940 } 20941 if (url.username || url.password) { 20942 options.auth = `${url.username || ''}:${url.password || ''}`; 20943 } 20944 return options; 20945 } 20946 20947 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/weakable-map.js 20948 class WeakableMap { 20949 constructor() { 20950 Object.defineProperty(this, "weakMap", { 20951 enumerable: true, 20952 configurable: true, 20953 writable: true, 20954 value: void 0 20955 }); 20956 Object.defineProperty(this, "map", { 20957 enumerable: true, 20958 configurable: true, 20959 writable: true, 20960 value: void 0 20961 }); 20962 this.weakMap = new WeakMap(); 20963 this.map = new Map(); 20964 } 20965 set(key, value) { 20966 if (typeof key === 'object') { 20967 this.weakMap.set(key, value); 20968 } 20969 else { 20970 this.map.set(key, value); 20971 } 20972 } 20973 get(key) { 20974 if (typeof key === 'object') { 20975 return this.weakMap.get(key); 20976 } 20977 return this.map.get(key); 20978 } 20979 has(key) { 20980 if (typeof key === 'object') { 20981 return this.weakMap.has(key); 20982 } 20983 return this.map.has(key); 20984 } 20985 } 20986 20987 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/calculate-retry-delay.js 20988 const calculateRetryDelay = ({ attemptCount, retryOptions, error, retryAfter, computedValue, }) => { 20989 if (error.name === 'RetryError') { 20990 return 1; 20991 } 20992 if (attemptCount > retryOptions.limit) { 20993 return 0; 20994 } 20995 const hasMethod = retryOptions.methods.includes(error.options.method); 20996 const hasErrorCode = retryOptions.errorCodes.includes(error.code); 20997 const hasStatusCode = error.response && retryOptions.statusCodes.includes(error.response.statusCode); 20998 if (!hasMethod || (!hasErrorCode && !hasStatusCode)) { 20999 return 0; 21000 } 21001 if (error.response) { 21002 if (retryAfter) { 21003 // In this case `computedValue` is `options.request.timeout` 21004 if (retryAfter > computedValue) { 21005 return 0; 21006 } 21007 return retryAfter; 21008 } 21009 if (error.response.statusCode === 413) { 21010 return 0; 21011 } 21012 } 21013 const noise = Math.random() * retryOptions.noise; 21014 return Math.min(((2 ** (attemptCount - 1)) * 1000), retryOptions.backoffLimit) + noise; 21015 }; 21016 /* harmony default export */ const calculate_retry_delay = (calculateRetryDelay); 21017 21018 ;// CONCATENATED MODULE: external "node:tls" 21019 const external_node_tls_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:tls"); 21020 ;// CONCATENATED MODULE: external "node:https" 21021 const external_node_https_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:https"); 21022 ;// CONCATENATED MODULE: external "node:dns" 21023 const external_node_dns_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:dns"); 21024 ;// CONCATENATED MODULE: external "node:os" 21025 const external_node_os_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:os"); 21026 ;// CONCATENATED MODULE: ./node_modules/cacheable-lookup/source/index.js 21027 21028 21029 21030 21031 const {Resolver: AsyncResolver} = external_node_dns_namespaceObject.promises; 21032 21033 const kCacheableLookupCreateConnection = Symbol('cacheableLookupCreateConnection'); 21034 const kCacheableLookupInstance = Symbol('cacheableLookupInstance'); 21035 const kExpires = Symbol('expires'); 21036 21037 const supportsALL = typeof external_node_dns_namespaceObject.ALL === 'number'; 21038 21039 const verifyAgent = agent => { 21040 if (!(agent && typeof agent.createConnection === 'function')) { 21041 throw new Error('Expected an Agent instance as the first argument'); 21042 } 21043 }; 21044 21045 const map4to6 = entries => { 21046 for (const entry of entries) { 21047 if (entry.family === 6) { 21048 continue; 21049 } 21050 21051 entry.address = `::ffff:${entry.address}`; 21052 entry.family = 6; 21053 } 21054 }; 21055 21056 const getIfaceInfo = () => { 21057 let has4 = false; 21058 let has6 = false; 21059 21060 for (const device of Object.values(external_node_os_namespaceObject.networkInterfaces())) { 21061 for (const iface of device) { 21062 if (iface.internal) { 21063 continue; 21064 } 21065 21066 if (iface.family === 'IPv6') { 21067 has6 = true; 21068 } else { 21069 has4 = true; 21070 } 21071 21072 if (has4 && has6) { 21073 return {has4, has6}; 21074 } 21075 } 21076 } 21077 21078 return {has4, has6}; 21079 }; 21080 21081 const isIterable = map => { 21082 return Symbol.iterator in map; 21083 }; 21084 21085 const ignoreNoResultErrors = dnsPromise => { 21086 return dnsPromise.catch(error => { 21087 if ( 21088 error.code === 'ENODATA' || 21089 error.code === 'ENOTFOUND' || 21090 error.code === 'ENOENT' // Windows: name exists, but not this record type 21091 ) { 21092 return []; 21093 } 21094 21095 throw error; 21096 }); 21097 }; 21098 21099 const ttl = {ttl: true}; 21100 const source_all = {all: true}; 21101 const all4 = {all: true, family: 4}; 21102 const all6 = {all: true, family: 6}; 21103 21104 class CacheableLookup { 21105 constructor({ 21106 cache = new Map(), 21107 maxTtl = Infinity, 21108 fallbackDuration = 3600, 21109 errorTtl = 0.15, 21110 resolver = new AsyncResolver(), 21111 lookup = external_node_dns_namespaceObject.lookup 21112 } = {}) { 21113 this.maxTtl = maxTtl; 21114 this.errorTtl = errorTtl; 21115 21116 this._cache = cache; 21117 this._resolver = resolver; 21118 this._dnsLookup = lookup && (0,external_node_util_namespaceObject.promisify)(lookup); 21119 this.stats = { 21120 cache: 0, 21121 query: 0 21122 }; 21123 21124 if (this._resolver instanceof AsyncResolver) { 21125 this._resolve4 = this._resolver.resolve4.bind(this._resolver); 21126 this._resolve6 = this._resolver.resolve6.bind(this._resolver); 21127 } else { 21128 this._resolve4 = (0,external_node_util_namespaceObject.promisify)(this._resolver.resolve4.bind(this._resolver)); 21129 this._resolve6 = (0,external_node_util_namespaceObject.promisify)(this._resolver.resolve6.bind(this._resolver)); 21130 } 21131 21132 this._iface = getIfaceInfo(); 21133 21134 this._pending = {}; 21135 this._nextRemovalTime = false; 21136 this._hostnamesToFallback = new Set(); 21137 21138 this.fallbackDuration = fallbackDuration; 21139 21140 if (fallbackDuration > 0) { 21141 const interval = setInterval(() => { 21142 this._hostnamesToFallback.clear(); 21143 }, fallbackDuration * 1000); 21144 21145 /* istanbul ignore next: There is no `interval.unref()` when running inside an Electron renderer */ 21146 if (interval.unref) { 21147 interval.unref(); 21148 } 21149 21150 this._fallbackInterval = interval; 21151 } 21152 21153 this.lookup = this.lookup.bind(this); 21154 this.lookupAsync = this.lookupAsync.bind(this); 21155 } 21156 21157 set servers(servers) { 21158 this.clear(); 21159 21160 this._resolver.setServers(servers); 21161 } 21162 21163 get servers() { 21164 return this._resolver.getServers(); 21165 } 21166 21167 lookup(hostname, options, callback) { 21168 if (typeof options === 'function') { 21169 callback = options; 21170 options = {}; 21171 } else if (typeof options === 'number') { 21172 options = { 21173 family: options 21174 }; 21175 } 21176 21177 if (!callback) { 21178 throw new Error('Callback must be a function.'); 21179 } 21180 21181 // eslint-disable-next-line promise/prefer-await-to-then 21182 this.lookupAsync(hostname, options).then(result => { 21183 if (options.all) { 21184 callback(null, result); 21185 } else { 21186 callback(null, result.address, result.family, result.expires, result.ttl, result.source); 21187 } 21188 }, callback); 21189 } 21190 21191 async lookupAsync(hostname, options = {}) { 21192 if (typeof options === 'number') { 21193 options = { 21194 family: options 21195 }; 21196 } 21197 21198 let cached = await this.query(hostname); 21199 21200 if (options.family === 6) { 21201 const filtered = cached.filter(entry => entry.family === 6); 21202 21203 if (options.hints & external_node_dns_namespaceObject.V4MAPPED) { 21204 if ((supportsALL && options.hints & external_node_dns_namespaceObject.ALL) || filtered.length === 0) { 21205 map4to6(cached); 21206 } else { 21207 cached = filtered; 21208 } 21209 } else { 21210 cached = filtered; 21211 } 21212 } else if (options.family === 4) { 21213 cached = cached.filter(entry => entry.family === 4); 21214 } 21215 21216 if (options.hints & external_node_dns_namespaceObject.ADDRCONFIG) { 21217 const {_iface} = this; 21218 cached = cached.filter(entry => entry.family === 6 ? _iface.has6 : _iface.has4); 21219 } 21220 21221 if (cached.length === 0) { 21222 const error = new Error(`cacheableLookup ENOTFOUND ${hostname}`); 21223 error.code = 'ENOTFOUND'; 21224 error.hostname = hostname; 21225 21226 throw error; 21227 } 21228 21229 if (options.all) { 21230 return cached; 21231 } 21232 21233 return cached[0]; 21234 } 21235 21236 async query(hostname) { 21237 let source = 'cache'; 21238 let cached = await this._cache.get(hostname); 21239 21240 if (cached) { 21241 this.stats.cache++; 21242 } 21243 21244 if (!cached) { 21245 const pending = this._pending[hostname]; 21246 if (pending) { 21247 this.stats.cache++; 21248 cached = await pending; 21249 } else { 21250 source = 'query'; 21251 const newPromise = this.queryAndCache(hostname); 21252 this._pending[hostname] = newPromise; 21253 this.stats.query++; 21254 try { 21255 cached = await newPromise; 21256 } finally { 21257 delete this._pending[hostname]; 21258 } 21259 } 21260 } 21261 21262 cached = cached.map(entry => { 21263 return {...entry, source}; 21264 }); 21265 21266 return cached; 21267 } 21268 21269 async _resolve(hostname) { 21270 // ANY is unsafe as it doesn't trigger new queries in the underlying server. 21271 const [A, AAAA] = await Promise.all([ 21272 ignoreNoResultErrors(this._resolve4(hostname, ttl)), 21273 ignoreNoResultErrors(this._resolve6(hostname, ttl)) 21274 ]); 21275 21276 let aTtl = 0; 21277 let aaaaTtl = 0; 21278 let cacheTtl = 0; 21279 21280 const now = Date.now(); 21281 21282 for (const entry of A) { 21283 entry.family = 4; 21284 entry.expires = now + (entry.ttl * 1000); 21285 21286 aTtl = Math.max(aTtl, entry.ttl); 21287 } 21288 21289 for (const entry of AAAA) { 21290 entry.family = 6; 21291 entry.expires = now + (entry.ttl * 1000); 21292 21293 aaaaTtl = Math.max(aaaaTtl, entry.ttl); 21294 } 21295 21296 if (A.length > 0) { 21297 if (AAAA.length > 0) { 21298 cacheTtl = Math.min(aTtl, aaaaTtl); 21299 } else { 21300 cacheTtl = aTtl; 21301 } 21302 } else { 21303 cacheTtl = aaaaTtl; 21304 } 21305 21306 return { 21307 entries: [ 21308 ...A, 21309 ...AAAA 21310 ], 21311 cacheTtl 21312 }; 21313 } 21314 21315 async _lookup(hostname) { 21316 try { 21317 const [A, AAAA] = await Promise.all([ 21318 // Passing {all: true} doesn't return all IPv4 and IPv6 entries. 21319 // See https://github.com/szmarczak/cacheable-lookup/issues/42 21320 ignoreNoResultErrors(this._dnsLookup(hostname, all4)), 21321 ignoreNoResultErrors(this._dnsLookup(hostname, all6)) 21322 ]); 21323 21324 return { 21325 entries: [ 21326 ...A, 21327 ...AAAA 21328 ], 21329 cacheTtl: 0 21330 }; 21331 } catch { 21332 return { 21333 entries: [], 21334 cacheTtl: 0 21335 }; 21336 } 21337 } 21338 21339 async _set(hostname, data, cacheTtl) { 21340 if (this.maxTtl > 0 && cacheTtl > 0) { 21341 cacheTtl = Math.min(cacheTtl, this.maxTtl) * 1000; 21342 data[kExpires] = Date.now() + cacheTtl; 21343 21344 try { 21345 await this._cache.set(hostname, data, cacheTtl); 21346 } catch (error) { 21347 this.lookupAsync = async () => { 21348 const cacheError = new Error('Cache Error. Please recreate the CacheableLookup instance.'); 21349 cacheError.cause = error; 21350 21351 throw cacheError; 21352 }; 21353 } 21354 21355 if (isIterable(this._cache)) { 21356 this._tick(cacheTtl); 21357 } 21358 } 21359 } 21360 21361 async queryAndCache(hostname) { 21362 if (this._hostnamesToFallback.has(hostname)) { 21363 return this._dnsLookup(hostname, source_all); 21364 } 21365 21366 let query = await this._resolve(hostname); 21367 21368 if (query.entries.length === 0 && this._dnsLookup) { 21369 query = await this._lookup(hostname); 21370 21371 if (query.entries.length !== 0 && this.fallbackDuration > 0) { 21372 // Use `dns.lookup(...)` for that particular hostname 21373 this._hostnamesToFallback.add(hostname); 21374 } 21375 } 21376 21377 const cacheTtl = query.entries.length === 0 ? this.errorTtl : query.cacheTtl; 21378 await this._set(hostname, query.entries, cacheTtl); 21379 21380 return query.entries; 21381 } 21382 21383 _tick(ms) { 21384 const nextRemovalTime = this._nextRemovalTime; 21385 21386 if (!nextRemovalTime || ms < nextRemovalTime) { 21387 clearTimeout(this._removalTimeout); 21388 21389 this._nextRemovalTime = ms; 21390 21391 this._removalTimeout = setTimeout(() => { 21392 this._nextRemovalTime = false; 21393 21394 let nextExpiry = Infinity; 21395 21396 const now = Date.now(); 21397 21398 for (const [hostname, entries] of this._cache) { 21399 const expires = entries[kExpires]; 21400 21401 if (now >= expires) { 21402 this._cache.delete(hostname); 21403 } else if (expires < nextExpiry) { 21404 nextExpiry = expires; 21405 } 21406 } 21407 21408 if (nextExpiry !== Infinity) { 21409 this._tick(nextExpiry - now); 21410 } 21411 }, ms); 21412 21413 /* istanbul ignore next: There is no `timeout.unref()` when running inside an Electron renderer */ 21414 if (this._removalTimeout.unref) { 21415 this._removalTimeout.unref(); 21416 } 21417 } 21418 } 21419 21420 install(agent) { 21421 verifyAgent(agent); 21422 21423 if (kCacheableLookupCreateConnection in agent) { 21424 throw new Error('CacheableLookup has been already installed'); 21425 } 21426 21427 agent[kCacheableLookupCreateConnection] = agent.createConnection; 21428 agent[kCacheableLookupInstance] = this; 21429 21430 agent.createConnection = (options, callback) => { 21431 if (!('lookup' in options)) { 21432 options.lookup = this.lookup; 21433 } 21434 21435 return agent[kCacheableLookupCreateConnection](options, callback); 21436 }; 21437 } 21438 21439 uninstall(agent) { 21440 verifyAgent(agent); 21441 21442 if (agent[kCacheableLookupCreateConnection]) { 21443 if (agent[kCacheableLookupInstance] !== this) { 21444 throw new Error('The agent is not owned by this CacheableLookup instance'); 21445 } 21446 21447 agent.createConnection = agent[kCacheableLookupCreateConnection]; 21448 21449 delete agent[kCacheableLookupCreateConnection]; 21450 delete agent[kCacheableLookupInstance]; 21451 } 21452 } 21453 21454 updateInterfaceInfo() { 21455 const {_iface} = this; 21456 21457 this._iface = getIfaceInfo(); 21458 21459 if ((_iface.has4 && !this._iface.has4) || (_iface.has6 && !this._iface.has6)) { 21460 this._cache.clear(); 21461 } 21462 } 21463 21464 clear(hostname) { 21465 if (hostname) { 21466 this._cache.delete(hostname); 21467 return; 21468 } 21469 21470 this._cache.clear(); 21471 } 21472 } 21473 21474 // EXTERNAL MODULE: ./node_modules/http2-wrapper/source/index.js 21475 var http2_wrapper_source = __nccwpck_require__(4645); 21476 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/parse-link-header.js 21477 function parseLinkHeader(link) { 21478 const parsed = []; 21479 const items = link.split(','); 21480 for (const item of items) { 21481 // https://tools.ietf.org/html/rfc5988#section-5 21482 const [rawUriReference, ...rawLinkParameters] = item.split(';'); 21483 const trimmedUriReference = rawUriReference.trim(); 21484 // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with 21485 if (trimmedUriReference[0] !== '<' || trimmedUriReference[trimmedUriReference.length - 1] !== '>') { 21486 throw new Error(`Invalid format of the Link header reference: ${trimmedUriReference}`); 21487 } 21488 const reference = trimmedUriReference.slice(1, -1); 21489 const parameters = {}; 21490 if (rawLinkParameters.length === 0) { 21491 throw new Error(`Unexpected end of Link header parameters: ${rawLinkParameters.join(';')}`); 21492 } 21493 for (const rawParameter of rawLinkParameters) { 21494 const trimmedRawParameter = rawParameter.trim(); 21495 const center = trimmedRawParameter.indexOf('='); 21496 if (center === -1) { 21497 throw new Error(`Failed to parse Link header: ${link}`); 21498 } 21499 const name = trimmedRawParameter.slice(0, center).trim(); 21500 const value = trimmedRawParameter.slice(center + 1).trim(); 21501 parameters[name] = value; 21502 } 21503 parsed.push({ 21504 reference, 21505 parameters, 21506 }); 21507 } 21508 return parsed; 21509 } 21510 21511 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/options.js 21512 21513 21514 21515 // DO NOT use destructuring for `https.request` and `http.request` as it's not compatible with `nock`. 21516 21517 21518 21519 21520 21521 21522 21523 21524 const [major, minor] = external_node_process_namespaceObject.versions.node.split('.').map(Number); 21525 function validateSearchParameters(searchParameters) { 21526 // eslint-disable-next-line guard-for-in 21527 for (const key in searchParameters) { 21528 const value = searchParameters[key]; 21529 assert.any([dist.string, dist.number, dist.boolean, dist.null_, dist.undefined], value); 21530 } 21531 } 21532 const globalCache = new Map(); 21533 let globalDnsCache; 21534 const getGlobalDnsCache = () => { 21535 if (globalDnsCache) { 21536 return globalDnsCache; 21537 } 21538 globalDnsCache = new CacheableLookup(); 21539 return globalDnsCache; 21540 }; 21541 const defaultInternals = { 21542 request: undefined, 21543 agent: { 21544 http: undefined, 21545 https: undefined, 21546 http2: undefined, 21547 }, 21548 h2session: undefined, 21549 decompress: true, 21550 timeout: { 21551 connect: undefined, 21552 lookup: undefined, 21553 read: undefined, 21554 request: undefined, 21555 response: undefined, 21556 secureConnect: undefined, 21557 send: undefined, 21558 socket: undefined, 21559 }, 21560 prefixUrl: '', 21561 body: undefined, 21562 form: undefined, 21563 json: undefined, 21564 cookieJar: undefined, 21565 ignoreInvalidCookies: false, 21566 searchParams: undefined, 21567 dnsLookup: undefined, 21568 dnsCache: undefined, 21569 context: {}, 21570 hooks: { 21571 init: [], 21572 beforeRequest: [], 21573 beforeError: [], 21574 beforeRedirect: [], 21575 beforeRetry: [], 21576 afterResponse: [], 21577 }, 21578 followRedirect: true, 21579 maxRedirects: 10, 21580 cache: undefined, 21581 throwHttpErrors: true, 21582 username: '', 21583 password: '', 21584 http2: false, 21585 allowGetBody: false, 21586 headers: { 21587 'user-agent': 'got (https://github.com/sindresorhus/got)', 21588 }, 21589 methodRewriting: false, 21590 dnsLookupIpVersion: undefined, 21591 parseJson: JSON.parse, 21592 stringifyJson: JSON.stringify, 21593 retry: { 21594 limit: 2, 21595 methods: [ 21596 'GET', 21597 'PUT', 21598 'HEAD', 21599 'DELETE', 21600 'OPTIONS', 21601 'TRACE', 21602 ], 21603 statusCodes: [ 21604 408, 21605 413, 21606 429, 21607 500, 21608 502, 21609 503, 21610 504, 21611 521, 21612 522, 21613 524, 21614 ], 21615 errorCodes: [ 21616 'ETIMEDOUT', 21617 'ECONNRESET', 21618 'EADDRINUSE', 21619 'ECONNREFUSED', 21620 'EPIPE', 21621 'ENOTFOUND', 21622 'ENETUNREACH', 21623 'EAI_AGAIN', 21624 ], 21625 maxRetryAfter: undefined, 21626 calculateDelay: ({ computedValue }) => computedValue, 21627 backoffLimit: Number.POSITIVE_INFINITY, 21628 noise: 100, 21629 }, 21630 localAddress: undefined, 21631 method: 'GET', 21632 createConnection: undefined, 21633 cacheOptions: { 21634 shared: undefined, 21635 cacheHeuristic: undefined, 21636 immutableMinTimeToLive: undefined, 21637 ignoreCargoCult: undefined, 21638 }, 21639 https: { 21640 alpnProtocols: undefined, 21641 rejectUnauthorized: undefined, 21642 checkServerIdentity: undefined, 21643 certificateAuthority: undefined, 21644 key: undefined, 21645 certificate: undefined, 21646 passphrase: undefined, 21647 pfx: undefined, 21648 ciphers: undefined, 21649 honorCipherOrder: undefined, 21650 minVersion: undefined, 21651 maxVersion: undefined, 21652 signatureAlgorithms: undefined, 21653 tlsSessionLifetime: undefined, 21654 dhparam: undefined, 21655 ecdhCurve: undefined, 21656 certificateRevocationLists: undefined, 21657 }, 21658 encoding: undefined, 21659 resolveBodyOnly: false, 21660 isStream: false, 21661 responseType: 'text', 21662 url: undefined, 21663 pagination: { 21664 transform(response) { 21665 if (response.request.options.responseType === 'json') { 21666 return response.body; 21667 } 21668 return JSON.parse(response.body); 21669 }, 21670 paginate({ response }) { 21671 const rawLinkHeader = response.headers.link; 21672 if (typeof rawLinkHeader !== 'string' || rawLinkHeader.trim() === '') { 21673 return false; 21674 } 21675 const parsed = parseLinkHeader(rawLinkHeader); 21676 const next = parsed.find(entry => entry.parameters.rel === 'next' || entry.parameters.rel === '"next"'); 21677 if (next) { 21678 return { 21679 url: new URL(next.reference, response.url), 21680 }; 21681 } 21682 return false; 21683 }, 21684 filter: () => true, 21685 shouldContinue: () => true, 21686 countLimit: Number.POSITIVE_INFINITY, 21687 backoff: 0, 21688 requestLimit: 10000, 21689 stackAllItems: false, 21690 }, 21691 setHost: true, 21692 maxHeaderSize: undefined, 21693 signal: undefined, 21694 enableUnixSockets: false, 21695 }; 21696 const cloneInternals = (internals) => { 21697 const { hooks, retry } = internals; 21698 const result = { 21699 ...internals, 21700 context: { ...internals.context }, 21701 cacheOptions: { ...internals.cacheOptions }, 21702 https: { ...internals.https }, 21703 agent: { ...internals.agent }, 21704 headers: { ...internals.headers }, 21705 retry: { 21706 ...retry, 21707 errorCodes: [...retry.errorCodes], 21708 methods: [...retry.methods], 21709 statusCodes: [...retry.statusCodes], 21710 }, 21711 timeout: { ...internals.timeout }, 21712 hooks: { 21713 init: [...hooks.init], 21714 beforeRequest: [...hooks.beforeRequest], 21715 beforeError: [...hooks.beforeError], 21716 beforeRedirect: [...hooks.beforeRedirect], 21717 beforeRetry: [...hooks.beforeRetry], 21718 afterResponse: [...hooks.afterResponse], 21719 }, 21720 searchParams: internals.searchParams ? new URLSearchParams(internals.searchParams) : undefined, 21721 pagination: { ...internals.pagination }, 21722 }; 21723 if (result.url !== undefined) { 21724 result.prefixUrl = ''; 21725 } 21726 return result; 21727 }; 21728 const cloneRaw = (raw) => { 21729 const { hooks, retry } = raw; 21730 const result = { ...raw }; 21731 if (dist.object(raw.context)) { 21732 result.context = { ...raw.context }; 21733 } 21734 if (dist.object(raw.cacheOptions)) { 21735 result.cacheOptions = { ...raw.cacheOptions }; 21736 } 21737 if (dist.object(raw.https)) { 21738 result.https = { ...raw.https }; 21739 } 21740 if (dist.object(raw.cacheOptions)) { 21741 result.cacheOptions = { ...result.cacheOptions }; 21742 } 21743 if (dist.object(raw.agent)) { 21744 result.agent = { ...raw.agent }; 21745 } 21746 if (dist.object(raw.headers)) { 21747 result.headers = { ...raw.headers }; 21748 } 21749 if (dist.object(retry)) { 21750 result.retry = { ...retry }; 21751 if (dist.array(retry.errorCodes)) { 21752 result.retry.errorCodes = [...retry.errorCodes]; 21753 } 21754 if (dist.array(retry.methods)) { 21755 result.retry.methods = [...retry.methods]; 21756 } 21757 if (dist.array(retry.statusCodes)) { 21758 result.retry.statusCodes = [...retry.statusCodes]; 21759 } 21760 } 21761 if (dist.object(raw.timeout)) { 21762 result.timeout = { ...raw.timeout }; 21763 } 21764 if (dist.object(hooks)) { 21765 result.hooks = { 21766 ...hooks, 21767 }; 21768 if (dist.array(hooks.init)) { 21769 result.hooks.init = [...hooks.init]; 21770 } 21771 if (dist.array(hooks.beforeRequest)) { 21772 result.hooks.beforeRequest = [...hooks.beforeRequest]; 21773 } 21774 if (dist.array(hooks.beforeError)) { 21775 result.hooks.beforeError = [...hooks.beforeError]; 21776 } 21777 if (dist.array(hooks.beforeRedirect)) { 21778 result.hooks.beforeRedirect = [...hooks.beforeRedirect]; 21779 } 21780 if (dist.array(hooks.beforeRetry)) { 21781 result.hooks.beforeRetry = [...hooks.beforeRetry]; 21782 } 21783 if (dist.array(hooks.afterResponse)) { 21784 result.hooks.afterResponse = [...hooks.afterResponse]; 21785 } 21786 } 21787 // TODO: raw.searchParams 21788 if (dist.object(raw.pagination)) { 21789 result.pagination = { ...raw.pagination }; 21790 } 21791 return result; 21792 }; 21793 const getHttp2TimeoutOption = (internals) => { 21794 const delays = [internals.timeout.socket, internals.timeout.connect, internals.timeout.lookup, internals.timeout.request, internals.timeout.secureConnect].filter(delay => typeof delay === 'number'); 21795 if (delays.length > 0) { 21796 return Math.min(...delays); 21797 } 21798 return undefined; 21799 }; 21800 const init = (options, withOptions, self) => { 21801 const initHooks = options.hooks?.init; 21802 if (initHooks) { 21803 for (const hook of initHooks) { 21804 hook(withOptions, self); 21805 } 21806 } 21807 }; 21808 class Options { 21809 constructor(input, options, defaults) { 21810 Object.defineProperty(this, "_unixOptions", { 21811 enumerable: true, 21812 configurable: true, 21813 writable: true, 21814 value: void 0 21815 }); 21816 Object.defineProperty(this, "_internals", { 21817 enumerable: true, 21818 configurable: true, 21819 writable: true, 21820 value: void 0 21821 }); 21822 Object.defineProperty(this, "_merging", { 21823 enumerable: true, 21824 configurable: true, 21825 writable: true, 21826 value: void 0 21827 }); 21828 Object.defineProperty(this, "_init", { 21829 enumerable: true, 21830 configurable: true, 21831 writable: true, 21832 value: void 0 21833 }); 21834 assert.any([dist.string, dist.urlInstance, dist.object, dist.undefined], input); 21835 assert.any([dist.object, dist.undefined], options); 21836 assert.any([dist.object, dist.undefined], defaults); 21837 if (input instanceof Options || options instanceof Options) { 21838 throw new TypeError('The defaults must be passed as the third argument'); 21839 } 21840 this._internals = cloneInternals(defaults?._internals ?? defaults ?? defaultInternals); 21841 this._init = [...(defaults?._init ?? [])]; 21842 this._merging = false; 21843 this._unixOptions = undefined; 21844 // This rule allows `finally` to be considered more important. 21845 // Meaning no matter the error thrown in the `try` block, 21846 // if `finally` throws then the `finally` error will be thrown. 21847 // 21848 // Yes, we want this. If we set `url` first, then the `url.searchParams` 21849 // would get merged. Instead we set the `searchParams` first, then 21850 // `url.searchParams` is overwritten as expected. 21851 // 21852 /* eslint-disable no-unsafe-finally */ 21853 try { 21854 if (dist.plainObject(input)) { 21855 try { 21856 this.merge(input); 21857 this.merge(options); 21858 } 21859 finally { 21860 this.url = input.url; 21861 } 21862 } 21863 else { 21864 try { 21865 this.merge(options); 21866 } 21867 finally { 21868 if (options?.url !== undefined) { 21869 if (input === undefined) { 21870 this.url = options.url; 21871 } 21872 else { 21873 throw new TypeError('The `url` option is mutually exclusive with the `input` argument'); 21874 } 21875 } 21876 else if (input !== undefined) { 21877 this.url = input; 21878 } 21879 } 21880 } 21881 } 21882 catch (error) { 21883 error.options = this; 21884 throw error; 21885 } 21886 /* eslint-enable no-unsafe-finally */ 21887 } 21888 merge(options) { 21889 if (!options) { 21890 return; 21891 } 21892 if (options instanceof Options) { 21893 for (const init of options._init) { 21894 this.merge(init); 21895 } 21896 return; 21897 } 21898 options = cloneRaw(options); 21899 init(this, options, this); 21900 init(options, options, this); 21901 this._merging = true; 21902 // Always merge `isStream` first 21903 if ('isStream' in options) { 21904 this.isStream = options.isStream; 21905 } 21906 try { 21907 let push = false; 21908 for (const key in options) { 21909 // `got.extend()` options 21910 if (key === 'mutableDefaults' || key === 'handlers') { 21911 continue; 21912 } 21913 // Never merge `url` 21914 if (key === 'url') { 21915 continue; 21916 } 21917 if (!(key in this)) { 21918 throw new Error(`Unexpected option: ${key}`); 21919 } 21920 // @ts-expect-error Type 'unknown' is not assignable to type 'never'. 21921 const value = options[key]; 21922 if (value === undefined) { 21923 continue; 21924 } 21925 // @ts-expect-error Type 'unknown' is not assignable to type 'never'. 21926 this[key] = value; 21927 push = true; 21928 } 21929 if (push) { 21930 this._init.push(options); 21931 } 21932 } 21933 finally { 21934 this._merging = false; 21935 } 21936 } 21937 /** 21938 Custom request function. 21939 The main purpose of this is to [support HTTP2 using a wrapper](https://github.com/szmarczak/http2-wrapper). 21940 21941 @default http.request | https.request 21942 */ 21943 get request() { 21944 return this._internals.request; 21945 } 21946 set request(value) { 21947 assert.any([dist.function_, dist.undefined], value); 21948 this._internals.request = value; 21949 } 21950 /** 21951 An object representing `http`, `https` and `http2` keys for [`http.Agent`](https://nodejs.org/api/http.html#http_class_http_agent), [`https.Agent`](https://nodejs.org/api/https.html#https_class_https_agent) and [`http2wrapper.Agent`](https://github.com/szmarczak/http2-wrapper#new-http2agentoptions) instance. 21952 This is necessary because a request to one protocol might redirect to another. 21953 In such a scenario, Got will switch over to the right protocol agent for you. 21954 21955 If a key is not present, it will default to a global agent. 21956 21957 @example 21958 ``` 21959 import got from 'got'; 21960 import HttpAgent from 'agentkeepalive'; 21961 21962 const {HttpsAgent} = HttpAgent; 21963 21964 await got('https://sindresorhus.com', { 21965 agent: { 21966 http: new HttpAgent(), 21967 https: new HttpsAgent() 21968 } 21969 }); 21970 ``` 21971 */ 21972 get agent() { 21973 return this._internals.agent; 21974 } 21975 set agent(value) { 21976 assert.plainObject(value); 21977 // eslint-disable-next-line guard-for-in 21978 for (const key in value) { 21979 if (!(key in this._internals.agent)) { 21980 throw new TypeError(`Unexpected agent option: ${key}`); 21981 } 21982 // @ts-expect-error - No idea why `value[key]` doesn't work here. 21983 assert.any([dist.object, dist.undefined], value[key]); 21984 } 21985 if (this._merging) { 21986 Object.assign(this._internals.agent, value); 21987 } 21988 else { 21989 this._internals.agent = { ...value }; 21990 } 21991 } 21992 get h2session() { 21993 return this._internals.h2session; 21994 } 21995 set h2session(value) { 21996 this._internals.h2session = value; 21997 } 21998 /** 21999 Decompress the response automatically. 22000 22001 This will set the `accept-encoding` header to `gzip, deflate, br` unless you set it yourself. 22002 22003 If this is disabled, a compressed response is returned as a `Buffer`. 22004 This may be useful if you want to handle decompression yourself or stream the raw compressed data. 22005 22006 @default true 22007 */ 22008 get decompress() { 22009 return this._internals.decompress; 22010 } 22011 set decompress(value) { 22012 assert.boolean(value); 22013 this._internals.decompress = value; 22014 } 22015 /** 22016 Milliseconds to wait for the server to end the response before aborting the request with `got.TimeoutError` error (a.k.a. `request` property). 22017 By default, there's no timeout. 22018 22019 This also accepts an `object` with the following fields to constrain the duration of each phase of the request lifecycle: 22020 22021 - `lookup` starts when a socket is assigned and ends when the hostname has been resolved. 22022 Does not apply when using a Unix domain socket. 22023 - `connect` starts when `lookup` completes (or when the socket is assigned if lookup does not apply to the request) and ends when the socket is connected. 22024 - `secureConnect` starts when `connect` completes and ends when the handshaking process completes (HTTPS only). 22025 - `socket` starts when the socket is connected. See [request.setTimeout](https://nodejs.org/api/http.html#http_request_settimeout_timeout_callback). 22026 - `response` starts when the request has been written to the socket and ends when the response headers are received. 22027 - `send` starts when the socket is connected and ends with the request has been written to the socket. 22028 - `request` starts when the request is initiated and ends when the response's end event fires. 22029 */ 22030 get timeout() { 22031 // We always return `Delays` here. 22032 // It has to be `Delays | number`, otherwise TypeScript will error because the getter and the setter have incompatible types. 22033 return this._internals.timeout; 22034 } 22035 set timeout(value) { 22036 assert.plainObject(value); 22037 // eslint-disable-next-line guard-for-in 22038 for (const key in value) { 22039 if (!(key in this._internals.timeout)) { 22040 throw new Error(`Unexpected timeout option: ${key}`); 22041 } 22042 // @ts-expect-error - No idea why `value[key]` doesn't work here. 22043 assert.any([dist.number, dist.undefined], value[key]); 22044 } 22045 if (this._merging) { 22046 Object.assign(this._internals.timeout, value); 22047 } 22048 else { 22049 this._internals.timeout = { ...value }; 22050 } 22051 } 22052 /** 22053 When specified, `prefixUrl` will be prepended to `url`. 22054 The prefix can be any valid URL, either relative or absolute. 22055 A trailing slash `/` is optional - one will be added automatically. 22056 22057 __Note__: `prefixUrl` will be ignored if the `url` argument is a URL instance. 22058 22059 __Note__: Leading slashes in `input` are disallowed when using this option to enforce consistency and avoid confusion. 22060 For example, when the prefix URL is `https://example.com/foo` and the input is `/bar`, there's ambiguity whether the resulting URL would become `https://example.com/foo/bar` or `https://example.com/bar`. 22061 The latter is used by browsers. 22062 22063 __Tip__: Useful when used with `got.extend()` to create niche-specific Got instances. 22064 22065 __Tip__: You can change `prefixUrl` using hooks as long as the URL still includes the `prefixUrl`. 22066 If the URL doesn't include it anymore, it will throw. 22067 22068 @example 22069 ``` 22070 import got from 'got'; 22071 22072 await got('unicorn', {prefixUrl: 'https://cats.com'}); 22073 //=> 'https://cats.com/unicorn' 22074 22075 const instance = got.extend({ 22076 prefixUrl: 'https://google.com' 22077 }); 22078 22079 await instance('unicorn', { 22080 hooks: { 22081 beforeRequest: [ 22082 options => { 22083 options.prefixUrl = 'https://cats.com'; 22084 } 22085 ] 22086 } 22087 }); 22088 //=> 'https://cats.com/unicorn' 22089 ``` 22090 */ 22091 get prefixUrl() { 22092 // We always return `string` here. 22093 // It has to be `string | URL`, otherwise TypeScript will error because the getter and the setter have incompatible types. 22094 return this._internals.prefixUrl; 22095 } 22096 set prefixUrl(value) { 22097 assert.any([dist.string, dist.urlInstance], value); 22098 if (value === '') { 22099 this._internals.prefixUrl = ''; 22100 return; 22101 } 22102 value = value.toString(); 22103 if (!value.endsWith('/')) { 22104 value += '/'; 22105 } 22106 if (this._internals.prefixUrl && this._internals.url) { 22107 const { href } = this._internals.url; 22108 this._internals.url.href = value + href.slice(this._internals.prefixUrl.length); 22109 } 22110 this._internals.prefixUrl = value; 22111 } 22112 /** 22113 __Note #1__: The `body` option cannot be used with the `json` or `form` option. 22114 22115 __Note #2__: If you provide this option, `got.stream()` will be read-only. 22116 22117 __Note #3__: If you provide a payload with the `GET` or `HEAD` method, it will throw a `TypeError` unless the method is `GET` and the `allowGetBody` option is set to `true`. 22118 22119 __Note #4__: This option is not enumerable and will not be merged with the instance defaults. 22120 22121 The `content-length` header will be automatically set if `body` is a `string` / `Buffer` / [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData) / [`form-data` instance](https://github.com/form-data/form-data), and `content-length` and `transfer-encoding` are not manually set in `options.headers`. 22122 22123 Since Got 12, the `content-length` is not automatically set when `body` is a `fs.createReadStream`. 22124 */ 22125 get body() { 22126 return this._internals.body; 22127 } 22128 set body(value) { 22129 assert.any([dist.string, dist.buffer, dist.nodeStream, dist.generator, dist.asyncGenerator, isFormData, dist.undefined], value); 22130 if (dist.nodeStream(value)) { 22131 assert.truthy(value.readable); 22132 } 22133 if (value !== undefined) { 22134 assert.undefined(this._internals.form); 22135 assert.undefined(this._internals.json); 22136 } 22137 this._internals.body = value; 22138 } 22139 /** 22140 The form body is converted to a query string using [`(new URLSearchParams(object)).toString()`](https://nodejs.org/api/url.html#url_constructor_new_urlsearchparams_obj). 22141 22142 If the `Content-Type` header is not present, it will be set to `application/x-www-form-urlencoded`. 22143 22144 __Note #1__: If you provide this option, `got.stream()` will be read-only. 22145 22146 __Note #2__: This option is not enumerable and will not be merged with the instance defaults. 22147 */ 22148 get form() { 22149 return this._internals.form; 22150 } 22151 set form(value) { 22152 assert.any([dist.plainObject, dist.undefined], value); 22153 if (value !== undefined) { 22154 assert.undefined(this._internals.body); 22155 assert.undefined(this._internals.json); 22156 } 22157 this._internals.form = value; 22158 } 22159 /** 22160 JSON body. If the `Content-Type` header is not set, it will be set to `application/json`. 22161 22162 __Note #1__: If you provide this option, `got.stream()` will be read-only. 22163 22164 __Note #2__: This option is not enumerable and will not be merged with the instance defaults. 22165 */ 22166 get json() { 22167 return this._internals.json; 22168 } 22169 set json(value) { 22170 if (value !== undefined) { 22171 assert.undefined(this._internals.body); 22172 assert.undefined(this._internals.form); 22173 } 22174 this._internals.json = value; 22175 } 22176 /** 22177 The URL to request, as a string, a [`https.request` options object](https://nodejs.org/api/https.html#https_https_request_options_callback), or a [WHATWG `URL`](https://nodejs.org/api/url.html#url_class_url). 22178 22179 Properties from `options` will override properties in the parsed `url`. 22180 22181 If no protocol is specified, it will throw a `TypeError`. 22182 22183 __Note__: The query string is **not** parsed as search params. 22184 22185 @example 22186 ``` 22187 await got('https://example.com/?query=a b'); //=> https://example.com/?query=a%20b 22188 await got('https://example.com/', {searchParams: {query: 'a b'}}); //=> https://example.com/?query=a+b 22189 22190 // The query string is overridden by `searchParams` 22191 await got('https://example.com/?query=a b', {searchParams: {query: 'a b'}}); //=> https://example.com/?query=a+b 22192 ``` 22193 */ 22194 get url() { 22195 return this._internals.url; 22196 } 22197 set url(value) { 22198 assert.any([dist.string, dist.urlInstance, dist.undefined], value); 22199 if (value === undefined) { 22200 this._internals.url = undefined; 22201 return; 22202 } 22203 if (dist.string(value) && value.startsWith('/')) { 22204 throw new Error('`url` must not start with a slash'); 22205 } 22206 const urlString = `${this.prefixUrl}${value.toString()}`; 22207 const url = new URL(urlString); 22208 this._internals.url = url; 22209 if (url.protocol === 'unix:') { 22210 url.href = `http://unix${url.pathname}${url.search}`; 22211 } 22212 if (url.protocol !== 'http:' && url.protocol !== 'https:') { 22213 const error = new Error(`Unsupported protocol: ${url.protocol}`); 22214 error.code = 'ERR_UNSUPPORTED_PROTOCOL'; 22215 throw error; 22216 } 22217 if (this._internals.username) { 22218 url.username = this._internals.username; 22219 this._internals.username = ''; 22220 } 22221 if (this._internals.password) { 22222 url.password = this._internals.password; 22223 this._internals.password = ''; 22224 } 22225 if (this._internals.searchParams) { 22226 url.search = this._internals.searchParams.toString(); 22227 this._internals.searchParams = undefined; 22228 } 22229 if (url.hostname === 'unix') { 22230 if (!this._internals.enableUnixSockets) { 22231 throw new Error('Using UNIX domain sockets but option `enableUnixSockets` is not enabled'); 22232 } 22233 const matches = /(?<socketPath>.+?):(?<path>.+)/.exec(`${url.pathname}${url.search}`); 22234 if (matches?.groups) { 22235 const { socketPath, path } = matches.groups; 22236 this._unixOptions = { 22237 socketPath, 22238 path, 22239 host: '', 22240 }; 22241 } 22242 else { 22243 this._unixOptions = undefined; 22244 } 22245 return; 22246 } 22247 this._unixOptions = undefined; 22248 } 22249 /** 22250 Cookie support. You don't have to care about parsing or how to store them. 22251 22252 __Note__: If you provide this option, `options.headers.cookie` will be overridden. 22253 */ 22254 get cookieJar() { 22255 return this._internals.cookieJar; 22256 } 22257 set cookieJar(value) { 22258 assert.any([dist.object, dist.undefined], value); 22259 if (value === undefined) { 22260 this._internals.cookieJar = undefined; 22261 return; 22262 } 22263 let { setCookie, getCookieString } = value; 22264 assert.function_(setCookie); 22265 assert.function_(getCookieString); 22266 /* istanbul ignore next: Horrible `tough-cookie` v3 check */ 22267 if (setCookie.length === 4 && getCookieString.length === 0) { 22268 setCookie = (0,external_node_util_namespaceObject.promisify)(setCookie.bind(value)); 22269 getCookieString = (0,external_node_util_namespaceObject.promisify)(getCookieString.bind(value)); 22270 this._internals.cookieJar = { 22271 setCookie, 22272 getCookieString: getCookieString, 22273 }; 22274 } 22275 else { 22276 this._internals.cookieJar = value; 22277 } 22278 } 22279 /** 22280 You can abort the `request` using [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController). 22281 22282 @example 22283 ``` 22284 import got from 'got'; 22285 22286 const abortController = new AbortController(); 22287 22288 const request = got('https://httpbin.org/anything', { 22289 signal: abortController.signal 22290 }); 22291 22292 setTimeout(() => { 22293 abortController.abort(); 22294 }, 100); 22295 ``` 22296 */ 22297 get signal() { 22298 return this._internals.signal; 22299 } 22300 set signal(value) { 22301 assert.object(value); 22302 this._internals.signal = value; 22303 } 22304 /** 22305 Ignore invalid cookies instead of throwing an error. 22306 Only useful when the `cookieJar` option has been set. Not recommended. 22307 22308 @default false 22309 */ 22310 get ignoreInvalidCookies() { 22311 return this._internals.ignoreInvalidCookies; 22312 } 22313 set ignoreInvalidCookies(value) { 22314 assert.boolean(value); 22315 this._internals.ignoreInvalidCookies = value; 22316 } 22317 /** 22318 Query string that will be added to the request URL. 22319 This will override the query string in `url`. 22320 22321 If you need to pass in an array, you can do it using a `URLSearchParams` instance. 22322 22323 @example 22324 ``` 22325 import got from 'got'; 22326 22327 const searchParams = new URLSearchParams([['key', 'a'], ['key', 'b']]); 22328 22329 await got('https://example.com', {searchParams}); 22330 22331 console.log(searchParams.toString()); 22332 //=> 'key=a&key=b' 22333 ``` 22334 */ 22335 get searchParams() { 22336 if (this._internals.url) { 22337 return this._internals.url.searchParams; 22338 } 22339 if (this._internals.searchParams === undefined) { 22340 this._internals.searchParams = new URLSearchParams(); 22341 } 22342 return this._internals.searchParams; 22343 } 22344 set searchParams(value) { 22345 assert.any([dist.string, dist.object, dist.undefined], value); 22346 const url = this._internals.url; 22347 if (value === undefined) { 22348 this._internals.searchParams = undefined; 22349 if (url) { 22350 url.search = ''; 22351 } 22352 return; 22353 } 22354 const searchParameters = this.searchParams; 22355 let updated; 22356 if (dist.string(value)) { 22357 updated = new URLSearchParams(value); 22358 } 22359 else if (value instanceof URLSearchParams) { 22360 updated = value; 22361 } 22362 else { 22363 validateSearchParameters(value); 22364 updated = new URLSearchParams(); 22365 // eslint-disable-next-line guard-for-in 22366 for (const key in value) { 22367 const entry = value[key]; 22368 if (entry === null) { 22369 updated.append(key, ''); 22370 } 22371 else if (entry === undefined) { 22372 searchParameters.delete(key); 22373 } 22374 else { 22375 updated.append(key, entry); 22376 } 22377 } 22378 } 22379 if (this._merging) { 22380 // These keys will be replaced 22381 for (const key of updated.keys()) { 22382 searchParameters.delete(key); 22383 } 22384 for (const [key, value] of updated) { 22385 searchParameters.append(key, value); 22386 } 22387 } 22388 else if (url) { 22389 url.search = searchParameters.toString(); 22390 } 22391 else { 22392 this._internals.searchParams = searchParameters; 22393 } 22394 } 22395 get searchParameters() { 22396 throw new Error('The `searchParameters` option does not exist. Use `searchParams` instead.'); 22397 } 22398 set searchParameters(_value) { 22399 throw new Error('The `searchParameters` option does not exist. Use `searchParams` instead.'); 22400 } 22401 get dnsLookup() { 22402 return this._internals.dnsLookup; 22403 } 22404 set dnsLookup(value) { 22405 assert.any([dist.function_, dist.undefined], value); 22406 this._internals.dnsLookup = value; 22407 } 22408 /** 22409 An instance of [`CacheableLookup`](https://github.com/szmarczak/cacheable-lookup) used for making DNS lookups. 22410 Useful when making lots of requests to different *public* hostnames. 22411 22412 `CacheableLookup` uses `dns.resolver4(..)` and `dns.resolver6(...)` under the hood and fall backs to `dns.lookup(...)` when the first two fail, which may lead to additional delay. 22413 22414 __Note__: This should stay disabled when making requests to internal hostnames such as `localhost`, `database.local` etc. 22415 22416 @default false 22417 */ 22418 get dnsCache() { 22419 return this._internals.dnsCache; 22420 } 22421 set dnsCache(value) { 22422 assert.any([dist.object, dist.boolean, dist.undefined], value); 22423 if (value === true) { 22424 this._internals.dnsCache = getGlobalDnsCache(); 22425 } 22426 else if (value === false) { 22427 this._internals.dnsCache = undefined; 22428 } 22429 else { 22430 this._internals.dnsCache = value; 22431 } 22432 } 22433 /** 22434 User data. `context` is shallow merged and enumerable. If it contains non-enumerable properties they will NOT be merged. 22435 22436 @example 22437 ``` 22438 import got from 'got'; 22439 22440 const instance = got.extend({ 22441 hooks: { 22442 beforeRequest: [ 22443 options => { 22444 if (!options.context || !options.context.token) { 22445 throw new Error('Token required'); 22446 } 22447 22448 options.headers.token = options.context.token; 22449 } 22450 ] 22451 } 22452 }); 22453 22454 const context = { 22455 token: 'secret' 22456 }; 22457 22458 const response = await instance('https://httpbin.org/headers', {context}); 22459 22460 // Let's see the headers 22461 console.log(response.body); 22462 ``` 22463 */ 22464 get context() { 22465 return this._internals.context; 22466 } 22467 set context(value) { 22468 assert.object(value); 22469 if (this._merging) { 22470 Object.assign(this._internals.context, value); 22471 } 22472 else { 22473 this._internals.context = { ...value }; 22474 } 22475 } 22476 /** 22477 Hooks allow modifications during the request lifecycle. 22478 Hook functions may be async and are run serially. 22479 */ 22480 get hooks() { 22481 return this._internals.hooks; 22482 } 22483 set hooks(value) { 22484 assert.object(value); 22485 // eslint-disable-next-line guard-for-in 22486 for (const knownHookEvent in value) { 22487 if (!(knownHookEvent in this._internals.hooks)) { 22488 throw new Error(`Unexpected hook event: ${knownHookEvent}`); 22489 } 22490 const typedKnownHookEvent = knownHookEvent; 22491 const hooks = value[typedKnownHookEvent]; 22492 assert.any([dist.array, dist.undefined], hooks); 22493 if (hooks) { 22494 for (const hook of hooks) { 22495 assert.function_(hook); 22496 } 22497 } 22498 if (this._merging) { 22499 if (hooks) { 22500 // @ts-expect-error FIXME 22501 this._internals.hooks[typedKnownHookEvent].push(...hooks); 22502 } 22503 } 22504 else { 22505 if (!hooks) { 22506 throw new Error(`Missing hook event: ${knownHookEvent}`); 22507 } 22508 // @ts-expect-error FIXME 22509 this._internals.hooks[knownHookEvent] = [...hooks]; 22510 } 22511 } 22512 } 22513 /** 22514 Defines if redirect responses should be followed automatically. 22515 22516 Note that if a `303` is sent by the server in response to any request type (`POST`, `DELETE`, etc.), Got will automatically request the resource pointed to in the location header via `GET`. 22517 This is in accordance with [the spec](https://tools.ietf.org/html/rfc7231#section-6.4.4). You can optionally turn on this behavior also for other redirect codes - see `methodRewriting`. 22518 22519 @default true 22520 */ 22521 get followRedirect() { 22522 return this._internals.followRedirect; 22523 } 22524 set followRedirect(value) { 22525 assert.boolean(value); 22526 this._internals.followRedirect = value; 22527 } 22528 get followRedirects() { 22529 throw new TypeError('The `followRedirects` option does not exist. Use `followRedirect` instead.'); 22530 } 22531 set followRedirects(_value) { 22532 throw new TypeError('The `followRedirects` option does not exist. Use `followRedirect` instead.'); 22533 } 22534 /** 22535 If exceeded, the request will be aborted and a `MaxRedirectsError` will be thrown. 22536 22537 @default 10 22538 */ 22539 get maxRedirects() { 22540 return this._internals.maxRedirects; 22541 } 22542 set maxRedirects(value) { 22543 assert.number(value); 22544 this._internals.maxRedirects = value; 22545 } 22546 /** 22547 A cache adapter instance for storing cached response data. 22548 22549 @default false 22550 */ 22551 get cache() { 22552 return this._internals.cache; 22553 } 22554 set cache(value) { 22555 assert.any([dist.object, dist.string, dist.boolean, dist.undefined], value); 22556 if (value === true) { 22557 this._internals.cache = globalCache; 22558 } 22559 else if (value === false) { 22560 this._internals.cache = undefined; 22561 } 22562 else { 22563 this._internals.cache = value; 22564 } 22565 } 22566 /** 22567 Determines if a `got.HTTPError` is thrown for unsuccessful responses. 22568 22569 If this is disabled, requests that encounter an error status code will be resolved with the `response` instead of throwing. 22570 This may be useful if you are checking for resource availability and are expecting error responses. 22571 22572 @default true 22573 */ 22574 get throwHttpErrors() { 22575 return this._internals.throwHttpErrors; 22576 } 22577 set throwHttpErrors(value) { 22578 assert.boolean(value); 22579 this._internals.throwHttpErrors = value; 22580 } 22581 get username() { 22582 const url = this._internals.url; 22583 const value = url ? url.username : this._internals.username; 22584 return decodeURIComponent(value); 22585 } 22586 set username(value) { 22587 assert.string(value); 22588 const url = this._internals.url; 22589 const fixedValue = encodeURIComponent(value); 22590 if (url) { 22591 url.username = fixedValue; 22592 } 22593 else { 22594 this._internals.username = fixedValue; 22595 } 22596 } 22597 get password() { 22598 const url = this._internals.url; 22599 const value = url ? url.password : this._internals.password; 22600 return decodeURIComponent(value); 22601 } 22602 set password(value) { 22603 assert.string(value); 22604 const url = this._internals.url; 22605 const fixedValue = encodeURIComponent(value); 22606 if (url) { 22607 url.password = fixedValue; 22608 } 22609 else { 22610 this._internals.password = fixedValue; 22611 } 22612 } 22613 /** 22614 If set to `true`, Got will additionally accept HTTP2 requests. 22615 22616 It will choose either HTTP/1.1 or HTTP/2 depending on the ALPN protocol. 22617 22618 __Note__: This option requires Node.js 15.10.0 or newer as HTTP/2 support on older Node.js versions is very buggy. 22619 22620 __Note__: Overriding `options.request` will disable HTTP2 support. 22621 22622 @default false 22623 22624 @example 22625 ``` 22626 import got from 'got'; 22627 22628 const {headers} = await got('https://nghttp2.org/httpbin/anything', {http2: true}); 22629 22630 console.log(headers.via); 22631 //=> '2 nghttpx' 22632 ``` 22633 */ 22634 get http2() { 22635 return this._internals.http2; 22636 } 22637 set http2(value) { 22638 assert.boolean(value); 22639 this._internals.http2 = value; 22640 } 22641 /** 22642 Set this to `true` to allow sending body for the `GET` method. 22643 However, the [HTTP/2 specification](https://tools.ietf.org/html/rfc7540#section-8.1.3) says that `An HTTP GET request includes request header fields and no payload body`, therefore when using the HTTP/2 protocol this option will have no effect. 22644 This option is only meant to interact with non-compliant servers when you have no other choice. 22645 22646 __Note__: The [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.3.1) doesn't specify any particular behavior for the GET method having a payload, therefore __it's considered an [anti-pattern](https://en.wikipedia.org/wiki/Anti-pattern)__. 22647 22648 @default false 22649 */ 22650 get allowGetBody() { 22651 return this._internals.allowGetBody; 22652 } 22653 set allowGetBody(value) { 22654 assert.boolean(value); 22655 this._internals.allowGetBody = value; 22656 } 22657 /** 22658 Request headers. 22659 22660 Existing headers will be overwritten. Headers set to `undefined` will be omitted. 22661 22662 @default {} 22663 */ 22664 get headers() { 22665 return this._internals.headers; 22666 } 22667 set headers(value) { 22668 assert.plainObject(value); 22669 if (this._merging) { 22670 Object.assign(this._internals.headers, lowercaseKeys(value)); 22671 } 22672 else { 22673 this._internals.headers = lowercaseKeys(value); 22674 } 22675 } 22676 /** 22677 Specifies if the HTTP request method should be [rewritten as `GET`](https://tools.ietf.org/html/rfc7231#section-6.4) on redirects. 22678 22679 As the [specification](https://tools.ietf.org/html/rfc7231#section-6.4) prefers to rewrite the HTTP method only on `303` responses, this is Got's default behavior. 22680 Setting `methodRewriting` to `true` will also rewrite `301` and `302` responses, as allowed by the spec. This is the behavior followed by `curl` and browsers. 22681 22682 __Note__: Got never performs method rewriting on `307` and `308` responses, as this is [explicitly prohibited by the specification](https://www.rfc-editor.org/rfc/rfc7231#section-6.4.7). 22683 22684 @default false 22685 */ 22686 get methodRewriting() { 22687 return this._internals.methodRewriting; 22688 } 22689 set methodRewriting(value) { 22690 assert.boolean(value); 22691 this._internals.methodRewriting = value; 22692 } 22693 /** 22694 Indicates which DNS record family to use. 22695 22696 Values: 22697 - `undefined`: IPv4 (if present) or IPv6 22698 - `4`: Only IPv4 22699 - `6`: Only IPv6 22700 22701 @default undefined 22702 */ 22703 get dnsLookupIpVersion() { 22704 return this._internals.dnsLookupIpVersion; 22705 } 22706 set dnsLookupIpVersion(value) { 22707 if (value !== undefined && value !== 4 && value !== 6) { 22708 throw new TypeError(`Invalid DNS lookup IP version: ${value}`); 22709 } 22710 this._internals.dnsLookupIpVersion = value; 22711 } 22712 /** 22713 A function used to parse JSON responses. 22714 22715 @example 22716 ``` 22717 import got from 'got'; 22718 import Bourne from '@hapi/bourne'; 22719 22720 const parsed = await got('https://example.com', { 22721 parseJson: text => Bourne.parse(text) 22722 }).json(); 22723 22724 console.log(parsed); 22725 ``` 22726 */ 22727 get parseJson() { 22728 return this._internals.parseJson; 22729 } 22730 set parseJson(value) { 22731 assert.function_(value); 22732 this._internals.parseJson = value; 22733 } 22734 /** 22735 A function used to stringify the body of JSON requests. 22736 22737 @example 22738 ``` 22739 import got from 'got'; 22740 22741 await got.post('https://example.com', { 22742 stringifyJson: object => JSON.stringify(object, (key, value) => { 22743 if (key.startsWith('_')) { 22744 return; 22745 } 22746 22747 return value; 22748 }), 22749 json: { 22750 some: 'payload', 22751 _ignoreMe: 1234 22752 } 22753 }); 22754 ``` 22755 22756 @example 22757 ``` 22758 import got from 'got'; 22759 22760 await got.post('https://example.com', { 22761 stringifyJson: object => JSON.stringify(object, (key, value) => { 22762 if (typeof value === 'number') { 22763 return value.toString(); 22764 } 22765 22766 return value; 22767 }), 22768 json: { 22769 some: 'payload', 22770 number: 1 22771 } 22772 }); 22773 ``` 22774 */ 22775 get stringifyJson() { 22776 return this._internals.stringifyJson; 22777 } 22778 set stringifyJson(value) { 22779 assert.function_(value); 22780 this._internals.stringifyJson = value; 22781 } 22782 /** 22783 An object representing `limit`, `calculateDelay`, `methods`, `statusCodes`, `maxRetryAfter` and `errorCodes` fields for maximum retry count, retry handler, allowed methods, allowed status codes, maximum [`Retry-After`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After) time and allowed error codes. 22784 22785 Delays between retries counts with function `1000 * Math.pow(2, retry) + Math.random() * 100`, where `retry` is attempt number (starts from 1). 22786 22787 The `calculateDelay` property is a `function` that receives an object with `attemptCount`, `retryOptions`, `error` and `computedValue` properties for current retry count, the retry options, error and default computed value. 22788 The function must return a delay in milliseconds (or a Promise resolving with it) (`0` return value cancels retry). 22789 22790 By default, it retries *only* on the specified methods, status codes, and on these network errors: 22791 22792 - `ETIMEDOUT`: One of the [timeout](#timeout) limits were reached. 22793 - `ECONNRESET`: Connection was forcibly closed by a peer. 22794 - `EADDRINUSE`: Could not bind to any free port. 22795 - `ECONNREFUSED`: Connection was refused by the server. 22796 - `EPIPE`: The remote side of the stream being written has been closed. 22797 - `ENOTFOUND`: Couldn't resolve the hostname to an IP address. 22798 - `ENETUNREACH`: No internet connection. 22799 - `EAI_AGAIN`: DNS lookup timed out. 22800 22801 __Note__: If `maxRetryAfter` is set to `undefined`, it will use `options.timeout`. 22802 __Note__: If [`Retry-After`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After) header is greater than `maxRetryAfter`, it will cancel the request. 22803 */ 22804 get retry() { 22805 return this._internals.retry; 22806 } 22807 set retry(value) { 22808 assert.plainObject(value); 22809 assert.any([dist.function_, dist.undefined], value.calculateDelay); 22810 assert.any([dist.number, dist.undefined], value.maxRetryAfter); 22811 assert.any([dist.number, dist.undefined], value.limit); 22812 assert.any([dist.array, dist.undefined], value.methods); 22813 assert.any([dist.array, dist.undefined], value.statusCodes); 22814 assert.any([dist.array, dist.undefined], value.errorCodes); 22815 assert.any([dist.number, dist.undefined], value.noise); 22816 if (value.noise && Math.abs(value.noise) > 100) { 22817 throw new Error(`The maximum acceptable retry noise is +/- 100ms, got ${value.noise}`); 22818 } 22819 for (const key in value) { 22820 if (!(key in this._internals.retry)) { 22821 throw new Error(`Unexpected retry option: ${key}`); 22822 } 22823 } 22824 if (this._merging) { 22825 Object.assign(this._internals.retry, value); 22826 } 22827 else { 22828 this._internals.retry = { ...value }; 22829 } 22830 const { retry } = this._internals; 22831 retry.methods = [...new Set(retry.methods.map(method => method.toUpperCase()))]; 22832 retry.statusCodes = [...new Set(retry.statusCodes)]; 22833 retry.errorCodes = [...new Set(retry.errorCodes)]; 22834 } 22835 /** 22836 From `http.RequestOptions`. 22837 22838 The IP address used to send the request from. 22839 */ 22840 get localAddress() { 22841 return this._internals.localAddress; 22842 } 22843 set localAddress(value) { 22844 assert.any([dist.string, dist.undefined], value); 22845 this._internals.localAddress = value; 22846 } 22847 /** 22848 The HTTP method used to make the request. 22849 22850 @default 'GET' 22851 */ 22852 get method() { 22853 return this._internals.method; 22854 } 22855 set method(value) { 22856 assert.string(value); 22857 this._internals.method = value.toUpperCase(); 22858 } 22859 get createConnection() { 22860 return this._internals.createConnection; 22861 } 22862 set createConnection(value) { 22863 assert.any([dist.function_, dist.undefined], value); 22864 this._internals.createConnection = value; 22865 } 22866 /** 22867 From `http-cache-semantics` 22868 22869 @default {} 22870 */ 22871 get cacheOptions() { 22872 return this._internals.cacheOptions; 22873 } 22874 set cacheOptions(value) { 22875 assert.plainObject(value); 22876 assert.any([dist.boolean, dist.undefined], value.shared); 22877 assert.any([dist.number, dist.undefined], value.cacheHeuristic); 22878 assert.any([dist.number, dist.undefined], value.immutableMinTimeToLive); 22879 assert.any([dist.boolean, dist.undefined], value.ignoreCargoCult); 22880 for (const key in value) { 22881 if (!(key in this._internals.cacheOptions)) { 22882 throw new Error(`Cache option \`${key}\` does not exist`); 22883 } 22884 } 22885 if (this._merging) { 22886 Object.assign(this._internals.cacheOptions, value); 22887 } 22888 else { 22889 this._internals.cacheOptions = { ...value }; 22890 } 22891 } 22892 /** 22893 Options for the advanced HTTPS API. 22894 */ 22895 get https() { 22896 return this._internals.https; 22897 } 22898 set https(value) { 22899 assert.plainObject(value); 22900 assert.any([dist.boolean, dist.undefined], value.rejectUnauthorized); 22901 assert.any([dist.function_, dist.undefined], value.checkServerIdentity); 22902 assert.any([dist.string, dist.object, dist.array, dist.undefined], value.certificateAuthority); 22903 assert.any([dist.string, dist.object, dist.array, dist.undefined], value.key); 22904 assert.any([dist.string, dist.object, dist.array, dist.undefined], value.certificate); 22905 assert.any([dist.string, dist.undefined], value.passphrase); 22906 assert.any([dist.string, dist.buffer, dist.array, dist.undefined], value.pfx); 22907 assert.any([dist.array, dist.undefined], value.alpnProtocols); 22908 assert.any([dist.string, dist.undefined], value.ciphers); 22909 assert.any([dist.string, dist.buffer, dist.undefined], value.dhparam); 22910 assert.any([dist.string, dist.undefined], value.signatureAlgorithms); 22911 assert.any([dist.string, dist.undefined], value.minVersion); 22912 assert.any([dist.string, dist.undefined], value.maxVersion); 22913 assert.any([dist.boolean, dist.undefined], value.honorCipherOrder); 22914 assert.any([dist.number, dist.undefined], value.tlsSessionLifetime); 22915 assert.any([dist.string, dist.undefined], value.ecdhCurve); 22916 assert.any([dist.string, dist.buffer, dist.array, dist.undefined], value.certificateRevocationLists); 22917 for (const key in value) { 22918 if (!(key in this._internals.https)) { 22919 throw new Error(`HTTPS option \`${key}\` does not exist`); 22920 } 22921 } 22922 if (this._merging) { 22923 Object.assign(this._internals.https, value); 22924 } 22925 else { 22926 this._internals.https = { ...value }; 22927 } 22928 } 22929 /** 22930 [Encoding](https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings) to be used on `setEncoding` of the response data. 22931 22932 To get a [`Buffer`](https://nodejs.org/api/buffer.html), you need to set `responseType` to `buffer` instead. 22933 Don't set this option to `null`. 22934 22935 __Note__: This doesn't affect streams! Instead, you need to do `got.stream(...).setEncoding(encoding)`. 22936 22937 @default 'utf-8' 22938 */ 22939 get encoding() { 22940 return this._internals.encoding; 22941 } 22942 set encoding(value) { 22943 if (value === null) { 22944 throw new TypeError('To get a Buffer, set `options.responseType` to `buffer` instead'); 22945 } 22946 assert.any([dist.string, dist.undefined], value); 22947 this._internals.encoding = value; 22948 } 22949 /** 22950 When set to `true` the promise will return the Response body instead of the Response object. 22951 22952 @default false 22953 */ 22954 get resolveBodyOnly() { 22955 return this._internals.resolveBodyOnly; 22956 } 22957 set resolveBodyOnly(value) { 22958 assert.boolean(value); 22959 this._internals.resolveBodyOnly = value; 22960 } 22961 /** 22962 Returns a `Stream` instead of a `Promise`. 22963 This is equivalent to calling `got.stream(url, options?)`. 22964 22965 @default false 22966 */ 22967 get isStream() { 22968 return this._internals.isStream; 22969 } 22970 set isStream(value) { 22971 assert.boolean(value); 22972 this._internals.isStream = value; 22973 } 22974 /** 22975 The parsing method. 22976 22977 The promise also has `.text()`, `.json()` and `.buffer()` methods which return another Got promise for the parsed body. 22978 22979 It's like setting the options to `{responseType: 'json', resolveBodyOnly: true}` but without affecting the main Got promise. 22980 22981 __Note__: When using streams, this option is ignored. 22982 22983 @example 22984 ``` 22985 const responsePromise = got(url); 22986 const bufferPromise = responsePromise.buffer(); 22987 const jsonPromise = responsePromise.json(); 22988 22989 const [response, buffer, json] = Promise.all([responsePromise, bufferPromise, jsonPromise]); 22990 // `response` is an instance of Got Response 22991 // `buffer` is an instance of Buffer 22992 // `json` is an object 22993 ``` 22994 22995 @example 22996 ``` 22997 // This 22998 const body = await got(url).json(); 22999 23000 // is semantically the same as this 23001 const body = await got(url, {responseType: 'json', resolveBodyOnly: true}); 23002 ``` 23003 */ 23004 get responseType() { 23005 return this._internals.responseType; 23006 } 23007 set responseType(value) { 23008 if (value === undefined) { 23009 this._internals.responseType = 'text'; 23010 return; 23011 } 23012 if (value !== 'text' && value !== 'buffer' && value !== 'json') { 23013 throw new Error(`Invalid \`responseType\` option: ${value}`); 23014 } 23015 this._internals.responseType = value; 23016 } 23017 get pagination() { 23018 return this._internals.pagination; 23019 } 23020 set pagination(value) { 23021 assert.object(value); 23022 if (this._merging) { 23023 Object.assign(this._internals.pagination, value); 23024 } 23025 else { 23026 this._internals.pagination = value; 23027 } 23028 } 23029 get auth() { 23030 throw new Error('Parameter `auth` is deprecated. Use `username` / `password` instead.'); 23031 } 23032 set auth(_value) { 23033 throw new Error('Parameter `auth` is deprecated. Use `username` / `password` instead.'); 23034 } 23035 get setHost() { 23036 return this._internals.setHost; 23037 } 23038 set setHost(value) { 23039 assert.boolean(value); 23040 this._internals.setHost = value; 23041 } 23042 get maxHeaderSize() { 23043 return this._internals.maxHeaderSize; 23044 } 23045 set maxHeaderSize(value) { 23046 assert.any([dist.number, dist.undefined], value); 23047 this._internals.maxHeaderSize = value; 23048 } 23049 get enableUnixSockets() { 23050 return this._internals.enableUnixSockets; 23051 } 23052 set enableUnixSockets(value) { 23053 assert.boolean(value); 23054 this._internals.enableUnixSockets = value; 23055 } 23056 // eslint-disable-next-line @typescript-eslint/naming-convention 23057 toJSON() { 23058 return { ...this._internals }; 23059 } 23060 [Symbol.for('nodejs.util.inspect.custom')](_depth, options) { 23061 return (0,external_node_util_namespaceObject.inspect)(this._internals, options); 23062 } 23063 createNativeRequestOptions() { 23064 const internals = this._internals; 23065 const url = internals.url; 23066 let agent; 23067 if (url.protocol === 'https:') { 23068 agent = internals.http2 ? internals.agent : internals.agent.https; 23069 } 23070 else { 23071 agent = internals.agent.http; 23072 } 23073 const { https } = internals; 23074 let { pfx } = https; 23075 if (dist.array(pfx) && dist.plainObject(pfx[0])) { 23076 pfx = pfx.map(object => ({ 23077 buf: object.buffer, 23078 passphrase: object.passphrase, 23079 })); 23080 } 23081 return { 23082 ...internals.cacheOptions, 23083 ...this._unixOptions, 23084 // HTTPS options 23085 // eslint-disable-next-line @typescript-eslint/naming-convention 23086 ALPNProtocols: https.alpnProtocols, 23087 ca: https.certificateAuthority, 23088 cert: https.certificate, 23089 key: https.key, 23090 passphrase: https.passphrase, 23091 pfx: https.pfx, 23092 rejectUnauthorized: https.rejectUnauthorized, 23093 checkServerIdentity: https.checkServerIdentity ?? external_node_tls_namespaceObject.checkServerIdentity, 23094 ciphers: https.ciphers, 23095 honorCipherOrder: https.honorCipherOrder, 23096 minVersion: https.minVersion, 23097 maxVersion: https.maxVersion, 23098 sigalgs: https.signatureAlgorithms, 23099 sessionTimeout: https.tlsSessionLifetime, 23100 dhparam: https.dhparam, 23101 ecdhCurve: https.ecdhCurve, 23102 crl: https.certificateRevocationLists, 23103 // HTTP options 23104 lookup: internals.dnsLookup ?? internals.dnsCache?.lookup, 23105 family: internals.dnsLookupIpVersion, 23106 agent, 23107 setHost: internals.setHost, 23108 method: internals.method, 23109 maxHeaderSize: internals.maxHeaderSize, 23110 localAddress: internals.localAddress, 23111 headers: internals.headers, 23112 createConnection: internals.createConnection, 23113 timeout: internals.http2 ? getHttp2TimeoutOption(internals) : undefined, 23114 // HTTP/2 options 23115 h2session: internals.h2session, 23116 }; 23117 } 23118 getRequestFunction() { 23119 const url = this._internals.url; 23120 const { request } = this._internals; 23121 if (!request && url) { 23122 return this.getFallbackRequestFunction(); 23123 } 23124 return request; 23125 } 23126 getFallbackRequestFunction() { 23127 const url = this._internals.url; 23128 if (!url) { 23129 return; 23130 } 23131 if (url.protocol === 'https:') { 23132 if (this._internals.http2) { 23133 if (major < 15 || (major === 15 && minor < 10)) { 23134 const error = new Error('To use the `http2` option, install Node.js 15.10.0 or above'); 23135 error.code = 'EUNSUPPORTED'; 23136 throw error; 23137 } 23138 return http2_wrapper_source.auto; 23139 } 23140 return external_node_https_namespaceObject.request; 23141 } 23142 return external_node_http_namespaceObject.request; 23143 } 23144 freeze() { 23145 const options = this._internals; 23146 Object.freeze(options); 23147 Object.freeze(options.hooks); 23148 Object.freeze(options.hooks.afterResponse); 23149 Object.freeze(options.hooks.beforeError); 23150 Object.freeze(options.hooks.beforeRedirect); 23151 Object.freeze(options.hooks.beforeRequest); 23152 Object.freeze(options.hooks.beforeRetry); 23153 Object.freeze(options.hooks.init); 23154 Object.freeze(options.https); 23155 Object.freeze(options.cacheOptions); 23156 Object.freeze(options.agent); 23157 Object.freeze(options.headers); 23158 Object.freeze(options.timeout); 23159 Object.freeze(options.retry); 23160 Object.freeze(options.retry.errorCodes); 23161 Object.freeze(options.retry.methods); 23162 Object.freeze(options.retry.statusCodes); 23163 } 23164 } 23165 23166 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/response.js 23167 23168 const isResponseOk = (response) => { 23169 const { statusCode } = response; 23170 const limitStatusCode = response.request.options.followRedirect ? 299 : 399; 23171 return (statusCode >= 200 && statusCode <= limitStatusCode) || statusCode === 304; 23172 }; 23173 /** 23174 An error to be thrown when server response code is 2xx, and parsing body fails. 23175 Includes a `response` property. 23176 */ 23177 class ParseError extends RequestError { 23178 constructor(error, response) { 23179 const { options } = response.request; 23180 super(`${error.message} in "${options.url.toString()}"`, error, response.request); 23181 this.name = 'ParseError'; 23182 this.code = 'ERR_BODY_PARSE_FAILURE'; 23183 } 23184 } 23185 const parseBody = (response, responseType, parseJson, encoding) => { 23186 const { rawBody } = response; 23187 try { 23188 if (responseType === 'text') { 23189 return rawBody.toString(encoding); 23190 } 23191 if (responseType === 'json') { 23192 return rawBody.length === 0 ? '' : parseJson(rawBody.toString(encoding)); 23193 } 23194 if (responseType === 'buffer') { 23195 return rawBody; 23196 } 23197 } 23198 catch (error) { 23199 throw new ParseError(error, response); 23200 } 23201 throw new ParseError({ 23202 message: `Unknown body type '${responseType}'`, 23203 name: 'Error', 23204 }, response); 23205 }; 23206 23207 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/is-client-request.js 23208 function isClientRequest(clientRequest) { 23209 return clientRequest.writable && !clientRequest.writableEnded; 23210 } 23211 /* harmony default export */ const is_client_request = (isClientRequest); 23212 23213 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/is-unix-socket-url.js 23214 // eslint-disable-next-line @typescript-eslint/naming-convention 23215 function isUnixSocketURL(url) { 23216 return url.protocol === 'unix:' || url.hostname === 'unix'; 23217 } 23218 23219 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/index.js 23220 23221 23222 23223 23224 23225 23226 23227 23228 23229 23230 23231 23232 23233 23234 23235 23236 23237 23238 23239 23240 23241 23242 const { buffer: getStreamAsBuffer } = get_stream; 23243 const supportsBrotli = dist.string(external_node_process_namespaceObject.versions.brotli); 23244 const methodsWithoutBody = new Set(['GET', 'HEAD']); 23245 const cacheableStore = new WeakableMap(); 23246 const redirectCodes = new Set([300, 301, 302, 303, 304, 307, 308]); 23247 const proxiedRequestEvents = [ 23248 'socket', 23249 'connect', 23250 'continue', 23251 'information', 23252 'upgrade', 23253 ]; 23254 const core_noop = () => { }; 23255 class Request extends external_node_stream_namespaceObject.Duplex { 23256 constructor(url, options, defaults) { 23257 super({ 23258 // Don't destroy immediately, as the error may be emitted on unsuccessful retry 23259 autoDestroy: false, 23260 // It needs to be zero because we're just proxying the data to another stream 23261 highWaterMark: 0, 23262 }); 23263 // @ts-expect-error - Ignoring for now. 23264 Object.defineProperty(this, 'constructor', { 23265 enumerable: true, 23266 configurable: true, 23267 writable: true, 23268 value: void 0 23269 }); 23270 Object.defineProperty(this, "_noPipe", { 23271 enumerable: true, 23272 configurable: true, 23273 writable: true, 23274 value: void 0 23275 }); 23276 // @ts-expect-error https://github.com/microsoft/TypeScript/issues/9568 23277 Object.defineProperty(this, "options", { 23278 enumerable: true, 23279 configurable: true, 23280 writable: true, 23281 value: void 0 23282 }); 23283 Object.defineProperty(this, "response", { 23284 enumerable: true, 23285 configurable: true, 23286 writable: true, 23287 value: void 0 23288 }); 23289 Object.defineProperty(this, "requestUrl", { 23290 enumerable: true, 23291 configurable: true, 23292 writable: true, 23293 value: void 0 23294 }); 23295 Object.defineProperty(this, "redirectUrls", { 23296 enumerable: true, 23297 configurable: true, 23298 writable: true, 23299 value: void 0 23300 }); 23301 Object.defineProperty(this, "retryCount", { 23302 enumerable: true, 23303 configurable: true, 23304 writable: true, 23305 value: void 0 23306 }); 23307 Object.defineProperty(this, "_stopRetry", { 23308 enumerable: true, 23309 configurable: true, 23310 writable: true, 23311 value: void 0 23312 }); 23313 Object.defineProperty(this, "_downloadedSize", { 23314 enumerable: true, 23315 configurable: true, 23316 writable: true, 23317 value: void 0 23318 }); 23319 Object.defineProperty(this, "_uploadedSize", { 23320 enumerable: true, 23321 configurable: true, 23322 writable: true, 23323 value: void 0 23324 }); 23325 Object.defineProperty(this, "_stopReading", { 23326 enumerable: true, 23327 configurable: true, 23328 writable: true, 23329 value: void 0 23330 }); 23331 Object.defineProperty(this, "_pipedServerResponses", { 23332 enumerable: true, 23333 configurable: true, 23334 writable: true, 23335 value: void 0 23336 }); 23337 Object.defineProperty(this, "_request", { 23338 enumerable: true, 23339 configurable: true, 23340 writable: true, 23341 value: void 0 23342 }); 23343 Object.defineProperty(this, "_responseSize", { 23344 enumerable: true, 23345 configurable: true, 23346 writable: true, 23347 value: void 0 23348 }); 23349 Object.defineProperty(this, "_bodySize", { 23350 enumerable: true, 23351 configurable: true, 23352 writable: true, 23353 value: void 0 23354 }); 23355 Object.defineProperty(this, "_unproxyEvents", { 23356 enumerable: true, 23357 configurable: true, 23358 writable: true, 23359 value: void 0 23360 }); 23361 Object.defineProperty(this, "_isFromCache", { 23362 enumerable: true, 23363 configurable: true, 23364 writable: true, 23365 value: void 0 23366 }); 23367 Object.defineProperty(this, "_cannotHaveBody", { 23368 enumerable: true, 23369 configurable: true, 23370 writable: true, 23371 value: void 0 23372 }); 23373 Object.defineProperty(this, "_triggerRead", { 23374 enumerable: true, 23375 configurable: true, 23376 writable: true, 23377 value: void 0 23378 }); 23379 Object.defineProperty(this, "_cancelTimeouts", { 23380 enumerable: true, 23381 configurable: true, 23382 writable: true, 23383 value: void 0 23384 }); 23385 Object.defineProperty(this, "_removeListeners", { 23386 enumerable: true, 23387 configurable: true, 23388 writable: true, 23389 value: void 0 23390 }); 23391 Object.defineProperty(this, "_nativeResponse", { 23392 enumerable: true, 23393 configurable: true, 23394 writable: true, 23395 value: void 0 23396 }); 23397 Object.defineProperty(this, "_flushed", { 23398 enumerable: true, 23399 configurable: true, 23400 writable: true, 23401 value: void 0 23402 }); 23403 Object.defineProperty(this, "_aborted", { 23404 enumerable: true, 23405 configurable: true, 23406 writable: true, 23407 value: void 0 23408 }); 23409 // We need this because `this._request` if `undefined` when using cache 23410 Object.defineProperty(this, "_requestInitialized", { 23411 enumerable: true, 23412 configurable: true, 23413 writable: true, 23414 value: void 0 23415 }); 23416 this._downloadedSize = 0; 23417 this._uploadedSize = 0; 23418 this._stopReading = false; 23419 this._pipedServerResponses = new Set(); 23420 this._cannotHaveBody = false; 23421 this._unproxyEvents = core_noop; 23422 this._triggerRead = false; 23423 this._cancelTimeouts = core_noop; 23424 this._removeListeners = core_noop; 23425 this._jobs = []; 23426 this._flushed = false; 23427 this._requestInitialized = false; 23428 this._aborted = false; 23429 this.redirectUrls = []; 23430 this.retryCount = 0; 23431 this._stopRetry = core_noop; 23432 this.on('pipe', (source) => { 23433 if (source?.headers) { 23434 Object.assign(this.options.headers, source.headers); 23435 } 23436 }); 23437 this.on('newListener', event => { 23438 if (event === 'retry' && this.listenerCount('retry') > 0) { 23439 throw new Error('A retry listener has been attached already.'); 23440 } 23441 }); 23442 try { 23443 this.options = new Options(url, options, defaults); 23444 if (!this.options.url) { 23445 if (this.options.prefixUrl === '') { 23446 throw new TypeError('Missing `url` property'); 23447 } 23448 this.options.url = ''; 23449 } 23450 this.requestUrl = this.options.url; 23451 } 23452 catch (error) { 23453 const { options } = error; 23454 if (options) { 23455 this.options = options; 23456 } 23457 this.flush = async () => { 23458 this.flush = async () => { }; 23459 this.destroy(error); 23460 }; 23461 return; 23462 } 23463 // Important! If you replace `body` in a handler with another stream, make sure it's readable first. 23464 // The below is run only once. 23465 const { body } = this.options; 23466 if (dist.nodeStream(body)) { 23467 body.once('error', error => { 23468 if (this._flushed) { 23469 this._beforeError(new UploadError(error, this)); 23470 } 23471 else { 23472 this.flush = async () => { 23473 this.flush = async () => { }; 23474 this._beforeError(new UploadError(error, this)); 23475 }; 23476 } 23477 }); 23478 } 23479 if (this.options.signal) { 23480 const abort = () => { 23481 this.destroy(new AbortError(this)); 23482 }; 23483 if (this.options.signal.aborted) { 23484 abort(); 23485 } 23486 else { 23487 this.options.signal.addEventListener('abort', abort); 23488 this._removeListeners = () => { 23489 this.options.signal?.removeEventListener('abort', abort); 23490 }; 23491 } 23492 } 23493 } 23494 async flush() { 23495 if (this._flushed) { 23496 return; 23497 } 23498 this._flushed = true; 23499 try { 23500 await this._finalizeBody(); 23501 if (this.destroyed) { 23502 return; 23503 } 23504 await this._makeRequest(); 23505 if (this.destroyed) { 23506 this._request?.destroy(); 23507 return; 23508 } 23509 // Queued writes etc. 23510 for (const job of this._jobs) { 23511 job(); 23512 } 23513 // Prevent memory leak 23514 this._jobs.length = 0; 23515 this._requestInitialized = true; 23516 } 23517 catch (error) { 23518 this._beforeError(error); 23519 } 23520 } 23521 _beforeError(error) { 23522 if (this._stopReading) { 23523 return; 23524 } 23525 const { response, options } = this; 23526 const attemptCount = this.retryCount + (error.name === 'RetryError' ? 0 : 1); 23527 this._stopReading = true; 23528 if (!(error instanceof RequestError)) { 23529 error = new RequestError(error.message, error, this); 23530 } 23531 const typedError = error; 23532 void (async () => { 23533 // Node.js parser is really weird. 23534 // It emits post-request Parse Errors on the same instance as previous request. WTF. 23535 // Therefore we need to check if it has been destroyed as well. 23536 // 23537 // Furthermore, Node.js 16 `response.destroy()` doesn't immediately destroy the socket, 23538 // but makes the response unreadable. So we additionally need to check `response.readable`. 23539 if (response?.readable && !response.rawBody && !this._request?.socket?.destroyed) { 23540 // @types/node has incorrect typings. `setEncoding` accepts `null` as well. 23541 response.setEncoding(this.readableEncoding); 23542 const success = await this._setRawBody(response); 23543 if (success) { 23544 response.body = response.rawBody.toString(); 23545 } 23546 } 23547 if (this.listenerCount('retry') !== 0) { 23548 let backoff; 23549 try { 23550 let retryAfter; 23551 if (response && 'retry-after' in response.headers) { 23552 retryAfter = Number(response.headers['retry-after']); 23553 if (Number.isNaN(retryAfter)) { 23554 retryAfter = Date.parse(response.headers['retry-after']) - Date.now(); 23555 if (retryAfter <= 0) { 23556 retryAfter = 1; 23557 } 23558 } 23559 else { 23560 retryAfter *= 1000; 23561 } 23562 } 23563 const retryOptions = options.retry; 23564 backoff = await retryOptions.calculateDelay({ 23565 attemptCount, 23566 retryOptions, 23567 error: typedError, 23568 retryAfter, 23569 computedValue: calculate_retry_delay({ 23570 attemptCount, 23571 retryOptions, 23572 error: typedError, 23573 retryAfter, 23574 computedValue: retryOptions.maxRetryAfter ?? options.timeout.request ?? Number.POSITIVE_INFINITY, 23575 }), 23576 }); 23577 } 23578 catch (error_) { 23579 void this._error(new RequestError(error_.message, error_, this)); 23580 return; 23581 } 23582 if (backoff) { 23583 await new Promise(resolve => { 23584 const timeout = setTimeout(resolve, backoff); 23585 this._stopRetry = () => { 23586 clearTimeout(timeout); 23587 resolve(); 23588 }; 23589 }); 23590 // Something forced us to abort the retry 23591 if (this.destroyed) { 23592 return; 23593 } 23594 try { 23595 for (const hook of this.options.hooks.beforeRetry) { 23596 // eslint-disable-next-line no-await-in-loop 23597 await hook(typedError, this.retryCount + 1); 23598 } 23599 } 23600 catch (error_) { 23601 void this._error(new RequestError(error_.message, error, this)); 23602 return; 23603 } 23604 // Something forced us to abort the retry 23605 if (this.destroyed) { 23606 return; 23607 } 23608 this.destroy(); 23609 this.emit('retry', this.retryCount + 1, error, (updatedOptions) => { 23610 const request = new Request(options.url, updatedOptions, options); 23611 request.retryCount = this.retryCount + 1; 23612 external_node_process_namespaceObject.nextTick(() => { 23613 void request.flush(); 23614 }); 23615 return request; 23616 }); 23617 return; 23618 } 23619 } 23620 void this._error(typedError); 23621 })(); 23622 } 23623 _read() { 23624 this._triggerRead = true; 23625 const { response } = this; 23626 if (response && !this._stopReading) { 23627 // We cannot put this in the `if` above 23628 // because `.read()` also triggers the `end` event 23629 if (response.readableLength) { 23630 this._triggerRead = false; 23631 } 23632 let data; 23633 while ((data = response.read()) !== null) { 23634 this._downloadedSize += data.length; // eslint-disable-line @typescript-eslint/restrict-plus-operands 23635 const progress = this.downloadProgress; 23636 if (progress.percent < 1) { 23637 this.emit('downloadProgress', progress); 23638 } 23639 this.push(data); 23640 } 23641 } 23642 } 23643 _write(chunk, encoding, callback) { 23644 const write = () => { 23645 this._writeRequest(chunk, encoding, callback); 23646 }; 23647 if (this._requestInitialized) { 23648 write(); 23649 } 23650 else { 23651 this._jobs.push(write); 23652 } 23653 } 23654 _final(callback) { 23655 const endRequest = () => { 23656 // We need to check if `this._request` is present, 23657 // because it isn't when we use cache. 23658 if (!this._request || this._request.destroyed) { 23659 callback(); 23660 return; 23661 } 23662 this._request.end((error) => { 23663 // The request has been destroyed before `_final` finished. 23664 // See https://github.com/nodejs/node/issues/39356 23665 if (this._request._writableState?.errored) { 23666 return; 23667 } 23668 if (!error) { 23669 this._bodySize = this._uploadedSize; 23670 this.emit('uploadProgress', this.uploadProgress); 23671 this._request.emit('upload-complete'); 23672 } 23673 callback(error); 23674 }); 23675 }; 23676 if (this._requestInitialized) { 23677 endRequest(); 23678 } 23679 else { 23680 this._jobs.push(endRequest); 23681 } 23682 } 23683 _destroy(error, callback) { 23684 this._stopReading = true; 23685 this.flush = async () => { }; 23686 // Prevent further retries 23687 this._stopRetry(); 23688 this._cancelTimeouts(); 23689 this._removeListeners(); 23690 if (this.options) { 23691 const { body } = this.options; 23692 if (dist.nodeStream(body)) { 23693 body.destroy(); 23694 } 23695 } 23696 if (this._request) { 23697 this._request.destroy(); 23698 } 23699 if (error !== null && !dist.undefined(error) && !(error instanceof RequestError)) { 23700 error = new RequestError(error.message, error, this); 23701 } 23702 callback(error); 23703 } 23704 pipe(destination, options) { 23705 if (destination instanceof external_node_http_namespaceObject.ServerResponse) { 23706 this._pipedServerResponses.add(destination); 23707 } 23708 return super.pipe(destination, options); 23709 } 23710 unpipe(destination) { 23711 if (destination instanceof external_node_http_namespaceObject.ServerResponse) { 23712 this._pipedServerResponses.delete(destination); 23713 } 23714 super.unpipe(destination); 23715 return this; 23716 } 23717 async _finalizeBody() { 23718 const { options } = this; 23719 const { headers } = options; 23720 const isForm = !dist.undefined(options.form); 23721 // eslint-disable-next-line @typescript-eslint/naming-convention 23722 const isJSON = !dist.undefined(options.json); 23723 const isBody = !dist.undefined(options.body); 23724 const cannotHaveBody = methodsWithoutBody.has(options.method) && !(options.method === 'GET' && options.allowGetBody); 23725 this._cannotHaveBody = cannotHaveBody; 23726 if (isForm || isJSON || isBody) { 23727 if (cannotHaveBody) { 23728 throw new TypeError(`The \`${options.method}\` method cannot be used with a body`); 23729 } 23730 // Serialize body 23731 const noContentType = !dist.string(headers['content-type']); 23732 if (isBody) { 23733 // Body is spec-compliant FormData 23734 if (isFormData(options.body)) { 23735 const encoder = new FormDataEncoder(options.body); 23736 if (noContentType) { 23737 headers['content-type'] = encoder.headers['Content-Type']; 23738 } 23739 if ('Content-Length' in encoder.headers) { 23740 headers['content-length'] = encoder.headers['Content-Length']; 23741 } 23742 options.body = encoder.encode(); 23743 } 23744 // Special case for https://github.com/form-data/form-data 23745 if (is_form_data_isFormData(options.body) && noContentType) { 23746 headers['content-type'] = `multipart/form-data; boundary=${options.body.getBoundary()}`; 23747 } 23748 } 23749 else if (isForm) { 23750 if (noContentType) { 23751 headers['content-type'] = 'application/x-www-form-urlencoded'; 23752 } 23753 const { form } = options; 23754 options.form = undefined; 23755 options.body = (new URLSearchParams(form)).toString(); 23756 } 23757 else { 23758 if (noContentType) { 23759 headers['content-type'] = 'application/json'; 23760 } 23761 const { json } = options; 23762 options.json = undefined; 23763 options.body = options.stringifyJson(json); 23764 } 23765 const uploadBodySize = await getBodySize(options.body, options.headers); 23766 // See https://tools.ietf.org/html/rfc7230#section-3.3.2 23767 // A user agent SHOULD send a Content-Length in a request message when 23768 // no Transfer-Encoding is sent and the request method defines a meaning 23769 // for an enclosed payload body. For example, a Content-Length header 23770 // field is normally sent in a POST request even when the value is 0 23771 // (indicating an empty payload body). A user agent SHOULD NOT send a 23772 // Content-Length header field when the request message does not contain 23773 // a payload body and the method semantics do not anticipate such a 23774 // body. 23775 if (dist.undefined(headers['content-length']) && dist.undefined(headers['transfer-encoding']) && !cannotHaveBody && !dist.undefined(uploadBodySize)) { 23776 headers['content-length'] = String(uploadBodySize); 23777 } 23778 } 23779 if (options.responseType === 'json' && !('accept' in options.headers)) { 23780 options.headers.accept = 'application/json'; 23781 } 23782 this._bodySize = Number(headers['content-length']) || undefined; 23783 } 23784 async _onResponseBase(response) { 23785 // This will be called e.g. when using cache so we need to check if this request has been aborted. 23786 if (this.isAborted) { 23787 return; 23788 } 23789 const { options } = this; 23790 const { url } = options; 23791 this._nativeResponse = response; 23792 if (options.decompress) { 23793 response = decompress_response(response); 23794 } 23795 const statusCode = response.statusCode; 23796 const typedResponse = response; 23797 typedResponse.statusMessage = typedResponse.statusMessage ?? external_node_http_namespaceObject.STATUS_CODES[statusCode]; 23798 typedResponse.url = options.url.toString(); 23799 typedResponse.requestUrl = this.requestUrl; 23800 typedResponse.redirectUrls = this.redirectUrls; 23801 typedResponse.request = this; 23802 typedResponse.isFromCache = this._nativeResponse.fromCache ?? false; 23803 typedResponse.ip = this.ip; 23804 typedResponse.retryCount = this.retryCount; 23805 typedResponse.ok = isResponseOk(typedResponse); 23806 this._isFromCache = typedResponse.isFromCache; 23807 this._responseSize = Number(response.headers['content-length']) || undefined; 23808 this.response = typedResponse; 23809 response.once('end', () => { 23810 this._responseSize = this._downloadedSize; 23811 this.emit('downloadProgress', this.downloadProgress); 23812 }); 23813 response.once('error', (error) => { 23814 this._aborted = true; 23815 // Force clean-up, because some packages don't do this. 23816 // TODO: Fix decompress-response 23817 response.destroy(); 23818 this._beforeError(new ReadError(error, this)); 23819 }); 23820 response.once('aborted', () => { 23821 this._aborted = true; 23822 this._beforeError(new ReadError({ 23823 name: 'Error', 23824 message: 'The server aborted pending request', 23825 code: 'ECONNRESET', 23826 }, this)); 23827 }); 23828 this.emit('downloadProgress', this.downloadProgress); 23829 const rawCookies = response.headers['set-cookie']; 23830 if (dist.object(options.cookieJar) && rawCookies) { 23831 let promises = rawCookies.map(async (rawCookie) => options.cookieJar.setCookie(rawCookie, url.toString())); 23832 if (options.ignoreInvalidCookies) { 23833 promises = promises.map(async (promise) => { 23834 try { 23835 await promise; 23836 } 23837 catch { } 23838 }); 23839 } 23840 try { 23841 await Promise.all(promises); 23842 } 23843 catch (error) { 23844 this._beforeError(error); 23845 return; 23846 } 23847 } 23848 // The above is running a promise, therefore we need to check if this request has been aborted yet again. 23849 if (this.isAborted) { 23850 return; 23851 } 23852 if (options.followRedirect && response.headers.location && redirectCodes.has(statusCode)) { 23853 // We're being redirected, we don't care about the response. 23854 // It'd be best to abort the request, but we can't because 23855 // we would have to sacrifice the TCP connection. We don't want that. 23856 response.resume(); 23857 this._cancelTimeouts(); 23858 this._unproxyEvents(); 23859 if (this.redirectUrls.length >= options.maxRedirects) { 23860 this._beforeError(new MaxRedirectsError(this)); 23861 return; 23862 } 23863 this._request = undefined; 23864 const updatedOptions = new Options(undefined, undefined, this.options); 23865 const serverRequestedGet = statusCode === 303 && updatedOptions.method !== 'GET' && updatedOptions.method !== 'HEAD'; 23866 const canRewrite = statusCode !== 307 && statusCode !== 308; 23867 const userRequestedGet = updatedOptions.methodRewriting && canRewrite; 23868 if (serverRequestedGet || userRequestedGet) { 23869 updatedOptions.method = 'GET'; 23870 updatedOptions.body = undefined; 23871 updatedOptions.json = undefined; 23872 updatedOptions.form = undefined; 23873 delete updatedOptions.headers['content-length']; 23874 } 23875 try { 23876 // We need this in order to support UTF-8 23877 const redirectBuffer = external_node_buffer_namespaceObject.Buffer.from(response.headers.location, 'binary').toString(); 23878 const redirectUrl = new URL(redirectBuffer, url); 23879 if (!isUnixSocketURL(url) && isUnixSocketURL(redirectUrl)) { 23880 this._beforeError(new RequestError('Cannot redirect to UNIX socket', {}, this)); 23881 return; 23882 } 23883 // Redirecting to a different site, clear sensitive data. 23884 if (redirectUrl.hostname !== url.hostname || redirectUrl.port !== url.port) { 23885 if ('host' in updatedOptions.headers) { 23886 delete updatedOptions.headers.host; 23887 } 23888 if ('cookie' in updatedOptions.headers) { 23889 delete updatedOptions.headers.cookie; 23890 } 23891 if ('authorization' in updatedOptions.headers) { 23892 delete updatedOptions.headers.authorization; 23893 } 23894 if (updatedOptions.username || updatedOptions.password) { 23895 updatedOptions.username = ''; 23896 updatedOptions.password = ''; 23897 } 23898 } 23899 else { 23900 redirectUrl.username = updatedOptions.username; 23901 redirectUrl.password = updatedOptions.password; 23902 } 23903 this.redirectUrls.push(redirectUrl); 23904 updatedOptions.prefixUrl = ''; 23905 updatedOptions.url = redirectUrl; 23906 for (const hook of updatedOptions.hooks.beforeRedirect) { 23907 // eslint-disable-next-line no-await-in-loop 23908 await hook(updatedOptions, typedResponse); 23909 } 23910 this.emit('redirect', updatedOptions, typedResponse); 23911 this.options = updatedOptions; 23912 await this._makeRequest(); 23913 } 23914 catch (error) { 23915 this._beforeError(error); 23916 return; 23917 } 23918 return; 23919 } 23920 // `HTTPError`s always have `error.response.body` defined. 23921 // Therefore we cannot retry if `options.throwHttpErrors` is false. 23922 // On the last retry, if `options.throwHttpErrors` is false, we would need to return the body, 23923 // but that wouldn't be possible since the body would be already read in `error.response.body`. 23924 if (options.isStream && options.throwHttpErrors && !isResponseOk(typedResponse)) { 23925 this._beforeError(new HTTPError(typedResponse)); 23926 return; 23927 } 23928 response.on('readable', () => { 23929 if (this._triggerRead) { 23930 this._read(); 23931 } 23932 }); 23933 this.on('resume', () => { 23934 response.resume(); 23935 }); 23936 this.on('pause', () => { 23937 response.pause(); 23938 }); 23939 response.once('end', () => { 23940 this.push(null); 23941 }); 23942 if (this._noPipe) { 23943 const success = await this._setRawBody(); 23944 if (success) { 23945 this.emit('response', response); 23946 } 23947 return; 23948 } 23949 this.emit('response', response); 23950 for (const destination of this._pipedServerResponses) { 23951 if (destination.headersSent) { 23952 continue; 23953 } 23954 // eslint-disable-next-line guard-for-in 23955 for (const key in response.headers) { 23956 const isAllowed = options.decompress ? key !== 'content-encoding' : true; 23957 const value = response.headers[key]; 23958 if (isAllowed) { 23959 destination.setHeader(key, value); 23960 } 23961 } 23962 destination.statusCode = statusCode; 23963 } 23964 } 23965 async _setRawBody(from = this) { 23966 if (from.readableEnded) { 23967 return false; 23968 } 23969 try { 23970 // Errors are emitted via the `error` event 23971 const rawBody = await getStreamAsBuffer(from); 23972 // TODO: Switch to this: 23973 // let rawBody = await from.toArray(); 23974 // rawBody = Buffer.concat(rawBody); 23975 // On retry Request is destroyed with no error, therefore the above will successfully resolve. 23976 // So in order to check if this was really successfull, we need to check if it has been properly ended. 23977 if (!this.isAborted) { 23978 this.response.rawBody = rawBody; 23979 return true; 23980 } 23981 } 23982 catch { } 23983 return false; 23984 } 23985 async _onResponse(response) { 23986 try { 23987 await this._onResponseBase(response); 23988 } 23989 catch (error) { 23990 /* istanbul ignore next: better safe than sorry */ 23991 this._beforeError(error); 23992 } 23993 } 23994 _onRequest(request) { 23995 const { options } = this; 23996 const { timeout, url } = options; 23997 dist_source(request); 23998 if (this.options.http2) { 23999 // Unset stream timeout, as the `timeout` option was used only for connection timeout. 24000 request.setTimeout(0); 24001 } 24002 this._cancelTimeouts = timedOut(request, timeout, url); 24003 const responseEventName = options.cache ? 'cacheableResponse' : 'response'; 24004 request.once(responseEventName, (response) => { 24005 void this._onResponse(response); 24006 }); 24007 request.once('error', (error) => { 24008 this._aborted = true; 24009 // Force clean-up, because some packages (e.g. nock) don't do this. 24010 request.destroy(); 24011 error = error instanceof timed_out_TimeoutError ? new TimeoutError(error, this.timings, this) : new RequestError(error.message, error, this); 24012 this._beforeError(error); 24013 }); 24014 this._unproxyEvents = proxyEvents(request, this, proxiedRequestEvents); 24015 this._request = request; 24016 this.emit('uploadProgress', this.uploadProgress); 24017 this._sendBody(); 24018 this.emit('request', request); 24019 } 24020 async _asyncWrite(chunk) { 24021 return new Promise((resolve, reject) => { 24022 super.write(chunk, error => { 24023 if (error) { 24024 reject(error); 24025 return; 24026 } 24027 resolve(); 24028 }); 24029 }); 24030 } 24031 _sendBody() { 24032 // Send body 24033 const { body } = this.options; 24034 const currentRequest = this.redirectUrls.length === 0 ? this : this._request ?? this; 24035 if (dist.nodeStream(body)) { 24036 body.pipe(currentRequest); 24037 } 24038 else if (dist.generator(body) || dist.asyncGenerator(body)) { 24039 (async () => { 24040 try { 24041 for await (const chunk of body) { 24042 await this._asyncWrite(chunk); 24043 } 24044 super.end(); 24045 } 24046 catch (error) { 24047 this._beforeError(error); 24048 } 24049 })(); 24050 } 24051 else if (!dist.undefined(body)) { 24052 this._writeRequest(body, undefined, () => { }); 24053 currentRequest.end(); 24054 } 24055 else if (this._cannotHaveBody || this._noPipe) { 24056 currentRequest.end(); 24057 } 24058 } 24059 _prepareCache(cache) { 24060 if (!cacheableStore.has(cache)) { 24061 const cacheableRequest = new cacheable_request_dist(((requestOptions, handler) => { 24062 const result = requestOptions._request(requestOptions, handler); 24063 // TODO: remove this when `cacheable-request` supports async request functions. 24064 if (dist.promise(result)) { 24065 // We only need to implement the error handler in order to support HTTP2 caching. 24066 // The result will be a promise anyway. 24067 // @ts-expect-error ignore 24068 result.once = (event, handler) => { 24069 if (event === 'error') { 24070 (async () => { 24071 try { 24072 await result; 24073 } 24074 catch (error) { 24075 handler(error); 24076 } 24077 })(); 24078 } 24079 else if (event === 'abort') { 24080 // The empty catch is needed here in case when 24081 // it rejects before it's `await`ed in `_makeRequest`. 24082 (async () => { 24083 try { 24084 const request = (await result); 24085 request.once('abort', handler); 24086 } 24087 catch { } 24088 })(); 24089 } 24090 else { 24091 /* istanbul ignore next: safety check */ 24092 throw new Error(`Unknown HTTP2 promise event: ${event}`); 24093 } 24094 return result; 24095 }; 24096 } 24097 return result; 24098 }), cache); 24099 cacheableStore.set(cache, cacheableRequest.request()); 24100 } 24101 } 24102 async _createCacheableRequest(url, options) { 24103 return new Promise((resolve, reject) => { 24104 // TODO: Remove `utils/url-to-options.ts` when `cacheable-request` is fixed 24105 Object.assign(options, urlToOptions(url)); 24106 let request; 24107 // TODO: Fix `cacheable-response`. This is ugly. 24108 const cacheRequest = cacheableStore.get(options.cache)(options, async (response) => { 24109 response._readableState.autoDestroy = false; 24110 if (request) { 24111 const fix = () => { 24112 if (response.req) { 24113 response.complete = response.req.res.complete; 24114 } 24115 }; 24116 response.prependOnceListener('end', fix); 24117 fix(); 24118 (await request).emit('cacheableResponse', response); 24119 } 24120 resolve(response); 24121 }); 24122 cacheRequest.once('error', reject); 24123 cacheRequest.once('request', async (requestOrPromise) => { 24124 request = requestOrPromise; 24125 resolve(request); 24126 }); 24127 }); 24128 } 24129 async _makeRequest() { 24130 const { options } = this; 24131 const { headers, username, password } = options; 24132 const cookieJar = options.cookieJar; 24133 for (const key in headers) { 24134 if (dist.undefined(headers[key])) { 24135 // eslint-disable-next-line @typescript-eslint/no-dynamic-delete 24136 delete headers[key]; 24137 } 24138 else if (dist.null_(headers[key])) { 24139 throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${key}\` header`); 24140 } 24141 } 24142 if (options.decompress && dist.undefined(headers['accept-encoding'])) { 24143 headers['accept-encoding'] = supportsBrotli ? 'gzip, deflate, br' : 'gzip, deflate'; 24144 } 24145 if (username || password) { 24146 const credentials = external_node_buffer_namespaceObject.Buffer.from(`${username}:${password}`).toString('base64'); 24147 headers.authorization = `Basic ${credentials}`; 24148 } 24149 // Set cookies 24150 if (cookieJar) { 24151 const cookieString = await cookieJar.getCookieString(options.url.toString()); 24152 if (dist.nonEmptyString(cookieString)) { 24153 headers.cookie = cookieString; 24154 } 24155 } 24156 // Reset `prefixUrl` 24157 options.prefixUrl = ''; 24158 let request; 24159 for (const hook of options.hooks.beforeRequest) { 24160 // eslint-disable-next-line no-await-in-loop 24161 const result = await hook(options); 24162 if (!dist.undefined(result)) { 24163 // @ts-expect-error Skip the type mismatch to support abstract responses 24164 request = () => result; 24165 break; 24166 } 24167 } 24168 if (!request) { 24169 request = options.getRequestFunction(); 24170 } 24171 const url = options.url; 24172 this._requestOptions = options.createNativeRequestOptions(); 24173 if (options.cache) { 24174 this._requestOptions._request = request; 24175 this._requestOptions.cache = options.cache; 24176 this._requestOptions.body = options.body; 24177 this._prepareCache(options.cache); 24178 } 24179 // Cache support 24180 const fn = options.cache ? this._createCacheableRequest : request; 24181 try { 24182 // We can't do `await fn(...)`, 24183 // because stream `error` event can be emitted before `Promise.resolve()`. 24184 let requestOrResponse = fn(url, this._requestOptions); 24185 if (dist.promise(requestOrResponse)) { 24186 requestOrResponse = await requestOrResponse; 24187 } 24188 // Fallback 24189 if (dist.undefined(requestOrResponse)) { 24190 requestOrResponse = options.getFallbackRequestFunction()(url, this._requestOptions); 24191 if (dist.promise(requestOrResponse)) { 24192 requestOrResponse = await requestOrResponse; 24193 } 24194 } 24195 if (is_client_request(requestOrResponse)) { 24196 this._onRequest(requestOrResponse); 24197 } 24198 else if (this.writable) { 24199 this.once('finish', () => { 24200 void this._onResponse(requestOrResponse); 24201 }); 24202 this._sendBody(); 24203 } 24204 else { 24205 void this._onResponse(requestOrResponse); 24206 } 24207 } 24208 catch (error) { 24209 if (error instanceof types_CacheError) { 24210 throw new CacheError(error, this); 24211 } 24212 throw error; 24213 } 24214 } 24215 async _error(error) { 24216 try { 24217 if (error instanceof HTTPError && !this.options.throwHttpErrors) { 24218 // This branch can be reached only when using the Promise API 24219 // Skip calling the hooks on purpose. 24220 // See https://github.com/sindresorhus/got/issues/2103 24221 } 24222 else { 24223 for (const hook of this.options.hooks.beforeError) { 24224 // eslint-disable-next-line no-await-in-loop 24225 error = await hook(error); 24226 } 24227 } 24228 } 24229 catch (error_) { 24230 error = new RequestError(error_.message, error_, this); 24231 } 24232 this.destroy(error); 24233 } 24234 _writeRequest(chunk, encoding, callback) { 24235 if (!this._request || this._request.destroyed) { 24236 // Probably the `ClientRequest` instance will throw 24237 return; 24238 } 24239 this._request.write(chunk, encoding, (error) => { 24240 // The `!destroyed` check is required to prevent `uploadProgress` being emitted after the stream was destroyed 24241 if (!error && !this._request.destroyed) { 24242 this._uploadedSize += external_node_buffer_namespaceObject.Buffer.byteLength(chunk, encoding); 24243 const progress = this.uploadProgress; 24244 if (progress.percent < 1) { 24245 this.emit('uploadProgress', progress); 24246 } 24247 } 24248 callback(error); 24249 }); 24250 } 24251 /** 24252 The remote IP address. 24253 */ 24254 get ip() { 24255 return this.socket?.remoteAddress; 24256 } 24257 /** 24258 Indicates whether the request has been aborted or not. 24259 */ 24260 get isAborted() { 24261 return this._aborted; 24262 } 24263 get socket() { 24264 return this._request?.socket ?? undefined; 24265 } 24266 /** 24267 Progress event for downloading (receiving a response). 24268 */ 24269 get downloadProgress() { 24270 let percent; 24271 if (this._responseSize) { 24272 percent = this._downloadedSize / this._responseSize; 24273 } 24274 else if (this._responseSize === this._downloadedSize) { 24275 percent = 1; 24276 } 24277 else { 24278 percent = 0; 24279 } 24280 return { 24281 percent, 24282 transferred: this._downloadedSize, 24283 total: this._responseSize, 24284 }; 24285 } 24286 /** 24287 Progress event for uploading (sending a request). 24288 */ 24289 get uploadProgress() { 24290 let percent; 24291 if (this._bodySize) { 24292 percent = this._uploadedSize / this._bodySize; 24293 } 24294 else if (this._bodySize === this._uploadedSize) { 24295 percent = 1; 24296 } 24297 else { 24298 percent = 0; 24299 } 24300 return { 24301 percent, 24302 transferred: this._uploadedSize, 24303 total: this._bodySize, 24304 }; 24305 } 24306 /** 24307 The object contains the following properties: 24308 24309 - `start` - Time when the request started. 24310 - `socket` - Time when a socket was assigned to the request. 24311 - `lookup` - Time when the DNS lookup finished. 24312 - `connect` - Time when the socket successfully connected. 24313 - `secureConnect` - Time when the socket securely connected. 24314 - `upload` - Time when the request finished uploading. 24315 - `response` - Time when the request fired `response` event. 24316 - `end` - Time when the response fired `end` event. 24317 - `error` - Time when the request fired `error` event. 24318 - `abort` - Time when the request fired `abort` event. 24319 - `phases` 24320 - `wait` - `timings.socket - timings.start` 24321 - `dns` - `timings.lookup - timings.socket` 24322 - `tcp` - `timings.connect - timings.lookup` 24323 - `tls` - `timings.secureConnect - timings.connect` 24324 - `request` - `timings.upload - (timings.secureConnect || timings.connect)` 24325 - `firstByte` - `timings.response - timings.upload` 24326 - `download` - `timings.end - timings.response` 24327 - `total` - `(timings.end || timings.error || timings.abort) - timings.start` 24328 24329 If something has not been measured yet, it will be `undefined`. 24330 24331 __Note__: The time is a `number` representing the milliseconds elapsed since the UNIX epoch. 24332 */ 24333 get timings() { 24334 return this._request?.timings; 24335 } 24336 /** 24337 Whether the response was retrieved from the cache. 24338 */ 24339 get isFromCache() { 24340 return this._isFromCache; 24341 } 24342 get reusedSocket() { 24343 return this._request?.reusedSocket; 24344 } 24345 } 24346 24347 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/as-promise/types.js 24348 24349 /** 24350 An error to be thrown when the request is aborted with `.cancel()`. 24351 */ 24352 class types_CancelError extends RequestError { 24353 constructor(request) { 24354 super('Promise was canceled', {}, request); 24355 this.name = 'CancelError'; 24356 this.code = 'ERR_CANCELED'; 24357 } 24358 /** 24359 Whether the promise is canceled. 24360 */ 24361 get isCanceled() { 24362 return true; 24363 } 24364 } 24365 24366 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/as-promise/index.js 24367 24368 24369 24370 24371 24372 24373 24374 24375 const as_promise_proxiedRequestEvents = [ 24376 'request', 24377 'response', 24378 'redirect', 24379 'uploadProgress', 24380 'downloadProgress', 24381 ]; 24382 function asPromise(firstRequest) { 24383 let globalRequest; 24384 let globalResponse; 24385 let normalizedOptions; 24386 const emitter = new external_node_events_namespaceObject.EventEmitter(); 24387 const promise = new PCancelable((resolve, reject, onCancel) => { 24388 onCancel(() => { 24389 globalRequest.destroy(); 24390 }); 24391 onCancel.shouldReject = false; 24392 onCancel(() => { 24393 reject(new types_CancelError(globalRequest)); 24394 }); 24395 const makeRequest = (retryCount) => { 24396 // Errors when a new request is made after the promise settles. 24397 // Used to detect a race condition. 24398 // See https://github.com/sindresorhus/got/issues/1489 24399 onCancel(() => { }); 24400 const request = firstRequest ?? new Request(undefined, undefined, normalizedOptions); 24401 request.retryCount = retryCount; 24402 request._noPipe = true; 24403 globalRequest = request; 24404 request.once('response', async (response) => { 24405 // Parse body 24406 const contentEncoding = (response.headers['content-encoding'] ?? '').toLowerCase(); 24407 const isCompressed = contentEncoding === 'gzip' || contentEncoding === 'deflate' || contentEncoding === 'br'; 24408 const { options } = request; 24409 if (isCompressed && !options.decompress) { 24410 response.body = response.rawBody; 24411 } 24412 else { 24413 try { 24414 response.body = parseBody(response, options.responseType, options.parseJson, options.encoding); 24415 } 24416 catch (error) { 24417 // Fall back to `utf8` 24418 response.body = response.rawBody.toString(); 24419 if (isResponseOk(response)) { 24420 request._beforeError(error); 24421 return; 24422 } 24423 } 24424 } 24425 try { 24426 const hooks = options.hooks.afterResponse; 24427 for (const [index, hook] of hooks.entries()) { 24428 // @ts-expect-error TS doesn't notice that CancelableRequest is a Promise 24429 // eslint-disable-next-line no-await-in-loop 24430 response = await hook(response, async (updatedOptions) => { 24431 options.merge(updatedOptions); 24432 options.prefixUrl = ''; 24433 if (updatedOptions.url) { 24434 options.url = updatedOptions.url; 24435 } 24436 // Remove any further hooks for that request, because we'll call them anyway. 24437 // The loop continues. We don't want duplicates (asPromise recursion). 24438 options.hooks.afterResponse = options.hooks.afterResponse.slice(0, index); 24439 throw new RetryError(request); 24440 }); 24441 if (!(dist.object(response) && dist.number(response.statusCode) && !dist.nullOrUndefined(response.body))) { 24442 throw new TypeError('The `afterResponse` hook returned an invalid value'); 24443 } 24444 } 24445 } 24446 catch (error) { 24447 request._beforeError(error); 24448 return; 24449 } 24450 globalResponse = response; 24451 if (!isResponseOk(response)) { 24452 request._beforeError(new HTTPError(response)); 24453 return; 24454 } 24455 request.destroy(); 24456 resolve(request.options.resolveBodyOnly ? response.body : response); 24457 }); 24458 const onError = (error) => { 24459 if (promise.isCanceled) { 24460 return; 24461 } 24462 const { options } = request; 24463 if (error instanceof HTTPError && !options.throwHttpErrors) { 24464 const { response } = error; 24465 request.destroy(); 24466 resolve(request.options.resolveBodyOnly ? response.body : response); 24467 return; 24468 } 24469 reject(error); 24470 }; 24471 request.once('error', onError); 24472 const previousBody = request.options?.body; 24473 request.once('retry', (newRetryCount, error) => { 24474 firstRequest = undefined; 24475 const newBody = request.options.body; 24476 if (previousBody === newBody && dist.nodeStream(newBody)) { 24477 error.message = 'Cannot retry with consumed body stream'; 24478 onError(error); 24479 return; 24480 } 24481 // This is needed! We need to reuse `request.options` because they can get modified! 24482 // For example, by calling `promise.json()`. 24483 normalizedOptions = request.options; 24484 makeRequest(newRetryCount); 24485 }); 24486 proxyEvents(request, emitter, as_promise_proxiedRequestEvents); 24487 if (dist.undefined(firstRequest)) { 24488 void request.flush(); 24489 } 24490 }; 24491 makeRequest(0); 24492 }); 24493 promise.on = (event, fn) => { 24494 emitter.on(event, fn); 24495 return promise; 24496 }; 24497 promise.off = (event, fn) => { 24498 emitter.off(event, fn); 24499 return promise; 24500 }; 24501 const shortcut = (responseType) => { 24502 const newPromise = (async () => { 24503 // Wait until downloading has ended 24504 await promise; 24505 const { options } = globalResponse.request; 24506 return parseBody(globalResponse, responseType, options.parseJson, options.encoding); 24507 })(); 24508 // eslint-disable-next-line @typescript-eslint/no-floating-promises 24509 Object.defineProperties(newPromise, Object.getOwnPropertyDescriptors(promise)); 24510 return newPromise; 24511 }; 24512 promise.json = () => { 24513 if (globalRequest.options) { 24514 const { headers } = globalRequest.options; 24515 if (!globalRequest.writableFinished && !('accept' in headers)) { 24516 headers.accept = 'application/json'; 24517 } 24518 } 24519 return shortcut('json'); 24520 }; 24521 promise.buffer = () => shortcut('buffer'); 24522 promise.text = () => shortcut('text'); 24523 return promise; 24524 } 24525 24526 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/create.js 24527 24528 24529 24530 24531 // The `delay` package weighs 10KB (!) 24532 const delay = async (ms) => new Promise(resolve => { 24533 setTimeout(resolve, ms); 24534 }); 24535 const isGotInstance = (value) => dist.function_(value); 24536 const aliases = [ 24537 'get', 24538 'post', 24539 'put', 24540 'patch', 24541 'head', 24542 'delete', 24543 ]; 24544 const create = (defaults) => { 24545 defaults = { 24546 options: new Options(undefined, undefined, defaults.options), 24547 handlers: [...defaults.handlers], 24548 mutableDefaults: defaults.mutableDefaults, 24549 }; 24550 Object.defineProperty(defaults, 'mutableDefaults', { 24551 enumerable: true, 24552 configurable: false, 24553 writable: false, 24554 }); 24555 // Got interface 24556 const got = ((url, options, defaultOptions = defaults.options) => { 24557 const request = new Request(url, options, defaultOptions); 24558 let promise; 24559 const lastHandler = (normalized) => { 24560 // Note: `options` is `undefined` when `new Options(...)` fails 24561 request.options = normalized; 24562 request._noPipe = !normalized.isStream; 24563 void request.flush(); 24564 if (normalized.isStream) { 24565 return request; 24566 } 24567 if (!promise) { 24568 promise = asPromise(request); 24569 } 24570 return promise; 24571 }; 24572 let iteration = 0; 24573 const iterateHandlers = (newOptions) => { 24574 const handler = defaults.handlers[iteration++] ?? lastHandler; 24575 const result = handler(newOptions, iterateHandlers); 24576 if (dist.promise(result) && !request.options.isStream) { 24577 if (!promise) { 24578 promise = asPromise(request); 24579 } 24580 if (result !== promise) { 24581 const descriptors = Object.getOwnPropertyDescriptors(promise); 24582 for (const key in descriptors) { 24583 if (key in result) { 24584 // eslint-disable-next-line @typescript-eslint/no-dynamic-delete 24585 delete descriptors[key]; 24586 } 24587 } 24588 // eslint-disable-next-line @typescript-eslint/no-floating-promises 24589 Object.defineProperties(result, descriptors); 24590 result.cancel = promise.cancel; 24591 } 24592 } 24593 return result; 24594 }; 24595 return iterateHandlers(request.options); 24596 }); 24597 got.extend = (...instancesOrOptions) => { 24598 const options = new Options(undefined, undefined, defaults.options); 24599 const handlers = [...defaults.handlers]; 24600 let mutableDefaults; 24601 for (const value of instancesOrOptions) { 24602 if (isGotInstance(value)) { 24603 options.merge(value.defaults.options); 24604 handlers.push(...value.defaults.handlers); 24605 mutableDefaults = value.defaults.mutableDefaults; 24606 } 24607 else { 24608 options.merge(value); 24609 if (value.handlers) { 24610 handlers.push(...value.handlers); 24611 } 24612 mutableDefaults = value.mutableDefaults; 24613 } 24614 } 24615 return create({ 24616 options, 24617 handlers, 24618 mutableDefaults: Boolean(mutableDefaults), 24619 }); 24620 }; 24621 // Pagination 24622 const paginateEach = (async function* (url, options) { 24623 let normalizedOptions = new Options(url, options, defaults.options); 24624 normalizedOptions.resolveBodyOnly = false; 24625 const { pagination } = normalizedOptions; 24626 assert.function_(pagination.transform); 24627 assert.function_(pagination.shouldContinue); 24628 assert.function_(pagination.filter); 24629 assert.function_(pagination.paginate); 24630 assert.number(pagination.countLimit); 24631 assert.number(pagination.requestLimit); 24632 assert.number(pagination.backoff); 24633 const allItems = []; 24634 let { countLimit } = pagination; 24635 let numberOfRequests = 0; 24636 while (numberOfRequests < pagination.requestLimit) { 24637 if (numberOfRequests !== 0) { 24638 // eslint-disable-next-line no-await-in-loop 24639 await delay(pagination.backoff); 24640 } 24641 // eslint-disable-next-line no-await-in-loop 24642 const response = (await got(undefined, undefined, normalizedOptions)); 24643 // eslint-disable-next-line no-await-in-loop 24644 const parsed = await pagination.transform(response); 24645 const currentItems = []; 24646 assert.array(parsed); 24647 for (const item of parsed) { 24648 if (pagination.filter({ item, currentItems, allItems })) { 24649 if (!pagination.shouldContinue({ item, currentItems, allItems })) { 24650 return; 24651 } 24652 yield item; 24653 if (pagination.stackAllItems) { 24654 allItems.push(item); 24655 } 24656 currentItems.push(item); 24657 if (--countLimit <= 0) { 24658 return; 24659 } 24660 } 24661 } 24662 const optionsToMerge = pagination.paginate({ 24663 response, 24664 currentItems, 24665 allItems, 24666 }); 24667 if (optionsToMerge === false) { 24668 return; 24669 } 24670 if (optionsToMerge === response.request.options) { 24671 normalizedOptions = response.request.options; 24672 } 24673 else { 24674 normalizedOptions.merge(optionsToMerge); 24675 assert.any([dist.urlInstance, dist.undefined], optionsToMerge.url); 24676 if (optionsToMerge.url !== undefined) { 24677 normalizedOptions.prefixUrl = ''; 24678 normalizedOptions.url = optionsToMerge.url; 24679 } 24680 } 24681 numberOfRequests++; 24682 } 24683 }); 24684 got.paginate = paginateEach; 24685 got.paginate.all = (async (url, options) => { 24686 const results = []; 24687 for await (const item of paginateEach(url, options)) { 24688 results.push(item); 24689 } 24690 return results; 24691 }); 24692 // For those who like very descriptive names 24693 got.paginate.each = paginateEach; 24694 // Stream API 24695 got.stream = ((url, options) => got(url, { ...options, isStream: true })); 24696 // Shortcuts 24697 for (const method of aliases) { 24698 got[method] = ((url, options) => got(url, { ...options, method })); 24699 got.stream[method] = ((url, options) => got(url, { ...options, method, isStream: true })); 24700 } 24701 if (!defaults.mutableDefaults) { 24702 Object.freeze(defaults.handlers); 24703 defaults.options.freeze(); 24704 } 24705 Object.defineProperty(got, 'defaults', { 24706 value: defaults, 24707 writable: false, 24708 configurable: false, 24709 enumerable: true, 24710 }); 24711 return got; 24712 }; 24713 /* harmony default export */ const source_create = (create); 24714 24715 ;// CONCATENATED MODULE: ./node_modules/got/dist/source/index.js 24716 24717 24718 const defaults = { 24719 options: new Options(), 24720 handlers: [], 24721 mutableDefaults: false, 24722 }; 24723 const got = source_create(defaults); 24724 /* harmony default export */ const got_dist_source = (got); 24725 24726 24727 24728 24729 24730 24731 24732 24733 24734 24735 24736 24737 // EXTERNAL MODULE: ./node_modules/nearley/lib/nearley.js 24738 var nearley = __nccwpck_require__(7800); 24739 ;// CONCATENATED MODULE: ./lib/main.js 24740 24741 24742 24743 24744 24745 24746 24747 24748 24749 // @ts-ignore 24750 24751 const { Grammar, Parser } = nearley; 24752 // Purely used for tests 24753 function areWeTestingWithJest() { 24754 return process.env.JEST_WORKER_ID !== undefined; 24755 } 24756 async function downloadRelease(version) { 24757 // Download 24758 const downloadUrl = `https://github.com/getzola/zola/releases/download/v${version}/zola-v${version}-x86_64-unknown-linux-gnu.tar.gz`; 24759 let downloadPath = null; 24760 try { 24761 downloadPath = await (0,tool_cache.downloadTool)(downloadUrl); 24762 } 24763 catch (error) { 24764 (0,core.debug)(error); 24765 throw new Error(`Failed to download version v${version}: ${error}`); 24766 } 24767 // Extract 24768 const extPath = await (0,tool_cache.extractTar)(downloadPath); 24769 // Install into the local tool cache - node extracts with a root folder that matches the fileName downloaded 24770 return await (0,tool_cache.cacheDir)(extPath, 'zola', version); 24771 } 24772 async function getZolaCli(version) { 24773 // look if the binary is cached 24774 let toolPath; 24775 toolPath = (0,tool_cache.find)('zola', version); 24776 // if not: download, extract and cache 24777 if (!toolPath) { 24778 toolPath = await downloadRelease(version); 24779 (0,core.debug)(`Zola cached under ${toolPath}`); 24780 } 24781 (0,core.addPath)(toolPath); 24782 } 24783 async function run() { 24784 // __dirname does not exist in esm world so we fake it the esm way. Nodejs approves. 24785 const __dirname = process.env['GITHUB_WORKSPACE'] || '.'; 24786 const working_directory = (0,core.getInput)('working_directory'); 24787 let dataString = ''; 24788 let infoString = ''; 24789 const parser = new Parser(Grammar.fromCompiled(lib_grammar)); 24790 const options = { 24791 cwd: external_path_.join(__dirname, working_directory), 24792 ignoreReturnCode: true, 24793 listeners: { 24794 stderr: (data) => { 24795 dataString += data.toString(); 24796 }, 24797 stdout: (data) => { 24798 infoString += data.toString(); 24799 } 24800 } 24801 }; 24802 // Download zola 24803 await getZolaCli('0.17.2'); 24804 const zolaPath = await (0,io.which)('zola', true); 24805 const startTime = new Date(); 24806 await (0,exec.exec)(`${zolaPath}`, ['check'], options); 24807 try { 24808 parser.feed(dataString); 24809 } 24810 catch (parseError) { 24811 (0,core.setFailed)(`Error at character ${parseError.offset}`); 24812 } 24813 const annotations = []; 24814 for (const rawResult of parser.results[0]) { 24815 const result = rawResult; 24816 if (!result.hasOwnProperty('file')) { 24817 continue; 24818 } 24819 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- We ensured this exists previously 24820 const data = await (0,promises_namespaceObject.readFile)(result.file, 'utf8'); 24821 const lines = data.split(/\r?\n/); 24822 for (const [index, line] of lines.entries()) { 24823 if (line.trim() === '') { 24824 continue; 24825 } 24826 const startingPositionOfUrl = line.indexOf(result.url ?? ''); 24827 if (startingPositionOfUrl === -1) { 24828 continue; 24829 } 24830 let message = `Zola Error Message: ${result.error_message}`; 24831 // Check if we have a webarchive link 24832 const waybackResponse = await got_dist_source.get(`http://archive.org/wayback/available?url=${result.url ?? ''}`) 24833 .json(); 24834 if (waybackResponse.archived_snapshots !== null) { 24835 if (waybackResponse.archived_snapshots.closest?.available && 24836 waybackResponse.archived_snapshots.closest.status === '200') { 24837 message = `${message}\nWayback Machine Link is available: ${waybackResponse.archived_snapshots.closest.url}`; 24838 } 24839 } 24840 annotations.push({ 24841 // This is a little awkward but does the job 24842 path: `/${external_path_.relative(__dirname, result.file ?? '')}`, 24843 start_line: index, 24844 end_line: index, 24845 start_column: startingPositionOfUrl, 24846 end_column: startingPositionOfUrl + (result.url ?? '').length, 24847 annotation_level: (0,core.getInput)('annotation_level'), 24848 message 24849 }); 24850 } 24851 } 24852 // Only create result if there is anything to report 24853 if (annotations.length > 0) { 24854 const token = (0,core.getInput)('repo-token'); 24855 const octokit = (0,github.getOctokit)(token); 24856 // call octokit to create a check with annotation and details 24857 await octokit.rest.checks.create({ 24858 owner: github.context.repo.owner, 24859 repo: github.context.repo.repo, 24860 name: 'Zola Check', 24861 head_sha: github.context.sha, 24862 started_at: areWeTestingWithJest() ? undefined : startTime.toISOString(), 24863 completed_at: areWeTestingWithJest() 24864 ? undefined 24865 : new Date().toISOString(), 24866 status: 'completed', 24867 conclusion: (0,core.getInput)('conclusion_level'), 24868 output: { 24869 title: 'Link is not reachable', 24870 summary: 'Zola check found links which are not reachable. Make sure to either ignore these due to being false positives or fixing them', 24871 annotations 24872 } 24873 }); 24874 } 24875 // Write summary 24876 const stdoutParser = new Parser(Grammar.fromCompiled(lib_grammar)); 24877 stdoutParser.feed(infoString); 24878 if ( 24879 // eslint-disable-next-line @typescript-eslint/no-explicit-any 24880 stdoutParser.results[0].filter((result) => result.hasOwnProperty('successReport')).length > 0) { 24881 // eslint-disable-next-line @typescript-eslint/no-explicit-any 24882 const totalExternal = stdoutParser.results[0].filter((result) => result.hasOwnProperty('external_links_planed_checking'))[0]['external_links_planed_checking']['total']; 24883 core.summary.addHeading('Zola check results') 24884 .addTable([ 24885 [ 24886 { data: 'Link Type', header: true }, 24887 { data: 'Total', header: true }, 24888 { data: 'Result', header: true } 24889 ], 24890 ['Internal', '', 'Pass ✅'], 24891 ['External', totalExternal, `Pass ✅`] 24892 ]) 24893 .write(); 24894 } 24895 else { 24896 // eslint-disable-next-line @typescript-eslint/no-explicit-any 24897 const totalInternal = stdoutParser.results[0].filter((result) => result.hasOwnProperty('internal_links'))[0]['internal_links']['total']; 24898 // eslint-disable-next-line @typescript-eslint/no-explicit-any 24899 const totalExternal = stdoutParser.results[0].filter((result) => result.hasOwnProperty('external_links_planed_checking'))[0]['external_links_planed_checking']['total']; 24900 const skippedExternal = 24901 // eslint-disable-next-line @typescript-eslint/no-explicit-any 24902 stdoutParser.results[0].filter((result) => result.hasOwnProperty('external_links_planed_checking'))[0]['external_links_planed_checking']['skipped'] || '0'; 24903 // eslint-disable-next-line @typescript-eslint/no-explicit-any 24904 const errorCount = stdoutParser.results[0].filter((result) => result.hasOwnProperty('external_links_checked'))[0]['external_links_checked']['errors']; 24905 core.summary.addHeading('Zola check results') 24906 .addTable([ 24907 [ 24908 { data: 'Link Type', header: true }, 24909 { data: 'Total', header: true }, 24910 { data: 'Result', header: true } 24911 ], 24912 ['Internal', totalInternal, 'Pass ✅'], 24913 [ 24914 'External', 24915 `${totalExternal} (Skipped ${skippedExternal})`, 24916 `Fail (${errorCount} error(s) found) ❌` 24917 ] 24918 ]) 24919 .write(); 24920 } 24921 } 24922 run(); 24923 24924 })(); 24925 24926 var __webpack_exports__run = __webpack_exports__.K; 24927 export { __webpack_exports__run as run }; 24928 24929 //# sourceMappingURL=index.js.map