github.com/yogeshkumararora/slsa-github-generator@v1.10.1-0.20240520161934-11278bd5afb4/actions/delegator/setup-generic/dist/index.js (about) 1 require('./sourcemap-register.js');/******/ (() => { // webpackBootstrap 2 /******/ var __webpack_modules__ = ({ 3 4 /***/ 3109: 5 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 6 7 "use strict"; 8 9 /* 10 Copyright 2022 SLSA Authors 11 Licensed under the Apache License, Version 2.0 (the "License"); 12 you may not use this file except in compliance with the License. 13 You may obtain a copy of the License at 14 https://www.apache.org/licenses/LICENSE-2.0 15 Unless required by applicable law or agreed to in writing, software 16 distributed under the License is distributed on an "AS IS" BASIS, 17 WIHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 See the License for the specific language governing permissions and 19 limitations under the License. 20 */ 21 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 22 if (k2 === undefined) k2 = k; 23 var desc = Object.getOwnPropertyDescriptor(m, k); 24 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 25 desc = { enumerable: true, get: function() { return m[k]; } }; 26 } 27 Object.defineProperty(o, k2, desc); 28 }) : (function(o, m, k, k2) { 29 if (k2 === undefined) k2 = k; 30 o[k2] = m[k]; 31 })); 32 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 33 Object.defineProperty(o, "default", { enumerable: true, value: v }); 34 }) : function(o, v) { 35 o["default"] = v; 36 }); 37 var __importStar = (this && this.__importStar) || function (mod) { 38 if (mod && mod.__esModule) return mod; 39 var result = {}; 40 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 41 __setModuleDefault(result, mod); 42 return result; 43 }; 44 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 45 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 46 return new (P || (P = Promise))(function (resolve, reject) { 47 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 48 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 49 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 50 step((generator = generator.apply(thisArg, _arguments || [])).next()); 51 }); 52 }; 53 Object.defineProperty(exports, "__esModule", ({ value: true })); 54 const github = __importStar(__nccwpck_require__(95438)); 55 const core = __importStar(__nccwpck_require__(42186)); 56 const process = __importStar(__nccwpck_require__(77282)); 57 const sigstore_1 = __nccwpck_require__(99149); 58 const tscommon = __importStar(__nccwpck_require__(86634)); 59 function run() { 60 return __awaiter(this, void 0, void 0, function* () { 61 try { 62 /* Test locally: 63 $ env INPUT_SLSA-WORKFLOW-RECIPIENT="laurentsimon/slsa-delegated-tool" \ 64 INPUT_SLSA-REKOR-LOG-PUBLIC=true \ 65 INPUT_SLSA-RUNNER-LABEL="ubuntu-latest" \ 66 INPUT_SLSA-BUILD-ACTION-PATH="./actions/build-artifacts-composite" \ 67 INPUT_SLSA-WORKFLOW-INPUTS="{\"name1\":\"value1\",\"name2\":\"value2\",\"name3\":\"value3\",\"name4\":\"value4\"}" \ 68 INPUT_SLSA-WORKFLOW-INPUTS-MASK="name2, name4" \ 69 INPUT_SLSA-CHECKOUT-FETCH-DEPTH="2" \ 70 INPUT_SLSA-CHECKOUT-REPOSITORY-SHA1="abcdef" \ 71 INPUT_SLSA-VERSION="v1" \ 72 nodejs ./dist/index.js 73 */ 74 const slsaVersion = core.getInput("slsa-version"); 75 if (!["v1.0", "v0.2"].includes(slsaVersion)) { 76 throw new Error(`Unsupported slsa-version: ${slsaVersion}`); 77 } 78 const workflowRecipient = core.getInput("slsa-workflow-recipient"); 79 const rekorLogPublic = core.getInput("slsa-rekor-log-public"); 80 const runnerLabel = core.getInput("slsa-runner-label"); 81 // Checkout options. 82 const checkoutDepth = core.getInput("slsa-checkout-fetch-depth"); 83 const checkoutSha1 = core.getInput("slsa-checkout-sha1"); 84 const buildArtifactsActionPath = core.getInput("slsa-build-action-path"); 85 const workflowsInputsMask = core.getInput("slsa-workflow-masked-inputs"); 86 // The workflow inputs are represented as a JSON object theselves. 87 const workflowsInputsText = core.getInput("slsa-workflow-inputs"); 88 // Log the inputs for troubleshooting. 89 core.debug(`workflowsInputsText: ${workflowsInputsText}`); 90 core.debug(`workfowInputs: `); 91 const workflowInputs = JSON.parse(workflowsInputsText); 92 const workflowInputsMap = new Map(Object.entries(workflowInputs)); 93 for (const [key, value] of workflowInputsMap) { 94 core.info(` ${key}: ${value}`); 95 } 96 const workflowMaskedInputs = getMaskedInputs(workflowsInputsMask); 97 core.info(`maskedInputs: `); 98 for (const value of workflowMaskedInputs) { 99 core.info(` ${value}`); 100 } 101 const payload = JSON.stringify(github.context.payload, undefined, 2); 102 core.debug(`The event payload: ${payload}`); 103 // Construct an unsigned SLSA token. 104 const unsignedSlsaToken = { 105 version: 1, 106 slsaVersion, 107 context: "SLSA delegator framework", 108 builder: { 109 rekor_log_public: rekorLogPublic, 110 runner_label: runnerLabel, 111 audience: workflowRecipient, 112 }, 113 source: { 114 checkout: { 115 fetch_depth: checkoutDepth, 116 sha1: checkoutSha1, 117 }, 118 // TODO(#2043): add digests. 119 }, 120 github: { 121 actor_id: process.env.GITHUB_ACTOR_ID, 122 event_name: process.env.GITHUB_EVENT_NAME, 123 event_payload_sha256: tscommon.safeFileSha256(process.env.GITHUB_EVENT_PATH || ""), 124 base_ref: process.env.GITHUB_BASE_REF, 125 ref: process.env.GITHUB_REF, 126 ref_type: process.env.GITHUB_REF_TYPE, 127 repository: process.env.GITHUB_REPOSITORY, 128 repository_id: process.env.GITHUB_REPOSITORY_ID, 129 repository_owner_id: process.env.GITHUB_REPOSITORY_OWNER_ID, 130 run_attempt: process.env.GITHUB_RUN_ATTEMPT, 131 run_id: process.env.GITHUB_RUN_ID, 132 run_number: process.env.GITHUB_RUN_NUMBER, 133 sha: process.env.GITHUB_SHA, 134 workflow_ref: process.env.GITHUB_WORKFLOW_REF, 135 workflow_sha: process.env.GITHUB_WORKFLOW_SHA, 136 }, 137 image: { 138 os: process.env.ImageOS, 139 version: process.env.ImageVersion, 140 }, 141 runner: { 142 arch: process.env.RUNNER_ARCH, 143 name: process.env.RUNNER_NAME, 144 os: process.env.RUNNER_OS, 145 }, 146 tool: { 147 actions: { 148 build_artifacts: { 149 path: buildArtifactsActionPath, 150 }, 151 }, 152 inputs: workflowInputs, 153 masked_inputs: workflowMaskedInputs, 154 }, 155 }; 156 // Prepare the base64 unsigned token. 157 const unsignedToken = JSON.stringify(unsignedSlsaToken, undefined); 158 const unsignedB64Token = Buffer.from(unsignedToken).toString("base64"); 159 core.info(`unsignedToken: ${unsignedToken}`); 160 core.info(`unsignedB64Token: ${unsignedB64Token}`); 161 // Sign and prepare the base64 bundle. 162 const bundle = yield (0, sigstore_1.sign)(Buffer.from(unsignedB64Token)); 163 // Verify just to double check. 164 // NOTE: this is an offline verification. 165 // TODO(#1668): re-enable verification. 166 // await sigstore.verify(bundle, Buffer.from(unsignedB64Token)); 167 const bundleStr = JSON.stringify(bundle); 168 const bundleB64 = Buffer.from(bundleStr).toString("base64"); 169 core.info(`bundleStr: ${bundleStr}`); 170 core.info(`bundleB64: ${bundleB64}`); 171 // Output the signed token. 172 core.info(`slsa-token: ${bundleB64}.${unsignedB64Token}`); 173 core.setOutput("slsa-token", `${bundleB64}.${unsignedB64Token}`); 174 } 175 catch (error) { 176 if (error instanceof Error) { 177 core.setFailed(error.message); 178 } 179 else { 180 core.setFailed(`Unexpected error: ${error}`); 181 } 182 } 183 }); 184 } 185 function getMaskedInputs(inputsStr) { 186 const ret = []; 187 const inputArr = inputsStr.split(","); 188 for (const input of inputArr) { 189 ret.push(input.trim()); 190 } 191 return ret; 192 } 193 run(); 194 195 196 /***/ }), 197 198 /***/ 87351: 199 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 200 201 "use strict"; 202 203 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 204 if (k2 === undefined) k2 = k; 205 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 206 }) : (function(o, m, k, k2) { 207 if (k2 === undefined) k2 = k; 208 o[k2] = m[k]; 209 })); 210 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 211 Object.defineProperty(o, "default", { enumerable: true, value: v }); 212 }) : function(o, v) { 213 o["default"] = v; 214 }); 215 var __importStar = (this && this.__importStar) || function (mod) { 216 if (mod && mod.__esModule) return mod; 217 var result = {}; 218 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 219 __setModuleDefault(result, mod); 220 return result; 221 }; 222 Object.defineProperty(exports, "__esModule", ({ value: true })); 223 exports.issue = exports.issueCommand = void 0; 224 const os = __importStar(__nccwpck_require__(22037)); 225 const utils_1 = __nccwpck_require__(5278); 226 /** 227 * Commands 228 * 229 * Command Format: 230 * ::name key=value,key=value::message 231 * 232 * Examples: 233 * ::warning::This is the message 234 * ::set-env name=MY_VAR::some value 235 */ 236 function issueCommand(command, properties, message) { 237 const cmd = new Command(command, properties, message); 238 process.stdout.write(cmd.toString() + os.EOL); 239 } 240 exports.issueCommand = issueCommand; 241 function issue(name, message = '') { 242 issueCommand(name, {}, message); 243 } 244 exports.issue = issue; 245 const CMD_STRING = '::'; 246 class Command { 247 constructor(command, properties, message) { 248 if (!command) { 249 command = 'missing.command'; 250 } 251 this.command = command; 252 this.properties = properties; 253 this.message = message; 254 } 255 toString() { 256 let cmdStr = CMD_STRING + this.command; 257 if (this.properties && Object.keys(this.properties).length > 0) { 258 cmdStr += ' '; 259 let first = true; 260 for (const key in this.properties) { 261 if (this.properties.hasOwnProperty(key)) { 262 const val = this.properties[key]; 263 if (val) { 264 if (first) { 265 first = false; 266 } 267 else { 268 cmdStr += ','; 269 } 270 cmdStr += `${key}=${escapeProperty(val)}`; 271 } 272 } 273 } 274 } 275 cmdStr += `${CMD_STRING}${escapeData(this.message)}`; 276 return cmdStr; 277 } 278 } 279 function escapeData(s) { 280 return utils_1.toCommandValue(s) 281 .replace(/%/g, '%25') 282 .replace(/\r/g, '%0D') 283 .replace(/\n/g, '%0A'); 284 } 285 function escapeProperty(s) { 286 return utils_1.toCommandValue(s) 287 .replace(/%/g, '%25') 288 .replace(/\r/g, '%0D') 289 .replace(/\n/g, '%0A') 290 .replace(/:/g, '%3A') 291 .replace(/,/g, '%2C'); 292 } 293 //# sourceMappingURL=command.js.map 294 295 /***/ }), 296 297 /***/ 42186: 298 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 299 300 "use strict"; 301 302 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 303 if (k2 === undefined) k2 = k; 304 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 305 }) : (function(o, m, k, k2) { 306 if (k2 === undefined) k2 = k; 307 o[k2] = m[k]; 308 })); 309 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 310 Object.defineProperty(o, "default", { enumerable: true, value: v }); 311 }) : function(o, v) { 312 o["default"] = v; 313 }); 314 var __importStar = (this && this.__importStar) || function (mod) { 315 if (mod && mod.__esModule) return mod; 316 var result = {}; 317 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 318 __setModuleDefault(result, mod); 319 return result; 320 }; 321 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 322 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 323 return new (P || (P = Promise))(function (resolve, reject) { 324 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 325 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 326 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 327 step((generator = generator.apply(thisArg, _arguments || [])).next()); 328 }); 329 }; 330 Object.defineProperty(exports, "__esModule", ({ value: true })); 331 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; 332 const command_1 = __nccwpck_require__(87351); 333 const file_command_1 = __nccwpck_require__(717); 334 const utils_1 = __nccwpck_require__(5278); 335 const os = __importStar(__nccwpck_require__(22037)); 336 const path = __importStar(__nccwpck_require__(71017)); 337 const oidc_utils_1 = __nccwpck_require__(98041); 338 /** 339 * The code to exit an action 340 */ 341 var ExitCode; 342 (function (ExitCode) { 343 /** 344 * A code indicating that the action was successful 345 */ 346 ExitCode[ExitCode["Success"] = 0] = "Success"; 347 /** 348 * A code indicating that the action was a failure 349 */ 350 ExitCode[ExitCode["Failure"] = 1] = "Failure"; 351 })(ExitCode = exports.ExitCode || (exports.ExitCode = {})); 352 //----------------------------------------------------------------------- 353 // Variables 354 //----------------------------------------------------------------------- 355 /** 356 * Sets env variable for this action and future actions in the job 357 * @param name the name of the variable to set 358 * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify 359 */ 360 // eslint-disable-next-line @typescript-eslint/no-explicit-any 361 function exportVariable(name, val) { 362 const convertedVal = utils_1.toCommandValue(val); 363 process.env[name] = convertedVal; 364 const filePath = process.env['GITHUB_ENV'] || ''; 365 if (filePath) { 366 return file_command_1.issueFileCommand('ENV', file_command_1.prepareKeyValueMessage(name, val)); 367 } 368 command_1.issueCommand('set-env', { name }, convertedVal); 369 } 370 exports.exportVariable = exportVariable; 371 /** 372 * Registers a secret which will get masked from logs 373 * @param secret value of the secret 374 */ 375 function setSecret(secret) { 376 command_1.issueCommand('add-mask', {}, secret); 377 } 378 exports.setSecret = setSecret; 379 /** 380 * Prepends inputPath to the PATH (for this action and future actions) 381 * @param inputPath 382 */ 383 function addPath(inputPath) { 384 const filePath = process.env['GITHUB_PATH'] || ''; 385 if (filePath) { 386 file_command_1.issueFileCommand('PATH', inputPath); 387 } 388 else { 389 command_1.issueCommand('add-path', {}, inputPath); 390 } 391 process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`; 392 } 393 exports.addPath = addPath; 394 /** 395 * Gets the value of an input. 396 * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed. 397 * Returns an empty string if the value is not defined. 398 * 399 * @param name name of the input to get 400 * @param options optional. See InputOptions. 401 * @returns string 402 */ 403 function getInput(name, options) { 404 const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || ''; 405 if (options && options.required && !val) { 406 throw new Error(`Input required and not supplied: ${name}`); 407 } 408 if (options && options.trimWhitespace === false) { 409 return val; 410 } 411 return val.trim(); 412 } 413 exports.getInput = getInput; 414 /** 415 * Gets the values of an multiline input. Each value is also trimmed. 416 * 417 * @param name name of the input to get 418 * @param options optional. See InputOptions. 419 * @returns string[] 420 * 421 */ 422 function getMultilineInput(name, options) { 423 const inputs = getInput(name, options) 424 .split('\n') 425 .filter(x => x !== ''); 426 if (options && options.trimWhitespace === false) { 427 return inputs; 428 } 429 return inputs.map(input => input.trim()); 430 } 431 exports.getMultilineInput = getMultilineInput; 432 /** 433 * Gets the input value of the boolean type in the YAML 1.2 "core schema" specification. 434 * Support boolean input list: `true | True | TRUE | false | False | FALSE` . 435 * The return value is also in boolean type. 436 * ref: https://yaml.org/spec/1.2/spec.html#id2804923 437 * 438 * @param name name of the input to get 439 * @param options optional. See InputOptions. 440 * @returns boolean 441 */ 442 function getBooleanInput(name, options) { 443 const trueValue = ['true', 'True', 'TRUE']; 444 const falseValue = ['false', 'False', 'FALSE']; 445 const val = getInput(name, options); 446 if (trueValue.includes(val)) 447 return true; 448 if (falseValue.includes(val)) 449 return false; 450 throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name}\n` + 451 `Support boolean input list: \`true | True | TRUE | false | False | FALSE\``); 452 } 453 exports.getBooleanInput = getBooleanInput; 454 /** 455 * Sets the value of an output. 456 * 457 * @param name name of the output to set 458 * @param value value to store. Non-string values will be converted to a string via JSON.stringify 459 */ 460 // eslint-disable-next-line @typescript-eslint/no-explicit-any 461 function setOutput(name, value) { 462 const filePath = process.env['GITHUB_OUTPUT'] || ''; 463 if (filePath) { 464 return file_command_1.issueFileCommand('OUTPUT', file_command_1.prepareKeyValueMessage(name, value)); 465 } 466 process.stdout.write(os.EOL); 467 command_1.issueCommand('set-output', { name }, utils_1.toCommandValue(value)); 468 } 469 exports.setOutput = setOutput; 470 /** 471 * Enables or disables the echoing of commands into stdout for the rest of the step. 472 * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set. 473 * 474 */ 475 function setCommandEcho(enabled) { 476 command_1.issue('echo', enabled ? 'on' : 'off'); 477 } 478 exports.setCommandEcho = setCommandEcho; 479 //----------------------------------------------------------------------- 480 // Results 481 //----------------------------------------------------------------------- 482 /** 483 * Sets the action status to failed. 484 * When the action exits it will be with an exit code of 1 485 * @param message add error issue message 486 */ 487 function setFailed(message) { 488 process.exitCode = ExitCode.Failure; 489 error(message); 490 } 491 exports.setFailed = setFailed; 492 //----------------------------------------------------------------------- 493 // Logging Commands 494 //----------------------------------------------------------------------- 495 /** 496 * Gets whether Actions Step Debug is on or not 497 */ 498 function isDebug() { 499 return process.env['RUNNER_DEBUG'] === '1'; 500 } 501 exports.isDebug = isDebug; 502 /** 503 * Writes debug message to user log 504 * @param message debug message 505 */ 506 function debug(message) { 507 command_1.issueCommand('debug', {}, message); 508 } 509 exports.debug = debug; 510 /** 511 * Adds an error issue 512 * @param message error issue message. Errors will be converted to string via toString() 513 * @param properties optional properties to add to the annotation. 514 */ 515 function error(message, properties = {}) { 516 command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); 517 } 518 exports.error = error; 519 /** 520 * Adds a warning issue 521 * @param message warning issue message. Errors will be converted to string via toString() 522 * @param properties optional properties to add to the annotation. 523 */ 524 function warning(message, properties = {}) { 525 command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); 526 } 527 exports.warning = warning; 528 /** 529 * Adds a notice issue 530 * @param message notice issue message. Errors will be converted to string via toString() 531 * @param properties optional properties to add to the annotation. 532 */ 533 function notice(message, properties = {}) { 534 command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); 535 } 536 exports.notice = notice; 537 /** 538 * Writes info to log with console.log. 539 * @param message info message 540 */ 541 function info(message) { 542 process.stdout.write(message + os.EOL); 543 } 544 exports.info = info; 545 /** 546 * Begin an output group. 547 * 548 * Output until the next `groupEnd` will be foldable in this group 549 * 550 * @param name The name of the output group 551 */ 552 function startGroup(name) { 553 command_1.issue('group', name); 554 } 555 exports.startGroup = startGroup; 556 /** 557 * End an output group. 558 */ 559 function endGroup() { 560 command_1.issue('endgroup'); 561 } 562 exports.endGroup = endGroup; 563 /** 564 * Wrap an asynchronous function call in a group. 565 * 566 * Returns the same type as the function itself. 567 * 568 * @param name The name of the group 569 * @param fn The function to wrap in the group 570 */ 571 function group(name, fn) { 572 return __awaiter(this, void 0, void 0, function* () { 573 startGroup(name); 574 let result; 575 try { 576 result = yield fn(); 577 } 578 finally { 579 endGroup(); 580 } 581 return result; 582 }); 583 } 584 exports.group = group; 585 //----------------------------------------------------------------------- 586 // Wrapper action state 587 //----------------------------------------------------------------------- 588 /** 589 * Saves state for current action, the state can only be retrieved by this action's post job execution. 590 * 591 * @param name name of the state to store 592 * @param value value to store. Non-string values will be converted to a string via JSON.stringify 593 */ 594 // eslint-disable-next-line @typescript-eslint/no-explicit-any 595 function saveState(name, value) { 596 const filePath = process.env['GITHUB_STATE'] || ''; 597 if (filePath) { 598 return file_command_1.issueFileCommand('STATE', file_command_1.prepareKeyValueMessage(name, value)); 599 } 600 command_1.issueCommand('save-state', { name }, utils_1.toCommandValue(value)); 601 } 602 exports.saveState = saveState; 603 /** 604 * Gets the value of an state set by this action's main execution. 605 * 606 * @param name name of the state to get 607 * @returns string 608 */ 609 function getState(name) { 610 return process.env[`STATE_${name}`] || ''; 611 } 612 exports.getState = getState; 613 function getIDToken(aud) { 614 return __awaiter(this, void 0, void 0, function* () { 615 return yield oidc_utils_1.OidcClient.getIDToken(aud); 616 }); 617 } 618 exports.getIDToken = getIDToken; 619 /** 620 * Summary exports 621 */ 622 var summary_1 = __nccwpck_require__(81327); 623 Object.defineProperty(exports, "summary", ({ enumerable: true, get: function () { return summary_1.summary; } })); 624 /** 625 * @deprecated use core.summary 626 */ 627 var summary_2 = __nccwpck_require__(81327); 628 Object.defineProperty(exports, "markdownSummary", ({ enumerable: true, get: function () { return summary_2.markdownSummary; } })); 629 /** 630 * Path exports 631 */ 632 var path_utils_1 = __nccwpck_require__(2981); 633 Object.defineProperty(exports, "toPosixPath", ({ enumerable: true, get: function () { return path_utils_1.toPosixPath; } })); 634 Object.defineProperty(exports, "toWin32Path", ({ enumerable: true, get: function () { return path_utils_1.toWin32Path; } })); 635 Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: function () { return path_utils_1.toPlatformPath; } })); 636 //# sourceMappingURL=core.js.map 637 638 /***/ }), 639 640 /***/ 717: 641 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 642 643 "use strict"; 644 645 // For internal use, subject to change. 646 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 647 if (k2 === undefined) k2 = k; 648 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 649 }) : (function(o, m, k, k2) { 650 if (k2 === undefined) k2 = k; 651 o[k2] = m[k]; 652 })); 653 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 654 Object.defineProperty(o, "default", { enumerable: true, value: v }); 655 }) : function(o, v) { 656 o["default"] = v; 657 }); 658 var __importStar = (this && this.__importStar) || function (mod) { 659 if (mod && mod.__esModule) return mod; 660 var result = {}; 661 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 662 __setModuleDefault(result, mod); 663 return result; 664 }; 665 Object.defineProperty(exports, "__esModule", ({ value: true })); 666 exports.prepareKeyValueMessage = exports.issueFileCommand = void 0; 667 // We use any as a valid input type 668 /* eslint-disable @typescript-eslint/no-explicit-any */ 669 const fs = __importStar(__nccwpck_require__(57147)); 670 const os = __importStar(__nccwpck_require__(22037)); 671 const uuid_1 = __nccwpck_require__(75840); 672 const utils_1 = __nccwpck_require__(5278); 673 function issueFileCommand(command, message) { 674 const filePath = process.env[`GITHUB_${command}`]; 675 if (!filePath) { 676 throw new Error(`Unable to find environment variable for file command ${command}`); 677 } 678 if (!fs.existsSync(filePath)) { 679 throw new Error(`Missing file at path: ${filePath}`); 680 } 681 fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, { 682 encoding: 'utf8' 683 }); 684 } 685 exports.issueFileCommand = issueFileCommand; 686 function prepareKeyValueMessage(key, value) { 687 const delimiter = `ghadelimiter_${uuid_1.v4()}`; 688 const convertedValue = utils_1.toCommandValue(value); 689 // These should realistically never happen, but just in case someone finds a 690 // way to exploit uuid generation let's not allow keys or values that contain 691 // the delimiter. 692 if (key.includes(delimiter)) { 693 throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter}"`); 694 } 695 if (convertedValue.includes(delimiter)) { 696 throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter}"`); 697 } 698 return `${key}<<${delimiter}${os.EOL}${convertedValue}${os.EOL}${delimiter}`; 699 } 700 exports.prepareKeyValueMessage = prepareKeyValueMessage; 701 //# sourceMappingURL=file-command.js.map 702 703 /***/ }), 704 705 /***/ 98041: 706 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 707 708 "use strict"; 709 710 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 711 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 712 return new (P || (P = Promise))(function (resolve, reject) { 713 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 714 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 715 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 716 step((generator = generator.apply(thisArg, _arguments || [])).next()); 717 }); 718 }; 719 Object.defineProperty(exports, "__esModule", ({ value: true })); 720 exports.OidcClient = void 0; 721 const http_client_1 = __nccwpck_require__(96255); 722 const auth_1 = __nccwpck_require__(35526); 723 const core_1 = __nccwpck_require__(42186); 724 class OidcClient { 725 static createHttpClient(allowRetry = true, maxRetry = 10) { 726 const requestOptions = { 727 allowRetries: allowRetry, 728 maxRetries: maxRetry 729 }; 730 return new http_client_1.HttpClient('actions/oidc-client', [new auth_1.BearerCredentialHandler(OidcClient.getRequestToken())], requestOptions); 731 } 732 static getRequestToken() { 733 const token = process.env['ACTIONS_ID_TOKEN_REQUEST_TOKEN']; 734 if (!token) { 735 throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable'); 736 } 737 return token; 738 } 739 static getIDTokenUrl() { 740 const runtimeUrl = process.env['ACTIONS_ID_TOKEN_REQUEST_URL']; 741 if (!runtimeUrl) { 742 throw new Error('Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable'); 743 } 744 return runtimeUrl; 745 } 746 static getCall(id_token_url) { 747 var _a; 748 return __awaiter(this, void 0, void 0, function* () { 749 const httpclient = OidcClient.createHttpClient(); 750 const res = yield httpclient 751 .getJson(id_token_url) 752 .catch(error => { 753 throw new Error(`Failed to get ID Token. \n 754 Error Code : ${error.statusCode}\n 755 Error Message: ${error.message}`); 756 }); 757 const id_token = (_a = res.result) === null || _a === void 0 ? void 0 : _a.value; 758 if (!id_token) { 759 throw new Error('Response json body do not have ID Token field'); 760 } 761 return id_token; 762 }); 763 } 764 static getIDToken(audience) { 765 return __awaiter(this, void 0, void 0, function* () { 766 try { 767 // New ID Token is requested from action service 768 let id_token_url = OidcClient.getIDTokenUrl(); 769 if (audience) { 770 const encodedAudience = encodeURIComponent(audience); 771 id_token_url = `${id_token_url}&audience=${encodedAudience}`; 772 } 773 core_1.debug(`ID token url is ${id_token_url}`); 774 const id_token = yield OidcClient.getCall(id_token_url); 775 core_1.setSecret(id_token); 776 return id_token; 777 } 778 catch (error) { 779 throw new Error(`Error message: ${error.message}`); 780 } 781 }); 782 } 783 } 784 exports.OidcClient = OidcClient; 785 //# sourceMappingURL=oidc-utils.js.map 786 787 /***/ }), 788 789 /***/ 2981: 790 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 791 792 "use strict"; 793 794 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 795 if (k2 === undefined) k2 = k; 796 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 797 }) : (function(o, m, k, k2) { 798 if (k2 === undefined) k2 = k; 799 o[k2] = m[k]; 800 })); 801 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 802 Object.defineProperty(o, "default", { enumerable: true, value: v }); 803 }) : function(o, v) { 804 o["default"] = v; 805 }); 806 var __importStar = (this && this.__importStar) || function (mod) { 807 if (mod && mod.__esModule) return mod; 808 var result = {}; 809 if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 810 __setModuleDefault(result, mod); 811 return result; 812 }; 813 Object.defineProperty(exports, "__esModule", ({ value: true })); 814 exports.toPlatformPath = exports.toWin32Path = exports.toPosixPath = void 0; 815 const path = __importStar(__nccwpck_require__(71017)); 816 /** 817 * toPosixPath converts the given path to the posix form. On Windows, \\ will be 818 * replaced with /. 819 * 820 * @param pth. Path to transform. 821 * @return string Posix path. 822 */ 823 function toPosixPath(pth) { 824 return pth.replace(/[\\]/g, '/'); 825 } 826 exports.toPosixPath = toPosixPath; 827 /** 828 * toWin32Path converts the given path to the win32 form. On Linux, / will be 829 * replaced with \\. 830 * 831 * @param pth. Path to transform. 832 * @return string Win32 path. 833 */ 834 function toWin32Path(pth) { 835 return pth.replace(/[/]/g, '\\'); 836 } 837 exports.toWin32Path = toWin32Path; 838 /** 839 * toPlatformPath converts the given path to a platform-specific path. It does 840 * this by replacing instances of / and \ with the platform-specific path 841 * separator. 842 * 843 * @param pth The path to platformize. 844 * @return string The platform-specific path. 845 */ 846 function toPlatformPath(pth) { 847 return pth.replace(/[/\\]/g, path.sep); 848 } 849 exports.toPlatformPath = toPlatformPath; 850 //# sourceMappingURL=path-utils.js.map 851 852 /***/ }), 853 854 /***/ 81327: 855 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 856 857 "use strict"; 858 859 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 860 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 861 return new (P || (P = Promise))(function (resolve, reject) { 862 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 863 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 864 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 865 step((generator = generator.apply(thisArg, _arguments || [])).next()); 866 }); 867 }; 868 Object.defineProperty(exports, "__esModule", ({ value: true })); 869 exports.summary = exports.markdownSummary = exports.SUMMARY_DOCS_URL = exports.SUMMARY_ENV_VAR = void 0; 870 const os_1 = __nccwpck_require__(22037); 871 const fs_1 = __nccwpck_require__(57147); 872 const { access, appendFile, writeFile } = fs_1.promises; 873 exports.SUMMARY_ENV_VAR = 'GITHUB_STEP_SUMMARY'; 874 exports.SUMMARY_DOCS_URL = 'https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary'; 875 class Summary { 876 constructor() { 877 this._buffer = ''; 878 } 879 /** 880 * Finds the summary file path from the environment, rejects if env var is not found or file does not exist 881 * Also checks r/w permissions. 882 * 883 * @returns step summary file path 884 */ 885 filePath() { 886 return __awaiter(this, void 0, void 0, function* () { 887 if (this._filePath) { 888 return this._filePath; 889 } 890 const pathFromEnv = process.env[exports.SUMMARY_ENV_VAR]; 891 if (!pathFromEnv) { 892 throw new Error(`Unable to find environment variable for $${exports.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`); 893 } 894 try { 895 yield access(pathFromEnv, fs_1.constants.R_OK | fs_1.constants.W_OK); 896 } 897 catch (_a) { 898 throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`); 899 } 900 this._filePath = pathFromEnv; 901 return this._filePath; 902 }); 903 } 904 /** 905 * Wraps content in an HTML tag, adding any HTML attributes 906 * 907 * @param {string} tag HTML tag to wrap 908 * @param {string | null} content content within the tag 909 * @param {[attribute: string]: string} attrs key-value list of HTML attributes to add 910 * 911 * @returns {string} content wrapped in HTML element 912 */ 913 wrap(tag, content, attrs = {}) { 914 const htmlAttrs = Object.entries(attrs) 915 .map(([key, value]) => ` ${key}="${value}"`) 916 .join(''); 917 if (!content) { 918 return `<${tag}${htmlAttrs}>`; 919 } 920 return `<${tag}${htmlAttrs}>${content}</${tag}>`; 921 } 922 /** 923 * Writes text in the buffer to the summary buffer file and empties buffer. Will append by default. 924 * 925 * @param {SummaryWriteOptions} [options] (optional) options for write operation 926 * 927 * @returns {Promise<Summary>} summary instance 928 */ 929 write(options) { 930 return __awaiter(this, void 0, void 0, function* () { 931 const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite); 932 const filePath = yield this.filePath(); 933 const writeFunc = overwrite ? writeFile : appendFile; 934 yield writeFunc(filePath, this._buffer, { encoding: 'utf8' }); 935 return this.emptyBuffer(); 936 }); 937 } 938 /** 939 * Clears the summary buffer and wipes the summary file 940 * 941 * @returns {Summary} summary instance 942 */ 943 clear() { 944 return __awaiter(this, void 0, void 0, function* () { 945 return this.emptyBuffer().write({ overwrite: true }); 946 }); 947 } 948 /** 949 * Returns the current summary buffer as a string 950 * 951 * @returns {string} string of summary buffer 952 */ 953 stringify() { 954 return this._buffer; 955 } 956 /** 957 * If the summary buffer is empty 958 * 959 * @returns {boolen} true if the buffer is empty 960 */ 961 isEmptyBuffer() { 962 return this._buffer.length === 0; 963 } 964 /** 965 * Resets the summary buffer without writing to summary file 966 * 967 * @returns {Summary} summary instance 968 */ 969 emptyBuffer() { 970 this._buffer = ''; 971 return this; 972 } 973 /** 974 * Adds raw text to the summary buffer 975 * 976 * @param {string} text content to add 977 * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false) 978 * 979 * @returns {Summary} summary instance 980 */ 981 addRaw(text, addEOL = false) { 982 this._buffer += text; 983 return addEOL ? this.addEOL() : this; 984 } 985 /** 986 * Adds the operating system-specific end-of-line marker to the buffer 987 * 988 * @returns {Summary} summary instance 989 */ 990 addEOL() { 991 return this.addRaw(os_1.EOL); 992 } 993 /** 994 * Adds an HTML codeblock to the summary buffer 995 * 996 * @param {string} code content to render within fenced code block 997 * @param {string} lang (optional) language to syntax highlight code 998 * 999 * @returns {Summary} summary instance 1000 */ 1001 addCodeBlock(code, lang) { 1002 const attrs = Object.assign({}, (lang && { lang })); 1003 const element = this.wrap('pre', this.wrap('code', code), attrs); 1004 return this.addRaw(element).addEOL(); 1005 } 1006 /** 1007 * Adds an HTML list to the summary buffer 1008 * 1009 * @param {string[]} items list of items to render 1010 * @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false) 1011 * 1012 * @returns {Summary} summary instance 1013 */ 1014 addList(items, ordered = false) { 1015 const tag = ordered ? 'ol' : 'ul'; 1016 const listItems = items.map(item => this.wrap('li', item)).join(''); 1017 const element = this.wrap(tag, listItems); 1018 return this.addRaw(element).addEOL(); 1019 } 1020 /** 1021 * Adds an HTML table to the summary buffer 1022 * 1023 * @param {SummaryTableCell[]} rows table rows 1024 * 1025 * @returns {Summary} summary instance 1026 */ 1027 addTable(rows) { 1028 const tableBody = rows 1029 .map(row => { 1030 const cells = row 1031 .map(cell => { 1032 if (typeof cell === 'string') { 1033 return this.wrap('td', cell); 1034 } 1035 const { header, data, colspan, rowspan } = cell; 1036 const tag = header ? 'th' : 'td'; 1037 const attrs = Object.assign(Object.assign({}, (colspan && { colspan })), (rowspan && { rowspan })); 1038 return this.wrap(tag, data, attrs); 1039 }) 1040 .join(''); 1041 return this.wrap('tr', cells); 1042 }) 1043 .join(''); 1044 const element = this.wrap('table', tableBody); 1045 return this.addRaw(element).addEOL(); 1046 } 1047 /** 1048 * Adds a collapsable HTML details element to the summary buffer 1049 * 1050 * @param {string} label text for the closed state 1051 * @param {string} content collapsable content 1052 * 1053 * @returns {Summary} summary instance 1054 */ 1055 addDetails(label, content) { 1056 const element = this.wrap('details', this.wrap('summary', label) + content); 1057 return this.addRaw(element).addEOL(); 1058 } 1059 /** 1060 * Adds an HTML image tag to the summary buffer 1061 * 1062 * @param {string} src path to the image you to embed 1063 * @param {string} alt text description of the image 1064 * @param {SummaryImageOptions} options (optional) addition image attributes 1065 * 1066 * @returns {Summary} summary instance 1067 */ 1068 addImage(src, alt, options) { 1069 const { width, height } = options || {}; 1070 const attrs = Object.assign(Object.assign({}, (width && { width })), (height && { height })); 1071 const element = this.wrap('img', null, Object.assign({ src, alt }, attrs)); 1072 return this.addRaw(element).addEOL(); 1073 } 1074 /** 1075 * Adds an HTML section heading element 1076 * 1077 * @param {string} text heading text 1078 * @param {number | string} [level=1] (optional) the heading level, default: 1 1079 * 1080 * @returns {Summary} summary instance 1081 */ 1082 addHeading(text, level) { 1083 const tag = `h${level}`; 1084 const allowedTag = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag) 1085 ? tag 1086 : 'h1'; 1087 const element = this.wrap(allowedTag, text); 1088 return this.addRaw(element).addEOL(); 1089 } 1090 /** 1091 * Adds an HTML thematic break (<hr>) to the summary buffer 1092 * 1093 * @returns {Summary} summary instance 1094 */ 1095 addSeparator() { 1096 const element = this.wrap('hr', null); 1097 return this.addRaw(element).addEOL(); 1098 } 1099 /** 1100 * Adds an HTML line break (<br>) to the summary buffer 1101 * 1102 * @returns {Summary} summary instance 1103 */ 1104 addBreak() { 1105 const element = this.wrap('br', null); 1106 return this.addRaw(element).addEOL(); 1107 } 1108 /** 1109 * Adds an HTML blockquote to the summary buffer 1110 * 1111 * @param {string} text quote text 1112 * @param {string} cite (optional) citation url 1113 * 1114 * @returns {Summary} summary instance 1115 */ 1116 addQuote(text, cite) { 1117 const attrs = Object.assign({}, (cite && { cite })); 1118 const element = this.wrap('blockquote', text, attrs); 1119 return this.addRaw(element).addEOL(); 1120 } 1121 /** 1122 * Adds an HTML anchor tag to the summary buffer 1123 * 1124 * @param {string} text link text/content 1125 * @param {string} href hyperlink 1126 * 1127 * @returns {Summary} summary instance 1128 */ 1129 addLink(text, href) { 1130 const element = this.wrap('a', text, { href }); 1131 return this.addRaw(element).addEOL(); 1132 } 1133 } 1134 const _summary = new Summary(); 1135 /** 1136 * @deprecated use `core.summary` 1137 */ 1138 exports.markdownSummary = _summary; 1139 exports.summary = _summary; 1140 //# sourceMappingURL=summary.js.map 1141 1142 /***/ }), 1143 1144 /***/ 5278: 1145 /***/ ((__unused_webpack_module, exports) => { 1146 1147 "use strict"; 1148 1149 // We use any as a valid input type 1150 /* eslint-disable @typescript-eslint/no-explicit-any */ 1151 Object.defineProperty(exports, "__esModule", ({ value: true })); 1152 exports.toCommandProperties = exports.toCommandValue = void 0; 1153 /** 1154 * Sanitizes an input into a string so it can be passed into issueCommand safely 1155 * @param input input to sanitize into a string 1156 */ 1157 function toCommandValue(input) { 1158 if (input === null || input === undefined) { 1159 return ''; 1160 } 1161 else if (typeof input === 'string' || input instanceof String) { 1162 return input; 1163 } 1164 return JSON.stringify(input); 1165 } 1166 exports.toCommandValue = toCommandValue; 1167 /** 1168 * 1169 * @param annotationProperties 1170 * @returns The command properties to send with the actual annotation command 1171 * See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646 1172 */ 1173 function toCommandProperties(annotationProperties) { 1174 if (!Object.keys(annotationProperties).length) { 1175 return {}; 1176 } 1177 return { 1178 title: annotationProperties.title, 1179 file: annotationProperties.file, 1180 line: annotationProperties.startLine, 1181 endLine: annotationProperties.endLine, 1182 col: annotationProperties.startColumn, 1183 endColumn: annotationProperties.endColumn 1184 }; 1185 } 1186 exports.toCommandProperties = toCommandProperties; 1187 //# sourceMappingURL=utils.js.map 1188 1189 /***/ }), 1190 1191 /***/ 74087: 1192 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 1193 1194 "use strict"; 1195 1196 Object.defineProperty(exports, "__esModule", ({ value: true })); 1197 exports.Context = void 0; 1198 const fs_1 = __nccwpck_require__(57147); 1199 const os_1 = __nccwpck_require__(22037); 1200 class Context { 1201 /** 1202 * Hydrate the context from the environment 1203 */ 1204 constructor() { 1205 var _a, _b, _c; 1206 this.payload = {}; 1207 if (process.env.GITHUB_EVENT_PATH) { 1208 if ((0, fs_1.existsSync)(process.env.GITHUB_EVENT_PATH)) { 1209 this.payload = JSON.parse((0, fs_1.readFileSync)(process.env.GITHUB_EVENT_PATH, { encoding: 'utf8' })); 1210 } 1211 else { 1212 const path = process.env.GITHUB_EVENT_PATH; 1213 process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.EOL}`); 1214 } 1215 } 1216 this.eventName = process.env.GITHUB_EVENT_NAME; 1217 this.sha = process.env.GITHUB_SHA; 1218 this.ref = process.env.GITHUB_REF; 1219 this.workflow = process.env.GITHUB_WORKFLOW; 1220 this.action = process.env.GITHUB_ACTION; 1221 this.actor = process.env.GITHUB_ACTOR; 1222 this.job = process.env.GITHUB_JOB; 1223 this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10); 1224 this.runId = parseInt(process.env.GITHUB_RUN_ID, 10); 1225 this.apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== void 0 ? _a : `https://api.github.com`; 1226 this.serverUrl = (_b = process.env.GITHUB_SERVER_URL) !== null && _b !== void 0 ? _b : `https://github.com`; 1227 this.graphqlUrl = 1228 (_c = process.env.GITHUB_GRAPHQL_URL) !== null && _c !== void 0 ? _c : `https://api.github.com/graphql`; 1229 } 1230 get issue() { 1231 const payload = this.payload; 1232 return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number }); 1233 } 1234 get repo() { 1235 if (process.env.GITHUB_REPOSITORY) { 1236 const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/'); 1237 return { owner, repo }; 1238 } 1239 if (this.payload.repository) { 1240 return { 1241 owner: this.payload.repository.owner.login, 1242 repo: this.payload.repository.name 1243 }; 1244 } 1245 throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'"); 1246 } 1247 } 1248 exports.Context = Context; 1249 //# sourceMappingURL=context.js.map 1250 1251 /***/ }), 1252 1253 /***/ 95438: 1254 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 1255 1256 "use strict"; 1257 1258 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 1259 if (k2 === undefined) k2 = k; 1260 var desc = Object.getOwnPropertyDescriptor(m, k); 1261 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 1262 desc = { enumerable: true, get: function() { return m[k]; } }; 1263 } 1264 Object.defineProperty(o, k2, desc); 1265 }) : (function(o, m, k, k2) { 1266 if (k2 === undefined) k2 = k; 1267 o[k2] = m[k]; 1268 })); 1269 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 1270 Object.defineProperty(o, "default", { enumerable: true, value: v }); 1271 }) : function(o, v) { 1272 o["default"] = v; 1273 }); 1274 var __importStar = (this && this.__importStar) || function (mod) { 1275 if (mod && mod.__esModule) return mod; 1276 var result = {}; 1277 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 1278 __setModuleDefault(result, mod); 1279 return result; 1280 }; 1281 Object.defineProperty(exports, "__esModule", ({ value: true })); 1282 exports.getOctokit = exports.context = void 0; 1283 const Context = __importStar(__nccwpck_require__(74087)); 1284 const utils_1 = __nccwpck_require__(73030); 1285 exports.context = new Context.Context(); 1286 /** 1287 * Returns a hydrated octokit ready to use for GitHub Actions 1288 * 1289 * @param token the repo PAT or GITHUB_TOKEN 1290 * @param options other options to set 1291 */ 1292 function getOctokit(token, options, ...additionalPlugins) { 1293 const GitHubWithPlugins = utils_1.GitHub.plugin(...additionalPlugins); 1294 return new GitHubWithPlugins((0, utils_1.getOctokitOptions)(token, options)); 1295 } 1296 exports.getOctokit = getOctokit; 1297 //# sourceMappingURL=github.js.map 1298 1299 /***/ }), 1300 1301 /***/ 47914: 1302 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 1303 1304 "use strict"; 1305 1306 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 1307 if (k2 === undefined) k2 = k; 1308 var desc = Object.getOwnPropertyDescriptor(m, k); 1309 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 1310 desc = { enumerable: true, get: function() { return m[k]; } }; 1311 } 1312 Object.defineProperty(o, k2, desc); 1313 }) : (function(o, m, k, k2) { 1314 if (k2 === undefined) k2 = k; 1315 o[k2] = m[k]; 1316 })); 1317 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 1318 Object.defineProperty(o, "default", { enumerable: true, value: v }); 1319 }) : function(o, v) { 1320 o["default"] = v; 1321 }); 1322 var __importStar = (this && this.__importStar) || function (mod) { 1323 if (mod && mod.__esModule) return mod; 1324 var result = {}; 1325 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 1326 __setModuleDefault(result, mod); 1327 return result; 1328 }; 1329 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 1330 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 1331 return new (P || (P = Promise))(function (resolve, reject) { 1332 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 1333 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 1334 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 1335 step((generator = generator.apply(thisArg, _arguments || [])).next()); 1336 }); 1337 }; 1338 Object.defineProperty(exports, "__esModule", ({ value: true })); 1339 exports.getApiBaseUrl = exports.getProxyFetch = exports.getProxyAgentDispatcher = exports.getProxyAgent = exports.getAuthString = void 0; 1340 const httpClient = __importStar(__nccwpck_require__(96255)); 1341 const undici_1 = __nccwpck_require__(41773); 1342 function getAuthString(token, options) { 1343 if (!token && !options.auth) { 1344 throw new Error('Parameter token or opts.auth is required'); 1345 } 1346 else if (token && options.auth) { 1347 throw new Error('Parameters token and opts.auth may not both be specified'); 1348 } 1349 return typeof options.auth === 'string' ? options.auth : `token ${token}`; 1350 } 1351 exports.getAuthString = getAuthString; 1352 function getProxyAgent(destinationUrl) { 1353 const hc = new httpClient.HttpClient(); 1354 return hc.getAgent(destinationUrl); 1355 } 1356 exports.getProxyAgent = getProxyAgent; 1357 function getProxyAgentDispatcher(destinationUrl) { 1358 const hc = new httpClient.HttpClient(); 1359 return hc.getAgentDispatcher(destinationUrl); 1360 } 1361 exports.getProxyAgentDispatcher = getProxyAgentDispatcher; 1362 function getProxyFetch(destinationUrl) { 1363 const httpDispatcher = getProxyAgentDispatcher(destinationUrl); 1364 const proxyFetch = (url, opts) => __awaiter(this, void 0, void 0, function* () { 1365 return (0, undici_1.fetch)(url, Object.assign(Object.assign({}, opts), { dispatcher: httpDispatcher })); 1366 }); 1367 return proxyFetch; 1368 } 1369 exports.getProxyFetch = getProxyFetch; 1370 function getApiBaseUrl() { 1371 return process.env['GITHUB_API_URL'] || 'https://api.github.com'; 1372 } 1373 exports.getApiBaseUrl = getApiBaseUrl; 1374 //# sourceMappingURL=utils.js.map 1375 1376 /***/ }), 1377 1378 /***/ 73030: 1379 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 1380 1381 "use strict"; 1382 1383 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 1384 if (k2 === undefined) k2 = k; 1385 var desc = Object.getOwnPropertyDescriptor(m, k); 1386 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 1387 desc = { enumerable: true, get: function() { return m[k]; } }; 1388 } 1389 Object.defineProperty(o, k2, desc); 1390 }) : (function(o, m, k, k2) { 1391 if (k2 === undefined) k2 = k; 1392 o[k2] = m[k]; 1393 })); 1394 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 1395 Object.defineProperty(o, "default", { enumerable: true, value: v }); 1396 }) : function(o, v) { 1397 o["default"] = v; 1398 }); 1399 var __importStar = (this && this.__importStar) || function (mod) { 1400 if (mod && mod.__esModule) return mod; 1401 var result = {}; 1402 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 1403 __setModuleDefault(result, mod); 1404 return result; 1405 }; 1406 Object.defineProperty(exports, "__esModule", ({ value: true })); 1407 exports.getOctokitOptions = exports.GitHub = exports.defaults = exports.context = void 0; 1408 const Context = __importStar(__nccwpck_require__(74087)); 1409 const Utils = __importStar(__nccwpck_require__(47914)); 1410 // octokit + plugins 1411 const core_1 = __nccwpck_require__(76762); 1412 const plugin_rest_endpoint_methods_1 = __nccwpck_require__(83044); 1413 const plugin_paginate_rest_1 = __nccwpck_require__(64193); 1414 exports.context = new Context.Context(); 1415 const baseUrl = Utils.getApiBaseUrl(); 1416 exports.defaults = { 1417 baseUrl, 1418 request: { 1419 agent: Utils.getProxyAgent(baseUrl), 1420 fetch: Utils.getProxyFetch(baseUrl) 1421 } 1422 }; 1423 exports.GitHub = core_1.Octokit.plugin(plugin_rest_endpoint_methods_1.restEndpointMethods, plugin_paginate_rest_1.paginateRest).defaults(exports.defaults); 1424 /** 1425 * Convience function to correctly format Octokit Options to pass into the constructor. 1426 * 1427 * @param token the repo PAT or GITHUB_TOKEN 1428 * @param options other options to set 1429 */ 1430 function getOctokitOptions(token, options) { 1431 const opts = Object.assign({}, options || {}); // Shallow clone - don't mutate the object provided by the caller 1432 // Auth 1433 const auth = Utils.getAuthString(token, opts); 1434 if (auth) { 1435 opts.auth = auth; 1436 } 1437 return opts; 1438 } 1439 exports.getOctokitOptions = getOctokitOptions; 1440 //# sourceMappingURL=utils.js.map 1441 1442 /***/ }), 1443 1444 /***/ 35526: 1445 /***/ (function(__unused_webpack_module, exports) { 1446 1447 "use strict"; 1448 1449 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 1450 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 1451 return new (P || (P = Promise))(function (resolve, reject) { 1452 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 1453 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 1454 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 1455 step((generator = generator.apply(thisArg, _arguments || [])).next()); 1456 }); 1457 }; 1458 Object.defineProperty(exports, "__esModule", ({ value: true })); 1459 exports.PersonalAccessTokenCredentialHandler = exports.BearerCredentialHandler = exports.BasicCredentialHandler = void 0; 1460 class BasicCredentialHandler { 1461 constructor(username, password) { 1462 this.username = username; 1463 this.password = password; 1464 } 1465 prepareRequest(options) { 1466 if (!options.headers) { 1467 throw Error('The request has no headers'); 1468 } 1469 options.headers['Authorization'] = `Basic ${Buffer.from(`${this.username}:${this.password}`).toString('base64')}`; 1470 } 1471 // This handler cannot handle 401 1472 canHandleAuthentication() { 1473 return false; 1474 } 1475 handleAuthentication() { 1476 return __awaiter(this, void 0, void 0, function* () { 1477 throw new Error('not implemented'); 1478 }); 1479 } 1480 } 1481 exports.BasicCredentialHandler = BasicCredentialHandler; 1482 class BearerCredentialHandler { 1483 constructor(token) { 1484 this.token = token; 1485 } 1486 // currently implements pre-authorization 1487 // TODO: support preAuth = false where it hooks on 401 1488 prepareRequest(options) { 1489 if (!options.headers) { 1490 throw Error('The request has no headers'); 1491 } 1492 options.headers['Authorization'] = `Bearer ${this.token}`; 1493 } 1494 // This handler cannot handle 401 1495 canHandleAuthentication() { 1496 return false; 1497 } 1498 handleAuthentication() { 1499 return __awaiter(this, void 0, void 0, function* () { 1500 throw new Error('not implemented'); 1501 }); 1502 } 1503 } 1504 exports.BearerCredentialHandler = BearerCredentialHandler; 1505 class PersonalAccessTokenCredentialHandler { 1506 constructor(token) { 1507 this.token = token; 1508 } 1509 // currently implements pre-authorization 1510 // TODO: support preAuth = false where it hooks on 401 1511 prepareRequest(options) { 1512 if (!options.headers) { 1513 throw Error('The request has no headers'); 1514 } 1515 options.headers['Authorization'] = `Basic ${Buffer.from(`PAT:${this.token}`).toString('base64')}`; 1516 } 1517 // This handler cannot handle 401 1518 canHandleAuthentication() { 1519 return false; 1520 } 1521 handleAuthentication() { 1522 return __awaiter(this, void 0, void 0, function* () { 1523 throw new Error('not implemented'); 1524 }); 1525 } 1526 } 1527 exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; 1528 //# sourceMappingURL=auth.js.map 1529 1530 /***/ }), 1531 1532 /***/ 96255: 1533 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 1534 1535 "use strict"; 1536 1537 /* eslint-disable @typescript-eslint/no-explicit-any */ 1538 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 1539 if (k2 === undefined) k2 = k; 1540 var desc = Object.getOwnPropertyDescriptor(m, k); 1541 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 1542 desc = { enumerable: true, get: function() { return m[k]; } }; 1543 } 1544 Object.defineProperty(o, k2, desc); 1545 }) : (function(o, m, k, k2) { 1546 if (k2 === undefined) k2 = k; 1547 o[k2] = m[k]; 1548 })); 1549 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 1550 Object.defineProperty(o, "default", { enumerable: true, value: v }); 1551 }) : function(o, v) { 1552 o["default"] = v; 1553 }); 1554 var __importStar = (this && this.__importStar) || function (mod) { 1555 if (mod && mod.__esModule) return mod; 1556 var result = {}; 1557 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 1558 __setModuleDefault(result, mod); 1559 return result; 1560 }; 1561 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 1562 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 1563 return new (P || (P = Promise))(function (resolve, reject) { 1564 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 1565 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 1566 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 1567 step((generator = generator.apply(thisArg, _arguments || [])).next()); 1568 }); 1569 }; 1570 Object.defineProperty(exports, "__esModule", ({ value: true })); 1571 exports.HttpClient = exports.isHttps = exports.HttpClientResponse = exports.HttpClientError = exports.getProxyUrl = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0; 1572 const http = __importStar(__nccwpck_require__(13685)); 1573 const https = __importStar(__nccwpck_require__(95687)); 1574 const pm = __importStar(__nccwpck_require__(19835)); 1575 const tunnel = __importStar(__nccwpck_require__(74294)); 1576 const undici_1 = __nccwpck_require__(41773); 1577 var HttpCodes; 1578 (function (HttpCodes) { 1579 HttpCodes[HttpCodes["OK"] = 200] = "OK"; 1580 HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; 1581 HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; 1582 HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; 1583 HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; 1584 HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; 1585 HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; 1586 HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; 1587 HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; 1588 HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; 1589 HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; 1590 HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; 1591 HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; 1592 HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; 1593 HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; 1594 HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; 1595 HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; 1596 HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; 1597 HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; 1598 HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; 1599 HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; 1600 HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; 1601 HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; 1602 HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; 1603 HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; 1604 HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; 1605 HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; 1606 })(HttpCodes || (exports.HttpCodes = HttpCodes = {})); 1607 var Headers; 1608 (function (Headers) { 1609 Headers["Accept"] = "accept"; 1610 Headers["ContentType"] = "content-type"; 1611 })(Headers || (exports.Headers = Headers = {})); 1612 var MediaTypes; 1613 (function (MediaTypes) { 1614 MediaTypes["ApplicationJson"] = "application/json"; 1615 })(MediaTypes || (exports.MediaTypes = MediaTypes = {})); 1616 /** 1617 * Returns the proxy URL, depending upon the supplied url and proxy environment variables. 1618 * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com 1619 */ 1620 function getProxyUrl(serverUrl) { 1621 const proxyUrl = pm.getProxyUrl(new URL(serverUrl)); 1622 return proxyUrl ? proxyUrl.href : ''; 1623 } 1624 exports.getProxyUrl = getProxyUrl; 1625 const HttpRedirectCodes = [ 1626 HttpCodes.MovedPermanently, 1627 HttpCodes.ResourceMoved, 1628 HttpCodes.SeeOther, 1629 HttpCodes.TemporaryRedirect, 1630 HttpCodes.PermanentRedirect 1631 ]; 1632 const HttpResponseRetryCodes = [ 1633 HttpCodes.BadGateway, 1634 HttpCodes.ServiceUnavailable, 1635 HttpCodes.GatewayTimeout 1636 ]; 1637 const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; 1638 const ExponentialBackoffCeiling = 10; 1639 const ExponentialBackoffTimeSlice = 5; 1640 class HttpClientError extends Error { 1641 constructor(message, statusCode) { 1642 super(message); 1643 this.name = 'HttpClientError'; 1644 this.statusCode = statusCode; 1645 Object.setPrototypeOf(this, HttpClientError.prototype); 1646 } 1647 } 1648 exports.HttpClientError = HttpClientError; 1649 class HttpClientResponse { 1650 constructor(message) { 1651 this.message = message; 1652 } 1653 readBody() { 1654 return __awaiter(this, void 0, void 0, function* () { 1655 return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () { 1656 let output = Buffer.alloc(0); 1657 this.message.on('data', (chunk) => { 1658 output = Buffer.concat([output, chunk]); 1659 }); 1660 this.message.on('end', () => { 1661 resolve(output.toString()); 1662 }); 1663 })); 1664 }); 1665 } 1666 readBodyBuffer() { 1667 return __awaiter(this, void 0, void 0, function* () { 1668 return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () { 1669 const chunks = []; 1670 this.message.on('data', (chunk) => { 1671 chunks.push(chunk); 1672 }); 1673 this.message.on('end', () => { 1674 resolve(Buffer.concat(chunks)); 1675 }); 1676 })); 1677 }); 1678 } 1679 } 1680 exports.HttpClientResponse = HttpClientResponse; 1681 function isHttps(requestUrl) { 1682 const parsedUrl = new URL(requestUrl); 1683 return parsedUrl.protocol === 'https:'; 1684 } 1685 exports.isHttps = isHttps; 1686 class HttpClient { 1687 constructor(userAgent, handlers, requestOptions) { 1688 this._ignoreSslError = false; 1689 this._allowRedirects = true; 1690 this._allowRedirectDowngrade = false; 1691 this._maxRedirects = 50; 1692 this._allowRetries = false; 1693 this._maxRetries = 1; 1694 this._keepAlive = false; 1695 this._disposed = false; 1696 this.userAgent = userAgent; 1697 this.handlers = handlers || []; 1698 this.requestOptions = requestOptions; 1699 if (requestOptions) { 1700 if (requestOptions.ignoreSslError != null) { 1701 this._ignoreSslError = requestOptions.ignoreSslError; 1702 } 1703 this._socketTimeout = requestOptions.socketTimeout; 1704 if (requestOptions.allowRedirects != null) { 1705 this._allowRedirects = requestOptions.allowRedirects; 1706 } 1707 if (requestOptions.allowRedirectDowngrade != null) { 1708 this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; 1709 } 1710 if (requestOptions.maxRedirects != null) { 1711 this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); 1712 } 1713 if (requestOptions.keepAlive != null) { 1714 this._keepAlive = requestOptions.keepAlive; 1715 } 1716 if (requestOptions.allowRetries != null) { 1717 this._allowRetries = requestOptions.allowRetries; 1718 } 1719 if (requestOptions.maxRetries != null) { 1720 this._maxRetries = requestOptions.maxRetries; 1721 } 1722 } 1723 } 1724 options(requestUrl, additionalHeaders) { 1725 return __awaiter(this, void 0, void 0, function* () { 1726 return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); 1727 }); 1728 } 1729 get(requestUrl, additionalHeaders) { 1730 return __awaiter(this, void 0, void 0, function* () { 1731 return this.request('GET', requestUrl, null, additionalHeaders || {}); 1732 }); 1733 } 1734 del(requestUrl, additionalHeaders) { 1735 return __awaiter(this, void 0, void 0, function* () { 1736 return this.request('DELETE', requestUrl, null, additionalHeaders || {}); 1737 }); 1738 } 1739 post(requestUrl, data, additionalHeaders) { 1740 return __awaiter(this, void 0, void 0, function* () { 1741 return this.request('POST', requestUrl, data, additionalHeaders || {}); 1742 }); 1743 } 1744 patch(requestUrl, data, additionalHeaders) { 1745 return __awaiter(this, void 0, void 0, function* () { 1746 return this.request('PATCH', requestUrl, data, additionalHeaders || {}); 1747 }); 1748 } 1749 put(requestUrl, data, additionalHeaders) { 1750 return __awaiter(this, void 0, void 0, function* () { 1751 return this.request('PUT', requestUrl, data, additionalHeaders || {}); 1752 }); 1753 } 1754 head(requestUrl, additionalHeaders) { 1755 return __awaiter(this, void 0, void 0, function* () { 1756 return this.request('HEAD', requestUrl, null, additionalHeaders || {}); 1757 }); 1758 } 1759 sendStream(verb, requestUrl, stream, additionalHeaders) { 1760 return __awaiter(this, void 0, void 0, function* () { 1761 return this.request(verb, requestUrl, stream, additionalHeaders); 1762 }); 1763 } 1764 /** 1765 * Gets a typed object from an endpoint 1766 * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise 1767 */ 1768 getJson(requestUrl, additionalHeaders = {}) { 1769 return __awaiter(this, void 0, void 0, function* () { 1770 additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); 1771 const res = yield this.get(requestUrl, additionalHeaders); 1772 return this._processResponse(res, this.requestOptions); 1773 }); 1774 } 1775 postJson(requestUrl, obj, additionalHeaders = {}) { 1776 return __awaiter(this, void 0, void 0, function* () { 1777 const data = JSON.stringify(obj, null, 2); 1778 additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); 1779 additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); 1780 const res = yield this.post(requestUrl, data, additionalHeaders); 1781 return this._processResponse(res, this.requestOptions); 1782 }); 1783 } 1784 putJson(requestUrl, obj, additionalHeaders = {}) { 1785 return __awaiter(this, void 0, void 0, function* () { 1786 const data = JSON.stringify(obj, null, 2); 1787 additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); 1788 additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); 1789 const res = yield this.put(requestUrl, data, additionalHeaders); 1790 return this._processResponse(res, this.requestOptions); 1791 }); 1792 } 1793 patchJson(requestUrl, obj, additionalHeaders = {}) { 1794 return __awaiter(this, void 0, void 0, function* () { 1795 const data = JSON.stringify(obj, null, 2); 1796 additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); 1797 additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); 1798 const res = yield this.patch(requestUrl, data, additionalHeaders); 1799 return this._processResponse(res, this.requestOptions); 1800 }); 1801 } 1802 /** 1803 * Makes a raw http request. 1804 * All other methods such as get, post, patch, and request ultimately call this. 1805 * Prefer get, del, post and patch 1806 */ 1807 request(verb, requestUrl, data, headers) { 1808 return __awaiter(this, void 0, void 0, function* () { 1809 if (this._disposed) { 1810 throw new Error('Client has already been disposed.'); 1811 } 1812 const parsedUrl = new URL(requestUrl); 1813 let info = this._prepareRequest(verb, parsedUrl, headers); 1814 // Only perform retries on reads since writes may not be idempotent. 1815 const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) 1816 ? this._maxRetries + 1 1817 : 1; 1818 let numTries = 0; 1819 let response; 1820 do { 1821 response = yield this.requestRaw(info, data); 1822 // Check if it's an authentication challenge 1823 if (response && 1824 response.message && 1825 response.message.statusCode === HttpCodes.Unauthorized) { 1826 let authenticationHandler; 1827 for (const handler of this.handlers) { 1828 if (handler.canHandleAuthentication(response)) { 1829 authenticationHandler = handler; 1830 break; 1831 } 1832 } 1833 if (authenticationHandler) { 1834 return authenticationHandler.handleAuthentication(this, info, data); 1835 } 1836 else { 1837 // We have received an unauthorized response but have no handlers to handle it. 1838 // Let the response return to the caller. 1839 return response; 1840 } 1841 } 1842 let redirectsRemaining = this._maxRedirects; 1843 while (response.message.statusCode && 1844 HttpRedirectCodes.includes(response.message.statusCode) && 1845 this._allowRedirects && 1846 redirectsRemaining > 0) { 1847 const redirectUrl = response.message.headers['location']; 1848 if (!redirectUrl) { 1849 // if there's no location to redirect to, we won't 1850 break; 1851 } 1852 const parsedRedirectUrl = new URL(redirectUrl); 1853 if (parsedUrl.protocol === 'https:' && 1854 parsedUrl.protocol !== parsedRedirectUrl.protocol && 1855 !this._allowRedirectDowngrade) { 1856 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.'); 1857 } 1858 // we need to finish reading the response before reassigning response 1859 // which will leak the open socket. 1860 yield response.readBody(); 1861 // strip authorization header if redirected to a different hostname 1862 if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { 1863 for (const header in headers) { 1864 // header names are case insensitive 1865 if (header.toLowerCase() === 'authorization') { 1866 delete headers[header]; 1867 } 1868 } 1869 } 1870 // let's make the request with the new redirectUrl 1871 info = this._prepareRequest(verb, parsedRedirectUrl, headers); 1872 response = yield this.requestRaw(info, data); 1873 redirectsRemaining--; 1874 } 1875 if (!response.message.statusCode || 1876 !HttpResponseRetryCodes.includes(response.message.statusCode)) { 1877 // If not a retry code, return immediately instead of retrying 1878 return response; 1879 } 1880 numTries += 1; 1881 if (numTries < maxTries) { 1882 yield response.readBody(); 1883 yield this._performExponentialBackoff(numTries); 1884 } 1885 } while (numTries < maxTries); 1886 return response; 1887 }); 1888 } 1889 /** 1890 * Needs to be called if keepAlive is set to true in request options. 1891 */ 1892 dispose() { 1893 if (this._agent) { 1894 this._agent.destroy(); 1895 } 1896 this._disposed = true; 1897 } 1898 /** 1899 * Raw request. 1900 * @param info 1901 * @param data 1902 */ 1903 requestRaw(info, data) { 1904 return __awaiter(this, void 0, void 0, function* () { 1905 return new Promise((resolve, reject) => { 1906 function callbackForResult(err, res) { 1907 if (err) { 1908 reject(err); 1909 } 1910 else if (!res) { 1911 // If `err` is not passed, then `res` must be passed. 1912 reject(new Error('Unknown error')); 1913 } 1914 else { 1915 resolve(res); 1916 } 1917 } 1918 this.requestRawWithCallback(info, data, callbackForResult); 1919 }); 1920 }); 1921 } 1922 /** 1923 * Raw request with callback. 1924 * @param info 1925 * @param data 1926 * @param onResult 1927 */ 1928 requestRawWithCallback(info, data, onResult) { 1929 if (typeof data === 'string') { 1930 if (!info.options.headers) { 1931 info.options.headers = {}; 1932 } 1933 info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); 1934 } 1935 let callbackCalled = false; 1936 function handleResult(err, res) { 1937 if (!callbackCalled) { 1938 callbackCalled = true; 1939 onResult(err, res); 1940 } 1941 } 1942 const req = info.httpModule.request(info.options, (msg) => { 1943 const res = new HttpClientResponse(msg); 1944 handleResult(undefined, res); 1945 }); 1946 let socket; 1947 req.on('socket', sock => { 1948 socket = sock; 1949 }); 1950 // If we ever get disconnected, we want the socket to timeout eventually 1951 req.setTimeout(this._socketTimeout || 3 * 60000, () => { 1952 if (socket) { 1953 socket.end(); 1954 } 1955 handleResult(new Error(`Request timeout: ${info.options.path}`)); 1956 }); 1957 req.on('error', function (err) { 1958 // err has statusCode property 1959 // res should have headers 1960 handleResult(err); 1961 }); 1962 if (data && typeof data === 'string') { 1963 req.write(data, 'utf8'); 1964 } 1965 if (data && typeof data !== 'string') { 1966 data.on('close', function () { 1967 req.end(); 1968 }); 1969 data.pipe(req); 1970 } 1971 else { 1972 req.end(); 1973 } 1974 } 1975 /** 1976 * Gets an http agent. This function is useful when you need an http agent that handles 1977 * routing through a proxy server - depending upon the url and proxy environment variables. 1978 * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com 1979 */ 1980 getAgent(serverUrl) { 1981 const parsedUrl = new URL(serverUrl); 1982 return this._getAgent(parsedUrl); 1983 } 1984 getAgentDispatcher(serverUrl) { 1985 const parsedUrl = new URL(serverUrl); 1986 const proxyUrl = pm.getProxyUrl(parsedUrl); 1987 const useProxy = proxyUrl && proxyUrl.hostname; 1988 if (!useProxy) { 1989 return; 1990 } 1991 return this._getProxyAgentDispatcher(parsedUrl, proxyUrl); 1992 } 1993 _prepareRequest(method, requestUrl, headers) { 1994 const info = {}; 1995 info.parsedUrl = requestUrl; 1996 const usingSsl = info.parsedUrl.protocol === 'https:'; 1997 info.httpModule = usingSsl ? https : http; 1998 const defaultPort = usingSsl ? 443 : 80; 1999 info.options = {}; 2000 info.options.host = info.parsedUrl.hostname; 2001 info.options.port = info.parsedUrl.port 2002 ? parseInt(info.parsedUrl.port) 2003 : defaultPort; 2004 info.options.path = 2005 (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); 2006 info.options.method = method; 2007 info.options.headers = this._mergeHeaders(headers); 2008 if (this.userAgent != null) { 2009 info.options.headers['user-agent'] = this.userAgent; 2010 } 2011 info.options.agent = this._getAgent(info.parsedUrl); 2012 // gives handlers an opportunity to participate 2013 if (this.handlers) { 2014 for (const handler of this.handlers) { 2015 handler.prepareRequest(info.options); 2016 } 2017 } 2018 return info; 2019 } 2020 _mergeHeaders(headers) { 2021 if (this.requestOptions && this.requestOptions.headers) { 2022 return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {})); 2023 } 2024 return lowercaseKeys(headers || {}); 2025 } 2026 _getExistingOrDefaultHeader(additionalHeaders, header, _default) { 2027 let clientHeader; 2028 if (this.requestOptions && this.requestOptions.headers) { 2029 clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; 2030 } 2031 return additionalHeaders[header] || clientHeader || _default; 2032 } 2033 _getAgent(parsedUrl) { 2034 let agent; 2035 const proxyUrl = pm.getProxyUrl(parsedUrl); 2036 const useProxy = proxyUrl && proxyUrl.hostname; 2037 if (this._keepAlive && useProxy) { 2038 agent = this._proxyAgent; 2039 } 2040 if (!useProxy) { 2041 agent = this._agent; 2042 } 2043 // if agent is already assigned use that agent. 2044 if (agent) { 2045 return agent; 2046 } 2047 const usingSsl = parsedUrl.protocol === 'https:'; 2048 let maxSockets = 100; 2049 if (this.requestOptions) { 2050 maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; 2051 } 2052 // This is `useProxy` again, but we need to check `proxyURl` directly for TypeScripts's flow analysis. 2053 if (proxyUrl && proxyUrl.hostname) { 2054 const agentOptions = { 2055 maxSockets, 2056 keepAlive: this._keepAlive, 2057 proxy: Object.assign(Object.assign({}, ((proxyUrl.username || proxyUrl.password) && { 2058 proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` 2059 })), { host: proxyUrl.hostname, port: proxyUrl.port }) 2060 }; 2061 let tunnelAgent; 2062 const overHttps = proxyUrl.protocol === 'https:'; 2063 if (usingSsl) { 2064 tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; 2065 } 2066 else { 2067 tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; 2068 } 2069 agent = tunnelAgent(agentOptions); 2070 this._proxyAgent = agent; 2071 } 2072 // if tunneling agent isn't assigned create a new agent 2073 if (!agent) { 2074 const options = { keepAlive: this._keepAlive, maxSockets }; 2075 agent = usingSsl ? new https.Agent(options) : new http.Agent(options); 2076 this._agent = agent; 2077 } 2078 if (usingSsl && this._ignoreSslError) { 2079 // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process 2080 // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options 2081 // we have to cast it to any and change it directly 2082 agent.options = Object.assign(agent.options || {}, { 2083 rejectUnauthorized: false 2084 }); 2085 } 2086 return agent; 2087 } 2088 _getProxyAgentDispatcher(parsedUrl, proxyUrl) { 2089 let proxyAgent; 2090 if (this._keepAlive) { 2091 proxyAgent = this._proxyAgentDispatcher; 2092 } 2093 // if agent is already assigned use that agent. 2094 if (proxyAgent) { 2095 return proxyAgent; 2096 } 2097 const usingSsl = parsedUrl.protocol === 'https:'; 2098 proxyAgent = new undici_1.ProxyAgent(Object.assign({ uri: proxyUrl.href, pipelining: !this._keepAlive ? 0 : 1 }, ((proxyUrl.username || proxyUrl.password) && { 2099 token: `${proxyUrl.username}:${proxyUrl.password}` 2100 }))); 2101 this._proxyAgentDispatcher = proxyAgent; 2102 if (usingSsl && this._ignoreSslError) { 2103 // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process 2104 // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options 2105 // we have to cast it to any and change it directly 2106 proxyAgent.options = Object.assign(proxyAgent.options.requestTls || {}, { 2107 rejectUnauthorized: false 2108 }); 2109 } 2110 return proxyAgent; 2111 } 2112 _performExponentialBackoff(retryNumber) { 2113 return __awaiter(this, void 0, void 0, function* () { 2114 retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); 2115 const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); 2116 return new Promise(resolve => setTimeout(() => resolve(), ms)); 2117 }); 2118 } 2119 _processResponse(res, options) { 2120 return __awaiter(this, void 0, void 0, function* () { 2121 return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { 2122 const statusCode = res.message.statusCode || 0; 2123 const response = { 2124 statusCode, 2125 result: null, 2126 headers: {} 2127 }; 2128 // not found leads to null obj returned 2129 if (statusCode === HttpCodes.NotFound) { 2130 resolve(response); 2131 } 2132 // get the result from the body 2133 function dateTimeDeserializer(key, value) { 2134 if (typeof value === 'string') { 2135 const a = new Date(value); 2136 if (!isNaN(a.valueOf())) { 2137 return a; 2138 } 2139 } 2140 return value; 2141 } 2142 let obj; 2143 let contents; 2144 try { 2145 contents = yield res.readBody(); 2146 if (contents && contents.length > 0) { 2147 if (options && options.deserializeDates) { 2148 obj = JSON.parse(contents, dateTimeDeserializer); 2149 } 2150 else { 2151 obj = JSON.parse(contents); 2152 } 2153 response.result = obj; 2154 } 2155 response.headers = res.message.headers; 2156 } 2157 catch (err) { 2158 // Invalid resource (contents not json); leaving result obj null 2159 } 2160 // note that 3xx redirects are handled by the http layer. 2161 if (statusCode > 299) { 2162 let msg; 2163 // if exception/error in body, attempt to get better error 2164 if (obj && obj.message) { 2165 msg = obj.message; 2166 } 2167 else if (contents && contents.length > 0) { 2168 // it may be the case that the exception is in the body message as string 2169 msg = contents; 2170 } 2171 else { 2172 msg = `Failed request: (${statusCode})`; 2173 } 2174 const err = new HttpClientError(msg, statusCode); 2175 err.result = response.result; 2176 reject(err); 2177 } 2178 else { 2179 resolve(response); 2180 } 2181 })); 2182 }); 2183 } 2184 } 2185 exports.HttpClient = HttpClient; 2186 const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); 2187 //# sourceMappingURL=index.js.map 2188 2189 /***/ }), 2190 2191 /***/ 19835: 2192 /***/ ((__unused_webpack_module, exports) => { 2193 2194 "use strict"; 2195 2196 Object.defineProperty(exports, "__esModule", ({ value: true })); 2197 exports.checkBypass = exports.getProxyUrl = void 0; 2198 function getProxyUrl(reqUrl) { 2199 const usingSsl = reqUrl.protocol === 'https:'; 2200 if (checkBypass(reqUrl)) { 2201 return undefined; 2202 } 2203 const proxyVar = (() => { 2204 if (usingSsl) { 2205 return process.env['https_proxy'] || process.env['HTTPS_PROXY']; 2206 } 2207 else { 2208 return process.env['http_proxy'] || process.env['HTTP_PROXY']; 2209 } 2210 })(); 2211 if (proxyVar) { 2212 try { 2213 return new URL(proxyVar); 2214 } 2215 catch (_a) { 2216 if (!proxyVar.startsWith('http://') && !proxyVar.startsWith('https://')) 2217 return new URL(`http://${proxyVar}`); 2218 } 2219 } 2220 else { 2221 return undefined; 2222 } 2223 } 2224 exports.getProxyUrl = getProxyUrl; 2225 function checkBypass(reqUrl) { 2226 if (!reqUrl.hostname) { 2227 return false; 2228 } 2229 const reqHost = reqUrl.hostname; 2230 if (isLoopbackAddress(reqHost)) { 2231 return true; 2232 } 2233 const noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; 2234 if (!noProxy) { 2235 return false; 2236 } 2237 // Determine the request port 2238 let reqPort; 2239 if (reqUrl.port) { 2240 reqPort = Number(reqUrl.port); 2241 } 2242 else if (reqUrl.protocol === 'http:') { 2243 reqPort = 80; 2244 } 2245 else if (reqUrl.protocol === 'https:') { 2246 reqPort = 443; 2247 } 2248 // Format the request hostname and hostname with port 2249 const upperReqHosts = [reqUrl.hostname.toUpperCase()]; 2250 if (typeof reqPort === 'number') { 2251 upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); 2252 } 2253 // Compare request host against noproxy 2254 for (const upperNoProxyItem of noProxy 2255 .split(',') 2256 .map(x => x.trim().toUpperCase()) 2257 .filter(x => x)) { 2258 if (upperNoProxyItem === '*' || 2259 upperReqHosts.some(x => x === upperNoProxyItem || 2260 x.endsWith(`.${upperNoProxyItem}`) || 2261 (upperNoProxyItem.startsWith('.') && 2262 x.endsWith(`${upperNoProxyItem}`)))) { 2263 return true; 2264 } 2265 } 2266 return false; 2267 } 2268 exports.checkBypass = checkBypass; 2269 function isLoopbackAddress(host) { 2270 const hostLower = host.toLowerCase(); 2271 return (hostLower === 'localhost' || 2272 hostLower.startsWith('127.') || 2273 hostLower.startsWith('[::1]') || 2274 hostLower.startsWith('[0:0:0:0:0:0:0:1]')); 2275 } 2276 //# sourceMappingURL=proxy.js.map 2277 2278 /***/ }), 2279 2280 /***/ 28520: 2281 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 2282 2283 "use strict"; 2284 2285 2286 const net = __nccwpck_require__(41808) 2287 const tls = __nccwpck_require__(24404) 2288 const { once } = __nccwpck_require__(82361) 2289 const timers = __nccwpck_require__(68670) 2290 const { normalizeOptions, cacheOptions } = __nccwpck_require__(61709) 2291 const { getProxy, getProxyAgent, proxyCache } = __nccwpck_require__(68443) 2292 const Errors = __nccwpck_require__(74724) 2293 const { Agent: AgentBase } = __nccwpck_require__(70694) 2294 2295 module.exports = class Agent extends AgentBase { 2296 #options 2297 #timeouts 2298 #proxy 2299 #noProxy 2300 #ProxyAgent 2301 2302 constructor (options = {}) { 2303 const { timeouts, proxy, noProxy, ...normalizedOptions } = normalizeOptions(options) 2304 2305 super(normalizedOptions) 2306 2307 this.#options = normalizedOptions 2308 this.#timeouts = timeouts 2309 2310 if (proxy) { 2311 this.#proxy = new URL(proxy) 2312 this.#noProxy = noProxy 2313 this.#ProxyAgent = getProxyAgent(proxy) 2314 } 2315 } 2316 2317 get proxy () { 2318 return this.#proxy ? { url: this.#proxy } : {} 2319 } 2320 2321 #getProxy (options) { 2322 if (!this.#proxy) { 2323 return 2324 } 2325 2326 const proxy = getProxy(`${options.protocol}//${options.host}:${options.port}`, { 2327 proxy: this.#proxy, 2328 noProxy: this.#noProxy, 2329 }) 2330 2331 if (!proxy) { 2332 return 2333 } 2334 2335 const cacheKey = cacheOptions({ 2336 ...options, 2337 ...this.#options, 2338 timeouts: this.#timeouts, 2339 proxy, 2340 }) 2341 2342 if (proxyCache.has(cacheKey)) { 2343 return proxyCache.get(cacheKey) 2344 } 2345 2346 let ProxyAgent = this.#ProxyAgent 2347 if (Array.isArray(ProxyAgent)) { 2348 ProxyAgent = this.isSecureEndpoint(options) ? ProxyAgent[1] : ProxyAgent[0] 2349 } 2350 2351 const proxyAgent = new ProxyAgent(proxy, this.#options) 2352 proxyCache.set(cacheKey, proxyAgent) 2353 2354 return proxyAgent 2355 } 2356 2357 // takes an array of promises and races them against the connection timeout 2358 // which will throw the necessary error if it is hit. This will return the 2359 // result of the promise race. 2360 async #timeoutConnection ({ promises, options, timeout }, ac = new AbortController()) { 2361 if (timeout) { 2362 const connectionTimeout = timers.setTimeout(timeout, null, { signal: ac.signal }) 2363 .then(() => { 2364 throw new Errors.ConnectionTimeoutError(`${options.host}:${options.port}`) 2365 }).catch((err) => { 2366 if (err.name === 'AbortError') { 2367 return 2368 } 2369 throw err 2370 }) 2371 promises.push(connectionTimeout) 2372 } 2373 2374 let result 2375 try { 2376 result = await Promise.race(promises) 2377 ac.abort() 2378 } catch (err) { 2379 ac.abort() 2380 throw err 2381 } 2382 return result 2383 } 2384 2385 async connect (request, options) { 2386 // if the connection does not have its own lookup function 2387 // set, then use the one from our options 2388 options.lookup ??= this.#options.lookup 2389 2390 let socket 2391 let timeout = this.#timeouts.connection 2392 const isSecureEndpoint = this.isSecureEndpoint(options) 2393 2394 const proxy = this.#getProxy(options) 2395 if (proxy) { 2396 // some of the proxies will wait for the socket to fully connect before 2397 // returning so we have to await this while also racing it against the 2398 // connection timeout. 2399 const start = Date.now() 2400 socket = await this.#timeoutConnection({ 2401 options, 2402 timeout, 2403 promises: [proxy.connect(request, options)], 2404 }) 2405 // see how much time proxy.connect took and subtract it from 2406 // the timeout 2407 if (timeout) { 2408 timeout = timeout - (Date.now() - start) 2409 } 2410 } else { 2411 socket = (isSecureEndpoint ? tls : net).connect(options) 2412 } 2413 2414 socket.setKeepAlive(this.keepAlive, this.keepAliveMsecs) 2415 socket.setNoDelay(this.keepAlive) 2416 2417 const abortController = new AbortController() 2418 const { signal } = abortController 2419 2420 const connectPromise = socket[isSecureEndpoint ? 'secureConnecting' : 'connecting'] 2421 ? once(socket, isSecureEndpoint ? 'secureConnect' : 'connect', { signal }) 2422 : Promise.resolve() 2423 2424 await this.#timeoutConnection({ 2425 options, 2426 timeout, 2427 promises: [ 2428 connectPromise, 2429 once(socket, 'error', { signal }).then((err) => { 2430 throw err[0] 2431 }), 2432 ], 2433 }, abortController) 2434 2435 if (this.#timeouts.idle) { 2436 socket.setTimeout(this.#timeouts.idle, () => { 2437 socket.destroy(new Errors.IdleTimeoutError(`${options.host}:${options.port}`)) 2438 }) 2439 } 2440 2441 return socket 2442 } 2443 2444 addRequest (request, options) { 2445 const proxy = this.#getProxy(options) 2446 // it would be better to call proxy.addRequest here but this causes the 2447 // http-proxy-agent to call its super.addRequest which causes the request 2448 // to be added to the agent twice. since we only support 3 agents 2449 // currently (see the required agents in proxy.js) we have manually 2450 // checked that the only public methods we need to call are called in the 2451 // next block. this could change in the future and presumably we would get 2452 // failing tests until we have properly called the necessary methods on 2453 // each of our proxy agents 2454 if (proxy?.setRequestProps) { 2455 proxy.setRequestProps(request, options) 2456 } 2457 2458 request.setHeader('connection', this.keepAlive ? 'keep-alive' : 'close') 2459 2460 if (this.#timeouts.response) { 2461 let responseTimeout 2462 request.once('finish', () => { 2463 setTimeout(() => { 2464 request.destroy(new Errors.ResponseTimeoutError(request, this.#proxy)) 2465 }, this.#timeouts.response) 2466 }) 2467 request.once('response', () => { 2468 clearTimeout(responseTimeout) 2469 }) 2470 } 2471 2472 if (this.#timeouts.transfer) { 2473 let transferTimeout 2474 request.once('response', (res) => { 2475 setTimeout(() => { 2476 res.destroy(new Errors.TransferTimeoutError(request, this.#proxy)) 2477 }, this.#timeouts.transfer) 2478 res.once('close', () => { 2479 clearTimeout(transferTimeout) 2480 }) 2481 }) 2482 } 2483 2484 return super.addRequest(request, options) 2485 } 2486 } 2487 2488 2489 /***/ }), 2490 2491 /***/ 92292: 2492 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 2493 2494 "use strict"; 2495 2496 2497 const { LRUCache } = __nccwpck_require__(24446) 2498 const dns = __nccwpck_require__(9523) 2499 2500 // this is a factory so that each request can have its own opts (i.e. ttl) 2501 // while still sharing the cache across all requests 2502 const cache = new LRUCache({ max: 50 }) 2503 2504 const getOptions = ({ 2505 family = 0, 2506 hints = dns.ADDRCONFIG, 2507 all = false, 2508 verbatim = undefined, 2509 ttl = 5 * 60 * 1000, 2510 lookup = dns.lookup, 2511 }) => ({ 2512 // hints and lookup are returned since both are top level properties to (net|tls).connect 2513 hints, 2514 lookup: (hostname, ...args) => { 2515 const callback = args.pop() // callback is always last arg 2516 const lookupOptions = args[0] ?? {} 2517 2518 const options = { 2519 family, 2520 hints, 2521 all, 2522 verbatim, 2523 ...(typeof lookupOptions === 'number' ? { family: lookupOptions } : lookupOptions), 2524 } 2525 2526 const key = JSON.stringify({ hostname, ...options }) 2527 2528 if (cache.has(key)) { 2529 const cached = cache.get(key) 2530 return process.nextTick(callback, null, ...cached) 2531 } 2532 2533 lookup(hostname, options, (err, ...result) => { 2534 if (err) { 2535 return callback(err) 2536 } 2537 2538 cache.set(key, result, { ttl }) 2539 return callback(null, ...result) 2540 }) 2541 }, 2542 }) 2543 2544 module.exports = { 2545 cache, 2546 getOptions, 2547 } 2548 2549 2550 /***/ }), 2551 2552 /***/ 74724: 2553 /***/ ((module) => { 2554 2555 "use strict"; 2556 2557 2558 class InvalidProxyProtocolError extends Error { 2559 constructor (url) { 2560 super(`Invalid protocol \`${url.protocol}\` connecting to proxy \`${url.host}\``) 2561 this.code = 'EINVALIDPROXY' 2562 this.proxy = url 2563 } 2564 } 2565 2566 class ConnectionTimeoutError extends Error { 2567 constructor (host) { 2568 super(`Timeout connecting to host \`${host}\``) 2569 this.code = 'ECONNECTIONTIMEOUT' 2570 this.host = host 2571 } 2572 } 2573 2574 class IdleTimeoutError extends Error { 2575 constructor (host) { 2576 super(`Idle timeout reached for host \`${host}\``) 2577 this.code = 'EIDLETIMEOUT' 2578 this.host = host 2579 } 2580 } 2581 2582 class ResponseTimeoutError extends Error { 2583 constructor (request, proxy) { 2584 let msg = 'Response timeout ' 2585 if (proxy) { 2586 msg += `from proxy \`${proxy.host}\` ` 2587 } 2588 msg += `connecting to host \`${request.host}\`` 2589 super(msg) 2590 this.code = 'ERESPONSETIMEOUT' 2591 this.proxy = proxy 2592 this.request = request 2593 } 2594 } 2595 2596 class TransferTimeoutError extends Error { 2597 constructor (request, proxy) { 2598 let msg = 'Transfer timeout ' 2599 if (proxy) { 2600 msg += `from proxy \`${proxy.host}\` ` 2601 } 2602 msg += `for \`${request.host}\`` 2603 super(msg) 2604 this.code = 'ETRANSFERTIMEOUT' 2605 this.proxy = proxy 2606 this.request = request 2607 } 2608 } 2609 2610 module.exports = { 2611 InvalidProxyProtocolError, 2612 ConnectionTimeoutError, 2613 IdleTimeoutError, 2614 ResponseTimeoutError, 2615 TransferTimeoutError, 2616 } 2617 2618 2619 /***/ }), 2620 2621 /***/ 79907: 2622 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 2623 2624 "use strict"; 2625 2626 2627 const { LRUCache } = __nccwpck_require__(24446) 2628 const { normalizeOptions, cacheOptions } = __nccwpck_require__(61709) 2629 const { getProxy, proxyCache } = __nccwpck_require__(68443) 2630 const dns = __nccwpck_require__(92292) 2631 const Agent = __nccwpck_require__(28520) 2632 2633 const agentCache = new LRUCache({ max: 20 }) 2634 2635 const getAgent = (url, { agent, proxy, noProxy, ...options } = {}) => { 2636 // false has meaning so this can't be a simple truthiness check 2637 if (agent != null) { 2638 return agent 2639 } 2640 2641 url = new URL(url) 2642 2643 const proxyForUrl = getProxy(url, { proxy, noProxy }) 2644 const normalizedOptions = { 2645 ...normalizeOptions(options), 2646 proxy: proxyForUrl, 2647 } 2648 2649 const cacheKey = cacheOptions({ 2650 ...normalizedOptions, 2651 secureEndpoint: url.protocol === 'https:', 2652 }) 2653 2654 if (agentCache.has(cacheKey)) { 2655 return agentCache.get(cacheKey) 2656 } 2657 2658 const newAgent = new Agent(normalizedOptions) 2659 agentCache.set(cacheKey, newAgent) 2660 2661 return newAgent 2662 } 2663 2664 module.exports = { 2665 getAgent, 2666 Agent, 2667 // these are exported for backwards compatability 2668 HttpAgent: Agent, 2669 HttpsAgent: Agent, 2670 cache: { 2671 proxy: proxyCache, 2672 agent: agentCache, 2673 dns: dns.cache, 2674 clear: () => { 2675 proxyCache.clear() 2676 agentCache.clear() 2677 dns.cache.clear() 2678 }, 2679 }, 2680 } 2681 2682 2683 /***/ }), 2684 2685 /***/ 61709: 2686 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 2687 2688 "use strict"; 2689 2690 2691 const dns = __nccwpck_require__(92292) 2692 2693 const normalizeOptions = (opts) => { 2694 const family = parseInt(opts.family ?? '0', 10) 2695 const keepAlive = opts.keepAlive ?? true 2696 2697 const normalized = { 2698 // nodejs http agent options. these are all the defaults 2699 // but kept here to increase the likelihood of cache hits 2700 // https://nodejs.org/api/http.html#new-agentoptions 2701 keepAliveMsecs: keepAlive ? 1000 : undefined, 2702 maxSockets: opts.maxSockets ?? 15, 2703 maxTotalSockets: Infinity, 2704 maxFreeSockets: keepAlive ? 256 : undefined, 2705 scheduling: 'fifo', 2706 // then spread the rest of the options 2707 ...opts, 2708 // we already set these to their defaults that we want 2709 family, 2710 keepAlive, 2711 // our custom timeout options 2712 timeouts: { 2713 // the standard timeout option is mapped to our idle timeout 2714 // and then deleted below 2715 idle: opts.timeout ?? 0, 2716 connection: 0, 2717 response: 0, 2718 transfer: 0, 2719 ...opts.timeouts, 2720 }, 2721 // get the dns options that go at the top level of socket connection 2722 ...dns.getOptions({ family, ...opts.dns }), 2723 } 2724 2725 // remove timeout since we already used it to set our own idle timeout 2726 delete normalized.timeout 2727 2728 return normalized 2729 } 2730 2731 const createKey = (obj) => { 2732 let key = '' 2733 const sorted = Object.entries(obj).sort((a, b) => a[0] - b[0]) 2734 for (let [k, v] of sorted) { 2735 if (v == null) { 2736 v = 'null' 2737 } else if (v instanceof URL) { 2738 v = v.toString() 2739 } else if (typeof v === 'object') { 2740 v = createKey(v) 2741 } 2742 key += `${k}:${v}:` 2743 } 2744 return key 2745 } 2746 2747 const cacheOptions = ({ secureEndpoint, ...options }) => createKey({ 2748 secureEndpoint: !!secureEndpoint, 2749 // socket connect options 2750 family: options.family, 2751 hints: options.hints, 2752 localAddress: options.localAddress, 2753 // tls specific connect options 2754 strictSsl: secureEndpoint ? !!options.rejectUnauthorized : false, 2755 ca: secureEndpoint ? options.ca : null, 2756 cert: secureEndpoint ? options.cert : null, 2757 key: secureEndpoint ? options.key : null, 2758 // http agent options 2759 keepAlive: options.keepAlive, 2760 keepAliveMsecs: options.keepAliveMsecs, 2761 maxSockets: options.maxSockets, 2762 maxTotalSockets: options.maxTotalSockets, 2763 maxFreeSockets: options.maxFreeSockets, 2764 scheduling: options.scheduling, 2765 // timeout options 2766 timeouts: options.timeouts, 2767 // proxy 2768 proxy: options.proxy, 2769 }) 2770 2771 module.exports = { 2772 normalizeOptions, 2773 cacheOptions, 2774 } 2775 2776 2777 /***/ }), 2778 2779 /***/ 68443: 2780 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 2781 2782 "use strict"; 2783 2784 2785 const { HttpProxyAgent } = __nccwpck_require__(23764) 2786 const { HttpsProxyAgent } = __nccwpck_require__(77219) 2787 const { SocksProxyAgent } = __nccwpck_require__(25038) 2788 const { LRUCache } = __nccwpck_require__(24446) 2789 const { InvalidProxyProtocolError } = __nccwpck_require__(74724) 2790 2791 const PROXY_CACHE = new LRUCache({ max: 20 }) 2792 2793 const SOCKS_PROTOCOLS = new Set(SocksProxyAgent.protocols) 2794 2795 const PROXY_ENV_KEYS = new Set(['https_proxy', 'http_proxy', 'proxy', 'no_proxy']) 2796 2797 const PROXY_ENV = Object.entries(process.env).reduce((acc, [key, value]) => { 2798 key = key.toLowerCase() 2799 if (PROXY_ENV_KEYS.has(key)) { 2800 acc[key] = value 2801 } 2802 return acc 2803 }, {}) 2804 2805 const getProxyAgent = (url) => { 2806 url = new URL(url) 2807 2808 const protocol = url.protocol.slice(0, -1) 2809 if (SOCKS_PROTOCOLS.has(protocol)) { 2810 return SocksProxyAgent 2811 } 2812 if (protocol === 'https' || protocol === 'http') { 2813 return [HttpProxyAgent, HttpsProxyAgent] 2814 } 2815 2816 throw new InvalidProxyProtocolError(url) 2817 } 2818 2819 const isNoProxy = (url, noProxy) => { 2820 if (typeof noProxy === 'string') { 2821 noProxy = noProxy.split(',').map((p) => p.trim()).filter(Boolean) 2822 } 2823 2824 if (!noProxy || !noProxy.length) { 2825 return false 2826 } 2827 2828 const hostSegments = url.hostname.split('.').reverse() 2829 2830 return noProxy.some((no) => { 2831 const noSegments = no.split('.').filter(Boolean).reverse() 2832 if (!noSegments.length) { 2833 return false 2834 } 2835 2836 for (let i = 0; i < noSegments.length; i++) { 2837 if (hostSegments[i] !== noSegments[i]) { 2838 return false 2839 } 2840 } 2841 2842 return true 2843 }) 2844 } 2845 2846 const getProxy = (url, { proxy, noProxy }) => { 2847 url = new URL(url) 2848 2849 if (!proxy) { 2850 proxy = url.protocol === 'https:' 2851 ? PROXY_ENV.https_proxy 2852 : PROXY_ENV.https_proxy || PROXY_ENV.http_proxy || PROXY_ENV.proxy 2853 } 2854 2855 if (!noProxy) { 2856 noProxy = PROXY_ENV.no_proxy 2857 } 2858 2859 if (!proxy || isNoProxy(url, noProxy)) { 2860 return null 2861 } 2862 2863 return new URL(proxy) 2864 } 2865 2866 module.exports = { 2867 getProxyAgent, 2868 getProxy, 2869 proxyCache: PROXY_CACHE, 2870 } 2871 2872 2873 /***/ }), 2874 2875 /***/ 91573: 2876 /***/ ((module) => { 2877 2878 // given an input that may or may not be an object, return an object that has 2879 // a copy of every defined property listed in 'copy'. if the input is not an 2880 // object, assign it to the property named by 'wrap' 2881 const getOptions = (input, { copy, wrap }) => { 2882 const result = {} 2883 2884 if (input && typeof input === 'object') { 2885 for (const prop of copy) { 2886 if (input[prop] !== undefined) { 2887 result[prop] = input[prop] 2888 } 2889 } 2890 } else { 2891 result[wrap] = input 2892 } 2893 2894 return result 2895 } 2896 2897 module.exports = getOptions 2898 2899 2900 /***/ }), 2901 2902 /***/ 32486: 2903 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 2904 2905 const semver = __nccwpck_require__(11383) 2906 2907 const satisfies = (range) => { 2908 return semver.satisfies(process.version, range, { includePrerelease: true }) 2909 } 2910 2911 module.exports = { 2912 satisfies, 2913 } 2914 2915 2916 /***/ }), 2917 2918 /***/ 68025: 2919 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 2920 2921 "use strict"; 2922 2923 const { inspect } = __nccwpck_require__(73837) 2924 2925 // adapted from node's internal/errors 2926 // https://github.com/nodejs/node/blob/c8a04049/lib/internal/errors.js 2927 2928 // close copy of node's internal SystemError class. 2929 class SystemError { 2930 constructor (code, prefix, context) { 2931 // XXX context.code is undefined in all constructors used in cp/polyfill 2932 // that may be a bug copied from node, maybe the constructor should use 2933 // `code` not `errno`? nodejs/node#41104 2934 let message = `${prefix}: ${context.syscall} returned ` + 2935 `${context.code} (${context.message})` 2936 2937 if (context.path !== undefined) { 2938 message += ` ${context.path}` 2939 } 2940 if (context.dest !== undefined) { 2941 message += ` => ${context.dest}` 2942 } 2943 2944 this.code = code 2945 Object.defineProperties(this, { 2946 name: { 2947 value: 'SystemError', 2948 enumerable: false, 2949 writable: true, 2950 configurable: true, 2951 }, 2952 message: { 2953 value: message, 2954 enumerable: false, 2955 writable: true, 2956 configurable: true, 2957 }, 2958 info: { 2959 value: context, 2960 enumerable: true, 2961 configurable: true, 2962 writable: false, 2963 }, 2964 errno: { 2965 get () { 2966 return context.errno 2967 }, 2968 set (value) { 2969 context.errno = value 2970 }, 2971 enumerable: true, 2972 configurable: true, 2973 }, 2974 syscall: { 2975 get () { 2976 return context.syscall 2977 }, 2978 set (value) { 2979 context.syscall = value 2980 }, 2981 enumerable: true, 2982 configurable: true, 2983 }, 2984 }) 2985 2986 if (context.path !== undefined) { 2987 Object.defineProperty(this, 'path', { 2988 get () { 2989 return context.path 2990 }, 2991 set (value) { 2992 context.path = value 2993 }, 2994 enumerable: true, 2995 configurable: true, 2996 }) 2997 } 2998 2999 if (context.dest !== undefined) { 3000 Object.defineProperty(this, 'dest', { 3001 get () { 3002 return context.dest 3003 }, 3004 set (value) { 3005 context.dest = value 3006 }, 3007 enumerable: true, 3008 configurable: true, 3009 }) 3010 } 3011 } 3012 3013 toString () { 3014 return `${this.name} [${this.code}]: ${this.message}` 3015 } 3016 3017 [Symbol.for('nodejs.util.inspect.custom')] (_recurseTimes, ctx) { 3018 return inspect(this, { 3019 ...ctx, 3020 getters: true, 3021 customInspect: false, 3022 }) 3023 } 3024 } 3025 3026 function E (code, message) { 3027 module.exports[code] = class NodeError extends SystemError { 3028 constructor (ctx) { 3029 super(code, message, ctx) 3030 } 3031 } 3032 } 3033 3034 E('ERR_FS_CP_DIR_TO_NON_DIR', 'Cannot overwrite directory with non-directory') 3035 E('ERR_FS_CP_EEXIST', 'Target already exists') 3036 E('ERR_FS_CP_EINVAL', 'Invalid src or dest') 3037 E('ERR_FS_CP_FIFO_PIPE', 'Cannot copy a FIFO pipe') 3038 E('ERR_FS_CP_NON_DIR_TO_DIR', 'Cannot overwrite non-directory with directory') 3039 E('ERR_FS_CP_SOCKET', 'Cannot copy a socket file') 3040 E('ERR_FS_CP_SYMLINK_TO_SUBDIRECTORY', 'Cannot overwrite symlink in subdirectory of self') 3041 E('ERR_FS_CP_UNKNOWN', 'Cannot copy an unknown file type') 3042 E('ERR_FS_EISDIR', 'Path is a directory') 3043 3044 module.exports.ERR_INVALID_ARG_TYPE = class ERR_INVALID_ARG_TYPE extends Error { 3045 constructor (name, expected, actual) { 3046 super() 3047 this.code = 'ERR_INVALID_ARG_TYPE' 3048 this.message = `The ${name} argument must be ${expected}. Received ${typeof actual}` 3049 } 3050 } 3051 3052 3053 /***/ }), 3054 3055 /***/ 2702: 3056 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 3057 3058 const fs = __nccwpck_require__(73292) 3059 const getOptions = __nccwpck_require__(91573) 3060 const node = __nccwpck_require__(32486) 3061 const polyfill = __nccwpck_require__(52613) 3062 3063 // node 16.7.0 added fs.cp 3064 const useNative = node.satisfies('>=16.7.0') 3065 3066 const cp = async (src, dest, opts) => { 3067 const options = getOptions(opts, { 3068 copy: ['dereference', 'errorOnExist', 'filter', 'force', 'preserveTimestamps', 'recursive'], 3069 }) 3070 3071 // the polyfill is tested separately from this module, no need to hack 3072 // process.version to try to trigger it just for coverage 3073 // istanbul ignore next 3074 return useNative 3075 ? fs.cp(src, dest, options) 3076 : polyfill(src, dest, options) 3077 } 3078 3079 module.exports = cp 3080 3081 3082 /***/ }), 3083 3084 /***/ 52613: 3085 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 3086 3087 "use strict"; 3088 // this file is a modified version of the code in node 17.2.0 3089 // which is, in turn, a modified version of the fs-extra module on npm 3090 // node core changes: 3091 // - Use of the assert module has been replaced with core's error system. 3092 // - All code related to the glob dependency has been removed. 3093 // - Bring your own custom fs module is not currently supported. 3094 // - Some basic code cleanup. 3095 // changes here: 3096 // - remove all callback related code 3097 // - drop sync support 3098 // - change assertions back to non-internal methods (see options.js) 3099 // - throws ENOTDIR when rmdir gets an ENOENT for a path that exists in Windows 3100 3101 3102 const { 3103 ERR_FS_CP_DIR_TO_NON_DIR, 3104 ERR_FS_CP_EEXIST, 3105 ERR_FS_CP_EINVAL, 3106 ERR_FS_CP_FIFO_PIPE, 3107 ERR_FS_CP_NON_DIR_TO_DIR, 3108 ERR_FS_CP_SOCKET, 3109 ERR_FS_CP_SYMLINK_TO_SUBDIRECTORY, 3110 ERR_FS_CP_UNKNOWN, 3111 ERR_FS_EISDIR, 3112 ERR_INVALID_ARG_TYPE, 3113 } = __nccwpck_require__(68025) 3114 const { 3115 constants: { 3116 errno: { 3117 EEXIST, 3118 EISDIR, 3119 EINVAL, 3120 ENOTDIR, 3121 }, 3122 }, 3123 } = __nccwpck_require__(22037) 3124 const { 3125 chmod, 3126 copyFile, 3127 lstat, 3128 mkdir, 3129 readdir, 3130 readlink, 3131 stat, 3132 symlink, 3133 unlink, 3134 utimes, 3135 } = __nccwpck_require__(73292) 3136 const { 3137 dirname, 3138 isAbsolute, 3139 join, 3140 parse, 3141 resolve, 3142 sep, 3143 toNamespacedPath, 3144 } = __nccwpck_require__(71017) 3145 const { fileURLToPath } = __nccwpck_require__(57310) 3146 3147 const defaultOptions = { 3148 dereference: false, 3149 errorOnExist: false, 3150 filter: undefined, 3151 force: true, 3152 preserveTimestamps: false, 3153 recursive: false, 3154 } 3155 3156 async function cp (src, dest, opts) { 3157 if (opts != null && typeof opts !== 'object') { 3158 throw new ERR_INVALID_ARG_TYPE('options', ['Object'], opts) 3159 } 3160 return cpFn( 3161 toNamespacedPath(getValidatedPath(src)), 3162 toNamespacedPath(getValidatedPath(dest)), 3163 { ...defaultOptions, ...opts }) 3164 } 3165 3166 function getValidatedPath (fileURLOrPath) { 3167 const path = fileURLOrPath != null && fileURLOrPath.href 3168 && fileURLOrPath.origin 3169 ? fileURLToPath(fileURLOrPath) 3170 : fileURLOrPath 3171 return path 3172 } 3173 3174 async function cpFn (src, dest, opts) { 3175 // Warn about using preserveTimestamps on 32-bit node 3176 // istanbul ignore next 3177 if (opts.preserveTimestamps && process.arch === 'ia32') { 3178 const warning = 'Using the preserveTimestamps option in 32-bit ' + 3179 'node is not recommended' 3180 process.emitWarning(warning, 'TimestampPrecisionWarning') 3181 } 3182 const stats = await checkPaths(src, dest, opts) 3183 const { srcStat, destStat } = stats 3184 await checkParentPaths(src, srcStat, dest) 3185 if (opts.filter) { 3186 return handleFilter(checkParentDir, destStat, src, dest, opts) 3187 } 3188 return checkParentDir(destStat, src, dest, opts) 3189 } 3190 3191 async function checkPaths (src, dest, opts) { 3192 const { 0: srcStat, 1: destStat } = await getStats(src, dest, opts) 3193 if (destStat) { 3194 if (areIdentical(srcStat, destStat)) { 3195 throw new ERR_FS_CP_EINVAL({ 3196 message: 'src and dest cannot be the same', 3197 path: dest, 3198 syscall: 'cp', 3199 errno: EINVAL, 3200 }) 3201 } 3202 if (srcStat.isDirectory() && !destStat.isDirectory()) { 3203 throw new ERR_FS_CP_DIR_TO_NON_DIR({ 3204 message: `cannot overwrite directory ${src} ` + 3205 `with non-directory ${dest}`, 3206 path: dest, 3207 syscall: 'cp', 3208 errno: EISDIR, 3209 }) 3210 } 3211 if (!srcStat.isDirectory() && destStat.isDirectory()) { 3212 throw new ERR_FS_CP_NON_DIR_TO_DIR({ 3213 message: `cannot overwrite non-directory ${src} ` + 3214 `with directory ${dest}`, 3215 path: dest, 3216 syscall: 'cp', 3217 errno: ENOTDIR, 3218 }) 3219 } 3220 } 3221 3222 if (srcStat.isDirectory() && isSrcSubdir(src, dest)) { 3223 throw new ERR_FS_CP_EINVAL({ 3224 message: `cannot copy ${src} to a subdirectory of self ${dest}`, 3225 path: dest, 3226 syscall: 'cp', 3227 errno: EINVAL, 3228 }) 3229 } 3230 return { srcStat, destStat } 3231 } 3232 3233 function areIdentical (srcStat, destStat) { 3234 return destStat.ino && destStat.dev && destStat.ino === srcStat.ino && 3235 destStat.dev === srcStat.dev 3236 } 3237 3238 function getStats (src, dest, opts) { 3239 const statFunc = opts.dereference ? 3240 (file) => stat(file, { bigint: true }) : 3241 (file) => lstat(file, { bigint: true }) 3242 return Promise.all([ 3243 statFunc(src), 3244 statFunc(dest).catch((err) => { 3245 // istanbul ignore next: unsure how to cover. 3246 if (err.code === 'ENOENT') { 3247 return null 3248 } 3249 // istanbul ignore next: unsure how to cover. 3250 throw err 3251 }), 3252 ]) 3253 } 3254 3255 async function checkParentDir (destStat, src, dest, opts) { 3256 const destParent = dirname(dest) 3257 const dirExists = await pathExists(destParent) 3258 if (dirExists) { 3259 return getStatsForCopy(destStat, src, dest, opts) 3260 } 3261 await mkdir(destParent, { recursive: true }) 3262 return getStatsForCopy(destStat, src, dest, opts) 3263 } 3264 3265 function pathExists (dest) { 3266 return stat(dest).then( 3267 () => true, 3268 // istanbul ignore next: not sure when this would occur 3269 (err) => (err.code === 'ENOENT' ? false : Promise.reject(err))) 3270 } 3271 3272 // Recursively check if dest parent is a subdirectory of src. 3273 // It works for all file types including symlinks since it 3274 // checks the src and dest inodes. It starts from the deepest 3275 // parent and stops once it reaches the src parent or the root path. 3276 async function checkParentPaths (src, srcStat, dest) { 3277 const srcParent = resolve(dirname(src)) 3278 const destParent = resolve(dirname(dest)) 3279 if (destParent === srcParent || destParent === parse(destParent).root) { 3280 return 3281 } 3282 let destStat 3283 try { 3284 destStat = await stat(destParent, { bigint: true }) 3285 } catch (err) { 3286 // istanbul ignore else: not sure when this would occur 3287 if (err.code === 'ENOENT') { 3288 return 3289 } 3290 // istanbul ignore next: not sure when this would occur 3291 throw err 3292 } 3293 if (areIdentical(srcStat, destStat)) { 3294 throw new ERR_FS_CP_EINVAL({ 3295 message: `cannot copy ${src} to a subdirectory of self ${dest}`, 3296 path: dest, 3297 syscall: 'cp', 3298 errno: EINVAL, 3299 }) 3300 } 3301 return checkParentPaths(src, srcStat, destParent) 3302 } 3303 3304 const normalizePathToArray = (path) => 3305 resolve(path).split(sep).filter(Boolean) 3306 3307 // Return true if dest is a subdir of src, otherwise false. 3308 // It only checks the path strings. 3309 function isSrcSubdir (src, dest) { 3310 const srcArr = normalizePathToArray(src) 3311 const destArr = normalizePathToArray(dest) 3312 return srcArr.every((cur, i) => destArr[i] === cur) 3313 } 3314 3315 async function handleFilter (onInclude, destStat, src, dest, opts, cb) { 3316 const include = await opts.filter(src, dest) 3317 if (include) { 3318 return onInclude(destStat, src, dest, opts, cb) 3319 } 3320 } 3321 3322 function startCopy (destStat, src, dest, opts) { 3323 if (opts.filter) { 3324 return handleFilter(getStatsForCopy, destStat, src, dest, opts) 3325 } 3326 return getStatsForCopy(destStat, src, dest, opts) 3327 } 3328 3329 async function getStatsForCopy (destStat, src, dest, opts) { 3330 const statFn = opts.dereference ? stat : lstat 3331 const srcStat = await statFn(src) 3332 // istanbul ignore else: can't portably test FIFO 3333 if (srcStat.isDirectory() && opts.recursive) { 3334 return onDir(srcStat, destStat, src, dest, opts) 3335 } else if (srcStat.isDirectory()) { 3336 throw new ERR_FS_EISDIR({ 3337 message: `${src} is a directory (not copied)`, 3338 path: src, 3339 syscall: 'cp', 3340 errno: EINVAL, 3341 }) 3342 } else if (srcStat.isFile() || 3343 srcStat.isCharacterDevice() || 3344 srcStat.isBlockDevice()) { 3345 return onFile(srcStat, destStat, src, dest, opts) 3346 } else if (srcStat.isSymbolicLink()) { 3347 return onLink(destStat, src, dest) 3348 } else if (srcStat.isSocket()) { 3349 throw new ERR_FS_CP_SOCKET({ 3350 message: `cannot copy a socket file: ${dest}`, 3351 path: dest, 3352 syscall: 'cp', 3353 errno: EINVAL, 3354 }) 3355 } else if (srcStat.isFIFO()) { 3356 throw new ERR_FS_CP_FIFO_PIPE({ 3357 message: `cannot copy a FIFO pipe: ${dest}`, 3358 path: dest, 3359 syscall: 'cp', 3360 errno: EINVAL, 3361 }) 3362 } 3363 // istanbul ignore next: should be unreachable 3364 throw new ERR_FS_CP_UNKNOWN({ 3365 message: `cannot copy an unknown file type: ${dest}`, 3366 path: dest, 3367 syscall: 'cp', 3368 errno: EINVAL, 3369 }) 3370 } 3371 3372 function onFile (srcStat, destStat, src, dest, opts) { 3373 if (!destStat) { 3374 return _copyFile(srcStat, src, dest, opts) 3375 } 3376 return mayCopyFile(srcStat, src, dest, opts) 3377 } 3378 3379 async function mayCopyFile (srcStat, src, dest, opts) { 3380 if (opts.force) { 3381 await unlink(dest) 3382 return _copyFile(srcStat, src, dest, opts) 3383 } else if (opts.errorOnExist) { 3384 throw new ERR_FS_CP_EEXIST({ 3385 message: `${dest} already exists`, 3386 path: dest, 3387 syscall: 'cp', 3388 errno: EEXIST, 3389 }) 3390 } 3391 } 3392 3393 async function _copyFile (srcStat, src, dest, opts) { 3394 await copyFile(src, dest) 3395 if (opts.preserveTimestamps) { 3396 return handleTimestampsAndMode(srcStat.mode, src, dest) 3397 } 3398 return setDestMode(dest, srcStat.mode) 3399 } 3400 3401 async function handleTimestampsAndMode (srcMode, src, dest) { 3402 // Make sure the file is writable before setting the timestamp 3403 // otherwise open fails with EPERM when invoked with 'r+' 3404 // (through utimes call) 3405 if (fileIsNotWritable(srcMode)) { 3406 await makeFileWritable(dest, srcMode) 3407 return setDestTimestampsAndMode(srcMode, src, dest) 3408 } 3409 return setDestTimestampsAndMode(srcMode, src, dest) 3410 } 3411 3412 function fileIsNotWritable (srcMode) { 3413 return (srcMode & 0o200) === 0 3414 } 3415 3416 function makeFileWritable (dest, srcMode) { 3417 return setDestMode(dest, srcMode | 0o200) 3418 } 3419 3420 async function setDestTimestampsAndMode (srcMode, src, dest) { 3421 await setDestTimestamps(src, dest) 3422 return setDestMode(dest, srcMode) 3423 } 3424 3425 function setDestMode (dest, srcMode) { 3426 return chmod(dest, srcMode) 3427 } 3428 3429 async function setDestTimestamps (src, dest) { 3430 // The initial srcStat.atime cannot be trusted 3431 // because it is modified by the read(2) system call 3432 // (See https://nodejs.org/api/fs.html#fs_stat_time_values) 3433 const updatedSrcStat = await stat(src) 3434 return utimes(dest, updatedSrcStat.atime, updatedSrcStat.mtime) 3435 } 3436 3437 function onDir (srcStat, destStat, src, dest, opts) { 3438 if (!destStat) { 3439 return mkDirAndCopy(srcStat.mode, src, dest, opts) 3440 } 3441 return copyDir(src, dest, opts) 3442 } 3443 3444 async function mkDirAndCopy (srcMode, src, dest, opts) { 3445 await mkdir(dest) 3446 await copyDir(src, dest, opts) 3447 return setDestMode(dest, srcMode) 3448 } 3449 3450 async function copyDir (src, dest, opts) { 3451 const dir = await readdir(src) 3452 for (let i = 0; i < dir.length; i++) { 3453 const item = dir[i] 3454 const srcItem = join(src, item) 3455 const destItem = join(dest, item) 3456 const { destStat } = await checkPaths(srcItem, destItem, opts) 3457 await startCopy(destStat, srcItem, destItem, opts) 3458 } 3459 } 3460 3461 async function onLink (destStat, src, dest) { 3462 let resolvedSrc = await readlink(src) 3463 if (!isAbsolute(resolvedSrc)) { 3464 resolvedSrc = resolve(dirname(src), resolvedSrc) 3465 } 3466 if (!destStat) { 3467 return symlink(resolvedSrc, dest) 3468 } 3469 let resolvedDest 3470 try { 3471 resolvedDest = await readlink(dest) 3472 } catch (err) { 3473 // Dest exists and is a regular file or directory, 3474 // Windows may throw UNKNOWN error. If dest already exists, 3475 // fs throws error anyway, so no need to guard against it here. 3476 // istanbul ignore next: can only test on windows 3477 if (err.code === 'EINVAL' || err.code === 'UNKNOWN') { 3478 return symlink(resolvedSrc, dest) 3479 } 3480 // istanbul ignore next: should not be possible 3481 throw err 3482 } 3483 if (!isAbsolute(resolvedDest)) { 3484 resolvedDest = resolve(dirname(dest), resolvedDest) 3485 } 3486 if (isSrcSubdir(resolvedSrc, resolvedDest)) { 3487 throw new ERR_FS_CP_EINVAL({ 3488 message: `cannot copy ${resolvedSrc} to a subdirectory of self ` + 3489 `${resolvedDest}`, 3490 path: dest, 3491 syscall: 'cp', 3492 errno: EINVAL, 3493 }) 3494 } 3495 // Do not copy if src is a subdir of dest since unlinking 3496 // dest in this case would result in removing src contents 3497 // and therefore a broken symlink would be created. 3498 const srcStat = await stat(src) 3499 if (srcStat.isDirectory() && isSrcSubdir(resolvedDest, resolvedSrc)) { 3500 throw new ERR_FS_CP_SYMLINK_TO_SUBDIRECTORY({ 3501 message: `cannot overwrite ${resolvedDest} with ${resolvedSrc}`, 3502 path: dest, 3503 syscall: 'cp', 3504 errno: EINVAL, 3505 }) 3506 } 3507 return copyLink(resolvedSrc, dest) 3508 } 3509 3510 async function copyLink (resolvedSrc, dest) { 3511 await unlink(dest) 3512 return symlink(resolvedSrc, dest) 3513 } 3514 3515 module.exports = cp 3516 3517 3518 /***/ }), 3519 3520 /***/ 10575: 3521 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 3522 3523 "use strict"; 3524 3525 3526 const cp = __nccwpck_require__(2702) 3527 const withTempDir = __nccwpck_require__(31045) 3528 const readdirScoped = __nccwpck_require__(67339) 3529 const moveFile = __nccwpck_require__(81690) 3530 3531 module.exports = { 3532 cp, 3533 withTempDir, 3534 readdirScoped, 3535 moveFile, 3536 } 3537 3538 3539 /***/ }), 3540 3541 /***/ 81690: 3542 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 3543 3544 const { dirname, join, resolve, relative, isAbsolute } = __nccwpck_require__(71017) 3545 const fs = __nccwpck_require__(73292) 3546 3547 const pathExists = async path => { 3548 try { 3549 await fs.access(path) 3550 return true 3551 } catch (er) { 3552 return er.code !== 'ENOENT' 3553 } 3554 } 3555 3556 const moveFile = async (source, destination, options = {}, root = true, symlinks = []) => { 3557 if (!source || !destination) { 3558 throw new TypeError('`source` and `destination` file required') 3559 } 3560 3561 options = { 3562 overwrite: true, 3563 ...options, 3564 } 3565 3566 if (!options.overwrite && await pathExists(destination)) { 3567 throw new Error(`The destination file exists: ${destination}`) 3568 } 3569 3570 await fs.mkdir(dirname(destination), { recursive: true }) 3571 3572 try { 3573 await fs.rename(source, destination) 3574 } catch (error) { 3575 if (error.code === 'EXDEV' || error.code === 'EPERM') { 3576 const sourceStat = await fs.lstat(source) 3577 if (sourceStat.isDirectory()) { 3578 const files = await fs.readdir(source) 3579 await Promise.all(files.map((file) => 3580 moveFile(join(source, file), join(destination, file), options, false, symlinks) 3581 )) 3582 } else if (sourceStat.isSymbolicLink()) { 3583 symlinks.push({ source, destination }) 3584 } else { 3585 await fs.copyFile(source, destination) 3586 } 3587 } else { 3588 throw error 3589 } 3590 } 3591 3592 if (root) { 3593 await Promise.all(symlinks.map(async ({ source: symSource, destination: symDestination }) => { 3594 let target = await fs.readlink(symSource) 3595 // junction symlinks in windows will be absolute paths, so we need to 3596 // make sure they point to the symlink destination 3597 if (isAbsolute(target)) { 3598 target = resolve(symDestination, relative(symSource, target)) 3599 } 3600 // try to determine what the actual file is so we can create the correct 3601 // type of symlink in windows 3602 let targetStat = 'file' 3603 try { 3604 targetStat = await fs.stat(resolve(dirname(symSource), target)) 3605 if (targetStat.isDirectory()) { 3606 targetStat = 'junction' 3607 } 3608 } catch { 3609 // targetStat remains 'file' 3610 } 3611 await fs.symlink( 3612 target, 3613 symDestination, 3614 targetStat 3615 ) 3616 })) 3617 await fs.rm(source, { recursive: true, force: true }) 3618 } 3619 } 3620 3621 module.exports = moveFile 3622 3623 3624 /***/ }), 3625 3626 /***/ 67339: 3627 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 3628 3629 const { readdir } = __nccwpck_require__(73292) 3630 const { join } = __nccwpck_require__(71017) 3631 3632 const readdirScoped = async (dir) => { 3633 const results = [] 3634 3635 for (const item of await readdir(dir)) { 3636 if (item.startsWith('@')) { 3637 for (const scopedItem of await readdir(join(dir, item))) { 3638 results.push(join(item, scopedItem)) 3639 } 3640 } else { 3641 results.push(item) 3642 } 3643 } 3644 3645 return results 3646 } 3647 3648 module.exports = readdirScoped 3649 3650 3651 /***/ }), 3652 3653 /***/ 31045: 3654 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 3655 3656 const { join, sep } = __nccwpck_require__(71017) 3657 3658 const getOptions = __nccwpck_require__(91573) 3659 const { mkdir, mkdtemp, rm } = __nccwpck_require__(73292) 3660 3661 // create a temp directory, ensure its permissions match its parent, then call 3662 // the supplied function passing it the path to the directory. clean up after 3663 // the function finishes, whether it throws or not 3664 const withTempDir = async (root, fn, opts) => { 3665 const options = getOptions(opts, { 3666 copy: ['tmpPrefix'], 3667 }) 3668 // create the directory 3669 await mkdir(root, { recursive: true }) 3670 3671 const target = await mkdtemp(join(`${root}${sep}`, options.tmpPrefix || '')) 3672 let err 3673 let result 3674 3675 try { 3676 result = await fn(target) 3677 } catch (_err) { 3678 err = _err 3679 } 3680 3681 try { 3682 await rm(target, { force: true, recursive: true }) 3683 } catch { 3684 // ignore errors 3685 } 3686 3687 if (err) { 3688 throw err 3689 } 3690 3691 return result 3692 } 3693 3694 module.exports = withTempDir 3695 3696 3697 /***/ }), 3698 3699 /***/ 40334: 3700 /***/ ((module) => { 3701 3702 "use strict"; 3703 3704 var __defProp = Object.defineProperty; 3705 var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 3706 var __getOwnPropNames = Object.getOwnPropertyNames; 3707 var __hasOwnProp = Object.prototype.hasOwnProperty; 3708 var __export = (target, all) => { 3709 for (var name in all) 3710 __defProp(target, name, { get: all[name], enumerable: true }); 3711 }; 3712 var __copyProps = (to, from, except, desc) => { 3713 if (from && typeof from === "object" || typeof from === "function") { 3714 for (let key of __getOwnPropNames(from)) 3715 if (!__hasOwnProp.call(to, key) && key !== except) 3716 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 3717 } 3718 return to; 3719 }; 3720 var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); 3721 3722 // pkg/dist-src/index.js 3723 var dist_src_exports = {}; 3724 __export(dist_src_exports, { 3725 createTokenAuth: () => createTokenAuth 3726 }); 3727 module.exports = __toCommonJS(dist_src_exports); 3728 3729 // pkg/dist-src/auth.js 3730 var REGEX_IS_INSTALLATION_LEGACY = /^v1\./; 3731 var REGEX_IS_INSTALLATION = /^ghs_/; 3732 var REGEX_IS_USER_TO_SERVER = /^ghu_/; 3733 async function auth(token) { 3734 const isApp = token.split(/\./).length === 3; 3735 const isInstallation = REGEX_IS_INSTALLATION_LEGACY.test(token) || REGEX_IS_INSTALLATION.test(token); 3736 const isUserToServer = REGEX_IS_USER_TO_SERVER.test(token); 3737 const tokenType = isApp ? "app" : isInstallation ? "installation" : isUserToServer ? "user-to-server" : "oauth"; 3738 return { 3739 type: "token", 3740 token, 3741 tokenType 3742 }; 3743 } 3744 3745 // pkg/dist-src/with-authorization-prefix.js 3746 function withAuthorizationPrefix(token) { 3747 if (token.split(/\./).length === 3) { 3748 return `bearer ${token}`; 3749 } 3750 return `token ${token}`; 3751 } 3752 3753 // pkg/dist-src/hook.js 3754 async function hook(token, request, route, parameters) { 3755 const endpoint = request.endpoint.merge( 3756 route, 3757 parameters 3758 ); 3759 endpoint.headers.authorization = withAuthorizationPrefix(token); 3760 return request(endpoint); 3761 } 3762 3763 // pkg/dist-src/index.js 3764 var createTokenAuth = function createTokenAuth2(token) { 3765 if (!token) { 3766 throw new Error("[@octokit/auth-token] No token passed to createTokenAuth"); 3767 } 3768 if (typeof token !== "string") { 3769 throw new Error( 3770 "[@octokit/auth-token] Token passed to createTokenAuth is not a string" 3771 ); 3772 } 3773 token = token.replace(/^(token|bearer) +/i, ""); 3774 return Object.assign(auth.bind(null, token), { 3775 hook: hook.bind(null, token) 3776 }); 3777 }; 3778 // Annotate the CommonJS export names for ESM import in node: 3779 0 && (0); 3780 3781 3782 /***/ }), 3783 3784 /***/ 76762: 3785 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 3786 3787 "use strict"; 3788 3789 var __defProp = Object.defineProperty; 3790 var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 3791 var __getOwnPropNames = Object.getOwnPropertyNames; 3792 var __hasOwnProp = Object.prototype.hasOwnProperty; 3793 var __export = (target, all) => { 3794 for (var name in all) 3795 __defProp(target, name, { get: all[name], enumerable: true }); 3796 }; 3797 var __copyProps = (to, from, except, desc) => { 3798 if (from && typeof from === "object" || typeof from === "function") { 3799 for (let key of __getOwnPropNames(from)) 3800 if (!__hasOwnProp.call(to, key) && key !== except) 3801 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 3802 } 3803 return to; 3804 }; 3805 var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); 3806 3807 // pkg/dist-src/index.js 3808 var dist_src_exports = {}; 3809 __export(dist_src_exports, { 3810 Octokit: () => Octokit 3811 }); 3812 module.exports = __toCommonJS(dist_src_exports); 3813 var import_universal_user_agent = __nccwpck_require__(45030); 3814 var import_before_after_hook = __nccwpck_require__(83682); 3815 var import_request = __nccwpck_require__(36234); 3816 var import_graphql = __nccwpck_require__(88467); 3817 var import_auth_token = __nccwpck_require__(40334); 3818 3819 // pkg/dist-src/version.js 3820 var VERSION = "5.2.0"; 3821 3822 // pkg/dist-src/index.js 3823 var noop = () => { 3824 }; 3825 var consoleWarn = console.warn.bind(console); 3826 var consoleError = console.error.bind(console); 3827 var userAgentTrail = `octokit-core.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`; 3828 var Octokit = class { 3829 static { 3830 this.VERSION = VERSION; 3831 } 3832 static defaults(defaults) { 3833 const OctokitWithDefaults = class extends this { 3834 constructor(...args) { 3835 const options = args[0] || {}; 3836 if (typeof defaults === "function") { 3837 super(defaults(options)); 3838 return; 3839 } 3840 super( 3841 Object.assign( 3842 {}, 3843 defaults, 3844 options, 3845 options.userAgent && defaults.userAgent ? { 3846 userAgent: `${options.userAgent} ${defaults.userAgent}` 3847 } : null 3848 ) 3849 ); 3850 } 3851 }; 3852 return OctokitWithDefaults; 3853 } 3854 static { 3855 this.plugins = []; 3856 } 3857 /** 3858 * Attach a plugin (or many) to your Octokit instance. 3859 * 3860 * @example 3861 * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...) 3862 */ 3863 static plugin(...newPlugins) { 3864 const currentPlugins = this.plugins; 3865 const NewOctokit = class extends this { 3866 static { 3867 this.plugins = currentPlugins.concat( 3868 newPlugins.filter((plugin) => !currentPlugins.includes(plugin)) 3869 ); 3870 } 3871 }; 3872 return NewOctokit; 3873 } 3874 constructor(options = {}) { 3875 const hook = new import_before_after_hook.Collection(); 3876 const requestDefaults = { 3877 baseUrl: import_request.request.endpoint.DEFAULTS.baseUrl, 3878 headers: {}, 3879 request: Object.assign({}, options.request, { 3880 // @ts-ignore internal usage only, no need to type 3881 hook: hook.bind(null, "request") 3882 }), 3883 mediaType: { 3884 previews: [], 3885 format: "" 3886 } 3887 }; 3888 requestDefaults.headers["user-agent"] = options.userAgent ? `${options.userAgent} ${userAgentTrail}` : userAgentTrail; 3889 if (options.baseUrl) { 3890 requestDefaults.baseUrl = options.baseUrl; 3891 } 3892 if (options.previews) { 3893 requestDefaults.mediaType.previews = options.previews; 3894 } 3895 if (options.timeZone) { 3896 requestDefaults.headers["time-zone"] = options.timeZone; 3897 } 3898 this.request = import_request.request.defaults(requestDefaults); 3899 this.graphql = (0, import_graphql.withCustomRequest)(this.request).defaults(requestDefaults); 3900 this.log = Object.assign( 3901 { 3902 debug: noop, 3903 info: noop, 3904 warn: consoleWarn, 3905 error: consoleError 3906 }, 3907 options.log 3908 ); 3909 this.hook = hook; 3910 if (!options.authStrategy) { 3911 if (!options.auth) { 3912 this.auth = async () => ({ 3913 type: "unauthenticated" 3914 }); 3915 } else { 3916 const auth = (0, import_auth_token.createTokenAuth)(options.auth); 3917 hook.wrap("request", auth.hook); 3918 this.auth = auth; 3919 } 3920 } else { 3921 const { authStrategy, ...otherOptions } = options; 3922 const auth = authStrategy( 3923 Object.assign( 3924 { 3925 request: this.request, 3926 log: this.log, 3927 // we pass the current octokit instance as well as its constructor options 3928 // to allow for authentication strategies that return a new octokit instance 3929 // that shares the same internal state as the current one. The original 3930 // requirement for this was the "event-octokit" authentication strategy 3931 // of https://github.com/probot/octokit-auth-probot. 3932 octokit: this, 3933 octokitOptions: otherOptions 3934 }, 3935 options.auth 3936 ) 3937 ); 3938 hook.wrap("request", auth.hook); 3939 this.auth = auth; 3940 } 3941 const classConstructor = this.constructor; 3942 for (let i = 0; i < classConstructor.plugins.length; ++i) { 3943 Object.assign(this, classConstructor.plugins[i](this, options)); 3944 } 3945 } 3946 }; 3947 // Annotate the CommonJS export names for ESM import in node: 3948 0 && (0); 3949 3950 3951 /***/ }), 3952 3953 /***/ 59440: 3954 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 3955 3956 "use strict"; 3957 3958 var __defProp = Object.defineProperty; 3959 var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 3960 var __getOwnPropNames = Object.getOwnPropertyNames; 3961 var __hasOwnProp = Object.prototype.hasOwnProperty; 3962 var __export = (target, all) => { 3963 for (var name in all) 3964 __defProp(target, name, { get: all[name], enumerable: true }); 3965 }; 3966 var __copyProps = (to, from, except, desc) => { 3967 if (from && typeof from === "object" || typeof from === "function") { 3968 for (let key of __getOwnPropNames(from)) 3969 if (!__hasOwnProp.call(to, key) && key !== except) 3970 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 3971 } 3972 return to; 3973 }; 3974 var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); 3975 3976 // pkg/dist-src/index.js 3977 var dist_src_exports = {}; 3978 __export(dist_src_exports, { 3979 endpoint: () => endpoint 3980 }); 3981 module.exports = __toCommonJS(dist_src_exports); 3982 3983 // pkg/dist-src/defaults.js 3984 var import_universal_user_agent = __nccwpck_require__(45030); 3985 3986 // pkg/dist-src/version.js 3987 var VERSION = "9.0.5"; 3988 3989 // pkg/dist-src/defaults.js 3990 var userAgent = `octokit-endpoint.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}`; 3991 var DEFAULTS = { 3992 method: "GET", 3993 baseUrl: "https://api.github.com", 3994 headers: { 3995 accept: "application/vnd.github.v3+json", 3996 "user-agent": userAgent 3997 }, 3998 mediaType: { 3999 format: "" 4000 } 4001 }; 4002 4003 // pkg/dist-src/util/lowercase-keys.js 4004 function lowercaseKeys(object) { 4005 if (!object) { 4006 return {}; 4007 } 4008 return Object.keys(object).reduce((newObj, key) => { 4009 newObj[key.toLowerCase()] = object[key]; 4010 return newObj; 4011 }, {}); 4012 } 4013 4014 // pkg/dist-src/util/is-plain-object.js 4015 function isPlainObject(value) { 4016 if (typeof value !== "object" || value === null) 4017 return false; 4018 if (Object.prototype.toString.call(value) !== "[object Object]") 4019 return false; 4020 const proto = Object.getPrototypeOf(value); 4021 if (proto === null) 4022 return true; 4023 const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor; 4024 return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value); 4025 } 4026 4027 // pkg/dist-src/util/merge-deep.js 4028 function mergeDeep(defaults, options) { 4029 const result = Object.assign({}, defaults); 4030 Object.keys(options).forEach((key) => { 4031 if (isPlainObject(options[key])) { 4032 if (!(key in defaults)) 4033 Object.assign(result, { [key]: options[key] }); 4034 else 4035 result[key] = mergeDeep(defaults[key], options[key]); 4036 } else { 4037 Object.assign(result, { [key]: options[key] }); 4038 } 4039 }); 4040 return result; 4041 } 4042 4043 // pkg/dist-src/util/remove-undefined-properties.js 4044 function removeUndefinedProperties(obj) { 4045 for (const key in obj) { 4046 if (obj[key] === void 0) { 4047 delete obj[key]; 4048 } 4049 } 4050 return obj; 4051 } 4052 4053 // pkg/dist-src/merge.js 4054 function merge(defaults, route, options) { 4055 if (typeof route === "string") { 4056 let [method, url] = route.split(" "); 4057 options = Object.assign(url ? { method, url } : { url: method }, options); 4058 } else { 4059 options = Object.assign({}, route); 4060 } 4061 options.headers = lowercaseKeys(options.headers); 4062 removeUndefinedProperties(options); 4063 removeUndefinedProperties(options.headers); 4064 const mergedOptions = mergeDeep(defaults || {}, options); 4065 if (options.url === "/graphql") { 4066 if (defaults && defaults.mediaType.previews?.length) { 4067 mergedOptions.mediaType.previews = defaults.mediaType.previews.filter( 4068 (preview) => !mergedOptions.mediaType.previews.includes(preview) 4069 ).concat(mergedOptions.mediaType.previews); 4070 } 4071 mergedOptions.mediaType.previews = (mergedOptions.mediaType.previews || []).map((preview) => preview.replace(/-preview/, "")); 4072 } 4073 return mergedOptions; 4074 } 4075 4076 // pkg/dist-src/util/add-query-parameters.js 4077 function addQueryParameters(url, parameters) { 4078 const separator = /\?/.test(url) ? "&" : "?"; 4079 const names = Object.keys(parameters); 4080 if (names.length === 0) { 4081 return url; 4082 } 4083 return url + separator + names.map((name) => { 4084 if (name === "q") { 4085 return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+"); 4086 } 4087 return `${name}=${encodeURIComponent(parameters[name])}`; 4088 }).join("&"); 4089 } 4090 4091 // pkg/dist-src/util/extract-url-variable-names.js 4092 var urlVariableRegex = /\{[^}]+\}/g; 4093 function removeNonChars(variableName) { 4094 return variableName.replace(/^\W+|\W+$/g, "").split(/,/); 4095 } 4096 function extractUrlVariableNames(url) { 4097 const matches = url.match(urlVariableRegex); 4098 if (!matches) { 4099 return []; 4100 } 4101 return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []); 4102 } 4103 4104 // pkg/dist-src/util/omit.js 4105 function omit(object, keysToOmit) { 4106 const result = { __proto__: null }; 4107 for (const key of Object.keys(object)) { 4108 if (keysToOmit.indexOf(key) === -1) { 4109 result[key] = object[key]; 4110 } 4111 } 4112 return result; 4113 } 4114 4115 // pkg/dist-src/util/url-template.js 4116 function encodeReserved(str) { 4117 return str.split(/(%[0-9A-Fa-f]{2})/g).map(function(part) { 4118 if (!/%[0-9A-Fa-f]/.test(part)) { 4119 part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]"); 4120 } 4121 return part; 4122 }).join(""); 4123 } 4124 function encodeUnreserved(str) { 4125 return encodeURIComponent(str).replace(/[!'()*]/g, function(c) { 4126 return "%" + c.charCodeAt(0).toString(16).toUpperCase(); 4127 }); 4128 } 4129 function encodeValue(operator, value, key) { 4130 value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value); 4131 if (key) { 4132 return encodeUnreserved(key) + "=" + value; 4133 } else { 4134 return value; 4135 } 4136 } 4137 function isDefined(value) { 4138 return value !== void 0 && value !== null; 4139 } 4140 function isKeyOperator(operator) { 4141 return operator === ";" || operator === "&" || operator === "?"; 4142 } 4143 function getValues(context, operator, key, modifier) { 4144 var value = context[key], result = []; 4145 if (isDefined(value) && value !== "") { 4146 if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { 4147 value = value.toString(); 4148 if (modifier && modifier !== "*") { 4149 value = value.substring(0, parseInt(modifier, 10)); 4150 } 4151 result.push( 4152 encodeValue(operator, value, isKeyOperator(operator) ? key : "") 4153 ); 4154 } else { 4155 if (modifier === "*") { 4156 if (Array.isArray(value)) { 4157 value.filter(isDefined).forEach(function(value2) { 4158 result.push( 4159 encodeValue(operator, value2, isKeyOperator(operator) ? key : "") 4160 ); 4161 }); 4162 } else { 4163 Object.keys(value).forEach(function(k) { 4164 if (isDefined(value[k])) { 4165 result.push(encodeValue(operator, value[k], k)); 4166 } 4167 }); 4168 } 4169 } else { 4170 const tmp = []; 4171 if (Array.isArray(value)) { 4172 value.filter(isDefined).forEach(function(value2) { 4173 tmp.push(encodeValue(operator, value2)); 4174 }); 4175 } else { 4176 Object.keys(value).forEach(function(k) { 4177 if (isDefined(value[k])) { 4178 tmp.push(encodeUnreserved(k)); 4179 tmp.push(encodeValue(operator, value[k].toString())); 4180 } 4181 }); 4182 } 4183 if (isKeyOperator(operator)) { 4184 result.push(encodeUnreserved(key) + "=" + tmp.join(",")); 4185 } else if (tmp.length !== 0) { 4186 result.push(tmp.join(",")); 4187 } 4188 } 4189 } 4190 } else { 4191 if (operator === ";") { 4192 if (isDefined(value)) { 4193 result.push(encodeUnreserved(key)); 4194 } 4195 } else if (value === "" && (operator === "&" || operator === "?")) { 4196 result.push(encodeUnreserved(key) + "="); 4197 } else if (value === "") { 4198 result.push(""); 4199 } 4200 } 4201 return result; 4202 } 4203 function parseUrl(template) { 4204 return { 4205 expand: expand.bind(null, template) 4206 }; 4207 } 4208 function expand(template, context) { 4209 var operators = ["+", "#", ".", "/", ";", "?", "&"]; 4210 template = template.replace( 4211 /\{([^\{\}]+)\}|([^\{\}]+)/g, 4212 function(_, expression, literal) { 4213 if (expression) { 4214 let operator = ""; 4215 const values = []; 4216 if (operators.indexOf(expression.charAt(0)) !== -1) { 4217 operator = expression.charAt(0); 4218 expression = expression.substr(1); 4219 } 4220 expression.split(/,/g).forEach(function(variable) { 4221 var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable); 4222 values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3])); 4223 }); 4224 if (operator && operator !== "+") { 4225 var separator = ","; 4226 if (operator === "?") { 4227 separator = "&"; 4228 } else if (operator !== "#") { 4229 separator = operator; 4230 } 4231 return (values.length !== 0 ? operator : "") + values.join(separator); 4232 } else { 4233 return values.join(","); 4234 } 4235 } else { 4236 return encodeReserved(literal); 4237 } 4238 } 4239 ); 4240 if (template === "/") { 4241 return template; 4242 } else { 4243 return template.replace(/\/$/, ""); 4244 } 4245 } 4246 4247 // pkg/dist-src/parse.js 4248 function parse(options) { 4249 let method = options.method.toUpperCase(); 4250 let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}"); 4251 let headers = Object.assign({}, options.headers); 4252 let body; 4253 let parameters = omit(options, [ 4254 "method", 4255 "baseUrl", 4256 "url", 4257 "headers", 4258 "request", 4259 "mediaType" 4260 ]); 4261 const urlVariableNames = extractUrlVariableNames(url); 4262 url = parseUrl(url).expand(parameters); 4263 if (!/^http/.test(url)) { 4264 url = options.baseUrl + url; 4265 } 4266 const omittedParameters = Object.keys(options).filter((option) => urlVariableNames.includes(option)).concat("baseUrl"); 4267 const remainingParameters = omit(parameters, omittedParameters); 4268 const isBinaryRequest = /application\/octet-stream/i.test(headers.accept); 4269 if (!isBinaryRequest) { 4270 if (options.mediaType.format) { 4271 headers.accept = headers.accept.split(/,/).map( 4272 (format) => format.replace( 4273 /application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, 4274 `application/vnd$1$2.${options.mediaType.format}` 4275 ) 4276 ).join(","); 4277 } 4278 if (url.endsWith("/graphql")) { 4279 if (options.mediaType.previews?.length) { 4280 const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || []; 4281 headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map((preview) => { 4282 const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; 4283 return `application/vnd.github.${preview}-preview${format}`; 4284 }).join(","); 4285 } 4286 } 4287 } 4288 if (["GET", "HEAD"].includes(method)) { 4289 url = addQueryParameters(url, remainingParameters); 4290 } else { 4291 if ("data" in remainingParameters) { 4292 body = remainingParameters.data; 4293 } else { 4294 if (Object.keys(remainingParameters).length) { 4295 body = remainingParameters; 4296 } 4297 } 4298 } 4299 if (!headers["content-type"] && typeof body !== "undefined") { 4300 headers["content-type"] = "application/json; charset=utf-8"; 4301 } 4302 if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") { 4303 body = ""; 4304 } 4305 return Object.assign( 4306 { method, url, headers }, 4307 typeof body !== "undefined" ? { body } : null, 4308 options.request ? { request: options.request } : null 4309 ); 4310 } 4311 4312 // pkg/dist-src/endpoint-with-defaults.js 4313 function endpointWithDefaults(defaults, route, options) { 4314 return parse(merge(defaults, route, options)); 4315 } 4316 4317 // pkg/dist-src/with-defaults.js 4318 function withDefaults(oldDefaults, newDefaults) { 4319 const DEFAULTS2 = merge(oldDefaults, newDefaults); 4320 const endpoint2 = endpointWithDefaults.bind(null, DEFAULTS2); 4321 return Object.assign(endpoint2, { 4322 DEFAULTS: DEFAULTS2, 4323 defaults: withDefaults.bind(null, DEFAULTS2), 4324 merge: merge.bind(null, DEFAULTS2), 4325 parse 4326 }); 4327 } 4328 4329 // pkg/dist-src/index.js 4330 var endpoint = withDefaults(null, DEFAULTS); 4331 // Annotate the CommonJS export names for ESM import in node: 4332 0 && (0); 4333 4334 4335 /***/ }), 4336 4337 /***/ 88467: 4338 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 4339 4340 "use strict"; 4341 4342 var __defProp = Object.defineProperty; 4343 var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 4344 var __getOwnPropNames = Object.getOwnPropertyNames; 4345 var __hasOwnProp = Object.prototype.hasOwnProperty; 4346 var __export = (target, all) => { 4347 for (var name in all) 4348 __defProp(target, name, { get: all[name], enumerable: true }); 4349 }; 4350 var __copyProps = (to, from, except, desc) => { 4351 if (from && typeof from === "object" || typeof from === "function") { 4352 for (let key of __getOwnPropNames(from)) 4353 if (!__hasOwnProp.call(to, key) && key !== except) 4354 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 4355 } 4356 return to; 4357 }; 4358 var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); 4359 4360 // pkg/dist-src/index.js 4361 var dist_src_exports = {}; 4362 __export(dist_src_exports, { 4363 GraphqlResponseError: () => GraphqlResponseError, 4364 graphql: () => graphql2, 4365 withCustomRequest: () => withCustomRequest 4366 }); 4367 module.exports = __toCommonJS(dist_src_exports); 4368 var import_request3 = __nccwpck_require__(36234); 4369 var import_universal_user_agent = __nccwpck_require__(45030); 4370 4371 // pkg/dist-src/version.js 4372 var VERSION = "7.1.0"; 4373 4374 // pkg/dist-src/with-defaults.js 4375 var import_request2 = __nccwpck_require__(36234); 4376 4377 // pkg/dist-src/graphql.js 4378 var import_request = __nccwpck_require__(36234); 4379 4380 // pkg/dist-src/error.js 4381 function _buildMessageForResponseErrors(data) { 4382 return `Request failed due to following response errors: 4383 ` + data.errors.map((e) => ` - ${e.message}`).join("\n"); 4384 } 4385 var GraphqlResponseError = class extends Error { 4386 constructor(request2, headers, response) { 4387 super(_buildMessageForResponseErrors(response)); 4388 this.request = request2; 4389 this.headers = headers; 4390 this.response = response; 4391 this.name = "GraphqlResponseError"; 4392 this.errors = response.errors; 4393 this.data = response.data; 4394 if (Error.captureStackTrace) { 4395 Error.captureStackTrace(this, this.constructor); 4396 } 4397 } 4398 }; 4399 4400 // pkg/dist-src/graphql.js 4401 var NON_VARIABLE_OPTIONS = [ 4402 "method", 4403 "baseUrl", 4404 "url", 4405 "headers", 4406 "request", 4407 "query", 4408 "mediaType" 4409 ]; 4410 var FORBIDDEN_VARIABLE_OPTIONS = ["query", "method", "url"]; 4411 var GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/; 4412 function graphql(request2, query, options) { 4413 if (options) { 4414 if (typeof query === "string" && "query" in options) { 4415 return Promise.reject( 4416 new Error(`[@octokit/graphql] "query" cannot be used as variable name`) 4417 ); 4418 } 4419 for (const key in options) { 4420 if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) 4421 continue; 4422 return Promise.reject( 4423 new Error( 4424 `[@octokit/graphql] "${key}" cannot be used as variable name` 4425 ) 4426 ); 4427 } 4428 } 4429 const parsedOptions = typeof query === "string" ? Object.assign({ query }, options) : query; 4430 const requestOptions = Object.keys( 4431 parsedOptions 4432 ).reduce((result, key) => { 4433 if (NON_VARIABLE_OPTIONS.includes(key)) { 4434 result[key] = parsedOptions[key]; 4435 return result; 4436 } 4437 if (!result.variables) { 4438 result.variables = {}; 4439 } 4440 result.variables[key] = parsedOptions[key]; 4441 return result; 4442 }, {}); 4443 const baseUrl = parsedOptions.baseUrl || request2.endpoint.DEFAULTS.baseUrl; 4444 if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) { 4445 requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql"); 4446 } 4447 return request2(requestOptions).then((response) => { 4448 if (response.data.errors) { 4449 const headers = {}; 4450 for (const key of Object.keys(response.headers)) { 4451 headers[key] = response.headers[key]; 4452 } 4453 throw new GraphqlResponseError( 4454 requestOptions, 4455 headers, 4456 response.data 4457 ); 4458 } 4459 return response.data.data; 4460 }); 4461 } 4462 4463 // pkg/dist-src/with-defaults.js 4464 function withDefaults(request2, newDefaults) { 4465 const newRequest = request2.defaults(newDefaults); 4466 const newApi = (query, options) => { 4467 return graphql(newRequest, query, options); 4468 }; 4469 return Object.assign(newApi, { 4470 defaults: withDefaults.bind(null, newRequest), 4471 endpoint: newRequest.endpoint 4472 }); 4473 } 4474 4475 // pkg/dist-src/index.js 4476 var graphql2 = withDefaults(import_request3.request, { 4477 headers: { 4478 "user-agent": `octokit-graphql.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}` 4479 }, 4480 method: "POST", 4481 url: "/graphql" 4482 }); 4483 function withCustomRequest(customRequest) { 4484 return withDefaults(customRequest, { 4485 method: "POST", 4486 url: "/graphql" 4487 }); 4488 } 4489 // Annotate the CommonJS export names for ESM import in node: 4490 0 && (0); 4491 4492 4493 /***/ }), 4494 4495 /***/ 64193: 4496 /***/ ((module) => { 4497 4498 "use strict"; 4499 4500 var __defProp = Object.defineProperty; 4501 var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 4502 var __getOwnPropNames = Object.getOwnPropertyNames; 4503 var __hasOwnProp = Object.prototype.hasOwnProperty; 4504 var __export = (target, all) => { 4505 for (var name in all) 4506 __defProp(target, name, { get: all[name], enumerable: true }); 4507 }; 4508 var __copyProps = (to, from, except, desc) => { 4509 if (from && typeof from === "object" || typeof from === "function") { 4510 for (let key of __getOwnPropNames(from)) 4511 if (!__hasOwnProp.call(to, key) && key !== except) 4512 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 4513 } 4514 return to; 4515 }; 4516 var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); 4517 4518 // pkg/dist-src/index.js 4519 var dist_src_exports = {}; 4520 __export(dist_src_exports, { 4521 composePaginateRest: () => composePaginateRest, 4522 isPaginatingEndpoint: () => isPaginatingEndpoint, 4523 paginateRest: () => paginateRest, 4524 paginatingEndpoints: () => paginatingEndpoints 4525 }); 4526 module.exports = __toCommonJS(dist_src_exports); 4527 4528 // pkg/dist-src/version.js 4529 var VERSION = "9.2.1"; 4530 4531 // pkg/dist-src/normalize-paginated-list-response.js 4532 function normalizePaginatedListResponse(response) { 4533 if (!response.data) { 4534 return { 4535 ...response, 4536 data: [] 4537 }; 4538 } 4539 const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data); 4540 if (!responseNeedsNormalization) 4541 return response; 4542 const incompleteResults = response.data.incomplete_results; 4543 const repositorySelection = response.data.repository_selection; 4544 const totalCount = response.data.total_count; 4545 delete response.data.incomplete_results; 4546 delete response.data.repository_selection; 4547 delete response.data.total_count; 4548 const namespaceKey = Object.keys(response.data)[0]; 4549 const data = response.data[namespaceKey]; 4550 response.data = data; 4551 if (typeof incompleteResults !== "undefined") { 4552 response.data.incomplete_results = incompleteResults; 4553 } 4554 if (typeof repositorySelection !== "undefined") { 4555 response.data.repository_selection = repositorySelection; 4556 } 4557 response.data.total_count = totalCount; 4558 return response; 4559 } 4560 4561 // pkg/dist-src/iterator.js 4562 function iterator(octokit, route, parameters) { 4563 const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters); 4564 const requestMethod = typeof route === "function" ? route : octokit.request; 4565 const method = options.method; 4566 const headers = options.headers; 4567 let url = options.url; 4568 return { 4569 [Symbol.asyncIterator]: () => ({ 4570 async next() { 4571 if (!url) 4572 return { done: true }; 4573 try { 4574 const response = await requestMethod({ method, url, headers }); 4575 const normalizedResponse = normalizePaginatedListResponse(response); 4576 url = ((normalizedResponse.headers.link || "").match( 4577 /<([^>]+)>;\s*rel="next"/ 4578 ) || [])[1]; 4579 return { value: normalizedResponse }; 4580 } catch (error) { 4581 if (error.status !== 409) 4582 throw error; 4583 url = ""; 4584 return { 4585 value: { 4586 status: 200, 4587 headers: {}, 4588 data: [] 4589 } 4590 }; 4591 } 4592 } 4593 }) 4594 }; 4595 } 4596 4597 // pkg/dist-src/paginate.js 4598 function paginate(octokit, route, parameters, mapFn) { 4599 if (typeof parameters === "function") { 4600 mapFn = parameters; 4601 parameters = void 0; 4602 } 4603 return gather( 4604 octokit, 4605 [], 4606 iterator(octokit, route, parameters)[Symbol.asyncIterator](), 4607 mapFn 4608 ); 4609 } 4610 function gather(octokit, results, iterator2, mapFn) { 4611 return iterator2.next().then((result) => { 4612 if (result.done) { 4613 return results; 4614 } 4615 let earlyExit = false; 4616 function done() { 4617 earlyExit = true; 4618 } 4619 results = results.concat( 4620 mapFn ? mapFn(result.value, done) : result.value.data 4621 ); 4622 if (earlyExit) { 4623 return results; 4624 } 4625 return gather(octokit, results, iterator2, mapFn); 4626 }); 4627 } 4628 4629 // pkg/dist-src/compose-paginate.js 4630 var composePaginateRest = Object.assign(paginate, { 4631 iterator 4632 }); 4633 4634 // pkg/dist-src/generated/paginating-endpoints.js 4635 var paginatingEndpoints = [ 4636 "GET /advisories", 4637 "GET /app/hook/deliveries", 4638 "GET /app/installation-requests", 4639 "GET /app/installations", 4640 "GET /assignments/{assignment_id}/accepted_assignments", 4641 "GET /classrooms", 4642 "GET /classrooms/{classroom_id}/assignments", 4643 "GET /enterprises/{enterprise}/dependabot/alerts", 4644 "GET /enterprises/{enterprise}/secret-scanning/alerts", 4645 "GET /events", 4646 "GET /gists", 4647 "GET /gists/public", 4648 "GET /gists/starred", 4649 "GET /gists/{gist_id}/comments", 4650 "GET /gists/{gist_id}/commits", 4651 "GET /gists/{gist_id}/forks", 4652 "GET /installation/repositories", 4653 "GET /issues", 4654 "GET /licenses", 4655 "GET /marketplace_listing/plans", 4656 "GET /marketplace_listing/plans/{plan_id}/accounts", 4657 "GET /marketplace_listing/stubbed/plans", 4658 "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts", 4659 "GET /networks/{owner}/{repo}/events", 4660 "GET /notifications", 4661 "GET /organizations", 4662 "GET /orgs/{org}/actions/cache/usage-by-repository", 4663 "GET /orgs/{org}/actions/permissions/repositories", 4664 "GET /orgs/{org}/actions/runners", 4665 "GET /orgs/{org}/actions/secrets", 4666 "GET /orgs/{org}/actions/secrets/{secret_name}/repositories", 4667 "GET /orgs/{org}/actions/variables", 4668 "GET /orgs/{org}/actions/variables/{name}/repositories", 4669 "GET /orgs/{org}/blocks", 4670 "GET /orgs/{org}/code-scanning/alerts", 4671 "GET /orgs/{org}/codespaces", 4672 "GET /orgs/{org}/codespaces/secrets", 4673 "GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories", 4674 "GET /orgs/{org}/copilot/billing/seats", 4675 "GET /orgs/{org}/dependabot/alerts", 4676 "GET /orgs/{org}/dependabot/secrets", 4677 "GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories", 4678 "GET /orgs/{org}/events", 4679 "GET /orgs/{org}/failed_invitations", 4680 "GET /orgs/{org}/hooks", 4681 "GET /orgs/{org}/hooks/{hook_id}/deliveries", 4682 "GET /orgs/{org}/installations", 4683 "GET /orgs/{org}/invitations", 4684 "GET /orgs/{org}/invitations/{invitation_id}/teams", 4685 "GET /orgs/{org}/issues", 4686 "GET /orgs/{org}/members", 4687 "GET /orgs/{org}/members/{username}/codespaces", 4688 "GET /orgs/{org}/migrations", 4689 "GET /orgs/{org}/migrations/{migration_id}/repositories", 4690 "GET /orgs/{org}/organization-roles/{role_id}/teams", 4691 "GET /orgs/{org}/organization-roles/{role_id}/users", 4692 "GET /orgs/{org}/outside_collaborators", 4693 "GET /orgs/{org}/packages", 4694 "GET /orgs/{org}/packages/{package_type}/{package_name}/versions", 4695 "GET /orgs/{org}/personal-access-token-requests", 4696 "GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories", 4697 "GET /orgs/{org}/personal-access-tokens", 4698 "GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories", 4699 "GET /orgs/{org}/projects", 4700 "GET /orgs/{org}/properties/values", 4701 "GET /orgs/{org}/public_members", 4702 "GET /orgs/{org}/repos", 4703 "GET /orgs/{org}/rulesets", 4704 "GET /orgs/{org}/rulesets/rule-suites", 4705 "GET /orgs/{org}/secret-scanning/alerts", 4706 "GET /orgs/{org}/security-advisories", 4707 "GET /orgs/{org}/teams", 4708 "GET /orgs/{org}/teams/{team_slug}/discussions", 4709 "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments", 4710 "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions", 4711 "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions", 4712 "GET /orgs/{org}/teams/{team_slug}/invitations", 4713 "GET /orgs/{org}/teams/{team_slug}/members", 4714 "GET /orgs/{org}/teams/{team_slug}/projects", 4715 "GET /orgs/{org}/teams/{team_slug}/repos", 4716 "GET /orgs/{org}/teams/{team_slug}/teams", 4717 "GET /projects/columns/{column_id}/cards", 4718 "GET /projects/{project_id}/collaborators", 4719 "GET /projects/{project_id}/columns", 4720 "GET /repos/{owner}/{repo}/actions/artifacts", 4721 "GET /repos/{owner}/{repo}/actions/caches", 4722 "GET /repos/{owner}/{repo}/actions/organization-secrets", 4723 "GET /repos/{owner}/{repo}/actions/organization-variables", 4724 "GET /repos/{owner}/{repo}/actions/runners", 4725 "GET /repos/{owner}/{repo}/actions/runs", 4726 "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts", 4727 "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs", 4728 "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs", 4729 "GET /repos/{owner}/{repo}/actions/secrets", 4730 "GET /repos/{owner}/{repo}/actions/variables", 4731 "GET /repos/{owner}/{repo}/actions/workflows", 4732 "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs", 4733 "GET /repos/{owner}/{repo}/activity", 4734 "GET /repos/{owner}/{repo}/assignees", 4735 "GET /repos/{owner}/{repo}/branches", 4736 "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations", 4737 "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs", 4738 "GET /repos/{owner}/{repo}/code-scanning/alerts", 4739 "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", 4740 "GET /repos/{owner}/{repo}/code-scanning/analyses", 4741 "GET /repos/{owner}/{repo}/codespaces", 4742 "GET /repos/{owner}/{repo}/codespaces/devcontainers", 4743 "GET /repos/{owner}/{repo}/codespaces/secrets", 4744 "GET /repos/{owner}/{repo}/collaborators", 4745 "GET /repos/{owner}/{repo}/comments", 4746 "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions", 4747 "GET /repos/{owner}/{repo}/commits", 4748 "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments", 4749 "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls", 4750 "GET /repos/{owner}/{repo}/commits/{ref}/check-runs", 4751 "GET /repos/{owner}/{repo}/commits/{ref}/check-suites", 4752 "GET /repos/{owner}/{repo}/commits/{ref}/status", 4753 "GET /repos/{owner}/{repo}/commits/{ref}/statuses", 4754 "GET /repos/{owner}/{repo}/contributors", 4755 "GET /repos/{owner}/{repo}/dependabot/alerts", 4756 "GET /repos/{owner}/{repo}/dependabot/secrets", 4757 "GET /repos/{owner}/{repo}/deployments", 4758 "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses", 4759 "GET /repos/{owner}/{repo}/environments", 4760 "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies", 4761 "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps", 4762 "GET /repos/{owner}/{repo}/events", 4763 "GET /repos/{owner}/{repo}/forks", 4764 "GET /repos/{owner}/{repo}/hooks", 4765 "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries", 4766 "GET /repos/{owner}/{repo}/invitations", 4767 "GET /repos/{owner}/{repo}/issues", 4768 "GET /repos/{owner}/{repo}/issues/comments", 4769 "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions", 4770 "GET /repos/{owner}/{repo}/issues/events", 4771 "GET /repos/{owner}/{repo}/issues/{issue_number}/comments", 4772 "GET /repos/{owner}/{repo}/issues/{issue_number}/events", 4773 "GET /repos/{owner}/{repo}/issues/{issue_number}/labels", 4774 "GET /repos/{owner}/{repo}/issues/{issue_number}/reactions", 4775 "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline", 4776 "GET /repos/{owner}/{repo}/keys", 4777 "GET /repos/{owner}/{repo}/labels", 4778 "GET /repos/{owner}/{repo}/milestones", 4779 "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels", 4780 "GET /repos/{owner}/{repo}/notifications", 4781 "GET /repos/{owner}/{repo}/pages/builds", 4782 "GET /repos/{owner}/{repo}/projects", 4783 "GET /repos/{owner}/{repo}/pulls", 4784 "GET /repos/{owner}/{repo}/pulls/comments", 4785 "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions", 4786 "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments", 4787 "GET /repos/{owner}/{repo}/pulls/{pull_number}/commits", 4788 "GET /repos/{owner}/{repo}/pulls/{pull_number}/files", 4789 "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews", 4790 "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments", 4791 "GET /repos/{owner}/{repo}/releases", 4792 "GET /repos/{owner}/{repo}/releases/{release_id}/assets", 4793 "GET /repos/{owner}/{repo}/releases/{release_id}/reactions", 4794 "GET /repos/{owner}/{repo}/rules/branches/{branch}", 4795 "GET /repos/{owner}/{repo}/rulesets", 4796 "GET /repos/{owner}/{repo}/rulesets/rule-suites", 4797 "GET /repos/{owner}/{repo}/secret-scanning/alerts", 4798 "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations", 4799 "GET /repos/{owner}/{repo}/security-advisories", 4800 "GET /repos/{owner}/{repo}/stargazers", 4801 "GET /repos/{owner}/{repo}/subscribers", 4802 "GET /repos/{owner}/{repo}/tags", 4803 "GET /repos/{owner}/{repo}/teams", 4804 "GET /repos/{owner}/{repo}/topics", 4805 "GET /repositories", 4806 "GET /repositories/{repository_id}/environments/{environment_name}/secrets", 4807 "GET /repositories/{repository_id}/environments/{environment_name}/variables", 4808 "GET /search/code", 4809 "GET /search/commits", 4810 "GET /search/issues", 4811 "GET /search/labels", 4812 "GET /search/repositories", 4813 "GET /search/topics", 4814 "GET /search/users", 4815 "GET /teams/{team_id}/discussions", 4816 "GET /teams/{team_id}/discussions/{discussion_number}/comments", 4817 "GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions", 4818 "GET /teams/{team_id}/discussions/{discussion_number}/reactions", 4819 "GET /teams/{team_id}/invitations", 4820 "GET /teams/{team_id}/members", 4821 "GET /teams/{team_id}/projects", 4822 "GET /teams/{team_id}/repos", 4823 "GET /teams/{team_id}/teams", 4824 "GET /user/blocks", 4825 "GET /user/codespaces", 4826 "GET /user/codespaces/secrets", 4827 "GET /user/emails", 4828 "GET /user/followers", 4829 "GET /user/following", 4830 "GET /user/gpg_keys", 4831 "GET /user/installations", 4832 "GET /user/installations/{installation_id}/repositories", 4833 "GET /user/issues", 4834 "GET /user/keys", 4835 "GET /user/marketplace_purchases", 4836 "GET /user/marketplace_purchases/stubbed", 4837 "GET /user/memberships/orgs", 4838 "GET /user/migrations", 4839 "GET /user/migrations/{migration_id}/repositories", 4840 "GET /user/orgs", 4841 "GET /user/packages", 4842 "GET /user/packages/{package_type}/{package_name}/versions", 4843 "GET /user/public_emails", 4844 "GET /user/repos", 4845 "GET /user/repository_invitations", 4846 "GET /user/social_accounts", 4847 "GET /user/ssh_signing_keys", 4848 "GET /user/starred", 4849 "GET /user/subscriptions", 4850 "GET /user/teams", 4851 "GET /users", 4852 "GET /users/{username}/events", 4853 "GET /users/{username}/events/orgs/{org}", 4854 "GET /users/{username}/events/public", 4855 "GET /users/{username}/followers", 4856 "GET /users/{username}/following", 4857 "GET /users/{username}/gists", 4858 "GET /users/{username}/gpg_keys", 4859 "GET /users/{username}/keys", 4860 "GET /users/{username}/orgs", 4861 "GET /users/{username}/packages", 4862 "GET /users/{username}/projects", 4863 "GET /users/{username}/received_events", 4864 "GET /users/{username}/received_events/public", 4865 "GET /users/{username}/repos", 4866 "GET /users/{username}/social_accounts", 4867 "GET /users/{username}/ssh_signing_keys", 4868 "GET /users/{username}/starred", 4869 "GET /users/{username}/subscriptions" 4870 ]; 4871 4872 // pkg/dist-src/paginating-endpoints.js 4873 function isPaginatingEndpoint(arg) { 4874 if (typeof arg === "string") { 4875 return paginatingEndpoints.includes(arg); 4876 } else { 4877 return false; 4878 } 4879 } 4880 4881 // pkg/dist-src/index.js 4882 function paginateRest(octokit) { 4883 return { 4884 paginate: Object.assign(paginate.bind(null, octokit), { 4885 iterator: iterator.bind(null, octokit) 4886 }) 4887 }; 4888 } 4889 paginateRest.VERSION = VERSION; 4890 // Annotate the CommonJS export names for ESM import in node: 4891 0 && (0); 4892 4893 4894 /***/ }), 4895 4896 /***/ 83044: 4897 /***/ ((module) => { 4898 4899 "use strict"; 4900 4901 var __defProp = Object.defineProperty; 4902 var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 4903 var __getOwnPropNames = Object.getOwnPropertyNames; 4904 var __hasOwnProp = Object.prototype.hasOwnProperty; 4905 var __export = (target, all) => { 4906 for (var name in all) 4907 __defProp(target, name, { get: all[name], enumerable: true }); 4908 }; 4909 var __copyProps = (to, from, except, desc) => { 4910 if (from && typeof from === "object" || typeof from === "function") { 4911 for (let key of __getOwnPropNames(from)) 4912 if (!__hasOwnProp.call(to, key) && key !== except) 4913 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 4914 } 4915 return to; 4916 }; 4917 var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); 4918 4919 // pkg/dist-src/index.js 4920 var dist_src_exports = {}; 4921 __export(dist_src_exports, { 4922 legacyRestEndpointMethods: () => legacyRestEndpointMethods, 4923 restEndpointMethods: () => restEndpointMethods 4924 }); 4925 module.exports = __toCommonJS(dist_src_exports); 4926 4927 // pkg/dist-src/version.js 4928 var VERSION = "10.4.1"; 4929 4930 // pkg/dist-src/generated/endpoints.js 4931 var Endpoints = { 4932 actions: { 4933 addCustomLabelsToSelfHostedRunnerForOrg: [ 4934 "POST /orgs/{org}/actions/runners/{runner_id}/labels" 4935 ], 4936 addCustomLabelsToSelfHostedRunnerForRepo: [ 4937 "POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" 4938 ], 4939 addSelectedRepoToOrgSecret: [ 4940 "PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}" 4941 ], 4942 addSelectedRepoToOrgVariable: [ 4943 "PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}" 4944 ], 4945 approveWorkflowRun: [ 4946 "POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve" 4947 ], 4948 cancelWorkflowRun: [ 4949 "POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel" 4950 ], 4951 createEnvironmentVariable: [ 4952 "POST /repositories/{repository_id}/environments/{environment_name}/variables" 4953 ], 4954 createOrUpdateEnvironmentSecret: [ 4955 "PUT /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}" 4956 ], 4957 createOrUpdateOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}"], 4958 createOrUpdateRepoSecret: [ 4959 "PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}" 4960 ], 4961 createOrgVariable: ["POST /orgs/{org}/actions/variables"], 4962 createRegistrationTokenForOrg: [ 4963 "POST /orgs/{org}/actions/runners/registration-token" 4964 ], 4965 createRegistrationTokenForRepo: [ 4966 "POST /repos/{owner}/{repo}/actions/runners/registration-token" 4967 ], 4968 createRemoveTokenForOrg: ["POST /orgs/{org}/actions/runners/remove-token"], 4969 createRemoveTokenForRepo: [ 4970 "POST /repos/{owner}/{repo}/actions/runners/remove-token" 4971 ], 4972 createRepoVariable: ["POST /repos/{owner}/{repo}/actions/variables"], 4973 createWorkflowDispatch: [ 4974 "POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches" 4975 ], 4976 deleteActionsCacheById: [ 4977 "DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}" 4978 ], 4979 deleteActionsCacheByKey: [ 4980 "DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}" 4981 ], 4982 deleteArtifact: [ 4983 "DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}" 4984 ], 4985 deleteEnvironmentSecret: [ 4986 "DELETE /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}" 4987 ], 4988 deleteEnvironmentVariable: [ 4989 "DELETE /repositories/{repository_id}/environments/{environment_name}/variables/{name}" 4990 ], 4991 deleteOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}"], 4992 deleteOrgVariable: ["DELETE /orgs/{org}/actions/variables/{name}"], 4993 deleteRepoSecret: [ 4994 "DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}" 4995 ], 4996 deleteRepoVariable: [ 4997 "DELETE /repos/{owner}/{repo}/actions/variables/{name}" 4998 ], 4999 deleteSelfHostedRunnerFromOrg: [ 5000 "DELETE /orgs/{org}/actions/runners/{runner_id}" 5001 ], 5002 deleteSelfHostedRunnerFromRepo: [ 5003 "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}" 5004 ], 5005 deleteWorkflowRun: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"], 5006 deleteWorkflowRunLogs: [ 5007 "DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs" 5008 ], 5009 disableSelectedRepositoryGithubActionsOrganization: [ 5010 "DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}" 5011 ], 5012 disableWorkflow: [ 5013 "PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable" 5014 ], 5015 downloadArtifact: [ 5016 "GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}" 5017 ], 5018 downloadJobLogsForWorkflowRun: [ 5019 "GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs" 5020 ], 5021 downloadWorkflowRunAttemptLogs: [ 5022 "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs" 5023 ], 5024 downloadWorkflowRunLogs: [ 5025 "GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs" 5026 ], 5027 enableSelectedRepositoryGithubActionsOrganization: [ 5028 "PUT /orgs/{org}/actions/permissions/repositories/{repository_id}" 5029 ], 5030 enableWorkflow: [ 5031 "PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable" 5032 ], 5033 forceCancelWorkflowRun: [ 5034 "POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel" 5035 ], 5036 generateRunnerJitconfigForOrg: [ 5037 "POST /orgs/{org}/actions/runners/generate-jitconfig" 5038 ], 5039 generateRunnerJitconfigForRepo: [ 5040 "POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig" 5041 ], 5042 getActionsCacheList: ["GET /repos/{owner}/{repo}/actions/caches"], 5043 getActionsCacheUsage: ["GET /repos/{owner}/{repo}/actions/cache/usage"], 5044 getActionsCacheUsageByRepoForOrg: [ 5045 "GET /orgs/{org}/actions/cache/usage-by-repository" 5046 ], 5047 getActionsCacheUsageForOrg: ["GET /orgs/{org}/actions/cache/usage"], 5048 getAllowedActionsOrganization: [ 5049 "GET /orgs/{org}/actions/permissions/selected-actions" 5050 ], 5051 getAllowedActionsRepository: [ 5052 "GET /repos/{owner}/{repo}/actions/permissions/selected-actions" 5053 ], 5054 getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], 5055 getCustomOidcSubClaimForRepo: [ 5056 "GET /repos/{owner}/{repo}/actions/oidc/customization/sub" 5057 ], 5058 getEnvironmentPublicKey: [ 5059 "GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key" 5060 ], 5061 getEnvironmentSecret: [ 5062 "GET /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}" 5063 ], 5064 getEnvironmentVariable: [ 5065 "GET /repositories/{repository_id}/environments/{environment_name}/variables/{name}" 5066 ], 5067 getGithubActionsDefaultWorkflowPermissionsOrganization: [ 5068 "GET /orgs/{org}/actions/permissions/workflow" 5069 ], 5070 getGithubActionsDefaultWorkflowPermissionsRepository: [ 5071 "GET /repos/{owner}/{repo}/actions/permissions/workflow" 5072 ], 5073 getGithubActionsPermissionsOrganization: [ 5074 "GET /orgs/{org}/actions/permissions" 5075 ], 5076 getGithubActionsPermissionsRepository: [ 5077 "GET /repos/{owner}/{repo}/actions/permissions" 5078 ], 5079 getJobForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"], 5080 getOrgPublicKey: ["GET /orgs/{org}/actions/secrets/public-key"], 5081 getOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}"], 5082 getOrgVariable: ["GET /orgs/{org}/actions/variables/{name}"], 5083 getPendingDeploymentsForRun: [ 5084 "GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments" 5085 ], 5086 getRepoPermissions: [ 5087 "GET /repos/{owner}/{repo}/actions/permissions", 5088 {}, 5089 { renamed: ["actions", "getGithubActionsPermissionsRepository"] } 5090 ], 5091 getRepoPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"], 5092 getRepoSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"], 5093 getRepoVariable: ["GET /repos/{owner}/{repo}/actions/variables/{name}"], 5094 getReviewsForRun: [ 5095 "GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals" 5096 ], 5097 getSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}"], 5098 getSelfHostedRunnerForRepo: [ 5099 "GET /repos/{owner}/{repo}/actions/runners/{runner_id}" 5100 ], 5101 getWorkflow: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"], 5102 getWorkflowAccessToRepository: [ 5103 "GET /repos/{owner}/{repo}/actions/permissions/access" 5104 ], 5105 getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"], 5106 getWorkflowRunAttempt: [ 5107 "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}" 5108 ], 5109 getWorkflowRunUsage: [ 5110 "GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing" 5111 ], 5112 getWorkflowUsage: [ 5113 "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing" 5114 ], 5115 listArtifactsForRepo: ["GET /repos/{owner}/{repo}/actions/artifacts"], 5116 listEnvironmentSecrets: [ 5117 "GET /repositories/{repository_id}/environments/{environment_name}/secrets" 5118 ], 5119 listEnvironmentVariables: [ 5120 "GET /repositories/{repository_id}/environments/{environment_name}/variables" 5121 ], 5122 listJobsForWorkflowRun: [ 5123 "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs" 5124 ], 5125 listJobsForWorkflowRunAttempt: [ 5126 "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs" 5127 ], 5128 listLabelsForSelfHostedRunnerForOrg: [ 5129 "GET /orgs/{org}/actions/runners/{runner_id}/labels" 5130 ], 5131 listLabelsForSelfHostedRunnerForRepo: [ 5132 "GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" 5133 ], 5134 listOrgSecrets: ["GET /orgs/{org}/actions/secrets"], 5135 listOrgVariables: ["GET /orgs/{org}/actions/variables"], 5136 listRepoOrganizationSecrets: [ 5137 "GET /repos/{owner}/{repo}/actions/organization-secrets" 5138 ], 5139 listRepoOrganizationVariables: [ 5140 "GET /repos/{owner}/{repo}/actions/organization-variables" 5141 ], 5142 listRepoSecrets: ["GET /repos/{owner}/{repo}/actions/secrets"], 5143 listRepoVariables: ["GET /repos/{owner}/{repo}/actions/variables"], 5144 listRepoWorkflows: ["GET /repos/{owner}/{repo}/actions/workflows"], 5145 listRunnerApplicationsForOrg: ["GET /orgs/{org}/actions/runners/downloads"], 5146 listRunnerApplicationsForRepo: [ 5147 "GET /repos/{owner}/{repo}/actions/runners/downloads" 5148 ], 5149 listSelectedReposForOrgSecret: [ 5150 "GET /orgs/{org}/actions/secrets/{secret_name}/repositories" 5151 ], 5152 listSelectedReposForOrgVariable: [ 5153 "GET /orgs/{org}/actions/variables/{name}/repositories" 5154 ], 5155 listSelectedRepositoriesEnabledGithubActionsOrganization: [ 5156 "GET /orgs/{org}/actions/permissions/repositories" 5157 ], 5158 listSelfHostedRunnersForOrg: ["GET /orgs/{org}/actions/runners"], 5159 listSelfHostedRunnersForRepo: ["GET /repos/{owner}/{repo}/actions/runners"], 5160 listWorkflowRunArtifacts: [ 5161 "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts" 5162 ], 5163 listWorkflowRuns: [ 5164 "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs" 5165 ], 5166 listWorkflowRunsForRepo: ["GET /repos/{owner}/{repo}/actions/runs"], 5167 reRunJobForWorkflowRun: [ 5168 "POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun" 5169 ], 5170 reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"], 5171 reRunWorkflowFailedJobs: [ 5172 "POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs" 5173 ], 5174 removeAllCustomLabelsFromSelfHostedRunnerForOrg: [ 5175 "DELETE /orgs/{org}/actions/runners/{runner_id}/labels" 5176 ], 5177 removeAllCustomLabelsFromSelfHostedRunnerForRepo: [ 5178 "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" 5179 ], 5180 removeCustomLabelFromSelfHostedRunnerForOrg: [ 5181 "DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}" 5182 ], 5183 removeCustomLabelFromSelfHostedRunnerForRepo: [ 5184 "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}" 5185 ], 5186 removeSelectedRepoFromOrgSecret: [ 5187 "DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}" 5188 ], 5189 removeSelectedRepoFromOrgVariable: [ 5190 "DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}" 5191 ], 5192 reviewCustomGatesForRun: [ 5193 "POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule" 5194 ], 5195 reviewPendingDeploymentsForRun: [ 5196 "POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments" 5197 ], 5198 setAllowedActionsOrganization: [ 5199 "PUT /orgs/{org}/actions/permissions/selected-actions" 5200 ], 5201 setAllowedActionsRepository: [ 5202 "PUT /repos/{owner}/{repo}/actions/permissions/selected-actions" 5203 ], 5204 setCustomLabelsForSelfHostedRunnerForOrg: [ 5205 "PUT /orgs/{org}/actions/runners/{runner_id}/labels" 5206 ], 5207 setCustomLabelsForSelfHostedRunnerForRepo: [ 5208 "PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" 5209 ], 5210 setCustomOidcSubClaimForRepo: [ 5211 "PUT /repos/{owner}/{repo}/actions/oidc/customization/sub" 5212 ], 5213 setGithubActionsDefaultWorkflowPermissionsOrganization: [ 5214 "PUT /orgs/{org}/actions/permissions/workflow" 5215 ], 5216 setGithubActionsDefaultWorkflowPermissionsRepository: [ 5217 "PUT /repos/{owner}/{repo}/actions/permissions/workflow" 5218 ], 5219 setGithubActionsPermissionsOrganization: [ 5220 "PUT /orgs/{org}/actions/permissions" 5221 ], 5222 setGithubActionsPermissionsRepository: [ 5223 "PUT /repos/{owner}/{repo}/actions/permissions" 5224 ], 5225 setSelectedReposForOrgSecret: [ 5226 "PUT /orgs/{org}/actions/secrets/{secret_name}/repositories" 5227 ], 5228 setSelectedReposForOrgVariable: [ 5229 "PUT /orgs/{org}/actions/variables/{name}/repositories" 5230 ], 5231 setSelectedRepositoriesEnabledGithubActionsOrganization: [ 5232 "PUT /orgs/{org}/actions/permissions/repositories" 5233 ], 5234 setWorkflowAccessToRepository: [ 5235 "PUT /repos/{owner}/{repo}/actions/permissions/access" 5236 ], 5237 updateEnvironmentVariable: [ 5238 "PATCH /repositories/{repository_id}/environments/{environment_name}/variables/{name}" 5239 ], 5240 updateOrgVariable: ["PATCH /orgs/{org}/actions/variables/{name}"], 5241 updateRepoVariable: [ 5242 "PATCH /repos/{owner}/{repo}/actions/variables/{name}" 5243 ] 5244 }, 5245 activity: { 5246 checkRepoIsStarredByAuthenticatedUser: ["GET /user/starred/{owner}/{repo}"], 5247 deleteRepoSubscription: ["DELETE /repos/{owner}/{repo}/subscription"], 5248 deleteThreadSubscription: [ 5249 "DELETE /notifications/threads/{thread_id}/subscription" 5250 ], 5251 getFeeds: ["GET /feeds"], 5252 getRepoSubscription: ["GET /repos/{owner}/{repo}/subscription"], 5253 getThread: ["GET /notifications/threads/{thread_id}"], 5254 getThreadSubscriptionForAuthenticatedUser: [ 5255 "GET /notifications/threads/{thread_id}/subscription" 5256 ], 5257 listEventsForAuthenticatedUser: ["GET /users/{username}/events"], 5258 listNotificationsForAuthenticatedUser: ["GET /notifications"], 5259 listOrgEventsForAuthenticatedUser: [ 5260 "GET /users/{username}/events/orgs/{org}" 5261 ], 5262 listPublicEvents: ["GET /events"], 5263 listPublicEventsForRepoNetwork: ["GET /networks/{owner}/{repo}/events"], 5264 listPublicEventsForUser: ["GET /users/{username}/events/public"], 5265 listPublicOrgEvents: ["GET /orgs/{org}/events"], 5266 listReceivedEventsForUser: ["GET /users/{username}/received_events"], 5267 listReceivedPublicEventsForUser: [ 5268 "GET /users/{username}/received_events/public" 5269 ], 5270 listRepoEvents: ["GET /repos/{owner}/{repo}/events"], 5271 listRepoNotificationsForAuthenticatedUser: [ 5272 "GET /repos/{owner}/{repo}/notifications" 5273 ], 5274 listReposStarredByAuthenticatedUser: ["GET /user/starred"], 5275 listReposStarredByUser: ["GET /users/{username}/starred"], 5276 listReposWatchedByUser: ["GET /users/{username}/subscriptions"], 5277 listStargazersForRepo: ["GET /repos/{owner}/{repo}/stargazers"], 5278 listWatchedReposForAuthenticatedUser: ["GET /user/subscriptions"], 5279 listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"], 5280 markNotificationsAsRead: ["PUT /notifications"], 5281 markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"], 5282 markThreadAsDone: ["DELETE /notifications/threads/{thread_id}"], 5283 markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"], 5284 setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"], 5285 setThreadSubscription: [ 5286 "PUT /notifications/threads/{thread_id}/subscription" 5287 ], 5288 starRepoForAuthenticatedUser: ["PUT /user/starred/{owner}/{repo}"], 5289 unstarRepoForAuthenticatedUser: ["DELETE /user/starred/{owner}/{repo}"] 5290 }, 5291 apps: { 5292 addRepoToInstallation: [ 5293 "PUT /user/installations/{installation_id}/repositories/{repository_id}", 5294 {}, 5295 { renamed: ["apps", "addRepoToInstallationForAuthenticatedUser"] } 5296 ], 5297 addRepoToInstallationForAuthenticatedUser: [ 5298 "PUT /user/installations/{installation_id}/repositories/{repository_id}" 5299 ], 5300 checkToken: ["POST /applications/{client_id}/token"], 5301 createFromManifest: ["POST /app-manifests/{code}/conversions"], 5302 createInstallationAccessToken: [ 5303 "POST /app/installations/{installation_id}/access_tokens" 5304 ], 5305 deleteAuthorization: ["DELETE /applications/{client_id}/grant"], 5306 deleteInstallation: ["DELETE /app/installations/{installation_id}"], 5307 deleteToken: ["DELETE /applications/{client_id}/token"], 5308 getAuthenticated: ["GET /app"], 5309 getBySlug: ["GET /apps/{app_slug}"], 5310 getInstallation: ["GET /app/installations/{installation_id}"], 5311 getOrgInstallation: ["GET /orgs/{org}/installation"], 5312 getRepoInstallation: ["GET /repos/{owner}/{repo}/installation"], 5313 getSubscriptionPlanForAccount: [ 5314 "GET /marketplace_listing/accounts/{account_id}" 5315 ], 5316 getSubscriptionPlanForAccountStubbed: [ 5317 "GET /marketplace_listing/stubbed/accounts/{account_id}" 5318 ], 5319 getUserInstallation: ["GET /users/{username}/installation"], 5320 getWebhookConfigForApp: ["GET /app/hook/config"], 5321 getWebhookDelivery: ["GET /app/hook/deliveries/{delivery_id}"], 5322 listAccountsForPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts"], 5323 listAccountsForPlanStubbed: [ 5324 "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts" 5325 ], 5326 listInstallationReposForAuthenticatedUser: [ 5327 "GET /user/installations/{installation_id}/repositories" 5328 ], 5329 listInstallationRequestsForAuthenticatedApp: [ 5330 "GET /app/installation-requests" 5331 ], 5332 listInstallations: ["GET /app/installations"], 5333 listInstallationsForAuthenticatedUser: ["GET /user/installations"], 5334 listPlans: ["GET /marketplace_listing/plans"], 5335 listPlansStubbed: ["GET /marketplace_listing/stubbed/plans"], 5336 listReposAccessibleToInstallation: ["GET /installation/repositories"], 5337 listSubscriptionsForAuthenticatedUser: ["GET /user/marketplace_purchases"], 5338 listSubscriptionsForAuthenticatedUserStubbed: [ 5339 "GET /user/marketplace_purchases/stubbed" 5340 ], 5341 listWebhookDeliveries: ["GET /app/hook/deliveries"], 5342 redeliverWebhookDelivery: [ 5343 "POST /app/hook/deliveries/{delivery_id}/attempts" 5344 ], 5345 removeRepoFromInstallation: [ 5346 "DELETE /user/installations/{installation_id}/repositories/{repository_id}", 5347 {}, 5348 { renamed: ["apps", "removeRepoFromInstallationForAuthenticatedUser"] } 5349 ], 5350 removeRepoFromInstallationForAuthenticatedUser: [ 5351 "DELETE /user/installations/{installation_id}/repositories/{repository_id}" 5352 ], 5353 resetToken: ["PATCH /applications/{client_id}/token"], 5354 revokeInstallationAccessToken: ["DELETE /installation/token"], 5355 scopeToken: ["POST /applications/{client_id}/token/scoped"], 5356 suspendInstallation: ["PUT /app/installations/{installation_id}/suspended"], 5357 unsuspendInstallation: [ 5358 "DELETE /app/installations/{installation_id}/suspended" 5359 ], 5360 updateWebhookConfigForApp: ["PATCH /app/hook/config"] 5361 }, 5362 billing: { 5363 getGithubActionsBillingOrg: ["GET /orgs/{org}/settings/billing/actions"], 5364 getGithubActionsBillingUser: [ 5365 "GET /users/{username}/settings/billing/actions" 5366 ], 5367 getGithubPackagesBillingOrg: ["GET /orgs/{org}/settings/billing/packages"], 5368 getGithubPackagesBillingUser: [ 5369 "GET /users/{username}/settings/billing/packages" 5370 ], 5371 getSharedStorageBillingOrg: [ 5372 "GET /orgs/{org}/settings/billing/shared-storage" 5373 ], 5374 getSharedStorageBillingUser: [ 5375 "GET /users/{username}/settings/billing/shared-storage" 5376 ] 5377 }, 5378 checks: { 5379 create: ["POST /repos/{owner}/{repo}/check-runs"], 5380 createSuite: ["POST /repos/{owner}/{repo}/check-suites"], 5381 get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"], 5382 getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"], 5383 listAnnotations: [ 5384 "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations" 5385 ], 5386 listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"], 5387 listForSuite: [ 5388 "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs" 5389 ], 5390 listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"], 5391 rerequestRun: [ 5392 "POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest" 5393 ], 5394 rerequestSuite: [ 5395 "POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest" 5396 ], 5397 setSuitesPreferences: [ 5398 "PATCH /repos/{owner}/{repo}/check-suites/preferences" 5399 ], 5400 update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"] 5401 }, 5402 codeScanning: { 5403 deleteAnalysis: [ 5404 "DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}" 5405 ], 5406 getAlert: [ 5407 "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}", 5408 {}, 5409 { renamedParameters: { alert_id: "alert_number" } } 5410 ], 5411 getAnalysis: [ 5412 "GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}" 5413 ], 5414 getCodeqlDatabase: [ 5415 "GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}" 5416 ], 5417 getDefaultSetup: ["GET /repos/{owner}/{repo}/code-scanning/default-setup"], 5418 getSarif: ["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"], 5419 listAlertInstances: [ 5420 "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances" 5421 ], 5422 listAlertsForOrg: ["GET /orgs/{org}/code-scanning/alerts"], 5423 listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"], 5424 listAlertsInstances: [ 5425 "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", 5426 {}, 5427 { renamed: ["codeScanning", "listAlertInstances"] } 5428 ], 5429 listCodeqlDatabases: [ 5430 "GET /repos/{owner}/{repo}/code-scanning/codeql/databases" 5431 ], 5432 listRecentAnalyses: ["GET /repos/{owner}/{repo}/code-scanning/analyses"], 5433 updateAlert: [ 5434 "PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}" 5435 ], 5436 updateDefaultSetup: [ 5437 "PATCH /repos/{owner}/{repo}/code-scanning/default-setup" 5438 ], 5439 uploadSarif: ["POST /repos/{owner}/{repo}/code-scanning/sarifs"] 5440 }, 5441 codesOfConduct: { 5442 getAllCodesOfConduct: ["GET /codes_of_conduct"], 5443 getConductCode: ["GET /codes_of_conduct/{key}"] 5444 }, 5445 codespaces: { 5446 addRepositoryForSecretForAuthenticatedUser: [ 5447 "PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}" 5448 ], 5449 addSelectedRepoToOrgSecret: [ 5450 "PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}" 5451 ], 5452 checkPermissionsForDevcontainer: [ 5453 "GET /repos/{owner}/{repo}/codespaces/permissions_check" 5454 ], 5455 codespaceMachinesForAuthenticatedUser: [ 5456 "GET /user/codespaces/{codespace_name}/machines" 5457 ], 5458 createForAuthenticatedUser: ["POST /user/codespaces"], 5459 createOrUpdateOrgSecret: [ 5460 "PUT /orgs/{org}/codespaces/secrets/{secret_name}" 5461 ], 5462 createOrUpdateRepoSecret: [ 5463 "PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}" 5464 ], 5465 createOrUpdateSecretForAuthenticatedUser: [ 5466 "PUT /user/codespaces/secrets/{secret_name}" 5467 ], 5468 createWithPrForAuthenticatedUser: [ 5469 "POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces" 5470 ], 5471 createWithRepoForAuthenticatedUser: [ 5472 "POST /repos/{owner}/{repo}/codespaces" 5473 ], 5474 deleteForAuthenticatedUser: ["DELETE /user/codespaces/{codespace_name}"], 5475 deleteFromOrganization: [ 5476 "DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}" 5477 ], 5478 deleteOrgSecret: ["DELETE /orgs/{org}/codespaces/secrets/{secret_name}"], 5479 deleteRepoSecret: [ 5480 "DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}" 5481 ], 5482 deleteSecretForAuthenticatedUser: [ 5483 "DELETE /user/codespaces/secrets/{secret_name}" 5484 ], 5485 exportForAuthenticatedUser: [ 5486 "POST /user/codespaces/{codespace_name}/exports" 5487 ], 5488 getCodespacesForUserInOrg: [ 5489 "GET /orgs/{org}/members/{username}/codespaces" 5490 ], 5491 getExportDetailsForAuthenticatedUser: [ 5492 "GET /user/codespaces/{codespace_name}/exports/{export_id}" 5493 ], 5494 getForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}"], 5495 getOrgPublicKey: ["GET /orgs/{org}/codespaces/secrets/public-key"], 5496 getOrgSecret: ["GET /orgs/{org}/codespaces/secrets/{secret_name}"], 5497 getPublicKeyForAuthenticatedUser: [ 5498 "GET /user/codespaces/secrets/public-key" 5499 ], 5500 getRepoPublicKey: [ 5501 "GET /repos/{owner}/{repo}/codespaces/secrets/public-key" 5502 ], 5503 getRepoSecret: [ 5504 "GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}" 5505 ], 5506 getSecretForAuthenticatedUser: [ 5507 "GET /user/codespaces/secrets/{secret_name}" 5508 ], 5509 listDevcontainersInRepositoryForAuthenticatedUser: [ 5510 "GET /repos/{owner}/{repo}/codespaces/devcontainers" 5511 ], 5512 listForAuthenticatedUser: ["GET /user/codespaces"], 5513 listInOrganization: [ 5514 "GET /orgs/{org}/codespaces", 5515 {}, 5516 { renamedParameters: { org_id: "org" } } 5517 ], 5518 listInRepositoryForAuthenticatedUser: [ 5519 "GET /repos/{owner}/{repo}/codespaces" 5520 ], 5521 listOrgSecrets: ["GET /orgs/{org}/codespaces/secrets"], 5522 listRepoSecrets: ["GET /repos/{owner}/{repo}/codespaces/secrets"], 5523 listRepositoriesForSecretForAuthenticatedUser: [ 5524 "GET /user/codespaces/secrets/{secret_name}/repositories" 5525 ], 5526 listSecretsForAuthenticatedUser: ["GET /user/codespaces/secrets"], 5527 listSelectedReposForOrgSecret: [ 5528 "GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories" 5529 ], 5530 preFlightWithRepoForAuthenticatedUser: [ 5531 "GET /repos/{owner}/{repo}/codespaces/new" 5532 ], 5533 publishForAuthenticatedUser: [ 5534 "POST /user/codespaces/{codespace_name}/publish" 5535 ], 5536 removeRepositoryForSecretForAuthenticatedUser: [ 5537 "DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}" 5538 ], 5539 removeSelectedRepoFromOrgSecret: [ 5540 "DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}" 5541 ], 5542 repoMachinesForAuthenticatedUser: [ 5543 "GET /repos/{owner}/{repo}/codespaces/machines" 5544 ], 5545 setRepositoriesForSecretForAuthenticatedUser: [ 5546 "PUT /user/codespaces/secrets/{secret_name}/repositories" 5547 ], 5548 setSelectedReposForOrgSecret: [ 5549 "PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories" 5550 ], 5551 startForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/start"], 5552 stopForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/stop"], 5553 stopInOrganization: [ 5554 "POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop" 5555 ], 5556 updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"] 5557 }, 5558 copilot: { 5559 addCopilotSeatsForTeams: [ 5560 "POST /orgs/{org}/copilot/billing/selected_teams" 5561 ], 5562 addCopilotSeatsForUsers: [ 5563 "POST /orgs/{org}/copilot/billing/selected_users" 5564 ], 5565 cancelCopilotSeatAssignmentForTeams: [ 5566 "DELETE /orgs/{org}/copilot/billing/selected_teams" 5567 ], 5568 cancelCopilotSeatAssignmentForUsers: [ 5569 "DELETE /orgs/{org}/copilot/billing/selected_users" 5570 ], 5571 getCopilotOrganizationDetails: ["GET /orgs/{org}/copilot/billing"], 5572 getCopilotSeatDetailsForUser: [ 5573 "GET /orgs/{org}/members/{username}/copilot" 5574 ], 5575 listCopilotSeats: ["GET /orgs/{org}/copilot/billing/seats"] 5576 }, 5577 dependabot: { 5578 addSelectedRepoToOrgSecret: [ 5579 "PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}" 5580 ], 5581 createOrUpdateOrgSecret: [ 5582 "PUT /orgs/{org}/dependabot/secrets/{secret_name}" 5583 ], 5584 createOrUpdateRepoSecret: [ 5585 "PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}" 5586 ], 5587 deleteOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"], 5588 deleteRepoSecret: [ 5589 "DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}" 5590 ], 5591 getAlert: ["GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"], 5592 getOrgPublicKey: ["GET /orgs/{org}/dependabot/secrets/public-key"], 5593 getOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}"], 5594 getRepoPublicKey: [ 5595 "GET /repos/{owner}/{repo}/dependabot/secrets/public-key" 5596 ], 5597 getRepoSecret: [ 5598 "GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}" 5599 ], 5600 listAlertsForEnterprise: [ 5601 "GET /enterprises/{enterprise}/dependabot/alerts" 5602 ], 5603 listAlertsForOrg: ["GET /orgs/{org}/dependabot/alerts"], 5604 listAlertsForRepo: ["GET /repos/{owner}/{repo}/dependabot/alerts"], 5605 listOrgSecrets: ["GET /orgs/{org}/dependabot/secrets"], 5606 listRepoSecrets: ["GET /repos/{owner}/{repo}/dependabot/secrets"], 5607 listSelectedReposForOrgSecret: [ 5608 "GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories" 5609 ], 5610 removeSelectedRepoFromOrgSecret: [ 5611 "DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}" 5612 ], 5613 setSelectedReposForOrgSecret: [ 5614 "PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories" 5615 ], 5616 updateAlert: [ 5617 "PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}" 5618 ] 5619 }, 5620 dependencyGraph: { 5621 createRepositorySnapshot: [ 5622 "POST /repos/{owner}/{repo}/dependency-graph/snapshots" 5623 ], 5624 diffRange: [ 5625 "GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}" 5626 ], 5627 exportSbom: ["GET /repos/{owner}/{repo}/dependency-graph/sbom"] 5628 }, 5629 emojis: { get: ["GET /emojis"] }, 5630 gists: { 5631 checkIsStarred: ["GET /gists/{gist_id}/star"], 5632 create: ["POST /gists"], 5633 createComment: ["POST /gists/{gist_id}/comments"], 5634 delete: ["DELETE /gists/{gist_id}"], 5635 deleteComment: ["DELETE /gists/{gist_id}/comments/{comment_id}"], 5636 fork: ["POST /gists/{gist_id}/forks"], 5637 get: ["GET /gists/{gist_id}"], 5638 getComment: ["GET /gists/{gist_id}/comments/{comment_id}"], 5639 getRevision: ["GET /gists/{gist_id}/{sha}"], 5640 list: ["GET /gists"], 5641 listComments: ["GET /gists/{gist_id}/comments"], 5642 listCommits: ["GET /gists/{gist_id}/commits"], 5643 listForUser: ["GET /users/{username}/gists"], 5644 listForks: ["GET /gists/{gist_id}/forks"], 5645 listPublic: ["GET /gists/public"], 5646 listStarred: ["GET /gists/starred"], 5647 star: ["PUT /gists/{gist_id}/star"], 5648 unstar: ["DELETE /gists/{gist_id}/star"], 5649 update: ["PATCH /gists/{gist_id}"], 5650 updateComment: ["PATCH /gists/{gist_id}/comments/{comment_id}"] 5651 }, 5652 git: { 5653 createBlob: ["POST /repos/{owner}/{repo}/git/blobs"], 5654 createCommit: ["POST /repos/{owner}/{repo}/git/commits"], 5655 createRef: ["POST /repos/{owner}/{repo}/git/refs"], 5656 createTag: ["POST /repos/{owner}/{repo}/git/tags"], 5657 createTree: ["POST /repos/{owner}/{repo}/git/trees"], 5658 deleteRef: ["DELETE /repos/{owner}/{repo}/git/refs/{ref}"], 5659 getBlob: ["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"], 5660 getCommit: ["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"], 5661 getRef: ["GET /repos/{owner}/{repo}/git/ref/{ref}"], 5662 getTag: ["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"], 5663 getTree: ["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"], 5664 listMatchingRefs: ["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"], 5665 updateRef: ["PATCH /repos/{owner}/{repo}/git/refs/{ref}"] 5666 }, 5667 gitignore: { 5668 getAllTemplates: ["GET /gitignore/templates"], 5669 getTemplate: ["GET /gitignore/templates/{name}"] 5670 }, 5671 interactions: { 5672 getRestrictionsForAuthenticatedUser: ["GET /user/interaction-limits"], 5673 getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits"], 5674 getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits"], 5675 getRestrictionsForYourPublicRepos: [ 5676 "GET /user/interaction-limits", 5677 {}, 5678 { renamed: ["interactions", "getRestrictionsForAuthenticatedUser"] } 5679 ], 5680 removeRestrictionsForAuthenticatedUser: ["DELETE /user/interaction-limits"], 5681 removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits"], 5682 removeRestrictionsForRepo: [ 5683 "DELETE /repos/{owner}/{repo}/interaction-limits" 5684 ], 5685 removeRestrictionsForYourPublicRepos: [ 5686 "DELETE /user/interaction-limits", 5687 {}, 5688 { renamed: ["interactions", "removeRestrictionsForAuthenticatedUser"] } 5689 ], 5690 setRestrictionsForAuthenticatedUser: ["PUT /user/interaction-limits"], 5691 setRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits"], 5692 setRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits"], 5693 setRestrictionsForYourPublicRepos: [ 5694 "PUT /user/interaction-limits", 5695 {}, 5696 { renamed: ["interactions", "setRestrictionsForAuthenticatedUser"] } 5697 ] 5698 }, 5699 issues: { 5700 addAssignees: [ 5701 "POST /repos/{owner}/{repo}/issues/{issue_number}/assignees" 5702 ], 5703 addLabels: ["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"], 5704 checkUserCanBeAssigned: ["GET /repos/{owner}/{repo}/assignees/{assignee}"], 5705 checkUserCanBeAssignedToIssue: [ 5706 "GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}" 5707 ], 5708 create: ["POST /repos/{owner}/{repo}/issues"], 5709 createComment: [ 5710 "POST /repos/{owner}/{repo}/issues/{issue_number}/comments" 5711 ], 5712 createLabel: ["POST /repos/{owner}/{repo}/labels"], 5713 createMilestone: ["POST /repos/{owner}/{repo}/milestones"], 5714 deleteComment: [ 5715 "DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}" 5716 ], 5717 deleteLabel: ["DELETE /repos/{owner}/{repo}/labels/{name}"], 5718 deleteMilestone: [ 5719 "DELETE /repos/{owner}/{repo}/milestones/{milestone_number}" 5720 ], 5721 get: ["GET /repos/{owner}/{repo}/issues/{issue_number}"], 5722 getComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"], 5723 getEvent: ["GET /repos/{owner}/{repo}/issues/events/{event_id}"], 5724 getLabel: ["GET /repos/{owner}/{repo}/labels/{name}"], 5725 getMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}"], 5726 list: ["GET /issues"], 5727 listAssignees: ["GET /repos/{owner}/{repo}/assignees"], 5728 listComments: ["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"], 5729 listCommentsForRepo: ["GET /repos/{owner}/{repo}/issues/comments"], 5730 listEvents: ["GET /repos/{owner}/{repo}/issues/{issue_number}/events"], 5731 listEventsForRepo: ["GET /repos/{owner}/{repo}/issues/events"], 5732 listEventsForTimeline: [ 5733 "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline" 5734 ], 5735 listForAuthenticatedUser: ["GET /user/issues"], 5736 listForOrg: ["GET /orgs/{org}/issues"], 5737 listForRepo: ["GET /repos/{owner}/{repo}/issues"], 5738 listLabelsForMilestone: [ 5739 "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels" 5740 ], 5741 listLabelsForRepo: ["GET /repos/{owner}/{repo}/labels"], 5742 listLabelsOnIssue: [ 5743 "GET /repos/{owner}/{repo}/issues/{issue_number}/labels" 5744 ], 5745 listMilestones: ["GET /repos/{owner}/{repo}/milestones"], 5746 lock: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"], 5747 removeAllLabels: [ 5748 "DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels" 5749 ], 5750 removeAssignees: [ 5751 "DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees" 5752 ], 5753 removeLabel: [ 5754 "DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}" 5755 ], 5756 setLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"], 5757 unlock: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"], 5758 update: ["PATCH /repos/{owner}/{repo}/issues/{issue_number}"], 5759 updateComment: ["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"], 5760 updateLabel: ["PATCH /repos/{owner}/{repo}/labels/{name}"], 5761 updateMilestone: [ 5762 "PATCH /repos/{owner}/{repo}/milestones/{milestone_number}" 5763 ] 5764 }, 5765 licenses: { 5766 get: ["GET /licenses/{license}"], 5767 getAllCommonlyUsed: ["GET /licenses"], 5768 getForRepo: ["GET /repos/{owner}/{repo}/license"] 5769 }, 5770 markdown: { 5771 render: ["POST /markdown"], 5772 renderRaw: [ 5773 "POST /markdown/raw", 5774 { headers: { "content-type": "text/plain; charset=utf-8" } } 5775 ] 5776 }, 5777 meta: { 5778 get: ["GET /meta"], 5779 getAllVersions: ["GET /versions"], 5780 getOctocat: ["GET /octocat"], 5781 getZen: ["GET /zen"], 5782 root: ["GET /"] 5783 }, 5784 migrations: { 5785 cancelImport: [ 5786 "DELETE /repos/{owner}/{repo}/import", 5787 {}, 5788 { 5789 deprecated: "octokit.rest.migrations.cancelImport() is deprecated, see https://docs.github.com/rest/migrations/source-imports#cancel-an-import" 5790 } 5791 ], 5792 deleteArchiveForAuthenticatedUser: [ 5793 "DELETE /user/migrations/{migration_id}/archive" 5794 ], 5795 deleteArchiveForOrg: [ 5796 "DELETE /orgs/{org}/migrations/{migration_id}/archive" 5797 ], 5798 downloadArchiveForOrg: [ 5799 "GET /orgs/{org}/migrations/{migration_id}/archive" 5800 ], 5801 getArchiveForAuthenticatedUser: [ 5802 "GET /user/migrations/{migration_id}/archive" 5803 ], 5804 getCommitAuthors: [ 5805 "GET /repos/{owner}/{repo}/import/authors", 5806 {}, 5807 { 5808 deprecated: "octokit.rest.migrations.getCommitAuthors() is deprecated, see https://docs.github.com/rest/migrations/source-imports#get-commit-authors" 5809 } 5810 ], 5811 getImportStatus: [ 5812 "GET /repos/{owner}/{repo}/import", 5813 {}, 5814 { 5815 deprecated: "octokit.rest.migrations.getImportStatus() is deprecated, see https://docs.github.com/rest/migrations/source-imports#get-an-import-status" 5816 } 5817 ], 5818 getLargeFiles: [ 5819 "GET /repos/{owner}/{repo}/import/large_files", 5820 {}, 5821 { 5822 deprecated: "octokit.rest.migrations.getLargeFiles() is deprecated, see https://docs.github.com/rest/migrations/source-imports#get-large-files" 5823 } 5824 ], 5825 getStatusForAuthenticatedUser: ["GET /user/migrations/{migration_id}"], 5826 getStatusForOrg: ["GET /orgs/{org}/migrations/{migration_id}"], 5827 listForAuthenticatedUser: ["GET /user/migrations"], 5828 listForOrg: ["GET /orgs/{org}/migrations"], 5829 listReposForAuthenticatedUser: [ 5830 "GET /user/migrations/{migration_id}/repositories" 5831 ], 5832 listReposForOrg: ["GET /orgs/{org}/migrations/{migration_id}/repositories"], 5833 listReposForUser: [ 5834 "GET /user/migrations/{migration_id}/repositories", 5835 {}, 5836 { renamed: ["migrations", "listReposForAuthenticatedUser"] } 5837 ], 5838 mapCommitAuthor: [ 5839 "PATCH /repos/{owner}/{repo}/import/authors/{author_id}", 5840 {}, 5841 { 5842 deprecated: "octokit.rest.migrations.mapCommitAuthor() is deprecated, see https://docs.github.com/rest/migrations/source-imports#map-a-commit-author" 5843 } 5844 ], 5845 setLfsPreference: [ 5846 "PATCH /repos/{owner}/{repo}/import/lfs", 5847 {}, 5848 { 5849 deprecated: "octokit.rest.migrations.setLfsPreference() is deprecated, see https://docs.github.com/rest/migrations/source-imports#update-git-lfs-preference" 5850 } 5851 ], 5852 startForAuthenticatedUser: ["POST /user/migrations"], 5853 startForOrg: ["POST /orgs/{org}/migrations"], 5854 startImport: [ 5855 "PUT /repos/{owner}/{repo}/import", 5856 {}, 5857 { 5858 deprecated: "octokit.rest.migrations.startImport() is deprecated, see https://docs.github.com/rest/migrations/source-imports#start-an-import" 5859 } 5860 ], 5861 unlockRepoForAuthenticatedUser: [ 5862 "DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock" 5863 ], 5864 unlockRepoForOrg: [ 5865 "DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock" 5866 ], 5867 updateImport: [ 5868 "PATCH /repos/{owner}/{repo}/import", 5869 {}, 5870 { 5871 deprecated: "octokit.rest.migrations.updateImport() is deprecated, see https://docs.github.com/rest/migrations/source-imports#update-an-import" 5872 } 5873 ] 5874 }, 5875 oidc: { 5876 getOidcCustomSubTemplateForOrg: [ 5877 "GET /orgs/{org}/actions/oidc/customization/sub" 5878 ], 5879 updateOidcCustomSubTemplateForOrg: [ 5880 "PUT /orgs/{org}/actions/oidc/customization/sub" 5881 ] 5882 }, 5883 orgs: { 5884 addSecurityManagerTeam: [ 5885 "PUT /orgs/{org}/security-managers/teams/{team_slug}" 5886 ], 5887 assignTeamToOrgRole: [ 5888 "PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" 5889 ], 5890 assignUserToOrgRole: [ 5891 "PUT /orgs/{org}/organization-roles/users/{username}/{role_id}" 5892 ], 5893 blockUser: ["PUT /orgs/{org}/blocks/{username}"], 5894 cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"], 5895 checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"], 5896 checkMembershipForUser: ["GET /orgs/{org}/members/{username}"], 5897 checkPublicMembershipForUser: ["GET /orgs/{org}/public_members/{username}"], 5898 convertMemberToOutsideCollaborator: [ 5899 "PUT /orgs/{org}/outside_collaborators/{username}" 5900 ], 5901 createCustomOrganizationRole: ["POST /orgs/{org}/organization-roles"], 5902 createInvitation: ["POST /orgs/{org}/invitations"], 5903 createOrUpdateCustomProperties: ["PATCH /orgs/{org}/properties/schema"], 5904 createOrUpdateCustomPropertiesValuesForRepos: [ 5905 "PATCH /orgs/{org}/properties/values" 5906 ], 5907 createOrUpdateCustomProperty: [ 5908 "PUT /orgs/{org}/properties/schema/{custom_property_name}" 5909 ], 5910 createWebhook: ["POST /orgs/{org}/hooks"], 5911 delete: ["DELETE /orgs/{org}"], 5912 deleteCustomOrganizationRole: [ 5913 "DELETE /orgs/{org}/organization-roles/{role_id}" 5914 ], 5915 deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"], 5916 enableOrDisableSecurityProductOnAllOrgRepos: [ 5917 "POST /orgs/{org}/{security_product}/{enablement}" 5918 ], 5919 get: ["GET /orgs/{org}"], 5920 getAllCustomProperties: ["GET /orgs/{org}/properties/schema"], 5921 getCustomProperty: [ 5922 "GET /orgs/{org}/properties/schema/{custom_property_name}" 5923 ], 5924 getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"], 5925 getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"], 5926 getOrgRole: ["GET /orgs/{org}/organization-roles/{role_id}"], 5927 getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"], 5928 getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"], 5929 getWebhookDelivery: [ 5930 "GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}" 5931 ], 5932 list: ["GET /organizations"], 5933 listAppInstallations: ["GET /orgs/{org}/installations"], 5934 listBlockedUsers: ["GET /orgs/{org}/blocks"], 5935 listCustomPropertiesValuesForRepos: ["GET /orgs/{org}/properties/values"], 5936 listFailedInvitations: ["GET /orgs/{org}/failed_invitations"], 5937 listForAuthenticatedUser: ["GET /user/orgs"], 5938 listForUser: ["GET /users/{username}/orgs"], 5939 listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"], 5940 listMembers: ["GET /orgs/{org}/members"], 5941 listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"], 5942 listOrgRoleTeams: ["GET /orgs/{org}/organization-roles/{role_id}/teams"], 5943 listOrgRoleUsers: ["GET /orgs/{org}/organization-roles/{role_id}/users"], 5944 listOrgRoles: ["GET /orgs/{org}/organization-roles"], 5945 listOrganizationFineGrainedPermissions: [ 5946 "GET /orgs/{org}/organization-fine-grained-permissions" 5947 ], 5948 listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"], 5949 listPatGrantRepositories: [ 5950 "GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories" 5951 ], 5952 listPatGrantRequestRepositories: [ 5953 "GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories" 5954 ], 5955 listPatGrantRequests: ["GET /orgs/{org}/personal-access-token-requests"], 5956 listPatGrants: ["GET /orgs/{org}/personal-access-tokens"], 5957 listPendingInvitations: ["GET /orgs/{org}/invitations"], 5958 listPublicMembers: ["GET /orgs/{org}/public_members"], 5959 listSecurityManagerTeams: ["GET /orgs/{org}/security-managers"], 5960 listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"], 5961 listWebhooks: ["GET /orgs/{org}/hooks"], 5962 patchCustomOrganizationRole: [ 5963 "PATCH /orgs/{org}/organization-roles/{role_id}" 5964 ], 5965 pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"], 5966 redeliverWebhookDelivery: [ 5967 "POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts" 5968 ], 5969 removeCustomProperty: [ 5970 "DELETE /orgs/{org}/properties/schema/{custom_property_name}" 5971 ], 5972 removeMember: ["DELETE /orgs/{org}/members/{username}"], 5973 removeMembershipForUser: ["DELETE /orgs/{org}/memberships/{username}"], 5974 removeOutsideCollaborator: [ 5975 "DELETE /orgs/{org}/outside_collaborators/{username}" 5976 ], 5977 removePublicMembershipForAuthenticatedUser: [ 5978 "DELETE /orgs/{org}/public_members/{username}" 5979 ], 5980 removeSecurityManagerTeam: [ 5981 "DELETE /orgs/{org}/security-managers/teams/{team_slug}" 5982 ], 5983 reviewPatGrantRequest: [ 5984 "POST /orgs/{org}/personal-access-token-requests/{pat_request_id}" 5985 ], 5986 reviewPatGrantRequestsInBulk: [ 5987 "POST /orgs/{org}/personal-access-token-requests" 5988 ], 5989 revokeAllOrgRolesTeam: [ 5990 "DELETE /orgs/{org}/organization-roles/teams/{team_slug}" 5991 ], 5992 revokeAllOrgRolesUser: [ 5993 "DELETE /orgs/{org}/organization-roles/users/{username}" 5994 ], 5995 revokeOrgRoleTeam: [ 5996 "DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" 5997 ], 5998 revokeOrgRoleUser: [ 5999 "DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}" 6000 ], 6001 setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"], 6002 setPublicMembershipForAuthenticatedUser: [ 6003 "PUT /orgs/{org}/public_members/{username}" 6004 ], 6005 unblockUser: ["DELETE /orgs/{org}/blocks/{username}"], 6006 update: ["PATCH /orgs/{org}"], 6007 updateMembershipForAuthenticatedUser: [ 6008 "PATCH /user/memberships/orgs/{org}" 6009 ], 6010 updatePatAccess: ["POST /orgs/{org}/personal-access-tokens/{pat_id}"], 6011 updatePatAccesses: ["POST /orgs/{org}/personal-access-tokens"], 6012 updateWebhook: ["PATCH /orgs/{org}/hooks/{hook_id}"], 6013 updateWebhookConfigForOrg: ["PATCH /orgs/{org}/hooks/{hook_id}/config"] 6014 }, 6015 packages: { 6016 deletePackageForAuthenticatedUser: [ 6017 "DELETE /user/packages/{package_type}/{package_name}" 6018 ], 6019 deletePackageForOrg: [ 6020 "DELETE /orgs/{org}/packages/{package_type}/{package_name}" 6021 ], 6022 deletePackageForUser: [ 6023 "DELETE /users/{username}/packages/{package_type}/{package_name}" 6024 ], 6025 deletePackageVersionForAuthenticatedUser: [ 6026 "DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}" 6027 ], 6028 deletePackageVersionForOrg: [ 6029 "DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}" 6030 ], 6031 deletePackageVersionForUser: [ 6032 "DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}" 6033 ], 6034 getAllPackageVersionsForAPackageOwnedByAnOrg: [ 6035 "GET /orgs/{org}/packages/{package_type}/{package_name}/versions", 6036 {}, 6037 { renamed: ["packages", "getAllPackageVersionsForPackageOwnedByOrg"] } 6038 ], 6039 getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: [ 6040 "GET /user/packages/{package_type}/{package_name}/versions", 6041 {}, 6042 { 6043 renamed: [ 6044 "packages", 6045 "getAllPackageVersionsForPackageOwnedByAuthenticatedUser" 6046 ] 6047 } 6048 ], 6049 getAllPackageVersionsForPackageOwnedByAuthenticatedUser: [ 6050 "GET /user/packages/{package_type}/{package_name}/versions" 6051 ], 6052 getAllPackageVersionsForPackageOwnedByOrg: [ 6053 "GET /orgs/{org}/packages/{package_type}/{package_name}/versions" 6054 ], 6055 getAllPackageVersionsForPackageOwnedByUser: [ 6056 "GET /users/{username}/packages/{package_type}/{package_name}/versions" 6057 ], 6058 getPackageForAuthenticatedUser: [ 6059 "GET /user/packages/{package_type}/{package_name}" 6060 ], 6061 getPackageForOrganization: [ 6062 "GET /orgs/{org}/packages/{package_type}/{package_name}" 6063 ], 6064 getPackageForUser: [ 6065 "GET /users/{username}/packages/{package_type}/{package_name}" 6066 ], 6067 getPackageVersionForAuthenticatedUser: [ 6068 "GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}" 6069 ], 6070 getPackageVersionForOrganization: [ 6071 "GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}" 6072 ], 6073 getPackageVersionForUser: [ 6074 "GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}" 6075 ], 6076 listDockerMigrationConflictingPackagesForAuthenticatedUser: [ 6077 "GET /user/docker/conflicts" 6078 ], 6079 listDockerMigrationConflictingPackagesForOrganization: [ 6080 "GET /orgs/{org}/docker/conflicts" 6081 ], 6082 listDockerMigrationConflictingPackagesForUser: [ 6083 "GET /users/{username}/docker/conflicts" 6084 ], 6085 listPackagesForAuthenticatedUser: ["GET /user/packages"], 6086 listPackagesForOrganization: ["GET /orgs/{org}/packages"], 6087 listPackagesForUser: ["GET /users/{username}/packages"], 6088 restorePackageForAuthenticatedUser: [ 6089 "POST /user/packages/{package_type}/{package_name}/restore{?token}" 6090 ], 6091 restorePackageForOrg: [ 6092 "POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}" 6093 ], 6094 restorePackageForUser: [ 6095 "POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}" 6096 ], 6097 restorePackageVersionForAuthenticatedUser: [ 6098 "POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore" 6099 ], 6100 restorePackageVersionForOrg: [ 6101 "POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore" 6102 ], 6103 restorePackageVersionForUser: [ 6104 "POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore" 6105 ] 6106 }, 6107 projects: { 6108 addCollaborator: ["PUT /projects/{project_id}/collaborators/{username}"], 6109 createCard: ["POST /projects/columns/{column_id}/cards"], 6110 createColumn: ["POST /projects/{project_id}/columns"], 6111 createForAuthenticatedUser: ["POST /user/projects"], 6112 createForOrg: ["POST /orgs/{org}/projects"], 6113 createForRepo: ["POST /repos/{owner}/{repo}/projects"], 6114 delete: ["DELETE /projects/{project_id}"], 6115 deleteCard: ["DELETE /projects/columns/cards/{card_id}"], 6116 deleteColumn: ["DELETE /projects/columns/{column_id}"], 6117 get: ["GET /projects/{project_id}"], 6118 getCard: ["GET /projects/columns/cards/{card_id}"], 6119 getColumn: ["GET /projects/columns/{column_id}"], 6120 getPermissionForUser: [ 6121 "GET /projects/{project_id}/collaborators/{username}/permission" 6122 ], 6123 listCards: ["GET /projects/columns/{column_id}/cards"], 6124 listCollaborators: ["GET /projects/{project_id}/collaborators"], 6125 listColumns: ["GET /projects/{project_id}/columns"], 6126 listForOrg: ["GET /orgs/{org}/projects"], 6127 listForRepo: ["GET /repos/{owner}/{repo}/projects"], 6128 listForUser: ["GET /users/{username}/projects"], 6129 moveCard: ["POST /projects/columns/cards/{card_id}/moves"], 6130 moveColumn: ["POST /projects/columns/{column_id}/moves"], 6131 removeCollaborator: [ 6132 "DELETE /projects/{project_id}/collaborators/{username}" 6133 ], 6134 update: ["PATCH /projects/{project_id}"], 6135 updateCard: ["PATCH /projects/columns/cards/{card_id}"], 6136 updateColumn: ["PATCH /projects/columns/{column_id}"] 6137 }, 6138 pulls: { 6139 checkIfMerged: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"], 6140 create: ["POST /repos/{owner}/{repo}/pulls"], 6141 createReplyForReviewComment: [ 6142 "POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies" 6143 ], 6144 createReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"], 6145 createReviewComment: [ 6146 "POST /repos/{owner}/{repo}/pulls/{pull_number}/comments" 6147 ], 6148 deletePendingReview: [ 6149 "DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}" 6150 ], 6151 deleteReviewComment: [ 6152 "DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}" 6153 ], 6154 dismissReview: [ 6155 "PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals" 6156 ], 6157 get: ["GET /repos/{owner}/{repo}/pulls/{pull_number}"], 6158 getReview: [ 6159 "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}" 6160 ], 6161 getReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"], 6162 list: ["GET /repos/{owner}/{repo}/pulls"], 6163 listCommentsForReview: [ 6164 "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments" 6165 ], 6166 listCommits: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"], 6167 listFiles: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"], 6168 listRequestedReviewers: [ 6169 "GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers" 6170 ], 6171 listReviewComments: [ 6172 "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments" 6173 ], 6174 listReviewCommentsForRepo: ["GET /repos/{owner}/{repo}/pulls/comments"], 6175 listReviews: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"], 6176 merge: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"], 6177 removeRequestedReviewers: [ 6178 "DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers" 6179 ], 6180 requestReviewers: [ 6181 "POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers" 6182 ], 6183 submitReview: [ 6184 "POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events" 6185 ], 6186 update: ["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"], 6187 updateBranch: [ 6188 "PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch" 6189 ], 6190 updateReview: [ 6191 "PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}" 6192 ], 6193 updateReviewComment: [ 6194 "PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}" 6195 ] 6196 }, 6197 rateLimit: { get: ["GET /rate_limit"] }, 6198 reactions: { 6199 createForCommitComment: [ 6200 "POST /repos/{owner}/{repo}/comments/{comment_id}/reactions" 6201 ], 6202 createForIssue: [ 6203 "POST /repos/{owner}/{repo}/issues/{issue_number}/reactions" 6204 ], 6205 createForIssueComment: [ 6206 "POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions" 6207 ], 6208 createForPullRequestReviewComment: [ 6209 "POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions" 6210 ], 6211 createForRelease: [ 6212 "POST /repos/{owner}/{repo}/releases/{release_id}/reactions" 6213 ], 6214 createForTeamDiscussionCommentInOrg: [ 6215 "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions" 6216 ], 6217 createForTeamDiscussionInOrg: [ 6218 "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions" 6219 ], 6220 deleteForCommitComment: [ 6221 "DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}" 6222 ], 6223 deleteForIssue: [ 6224 "DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}" 6225 ], 6226 deleteForIssueComment: [ 6227 "DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}" 6228 ], 6229 deleteForPullRequestComment: [ 6230 "DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}" 6231 ], 6232 deleteForRelease: [ 6233 "DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}" 6234 ], 6235 deleteForTeamDiscussion: [ 6236 "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}" 6237 ], 6238 deleteForTeamDiscussionComment: [ 6239 "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}" 6240 ], 6241 listForCommitComment: [ 6242 "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions" 6243 ], 6244 listForIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"], 6245 listForIssueComment: [ 6246 "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions" 6247 ], 6248 listForPullRequestReviewComment: [ 6249 "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions" 6250 ], 6251 listForRelease: [ 6252 "GET /repos/{owner}/{repo}/releases/{release_id}/reactions" 6253 ], 6254 listForTeamDiscussionCommentInOrg: [ 6255 "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions" 6256 ], 6257 listForTeamDiscussionInOrg: [ 6258 "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions" 6259 ] 6260 }, 6261 repos: { 6262 acceptInvitation: [ 6263 "PATCH /user/repository_invitations/{invitation_id}", 6264 {}, 6265 { renamed: ["repos", "acceptInvitationForAuthenticatedUser"] } 6266 ], 6267 acceptInvitationForAuthenticatedUser: [ 6268 "PATCH /user/repository_invitations/{invitation_id}" 6269 ], 6270 addAppAccessRestrictions: [ 6271 "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", 6272 {}, 6273 { mapToData: "apps" } 6274 ], 6275 addCollaborator: ["PUT /repos/{owner}/{repo}/collaborators/{username}"], 6276 addStatusCheckContexts: [ 6277 "POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", 6278 {}, 6279 { mapToData: "contexts" } 6280 ], 6281 addTeamAccessRestrictions: [ 6282 "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", 6283 {}, 6284 { mapToData: "teams" } 6285 ], 6286 addUserAccessRestrictions: [ 6287 "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", 6288 {}, 6289 { mapToData: "users" } 6290 ], 6291 cancelPagesDeployment: [ 6292 "POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel" 6293 ], 6294 checkAutomatedSecurityFixes: [ 6295 "GET /repos/{owner}/{repo}/automated-security-fixes" 6296 ], 6297 checkCollaborator: ["GET /repos/{owner}/{repo}/collaborators/{username}"], 6298 checkVulnerabilityAlerts: [ 6299 "GET /repos/{owner}/{repo}/vulnerability-alerts" 6300 ], 6301 codeownersErrors: ["GET /repos/{owner}/{repo}/codeowners/errors"], 6302 compareCommits: ["GET /repos/{owner}/{repo}/compare/{base}...{head}"], 6303 compareCommitsWithBasehead: [ 6304 "GET /repos/{owner}/{repo}/compare/{basehead}" 6305 ], 6306 createAutolink: ["POST /repos/{owner}/{repo}/autolinks"], 6307 createCommitComment: [ 6308 "POST /repos/{owner}/{repo}/commits/{commit_sha}/comments" 6309 ], 6310 createCommitSignatureProtection: [ 6311 "POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures" 6312 ], 6313 createCommitStatus: ["POST /repos/{owner}/{repo}/statuses/{sha}"], 6314 createDeployKey: ["POST /repos/{owner}/{repo}/keys"], 6315 createDeployment: ["POST /repos/{owner}/{repo}/deployments"], 6316 createDeploymentBranchPolicy: [ 6317 "POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies" 6318 ], 6319 createDeploymentProtectionRule: [ 6320 "POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules" 6321 ], 6322 createDeploymentStatus: [ 6323 "POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses" 6324 ], 6325 createDispatchEvent: ["POST /repos/{owner}/{repo}/dispatches"], 6326 createForAuthenticatedUser: ["POST /user/repos"], 6327 createFork: ["POST /repos/{owner}/{repo}/forks"], 6328 createInOrg: ["POST /orgs/{org}/repos"], 6329 createOrUpdateCustomPropertiesValues: [ 6330 "PATCH /repos/{owner}/{repo}/properties/values" 6331 ], 6332 createOrUpdateEnvironment: [ 6333 "PUT /repos/{owner}/{repo}/environments/{environment_name}" 6334 ], 6335 createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"], 6336 createOrgRuleset: ["POST /orgs/{org}/rulesets"], 6337 createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployments"], 6338 createPagesSite: ["POST /repos/{owner}/{repo}/pages"], 6339 createRelease: ["POST /repos/{owner}/{repo}/releases"], 6340 createRepoRuleset: ["POST /repos/{owner}/{repo}/rulesets"], 6341 createTagProtection: ["POST /repos/{owner}/{repo}/tags/protection"], 6342 createUsingTemplate: [ 6343 "POST /repos/{template_owner}/{template_repo}/generate" 6344 ], 6345 createWebhook: ["POST /repos/{owner}/{repo}/hooks"], 6346 declineInvitation: [ 6347 "DELETE /user/repository_invitations/{invitation_id}", 6348 {}, 6349 { renamed: ["repos", "declineInvitationForAuthenticatedUser"] } 6350 ], 6351 declineInvitationForAuthenticatedUser: [ 6352 "DELETE /user/repository_invitations/{invitation_id}" 6353 ], 6354 delete: ["DELETE /repos/{owner}/{repo}"], 6355 deleteAccessRestrictions: [ 6356 "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions" 6357 ], 6358 deleteAdminBranchProtection: [ 6359 "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins" 6360 ], 6361 deleteAnEnvironment: [ 6362 "DELETE /repos/{owner}/{repo}/environments/{environment_name}" 6363 ], 6364 deleteAutolink: ["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"], 6365 deleteBranchProtection: [ 6366 "DELETE /repos/{owner}/{repo}/branches/{branch}/protection" 6367 ], 6368 deleteCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}"], 6369 deleteCommitSignatureProtection: [ 6370 "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures" 6371 ], 6372 deleteDeployKey: ["DELETE /repos/{owner}/{repo}/keys/{key_id}"], 6373 deleteDeployment: [ 6374 "DELETE /repos/{owner}/{repo}/deployments/{deployment_id}" 6375 ], 6376 deleteDeploymentBranchPolicy: [ 6377 "DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}" 6378 ], 6379 deleteFile: ["DELETE /repos/{owner}/{repo}/contents/{path}"], 6380 deleteInvitation: [ 6381 "DELETE /repos/{owner}/{repo}/invitations/{invitation_id}" 6382 ], 6383 deleteOrgRuleset: ["DELETE /orgs/{org}/rulesets/{ruleset_id}"], 6384 deletePagesSite: ["DELETE /repos/{owner}/{repo}/pages"], 6385 deletePullRequestReviewProtection: [ 6386 "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews" 6387 ], 6388 deleteRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}"], 6389 deleteReleaseAsset: [ 6390 "DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}" 6391 ], 6392 deleteRepoRuleset: ["DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}"], 6393 deleteTagProtection: [ 6394 "DELETE /repos/{owner}/{repo}/tags/protection/{tag_protection_id}" 6395 ], 6396 deleteWebhook: ["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"], 6397 disableAutomatedSecurityFixes: [ 6398 "DELETE /repos/{owner}/{repo}/automated-security-fixes" 6399 ], 6400 disableDeploymentProtectionRule: [ 6401 "DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}" 6402 ], 6403 disablePrivateVulnerabilityReporting: [ 6404 "DELETE /repos/{owner}/{repo}/private-vulnerability-reporting" 6405 ], 6406 disableVulnerabilityAlerts: [ 6407 "DELETE /repos/{owner}/{repo}/vulnerability-alerts" 6408 ], 6409 downloadArchive: [ 6410 "GET /repos/{owner}/{repo}/zipball/{ref}", 6411 {}, 6412 { renamed: ["repos", "downloadZipballArchive"] } 6413 ], 6414 downloadTarballArchive: ["GET /repos/{owner}/{repo}/tarball/{ref}"], 6415 downloadZipballArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}"], 6416 enableAutomatedSecurityFixes: [ 6417 "PUT /repos/{owner}/{repo}/automated-security-fixes" 6418 ], 6419 enablePrivateVulnerabilityReporting: [ 6420 "PUT /repos/{owner}/{repo}/private-vulnerability-reporting" 6421 ], 6422 enableVulnerabilityAlerts: [ 6423 "PUT /repos/{owner}/{repo}/vulnerability-alerts" 6424 ], 6425 generateReleaseNotes: [ 6426 "POST /repos/{owner}/{repo}/releases/generate-notes" 6427 ], 6428 get: ["GET /repos/{owner}/{repo}"], 6429 getAccessRestrictions: [ 6430 "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions" 6431 ], 6432 getAdminBranchProtection: [ 6433 "GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins" 6434 ], 6435 getAllDeploymentProtectionRules: [ 6436 "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules" 6437 ], 6438 getAllEnvironments: ["GET /repos/{owner}/{repo}/environments"], 6439 getAllStatusCheckContexts: [ 6440 "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts" 6441 ], 6442 getAllTopics: ["GET /repos/{owner}/{repo}/topics"], 6443 getAppsWithAccessToProtectedBranch: [ 6444 "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps" 6445 ], 6446 getAutolink: ["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"], 6447 getBranch: ["GET /repos/{owner}/{repo}/branches/{branch}"], 6448 getBranchProtection: [ 6449 "GET /repos/{owner}/{repo}/branches/{branch}/protection" 6450 ], 6451 getBranchRules: ["GET /repos/{owner}/{repo}/rules/branches/{branch}"], 6452 getClones: ["GET /repos/{owner}/{repo}/traffic/clones"], 6453 getCodeFrequencyStats: ["GET /repos/{owner}/{repo}/stats/code_frequency"], 6454 getCollaboratorPermissionLevel: [ 6455 "GET /repos/{owner}/{repo}/collaborators/{username}/permission" 6456 ], 6457 getCombinedStatusForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/status"], 6458 getCommit: ["GET /repos/{owner}/{repo}/commits/{ref}"], 6459 getCommitActivityStats: ["GET /repos/{owner}/{repo}/stats/commit_activity"], 6460 getCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}"], 6461 getCommitSignatureProtection: [ 6462 "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures" 6463 ], 6464 getCommunityProfileMetrics: ["GET /repos/{owner}/{repo}/community/profile"], 6465 getContent: ["GET /repos/{owner}/{repo}/contents/{path}"], 6466 getContributorsStats: ["GET /repos/{owner}/{repo}/stats/contributors"], 6467 getCustomDeploymentProtectionRule: [ 6468 "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}" 6469 ], 6470 getCustomPropertiesValues: ["GET /repos/{owner}/{repo}/properties/values"], 6471 getDeployKey: ["GET /repos/{owner}/{repo}/keys/{key_id}"], 6472 getDeployment: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}"], 6473 getDeploymentBranchPolicy: [ 6474 "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}" 6475 ], 6476 getDeploymentStatus: [ 6477 "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}" 6478 ], 6479 getEnvironment: [ 6480 "GET /repos/{owner}/{repo}/environments/{environment_name}" 6481 ], 6482 getLatestPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/latest"], 6483 getLatestRelease: ["GET /repos/{owner}/{repo}/releases/latest"], 6484 getOrgRuleSuite: ["GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}"], 6485 getOrgRuleSuites: ["GET /orgs/{org}/rulesets/rule-suites"], 6486 getOrgRuleset: ["GET /orgs/{org}/rulesets/{ruleset_id}"], 6487 getOrgRulesets: ["GET /orgs/{org}/rulesets"], 6488 getPages: ["GET /repos/{owner}/{repo}/pages"], 6489 getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"], 6490 getPagesDeployment: [ 6491 "GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}" 6492 ], 6493 getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"], 6494 getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"], 6495 getPullRequestReviewProtection: [ 6496 "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews" 6497 ], 6498 getPunchCardStats: ["GET /repos/{owner}/{repo}/stats/punch_card"], 6499 getReadme: ["GET /repos/{owner}/{repo}/readme"], 6500 getReadmeInDirectory: ["GET /repos/{owner}/{repo}/readme/{dir}"], 6501 getRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}"], 6502 getReleaseAsset: ["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"], 6503 getReleaseByTag: ["GET /repos/{owner}/{repo}/releases/tags/{tag}"], 6504 getRepoRuleSuite: [ 6505 "GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}" 6506 ], 6507 getRepoRuleSuites: ["GET /repos/{owner}/{repo}/rulesets/rule-suites"], 6508 getRepoRuleset: ["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}"], 6509 getRepoRulesets: ["GET /repos/{owner}/{repo}/rulesets"], 6510 getStatusChecksProtection: [ 6511 "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks" 6512 ], 6513 getTeamsWithAccessToProtectedBranch: [ 6514 "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams" 6515 ], 6516 getTopPaths: ["GET /repos/{owner}/{repo}/traffic/popular/paths"], 6517 getTopReferrers: ["GET /repos/{owner}/{repo}/traffic/popular/referrers"], 6518 getUsersWithAccessToProtectedBranch: [ 6519 "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users" 6520 ], 6521 getViews: ["GET /repos/{owner}/{repo}/traffic/views"], 6522 getWebhook: ["GET /repos/{owner}/{repo}/hooks/{hook_id}"], 6523 getWebhookConfigForRepo: [ 6524 "GET /repos/{owner}/{repo}/hooks/{hook_id}/config" 6525 ], 6526 getWebhookDelivery: [ 6527 "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}" 6528 ], 6529 listActivities: ["GET /repos/{owner}/{repo}/activity"], 6530 listAutolinks: ["GET /repos/{owner}/{repo}/autolinks"], 6531 listBranches: ["GET /repos/{owner}/{repo}/branches"], 6532 listBranchesForHeadCommit: [ 6533 "GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head" 6534 ], 6535 listCollaborators: ["GET /repos/{owner}/{repo}/collaborators"], 6536 listCommentsForCommit: [ 6537 "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments" 6538 ], 6539 listCommitCommentsForRepo: ["GET /repos/{owner}/{repo}/comments"], 6540 listCommitStatusesForRef: [ 6541 "GET /repos/{owner}/{repo}/commits/{ref}/statuses" 6542 ], 6543 listCommits: ["GET /repos/{owner}/{repo}/commits"], 6544 listContributors: ["GET /repos/{owner}/{repo}/contributors"], 6545 listCustomDeploymentRuleIntegrations: [ 6546 "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps" 6547 ], 6548 listDeployKeys: ["GET /repos/{owner}/{repo}/keys"], 6549 listDeploymentBranchPolicies: [ 6550 "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies" 6551 ], 6552 listDeploymentStatuses: [ 6553 "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses" 6554 ], 6555 listDeployments: ["GET /repos/{owner}/{repo}/deployments"], 6556 listForAuthenticatedUser: ["GET /user/repos"], 6557 listForOrg: ["GET /orgs/{org}/repos"], 6558 listForUser: ["GET /users/{username}/repos"], 6559 listForks: ["GET /repos/{owner}/{repo}/forks"], 6560 listInvitations: ["GET /repos/{owner}/{repo}/invitations"], 6561 listInvitationsForAuthenticatedUser: ["GET /user/repository_invitations"], 6562 listLanguages: ["GET /repos/{owner}/{repo}/languages"], 6563 listPagesBuilds: ["GET /repos/{owner}/{repo}/pages/builds"], 6564 listPublic: ["GET /repositories"], 6565 listPullRequestsAssociatedWithCommit: [ 6566 "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls" 6567 ], 6568 listReleaseAssets: [ 6569 "GET /repos/{owner}/{repo}/releases/{release_id}/assets" 6570 ], 6571 listReleases: ["GET /repos/{owner}/{repo}/releases"], 6572 listTagProtection: ["GET /repos/{owner}/{repo}/tags/protection"], 6573 listTags: ["GET /repos/{owner}/{repo}/tags"], 6574 listTeams: ["GET /repos/{owner}/{repo}/teams"], 6575 listWebhookDeliveries: [ 6576 "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries" 6577 ], 6578 listWebhooks: ["GET /repos/{owner}/{repo}/hooks"], 6579 merge: ["POST /repos/{owner}/{repo}/merges"], 6580 mergeUpstream: ["POST /repos/{owner}/{repo}/merge-upstream"], 6581 pingWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"], 6582 redeliverWebhookDelivery: [ 6583 "POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts" 6584 ], 6585 removeAppAccessRestrictions: [ 6586 "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", 6587 {}, 6588 { mapToData: "apps" } 6589 ], 6590 removeCollaborator: [ 6591 "DELETE /repos/{owner}/{repo}/collaborators/{username}" 6592 ], 6593 removeStatusCheckContexts: [ 6594 "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", 6595 {}, 6596 { mapToData: "contexts" } 6597 ], 6598 removeStatusCheckProtection: [ 6599 "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks" 6600 ], 6601 removeTeamAccessRestrictions: [ 6602 "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", 6603 {}, 6604 { mapToData: "teams" } 6605 ], 6606 removeUserAccessRestrictions: [ 6607 "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", 6608 {}, 6609 { mapToData: "users" } 6610 ], 6611 renameBranch: ["POST /repos/{owner}/{repo}/branches/{branch}/rename"], 6612 replaceAllTopics: ["PUT /repos/{owner}/{repo}/topics"], 6613 requestPagesBuild: ["POST /repos/{owner}/{repo}/pages/builds"], 6614 setAdminBranchProtection: [ 6615 "POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins" 6616 ], 6617 setAppAccessRestrictions: [ 6618 "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", 6619 {}, 6620 { mapToData: "apps" } 6621 ], 6622 setStatusCheckContexts: [ 6623 "PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", 6624 {}, 6625 { mapToData: "contexts" } 6626 ], 6627 setTeamAccessRestrictions: [ 6628 "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", 6629 {}, 6630 { mapToData: "teams" } 6631 ], 6632 setUserAccessRestrictions: [ 6633 "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", 6634 {}, 6635 { mapToData: "users" } 6636 ], 6637 testPushWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"], 6638 transfer: ["POST /repos/{owner}/{repo}/transfer"], 6639 update: ["PATCH /repos/{owner}/{repo}"], 6640 updateBranchProtection: [ 6641 "PUT /repos/{owner}/{repo}/branches/{branch}/protection" 6642 ], 6643 updateCommitComment: ["PATCH /repos/{owner}/{repo}/comments/{comment_id}"], 6644 updateDeploymentBranchPolicy: [ 6645 "PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}" 6646 ], 6647 updateInformationAboutPagesSite: ["PUT /repos/{owner}/{repo}/pages"], 6648 updateInvitation: [ 6649 "PATCH /repos/{owner}/{repo}/invitations/{invitation_id}" 6650 ], 6651 updateOrgRuleset: ["PUT /orgs/{org}/rulesets/{ruleset_id}"], 6652 updatePullRequestReviewProtection: [ 6653 "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews" 6654 ], 6655 updateRelease: ["PATCH /repos/{owner}/{repo}/releases/{release_id}"], 6656 updateReleaseAsset: [ 6657 "PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}" 6658 ], 6659 updateRepoRuleset: ["PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}"], 6660 updateStatusCheckPotection: [ 6661 "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks", 6662 {}, 6663 { renamed: ["repos", "updateStatusCheckProtection"] } 6664 ], 6665 updateStatusCheckProtection: [ 6666 "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks" 6667 ], 6668 updateWebhook: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"], 6669 updateWebhookConfigForRepo: [ 6670 "PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config" 6671 ], 6672 uploadReleaseAsset: [ 6673 "POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}", 6674 { baseUrl: "https://uploads.github.com" } 6675 ] 6676 }, 6677 search: { 6678 code: ["GET /search/code"], 6679 commits: ["GET /search/commits"], 6680 issuesAndPullRequests: ["GET /search/issues"], 6681 labels: ["GET /search/labels"], 6682 repos: ["GET /search/repositories"], 6683 topics: ["GET /search/topics"], 6684 users: ["GET /search/users"] 6685 }, 6686 secretScanning: { 6687 getAlert: [ 6688 "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}" 6689 ], 6690 listAlertsForEnterprise: [ 6691 "GET /enterprises/{enterprise}/secret-scanning/alerts" 6692 ], 6693 listAlertsForOrg: ["GET /orgs/{org}/secret-scanning/alerts"], 6694 listAlertsForRepo: ["GET /repos/{owner}/{repo}/secret-scanning/alerts"], 6695 listLocationsForAlert: [ 6696 "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations" 6697 ], 6698 updateAlert: [ 6699 "PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}" 6700 ] 6701 }, 6702 securityAdvisories: { 6703 createFork: [ 6704 "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks" 6705 ], 6706 createPrivateVulnerabilityReport: [ 6707 "POST /repos/{owner}/{repo}/security-advisories/reports" 6708 ], 6709 createRepositoryAdvisory: [ 6710 "POST /repos/{owner}/{repo}/security-advisories" 6711 ], 6712 createRepositoryAdvisoryCveRequest: [ 6713 "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve" 6714 ], 6715 getGlobalAdvisory: ["GET /advisories/{ghsa_id}"], 6716 getRepositoryAdvisory: [ 6717 "GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}" 6718 ], 6719 listGlobalAdvisories: ["GET /advisories"], 6720 listOrgRepositoryAdvisories: ["GET /orgs/{org}/security-advisories"], 6721 listRepositoryAdvisories: ["GET /repos/{owner}/{repo}/security-advisories"], 6722 updateRepositoryAdvisory: [ 6723 "PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}" 6724 ] 6725 }, 6726 teams: { 6727 addOrUpdateMembershipForUserInOrg: [ 6728 "PUT /orgs/{org}/teams/{team_slug}/memberships/{username}" 6729 ], 6730 addOrUpdateProjectPermissionsInOrg: [ 6731 "PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}" 6732 ], 6733 addOrUpdateRepoPermissionsInOrg: [ 6734 "PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}" 6735 ], 6736 checkPermissionsForProjectInOrg: [ 6737 "GET /orgs/{org}/teams/{team_slug}/projects/{project_id}" 6738 ], 6739 checkPermissionsForRepoInOrg: [ 6740 "GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}" 6741 ], 6742 create: ["POST /orgs/{org}/teams"], 6743 createDiscussionCommentInOrg: [ 6744 "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments" 6745 ], 6746 createDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions"], 6747 deleteDiscussionCommentInOrg: [ 6748 "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}" 6749 ], 6750 deleteDiscussionInOrg: [ 6751 "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}" 6752 ], 6753 deleteInOrg: ["DELETE /orgs/{org}/teams/{team_slug}"], 6754 getByName: ["GET /orgs/{org}/teams/{team_slug}"], 6755 getDiscussionCommentInOrg: [ 6756 "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}" 6757 ], 6758 getDiscussionInOrg: [ 6759 "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}" 6760 ], 6761 getMembershipForUserInOrg: [ 6762 "GET /orgs/{org}/teams/{team_slug}/memberships/{username}" 6763 ], 6764 list: ["GET /orgs/{org}/teams"], 6765 listChildInOrg: ["GET /orgs/{org}/teams/{team_slug}/teams"], 6766 listDiscussionCommentsInOrg: [ 6767 "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments" 6768 ], 6769 listDiscussionsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions"], 6770 listForAuthenticatedUser: ["GET /user/teams"], 6771 listMembersInOrg: ["GET /orgs/{org}/teams/{team_slug}/members"], 6772 listPendingInvitationsInOrg: [ 6773 "GET /orgs/{org}/teams/{team_slug}/invitations" 6774 ], 6775 listProjectsInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects"], 6776 listReposInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos"], 6777 removeMembershipForUserInOrg: [ 6778 "DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}" 6779 ], 6780 removeProjectInOrg: [ 6781 "DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}" 6782 ], 6783 removeRepoInOrg: [ 6784 "DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}" 6785 ], 6786 updateDiscussionCommentInOrg: [ 6787 "PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}" 6788 ], 6789 updateDiscussionInOrg: [ 6790 "PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}" 6791 ], 6792 updateInOrg: ["PATCH /orgs/{org}/teams/{team_slug}"] 6793 }, 6794 users: { 6795 addEmailForAuthenticated: [ 6796 "POST /user/emails", 6797 {}, 6798 { renamed: ["users", "addEmailForAuthenticatedUser"] } 6799 ], 6800 addEmailForAuthenticatedUser: ["POST /user/emails"], 6801 addSocialAccountForAuthenticatedUser: ["POST /user/social_accounts"], 6802 block: ["PUT /user/blocks/{username}"], 6803 checkBlocked: ["GET /user/blocks/{username}"], 6804 checkFollowingForUser: ["GET /users/{username}/following/{target_user}"], 6805 checkPersonIsFollowedByAuthenticated: ["GET /user/following/{username}"], 6806 createGpgKeyForAuthenticated: [ 6807 "POST /user/gpg_keys", 6808 {}, 6809 { renamed: ["users", "createGpgKeyForAuthenticatedUser"] } 6810 ], 6811 createGpgKeyForAuthenticatedUser: ["POST /user/gpg_keys"], 6812 createPublicSshKeyForAuthenticated: [ 6813 "POST /user/keys", 6814 {}, 6815 { renamed: ["users", "createPublicSshKeyForAuthenticatedUser"] } 6816 ], 6817 createPublicSshKeyForAuthenticatedUser: ["POST /user/keys"], 6818 createSshSigningKeyForAuthenticatedUser: ["POST /user/ssh_signing_keys"], 6819 deleteEmailForAuthenticated: [ 6820 "DELETE /user/emails", 6821 {}, 6822 { renamed: ["users", "deleteEmailForAuthenticatedUser"] } 6823 ], 6824 deleteEmailForAuthenticatedUser: ["DELETE /user/emails"], 6825 deleteGpgKeyForAuthenticated: [ 6826 "DELETE /user/gpg_keys/{gpg_key_id}", 6827 {}, 6828 { renamed: ["users", "deleteGpgKeyForAuthenticatedUser"] } 6829 ], 6830 deleteGpgKeyForAuthenticatedUser: ["DELETE /user/gpg_keys/{gpg_key_id}"], 6831 deletePublicSshKeyForAuthenticated: [ 6832 "DELETE /user/keys/{key_id}", 6833 {}, 6834 { renamed: ["users", "deletePublicSshKeyForAuthenticatedUser"] } 6835 ], 6836 deletePublicSshKeyForAuthenticatedUser: ["DELETE /user/keys/{key_id}"], 6837 deleteSocialAccountForAuthenticatedUser: ["DELETE /user/social_accounts"], 6838 deleteSshSigningKeyForAuthenticatedUser: [ 6839 "DELETE /user/ssh_signing_keys/{ssh_signing_key_id}" 6840 ], 6841 follow: ["PUT /user/following/{username}"], 6842 getAuthenticated: ["GET /user"], 6843 getByUsername: ["GET /users/{username}"], 6844 getContextForUser: ["GET /users/{username}/hovercard"], 6845 getGpgKeyForAuthenticated: [ 6846 "GET /user/gpg_keys/{gpg_key_id}", 6847 {}, 6848 { renamed: ["users", "getGpgKeyForAuthenticatedUser"] } 6849 ], 6850 getGpgKeyForAuthenticatedUser: ["GET /user/gpg_keys/{gpg_key_id}"], 6851 getPublicSshKeyForAuthenticated: [ 6852 "GET /user/keys/{key_id}", 6853 {}, 6854 { renamed: ["users", "getPublicSshKeyForAuthenticatedUser"] } 6855 ], 6856 getPublicSshKeyForAuthenticatedUser: ["GET /user/keys/{key_id}"], 6857 getSshSigningKeyForAuthenticatedUser: [ 6858 "GET /user/ssh_signing_keys/{ssh_signing_key_id}" 6859 ], 6860 list: ["GET /users"], 6861 listBlockedByAuthenticated: [ 6862 "GET /user/blocks", 6863 {}, 6864 { renamed: ["users", "listBlockedByAuthenticatedUser"] } 6865 ], 6866 listBlockedByAuthenticatedUser: ["GET /user/blocks"], 6867 listEmailsForAuthenticated: [ 6868 "GET /user/emails", 6869 {}, 6870 { renamed: ["users", "listEmailsForAuthenticatedUser"] } 6871 ], 6872 listEmailsForAuthenticatedUser: ["GET /user/emails"], 6873 listFollowedByAuthenticated: [ 6874 "GET /user/following", 6875 {}, 6876 { renamed: ["users", "listFollowedByAuthenticatedUser"] } 6877 ], 6878 listFollowedByAuthenticatedUser: ["GET /user/following"], 6879 listFollowersForAuthenticatedUser: ["GET /user/followers"], 6880 listFollowersForUser: ["GET /users/{username}/followers"], 6881 listFollowingForUser: ["GET /users/{username}/following"], 6882 listGpgKeysForAuthenticated: [ 6883 "GET /user/gpg_keys", 6884 {}, 6885 { renamed: ["users", "listGpgKeysForAuthenticatedUser"] } 6886 ], 6887 listGpgKeysForAuthenticatedUser: ["GET /user/gpg_keys"], 6888 listGpgKeysForUser: ["GET /users/{username}/gpg_keys"], 6889 listPublicEmailsForAuthenticated: [ 6890 "GET /user/public_emails", 6891 {}, 6892 { renamed: ["users", "listPublicEmailsForAuthenticatedUser"] } 6893 ], 6894 listPublicEmailsForAuthenticatedUser: ["GET /user/public_emails"], 6895 listPublicKeysForUser: ["GET /users/{username}/keys"], 6896 listPublicSshKeysForAuthenticated: [ 6897 "GET /user/keys", 6898 {}, 6899 { renamed: ["users", "listPublicSshKeysForAuthenticatedUser"] } 6900 ], 6901 listPublicSshKeysForAuthenticatedUser: ["GET /user/keys"], 6902 listSocialAccountsForAuthenticatedUser: ["GET /user/social_accounts"], 6903 listSocialAccountsForUser: ["GET /users/{username}/social_accounts"], 6904 listSshSigningKeysForAuthenticatedUser: ["GET /user/ssh_signing_keys"], 6905 listSshSigningKeysForUser: ["GET /users/{username}/ssh_signing_keys"], 6906 setPrimaryEmailVisibilityForAuthenticated: [ 6907 "PATCH /user/email/visibility", 6908 {}, 6909 { renamed: ["users", "setPrimaryEmailVisibilityForAuthenticatedUser"] } 6910 ], 6911 setPrimaryEmailVisibilityForAuthenticatedUser: [ 6912 "PATCH /user/email/visibility" 6913 ], 6914 unblock: ["DELETE /user/blocks/{username}"], 6915 unfollow: ["DELETE /user/following/{username}"], 6916 updateAuthenticated: ["PATCH /user"] 6917 } 6918 }; 6919 var endpoints_default = Endpoints; 6920 6921 // pkg/dist-src/endpoints-to-methods.js 6922 var endpointMethodsMap = /* @__PURE__ */ new Map(); 6923 for (const [scope, endpoints] of Object.entries(endpoints_default)) { 6924 for (const [methodName, endpoint] of Object.entries(endpoints)) { 6925 const [route, defaults, decorations] = endpoint; 6926 const [method, url] = route.split(/ /); 6927 const endpointDefaults = Object.assign( 6928 { 6929 method, 6930 url 6931 }, 6932 defaults 6933 ); 6934 if (!endpointMethodsMap.has(scope)) { 6935 endpointMethodsMap.set(scope, /* @__PURE__ */ new Map()); 6936 } 6937 endpointMethodsMap.get(scope).set(methodName, { 6938 scope, 6939 methodName, 6940 endpointDefaults, 6941 decorations 6942 }); 6943 } 6944 } 6945 var handler = { 6946 has({ scope }, methodName) { 6947 return endpointMethodsMap.get(scope).has(methodName); 6948 }, 6949 getOwnPropertyDescriptor(target, methodName) { 6950 return { 6951 value: this.get(target, methodName), 6952 // ensures method is in the cache 6953 configurable: true, 6954 writable: true, 6955 enumerable: true 6956 }; 6957 }, 6958 defineProperty(target, methodName, descriptor) { 6959 Object.defineProperty(target.cache, methodName, descriptor); 6960 return true; 6961 }, 6962 deleteProperty(target, methodName) { 6963 delete target.cache[methodName]; 6964 return true; 6965 }, 6966 ownKeys({ scope }) { 6967 return [...endpointMethodsMap.get(scope).keys()]; 6968 }, 6969 set(target, methodName, value) { 6970 return target.cache[methodName] = value; 6971 }, 6972 get({ octokit, scope, cache }, methodName) { 6973 if (cache[methodName]) { 6974 return cache[methodName]; 6975 } 6976 const method = endpointMethodsMap.get(scope).get(methodName); 6977 if (!method) { 6978 return void 0; 6979 } 6980 const { endpointDefaults, decorations } = method; 6981 if (decorations) { 6982 cache[methodName] = decorate( 6983 octokit, 6984 scope, 6985 methodName, 6986 endpointDefaults, 6987 decorations 6988 ); 6989 } else { 6990 cache[methodName] = octokit.request.defaults(endpointDefaults); 6991 } 6992 return cache[methodName]; 6993 } 6994 }; 6995 function endpointsToMethods(octokit) { 6996 const newMethods = {}; 6997 for (const scope of endpointMethodsMap.keys()) { 6998 newMethods[scope] = new Proxy({ octokit, scope, cache: {} }, handler); 6999 } 7000 return newMethods; 7001 } 7002 function decorate(octokit, scope, methodName, defaults, decorations) { 7003 const requestWithDefaults = octokit.request.defaults(defaults); 7004 function withDecorations(...args) { 7005 let options = requestWithDefaults.endpoint.merge(...args); 7006 if (decorations.mapToData) { 7007 options = Object.assign({}, options, { 7008 data: options[decorations.mapToData], 7009 [decorations.mapToData]: void 0 7010 }); 7011 return requestWithDefaults(options); 7012 } 7013 if (decorations.renamed) { 7014 const [newScope, newMethodName] = decorations.renamed; 7015 octokit.log.warn( 7016 `octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()` 7017 ); 7018 } 7019 if (decorations.deprecated) { 7020 octokit.log.warn(decorations.deprecated); 7021 } 7022 if (decorations.renamedParameters) { 7023 const options2 = requestWithDefaults.endpoint.merge(...args); 7024 for (const [name, alias] of Object.entries( 7025 decorations.renamedParameters 7026 )) { 7027 if (name in options2) { 7028 octokit.log.warn( 7029 `"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead` 7030 ); 7031 if (!(alias in options2)) { 7032 options2[alias] = options2[name]; 7033 } 7034 delete options2[name]; 7035 } 7036 } 7037 return requestWithDefaults(options2); 7038 } 7039 return requestWithDefaults(...args); 7040 } 7041 return Object.assign(withDecorations, requestWithDefaults); 7042 } 7043 7044 // pkg/dist-src/index.js 7045 function restEndpointMethods(octokit) { 7046 const api = endpointsToMethods(octokit); 7047 return { 7048 rest: api 7049 }; 7050 } 7051 restEndpointMethods.VERSION = VERSION; 7052 function legacyRestEndpointMethods(octokit) { 7053 const api = endpointsToMethods(octokit); 7054 return { 7055 ...api, 7056 rest: api 7057 }; 7058 } 7059 legacyRestEndpointMethods.VERSION = VERSION; 7060 // Annotate the CommonJS export names for ESM import in node: 7061 0 && (0); 7062 7063 7064 /***/ }), 7065 7066 /***/ 10537: 7067 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 7068 7069 "use strict"; 7070 7071 var __create = Object.create; 7072 var __defProp = Object.defineProperty; 7073 var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 7074 var __getOwnPropNames = Object.getOwnPropertyNames; 7075 var __getProtoOf = Object.getPrototypeOf; 7076 var __hasOwnProp = Object.prototype.hasOwnProperty; 7077 var __export = (target, all) => { 7078 for (var name in all) 7079 __defProp(target, name, { get: all[name], enumerable: true }); 7080 }; 7081 var __copyProps = (to, from, except, desc) => { 7082 if (from && typeof from === "object" || typeof from === "function") { 7083 for (let key of __getOwnPropNames(from)) 7084 if (!__hasOwnProp.call(to, key) && key !== except) 7085 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 7086 } 7087 return to; 7088 }; 7089 var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( 7090 // If the importer is in node compatibility mode or this is not an ESM 7091 // file that has been converted to a CommonJS file using a Babel- 7092 // compatible transform (i.e. "__esModule" has not been set), then set 7093 // "default" to the CommonJS "module.exports" for node compatibility. 7094 isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, 7095 mod 7096 )); 7097 var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); 7098 7099 // pkg/dist-src/index.js 7100 var dist_src_exports = {}; 7101 __export(dist_src_exports, { 7102 RequestError: () => RequestError 7103 }); 7104 module.exports = __toCommonJS(dist_src_exports); 7105 var import_deprecation = __nccwpck_require__(58932); 7106 var import_once = __toESM(__nccwpck_require__(1223)); 7107 var logOnceCode = (0, import_once.default)((deprecation) => console.warn(deprecation)); 7108 var logOnceHeaders = (0, import_once.default)((deprecation) => console.warn(deprecation)); 7109 var RequestError = class extends Error { 7110 constructor(message, statusCode, options) { 7111 super(message); 7112 if (Error.captureStackTrace) { 7113 Error.captureStackTrace(this, this.constructor); 7114 } 7115 this.name = "HttpError"; 7116 this.status = statusCode; 7117 let headers; 7118 if ("headers" in options && typeof options.headers !== "undefined") { 7119 headers = options.headers; 7120 } 7121 if ("response" in options) { 7122 this.response = options.response; 7123 headers = options.response.headers; 7124 } 7125 const requestCopy = Object.assign({}, options.request); 7126 if (options.request.headers.authorization) { 7127 requestCopy.headers = Object.assign({}, options.request.headers, { 7128 authorization: options.request.headers.authorization.replace( 7129 / .*$/, 7130 " [REDACTED]" 7131 ) 7132 }); 7133 } 7134 requestCopy.url = requestCopy.url.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]").replace(/\baccess_token=\w+/g, "access_token=[REDACTED]"); 7135 this.request = requestCopy; 7136 Object.defineProperty(this, "code", { 7137 get() { 7138 logOnceCode( 7139 new import_deprecation.Deprecation( 7140 "[@octokit/request-error] `error.code` is deprecated, use `error.status`." 7141 ) 7142 ); 7143 return statusCode; 7144 } 7145 }); 7146 Object.defineProperty(this, "headers", { 7147 get() { 7148 logOnceHeaders( 7149 new import_deprecation.Deprecation( 7150 "[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`." 7151 ) 7152 ); 7153 return headers || {}; 7154 } 7155 }); 7156 } 7157 }; 7158 // Annotate the CommonJS export names for ESM import in node: 7159 0 && (0); 7160 7161 7162 /***/ }), 7163 7164 /***/ 36234: 7165 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 7166 7167 "use strict"; 7168 7169 var __defProp = Object.defineProperty; 7170 var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 7171 var __getOwnPropNames = Object.getOwnPropertyNames; 7172 var __hasOwnProp = Object.prototype.hasOwnProperty; 7173 var __export = (target, all) => { 7174 for (var name in all) 7175 __defProp(target, name, { get: all[name], enumerable: true }); 7176 }; 7177 var __copyProps = (to, from, except, desc) => { 7178 if (from && typeof from === "object" || typeof from === "function") { 7179 for (let key of __getOwnPropNames(from)) 7180 if (!__hasOwnProp.call(to, key) && key !== except) 7181 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 7182 } 7183 return to; 7184 }; 7185 var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); 7186 7187 // pkg/dist-src/index.js 7188 var dist_src_exports = {}; 7189 __export(dist_src_exports, { 7190 request: () => request 7191 }); 7192 module.exports = __toCommonJS(dist_src_exports); 7193 var import_endpoint = __nccwpck_require__(59440); 7194 var import_universal_user_agent = __nccwpck_require__(45030); 7195 7196 // pkg/dist-src/version.js 7197 var VERSION = "8.4.0"; 7198 7199 // pkg/dist-src/is-plain-object.js 7200 function isPlainObject(value) { 7201 if (typeof value !== "object" || value === null) 7202 return false; 7203 if (Object.prototype.toString.call(value) !== "[object Object]") 7204 return false; 7205 const proto = Object.getPrototypeOf(value); 7206 if (proto === null) 7207 return true; 7208 const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor; 7209 return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value); 7210 } 7211 7212 // pkg/dist-src/fetch-wrapper.js 7213 var import_request_error = __nccwpck_require__(10537); 7214 7215 // pkg/dist-src/get-buffer-response.js 7216 function getBufferResponse(response) { 7217 return response.arrayBuffer(); 7218 } 7219 7220 // pkg/dist-src/fetch-wrapper.js 7221 function fetchWrapper(requestOptions) { 7222 var _a, _b, _c, _d; 7223 const log = requestOptions.request && requestOptions.request.log ? requestOptions.request.log : console; 7224 const parseSuccessResponseBody = ((_a = requestOptions.request) == null ? void 0 : _a.parseSuccessResponseBody) !== false; 7225 if (isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) { 7226 requestOptions.body = JSON.stringify(requestOptions.body); 7227 } 7228 let headers = {}; 7229 let status; 7230 let url; 7231 let { fetch } = globalThis; 7232 if ((_b = requestOptions.request) == null ? void 0 : _b.fetch) { 7233 fetch = requestOptions.request.fetch; 7234 } 7235 if (!fetch) { 7236 throw new Error( 7237 "fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing" 7238 ); 7239 } 7240 return fetch(requestOptions.url, { 7241 method: requestOptions.method, 7242 body: requestOptions.body, 7243 redirect: (_c = requestOptions.request) == null ? void 0 : _c.redirect, 7244 headers: requestOptions.headers, 7245 signal: (_d = requestOptions.request) == null ? void 0 : _d.signal, 7246 // duplex must be set if request.body is ReadableStream or Async Iterables. 7247 // See https://fetch.spec.whatwg.org/#dom-requestinit-duplex. 7248 ...requestOptions.body && { duplex: "half" } 7249 }).then(async (response) => { 7250 url = response.url; 7251 status = response.status; 7252 for (const keyAndValue of response.headers) { 7253 headers[keyAndValue[0]] = keyAndValue[1]; 7254 } 7255 if ("deprecation" in headers) { 7256 const matches = headers.link && headers.link.match(/<([^>]+)>; rel="deprecation"/); 7257 const deprecationLink = matches && matches.pop(); 7258 log.warn( 7259 `[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${headers.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}` 7260 ); 7261 } 7262 if (status === 204 || status === 205) { 7263 return; 7264 } 7265 if (requestOptions.method === "HEAD") { 7266 if (status < 400) { 7267 return; 7268 } 7269 throw new import_request_error.RequestError(response.statusText, status, { 7270 response: { 7271 url, 7272 status, 7273 headers, 7274 data: void 0 7275 }, 7276 request: requestOptions 7277 }); 7278 } 7279 if (status === 304) { 7280 throw new import_request_error.RequestError("Not modified", status, { 7281 response: { 7282 url, 7283 status, 7284 headers, 7285 data: await getResponseData(response) 7286 }, 7287 request: requestOptions 7288 }); 7289 } 7290 if (status >= 400) { 7291 const data = await getResponseData(response); 7292 const error = new import_request_error.RequestError(toErrorMessage(data), status, { 7293 response: { 7294 url, 7295 status, 7296 headers, 7297 data 7298 }, 7299 request: requestOptions 7300 }); 7301 throw error; 7302 } 7303 return parseSuccessResponseBody ? await getResponseData(response) : response.body; 7304 }).then((data) => { 7305 return { 7306 status, 7307 url, 7308 headers, 7309 data 7310 }; 7311 }).catch((error) => { 7312 if (error instanceof import_request_error.RequestError) 7313 throw error; 7314 else if (error.name === "AbortError") 7315 throw error; 7316 let message = error.message; 7317 if (error.name === "TypeError" && "cause" in error) { 7318 if (error.cause instanceof Error) { 7319 message = error.cause.message; 7320 } else if (typeof error.cause === "string") { 7321 message = error.cause; 7322 } 7323 } 7324 throw new import_request_error.RequestError(message, 500, { 7325 request: requestOptions 7326 }); 7327 }); 7328 } 7329 async function getResponseData(response) { 7330 const contentType = response.headers.get("content-type"); 7331 if (/application\/json/.test(contentType)) { 7332 return response.json().catch(() => response.text()).catch(() => ""); 7333 } 7334 if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) { 7335 return response.text(); 7336 } 7337 return getBufferResponse(response); 7338 } 7339 function toErrorMessage(data) { 7340 if (typeof data === "string") 7341 return data; 7342 let suffix; 7343 if ("documentation_url" in data) { 7344 suffix = ` - ${data.documentation_url}`; 7345 } else { 7346 suffix = ""; 7347 } 7348 if ("message" in data) { 7349 if (Array.isArray(data.errors)) { 7350 return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}${suffix}`; 7351 } 7352 return `${data.message}${suffix}`; 7353 } 7354 return `Unknown error: ${JSON.stringify(data)}`; 7355 } 7356 7357 // pkg/dist-src/with-defaults.js 7358 function withDefaults(oldEndpoint, newDefaults) { 7359 const endpoint2 = oldEndpoint.defaults(newDefaults); 7360 const newApi = function(route, parameters) { 7361 const endpointOptions = endpoint2.merge(route, parameters); 7362 if (!endpointOptions.request || !endpointOptions.request.hook) { 7363 return fetchWrapper(endpoint2.parse(endpointOptions)); 7364 } 7365 const request2 = (route2, parameters2) => { 7366 return fetchWrapper( 7367 endpoint2.parse(endpoint2.merge(route2, parameters2)) 7368 ); 7369 }; 7370 Object.assign(request2, { 7371 endpoint: endpoint2, 7372 defaults: withDefaults.bind(null, endpoint2) 7373 }); 7374 return endpointOptions.request.hook(request2, endpointOptions); 7375 }; 7376 return Object.assign(newApi, { 7377 endpoint: endpoint2, 7378 defaults: withDefaults.bind(null, endpoint2) 7379 }); 7380 } 7381 7382 // pkg/dist-src/index.js 7383 var request = withDefaults(import_endpoint.endpoint, { 7384 headers: { 7385 "user-agent": `octokit-request.js/${VERSION} ${(0, import_universal_user_agent.getUserAgent)()}` 7386 } 7387 }); 7388 // Annotate the CommonJS export names for ESM import in node: 7389 0 && (0); 7390 7391 7392 /***/ }), 7393 7394 /***/ 66833: 7395 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 7396 7397 "use strict"; 7398 7399 Object.defineProperty(exports, "__esModule", ({ value: true })); 7400 exports.toDSSEBundle = exports.toMessageSignatureBundle = void 0; 7401 /* 7402 Copyright 2023 The Sigstore Authors. 7403 7404 Licensed under the Apache License, Version 2.0 (the "License"); 7405 you may not use this file except in compliance with the License. 7406 You may obtain a copy of the License at 7407 7408 http://www.apache.org/licenses/LICENSE-2.0 7409 7410 Unless required by applicable law or agreed to in writing, software 7411 distributed under the License is distributed on an "AS IS" BASIS, 7412 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 7413 See the License for the specific language governing permissions and 7414 limitations under the License. 7415 */ 7416 const protobuf_specs_1 = __nccwpck_require__(60530); 7417 const bundle_1 = __nccwpck_require__(22712); 7418 // Message signature bundle - $case: 'messageSignature' 7419 function toMessageSignatureBundle(options) { 7420 return { 7421 mediaType: options.singleCertificate 7422 ? bundle_1.BUNDLE_V03_MEDIA_TYPE 7423 : bundle_1.BUNDLE_V02_MEDIA_TYPE, 7424 content: { 7425 $case: 'messageSignature', 7426 messageSignature: { 7427 messageDigest: { 7428 algorithm: protobuf_specs_1.HashAlgorithm.SHA2_256, 7429 digest: options.digest, 7430 }, 7431 signature: options.signature, 7432 }, 7433 }, 7434 verificationMaterial: toVerificationMaterial(options), 7435 }; 7436 } 7437 exports.toMessageSignatureBundle = toMessageSignatureBundle; 7438 // DSSE envelope bundle - $case: 'dsseEnvelope' 7439 function toDSSEBundle(options) { 7440 return { 7441 mediaType: options.singleCertificate 7442 ? bundle_1.BUNDLE_V03_MEDIA_TYPE 7443 : bundle_1.BUNDLE_V02_MEDIA_TYPE, 7444 content: { 7445 $case: 'dsseEnvelope', 7446 dsseEnvelope: toEnvelope(options), 7447 }, 7448 verificationMaterial: toVerificationMaterial(options), 7449 }; 7450 } 7451 exports.toDSSEBundle = toDSSEBundle; 7452 function toEnvelope(options) { 7453 return { 7454 payloadType: options.artifactType, 7455 payload: options.artifact, 7456 signatures: [toSignature(options)], 7457 }; 7458 } 7459 function toSignature(options) { 7460 return { 7461 keyid: options.keyHint || '', 7462 sig: options.signature, 7463 }; 7464 } 7465 // Verification material 7466 function toVerificationMaterial(options) { 7467 return { 7468 content: toKeyContent(options), 7469 tlogEntries: [], 7470 timestampVerificationData: { rfc3161Timestamps: [] }, 7471 }; 7472 } 7473 function toKeyContent(options) { 7474 if (options.certificate) { 7475 if (options.singleCertificate) { 7476 return { 7477 $case: 'certificate', 7478 certificate: { rawBytes: options.certificate }, 7479 }; 7480 } 7481 else { 7482 return { 7483 $case: 'x509CertificateChain', 7484 x509CertificateChain: { 7485 certificates: [{ rawBytes: options.certificate }], 7486 }, 7487 }; 7488 } 7489 } 7490 else { 7491 return { 7492 $case: 'publicKey', 7493 publicKey: { 7494 hint: options.keyHint || '', 7495 }, 7496 }; 7497 } 7498 } 7499 7500 7501 /***/ }), 7502 7503 /***/ 22712: 7504 /***/ ((__unused_webpack_module, exports) => { 7505 7506 "use strict"; 7507 7508 Object.defineProperty(exports, "__esModule", ({ value: true })); 7509 exports.isBundleWithDsseEnvelope = exports.isBundleWithMessageSignature = exports.isBundleWithPublicKey = exports.isBundleWithCertificateChain = exports.BUNDLE_V03_MEDIA_TYPE = exports.BUNDLE_V03_LEGACY_MEDIA_TYPE = exports.BUNDLE_V02_MEDIA_TYPE = exports.BUNDLE_V01_MEDIA_TYPE = void 0; 7510 exports.BUNDLE_V01_MEDIA_TYPE = 'application/vnd.dev.sigstore.bundle+json;version=0.1'; 7511 exports.BUNDLE_V02_MEDIA_TYPE = 'application/vnd.dev.sigstore.bundle+json;version=0.2'; 7512 exports.BUNDLE_V03_LEGACY_MEDIA_TYPE = 'application/vnd.dev.sigstore.bundle+json;version=0.3'; 7513 exports.BUNDLE_V03_MEDIA_TYPE = 'application/vnd.dev.sigstore.bundle.v0.3+json'; 7514 // Type guards for bundle variants. 7515 function isBundleWithCertificateChain(b) { 7516 return b.verificationMaterial.content.$case === 'x509CertificateChain'; 7517 } 7518 exports.isBundleWithCertificateChain = isBundleWithCertificateChain; 7519 function isBundleWithPublicKey(b) { 7520 return b.verificationMaterial.content.$case === 'publicKey'; 7521 } 7522 exports.isBundleWithPublicKey = isBundleWithPublicKey; 7523 function isBundleWithMessageSignature(b) { 7524 return b.content.$case === 'messageSignature'; 7525 } 7526 exports.isBundleWithMessageSignature = isBundleWithMessageSignature; 7527 function isBundleWithDsseEnvelope(b) { 7528 return b.content.$case === 'dsseEnvelope'; 7529 } 7530 exports.isBundleWithDsseEnvelope = isBundleWithDsseEnvelope; 7531 7532 7533 /***/ }), 7534 7535 /***/ 63802: 7536 /***/ ((__unused_webpack_module, exports) => { 7537 7538 "use strict"; 7539 7540 Object.defineProperty(exports, "__esModule", ({ value: true })); 7541 exports.ValidationError = void 0; 7542 /* 7543 Copyright 2023 The Sigstore Authors. 7544 7545 Licensed under the Apache License, Version 2.0 (the "License"); 7546 you may not use this file except in compliance with the License. 7547 You may obtain a copy of the License at 7548 7549 http://www.apache.org/licenses/LICENSE-2.0 7550 7551 Unless required by applicable law or agreed to in writing, software 7552 distributed under the License is distributed on an "AS IS" BASIS, 7553 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 7554 See the License for the specific language governing permissions and 7555 limitations under the License. 7556 */ 7557 class ValidationError extends Error { 7558 constructor(message, fields) { 7559 super(message); 7560 this.fields = fields; 7561 } 7562 } 7563 exports.ValidationError = ValidationError; 7564 7565 7566 /***/ }), 7567 7568 /***/ 29715: 7569 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 7570 7571 "use strict"; 7572 7573 Object.defineProperty(exports, "__esModule", ({ value: true })); 7574 exports.isBundleV01 = exports.assertBundleV02 = exports.assertBundleV01 = exports.assertBundleLatest = exports.assertBundle = exports.envelopeToJSON = exports.envelopeFromJSON = exports.bundleToJSON = exports.bundleFromJSON = exports.ValidationError = exports.isBundleWithPublicKey = exports.isBundleWithMessageSignature = exports.isBundleWithDsseEnvelope = exports.isBundleWithCertificateChain = exports.BUNDLE_V03_MEDIA_TYPE = exports.BUNDLE_V03_LEGACY_MEDIA_TYPE = exports.BUNDLE_V02_MEDIA_TYPE = exports.BUNDLE_V01_MEDIA_TYPE = exports.toMessageSignatureBundle = exports.toDSSEBundle = void 0; 7575 /* 7576 Copyright 2023 The Sigstore Authors. 7577 7578 Licensed under the Apache License, Version 2.0 (the "License"); 7579 you may not use this file except in compliance with the License. 7580 You may obtain a copy of the License at 7581 7582 http://www.apache.org/licenses/LICENSE-2.0 7583 7584 Unless required by applicable law or agreed to in writing, software 7585 distributed under the License is distributed on an "AS IS" BASIS, 7586 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 7587 See the License for the specific language governing permissions and 7588 limitations under the License. 7589 */ 7590 var build_1 = __nccwpck_require__(66833); 7591 Object.defineProperty(exports, "toDSSEBundle", ({ enumerable: true, get: function () { return build_1.toDSSEBundle; } })); 7592 Object.defineProperty(exports, "toMessageSignatureBundle", ({ enumerable: true, get: function () { return build_1.toMessageSignatureBundle; } })); 7593 var bundle_1 = __nccwpck_require__(22712); 7594 Object.defineProperty(exports, "BUNDLE_V01_MEDIA_TYPE", ({ enumerable: true, get: function () { return bundle_1.BUNDLE_V01_MEDIA_TYPE; } })); 7595 Object.defineProperty(exports, "BUNDLE_V02_MEDIA_TYPE", ({ enumerable: true, get: function () { return bundle_1.BUNDLE_V02_MEDIA_TYPE; } })); 7596 Object.defineProperty(exports, "BUNDLE_V03_LEGACY_MEDIA_TYPE", ({ enumerable: true, get: function () { return bundle_1.BUNDLE_V03_LEGACY_MEDIA_TYPE; } })); 7597 Object.defineProperty(exports, "BUNDLE_V03_MEDIA_TYPE", ({ enumerable: true, get: function () { return bundle_1.BUNDLE_V03_MEDIA_TYPE; } })); 7598 Object.defineProperty(exports, "isBundleWithCertificateChain", ({ enumerable: true, get: function () { return bundle_1.isBundleWithCertificateChain; } })); 7599 Object.defineProperty(exports, "isBundleWithDsseEnvelope", ({ enumerable: true, get: function () { return bundle_1.isBundleWithDsseEnvelope; } })); 7600 Object.defineProperty(exports, "isBundleWithMessageSignature", ({ enumerable: true, get: function () { return bundle_1.isBundleWithMessageSignature; } })); 7601 Object.defineProperty(exports, "isBundleWithPublicKey", ({ enumerable: true, get: function () { return bundle_1.isBundleWithPublicKey; } })); 7602 var error_1 = __nccwpck_require__(63802); 7603 Object.defineProperty(exports, "ValidationError", ({ enumerable: true, get: function () { return error_1.ValidationError; } })); 7604 var serialized_1 = __nccwpck_require__(39875); 7605 Object.defineProperty(exports, "bundleFromJSON", ({ enumerable: true, get: function () { return serialized_1.bundleFromJSON; } })); 7606 Object.defineProperty(exports, "bundleToJSON", ({ enumerable: true, get: function () { return serialized_1.bundleToJSON; } })); 7607 Object.defineProperty(exports, "envelopeFromJSON", ({ enumerable: true, get: function () { return serialized_1.envelopeFromJSON; } })); 7608 Object.defineProperty(exports, "envelopeToJSON", ({ enumerable: true, get: function () { return serialized_1.envelopeToJSON; } })); 7609 var validate_1 = __nccwpck_require__(39599); 7610 Object.defineProperty(exports, "assertBundle", ({ enumerable: true, get: function () { return validate_1.assertBundle; } })); 7611 Object.defineProperty(exports, "assertBundleLatest", ({ enumerable: true, get: function () { return validate_1.assertBundleLatest; } })); 7612 Object.defineProperty(exports, "assertBundleV01", ({ enumerable: true, get: function () { return validate_1.assertBundleV01; } })); 7613 Object.defineProperty(exports, "assertBundleV02", ({ enumerable: true, get: function () { return validate_1.assertBundleV02; } })); 7614 Object.defineProperty(exports, "isBundleV01", ({ enumerable: true, get: function () { return validate_1.isBundleV01; } })); 7615 7616 7617 /***/ }), 7618 7619 /***/ 39875: 7620 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 7621 7622 "use strict"; 7623 7624 Object.defineProperty(exports, "__esModule", ({ value: true })); 7625 exports.envelopeToJSON = exports.envelopeFromJSON = exports.bundleToJSON = exports.bundleFromJSON = void 0; 7626 /* 7627 Copyright 2023 The Sigstore Authors. 7628 7629 Licensed under the Apache License, Version 2.0 (the "License"); 7630 you may not use this file except in compliance with the License. 7631 You may obtain a copy of the License at 7632 7633 http://www.apache.org/licenses/LICENSE-2.0 7634 7635 Unless required by applicable law or agreed to in writing, software 7636 distributed under the License is distributed on an "AS IS" BASIS, 7637 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 7638 See the License for the specific language governing permissions and 7639 limitations under the License. 7640 */ 7641 const protobuf_specs_1 = __nccwpck_require__(60530); 7642 const bundle_1 = __nccwpck_require__(22712); 7643 const validate_1 = __nccwpck_require__(39599); 7644 const bundleFromJSON = (obj) => { 7645 const bundle = protobuf_specs_1.Bundle.fromJSON(obj); 7646 switch (bundle.mediaType) { 7647 case bundle_1.BUNDLE_V01_MEDIA_TYPE: 7648 (0, validate_1.assertBundleV01)(bundle); 7649 break; 7650 case bundle_1.BUNDLE_V02_MEDIA_TYPE: 7651 (0, validate_1.assertBundleV02)(bundle); 7652 break; 7653 default: 7654 (0, validate_1.assertBundleLatest)(bundle); 7655 break; 7656 } 7657 return bundle; 7658 }; 7659 exports.bundleFromJSON = bundleFromJSON; 7660 const bundleToJSON = (bundle) => { 7661 return protobuf_specs_1.Bundle.toJSON(bundle); 7662 }; 7663 exports.bundleToJSON = bundleToJSON; 7664 const envelopeFromJSON = (obj) => { 7665 return protobuf_specs_1.Envelope.fromJSON(obj); 7666 }; 7667 exports.envelopeFromJSON = envelopeFromJSON; 7668 const envelopeToJSON = (envelope) => { 7669 return protobuf_specs_1.Envelope.toJSON(envelope); 7670 }; 7671 exports.envelopeToJSON = envelopeToJSON; 7672 7673 7674 /***/ }), 7675 7676 /***/ 39599: 7677 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 7678 7679 "use strict"; 7680 7681 Object.defineProperty(exports, "__esModule", ({ value: true })); 7682 exports.assertBundleLatest = exports.assertBundleV02 = exports.isBundleV01 = exports.assertBundleV01 = exports.assertBundle = void 0; 7683 /* 7684 Copyright 2023 The Sigstore Authors. 7685 7686 Licensed under the Apache License, Version 2.0 (the "License"); 7687 you may not use this file except in compliance with the License. 7688 You may obtain a copy of the License at 7689 7690 http://www.apache.org/licenses/LICENSE-2.0 7691 7692 Unless required by applicable law or agreed to in writing, software 7693 distributed under the License is distributed on an "AS IS" BASIS, 7694 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 7695 See the License for the specific language governing permissions and 7696 limitations under the License. 7697 */ 7698 const error_1 = __nccwpck_require__(63802); 7699 // Performs basic validation of a Sigstore bundle to ensure that all required 7700 // fields are populated. This is not a complete validation of the bundle, but 7701 // rather a check that the bundle is in a valid state to be processed by the 7702 // rest of the code. 7703 function assertBundle(b) { 7704 const invalidValues = validateBundleBase(b); 7705 if (invalidValues.length > 0) { 7706 throw new error_1.ValidationError('invalid bundle', invalidValues); 7707 } 7708 } 7709 exports.assertBundle = assertBundle; 7710 // Asserts that the given bundle conforms to the v0.1 bundle format. 7711 function assertBundleV01(b) { 7712 const invalidValues = []; 7713 invalidValues.push(...validateBundleBase(b)); 7714 invalidValues.push(...validateInclusionPromise(b)); 7715 if (invalidValues.length > 0) { 7716 throw new error_1.ValidationError('invalid v0.1 bundle', invalidValues); 7717 } 7718 } 7719 exports.assertBundleV01 = assertBundleV01; 7720 // Type guard to determine if Bundle is a v0.1 bundle. 7721 function isBundleV01(b) { 7722 try { 7723 assertBundleV01(b); 7724 return true; 7725 } 7726 catch (e) { 7727 return false; 7728 } 7729 } 7730 exports.isBundleV01 = isBundleV01; 7731 // Asserts that the given bundle conforms to the v0.2 bundle format. 7732 function assertBundleV02(b) { 7733 const invalidValues = []; 7734 invalidValues.push(...validateBundleBase(b)); 7735 invalidValues.push(...validateInclusionProof(b)); 7736 if (invalidValues.length > 0) { 7737 throw new error_1.ValidationError('invalid v0.2 bundle', invalidValues); 7738 } 7739 } 7740 exports.assertBundleV02 = assertBundleV02; 7741 // Asserts that the given bundle conforms to the newest (0.3) bundle format. 7742 function assertBundleLatest(b) { 7743 const invalidValues = []; 7744 invalidValues.push(...validateBundleBase(b)); 7745 invalidValues.push(...validateInclusionProof(b)); 7746 invalidValues.push(...validateNoCertificateChain(b)); 7747 if (invalidValues.length > 0) { 7748 throw new error_1.ValidationError('invalid bundle', invalidValues); 7749 } 7750 } 7751 exports.assertBundleLatest = assertBundleLatest; 7752 function validateBundleBase(b) { 7753 const invalidValues = []; 7754 // Media type validation 7755 if (b.mediaType === undefined || 7756 (!b.mediaType.match(/^application\/vnd\.dev\.sigstore\.bundle\+json;version=\d\.\d/) && 7757 !b.mediaType.match(/^application\/vnd\.dev\.sigstore\.bundle\.v\d\.\d\+json/))) { 7758 invalidValues.push('mediaType'); 7759 } 7760 // Content-related validation 7761 if (b.content === undefined) { 7762 invalidValues.push('content'); 7763 } 7764 else { 7765 switch (b.content.$case) { 7766 case 'messageSignature': 7767 if (b.content.messageSignature.messageDigest === undefined) { 7768 invalidValues.push('content.messageSignature.messageDigest'); 7769 } 7770 else { 7771 if (b.content.messageSignature.messageDigest.digest.length === 0) { 7772 invalidValues.push('content.messageSignature.messageDigest.digest'); 7773 } 7774 } 7775 if (b.content.messageSignature.signature.length === 0) { 7776 invalidValues.push('content.messageSignature.signature'); 7777 } 7778 break; 7779 case 'dsseEnvelope': 7780 if (b.content.dsseEnvelope.payload.length === 0) { 7781 invalidValues.push('content.dsseEnvelope.payload'); 7782 } 7783 if (b.content.dsseEnvelope.signatures.length !== 1) { 7784 invalidValues.push('content.dsseEnvelope.signatures'); 7785 } 7786 else { 7787 if (b.content.dsseEnvelope.signatures[0].sig.length === 0) { 7788 invalidValues.push('content.dsseEnvelope.signatures[0].sig'); 7789 } 7790 } 7791 break; 7792 } 7793 } 7794 // Verification material-related validation 7795 if (b.verificationMaterial === undefined) { 7796 invalidValues.push('verificationMaterial'); 7797 } 7798 else { 7799 if (b.verificationMaterial.content === undefined) { 7800 invalidValues.push('verificationMaterial.content'); 7801 } 7802 else { 7803 switch (b.verificationMaterial.content.$case) { 7804 case 'x509CertificateChain': 7805 if (b.verificationMaterial.content.x509CertificateChain.certificates 7806 .length === 0) { 7807 invalidValues.push('verificationMaterial.content.x509CertificateChain.certificates'); 7808 } 7809 b.verificationMaterial.content.x509CertificateChain.certificates.forEach((cert, i) => { 7810 if (cert.rawBytes.length === 0) { 7811 invalidValues.push(`verificationMaterial.content.x509CertificateChain.certificates[${i}].rawBytes`); 7812 } 7813 }); 7814 break; 7815 case 'certificate': 7816 if (b.verificationMaterial.content.certificate.rawBytes.length === 0) { 7817 invalidValues.push('verificationMaterial.content.certificate.rawBytes'); 7818 } 7819 break; 7820 } 7821 } 7822 if (b.verificationMaterial.tlogEntries === undefined) { 7823 invalidValues.push('verificationMaterial.tlogEntries'); 7824 } 7825 else { 7826 if (b.verificationMaterial.tlogEntries.length > 0) { 7827 b.verificationMaterial.tlogEntries.forEach((entry, i) => { 7828 if (entry.logId === undefined) { 7829 invalidValues.push(`verificationMaterial.tlogEntries[${i}].logId`); 7830 } 7831 if (entry.kindVersion === undefined) { 7832 invalidValues.push(`verificationMaterial.tlogEntries[${i}].kindVersion`); 7833 } 7834 }); 7835 } 7836 } 7837 } 7838 return invalidValues; 7839 } 7840 // Necessary for V01 bundles 7841 function validateInclusionPromise(b) { 7842 const invalidValues = []; 7843 if (b.verificationMaterial && 7844 b.verificationMaterial.tlogEntries?.length > 0) { 7845 b.verificationMaterial.tlogEntries.forEach((entry, i) => { 7846 if (entry.inclusionPromise === undefined) { 7847 invalidValues.push(`verificationMaterial.tlogEntries[${i}].inclusionPromise`); 7848 } 7849 }); 7850 } 7851 return invalidValues; 7852 } 7853 // Necessary for V02 and later bundles 7854 function validateInclusionProof(b) { 7855 const invalidValues = []; 7856 if (b.verificationMaterial && 7857 b.verificationMaterial.tlogEntries?.length > 0) { 7858 b.verificationMaterial.tlogEntries.forEach((entry, i) => { 7859 if (entry.inclusionProof === undefined) { 7860 invalidValues.push(`verificationMaterial.tlogEntries[${i}].inclusionProof`); 7861 } 7862 else { 7863 if (entry.inclusionProof.checkpoint === undefined) { 7864 invalidValues.push(`verificationMaterial.tlogEntries[${i}].inclusionProof.checkpoint`); 7865 } 7866 } 7867 }); 7868 } 7869 return invalidValues; 7870 } 7871 // Necessary for V03 and later bundles 7872 function validateNoCertificateChain(b) { 7873 const invalidValues = []; 7874 if (b.verificationMaterial?.content?.$case === 'x509CertificateChain') { 7875 invalidValues.push('verificationMaterial.content.$case'); 7876 } 7877 return invalidValues; 7878 } 7879 7880 7881 /***/ }), 7882 7883 /***/ 96136: 7884 /***/ ((__unused_webpack_module, exports) => { 7885 7886 "use strict"; 7887 7888 Object.defineProperty(exports, "__esModule", ({ value: true })); 7889 exports.ASN1TypeError = exports.ASN1ParseError = void 0; 7890 /* 7891 Copyright 2023 The Sigstore Authors. 7892 7893 Licensed under the Apache License, Version 2.0 (the "License"); 7894 you may not use this file except in compliance with the License. 7895 You may obtain a copy of the License at 7896 7897 http://www.apache.org/licenses/LICENSE-2.0 7898 7899 Unless required by applicable law or agreed to in writing, software 7900 distributed under the License is distributed on an "AS IS" BASIS, 7901 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 7902 See the License for the specific language governing permissions and 7903 limitations under the License. 7904 */ 7905 class ASN1ParseError extends Error { 7906 } 7907 exports.ASN1ParseError = ASN1ParseError; 7908 class ASN1TypeError extends Error { 7909 } 7910 exports.ASN1TypeError = ASN1TypeError; 7911 7912 7913 /***/ }), 7914 7915 /***/ 54095: 7916 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 7917 7918 "use strict"; 7919 7920 Object.defineProperty(exports, "__esModule", ({ value: true })); 7921 exports.ASN1Obj = void 0; 7922 /* 7923 Copyright 2023 The Sigstore Authors. 7924 7925 Licensed under the Apache License, Version 2.0 (the "License"); 7926 you may not use this file except in compliance with the License. 7927 You may obtain a copy of the License at 7928 7929 http://www.apache.org/licenses/LICENSE-2.0 7930 7931 Unless required by applicable law or agreed to in writing, software 7932 distributed under the License is distributed on an "AS IS" BASIS, 7933 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 7934 See the License for the specific language governing permissions and 7935 limitations under the License. 7936 */ 7937 var obj_1 = __nccwpck_require__(82988); 7938 Object.defineProperty(exports, "ASN1Obj", ({ enumerable: true, get: function () { return obj_1.ASN1Obj; } })); 7939 7940 7941 /***/ }), 7942 7943 /***/ 25088: 7944 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 7945 7946 "use strict"; 7947 7948 /* 7949 Copyright 2023 The Sigstore Authors. 7950 7951 Licensed under the Apache License, Version 2.0 (the "License"); 7952 you may not use this file except in compliance with the License. 7953 You may obtain a copy of the License at 7954 7955 http://www.apache.org/licenses/LICENSE-2.0 7956 7957 Unless required by applicable law or agreed to in writing, software 7958 distributed under the License is distributed on an "AS IS" BASIS, 7959 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 7960 See the License for the specific language governing permissions and 7961 limitations under the License. 7962 */ 7963 Object.defineProperty(exports, "__esModule", ({ value: true })); 7964 exports.encodeLength = exports.decodeLength = void 0; 7965 const error_1 = __nccwpck_require__(96136); 7966 // Decodes the length of a DER-encoded ANS.1 element from the supplied stream. 7967 // https://learn.microsoft.com/en-us/windows/win32/seccertenroll/about-encoded-length-and-value-bytes 7968 function decodeLength(stream) { 7969 const buf = stream.getUint8(); 7970 // If the most significant bit is UNSET the length is just the value of the 7971 // byte. 7972 if ((buf & 0x80) === 0x00) { 7973 return buf; 7974 } 7975 // Otherwise, the lower 7 bits of the first byte indicate the number of bytes 7976 // that follow to encode the length. 7977 const byteCount = buf & 0x7f; 7978 // Ensure the encoded length can safely fit in a JS number. 7979 if (byteCount > 6) { 7980 throw new error_1.ASN1ParseError('length exceeds 6 byte limit'); 7981 } 7982 // Iterate over the bytes that encode the length. 7983 let len = 0; 7984 for (let i = 0; i < byteCount; i++) { 7985 len = len * 256 + stream.getUint8(); 7986 } 7987 // This is a valid ASN.1 length encoding, but we don't support it. 7988 if (len === 0) { 7989 throw new error_1.ASN1ParseError('indefinite length encoding not supported'); 7990 } 7991 return len; 7992 } 7993 exports.decodeLength = decodeLength; 7994 // Translates the supplied value to a DER-encoded length. 7995 function encodeLength(len) { 7996 if (len < 128) { 7997 return Buffer.from([len]); 7998 } 7999 // Bitwise operations on large numbers are not supported in JS, so we need to 8000 // use BigInts. 8001 let val = BigInt(len); 8002 const bytes = []; 8003 while (val > 0n) { 8004 bytes.unshift(Number(val & 255n)); 8005 val = val >> 8n; 8006 } 8007 return Buffer.from([0x80 | bytes.length, ...bytes]); 8008 } 8009 exports.encodeLength = encodeLength; 8010 8011 8012 /***/ }), 8013 8014 /***/ 82988: 8015 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 8016 8017 "use strict"; 8018 8019 Object.defineProperty(exports, "__esModule", ({ value: true })); 8020 exports.ASN1Obj = void 0; 8021 /* 8022 Copyright 2023 The Sigstore Authors. 8023 8024 Licensed under the Apache License, Version 2.0 (the "License"); 8025 you may not use this file except in compliance with the License. 8026 You may obtain a copy of the License at 8027 8028 http://www.apache.org/licenses/LICENSE-2.0 8029 8030 Unless required by applicable law or agreed to in writing, software 8031 distributed under the License is distributed on an "AS IS" BASIS, 8032 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8033 See the License for the specific language governing permissions and 8034 limitations under the License. 8035 */ 8036 const stream_1 = __nccwpck_require__(52283); 8037 const error_1 = __nccwpck_require__(96136); 8038 const length_1 = __nccwpck_require__(25088); 8039 const parse_1 = __nccwpck_require__(93947); 8040 const tag_1 = __nccwpck_require__(13725); 8041 class ASN1Obj { 8042 constructor(tag, value, subs) { 8043 this.tag = tag; 8044 this.value = value; 8045 this.subs = subs; 8046 } 8047 // Constructs an ASN.1 object from a Buffer of DER-encoded bytes. 8048 static parseBuffer(buf) { 8049 return parseStream(new stream_1.ByteStream(buf)); 8050 } 8051 toDER() { 8052 const valueStream = new stream_1.ByteStream(); 8053 if (this.subs.length > 0) { 8054 for (const sub of this.subs) { 8055 valueStream.appendView(sub.toDER()); 8056 } 8057 } 8058 else { 8059 valueStream.appendView(this.value); 8060 } 8061 const value = valueStream.buffer; 8062 // Concat tag/length/value 8063 const obj = new stream_1.ByteStream(); 8064 obj.appendChar(this.tag.toDER()); 8065 obj.appendView((0, length_1.encodeLength)(value.length)); 8066 obj.appendView(value); 8067 return obj.buffer; 8068 } 8069 ///////////////////////////////////////////////////////////////////////////// 8070 // Convenience methods for parsing ASN.1 primitives into JS types 8071 // Returns the ASN.1 object's value as a boolean. Throws an error if the 8072 // object is not a boolean. 8073 toBoolean() { 8074 if (!this.tag.isBoolean()) { 8075 throw new error_1.ASN1TypeError('not a boolean'); 8076 } 8077 return (0, parse_1.parseBoolean)(this.value); 8078 } 8079 // Returns the ASN.1 object's value as a BigInt. Throws an error if the 8080 // object is not an integer. 8081 toInteger() { 8082 if (!this.tag.isInteger()) { 8083 throw new error_1.ASN1TypeError('not an integer'); 8084 } 8085 return (0, parse_1.parseInteger)(this.value); 8086 } 8087 // Returns the ASN.1 object's value as an OID string. Throws an error if the 8088 // object is not an OID. 8089 toOID() { 8090 if (!this.tag.isOID()) { 8091 throw new error_1.ASN1TypeError('not an OID'); 8092 } 8093 return (0, parse_1.parseOID)(this.value); 8094 } 8095 // Returns the ASN.1 object's value as a Date. Throws an error if the object 8096 // is not either a UTCTime or a GeneralizedTime. 8097 toDate() { 8098 switch (true) { 8099 case this.tag.isUTCTime(): 8100 return (0, parse_1.parseTime)(this.value, true); 8101 case this.tag.isGeneralizedTime(): 8102 return (0, parse_1.parseTime)(this.value, false); 8103 default: 8104 throw new error_1.ASN1TypeError('not a date'); 8105 } 8106 } 8107 // Returns the ASN.1 object's value as a number[] where each number is the 8108 // value of a bit in the bit string. Throws an error if the object is not a 8109 // bit string. 8110 toBitString() { 8111 if (!this.tag.isBitString()) { 8112 throw new error_1.ASN1TypeError('not a bit string'); 8113 } 8114 return (0, parse_1.parseBitString)(this.value); 8115 } 8116 } 8117 exports.ASN1Obj = ASN1Obj; 8118 ///////////////////////////////////////////////////////////////////////////// 8119 // Internal stream parsing functions 8120 function parseStream(stream) { 8121 // Parse tag, length, and value from stream 8122 const tag = new tag_1.ASN1Tag(stream.getUint8()); 8123 const len = (0, length_1.decodeLength)(stream); 8124 const value = stream.slice(stream.position, len); 8125 const start = stream.position; 8126 let subs = []; 8127 // If the object is constructed, parse its children. Sometimes, children 8128 // are embedded in OCTESTRING objects, so we need to check those 8129 // for children as well. 8130 if (tag.constructed) { 8131 subs = collectSubs(stream, len); 8132 } 8133 else if (tag.isOctetString()) { 8134 // Attempt to parse children of OCTETSTRING objects. If anything fails, 8135 // assume the object is not constructed and treat as primitive. 8136 try { 8137 subs = collectSubs(stream, len); 8138 } 8139 catch (e) { 8140 // Fail silently and treat as primitive 8141 } 8142 } 8143 // If there are no children, move stream cursor to the end of the object 8144 if (subs.length === 0) { 8145 stream.seek(start + len); 8146 } 8147 return new ASN1Obj(tag, value, subs); 8148 } 8149 function collectSubs(stream, len) { 8150 // Calculate end of object content 8151 const end = stream.position + len; 8152 // Make sure there are enough bytes left in the stream. This should never 8153 // happen, cause it'll get caught when the stream is sliced in parseStream. 8154 // Leaving as an extra check just in case. 8155 /* istanbul ignore if */ 8156 if (end > stream.length) { 8157 throw new error_1.ASN1ParseError('invalid length'); 8158 } 8159 // Parse all children 8160 const subs = []; 8161 while (stream.position < end) { 8162 subs.push(parseStream(stream)); 8163 } 8164 // When we're done parsing children, we should be at the end of the object 8165 if (stream.position !== end) { 8166 throw new error_1.ASN1ParseError('invalid length'); 8167 } 8168 return subs; 8169 } 8170 8171 8172 /***/ }), 8173 8174 /***/ 93947: 8175 /***/ ((__unused_webpack_module, exports) => { 8176 8177 "use strict"; 8178 8179 Object.defineProperty(exports, "__esModule", ({ value: true })); 8180 exports.parseBitString = exports.parseBoolean = exports.parseOID = exports.parseTime = exports.parseStringASCII = exports.parseInteger = void 0; 8181 /* 8182 Copyright 2023 The Sigstore Authors. 8183 8184 Licensed under the Apache License, Version 2.0 (the "License"); 8185 you may not use this file except in compliance with the License. 8186 You may obtain a copy of the License at 8187 8188 http://www.apache.org/licenses/LICENSE-2.0 8189 8190 Unless required by applicable law or agreed to in writing, software 8191 distributed under the License is distributed on an "AS IS" BASIS, 8192 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8193 See the License for the specific language governing permissions and 8194 limitations under the License. 8195 */ 8196 const RE_TIME_SHORT_YEAR = /^(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\.\d{3})?Z$/; 8197 const RE_TIME_LONG_YEAR = /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\.\d{3})?Z$/; 8198 // Parse a BigInt from the DER-encoded buffer 8199 // https://learn.microsoft.com/en-us/windows/win32/seccertenroll/about-integer 8200 function parseInteger(buf) { 8201 let pos = 0; 8202 const end = buf.length; 8203 let val = buf[pos]; 8204 const neg = val > 0x7f; 8205 // Consume any padding bytes 8206 const pad = neg ? 0xff : 0x00; 8207 while (val == pad && ++pos < end) { 8208 val = buf[pos]; 8209 } 8210 // Calculate remaining bytes to read 8211 const len = end - pos; 8212 if (len === 0) 8213 return BigInt(neg ? -1 : 0); 8214 // Handle two's complement for negative numbers 8215 val = neg ? val - 256 : val; 8216 // Parse remaining bytes 8217 let n = BigInt(val); 8218 for (let i = pos + 1; i < end; ++i) { 8219 n = n * BigInt(256) + BigInt(buf[i]); 8220 } 8221 return n; 8222 } 8223 exports.parseInteger = parseInteger; 8224 // Parse an ASCII string from the DER-encoded buffer 8225 // https://learn.microsoft.com/en-us/windows/win32/seccertenroll/about-basic-types#boolean 8226 function parseStringASCII(buf) { 8227 return buf.toString('ascii'); 8228 } 8229 exports.parseStringASCII = parseStringASCII; 8230 // Parse a Date from the DER-encoded buffer 8231 // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.5.1 8232 function parseTime(buf, shortYear) { 8233 const timeStr = parseStringASCII(buf); 8234 // Parse the time string into matches - captured groups start at index 1 8235 const m = shortYear 8236 ? RE_TIME_SHORT_YEAR.exec(timeStr) 8237 : RE_TIME_LONG_YEAR.exec(timeStr); 8238 if (!m) { 8239 throw new Error('invalid time'); 8240 } 8241 // Translate dates with a 2-digit year to 4 digits per the spec 8242 if (shortYear) { 8243 let year = Number(m[1]); 8244 year += year >= 50 ? 1900 : 2000; 8245 m[1] = year.toString(); 8246 } 8247 // Translate to ISO8601 format and parse 8248 return new Date(`${m[1]}-${m[2]}-${m[3]}T${m[4]}:${m[5]}:${m[6]}Z`); 8249 } 8250 exports.parseTime = parseTime; 8251 // Parse an OID from the DER-encoded buffer 8252 // https://learn.microsoft.com/en-us/windows/win32/seccertenroll/about-object-identifier 8253 function parseOID(buf) { 8254 let pos = 0; 8255 const end = buf.length; 8256 // Consume first byte which encodes the first two OID components 8257 let n = buf[pos++]; 8258 const first = Math.floor(n / 40); 8259 const second = n % 40; 8260 let oid = `${first}.${second}`; 8261 // Consume remaining bytes 8262 let val = 0; 8263 for (; pos < end; ++pos) { 8264 n = buf[pos]; 8265 val = (val << 7) + (n & 0x7f); 8266 // If the left-most bit is NOT set, then this is the last byte in the 8267 // sequence and we can add the value to the OID and reset the accumulator 8268 if ((n & 0x80) === 0) { 8269 oid += `.${val}`; 8270 val = 0; 8271 } 8272 } 8273 return oid; 8274 } 8275 exports.parseOID = parseOID; 8276 // Parse a boolean from the DER-encoded buffer 8277 // https://learn.microsoft.com/en-us/windows/win32/seccertenroll/about-basic-types#boolean 8278 function parseBoolean(buf) { 8279 return buf[0] !== 0; 8280 } 8281 exports.parseBoolean = parseBoolean; 8282 // Parse a bit string from the DER-encoded buffer 8283 // https://learn.microsoft.com/en-us/windows/win32/seccertenroll/about-bit-string 8284 function parseBitString(buf) { 8285 // First byte tell us how many unused bits are in the last byte 8286 const unused = buf[0]; 8287 const start = 1; 8288 const end = buf.length; 8289 const bits = []; 8290 for (let i = start; i < end; ++i) { 8291 const byte = buf[i]; 8292 // The skip value is only used for the last byte 8293 const skip = i === end - 1 ? unused : 0; 8294 // Iterate over each bit in the byte (most significant first) 8295 for (let j = 7; j >= skip; --j) { 8296 // Read the bit and add it to the bit string 8297 bits.push((byte >> j) & 0x01); 8298 } 8299 } 8300 return bits; 8301 } 8302 exports.parseBitString = parseBitString; 8303 8304 8305 /***/ }), 8306 8307 /***/ 13725: 8308 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 8309 8310 "use strict"; 8311 8312 Object.defineProperty(exports, "__esModule", ({ value: true })); 8313 exports.ASN1Tag = void 0; 8314 /* 8315 Copyright 2023 The Sigstore Authors. 8316 8317 Licensed under the Apache License, Version 2.0 (the "License"); 8318 you may not use this file except in compliance with the License. 8319 You may obtain a copy of the License at 8320 8321 http://www.apache.org/licenses/LICENSE-2.0 8322 8323 Unless required by applicable law or agreed to in writing, software 8324 distributed under the License is distributed on an "AS IS" BASIS, 8325 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8326 See the License for the specific language governing permissions and 8327 limitations under the License. 8328 */ 8329 const error_1 = __nccwpck_require__(96136); 8330 const UNIVERSAL_TAG = { 8331 BOOLEAN: 0x01, 8332 INTEGER: 0x02, 8333 BIT_STRING: 0x03, 8334 OCTET_STRING: 0x04, 8335 OBJECT_IDENTIFIER: 0x06, 8336 SEQUENCE: 0x10, 8337 SET: 0x11, 8338 PRINTABLE_STRING: 0x13, 8339 UTC_TIME: 0x17, 8340 GENERALIZED_TIME: 0x18, 8341 }; 8342 const TAG_CLASS = { 8343 UNIVERSAL: 0x00, 8344 APPLICATION: 0x01, 8345 CONTEXT_SPECIFIC: 0x02, 8346 PRIVATE: 0x03, 8347 }; 8348 // https://learn.microsoft.com/en-us/windows/win32/seccertenroll/about-encoded-tag-bytes 8349 class ASN1Tag { 8350 constructor(enc) { 8351 // Bits 0 through 4 are the tag number 8352 this.number = enc & 0x1f; 8353 // Bit 5 is the constructed bit 8354 this.constructed = (enc & 0x20) === 0x20; 8355 // Bit 6 & 7 are the class 8356 this.class = enc >> 6; 8357 if (this.number === 0x1f) { 8358 throw new error_1.ASN1ParseError('long form tags not supported'); 8359 } 8360 if (this.class === TAG_CLASS.UNIVERSAL && this.number === 0x00) { 8361 throw new error_1.ASN1ParseError('unsupported tag 0x00'); 8362 } 8363 } 8364 isUniversal() { 8365 return this.class === TAG_CLASS.UNIVERSAL; 8366 } 8367 isContextSpecific(num) { 8368 const res = this.class === TAG_CLASS.CONTEXT_SPECIFIC; 8369 return num !== undefined ? res && this.number === num : res; 8370 } 8371 isBoolean() { 8372 return this.isUniversal() && this.number === UNIVERSAL_TAG.BOOLEAN; 8373 } 8374 isInteger() { 8375 return this.isUniversal() && this.number === UNIVERSAL_TAG.INTEGER; 8376 } 8377 isBitString() { 8378 return this.isUniversal() && this.number === UNIVERSAL_TAG.BIT_STRING; 8379 } 8380 isOctetString() { 8381 return this.isUniversal() && this.number === UNIVERSAL_TAG.OCTET_STRING; 8382 } 8383 isOID() { 8384 return (this.isUniversal() && this.number === UNIVERSAL_TAG.OBJECT_IDENTIFIER); 8385 } 8386 isUTCTime() { 8387 return this.isUniversal() && this.number === UNIVERSAL_TAG.UTC_TIME; 8388 } 8389 isGeneralizedTime() { 8390 return this.isUniversal() && this.number === UNIVERSAL_TAG.GENERALIZED_TIME; 8391 } 8392 toDER() { 8393 return this.number | (this.constructed ? 0x20 : 0x00) | (this.class << 6); 8394 } 8395 } 8396 exports.ASN1Tag = ASN1Tag; 8397 8398 8399 /***/ }), 8400 8401 /***/ 83914: 8402 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 8403 8404 "use strict"; 8405 8406 var __importDefault = (this && this.__importDefault) || function (mod) { 8407 return (mod && mod.__esModule) ? mod : { "default": mod }; 8408 }; 8409 Object.defineProperty(exports, "__esModule", ({ value: true })); 8410 exports.bufferEqual = exports.verify = exports.hash = exports.digest = exports.createPublicKey = void 0; 8411 /* 8412 Copyright 2023 The Sigstore Authors. 8413 8414 Licensed under the Apache License, Version 2.0 (the "License"); 8415 you may not use this file except in compliance with the License. 8416 You may obtain a copy of the License at 8417 8418 http://www.apache.org/licenses/LICENSE-2.0 8419 8420 Unless required by applicable law or agreed to in writing, software 8421 distributed under the License is distributed on an "AS IS" BASIS, 8422 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8423 See the License for the specific language governing permissions and 8424 limitations under the License. 8425 */ 8426 const crypto_1 = __importDefault(__nccwpck_require__(6113)); 8427 const SHA256_ALGORITHM = 'sha256'; 8428 function createPublicKey(key, type = 'spki') { 8429 if (typeof key === 'string') { 8430 return crypto_1.default.createPublicKey(key); 8431 } 8432 else { 8433 return crypto_1.default.createPublicKey({ key, format: 'der', type: type }); 8434 } 8435 } 8436 exports.createPublicKey = createPublicKey; 8437 function digest(algorithm, ...data) { 8438 const hash = crypto_1.default.createHash(algorithm); 8439 for (const d of data) { 8440 hash.update(d); 8441 } 8442 return hash.digest(); 8443 } 8444 exports.digest = digest; 8445 // TODO: deprecate this in favor of digest() 8446 function hash(...data) { 8447 const hash = crypto_1.default.createHash(SHA256_ALGORITHM); 8448 for (const d of data) { 8449 hash.update(d); 8450 } 8451 return hash.digest(); 8452 } 8453 exports.hash = hash; 8454 function verify(data, key, signature, algorithm) { 8455 // The try/catch is to work around an issue in Node 14.x where verify throws 8456 // an error in some scenarios if the signature is invalid. 8457 try { 8458 return crypto_1.default.verify(algorithm, data, key, signature); 8459 } 8460 catch (e) { 8461 /* istanbul ignore next */ 8462 return false; 8463 } 8464 } 8465 exports.verify = verify; 8466 function bufferEqual(a, b) { 8467 try { 8468 return crypto_1.default.timingSafeEqual(a, b); 8469 } 8470 catch { 8471 /* istanbul ignore next */ 8472 return false; 8473 } 8474 } 8475 exports.bufferEqual = bufferEqual; 8476 8477 8478 /***/ }), 8479 8480 /***/ 29892: 8481 /***/ ((__unused_webpack_module, exports) => { 8482 8483 "use strict"; 8484 8485 Object.defineProperty(exports, "__esModule", ({ value: true })); 8486 exports.preAuthEncoding = void 0; 8487 /* 8488 Copyright 2023 The Sigstore Authors. 8489 8490 Licensed under the Apache License, Version 2.0 (the "License"); 8491 you may not use this file except in compliance with the License. 8492 You may obtain a copy of the License at 8493 8494 http://www.apache.org/licenses/LICENSE-2.0 8495 8496 Unless required by applicable law or agreed to in writing, software 8497 distributed under the License is distributed on an "AS IS" BASIS, 8498 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8499 See the License for the specific language governing permissions and 8500 limitations under the License. 8501 */ 8502 const PAE_PREFIX = 'DSSEv1'; 8503 // DSSE Pre-Authentication Encoding 8504 function preAuthEncoding(payloadType, payload) { 8505 const prefix = [ 8506 PAE_PREFIX, 8507 payloadType.length, 8508 payloadType, 8509 payload.length, 8510 '', 8511 ].join(' '); 8512 return Buffer.concat([Buffer.from(prefix, 'ascii'), payload]); 8513 } 8514 exports.preAuthEncoding = preAuthEncoding; 8515 8516 8517 /***/ }), 8518 8519 /***/ 7496: 8520 /***/ ((__unused_webpack_module, exports) => { 8521 8522 "use strict"; 8523 8524 Object.defineProperty(exports, "__esModule", ({ value: true })); 8525 exports.base64Decode = exports.base64Encode = void 0; 8526 /* 8527 Copyright 2023 The Sigstore Authors. 8528 8529 Licensed under the Apache License, Version 2.0 (the "License"); 8530 you may not use this file except in compliance with the License. 8531 You may obtain a copy of the License at 8532 8533 http://www.apache.org/licenses/LICENSE-2.0 8534 8535 Unless required by applicable law or agreed to in writing, software 8536 distributed under the License is distributed on an "AS IS" BASIS, 8537 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8538 See the License for the specific language governing permissions and 8539 limitations under the License. 8540 */ 8541 const BASE64_ENCODING = 'base64'; 8542 const UTF8_ENCODING = 'utf-8'; 8543 function base64Encode(str) { 8544 return Buffer.from(str, UTF8_ENCODING).toString(BASE64_ENCODING); 8545 } 8546 exports.base64Encode = base64Encode; 8547 function base64Decode(str) { 8548 return Buffer.from(str, BASE64_ENCODING).toString(UTF8_ENCODING); 8549 } 8550 exports.base64Decode = base64Decode; 8551 8552 8553 /***/ }), 8554 8555 /***/ 3352: 8556 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 8557 8558 "use strict"; 8559 8560 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 8561 if (k2 === undefined) k2 = k; 8562 var desc = Object.getOwnPropertyDescriptor(m, k); 8563 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 8564 desc = { enumerable: true, get: function() { return m[k]; } }; 8565 } 8566 Object.defineProperty(o, k2, desc); 8567 }) : (function(o, m, k, k2) { 8568 if (k2 === undefined) k2 = k; 8569 o[k2] = m[k]; 8570 })); 8571 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 8572 Object.defineProperty(o, "default", { enumerable: true, value: v }); 8573 }) : function(o, v) { 8574 o["default"] = v; 8575 }); 8576 var __importStar = (this && this.__importStar) || function (mod) { 8577 if (mod && mod.__esModule) return mod; 8578 var result = {}; 8579 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 8580 __setModuleDefault(result, mod); 8581 return result; 8582 }; 8583 Object.defineProperty(exports, "__esModule", ({ value: true })); 8584 exports.X509SCTExtension = exports.X509Certificate = exports.EXTENSION_OID_SCT = exports.ByteStream = exports.RFC3161Timestamp = exports.pem = exports.json = exports.encoding = exports.dsse = exports.crypto = exports.ASN1Obj = void 0; 8585 /* 8586 Copyright 2023 The Sigstore Authors. 8587 8588 Licensed under the Apache License, Version 2.0 (the "License"); 8589 you may not use this file except in compliance with the License. 8590 You may obtain a copy of the License at 8591 8592 http://www.apache.org/licenses/LICENSE-2.0 8593 8594 Unless required by applicable law or agreed to in writing, software 8595 distributed under the License is distributed on an "AS IS" BASIS, 8596 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8597 See the License for the specific language governing permissions and 8598 limitations under the License. 8599 */ 8600 var asn1_1 = __nccwpck_require__(54095); 8601 Object.defineProperty(exports, "ASN1Obj", ({ enumerable: true, get: function () { return asn1_1.ASN1Obj; } })); 8602 exports.crypto = __importStar(__nccwpck_require__(83914)); 8603 exports.dsse = __importStar(__nccwpck_require__(29892)); 8604 exports.encoding = __importStar(__nccwpck_require__(7496)); 8605 exports.json = __importStar(__nccwpck_require__(89022)); 8606 exports.pem = __importStar(__nccwpck_require__(25225)); 8607 var rfc3161_1 = __nccwpck_require__(37411); 8608 Object.defineProperty(exports, "RFC3161Timestamp", ({ enumerable: true, get: function () { return rfc3161_1.RFC3161Timestamp; } })); 8609 var stream_1 = __nccwpck_require__(52283); 8610 Object.defineProperty(exports, "ByteStream", ({ enumerable: true, get: function () { return stream_1.ByteStream; } })); 8611 var x509_1 = __nccwpck_require__(75500); 8612 Object.defineProperty(exports, "EXTENSION_OID_SCT", ({ enumerable: true, get: function () { return x509_1.EXTENSION_OID_SCT; } })); 8613 Object.defineProperty(exports, "X509Certificate", ({ enumerable: true, get: function () { return x509_1.X509Certificate; } })); 8614 Object.defineProperty(exports, "X509SCTExtension", ({ enumerable: true, get: function () { return x509_1.X509SCTExtension; } })); 8615 8616 8617 /***/ }), 8618 8619 /***/ 89022: 8620 /***/ ((__unused_webpack_module, exports) => { 8621 8622 "use strict"; 8623 8624 /* 8625 Copyright 2023 The Sigstore Authors. 8626 8627 Licensed under the Apache License, Version 2.0 (the "License"); 8628 you may not use this file except in compliance with the License. 8629 You may obtain a copy of the License at 8630 8631 http://www.apache.org/licenses/LICENSE-2.0 8632 8633 Unless required by applicable law or agreed to in writing, software 8634 distributed under the License is distributed on an "AS IS" BASIS, 8635 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8636 See the License for the specific language governing permissions and 8637 limitations under the License. 8638 */ 8639 Object.defineProperty(exports, "__esModule", ({ value: true })); 8640 exports.canonicalize = void 0; 8641 // JSON canonicalization per https://github.com/cyberphone/json-canonicalization 8642 // eslint-disable-next-line @typescript-eslint/no-explicit-any 8643 function canonicalize(object) { 8644 let buffer = ''; 8645 if (object === null || typeof object !== 'object' || object.toJSON != null) { 8646 // Primitives or toJSONable objects 8647 buffer += JSON.stringify(object); 8648 } 8649 else if (Array.isArray(object)) { 8650 // Array - maintain element order 8651 buffer += '['; 8652 let first = true; 8653 object.forEach((element) => { 8654 if (!first) { 8655 buffer += ','; 8656 } 8657 first = false; 8658 // recursive call 8659 buffer += canonicalize(element); 8660 }); 8661 buffer += ']'; 8662 } 8663 else { 8664 // Object - Sort properties before serializing 8665 buffer += '{'; 8666 let first = true; 8667 Object.keys(object) 8668 .sort() 8669 .forEach((property) => { 8670 if (!first) { 8671 buffer += ','; 8672 } 8673 first = false; 8674 buffer += JSON.stringify(property); 8675 buffer += ':'; 8676 // recursive call 8677 buffer += canonicalize(object[property]); 8678 }); 8679 buffer += '}'; 8680 } 8681 return buffer; 8682 } 8683 exports.canonicalize = canonicalize; 8684 8685 8686 /***/ }), 8687 8688 /***/ 15960: 8689 /***/ ((__unused_webpack_module, exports) => { 8690 8691 "use strict"; 8692 8693 Object.defineProperty(exports, "__esModule", ({ value: true })); 8694 exports.SHA2_HASH_ALGOS = exports.ECDSA_SIGNATURE_ALGOS = void 0; 8695 exports.ECDSA_SIGNATURE_ALGOS = { 8696 '1.2.840.10045.4.3.1': 'sha224', 8697 '1.2.840.10045.4.3.2': 'sha256', 8698 '1.2.840.10045.4.3.3': 'sha384', 8699 '1.2.840.10045.4.3.4': 'sha512', 8700 }; 8701 exports.SHA2_HASH_ALGOS = { 8702 '2.16.840.1.101.3.4.2.1': 'sha256', 8703 '2.16.840.1.101.3.4.2.2': 'sha384', 8704 '2.16.840.1.101.3.4.2.3': 'sha512', 8705 }; 8706 8707 8708 /***/ }), 8709 8710 /***/ 25225: 8711 /***/ ((__unused_webpack_module, exports) => { 8712 8713 "use strict"; 8714 8715 Object.defineProperty(exports, "__esModule", ({ value: true })); 8716 exports.fromDER = exports.toDER = void 0; 8717 /* 8718 Copyright 2023 The Sigstore Authors. 8719 8720 Licensed under the Apache License, Version 2.0 (the "License"); 8721 you may not use this file except in compliance with the License. 8722 You may obtain a copy of the License at 8723 8724 http://www.apache.org/licenses/LICENSE-2.0 8725 8726 Unless required by applicable law or agreed to in writing, software 8727 distributed under the License is distributed on an "AS IS" BASIS, 8728 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8729 See the License for the specific language governing permissions and 8730 limitations under the License. 8731 */ 8732 const PEM_HEADER = /-----BEGIN (.*)-----/; 8733 const PEM_FOOTER = /-----END (.*)-----/; 8734 function toDER(certificate) { 8735 let der = ''; 8736 certificate.split('\n').forEach((line) => { 8737 if (line.match(PEM_HEADER) || line.match(PEM_FOOTER)) { 8738 return; 8739 } 8740 der += line; 8741 }); 8742 return Buffer.from(der, 'base64'); 8743 } 8744 exports.toDER = toDER; 8745 // Translates a DER-encoded buffer into a PEM-encoded string. Standard PEM 8746 // encoding dictates that each certificate should have a trailing newline after 8747 // the footer. 8748 function fromDER(certificate, type = 'CERTIFICATE') { 8749 // Base64-encode the certificate. 8750 const der = certificate.toString('base64'); 8751 // Split the certificate into lines of 64 characters. 8752 const lines = der.match(/.{1,64}/g) || ''; 8753 return [`-----BEGIN ${type}-----`, ...lines, `-----END ${type}-----`] 8754 .join('\n') 8755 .concat('\n'); 8756 } 8757 exports.fromDER = fromDER; 8758 8759 8760 /***/ }), 8761 8762 /***/ 74526: 8763 /***/ ((__unused_webpack_module, exports) => { 8764 8765 "use strict"; 8766 8767 Object.defineProperty(exports, "__esModule", ({ value: true })); 8768 exports.RFC3161TimestampVerificationError = void 0; 8769 /* 8770 Copyright 2023 The Sigstore Authors. 8771 8772 Licensed under the Apache License, Version 2.0 (the "License"); 8773 you may not use this file except in compliance with the License. 8774 You may obtain a copy of the License at 8775 8776 http://www.apache.org/licenses/LICENSE-2.0 8777 8778 Unless required by applicable law or agreed to in writing, software 8779 distributed under the License is distributed on an "AS IS" BASIS, 8780 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8781 See the License for the specific language governing permissions and 8782 limitations under the License. 8783 */ 8784 class RFC3161TimestampVerificationError extends Error { 8785 } 8786 exports.RFC3161TimestampVerificationError = RFC3161TimestampVerificationError; 8787 8788 8789 /***/ }), 8790 8791 /***/ 37411: 8792 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 8793 8794 "use strict"; 8795 8796 /* 8797 Copyright 2023 The Sigstore Authors. 8798 8799 Licensed under the Apache License, Version 2.0 (the "License"); 8800 you may not use this file except in compliance with the License. 8801 You may obtain a copy of the License at 8802 8803 http://www.apache.org/licenses/LICENSE-2.0 8804 8805 Unless required by applicable law or agreed to in writing, software 8806 distributed under the License is distributed on an "AS IS" BASIS, 8807 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8808 See the License for the specific language governing permissions and 8809 limitations under the License. 8810 */ 8811 Object.defineProperty(exports, "__esModule", ({ value: true })); 8812 exports.RFC3161Timestamp = void 0; 8813 var timestamp_1 = __nccwpck_require__(59180); 8814 Object.defineProperty(exports, "RFC3161Timestamp", ({ enumerable: true, get: function () { return timestamp_1.RFC3161Timestamp; } })); 8815 8816 8817 /***/ }), 8818 8819 /***/ 59180: 8820 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 8821 8822 "use strict"; 8823 8824 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 8825 if (k2 === undefined) k2 = k; 8826 var desc = Object.getOwnPropertyDescriptor(m, k); 8827 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 8828 desc = { enumerable: true, get: function() { return m[k]; } }; 8829 } 8830 Object.defineProperty(o, k2, desc); 8831 }) : (function(o, m, k, k2) { 8832 if (k2 === undefined) k2 = k; 8833 o[k2] = m[k]; 8834 })); 8835 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 8836 Object.defineProperty(o, "default", { enumerable: true, value: v }); 8837 }) : function(o, v) { 8838 o["default"] = v; 8839 }); 8840 var __importStar = (this && this.__importStar) || function (mod) { 8841 if (mod && mod.__esModule) return mod; 8842 var result = {}; 8843 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 8844 __setModuleDefault(result, mod); 8845 return result; 8846 }; 8847 Object.defineProperty(exports, "__esModule", ({ value: true })); 8848 exports.RFC3161Timestamp = void 0; 8849 /* 8850 Copyright 2023 The Sigstore Authors. 8851 8852 Licensed under the Apache License, Version 2.0 (the "License"); 8853 you may not use this file except in compliance with the License. 8854 You may obtain a copy of the License at 8855 8856 http://www.apache.org/licenses/LICENSE-2.0 8857 8858 Unless required by applicable law or agreed to in writing, software 8859 distributed under the License is distributed on an "AS IS" BASIS, 8860 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8861 See the License for the specific language governing permissions and 8862 limitations under the License. 8863 */ 8864 const asn1_1 = __nccwpck_require__(54095); 8865 const crypto = __importStar(__nccwpck_require__(83914)); 8866 const oid_1 = __nccwpck_require__(15960); 8867 const error_1 = __nccwpck_require__(74526); 8868 const tstinfo_1 = __nccwpck_require__(80852); 8869 const OID_PKCS9_CONTENT_TYPE_SIGNED_DATA = '1.2.840.113549.1.7.2'; 8870 const OID_PKCS9_CONTENT_TYPE_TSTINFO = '1.2.840.113549.1.9.16.1.4'; 8871 const OID_PKCS9_MESSAGE_DIGEST_KEY = '1.2.840.113549.1.9.4'; 8872 class RFC3161Timestamp { 8873 constructor(asn1) { 8874 this.root = asn1; 8875 } 8876 static parse(der) { 8877 const asn1 = asn1_1.ASN1Obj.parseBuffer(der); 8878 return new RFC3161Timestamp(asn1); 8879 } 8880 get status() { 8881 return this.pkiStatusInfoObj.subs[0].toInteger(); 8882 } 8883 get contentType() { 8884 return this.contentTypeObj.toOID(); 8885 } 8886 get eContentType() { 8887 return this.eContentTypeObj.toOID(); 8888 } 8889 get signingTime() { 8890 return this.tstInfo.genTime; 8891 } 8892 get signerIssuer() { 8893 return this.signerSidObj.subs[0].value; 8894 } 8895 get signerSerialNumber() { 8896 return this.signerSidObj.subs[1].value; 8897 } 8898 get signerDigestAlgorithm() { 8899 const oid = this.signerDigestAlgorithmObj.subs[0].toOID(); 8900 return oid_1.SHA2_HASH_ALGOS[oid]; 8901 } 8902 get signatureAlgorithm() { 8903 const oid = this.signatureAlgorithmObj.subs[0].toOID(); 8904 return oid_1.ECDSA_SIGNATURE_ALGOS[oid]; 8905 } 8906 get signatureValue() { 8907 return this.signatureValueObj.value; 8908 } 8909 get tstInfo() { 8910 // Need to unpack tstInfo from an OCTET STRING 8911 return new tstinfo_1.TSTInfo(this.eContentObj.subs[0].subs[0]); 8912 } 8913 verify(data, publicKey) { 8914 if (!this.timeStampTokenObj) { 8915 throw new error_1.RFC3161TimestampVerificationError('timeStampToken is missing'); 8916 } 8917 // Check for expected ContentInfo content type 8918 if (this.contentType !== OID_PKCS9_CONTENT_TYPE_SIGNED_DATA) { 8919 throw new error_1.RFC3161TimestampVerificationError(`incorrect content type: ${this.contentType}`); 8920 } 8921 // Check for expected encapsulated content type 8922 if (this.eContentType !== OID_PKCS9_CONTENT_TYPE_TSTINFO) { 8923 throw new error_1.RFC3161TimestampVerificationError(`incorrect encapsulated content type: ${this.eContentType}`); 8924 } 8925 // Check that the tstInfo references the correct artifact 8926 this.tstInfo.verify(data); 8927 // Check that the signed message digest matches the tstInfo 8928 this.verifyMessageDigest(); 8929 // Check that the signature is valid for the signed attributes 8930 this.verifySignature(publicKey); 8931 } 8932 verifyMessageDigest() { 8933 // Check that the tstInfo matches the signed data 8934 const tstInfoDigest = crypto.digest(this.signerDigestAlgorithm, this.tstInfo.raw); 8935 const expectedDigest = this.messageDigestAttributeObj.subs[1].subs[0].value; 8936 if (!crypto.bufferEqual(tstInfoDigest, expectedDigest)) { 8937 throw new error_1.RFC3161TimestampVerificationError('signed data does not match tstInfo'); 8938 } 8939 } 8940 verifySignature(key) { 8941 // Encode the signed attributes for verification 8942 const signedAttrs = this.signedAttrsObj.toDER(); 8943 signedAttrs[0] = 0x31; // Change context-specific tag to SET 8944 // Check that the signature is valid for the signed attributes 8945 const verified = crypto.verify(signedAttrs, key, this.signatureValue, this.signatureAlgorithm); 8946 if (!verified) { 8947 throw new error_1.RFC3161TimestampVerificationError('signature verification failed'); 8948 } 8949 } 8950 // https://www.rfc-editor.org/rfc/rfc3161#section-2.4.2 8951 get pkiStatusInfoObj() { 8952 // pkiStatusInfo is the first element of the timestamp response sequence 8953 return this.root.subs[0]; 8954 } 8955 // https://www.rfc-editor.org/rfc/rfc3161#section-2.4.2 8956 get timeStampTokenObj() { 8957 // timeStampToken is the first element of the timestamp response sequence 8958 return this.root.subs[1]; 8959 } 8960 // https://datatracker.ietf.org/doc/html/rfc5652#section-3 8961 get contentTypeObj() { 8962 return this.timeStampTokenObj.subs[0]; 8963 } 8964 // https://www.rfc-editor.org/rfc/rfc5652#section-3 8965 get signedDataObj() { 8966 const obj = this.timeStampTokenObj.subs.find((sub) => sub.tag.isContextSpecific(0x00)); 8967 return obj.subs[0]; 8968 } 8969 // https://datatracker.ietf.org/doc/html/rfc5652#section-5.1 8970 get encapContentInfoObj() { 8971 return this.signedDataObj.subs[2]; 8972 } 8973 // https://datatracker.ietf.org/doc/html/rfc5652#section-5.1 8974 get signerInfosObj() { 8975 // SignerInfos is the last element of the signed data sequence 8976 const sd = this.signedDataObj; 8977 return sd.subs[sd.subs.length - 1]; 8978 } 8979 // https://www.rfc-editor.org/rfc/rfc5652#section-5.1 8980 get signerInfoObj() { 8981 // Only supporting one signer 8982 return this.signerInfosObj.subs[0]; 8983 } 8984 // https://datatracker.ietf.org/doc/html/rfc5652#section-5.2 8985 get eContentTypeObj() { 8986 return this.encapContentInfoObj.subs[0]; 8987 } 8988 // https://datatracker.ietf.org/doc/html/rfc5652#section-5.2 8989 get eContentObj() { 8990 return this.encapContentInfoObj.subs[1]; 8991 } 8992 // https://datatracker.ietf.org/doc/html/rfc5652#section-5.3 8993 get signedAttrsObj() { 8994 const signedAttrs = this.signerInfoObj.subs.find((sub) => sub.tag.isContextSpecific(0x00)); 8995 return signedAttrs; 8996 } 8997 // https://datatracker.ietf.org/doc/html/rfc5652#section-5.3 8998 get messageDigestAttributeObj() { 8999 const messageDigest = this.signedAttrsObj.subs.find((sub) => sub.subs[0].tag.isOID() && 9000 sub.subs[0].toOID() === OID_PKCS9_MESSAGE_DIGEST_KEY); 9001 return messageDigest; 9002 } 9003 // https://datatracker.ietf.org/doc/html/rfc5652#section-5.3 9004 get signerSidObj() { 9005 return this.signerInfoObj.subs[1]; 9006 } 9007 // https://datatracker.ietf.org/doc/html/rfc5652#section-5.3 9008 get signerDigestAlgorithmObj() { 9009 // Signature is the 2nd element of the signerInfoObj object 9010 return this.signerInfoObj.subs[2]; 9011 } 9012 // https://datatracker.ietf.org/doc/html/rfc5652#section-5.3 9013 get signatureAlgorithmObj() { 9014 // Signature is the 4th element of the signerInfoObj object 9015 return this.signerInfoObj.subs[4]; 9016 } 9017 // https://datatracker.ietf.org/doc/html/rfc5652#section-5.3 9018 get signatureValueObj() { 9019 // Signature is the 6th element of the signerInfoObj object 9020 return this.signerInfoObj.subs[5]; 9021 } 9022 } 9023 exports.RFC3161Timestamp = RFC3161Timestamp; 9024 9025 9026 /***/ }), 9027 9028 /***/ 80852: 9029 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 9030 9031 "use strict"; 9032 9033 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 9034 if (k2 === undefined) k2 = k; 9035 var desc = Object.getOwnPropertyDescriptor(m, k); 9036 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 9037 desc = { enumerable: true, get: function() { return m[k]; } }; 9038 } 9039 Object.defineProperty(o, k2, desc); 9040 }) : (function(o, m, k, k2) { 9041 if (k2 === undefined) k2 = k; 9042 o[k2] = m[k]; 9043 })); 9044 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 9045 Object.defineProperty(o, "default", { enumerable: true, value: v }); 9046 }) : function(o, v) { 9047 o["default"] = v; 9048 }); 9049 var __importStar = (this && this.__importStar) || function (mod) { 9050 if (mod && mod.__esModule) return mod; 9051 var result = {}; 9052 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 9053 __setModuleDefault(result, mod); 9054 return result; 9055 }; 9056 Object.defineProperty(exports, "__esModule", ({ value: true })); 9057 exports.TSTInfo = void 0; 9058 const crypto = __importStar(__nccwpck_require__(83914)); 9059 const oid_1 = __nccwpck_require__(15960); 9060 const error_1 = __nccwpck_require__(74526); 9061 class TSTInfo { 9062 constructor(asn1) { 9063 this.root = asn1; 9064 } 9065 get version() { 9066 return this.root.subs[0].toInteger(); 9067 } 9068 get genTime() { 9069 return this.root.subs[4].toDate(); 9070 } 9071 get messageImprintHashAlgorithm() { 9072 const oid = this.messageImprintObj.subs[0].subs[0].toOID(); 9073 return oid_1.SHA2_HASH_ALGOS[oid]; 9074 } 9075 get messageImprintHashedMessage() { 9076 return this.messageImprintObj.subs[1].value; 9077 } 9078 get raw() { 9079 return this.root.toDER(); 9080 } 9081 verify(data) { 9082 const digest = crypto.digest(this.messageImprintHashAlgorithm, data); 9083 if (!crypto.bufferEqual(digest, this.messageImprintHashedMessage)) { 9084 throw new error_1.RFC3161TimestampVerificationError('message imprint does not match artifact'); 9085 } 9086 } 9087 // https://www.rfc-editor.org/rfc/rfc3161#section-2.4.2 9088 get messageImprintObj() { 9089 return this.root.subs[2]; 9090 } 9091 } 9092 exports.TSTInfo = TSTInfo; 9093 9094 9095 /***/ }), 9096 9097 /***/ 52283: 9098 /***/ ((__unused_webpack_module, exports) => { 9099 9100 "use strict"; 9101 9102 Object.defineProperty(exports, "__esModule", ({ value: true })); 9103 exports.ByteStream = void 0; 9104 /* 9105 Copyright 2023 The Sigstore Authors. 9106 9107 Licensed under the Apache License, Version 2.0 (the "License"); 9108 you may not use this file except in compliance with the License. 9109 You may obtain a copy of the License at 9110 9111 http://www.apache.org/licenses/LICENSE-2.0 9112 9113 Unless required by applicable law or agreed to in writing, software 9114 distributed under the License is distributed on an "AS IS" BASIS, 9115 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 9116 See the License for the specific language governing permissions and 9117 limitations under the License. 9118 */ 9119 class StreamError extends Error { 9120 } 9121 class ByteStream { 9122 constructor(buffer) { 9123 this.start = 0; 9124 if (buffer) { 9125 this.buf = buffer; 9126 this.view = Buffer.from(buffer); 9127 } 9128 else { 9129 this.buf = new ArrayBuffer(0); 9130 this.view = Buffer.from(this.buf); 9131 } 9132 } 9133 get buffer() { 9134 return this.view.subarray(0, this.start); 9135 } 9136 get length() { 9137 return this.view.byteLength; 9138 } 9139 get position() { 9140 return this.start; 9141 } 9142 seek(position) { 9143 this.start = position; 9144 } 9145 // Returns a Buffer containing the specified number of bytes starting at the 9146 // given start position. 9147 slice(start, len) { 9148 const end = start + len; 9149 if (end > this.length) { 9150 throw new StreamError('request past end of buffer'); 9151 } 9152 return this.view.subarray(start, end); 9153 } 9154 appendChar(char) { 9155 this.ensureCapacity(1); 9156 this.view[this.start] = char; 9157 this.start += 1; 9158 } 9159 appendUint16(num) { 9160 this.ensureCapacity(2); 9161 const value = new Uint16Array([num]); 9162 const view = new Uint8Array(value.buffer); 9163 this.view[this.start] = view[1]; 9164 this.view[this.start + 1] = view[0]; 9165 this.start += 2; 9166 } 9167 appendUint24(num) { 9168 this.ensureCapacity(3); 9169 const value = new Uint32Array([num]); 9170 const view = new Uint8Array(value.buffer); 9171 this.view[this.start] = view[2]; 9172 this.view[this.start + 1] = view[1]; 9173 this.view[this.start + 2] = view[0]; 9174 this.start += 3; 9175 } 9176 appendView(view) { 9177 this.ensureCapacity(view.length); 9178 this.view.set(view, this.start); 9179 this.start += view.length; 9180 } 9181 getBlock(size) { 9182 if (size <= 0) { 9183 return Buffer.alloc(0); 9184 } 9185 if (this.start + size > this.view.length) { 9186 throw new Error('request past end of buffer'); 9187 } 9188 const result = this.view.subarray(this.start, this.start + size); 9189 this.start += size; 9190 return result; 9191 } 9192 getUint8() { 9193 return this.getBlock(1)[0]; 9194 } 9195 getUint16() { 9196 const block = this.getBlock(2); 9197 return (block[0] << 8) | block[1]; 9198 } 9199 ensureCapacity(size) { 9200 if (this.start + size > this.view.byteLength) { 9201 const blockSize = ByteStream.BLOCK_SIZE + (size > ByteStream.BLOCK_SIZE ? size : 0); 9202 this.realloc(this.view.byteLength + blockSize); 9203 } 9204 } 9205 realloc(size) { 9206 const newArray = new ArrayBuffer(size); 9207 const newView = Buffer.from(newArray); 9208 // Copy the old buffer into the new one 9209 newView.set(this.view); 9210 this.buf = newArray; 9211 this.view = newView; 9212 } 9213 } 9214 exports.ByteStream = ByteStream; 9215 ByteStream.BLOCK_SIZE = 1024; 9216 9217 9218 /***/ }), 9219 9220 /***/ 26381: 9221 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 9222 9223 "use strict"; 9224 9225 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 9226 if (k2 === undefined) k2 = k; 9227 var desc = Object.getOwnPropertyDescriptor(m, k); 9228 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 9229 desc = { enumerable: true, get: function() { return m[k]; } }; 9230 } 9231 Object.defineProperty(o, k2, desc); 9232 }) : (function(o, m, k, k2) { 9233 if (k2 === undefined) k2 = k; 9234 o[k2] = m[k]; 9235 })); 9236 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 9237 Object.defineProperty(o, "default", { enumerable: true, value: v }); 9238 }) : function(o, v) { 9239 o["default"] = v; 9240 }); 9241 var __importStar = (this && this.__importStar) || function (mod) { 9242 if (mod && mod.__esModule) return mod; 9243 var result = {}; 9244 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 9245 __setModuleDefault(result, mod); 9246 return result; 9247 }; 9248 Object.defineProperty(exports, "__esModule", ({ value: true })); 9249 exports.X509Certificate = exports.EXTENSION_OID_SCT = void 0; 9250 /* 9251 Copyright 2023 The Sigstore Authors. 9252 9253 Licensed under the Apache License, Version 2.0 (the "License"); 9254 you may not use this file except in compliance with the License. 9255 You may obtain a copy of the License at 9256 9257 http://www.apache.org/licenses/LICENSE-2.0 9258 9259 Unless required by applicable law or agreed to in writing, software 9260 distributed under the License is distributed on an "AS IS" BASIS, 9261 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 9262 See the License for the specific language governing permissions and 9263 limitations under the License. 9264 */ 9265 const asn1_1 = __nccwpck_require__(54095); 9266 const crypto = __importStar(__nccwpck_require__(83914)); 9267 const oid_1 = __nccwpck_require__(15960); 9268 const pem = __importStar(__nccwpck_require__(25225)); 9269 const ext_1 = __nccwpck_require__(11292); 9270 const EXTENSION_OID_SUBJECT_KEY_ID = '2.5.29.14'; 9271 const EXTENSION_OID_KEY_USAGE = '2.5.29.15'; 9272 const EXTENSION_OID_SUBJECT_ALT_NAME = '2.5.29.17'; 9273 const EXTENSION_OID_BASIC_CONSTRAINTS = '2.5.29.19'; 9274 const EXTENSION_OID_AUTHORITY_KEY_ID = '2.5.29.35'; 9275 exports.EXTENSION_OID_SCT = '1.3.6.1.4.1.11129.2.4.2'; 9276 class X509Certificate { 9277 constructor(asn1) { 9278 this.root = asn1; 9279 } 9280 static parse(cert) { 9281 const der = typeof cert === 'string' ? pem.toDER(cert) : cert; 9282 const asn1 = asn1_1.ASN1Obj.parseBuffer(der); 9283 return new X509Certificate(asn1); 9284 } 9285 get tbsCertificate() { 9286 return this.tbsCertificateObj; 9287 } 9288 get version() { 9289 // version number is the first element of the version context specific tag 9290 const ver = this.versionObj.subs[0].toInteger(); 9291 return `v${(ver + BigInt(1)).toString()}`; 9292 } 9293 get serialNumber() { 9294 return this.serialNumberObj.value; 9295 } 9296 get notBefore() { 9297 // notBefore is the first element of the validity sequence 9298 return this.validityObj.subs[0].toDate(); 9299 } 9300 get notAfter() { 9301 // notAfter is the second element of the validity sequence 9302 return this.validityObj.subs[1].toDate(); 9303 } 9304 get issuer() { 9305 return this.issuerObj.value; 9306 } 9307 get subject() { 9308 return this.subjectObj.value; 9309 } 9310 get publicKey() { 9311 return this.subjectPublicKeyInfoObj.toDER(); 9312 } 9313 get signatureAlgorithm() { 9314 const oid = this.signatureAlgorithmObj.subs[0].toOID(); 9315 return oid_1.ECDSA_SIGNATURE_ALGOS[oid]; 9316 } 9317 get signatureValue() { 9318 // Signature value is a bit string, so we need to skip the first byte 9319 return this.signatureValueObj.value.subarray(1); 9320 } 9321 get subjectAltName() { 9322 const ext = this.extSubjectAltName; 9323 return ext?.uri || ext?.rfc822Name; 9324 } 9325 get extensions() { 9326 // The extension list is the first (and only) element of the extensions 9327 // context specific tag 9328 const extSeq = this.extensionsObj?.subs[0]; 9329 return extSeq?.subs || /* istanbul ignore next */ []; 9330 } 9331 get extKeyUsage() { 9332 const ext = this.findExtension(EXTENSION_OID_KEY_USAGE); 9333 return ext ? new ext_1.X509KeyUsageExtension(ext) : undefined; 9334 } 9335 get extBasicConstraints() { 9336 const ext = this.findExtension(EXTENSION_OID_BASIC_CONSTRAINTS); 9337 return ext ? new ext_1.X509BasicConstraintsExtension(ext) : undefined; 9338 } 9339 get extSubjectAltName() { 9340 const ext = this.findExtension(EXTENSION_OID_SUBJECT_ALT_NAME); 9341 return ext ? new ext_1.X509SubjectAlternativeNameExtension(ext) : undefined; 9342 } 9343 get extAuthorityKeyID() { 9344 const ext = this.findExtension(EXTENSION_OID_AUTHORITY_KEY_ID); 9345 return ext ? new ext_1.X509AuthorityKeyIDExtension(ext) : undefined; 9346 } 9347 get extSubjectKeyID() { 9348 const ext = this.findExtension(EXTENSION_OID_SUBJECT_KEY_ID); 9349 return ext 9350 ? new ext_1.X509SubjectKeyIDExtension(ext) 9351 : /* istanbul ignore next */ undefined; 9352 } 9353 get extSCT() { 9354 const ext = this.findExtension(exports.EXTENSION_OID_SCT); 9355 return ext ? new ext_1.X509SCTExtension(ext) : undefined; 9356 } 9357 get isCA() { 9358 const ca = this.extBasicConstraints?.isCA || false; 9359 // If the KeyUsage extension is present, keyCertSign must be set 9360 if (this.extKeyUsage) { 9361 ca && this.extKeyUsage.keyCertSign; 9362 } 9363 return ca; 9364 } 9365 extension(oid) { 9366 const ext = this.findExtension(oid); 9367 return ext ? new ext_1.X509Extension(ext) : undefined; 9368 } 9369 verify(issuerCertificate) { 9370 // Use the issuer's public key if provided, otherwise use the subject's 9371 const publicKey = issuerCertificate?.publicKey || this.publicKey; 9372 const key = crypto.createPublicKey(publicKey); 9373 return crypto.verify(this.tbsCertificate.toDER(), key, this.signatureValue, this.signatureAlgorithm); 9374 } 9375 validForDate(date) { 9376 return this.notBefore <= date && date <= this.notAfter; 9377 } 9378 equals(other) { 9379 return this.root.toDER().equals(other.root.toDER()); 9380 } 9381 // Creates a copy of the certificate with a new buffer 9382 clone() { 9383 const der = this.root.toDER(); 9384 const clone = Buffer.alloc(der.length); 9385 der.copy(clone); 9386 return X509Certificate.parse(clone); 9387 } 9388 findExtension(oid) { 9389 // Find the extension with the given OID. The OID will always be the first 9390 // element of the extension sequence 9391 return this.extensions.find((ext) => ext.subs[0].toOID() === oid); 9392 } 9393 ///////////////////////////////////////////////////////////////////////////// 9394 // The following properties use the documented x509 structure to locate the 9395 // desired ASN.1 object 9396 // https://www.rfc-editor.org/rfc/rfc5280#section-4.1 9397 // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.1.1 9398 get tbsCertificateObj() { 9399 // tbsCertificate is the first element of the certificate sequence 9400 return this.root.subs[0]; 9401 } 9402 // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.1.2 9403 get signatureAlgorithmObj() { 9404 // signatureAlgorithm is the second element of the certificate sequence 9405 return this.root.subs[1]; 9406 } 9407 // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.1.3 9408 get signatureValueObj() { 9409 // signatureValue is the third element of the certificate sequence 9410 return this.root.subs[2]; 9411 } 9412 // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.1 9413 get versionObj() { 9414 // version is the first element of the tbsCertificate sequence 9415 return this.tbsCertificateObj.subs[0]; 9416 } 9417 // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.2 9418 get serialNumberObj() { 9419 // serialNumber is the second element of the tbsCertificate sequence 9420 return this.tbsCertificateObj.subs[1]; 9421 } 9422 // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.4 9423 get issuerObj() { 9424 // issuer is the fourth element of the tbsCertificate sequence 9425 return this.tbsCertificateObj.subs[3]; 9426 } 9427 // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.5 9428 get validityObj() { 9429 // version is the fifth element of the tbsCertificate sequence 9430 return this.tbsCertificateObj.subs[4]; 9431 } 9432 // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.6 9433 get subjectObj() { 9434 // subject is the sixth element of the tbsCertificate sequence 9435 return this.tbsCertificateObj.subs[5]; 9436 } 9437 // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.7 9438 get subjectPublicKeyInfoObj() { 9439 // subjectPublicKeyInfo is the seventh element of the tbsCertificate sequence 9440 return this.tbsCertificateObj.subs[6]; 9441 } 9442 // Extensions can't be located by index because their position varies. Instead, 9443 // we need to find the extensions context specific tag 9444 // https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.9 9445 get extensionsObj() { 9446 return this.tbsCertificateObj.subs.find((sub) => sub.tag.isContextSpecific(0x03)); 9447 } 9448 } 9449 exports.X509Certificate = X509Certificate; 9450 9451 9452 /***/ }), 9453 9454 /***/ 11292: 9455 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 9456 9457 "use strict"; 9458 9459 Object.defineProperty(exports, "__esModule", ({ value: true })); 9460 exports.X509SCTExtension = exports.X509SubjectKeyIDExtension = exports.X509AuthorityKeyIDExtension = exports.X509SubjectAlternativeNameExtension = exports.X509KeyUsageExtension = exports.X509BasicConstraintsExtension = exports.X509Extension = void 0; 9461 const stream_1 = __nccwpck_require__(52283); 9462 const sct_1 = __nccwpck_require__(30454); 9463 // https://www.rfc-editor.org/rfc/rfc5280#section-4.1 9464 class X509Extension { 9465 constructor(asn1) { 9466 this.root = asn1; 9467 } 9468 get oid() { 9469 return this.root.subs[0].toOID(); 9470 } 9471 get critical() { 9472 // The critical field is optional and will be the second element of the 9473 // extension sequence if present. Default to false if not present. 9474 return this.root.subs.length === 3 ? this.root.subs[1].toBoolean() : false; 9475 } 9476 get value() { 9477 return this.extnValueObj.value; 9478 } 9479 get valueObj() { 9480 return this.extnValueObj; 9481 } 9482 get extnValueObj() { 9483 // The extnValue field will be the last element of the extension sequence 9484 return this.root.subs[this.root.subs.length - 1]; 9485 } 9486 } 9487 exports.X509Extension = X509Extension; 9488 // https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.9 9489 class X509BasicConstraintsExtension extends X509Extension { 9490 get isCA() { 9491 return this.sequence.subs[0]?.toBoolean() ?? false; 9492 } 9493 get pathLenConstraint() { 9494 return this.sequence.subs.length > 1 9495 ? this.sequence.subs[1].toInteger() 9496 : undefined; 9497 } 9498 // The extnValue field contains a single sequence wrapping the isCA and 9499 // pathLenConstraint. 9500 get sequence() { 9501 return this.extnValueObj.subs[0]; 9502 } 9503 } 9504 exports.X509BasicConstraintsExtension = X509BasicConstraintsExtension; 9505 // https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.3 9506 class X509KeyUsageExtension extends X509Extension { 9507 get digitalSignature() { 9508 return this.bitString[0] === 1; 9509 } 9510 get keyCertSign() { 9511 return this.bitString[5] === 1; 9512 } 9513 get crlSign() { 9514 return this.bitString[6] === 1; 9515 } 9516 // The extnValue field contains a single bit string which is a bit mask 9517 // indicating which key usages are enabled. 9518 get bitString() { 9519 return this.extnValueObj.subs[0].toBitString(); 9520 } 9521 } 9522 exports.X509KeyUsageExtension = X509KeyUsageExtension; 9523 // https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.6 9524 class X509SubjectAlternativeNameExtension extends X509Extension { 9525 get rfc822Name() { 9526 return this.findGeneralName(0x01)?.value.toString('ascii'); 9527 } 9528 get uri() { 9529 return this.findGeneralName(0x06)?.value.toString('ascii'); 9530 } 9531 // Retrieve the value of an otherName with the given OID. 9532 otherName(oid) { 9533 const otherName = this.findGeneralName(0x00); 9534 if (otherName === undefined) { 9535 return undefined; 9536 } 9537 // The otherName is a sequence containing an OID and a value. 9538 // Need to check that the OID matches the one we're looking for. 9539 const otherNameOID = otherName.subs[0].toOID(); 9540 if (otherNameOID !== oid) { 9541 return undefined; 9542 } 9543 // The otherNameValue is a sequence containing the actual value. 9544 const otherNameValue = otherName.subs[1]; 9545 return otherNameValue.subs[0].value.toString('ascii'); 9546 } 9547 findGeneralName(tag) { 9548 return this.generalNames.find((gn) => gn.tag.isContextSpecific(tag)); 9549 } 9550 // The extnValue field contains a sequence of GeneralNames. 9551 get generalNames() { 9552 return this.extnValueObj.subs[0].subs; 9553 } 9554 } 9555 exports.X509SubjectAlternativeNameExtension = X509SubjectAlternativeNameExtension; 9556 // https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.1 9557 class X509AuthorityKeyIDExtension extends X509Extension { 9558 get keyIdentifier() { 9559 return this.findSequenceMember(0x00)?.value; 9560 } 9561 findSequenceMember(tag) { 9562 return this.sequence.subs.find((el) => el.tag.isContextSpecific(tag)); 9563 } 9564 // The extnValue field contains a single sequence wrapping the keyIdentifier 9565 get sequence() { 9566 return this.extnValueObj.subs[0]; 9567 } 9568 } 9569 exports.X509AuthorityKeyIDExtension = X509AuthorityKeyIDExtension; 9570 // https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.2 9571 class X509SubjectKeyIDExtension extends X509Extension { 9572 get keyIdentifier() { 9573 return this.extnValueObj.subs[0].value; 9574 } 9575 } 9576 exports.X509SubjectKeyIDExtension = X509SubjectKeyIDExtension; 9577 // https://www.rfc-editor.org/rfc/rfc6962#section-3.3 9578 class X509SCTExtension extends X509Extension { 9579 constructor(asn1) { 9580 super(asn1); 9581 } 9582 get signedCertificateTimestamps() { 9583 const buf = this.extnValueObj.subs[0].value; 9584 const stream = new stream_1.ByteStream(buf); 9585 // The overall list length is encoded in the first two bytes -- note this 9586 // is the length of the list in bytes, NOT the number of SCTs in the list 9587 const end = stream.getUint16() + 2; 9588 const sctList = []; 9589 while (stream.position < end) { 9590 // Read the length of the next SCT 9591 const sctLength = stream.getUint16(); 9592 // Slice out the bytes for the next SCT and parse it 9593 const sct = stream.getBlock(sctLength); 9594 sctList.push(sct_1.SignedCertificateTimestamp.parse(sct)); 9595 } 9596 if (stream.position !== end) { 9597 throw new Error('SCT list length does not match actual length'); 9598 } 9599 return sctList; 9600 } 9601 } 9602 exports.X509SCTExtension = X509SCTExtension; 9603 9604 9605 /***/ }), 9606 9607 /***/ 75500: 9608 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 9609 9610 "use strict"; 9611 9612 /* 9613 Copyright 2023 The Sigstore Authors. 9614 9615 Licensed under the Apache License, Version 2.0 (the "License"); 9616 you may not use this file except in compliance with the License. 9617 You may obtain a copy of the License at 9618 9619 http://www.apache.org/licenses/LICENSE-2.0 9620 9621 Unless required by applicable law or agreed to in writing, software 9622 distributed under the License is distributed on an "AS IS" BASIS, 9623 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 9624 See the License for the specific language governing permissions and 9625 limitations under the License. 9626 */ 9627 Object.defineProperty(exports, "__esModule", ({ value: true })); 9628 exports.X509SCTExtension = exports.X509Certificate = exports.EXTENSION_OID_SCT = void 0; 9629 var cert_1 = __nccwpck_require__(26381); 9630 Object.defineProperty(exports, "EXTENSION_OID_SCT", ({ enumerable: true, get: function () { return cert_1.EXTENSION_OID_SCT; } })); 9631 Object.defineProperty(exports, "X509Certificate", ({ enumerable: true, get: function () { return cert_1.X509Certificate; } })); 9632 var ext_1 = __nccwpck_require__(11292); 9633 Object.defineProperty(exports, "X509SCTExtension", ({ enumerable: true, get: function () { return ext_1.X509SCTExtension; } })); 9634 9635 9636 /***/ }), 9637 9638 /***/ 30454: 9639 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 9640 9641 "use strict"; 9642 9643 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 9644 if (k2 === undefined) k2 = k; 9645 var desc = Object.getOwnPropertyDescriptor(m, k); 9646 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 9647 desc = { enumerable: true, get: function() { return m[k]; } }; 9648 } 9649 Object.defineProperty(o, k2, desc); 9650 }) : (function(o, m, k, k2) { 9651 if (k2 === undefined) k2 = k; 9652 o[k2] = m[k]; 9653 })); 9654 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 9655 Object.defineProperty(o, "default", { enumerable: true, value: v }); 9656 }) : function(o, v) { 9657 o["default"] = v; 9658 }); 9659 var __importStar = (this && this.__importStar) || function (mod) { 9660 if (mod && mod.__esModule) return mod; 9661 var result = {}; 9662 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 9663 __setModuleDefault(result, mod); 9664 return result; 9665 }; 9666 Object.defineProperty(exports, "__esModule", ({ value: true })); 9667 exports.SignedCertificateTimestamp = void 0; 9668 /* 9669 Copyright 2023 The Sigstore Authors. 9670 9671 Licensed under the Apache License, Version 2.0 (the "License"); 9672 you may not use this file except in compliance with the License. 9673 You may obtain a copy of the License at 9674 9675 http://www.apache.org/licenses/LICENSE-2.0 9676 9677 Unless required by applicable law or agreed to in writing, software 9678 distributed under the License is distributed on an "AS IS" BASIS, 9679 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 9680 See the License for the specific language governing permissions and 9681 limitations under the License. 9682 */ 9683 const crypto = __importStar(__nccwpck_require__(83914)); 9684 const stream_1 = __nccwpck_require__(52283); 9685 class SignedCertificateTimestamp { 9686 constructor(options) { 9687 this.version = options.version; 9688 this.logID = options.logID; 9689 this.timestamp = options.timestamp; 9690 this.extensions = options.extensions; 9691 this.hashAlgorithm = options.hashAlgorithm; 9692 this.signatureAlgorithm = options.signatureAlgorithm; 9693 this.signature = options.signature; 9694 } 9695 get datetime() { 9696 return new Date(Number(this.timestamp.readBigInt64BE())); 9697 } 9698 // Returns the hash algorithm used to generate the SCT's signature. 9699 // https://www.rfc-editor.org/rfc/rfc5246#section-7.4.1.4.1 9700 get algorithm() { 9701 switch (this.hashAlgorithm) { 9702 /* istanbul ignore next */ 9703 case 0: 9704 return 'none'; 9705 /* istanbul ignore next */ 9706 case 1: 9707 return 'md5'; 9708 /* istanbul ignore next */ 9709 case 2: 9710 return 'sha1'; 9711 /* istanbul ignore next */ 9712 case 3: 9713 return 'sha224'; 9714 case 4: 9715 return 'sha256'; 9716 /* istanbul ignore next */ 9717 case 5: 9718 return 'sha384'; 9719 /* istanbul ignore next */ 9720 case 6: 9721 return 'sha512'; 9722 /* istanbul ignore next */ 9723 default: 9724 return 'unknown'; 9725 } 9726 } 9727 verify(preCert, key) { 9728 // Assemble the digitally-signed struct (the data over which the signature 9729 // was generated). 9730 // https://www.rfc-editor.org/rfc/rfc6962#section-3.2 9731 const stream = new stream_1.ByteStream(); 9732 stream.appendChar(this.version); 9733 stream.appendChar(0x00); // SignatureType = certificate_timestamp(0) 9734 stream.appendView(this.timestamp); 9735 stream.appendUint16(0x01); // LogEntryType = precert_entry(1) 9736 stream.appendView(preCert); 9737 stream.appendUint16(this.extensions.byteLength); 9738 /* istanbul ignore next - extensions are very uncommon */ 9739 if (this.extensions.byteLength > 0) { 9740 stream.appendView(this.extensions); 9741 } 9742 return crypto.verify(stream.buffer, key, this.signature, this.algorithm); 9743 } 9744 // Parses a SignedCertificateTimestamp from a buffer. SCTs are encoded using 9745 // TLS encoding which means the fields and lengths of most fields are 9746 // specified as part of the SCT and TLS specs. 9747 // https://www.rfc-editor.org/rfc/rfc6962#section-3.2 9748 // https://www.rfc-editor.org/rfc/rfc5246#section-7.4.1.4.1 9749 static parse(buf) { 9750 const stream = new stream_1.ByteStream(buf); 9751 // Version - enum { v1(0), (255) } 9752 const version = stream.getUint8(); 9753 // Log ID - struct { opaque key_id[32]; } 9754 const logID = stream.getBlock(32); 9755 // Timestamp - uint64 9756 const timestamp = stream.getBlock(8); 9757 // Extensions - opaque extensions<0..2^16-1>; 9758 const extenstionLength = stream.getUint16(); 9759 const extensions = stream.getBlock(extenstionLength); 9760 // Hash algo - enum { sha256(4), . . . (255) } 9761 const hashAlgorithm = stream.getUint8(); 9762 // Signature algo - enum { anonymous(0), rsa(1), dsa(2), ecdsa(3), (255) } 9763 const signatureAlgorithm = stream.getUint8(); 9764 // Signature - opaque signature<0..2^16-1>; 9765 const sigLength = stream.getUint16(); 9766 const signature = stream.getBlock(sigLength); 9767 // Check that we read the entire buffer 9768 if (stream.position !== buf.length) { 9769 throw new Error('SCT buffer length mismatch'); 9770 } 9771 return new SignedCertificateTimestamp({ 9772 version, 9773 logID, 9774 timestamp, 9775 extensions, 9776 hashAlgorithm, 9777 signatureAlgorithm, 9778 signature, 9779 }); 9780 } 9781 } 9782 exports.SignedCertificateTimestamp = SignedCertificateTimestamp; 9783 9784 9785 /***/ }), 9786 9787 /***/ 70714: 9788 /***/ ((__unused_webpack_module, exports) => { 9789 9790 "use strict"; 9791 9792 /* eslint-disable */ 9793 Object.defineProperty(exports, "__esModule", ({ value: true })); 9794 exports.Signature = exports.Envelope = void 0; 9795 function createBaseEnvelope() { 9796 return { payload: Buffer.alloc(0), payloadType: "", signatures: [] }; 9797 } 9798 exports.Envelope = { 9799 fromJSON(object) { 9800 return { 9801 payload: isSet(object.payload) ? Buffer.from(bytesFromBase64(object.payload)) : Buffer.alloc(0), 9802 payloadType: isSet(object.payloadType) ? String(object.payloadType) : "", 9803 signatures: Array.isArray(object?.signatures) ? object.signatures.map((e) => exports.Signature.fromJSON(e)) : [], 9804 }; 9805 }, 9806 toJSON(message) { 9807 const obj = {}; 9808 message.payload !== undefined && 9809 (obj.payload = base64FromBytes(message.payload !== undefined ? message.payload : Buffer.alloc(0))); 9810 message.payloadType !== undefined && (obj.payloadType = message.payloadType); 9811 if (message.signatures) { 9812 obj.signatures = message.signatures.map((e) => e ? exports.Signature.toJSON(e) : undefined); 9813 } 9814 else { 9815 obj.signatures = []; 9816 } 9817 return obj; 9818 }, 9819 }; 9820 function createBaseSignature() { 9821 return { sig: Buffer.alloc(0), keyid: "" }; 9822 } 9823 exports.Signature = { 9824 fromJSON(object) { 9825 return { 9826 sig: isSet(object.sig) ? Buffer.from(bytesFromBase64(object.sig)) : Buffer.alloc(0), 9827 keyid: isSet(object.keyid) ? String(object.keyid) : "", 9828 }; 9829 }, 9830 toJSON(message) { 9831 const obj = {}; 9832 message.sig !== undefined && (obj.sig = base64FromBytes(message.sig !== undefined ? message.sig : Buffer.alloc(0))); 9833 message.keyid !== undefined && (obj.keyid = message.keyid); 9834 return obj; 9835 }, 9836 }; 9837 var tsProtoGlobalThis = (() => { 9838 if (typeof globalThis !== "undefined") { 9839 return globalThis; 9840 } 9841 if (typeof self !== "undefined") { 9842 return self; 9843 } 9844 if (typeof window !== "undefined") { 9845 return window; 9846 } 9847 if (typeof global !== "undefined") { 9848 return global; 9849 } 9850 throw "Unable to locate global object"; 9851 })(); 9852 function bytesFromBase64(b64) { 9853 if (tsProtoGlobalThis.Buffer) { 9854 return Uint8Array.from(tsProtoGlobalThis.Buffer.from(b64, "base64")); 9855 } 9856 else { 9857 const bin = tsProtoGlobalThis.atob(b64); 9858 const arr = new Uint8Array(bin.length); 9859 for (let i = 0; i < bin.length; ++i) { 9860 arr[i] = bin.charCodeAt(i); 9861 } 9862 return arr; 9863 } 9864 } 9865 function base64FromBytes(arr) { 9866 if (tsProtoGlobalThis.Buffer) { 9867 return tsProtoGlobalThis.Buffer.from(arr).toString("base64"); 9868 } 9869 else { 9870 const bin = []; 9871 arr.forEach((byte) => { 9872 bin.push(String.fromCharCode(byte)); 9873 }); 9874 return tsProtoGlobalThis.btoa(bin.join("")); 9875 } 9876 } 9877 function isSet(value) { 9878 return value !== null && value !== undefined; 9879 } 9880 9881 9882 /***/ }), 9883 9884 /***/ 73027: 9885 /***/ ((__unused_webpack_module, exports) => { 9886 9887 "use strict"; 9888 9889 /* eslint-disable */ 9890 Object.defineProperty(exports, "__esModule", ({ value: true })); 9891 exports.Timestamp = void 0; 9892 function createBaseTimestamp() { 9893 return { seconds: "0", nanos: 0 }; 9894 } 9895 exports.Timestamp = { 9896 fromJSON(object) { 9897 return { 9898 seconds: isSet(object.seconds) ? String(object.seconds) : "0", 9899 nanos: isSet(object.nanos) ? Number(object.nanos) : 0, 9900 }; 9901 }, 9902 toJSON(message) { 9903 const obj = {}; 9904 message.seconds !== undefined && (obj.seconds = message.seconds); 9905 message.nanos !== undefined && (obj.nanos = Math.round(message.nanos)); 9906 return obj; 9907 }, 9908 }; 9909 function isSet(value) { 9910 return value !== null && value !== undefined; 9911 } 9912 9913 9914 /***/ }), 9915 9916 /***/ 28293: 9917 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 9918 9919 "use strict"; 9920 9921 Object.defineProperty(exports, "__esModule", ({ value: true })); 9922 exports.Bundle = exports.VerificationMaterial = exports.TimestampVerificationData = void 0; 9923 /* eslint-disable */ 9924 const envelope_1 = __nccwpck_require__(70714); 9925 const sigstore_common_1 = __nccwpck_require__(82193); 9926 const sigstore_rekor_1 = __nccwpck_require__(64951); 9927 function createBaseTimestampVerificationData() { 9928 return { rfc3161Timestamps: [] }; 9929 } 9930 exports.TimestampVerificationData = { 9931 fromJSON(object) { 9932 return { 9933 rfc3161Timestamps: Array.isArray(object?.rfc3161Timestamps) 9934 ? object.rfc3161Timestamps.map((e) => sigstore_common_1.RFC3161SignedTimestamp.fromJSON(e)) 9935 : [], 9936 }; 9937 }, 9938 toJSON(message) { 9939 const obj = {}; 9940 if (message.rfc3161Timestamps) { 9941 obj.rfc3161Timestamps = message.rfc3161Timestamps.map((e) => e ? sigstore_common_1.RFC3161SignedTimestamp.toJSON(e) : undefined); 9942 } 9943 else { 9944 obj.rfc3161Timestamps = []; 9945 } 9946 return obj; 9947 }, 9948 }; 9949 function createBaseVerificationMaterial() { 9950 return { content: undefined, tlogEntries: [], timestampVerificationData: undefined }; 9951 } 9952 exports.VerificationMaterial = { 9953 fromJSON(object) { 9954 return { 9955 content: isSet(object.publicKey) 9956 ? { $case: "publicKey", publicKey: sigstore_common_1.PublicKeyIdentifier.fromJSON(object.publicKey) } 9957 : isSet(object.x509CertificateChain) 9958 ? { 9959 $case: "x509CertificateChain", 9960 x509CertificateChain: sigstore_common_1.X509CertificateChain.fromJSON(object.x509CertificateChain), 9961 } 9962 : isSet(object.certificate) 9963 ? { $case: "certificate", certificate: sigstore_common_1.X509Certificate.fromJSON(object.certificate) } 9964 : undefined, 9965 tlogEntries: Array.isArray(object?.tlogEntries) 9966 ? object.tlogEntries.map((e) => sigstore_rekor_1.TransparencyLogEntry.fromJSON(e)) 9967 : [], 9968 timestampVerificationData: isSet(object.timestampVerificationData) 9969 ? exports.TimestampVerificationData.fromJSON(object.timestampVerificationData) 9970 : undefined, 9971 }; 9972 }, 9973 toJSON(message) { 9974 const obj = {}; 9975 message.content?.$case === "publicKey" && 9976 (obj.publicKey = message.content?.publicKey ? sigstore_common_1.PublicKeyIdentifier.toJSON(message.content?.publicKey) : undefined); 9977 message.content?.$case === "x509CertificateChain" && 9978 (obj.x509CertificateChain = message.content?.x509CertificateChain 9979 ? sigstore_common_1.X509CertificateChain.toJSON(message.content?.x509CertificateChain) 9980 : undefined); 9981 message.content?.$case === "certificate" && 9982 (obj.certificate = message.content?.certificate 9983 ? sigstore_common_1.X509Certificate.toJSON(message.content?.certificate) 9984 : undefined); 9985 if (message.tlogEntries) { 9986 obj.tlogEntries = message.tlogEntries.map((e) => e ? sigstore_rekor_1.TransparencyLogEntry.toJSON(e) : undefined); 9987 } 9988 else { 9989 obj.tlogEntries = []; 9990 } 9991 message.timestampVerificationData !== undefined && 9992 (obj.timestampVerificationData = message.timestampVerificationData 9993 ? exports.TimestampVerificationData.toJSON(message.timestampVerificationData) 9994 : undefined); 9995 return obj; 9996 }, 9997 }; 9998 function createBaseBundle() { 9999 return { mediaType: "", verificationMaterial: undefined, content: undefined }; 10000 } 10001 exports.Bundle = { 10002 fromJSON(object) { 10003 return { 10004 mediaType: isSet(object.mediaType) ? String(object.mediaType) : "", 10005 verificationMaterial: isSet(object.verificationMaterial) 10006 ? exports.VerificationMaterial.fromJSON(object.verificationMaterial) 10007 : undefined, 10008 content: isSet(object.messageSignature) 10009 ? { $case: "messageSignature", messageSignature: sigstore_common_1.MessageSignature.fromJSON(object.messageSignature) } 10010 : isSet(object.dsseEnvelope) 10011 ? { $case: "dsseEnvelope", dsseEnvelope: envelope_1.Envelope.fromJSON(object.dsseEnvelope) } 10012 : undefined, 10013 }; 10014 }, 10015 toJSON(message) { 10016 const obj = {}; 10017 message.mediaType !== undefined && (obj.mediaType = message.mediaType); 10018 message.verificationMaterial !== undefined && (obj.verificationMaterial = message.verificationMaterial 10019 ? exports.VerificationMaterial.toJSON(message.verificationMaterial) 10020 : undefined); 10021 message.content?.$case === "messageSignature" && (obj.messageSignature = message.content?.messageSignature 10022 ? sigstore_common_1.MessageSignature.toJSON(message.content?.messageSignature) 10023 : undefined); 10024 message.content?.$case === "dsseEnvelope" && 10025 (obj.dsseEnvelope = message.content?.dsseEnvelope ? envelope_1.Envelope.toJSON(message.content?.dsseEnvelope) : undefined); 10026 return obj; 10027 }, 10028 }; 10029 function isSet(value) { 10030 return value !== null && value !== undefined; 10031 } 10032 10033 10034 /***/ }), 10035 10036 /***/ 82193: 10037 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 10038 10039 "use strict"; 10040 10041 Object.defineProperty(exports, "__esModule", ({ value: true })); 10042 exports.TimeRange = exports.X509CertificateChain = exports.SubjectAlternativeName = exports.X509Certificate = exports.DistinguishedName = exports.ObjectIdentifierValuePair = exports.ObjectIdentifier = exports.PublicKeyIdentifier = exports.PublicKey = exports.RFC3161SignedTimestamp = exports.LogId = exports.MessageSignature = exports.HashOutput = exports.subjectAlternativeNameTypeToJSON = exports.subjectAlternativeNameTypeFromJSON = exports.SubjectAlternativeNameType = exports.publicKeyDetailsToJSON = exports.publicKeyDetailsFromJSON = exports.PublicKeyDetails = exports.hashAlgorithmToJSON = exports.hashAlgorithmFromJSON = exports.HashAlgorithm = void 0; 10043 /* eslint-disable */ 10044 const timestamp_1 = __nccwpck_require__(73027); 10045 /** 10046 * Only a subset of the secure hash standard algorithms are supported. 10047 * See <https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf> for more 10048 * details. 10049 * UNSPECIFIED SHOULD not be used, primary reason for inclusion is to force 10050 * any proto JSON serialization to emit the used hash algorithm, as default 10051 * option is to *omit* the default value of an enum (which is the first 10052 * value, represented by '0'. 10053 */ 10054 var HashAlgorithm; 10055 (function (HashAlgorithm) { 10056 HashAlgorithm[HashAlgorithm["HASH_ALGORITHM_UNSPECIFIED"] = 0] = "HASH_ALGORITHM_UNSPECIFIED"; 10057 HashAlgorithm[HashAlgorithm["SHA2_256"] = 1] = "SHA2_256"; 10058 HashAlgorithm[HashAlgorithm["SHA2_384"] = 2] = "SHA2_384"; 10059 HashAlgorithm[HashAlgorithm["SHA2_512"] = 3] = "SHA2_512"; 10060 HashAlgorithm[HashAlgorithm["SHA3_256"] = 4] = "SHA3_256"; 10061 HashAlgorithm[HashAlgorithm["SHA3_384"] = 5] = "SHA3_384"; 10062 })(HashAlgorithm = exports.HashAlgorithm || (exports.HashAlgorithm = {})); 10063 function hashAlgorithmFromJSON(object) { 10064 switch (object) { 10065 case 0: 10066 case "HASH_ALGORITHM_UNSPECIFIED": 10067 return HashAlgorithm.HASH_ALGORITHM_UNSPECIFIED; 10068 case 1: 10069 case "SHA2_256": 10070 return HashAlgorithm.SHA2_256; 10071 case 2: 10072 case "SHA2_384": 10073 return HashAlgorithm.SHA2_384; 10074 case 3: 10075 case "SHA2_512": 10076 return HashAlgorithm.SHA2_512; 10077 case 4: 10078 case "SHA3_256": 10079 return HashAlgorithm.SHA3_256; 10080 case 5: 10081 case "SHA3_384": 10082 return HashAlgorithm.SHA3_384; 10083 default: 10084 throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum HashAlgorithm"); 10085 } 10086 } 10087 exports.hashAlgorithmFromJSON = hashAlgorithmFromJSON; 10088 function hashAlgorithmToJSON(object) { 10089 switch (object) { 10090 case HashAlgorithm.HASH_ALGORITHM_UNSPECIFIED: 10091 return "HASH_ALGORITHM_UNSPECIFIED"; 10092 case HashAlgorithm.SHA2_256: 10093 return "SHA2_256"; 10094 case HashAlgorithm.SHA2_384: 10095 return "SHA2_384"; 10096 case HashAlgorithm.SHA2_512: 10097 return "SHA2_512"; 10098 case HashAlgorithm.SHA3_256: 10099 return "SHA3_256"; 10100 case HashAlgorithm.SHA3_384: 10101 return "SHA3_384"; 10102 default: 10103 throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum HashAlgorithm"); 10104 } 10105 } 10106 exports.hashAlgorithmToJSON = hashAlgorithmToJSON; 10107 /** 10108 * Details of a specific public key, capturing the the key encoding method, 10109 * and signature algorithm. 10110 * 10111 * PublicKeyDetails captures the public key/hash algorithm combinations 10112 * recommended in the Sigstore ecosystem. 10113 * 10114 * This is modelled as a linear set as we want to provide a small number of 10115 * opinionated options instead of allowing every possible permutation. 10116 * 10117 * Any changes to this enum MUST be reflected in the algorithm registry. 10118 * See: docs/algorithm-registry.md 10119 * 10120 * To avoid the possibility of contradicting formats such as PKCS1 with 10121 * ED25519 the valid permutations are listed as a linear set instead of a 10122 * cartesian set (i.e one combined variable instead of two, one for encoding 10123 * and one for the signature algorithm). 10124 */ 10125 var PublicKeyDetails; 10126 (function (PublicKeyDetails) { 10127 PublicKeyDetails[PublicKeyDetails["PUBLIC_KEY_DETAILS_UNSPECIFIED"] = 0] = "PUBLIC_KEY_DETAILS_UNSPECIFIED"; 10128 /** 10129 * PKCS1_RSA_PKCS1V5 - RSA 10130 * 10131 * @deprecated 10132 */ 10133 PublicKeyDetails[PublicKeyDetails["PKCS1_RSA_PKCS1V5"] = 1] = "PKCS1_RSA_PKCS1V5"; 10134 /** 10135 * PKCS1_RSA_PSS - See RFC8017 10136 * 10137 * @deprecated 10138 */ 10139 PublicKeyDetails[PublicKeyDetails["PKCS1_RSA_PSS"] = 2] = "PKCS1_RSA_PSS"; 10140 /** @deprecated */ 10141 PublicKeyDetails[PublicKeyDetails["PKIX_RSA_PKCS1V5"] = 3] = "PKIX_RSA_PKCS1V5"; 10142 /** @deprecated */ 10143 PublicKeyDetails[PublicKeyDetails["PKIX_RSA_PSS"] = 4] = "PKIX_RSA_PSS"; 10144 /** PKIX_RSA_PKCS1V15_2048_SHA256 - RSA public key in PKIX format, PKCS#1v1.5 signature */ 10145 PublicKeyDetails[PublicKeyDetails["PKIX_RSA_PKCS1V15_2048_SHA256"] = 9] = "PKIX_RSA_PKCS1V15_2048_SHA256"; 10146 PublicKeyDetails[PublicKeyDetails["PKIX_RSA_PKCS1V15_3072_SHA256"] = 10] = "PKIX_RSA_PKCS1V15_3072_SHA256"; 10147 PublicKeyDetails[PublicKeyDetails["PKIX_RSA_PKCS1V15_4096_SHA256"] = 11] = "PKIX_RSA_PKCS1V15_4096_SHA256"; 10148 /** PKIX_RSA_PSS_2048_SHA256 - RSA public key in PKIX format, RSASSA-PSS signature */ 10149 PublicKeyDetails[PublicKeyDetails["PKIX_RSA_PSS_2048_SHA256"] = 16] = "PKIX_RSA_PSS_2048_SHA256"; 10150 PublicKeyDetails[PublicKeyDetails["PKIX_RSA_PSS_3072_SHA256"] = 17] = "PKIX_RSA_PSS_3072_SHA256"; 10151 PublicKeyDetails[PublicKeyDetails["PKIX_RSA_PSS_4096_SHA256"] = 18] = "PKIX_RSA_PSS_4096_SHA256"; 10152 /** 10153 * PKIX_ECDSA_P256_HMAC_SHA_256 - ECDSA 10154 * 10155 * @deprecated 10156 */ 10157 PublicKeyDetails[PublicKeyDetails["PKIX_ECDSA_P256_HMAC_SHA_256"] = 6] = "PKIX_ECDSA_P256_HMAC_SHA_256"; 10158 /** PKIX_ECDSA_P256_SHA_256 - See NIST FIPS 186-4 */ 10159 PublicKeyDetails[PublicKeyDetails["PKIX_ECDSA_P256_SHA_256"] = 5] = "PKIX_ECDSA_P256_SHA_256"; 10160 PublicKeyDetails[PublicKeyDetails["PKIX_ECDSA_P384_SHA_384"] = 12] = "PKIX_ECDSA_P384_SHA_384"; 10161 PublicKeyDetails[PublicKeyDetails["PKIX_ECDSA_P521_SHA_512"] = 13] = "PKIX_ECDSA_P521_SHA_512"; 10162 /** PKIX_ED25519 - Ed 25519 */ 10163 PublicKeyDetails[PublicKeyDetails["PKIX_ED25519"] = 7] = "PKIX_ED25519"; 10164 PublicKeyDetails[PublicKeyDetails["PKIX_ED25519_PH"] = 8] = "PKIX_ED25519_PH"; 10165 /** 10166 * LMS_SHA256 - LMS and LM-OTS 10167 * 10168 * These keys and signatures may be used by private Sigstore 10169 * deployments, but are not currently supported by the public 10170 * good instance. 10171 * 10172 * USER WARNING: LMS and LM-OTS are both stateful signature schemes. 10173 * Using them correctly requires discretion and careful consideration 10174 * to ensure that individual secret keys are not used more than once. 10175 * In addition, LM-OTS is a single-use scheme, meaning that it 10176 * MUST NOT be used for more than one signature per LM-OTS key. 10177 * If you cannot maintain these invariants, you MUST NOT use these 10178 * schemes. 10179 */ 10180 PublicKeyDetails[PublicKeyDetails["LMS_SHA256"] = 14] = "LMS_SHA256"; 10181 PublicKeyDetails[PublicKeyDetails["LMOTS_SHA256"] = 15] = "LMOTS_SHA256"; 10182 })(PublicKeyDetails = exports.PublicKeyDetails || (exports.PublicKeyDetails = {})); 10183 function publicKeyDetailsFromJSON(object) { 10184 switch (object) { 10185 case 0: 10186 case "PUBLIC_KEY_DETAILS_UNSPECIFIED": 10187 return PublicKeyDetails.PUBLIC_KEY_DETAILS_UNSPECIFIED; 10188 case 1: 10189 case "PKCS1_RSA_PKCS1V5": 10190 return PublicKeyDetails.PKCS1_RSA_PKCS1V5; 10191 case 2: 10192 case "PKCS1_RSA_PSS": 10193 return PublicKeyDetails.PKCS1_RSA_PSS; 10194 case 3: 10195 case "PKIX_RSA_PKCS1V5": 10196 return PublicKeyDetails.PKIX_RSA_PKCS1V5; 10197 case 4: 10198 case "PKIX_RSA_PSS": 10199 return PublicKeyDetails.PKIX_RSA_PSS; 10200 case 9: 10201 case "PKIX_RSA_PKCS1V15_2048_SHA256": 10202 return PublicKeyDetails.PKIX_RSA_PKCS1V15_2048_SHA256; 10203 case 10: 10204 case "PKIX_RSA_PKCS1V15_3072_SHA256": 10205 return PublicKeyDetails.PKIX_RSA_PKCS1V15_3072_SHA256; 10206 case 11: 10207 case "PKIX_RSA_PKCS1V15_4096_SHA256": 10208 return PublicKeyDetails.PKIX_RSA_PKCS1V15_4096_SHA256; 10209 case 16: 10210 case "PKIX_RSA_PSS_2048_SHA256": 10211 return PublicKeyDetails.PKIX_RSA_PSS_2048_SHA256; 10212 case 17: 10213 case "PKIX_RSA_PSS_3072_SHA256": 10214 return PublicKeyDetails.PKIX_RSA_PSS_3072_SHA256; 10215 case 18: 10216 case "PKIX_RSA_PSS_4096_SHA256": 10217 return PublicKeyDetails.PKIX_RSA_PSS_4096_SHA256; 10218 case 6: 10219 case "PKIX_ECDSA_P256_HMAC_SHA_256": 10220 return PublicKeyDetails.PKIX_ECDSA_P256_HMAC_SHA_256; 10221 case 5: 10222 case "PKIX_ECDSA_P256_SHA_256": 10223 return PublicKeyDetails.PKIX_ECDSA_P256_SHA_256; 10224 case 12: 10225 case "PKIX_ECDSA_P384_SHA_384": 10226 return PublicKeyDetails.PKIX_ECDSA_P384_SHA_384; 10227 case 13: 10228 case "PKIX_ECDSA_P521_SHA_512": 10229 return PublicKeyDetails.PKIX_ECDSA_P521_SHA_512; 10230 case 7: 10231 case "PKIX_ED25519": 10232 return PublicKeyDetails.PKIX_ED25519; 10233 case 8: 10234 case "PKIX_ED25519_PH": 10235 return PublicKeyDetails.PKIX_ED25519_PH; 10236 case 14: 10237 case "LMS_SHA256": 10238 return PublicKeyDetails.LMS_SHA256; 10239 case 15: 10240 case "LMOTS_SHA256": 10241 return PublicKeyDetails.LMOTS_SHA256; 10242 default: 10243 throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum PublicKeyDetails"); 10244 } 10245 } 10246 exports.publicKeyDetailsFromJSON = publicKeyDetailsFromJSON; 10247 function publicKeyDetailsToJSON(object) { 10248 switch (object) { 10249 case PublicKeyDetails.PUBLIC_KEY_DETAILS_UNSPECIFIED: 10250 return "PUBLIC_KEY_DETAILS_UNSPECIFIED"; 10251 case PublicKeyDetails.PKCS1_RSA_PKCS1V5: 10252 return "PKCS1_RSA_PKCS1V5"; 10253 case PublicKeyDetails.PKCS1_RSA_PSS: 10254 return "PKCS1_RSA_PSS"; 10255 case PublicKeyDetails.PKIX_RSA_PKCS1V5: 10256 return "PKIX_RSA_PKCS1V5"; 10257 case PublicKeyDetails.PKIX_RSA_PSS: 10258 return "PKIX_RSA_PSS"; 10259 case PublicKeyDetails.PKIX_RSA_PKCS1V15_2048_SHA256: 10260 return "PKIX_RSA_PKCS1V15_2048_SHA256"; 10261 case PublicKeyDetails.PKIX_RSA_PKCS1V15_3072_SHA256: 10262 return "PKIX_RSA_PKCS1V15_3072_SHA256"; 10263 case PublicKeyDetails.PKIX_RSA_PKCS1V15_4096_SHA256: 10264 return "PKIX_RSA_PKCS1V15_4096_SHA256"; 10265 case PublicKeyDetails.PKIX_RSA_PSS_2048_SHA256: 10266 return "PKIX_RSA_PSS_2048_SHA256"; 10267 case PublicKeyDetails.PKIX_RSA_PSS_3072_SHA256: 10268 return "PKIX_RSA_PSS_3072_SHA256"; 10269 case PublicKeyDetails.PKIX_RSA_PSS_4096_SHA256: 10270 return "PKIX_RSA_PSS_4096_SHA256"; 10271 case PublicKeyDetails.PKIX_ECDSA_P256_HMAC_SHA_256: 10272 return "PKIX_ECDSA_P256_HMAC_SHA_256"; 10273 case PublicKeyDetails.PKIX_ECDSA_P256_SHA_256: 10274 return "PKIX_ECDSA_P256_SHA_256"; 10275 case PublicKeyDetails.PKIX_ECDSA_P384_SHA_384: 10276 return "PKIX_ECDSA_P384_SHA_384"; 10277 case PublicKeyDetails.PKIX_ECDSA_P521_SHA_512: 10278 return "PKIX_ECDSA_P521_SHA_512"; 10279 case PublicKeyDetails.PKIX_ED25519: 10280 return "PKIX_ED25519"; 10281 case PublicKeyDetails.PKIX_ED25519_PH: 10282 return "PKIX_ED25519_PH"; 10283 case PublicKeyDetails.LMS_SHA256: 10284 return "LMS_SHA256"; 10285 case PublicKeyDetails.LMOTS_SHA256: 10286 return "LMOTS_SHA256"; 10287 default: 10288 throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum PublicKeyDetails"); 10289 } 10290 } 10291 exports.publicKeyDetailsToJSON = publicKeyDetailsToJSON; 10292 var SubjectAlternativeNameType; 10293 (function (SubjectAlternativeNameType) { 10294 SubjectAlternativeNameType[SubjectAlternativeNameType["SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED"] = 0] = "SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED"; 10295 SubjectAlternativeNameType[SubjectAlternativeNameType["EMAIL"] = 1] = "EMAIL"; 10296 SubjectAlternativeNameType[SubjectAlternativeNameType["URI"] = 2] = "URI"; 10297 /** 10298 * OTHER_NAME - OID 1.3.6.1.4.1.57264.1.7 10299 * See https://github.com/sigstore/fulcio/blob/main/docs/oid-info.md#1361415726417--othername-san 10300 * for more details. 10301 */ 10302 SubjectAlternativeNameType[SubjectAlternativeNameType["OTHER_NAME"] = 3] = "OTHER_NAME"; 10303 })(SubjectAlternativeNameType = exports.SubjectAlternativeNameType || (exports.SubjectAlternativeNameType = {})); 10304 function subjectAlternativeNameTypeFromJSON(object) { 10305 switch (object) { 10306 case 0: 10307 case "SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED": 10308 return SubjectAlternativeNameType.SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED; 10309 case 1: 10310 case "EMAIL": 10311 return SubjectAlternativeNameType.EMAIL; 10312 case 2: 10313 case "URI": 10314 return SubjectAlternativeNameType.URI; 10315 case 3: 10316 case "OTHER_NAME": 10317 return SubjectAlternativeNameType.OTHER_NAME; 10318 default: 10319 throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum SubjectAlternativeNameType"); 10320 } 10321 } 10322 exports.subjectAlternativeNameTypeFromJSON = subjectAlternativeNameTypeFromJSON; 10323 function subjectAlternativeNameTypeToJSON(object) { 10324 switch (object) { 10325 case SubjectAlternativeNameType.SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED: 10326 return "SUBJECT_ALTERNATIVE_NAME_TYPE_UNSPECIFIED"; 10327 case SubjectAlternativeNameType.EMAIL: 10328 return "EMAIL"; 10329 case SubjectAlternativeNameType.URI: 10330 return "URI"; 10331 case SubjectAlternativeNameType.OTHER_NAME: 10332 return "OTHER_NAME"; 10333 default: 10334 throw new tsProtoGlobalThis.Error("Unrecognized enum value " + object + " for enum SubjectAlternativeNameType"); 10335 } 10336 } 10337 exports.subjectAlternativeNameTypeToJSON = subjectAlternativeNameTypeToJSON; 10338 function createBaseHashOutput() { 10339 return { algorithm: 0, digest: Buffer.alloc(0) }; 10340 } 10341 exports.HashOutput = { 10342 fromJSON(object) { 10343 return { 10344 algorithm: isSet(object.algorithm) ? hashAlgorithmFromJSON(object.algorithm) : 0, 10345 digest: isSet(object.digest) ? Buffer.from(bytesFromBase64(object.digest)) : Buffer.alloc(0), 10346 }; 10347 }, 10348 toJSON(message) { 10349 const obj = {}; 10350 message.algorithm !== undefined && (obj.algorithm = hashAlgorithmToJSON(message.algorithm)); 10351 message.digest !== undefined && 10352 (obj.digest = base64FromBytes(message.digest !== undefined ? message.digest : Buffer.alloc(0))); 10353 return obj; 10354 }, 10355 }; 10356 function createBaseMessageSignature() { 10357 return { messageDigest: undefined, signature: Buffer.alloc(0) }; 10358 } 10359 exports.MessageSignature = { 10360 fromJSON(object) { 10361 return { 10362 messageDigest: isSet(object.messageDigest) ? exports.HashOutput.fromJSON(object.messageDigest) : undefined, 10363 signature: isSet(object.signature) ? Buffer.from(bytesFromBase64(object.signature)) : Buffer.alloc(0), 10364 }; 10365 }, 10366 toJSON(message) { 10367 const obj = {}; 10368 message.messageDigest !== undefined && 10369 (obj.messageDigest = message.messageDigest ? exports.HashOutput.toJSON(message.messageDigest) : undefined); 10370 message.signature !== undefined && 10371 (obj.signature = base64FromBytes(message.signature !== undefined ? message.signature : Buffer.alloc(0))); 10372 return obj; 10373 }, 10374 }; 10375 function createBaseLogId() { 10376 return { keyId: Buffer.alloc(0) }; 10377 } 10378 exports.LogId = { 10379 fromJSON(object) { 10380 return { keyId: isSet(object.keyId) ? Buffer.from(bytesFromBase64(object.keyId)) : Buffer.alloc(0) }; 10381 }, 10382 toJSON(message) { 10383 const obj = {}; 10384 message.keyId !== undefined && 10385 (obj.keyId = base64FromBytes(message.keyId !== undefined ? message.keyId : Buffer.alloc(0))); 10386 return obj; 10387 }, 10388 }; 10389 function createBaseRFC3161SignedTimestamp() { 10390 return { signedTimestamp: Buffer.alloc(0) }; 10391 } 10392 exports.RFC3161SignedTimestamp = { 10393 fromJSON(object) { 10394 return { 10395 signedTimestamp: isSet(object.signedTimestamp) 10396 ? Buffer.from(bytesFromBase64(object.signedTimestamp)) 10397 : Buffer.alloc(0), 10398 }; 10399 }, 10400 toJSON(message) { 10401 const obj = {}; 10402 message.signedTimestamp !== undefined && 10403 (obj.signedTimestamp = base64FromBytes(message.signedTimestamp !== undefined ? message.signedTimestamp : Buffer.alloc(0))); 10404 return obj; 10405 }, 10406 }; 10407 function createBasePublicKey() { 10408 return { rawBytes: undefined, keyDetails: 0, validFor: undefined }; 10409 } 10410 exports.PublicKey = { 10411 fromJSON(object) { 10412 return { 10413 rawBytes: isSet(object.rawBytes) ? Buffer.from(bytesFromBase64(object.rawBytes)) : undefined, 10414 keyDetails: isSet(object.keyDetails) ? publicKeyDetailsFromJSON(object.keyDetails) : 0, 10415 validFor: isSet(object.validFor) ? exports.TimeRange.fromJSON(object.validFor) : undefined, 10416 }; 10417 }, 10418 toJSON(message) { 10419 const obj = {}; 10420 message.rawBytes !== undefined && 10421 (obj.rawBytes = message.rawBytes !== undefined ? base64FromBytes(message.rawBytes) : undefined); 10422 message.keyDetails !== undefined && (obj.keyDetails = publicKeyDetailsToJSON(message.keyDetails)); 10423 message.validFor !== undefined && 10424 (obj.validFor = message.validFor ? exports.TimeRange.toJSON(message.validFor) : undefined); 10425 return obj; 10426 }, 10427 }; 10428 function createBasePublicKeyIdentifier() { 10429 return { hint: "" }; 10430 } 10431 exports.PublicKeyIdentifier = { 10432 fromJSON(object) { 10433 return { hint: isSet(object.hint) ? String(object.hint) : "" }; 10434 }, 10435 toJSON(message) { 10436 const obj = {}; 10437 message.hint !== undefined && (obj.hint = message.hint); 10438 return obj; 10439 }, 10440 }; 10441 function createBaseObjectIdentifier() { 10442 return { id: [] }; 10443 } 10444 exports.ObjectIdentifier = { 10445 fromJSON(object) { 10446 return { id: Array.isArray(object?.id) ? object.id.map((e) => Number(e)) : [] }; 10447 }, 10448 toJSON(message) { 10449 const obj = {}; 10450 if (message.id) { 10451 obj.id = message.id.map((e) => Math.round(e)); 10452 } 10453 else { 10454 obj.id = []; 10455 } 10456 return obj; 10457 }, 10458 }; 10459 function createBaseObjectIdentifierValuePair() { 10460 return { oid: undefined, value: Buffer.alloc(0) }; 10461 } 10462 exports.ObjectIdentifierValuePair = { 10463 fromJSON(object) { 10464 return { 10465 oid: isSet(object.oid) ? exports.ObjectIdentifier.fromJSON(object.oid) : undefined, 10466 value: isSet(object.value) ? Buffer.from(bytesFromBase64(object.value)) : Buffer.alloc(0), 10467 }; 10468 }, 10469 toJSON(message) { 10470 const obj = {}; 10471 message.oid !== undefined && (obj.oid = message.oid ? exports.ObjectIdentifier.toJSON(message.oid) : undefined); 10472 message.value !== undefined && 10473 (obj.value = base64FromBytes(message.value !== undefined ? message.value : Buffer.alloc(0))); 10474 return obj; 10475 }, 10476 }; 10477 function createBaseDistinguishedName() { 10478 return { organization: "", commonName: "" }; 10479 } 10480 exports.DistinguishedName = { 10481 fromJSON(object) { 10482 return { 10483 organization: isSet(object.organization) ? String(object.organization) : "", 10484 commonName: isSet(object.commonName) ? String(object.commonName) : "", 10485 }; 10486 }, 10487 toJSON(message) { 10488 const obj = {}; 10489 message.organization !== undefined && (obj.organization = message.organization); 10490 message.commonName !== undefined && (obj.commonName = message.commonName); 10491 return obj; 10492 }, 10493 }; 10494 function createBaseX509Certificate() { 10495 return { rawBytes: Buffer.alloc(0) }; 10496 } 10497 exports.X509Certificate = { 10498 fromJSON(object) { 10499 return { rawBytes: isSet(object.rawBytes) ? Buffer.from(bytesFromBase64(object.rawBytes)) : Buffer.alloc(0) }; 10500 }, 10501 toJSON(message) { 10502 const obj = {}; 10503 message.rawBytes !== undefined && 10504 (obj.rawBytes = base64FromBytes(message.rawBytes !== undefined ? message.rawBytes : Buffer.alloc(0))); 10505 return obj; 10506 }, 10507 }; 10508 function createBaseSubjectAlternativeName() { 10509 return { type: 0, identity: undefined }; 10510 } 10511 exports.SubjectAlternativeName = { 10512 fromJSON(object) { 10513 return { 10514 type: isSet(object.type) ? subjectAlternativeNameTypeFromJSON(object.type) : 0, 10515 identity: isSet(object.regexp) 10516 ? { $case: "regexp", regexp: String(object.regexp) } 10517 : isSet(object.value) 10518 ? { $case: "value", value: String(object.value) } 10519 : undefined, 10520 }; 10521 }, 10522 toJSON(message) { 10523 const obj = {}; 10524 message.type !== undefined && (obj.type = subjectAlternativeNameTypeToJSON(message.type)); 10525 message.identity?.$case === "regexp" && (obj.regexp = message.identity?.regexp); 10526 message.identity?.$case === "value" && (obj.value = message.identity?.value); 10527 return obj; 10528 }, 10529 }; 10530 function createBaseX509CertificateChain() { 10531 return { certificates: [] }; 10532 } 10533 exports.X509CertificateChain = { 10534 fromJSON(object) { 10535 return { 10536 certificates: Array.isArray(object?.certificates) 10537 ? object.certificates.map((e) => exports.X509Certificate.fromJSON(e)) 10538 : [], 10539 }; 10540 }, 10541 toJSON(message) { 10542 const obj = {}; 10543 if (message.certificates) { 10544 obj.certificates = message.certificates.map((e) => e ? exports.X509Certificate.toJSON(e) : undefined); 10545 } 10546 else { 10547 obj.certificates = []; 10548 } 10549 return obj; 10550 }, 10551 }; 10552 function createBaseTimeRange() { 10553 return { start: undefined, end: undefined }; 10554 } 10555 exports.TimeRange = { 10556 fromJSON(object) { 10557 return { 10558 start: isSet(object.start) ? fromJsonTimestamp(object.start) : undefined, 10559 end: isSet(object.end) ? fromJsonTimestamp(object.end) : undefined, 10560 }; 10561 }, 10562 toJSON(message) { 10563 const obj = {}; 10564 message.start !== undefined && (obj.start = message.start.toISOString()); 10565 message.end !== undefined && (obj.end = message.end.toISOString()); 10566 return obj; 10567 }, 10568 }; 10569 var tsProtoGlobalThis = (() => { 10570 if (typeof globalThis !== "undefined") { 10571 return globalThis; 10572 } 10573 if (typeof self !== "undefined") { 10574 return self; 10575 } 10576 if (typeof window !== "undefined") { 10577 return window; 10578 } 10579 if (typeof global !== "undefined") { 10580 return global; 10581 } 10582 throw "Unable to locate global object"; 10583 })(); 10584 function bytesFromBase64(b64) { 10585 if (tsProtoGlobalThis.Buffer) { 10586 return Uint8Array.from(tsProtoGlobalThis.Buffer.from(b64, "base64")); 10587 } 10588 else { 10589 const bin = tsProtoGlobalThis.atob(b64); 10590 const arr = new Uint8Array(bin.length); 10591 for (let i = 0; i < bin.length; ++i) { 10592 arr[i] = bin.charCodeAt(i); 10593 } 10594 return arr; 10595 } 10596 } 10597 function base64FromBytes(arr) { 10598 if (tsProtoGlobalThis.Buffer) { 10599 return tsProtoGlobalThis.Buffer.from(arr).toString("base64"); 10600 } 10601 else { 10602 const bin = []; 10603 arr.forEach((byte) => { 10604 bin.push(String.fromCharCode(byte)); 10605 }); 10606 return tsProtoGlobalThis.btoa(bin.join("")); 10607 } 10608 } 10609 function fromTimestamp(t) { 10610 let millis = Number(t.seconds) * 1000; 10611 millis += t.nanos / 1000000; 10612 return new Date(millis); 10613 } 10614 function fromJsonTimestamp(o) { 10615 if (o instanceof Date) { 10616 return o; 10617 } 10618 else if (typeof o === "string") { 10619 return new Date(o); 10620 } 10621 else { 10622 return fromTimestamp(timestamp_1.Timestamp.fromJSON(o)); 10623 } 10624 } 10625 function isSet(value) { 10626 return value !== null && value !== undefined; 10627 } 10628 10629 10630 /***/ }), 10631 10632 /***/ 64951: 10633 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 10634 10635 "use strict"; 10636 10637 Object.defineProperty(exports, "__esModule", ({ value: true })); 10638 exports.TransparencyLogEntry = exports.InclusionPromise = exports.InclusionProof = exports.Checkpoint = exports.KindVersion = void 0; 10639 /* eslint-disable */ 10640 const sigstore_common_1 = __nccwpck_require__(82193); 10641 function createBaseKindVersion() { 10642 return { kind: "", version: "" }; 10643 } 10644 exports.KindVersion = { 10645 fromJSON(object) { 10646 return { 10647 kind: isSet(object.kind) ? String(object.kind) : "", 10648 version: isSet(object.version) ? String(object.version) : "", 10649 }; 10650 }, 10651 toJSON(message) { 10652 const obj = {}; 10653 message.kind !== undefined && (obj.kind = message.kind); 10654 message.version !== undefined && (obj.version = message.version); 10655 return obj; 10656 }, 10657 }; 10658 function createBaseCheckpoint() { 10659 return { envelope: "" }; 10660 } 10661 exports.Checkpoint = { 10662 fromJSON(object) { 10663 return { envelope: isSet(object.envelope) ? String(object.envelope) : "" }; 10664 }, 10665 toJSON(message) { 10666 const obj = {}; 10667 message.envelope !== undefined && (obj.envelope = message.envelope); 10668 return obj; 10669 }, 10670 }; 10671 function createBaseInclusionProof() { 10672 return { logIndex: "0", rootHash: Buffer.alloc(0), treeSize: "0", hashes: [], checkpoint: undefined }; 10673 } 10674 exports.InclusionProof = { 10675 fromJSON(object) { 10676 return { 10677 logIndex: isSet(object.logIndex) ? String(object.logIndex) : "0", 10678 rootHash: isSet(object.rootHash) ? Buffer.from(bytesFromBase64(object.rootHash)) : Buffer.alloc(0), 10679 treeSize: isSet(object.treeSize) ? String(object.treeSize) : "0", 10680 hashes: Array.isArray(object?.hashes) ? object.hashes.map((e) => Buffer.from(bytesFromBase64(e))) : [], 10681 checkpoint: isSet(object.checkpoint) ? exports.Checkpoint.fromJSON(object.checkpoint) : undefined, 10682 }; 10683 }, 10684 toJSON(message) { 10685 const obj = {}; 10686 message.logIndex !== undefined && (obj.logIndex = message.logIndex); 10687 message.rootHash !== undefined && 10688 (obj.rootHash = base64FromBytes(message.rootHash !== undefined ? message.rootHash : Buffer.alloc(0))); 10689 message.treeSize !== undefined && (obj.treeSize = message.treeSize); 10690 if (message.hashes) { 10691 obj.hashes = message.hashes.map((e) => base64FromBytes(e !== undefined ? e : Buffer.alloc(0))); 10692 } 10693 else { 10694 obj.hashes = []; 10695 } 10696 message.checkpoint !== undefined && 10697 (obj.checkpoint = message.checkpoint ? exports.Checkpoint.toJSON(message.checkpoint) : undefined); 10698 return obj; 10699 }, 10700 }; 10701 function createBaseInclusionPromise() { 10702 return { signedEntryTimestamp: Buffer.alloc(0) }; 10703 } 10704 exports.InclusionPromise = { 10705 fromJSON(object) { 10706 return { 10707 signedEntryTimestamp: isSet(object.signedEntryTimestamp) 10708 ? Buffer.from(bytesFromBase64(object.signedEntryTimestamp)) 10709 : Buffer.alloc(0), 10710 }; 10711 }, 10712 toJSON(message) { 10713 const obj = {}; 10714 message.signedEntryTimestamp !== undefined && 10715 (obj.signedEntryTimestamp = base64FromBytes(message.signedEntryTimestamp !== undefined ? message.signedEntryTimestamp : Buffer.alloc(0))); 10716 return obj; 10717 }, 10718 }; 10719 function createBaseTransparencyLogEntry() { 10720 return { 10721 logIndex: "0", 10722 logId: undefined, 10723 kindVersion: undefined, 10724 integratedTime: "0", 10725 inclusionPromise: undefined, 10726 inclusionProof: undefined, 10727 canonicalizedBody: Buffer.alloc(0), 10728 }; 10729 } 10730 exports.TransparencyLogEntry = { 10731 fromJSON(object) { 10732 return { 10733 logIndex: isSet(object.logIndex) ? String(object.logIndex) : "0", 10734 logId: isSet(object.logId) ? sigstore_common_1.LogId.fromJSON(object.logId) : undefined, 10735 kindVersion: isSet(object.kindVersion) ? exports.KindVersion.fromJSON(object.kindVersion) : undefined, 10736 integratedTime: isSet(object.integratedTime) ? String(object.integratedTime) : "0", 10737 inclusionPromise: isSet(object.inclusionPromise) ? exports.InclusionPromise.fromJSON(object.inclusionPromise) : undefined, 10738 inclusionProof: isSet(object.inclusionProof) ? exports.InclusionProof.fromJSON(object.inclusionProof) : undefined, 10739 canonicalizedBody: isSet(object.canonicalizedBody) 10740 ? Buffer.from(bytesFromBase64(object.canonicalizedBody)) 10741 : Buffer.alloc(0), 10742 }; 10743 }, 10744 toJSON(message) { 10745 const obj = {}; 10746 message.logIndex !== undefined && (obj.logIndex = message.logIndex); 10747 message.logId !== undefined && (obj.logId = message.logId ? sigstore_common_1.LogId.toJSON(message.logId) : undefined); 10748 message.kindVersion !== undefined && 10749 (obj.kindVersion = message.kindVersion ? exports.KindVersion.toJSON(message.kindVersion) : undefined); 10750 message.integratedTime !== undefined && (obj.integratedTime = message.integratedTime); 10751 message.inclusionPromise !== undefined && 10752 (obj.inclusionPromise = message.inclusionPromise ? exports.InclusionPromise.toJSON(message.inclusionPromise) : undefined); 10753 message.inclusionProof !== undefined && 10754 (obj.inclusionProof = message.inclusionProof ? exports.InclusionProof.toJSON(message.inclusionProof) : undefined); 10755 message.canonicalizedBody !== undefined && 10756 (obj.canonicalizedBody = base64FromBytes(message.canonicalizedBody !== undefined ? message.canonicalizedBody : Buffer.alloc(0))); 10757 return obj; 10758 }, 10759 }; 10760 var tsProtoGlobalThis = (() => { 10761 if (typeof globalThis !== "undefined") { 10762 return globalThis; 10763 } 10764 if (typeof self !== "undefined") { 10765 return self; 10766 } 10767 if (typeof window !== "undefined") { 10768 return window; 10769 } 10770 if (typeof global !== "undefined") { 10771 return global; 10772 } 10773 throw "Unable to locate global object"; 10774 })(); 10775 function bytesFromBase64(b64) { 10776 if (tsProtoGlobalThis.Buffer) { 10777 return Uint8Array.from(tsProtoGlobalThis.Buffer.from(b64, "base64")); 10778 } 10779 else { 10780 const bin = tsProtoGlobalThis.atob(b64); 10781 const arr = new Uint8Array(bin.length); 10782 for (let i = 0; i < bin.length; ++i) { 10783 arr[i] = bin.charCodeAt(i); 10784 } 10785 return arr; 10786 } 10787 } 10788 function base64FromBytes(arr) { 10789 if (tsProtoGlobalThis.Buffer) { 10790 return tsProtoGlobalThis.Buffer.from(arr).toString("base64"); 10791 } 10792 else { 10793 const bin = []; 10794 arr.forEach((byte) => { 10795 bin.push(String.fromCharCode(byte)); 10796 }); 10797 return tsProtoGlobalThis.btoa(bin.join("")); 10798 } 10799 } 10800 function isSet(value) { 10801 return value !== null && value !== undefined; 10802 } 10803 10804 10805 /***/ }), 10806 10807 /***/ 64012: 10808 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 10809 10810 "use strict"; 10811 10812 Object.defineProperty(exports, "__esModule", ({ value: true })); 10813 exports.ClientTrustConfig = exports.SigningConfig = exports.TrustedRoot = exports.CertificateAuthority = exports.TransparencyLogInstance = void 0; 10814 /* eslint-disable */ 10815 const sigstore_common_1 = __nccwpck_require__(82193); 10816 function createBaseTransparencyLogInstance() { 10817 return { baseUrl: "", hashAlgorithm: 0, publicKey: undefined, logId: undefined, checkpointKeyId: undefined }; 10818 } 10819 exports.TransparencyLogInstance = { 10820 fromJSON(object) { 10821 return { 10822 baseUrl: isSet(object.baseUrl) ? String(object.baseUrl) : "", 10823 hashAlgorithm: isSet(object.hashAlgorithm) ? (0, sigstore_common_1.hashAlgorithmFromJSON)(object.hashAlgorithm) : 0, 10824 publicKey: isSet(object.publicKey) ? sigstore_common_1.PublicKey.fromJSON(object.publicKey) : undefined, 10825 logId: isSet(object.logId) ? sigstore_common_1.LogId.fromJSON(object.logId) : undefined, 10826 checkpointKeyId: isSet(object.checkpointKeyId) ? sigstore_common_1.LogId.fromJSON(object.checkpointKeyId) : undefined, 10827 }; 10828 }, 10829 toJSON(message) { 10830 const obj = {}; 10831 message.baseUrl !== undefined && (obj.baseUrl = message.baseUrl); 10832 message.hashAlgorithm !== undefined && (obj.hashAlgorithm = (0, sigstore_common_1.hashAlgorithmToJSON)(message.hashAlgorithm)); 10833 message.publicKey !== undefined && 10834 (obj.publicKey = message.publicKey ? sigstore_common_1.PublicKey.toJSON(message.publicKey) : undefined); 10835 message.logId !== undefined && (obj.logId = message.logId ? sigstore_common_1.LogId.toJSON(message.logId) : undefined); 10836 message.checkpointKeyId !== undefined && 10837 (obj.checkpointKeyId = message.checkpointKeyId ? sigstore_common_1.LogId.toJSON(message.checkpointKeyId) : undefined); 10838 return obj; 10839 }, 10840 }; 10841 function createBaseCertificateAuthority() { 10842 return { subject: undefined, uri: "", certChain: undefined, validFor: undefined }; 10843 } 10844 exports.CertificateAuthority = { 10845 fromJSON(object) { 10846 return { 10847 subject: isSet(object.subject) ? sigstore_common_1.DistinguishedName.fromJSON(object.subject) : undefined, 10848 uri: isSet(object.uri) ? String(object.uri) : "", 10849 certChain: isSet(object.certChain) ? sigstore_common_1.X509CertificateChain.fromJSON(object.certChain) : undefined, 10850 validFor: isSet(object.validFor) ? sigstore_common_1.TimeRange.fromJSON(object.validFor) : undefined, 10851 }; 10852 }, 10853 toJSON(message) { 10854 const obj = {}; 10855 message.subject !== undefined && 10856 (obj.subject = message.subject ? sigstore_common_1.DistinguishedName.toJSON(message.subject) : undefined); 10857 message.uri !== undefined && (obj.uri = message.uri); 10858 message.certChain !== undefined && 10859 (obj.certChain = message.certChain ? sigstore_common_1.X509CertificateChain.toJSON(message.certChain) : undefined); 10860 message.validFor !== undefined && 10861 (obj.validFor = message.validFor ? sigstore_common_1.TimeRange.toJSON(message.validFor) : undefined); 10862 return obj; 10863 }, 10864 }; 10865 function createBaseTrustedRoot() { 10866 return { mediaType: "", tlogs: [], certificateAuthorities: [], ctlogs: [], timestampAuthorities: [] }; 10867 } 10868 exports.TrustedRoot = { 10869 fromJSON(object) { 10870 return { 10871 mediaType: isSet(object.mediaType) ? String(object.mediaType) : "", 10872 tlogs: Array.isArray(object?.tlogs) ? object.tlogs.map((e) => exports.TransparencyLogInstance.fromJSON(e)) : [], 10873 certificateAuthorities: Array.isArray(object?.certificateAuthorities) 10874 ? object.certificateAuthorities.map((e) => exports.CertificateAuthority.fromJSON(e)) 10875 : [], 10876 ctlogs: Array.isArray(object?.ctlogs) 10877 ? object.ctlogs.map((e) => exports.TransparencyLogInstance.fromJSON(e)) 10878 : [], 10879 timestampAuthorities: Array.isArray(object?.timestampAuthorities) 10880 ? object.timestampAuthorities.map((e) => exports.CertificateAuthority.fromJSON(e)) 10881 : [], 10882 }; 10883 }, 10884 toJSON(message) { 10885 const obj = {}; 10886 message.mediaType !== undefined && (obj.mediaType = message.mediaType); 10887 if (message.tlogs) { 10888 obj.tlogs = message.tlogs.map((e) => e ? exports.TransparencyLogInstance.toJSON(e) : undefined); 10889 } 10890 else { 10891 obj.tlogs = []; 10892 } 10893 if (message.certificateAuthorities) { 10894 obj.certificateAuthorities = message.certificateAuthorities.map((e) => e ? exports.CertificateAuthority.toJSON(e) : undefined); 10895 } 10896 else { 10897 obj.certificateAuthorities = []; 10898 } 10899 if (message.ctlogs) { 10900 obj.ctlogs = message.ctlogs.map((e) => e ? exports.TransparencyLogInstance.toJSON(e) : undefined); 10901 } 10902 else { 10903 obj.ctlogs = []; 10904 } 10905 if (message.timestampAuthorities) { 10906 obj.timestampAuthorities = message.timestampAuthorities.map((e) => e ? exports.CertificateAuthority.toJSON(e) : undefined); 10907 } 10908 else { 10909 obj.timestampAuthorities = []; 10910 } 10911 return obj; 10912 }, 10913 }; 10914 function createBaseSigningConfig() { 10915 return { caUrl: "", oidcUrl: "", tlogUrls: [], tsaUrls: [] }; 10916 } 10917 exports.SigningConfig = { 10918 fromJSON(object) { 10919 return { 10920 caUrl: isSet(object.caUrl) ? String(object.caUrl) : "", 10921 oidcUrl: isSet(object.oidcUrl) ? String(object.oidcUrl) : "", 10922 tlogUrls: Array.isArray(object?.tlogUrls) ? object.tlogUrls.map((e) => String(e)) : [], 10923 tsaUrls: Array.isArray(object?.tsaUrls) ? object.tsaUrls.map((e) => String(e)) : [], 10924 }; 10925 }, 10926 toJSON(message) { 10927 const obj = {}; 10928 message.caUrl !== undefined && (obj.caUrl = message.caUrl); 10929 message.oidcUrl !== undefined && (obj.oidcUrl = message.oidcUrl); 10930 if (message.tlogUrls) { 10931 obj.tlogUrls = message.tlogUrls.map((e) => e); 10932 } 10933 else { 10934 obj.tlogUrls = []; 10935 } 10936 if (message.tsaUrls) { 10937 obj.tsaUrls = message.tsaUrls.map((e) => e); 10938 } 10939 else { 10940 obj.tsaUrls = []; 10941 } 10942 return obj; 10943 }, 10944 }; 10945 function createBaseClientTrustConfig() { 10946 return { mediaType: "", trustedRoot: undefined, signingConfig: undefined }; 10947 } 10948 exports.ClientTrustConfig = { 10949 fromJSON(object) { 10950 return { 10951 mediaType: isSet(object.mediaType) ? String(object.mediaType) : "", 10952 trustedRoot: isSet(object.trustedRoot) ? exports.TrustedRoot.fromJSON(object.trustedRoot) : undefined, 10953 signingConfig: isSet(object.signingConfig) ? exports.SigningConfig.fromJSON(object.signingConfig) : undefined, 10954 }; 10955 }, 10956 toJSON(message) { 10957 const obj = {}; 10958 message.mediaType !== undefined && (obj.mediaType = message.mediaType); 10959 message.trustedRoot !== undefined && 10960 (obj.trustedRoot = message.trustedRoot ? exports.TrustedRoot.toJSON(message.trustedRoot) : undefined); 10961 message.signingConfig !== undefined && 10962 (obj.signingConfig = message.signingConfig ? exports.SigningConfig.toJSON(message.signingConfig) : undefined); 10963 return obj; 10964 }, 10965 }; 10966 function isSet(value) { 10967 return value !== null && value !== undefined; 10968 } 10969 10970 10971 /***/ }), 10972 10973 /***/ 79980: 10974 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 10975 10976 "use strict"; 10977 10978 Object.defineProperty(exports, "__esModule", ({ value: true })); 10979 exports.Input = exports.Artifact = exports.ArtifactVerificationOptions_ObserverTimestampOptions = exports.ArtifactVerificationOptions_TlogIntegratedTimestampOptions = exports.ArtifactVerificationOptions_TimestampAuthorityOptions = exports.ArtifactVerificationOptions_CtlogOptions = exports.ArtifactVerificationOptions_TlogOptions = exports.ArtifactVerificationOptions = exports.PublicKeyIdentities = exports.CertificateIdentities = exports.CertificateIdentity = void 0; 10980 /* eslint-disable */ 10981 const sigstore_bundle_1 = __nccwpck_require__(28293); 10982 const sigstore_common_1 = __nccwpck_require__(82193); 10983 const sigstore_trustroot_1 = __nccwpck_require__(64012); 10984 function createBaseCertificateIdentity() { 10985 return { issuer: "", san: undefined, oids: [] }; 10986 } 10987 exports.CertificateIdentity = { 10988 fromJSON(object) { 10989 return { 10990 issuer: isSet(object.issuer) ? String(object.issuer) : "", 10991 san: isSet(object.san) ? sigstore_common_1.SubjectAlternativeName.fromJSON(object.san) : undefined, 10992 oids: Array.isArray(object?.oids) ? object.oids.map((e) => sigstore_common_1.ObjectIdentifierValuePair.fromJSON(e)) : [], 10993 }; 10994 }, 10995 toJSON(message) { 10996 const obj = {}; 10997 message.issuer !== undefined && (obj.issuer = message.issuer); 10998 message.san !== undefined && (obj.san = message.san ? sigstore_common_1.SubjectAlternativeName.toJSON(message.san) : undefined); 10999 if (message.oids) { 11000 obj.oids = message.oids.map((e) => e ? sigstore_common_1.ObjectIdentifierValuePair.toJSON(e) : undefined); 11001 } 11002 else { 11003 obj.oids = []; 11004 } 11005 return obj; 11006 }, 11007 }; 11008 function createBaseCertificateIdentities() { 11009 return { identities: [] }; 11010 } 11011 exports.CertificateIdentities = { 11012 fromJSON(object) { 11013 return { 11014 identities: Array.isArray(object?.identities) 11015 ? object.identities.map((e) => exports.CertificateIdentity.fromJSON(e)) 11016 : [], 11017 }; 11018 }, 11019 toJSON(message) { 11020 const obj = {}; 11021 if (message.identities) { 11022 obj.identities = message.identities.map((e) => e ? exports.CertificateIdentity.toJSON(e) : undefined); 11023 } 11024 else { 11025 obj.identities = []; 11026 } 11027 return obj; 11028 }, 11029 }; 11030 function createBasePublicKeyIdentities() { 11031 return { publicKeys: [] }; 11032 } 11033 exports.PublicKeyIdentities = { 11034 fromJSON(object) { 11035 return { 11036 publicKeys: Array.isArray(object?.publicKeys) ? object.publicKeys.map((e) => sigstore_common_1.PublicKey.fromJSON(e)) : [], 11037 }; 11038 }, 11039 toJSON(message) { 11040 const obj = {}; 11041 if (message.publicKeys) { 11042 obj.publicKeys = message.publicKeys.map((e) => e ? sigstore_common_1.PublicKey.toJSON(e) : undefined); 11043 } 11044 else { 11045 obj.publicKeys = []; 11046 } 11047 return obj; 11048 }, 11049 }; 11050 function createBaseArtifactVerificationOptions() { 11051 return { 11052 signers: undefined, 11053 tlogOptions: undefined, 11054 ctlogOptions: undefined, 11055 tsaOptions: undefined, 11056 integratedTsOptions: undefined, 11057 observerOptions: undefined, 11058 }; 11059 } 11060 exports.ArtifactVerificationOptions = { 11061 fromJSON(object) { 11062 return { 11063 signers: isSet(object.certificateIdentities) 11064 ? { 11065 $case: "certificateIdentities", 11066 certificateIdentities: exports.CertificateIdentities.fromJSON(object.certificateIdentities), 11067 } 11068 : isSet(object.publicKeys) 11069 ? { $case: "publicKeys", publicKeys: exports.PublicKeyIdentities.fromJSON(object.publicKeys) } 11070 : undefined, 11071 tlogOptions: isSet(object.tlogOptions) 11072 ? exports.ArtifactVerificationOptions_TlogOptions.fromJSON(object.tlogOptions) 11073 : undefined, 11074 ctlogOptions: isSet(object.ctlogOptions) 11075 ? exports.ArtifactVerificationOptions_CtlogOptions.fromJSON(object.ctlogOptions) 11076 : undefined, 11077 tsaOptions: isSet(object.tsaOptions) 11078 ? exports.ArtifactVerificationOptions_TimestampAuthorityOptions.fromJSON(object.tsaOptions) 11079 : undefined, 11080 integratedTsOptions: isSet(object.integratedTsOptions) 11081 ? exports.ArtifactVerificationOptions_TlogIntegratedTimestampOptions.fromJSON(object.integratedTsOptions) 11082 : undefined, 11083 observerOptions: isSet(object.observerOptions) 11084 ? exports.ArtifactVerificationOptions_ObserverTimestampOptions.fromJSON(object.observerOptions) 11085 : undefined, 11086 }; 11087 }, 11088 toJSON(message) { 11089 const obj = {}; 11090 message.signers?.$case === "certificateIdentities" && 11091 (obj.certificateIdentities = message.signers?.certificateIdentities 11092 ? exports.CertificateIdentities.toJSON(message.signers?.certificateIdentities) 11093 : undefined); 11094 message.signers?.$case === "publicKeys" && (obj.publicKeys = message.signers?.publicKeys 11095 ? exports.PublicKeyIdentities.toJSON(message.signers?.publicKeys) 11096 : undefined); 11097 message.tlogOptions !== undefined && (obj.tlogOptions = message.tlogOptions 11098 ? exports.ArtifactVerificationOptions_TlogOptions.toJSON(message.tlogOptions) 11099 : undefined); 11100 message.ctlogOptions !== undefined && (obj.ctlogOptions = message.ctlogOptions 11101 ? exports.ArtifactVerificationOptions_CtlogOptions.toJSON(message.ctlogOptions) 11102 : undefined); 11103 message.tsaOptions !== undefined && (obj.tsaOptions = message.tsaOptions 11104 ? exports.ArtifactVerificationOptions_TimestampAuthorityOptions.toJSON(message.tsaOptions) 11105 : undefined); 11106 message.integratedTsOptions !== undefined && (obj.integratedTsOptions = message.integratedTsOptions 11107 ? exports.ArtifactVerificationOptions_TlogIntegratedTimestampOptions.toJSON(message.integratedTsOptions) 11108 : undefined); 11109 message.observerOptions !== undefined && (obj.observerOptions = message.observerOptions 11110 ? exports.ArtifactVerificationOptions_ObserverTimestampOptions.toJSON(message.observerOptions) 11111 : undefined); 11112 return obj; 11113 }, 11114 }; 11115 function createBaseArtifactVerificationOptions_TlogOptions() { 11116 return { threshold: 0, performOnlineVerification: false, disable: false }; 11117 } 11118 exports.ArtifactVerificationOptions_TlogOptions = { 11119 fromJSON(object) { 11120 return { 11121 threshold: isSet(object.threshold) ? Number(object.threshold) : 0, 11122 performOnlineVerification: isSet(object.performOnlineVerification) 11123 ? Boolean(object.performOnlineVerification) 11124 : false, 11125 disable: isSet(object.disable) ? Boolean(object.disable) : false, 11126 }; 11127 }, 11128 toJSON(message) { 11129 const obj = {}; 11130 message.threshold !== undefined && (obj.threshold = Math.round(message.threshold)); 11131 message.performOnlineVerification !== undefined && 11132 (obj.performOnlineVerification = message.performOnlineVerification); 11133 message.disable !== undefined && (obj.disable = message.disable); 11134 return obj; 11135 }, 11136 }; 11137 function createBaseArtifactVerificationOptions_CtlogOptions() { 11138 return { threshold: 0, disable: false }; 11139 } 11140 exports.ArtifactVerificationOptions_CtlogOptions = { 11141 fromJSON(object) { 11142 return { 11143 threshold: isSet(object.threshold) ? Number(object.threshold) : 0, 11144 disable: isSet(object.disable) ? Boolean(object.disable) : false, 11145 }; 11146 }, 11147 toJSON(message) { 11148 const obj = {}; 11149 message.threshold !== undefined && (obj.threshold = Math.round(message.threshold)); 11150 message.disable !== undefined && (obj.disable = message.disable); 11151 return obj; 11152 }, 11153 }; 11154 function createBaseArtifactVerificationOptions_TimestampAuthorityOptions() { 11155 return { threshold: 0, disable: false }; 11156 } 11157 exports.ArtifactVerificationOptions_TimestampAuthorityOptions = { 11158 fromJSON(object) { 11159 return { 11160 threshold: isSet(object.threshold) ? Number(object.threshold) : 0, 11161 disable: isSet(object.disable) ? Boolean(object.disable) : false, 11162 }; 11163 }, 11164 toJSON(message) { 11165 const obj = {}; 11166 message.threshold !== undefined && (obj.threshold = Math.round(message.threshold)); 11167 message.disable !== undefined && (obj.disable = message.disable); 11168 return obj; 11169 }, 11170 }; 11171 function createBaseArtifactVerificationOptions_TlogIntegratedTimestampOptions() { 11172 return { threshold: 0, disable: false }; 11173 } 11174 exports.ArtifactVerificationOptions_TlogIntegratedTimestampOptions = { 11175 fromJSON(object) { 11176 return { 11177 threshold: isSet(object.threshold) ? Number(object.threshold) : 0, 11178 disable: isSet(object.disable) ? Boolean(object.disable) : false, 11179 }; 11180 }, 11181 toJSON(message) { 11182 const obj = {}; 11183 message.threshold !== undefined && (obj.threshold = Math.round(message.threshold)); 11184 message.disable !== undefined && (obj.disable = message.disable); 11185 return obj; 11186 }, 11187 }; 11188 function createBaseArtifactVerificationOptions_ObserverTimestampOptions() { 11189 return { threshold: 0, disable: false }; 11190 } 11191 exports.ArtifactVerificationOptions_ObserverTimestampOptions = { 11192 fromJSON(object) { 11193 return { 11194 threshold: isSet(object.threshold) ? Number(object.threshold) : 0, 11195 disable: isSet(object.disable) ? Boolean(object.disable) : false, 11196 }; 11197 }, 11198 toJSON(message) { 11199 const obj = {}; 11200 message.threshold !== undefined && (obj.threshold = Math.round(message.threshold)); 11201 message.disable !== undefined && (obj.disable = message.disable); 11202 return obj; 11203 }, 11204 }; 11205 function createBaseArtifact() { 11206 return { data: undefined }; 11207 } 11208 exports.Artifact = { 11209 fromJSON(object) { 11210 return { 11211 data: isSet(object.artifactUri) 11212 ? { $case: "artifactUri", artifactUri: String(object.artifactUri) } 11213 : isSet(object.artifact) 11214 ? { $case: "artifact", artifact: Buffer.from(bytesFromBase64(object.artifact)) } 11215 : undefined, 11216 }; 11217 }, 11218 toJSON(message) { 11219 const obj = {}; 11220 message.data?.$case === "artifactUri" && (obj.artifactUri = message.data?.artifactUri); 11221 message.data?.$case === "artifact" && 11222 (obj.artifact = message.data?.artifact !== undefined ? base64FromBytes(message.data?.artifact) : undefined); 11223 return obj; 11224 }, 11225 }; 11226 function createBaseInput() { 11227 return { 11228 artifactTrustRoot: undefined, 11229 artifactVerificationOptions: undefined, 11230 bundle: undefined, 11231 artifact: undefined, 11232 }; 11233 } 11234 exports.Input = { 11235 fromJSON(object) { 11236 return { 11237 artifactTrustRoot: isSet(object.artifactTrustRoot) ? sigstore_trustroot_1.TrustedRoot.fromJSON(object.artifactTrustRoot) : undefined, 11238 artifactVerificationOptions: isSet(object.artifactVerificationOptions) 11239 ? exports.ArtifactVerificationOptions.fromJSON(object.artifactVerificationOptions) 11240 : undefined, 11241 bundle: isSet(object.bundle) ? sigstore_bundle_1.Bundle.fromJSON(object.bundle) : undefined, 11242 artifact: isSet(object.artifact) ? exports.Artifact.fromJSON(object.artifact) : undefined, 11243 }; 11244 }, 11245 toJSON(message) { 11246 const obj = {}; 11247 message.artifactTrustRoot !== undefined && 11248 (obj.artifactTrustRoot = message.artifactTrustRoot ? sigstore_trustroot_1.TrustedRoot.toJSON(message.artifactTrustRoot) : undefined); 11249 message.artifactVerificationOptions !== undefined && 11250 (obj.artifactVerificationOptions = message.artifactVerificationOptions 11251 ? exports.ArtifactVerificationOptions.toJSON(message.artifactVerificationOptions) 11252 : undefined); 11253 message.bundle !== undefined && (obj.bundle = message.bundle ? sigstore_bundle_1.Bundle.toJSON(message.bundle) : undefined); 11254 message.artifact !== undefined && (obj.artifact = message.artifact ? exports.Artifact.toJSON(message.artifact) : undefined); 11255 return obj; 11256 }, 11257 }; 11258 var tsProtoGlobalThis = (() => { 11259 if (typeof globalThis !== "undefined") { 11260 return globalThis; 11261 } 11262 if (typeof self !== "undefined") { 11263 return self; 11264 } 11265 if (typeof window !== "undefined") { 11266 return window; 11267 } 11268 if (typeof global !== "undefined") { 11269 return global; 11270 } 11271 throw "Unable to locate global object"; 11272 })(); 11273 function bytesFromBase64(b64) { 11274 if (tsProtoGlobalThis.Buffer) { 11275 return Uint8Array.from(tsProtoGlobalThis.Buffer.from(b64, "base64")); 11276 } 11277 else { 11278 const bin = tsProtoGlobalThis.atob(b64); 11279 const arr = new Uint8Array(bin.length); 11280 for (let i = 0; i < bin.length; ++i) { 11281 arr[i] = bin.charCodeAt(i); 11282 } 11283 return arr; 11284 } 11285 } 11286 function base64FromBytes(arr) { 11287 if (tsProtoGlobalThis.Buffer) { 11288 return tsProtoGlobalThis.Buffer.from(arr).toString("base64"); 11289 } 11290 else { 11291 const bin = []; 11292 arr.forEach((byte) => { 11293 bin.push(String.fromCharCode(byte)); 11294 }); 11295 return tsProtoGlobalThis.btoa(bin.join("")); 11296 } 11297 } 11298 function isSet(value) { 11299 return value !== null && value !== undefined; 11300 } 11301 11302 11303 /***/ }), 11304 11305 /***/ 60530: 11306 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 11307 11308 "use strict"; 11309 11310 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 11311 if (k2 === undefined) k2 = k; 11312 var desc = Object.getOwnPropertyDescriptor(m, k); 11313 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 11314 desc = { enumerable: true, get: function() { return m[k]; } }; 11315 } 11316 Object.defineProperty(o, k2, desc); 11317 }) : (function(o, m, k, k2) { 11318 if (k2 === undefined) k2 = k; 11319 o[k2] = m[k]; 11320 })); 11321 var __exportStar = (this && this.__exportStar) || function(m, exports) { 11322 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 11323 }; 11324 Object.defineProperty(exports, "__esModule", ({ value: true })); 11325 /* 11326 Copyright 2023 The Sigstore Authors. 11327 11328 Licensed under the Apache License, Version 2.0 (the "License"); 11329 you may not use this file except in compliance with the License. 11330 You may obtain a copy of the License at 11331 11332 http://www.apache.org/licenses/LICENSE-2.0 11333 11334 Unless required by applicable law or agreed to in writing, software 11335 distributed under the License is distributed on an "AS IS" BASIS, 11336 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11337 See the License for the specific language governing permissions and 11338 limitations under the License. 11339 */ 11340 __exportStar(__nccwpck_require__(70714), exports); 11341 __exportStar(__nccwpck_require__(28293), exports); 11342 __exportStar(__nccwpck_require__(82193), exports); 11343 __exportStar(__nccwpck_require__(64951), exports); 11344 __exportStar(__nccwpck_require__(64012), exports); 11345 __exportStar(__nccwpck_require__(79980), exports); 11346 11347 11348 /***/ }), 11349 11350 /***/ 30005: 11351 /***/ ((__unused_webpack_module, exports) => { 11352 11353 "use strict"; 11354 11355 Object.defineProperty(exports, "__esModule", ({ value: true })); 11356 exports.BaseBundleBuilder = void 0; 11357 // BaseBundleBuilder is a base class for BundleBuilder implementations. It 11358 // provides a the basic wokflow for signing and witnessing an artifact. 11359 // Subclasses must implement the `package` method to assemble a valid bundle 11360 // with the generated signature and verification material. 11361 class BaseBundleBuilder { 11362 constructor(options) { 11363 this.signer = options.signer; 11364 this.witnesses = options.witnesses; 11365 } 11366 // Executes the signing/witnessing process for the given artifact. 11367 async create(artifact) { 11368 const signature = await this.prepare(artifact).then((blob) => this.signer.sign(blob)); 11369 const bundle = await this.package(artifact, signature); 11370 // Invoke all of the witnesses in parallel 11371 const verificationMaterials = await Promise.all(this.witnesses.map((witness) => witness.testify(bundle.content, publicKey(signature.key)))); 11372 // Collect the verification material from all of the witnesses 11373 const tlogEntryList = []; 11374 const timestampList = []; 11375 verificationMaterials.forEach(({ tlogEntries, rfc3161Timestamps }) => { 11376 tlogEntryList.push(...(tlogEntries ?? [])); 11377 timestampList.push(...(rfc3161Timestamps ?? [])); 11378 }); 11379 // Merge the collected verification material into the bundle 11380 bundle.verificationMaterial.tlogEntries = tlogEntryList; 11381 bundle.verificationMaterial.timestampVerificationData = { 11382 rfc3161Timestamps: timestampList, 11383 }; 11384 return bundle; 11385 } 11386 // Override this function to apply any pre-signing transformations to the 11387 // artifact. The returned buffer will be signed by the signer. The default 11388 // implementation simply returns the artifact data. 11389 async prepare(artifact) { 11390 return artifact.data; 11391 } 11392 } 11393 exports.BaseBundleBuilder = BaseBundleBuilder; 11394 // Extracts the public key from a KeyMaterial. Returns either the public key 11395 // or the certificate, depending on the type of key material. 11396 function publicKey(key) { 11397 switch (key.$case) { 11398 case 'publicKey': 11399 return key.publicKey; 11400 case 'x509Certificate': 11401 return key.certificate; 11402 } 11403 } 11404 11405 11406 /***/ }), 11407 11408 /***/ 66947: 11409 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 11410 11411 "use strict"; 11412 11413 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 11414 if (k2 === undefined) k2 = k; 11415 var desc = Object.getOwnPropertyDescriptor(m, k); 11416 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 11417 desc = { enumerable: true, get: function() { return m[k]; } }; 11418 } 11419 Object.defineProperty(o, k2, desc); 11420 }) : (function(o, m, k, k2) { 11421 if (k2 === undefined) k2 = k; 11422 o[k2] = m[k]; 11423 })); 11424 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 11425 Object.defineProperty(o, "default", { enumerable: true, value: v }); 11426 }) : function(o, v) { 11427 o["default"] = v; 11428 }); 11429 var __importStar = (this && this.__importStar) || function (mod) { 11430 if (mod && mod.__esModule) return mod; 11431 var result = {}; 11432 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 11433 __setModuleDefault(result, mod); 11434 return result; 11435 }; 11436 Object.defineProperty(exports, "__esModule", ({ value: true })); 11437 exports.toDSSEBundle = exports.toMessageSignatureBundle = void 0; 11438 /* 11439 Copyright 2023 The Sigstore Authors. 11440 11441 Licensed under the Apache License, Version 2.0 (the "License"); 11442 you may not use this file except in compliance with the License. 11443 You may obtain a copy of the License at 11444 11445 http://www.apache.org/licenses/LICENSE-2.0 11446 11447 Unless required by applicable law or agreed to in writing, software 11448 distributed under the License is distributed on an "AS IS" BASIS, 11449 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11450 See the License for the specific language governing permissions and 11451 limitations under the License. 11452 */ 11453 const sigstore = __importStar(__nccwpck_require__(29715)); 11454 const util_1 = __nccwpck_require__(90724); 11455 // Helper functions for assembling the parts of a Sigstore bundle 11456 // Message signature bundle - $case: 'messageSignature' 11457 function toMessageSignatureBundle(artifact, signature) { 11458 const digest = util_1.crypto.hash(artifact.data); 11459 return sigstore.toMessageSignatureBundle({ 11460 digest, 11461 signature: signature.signature, 11462 certificate: signature.key.$case === 'x509Certificate' 11463 ? util_1.pem.toDER(signature.key.certificate) 11464 : undefined, 11465 keyHint: signature.key.$case === 'publicKey' ? signature.key.hint : undefined, 11466 }); 11467 } 11468 exports.toMessageSignatureBundle = toMessageSignatureBundle; 11469 // DSSE envelope bundle - $case: 'dsseEnvelope' 11470 function toDSSEBundle(artifact, signature, singleCertificate) { 11471 return sigstore.toDSSEBundle({ 11472 artifact: artifact.data, 11473 artifactType: artifact.type, 11474 signature: signature.signature, 11475 certificate: signature.key.$case === 'x509Certificate' 11476 ? util_1.pem.toDER(signature.key.certificate) 11477 : undefined, 11478 keyHint: signature.key.$case === 'publicKey' ? signature.key.hint : undefined, 11479 singleCertificate, 11480 }); 11481 } 11482 exports.toDSSEBundle = toDSSEBundle; 11483 11484 11485 /***/ }), 11486 11487 /***/ 78791: 11488 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 11489 11490 "use strict"; 11491 11492 Object.defineProperty(exports, "__esModule", ({ value: true })); 11493 exports.DSSEBundleBuilder = void 0; 11494 /* 11495 Copyright 2023 The Sigstore Authors. 11496 11497 Licensed under the Apache License, Version 2.0 (the "License"); 11498 you may not use this file except in compliance with the License. 11499 You may obtain a copy of the License at 11500 11501 http://www.apache.org/licenses/LICENSE-2.0 11502 11503 Unless required by applicable law or agreed to in writing, software 11504 distributed under the License is distributed on an "AS IS" BASIS, 11505 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11506 See the License for the specific language governing permissions and 11507 limitations under the License. 11508 */ 11509 const util_1 = __nccwpck_require__(90724); 11510 const base_1 = __nccwpck_require__(30005); 11511 const bundle_1 = __nccwpck_require__(66947); 11512 // BundleBuilder implementation for DSSE wrapped attestations 11513 class DSSEBundleBuilder extends base_1.BaseBundleBuilder { 11514 constructor(options) { 11515 super(options); 11516 this.singleCertificate = options.singleCertificate ?? false; 11517 } 11518 // DSSE requires the artifact to be pre-encoded with the payload type 11519 // before the signature is generated. 11520 async prepare(artifact) { 11521 const a = artifactDefaults(artifact); 11522 return util_1.dsse.preAuthEncoding(a.type, a.data); 11523 } 11524 // Packages the artifact and signature into a DSSE bundle 11525 async package(artifact, signature) { 11526 return (0, bundle_1.toDSSEBundle)(artifactDefaults(artifact), signature, this.singleCertificate); 11527 } 11528 } 11529 exports.DSSEBundleBuilder = DSSEBundleBuilder; 11530 // Defaults the artifact type to an empty string if not provided 11531 function artifactDefaults(artifact) { 11532 return { 11533 ...artifact, 11534 type: artifact.type ?? '', 11535 }; 11536 } 11537 11538 11539 /***/ }), 11540 11541 /***/ 94929: 11542 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 11543 11544 "use strict"; 11545 11546 Object.defineProperty(exports, "__esModule", ({ value: true })); 11547 exports.MessageSignatureBundleBuilder = exports.DSSEBundleBuilder = void 0; 11548 var dsse_1 = __nccwpck_require__(78791); 11549 Object.defineProperty(exports, "DSSEBundleBuilder", ({ enumerable: true, get: function () { return dsse_1.DSSEBundleBuilder; } })); 11550 var message_1 = __nccwpck_require__(36258); 11551 Object.defineProperty(exports, "MessageSignatureBundleBuilder", ({ enumerable: true, get: function () { return message_1.MessageSignatureBundleBuilder; } })); 11552 11553 11554 /***/ }), 11555 11556 /***/ 36258: 11557 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 11558 11559 "use strict"; 11560 11561 Object.defineProperty(exports, "__esModule", ({ value: true })); 11562 exports.MessageSignatureBundleBuilder = void 0; 11563 /* 11564 Copyright 2023 The Sigstore Authors. 11565 11566 Licensed under the Apache License, Version 2.0 (the "License"); 11567 you may not use this file except in compliance with the License. 11568 You may obtain a copy of the License at 11569 11570 http://www.apache.org/licenses/LICENSE-2.0 11571 11572 Unless required by applicable law or agreed to in writing, software 11573 distributed under the License is distributed on an "AS IS" BASIS, 11574 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11575 See the License for the specific language governing permissions and 11576 limitations under the License. 11577 */ 11578 const base_1 = __nccwpck_require__(30005); 11579 const bundle_1 = __nccwpck_require__(66947); 11580 // BundleBuilder implementation for raw message signatures 11581 class MessageSignatureBundleBuilder extends base_1.BaseBundleBuilder { 11582 constructor(options) { 11583 super(options); 11584 } 11585 async package(artifact, signature) { 11586 return (0, bundle_1.toMessageSignatureBundle)(artifact, signature); 11587 } 11588 } 11589 exports.MessageSignatureBundleBuilder = MessageSignatureBundleBuilder; 11590 11591 11592 /***/ }), 11593 11594 /***/ 30532: 11595 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 11596 11597 "use strict"; 11598 11599 /* 11600 Copyright 2023 The Sigstore Authors. 11601 11602 Licensed under the Apache License, Version 2.0 (the "License"); 11603 you may not use this file except in compliance with the License. 11604 You may obtain a copy of the License at 11605 11606 http://www.apache.org/licenses/LICENSE-2.0 11607 11608 Unless required by applicable law or agreed to in writing, software 11609 distributed under the License is distributed on an "AS IS" BASIS, 11610 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11611 See the License for the specific language governing permissions and 11612 limitations under the License. 11613 */ 11614 Object.defineProperty(exports, "__esModule", ({ value: true })); 11615 exports.internalError = exports.InternalError = void 0; 11616 const error_1 = __nccwpck_require__(11294); 11617 class InternalError extends Error { 11618 constructor({ code, message, cause, }) { 11619 super(message); 11620 this.name = this.constructor.name; 11621 this.cause = cause; 11622 this.code = code; 11623 } 11624 } 11625 exports.InternalError = InternalError; 11626 function internalError(err, code, message) { 11627 if (err instanceof error_1.HTTPError) { 11628 message += ` - ${err.message}`; 11629 } 11630 throw new InternalError({ 11631 code: code, 11632 message: message, 11633 cause: err, 11634 }); 11635 } 11636 exports.internalError = internalError; 11637 11638 11639 /***/ }), 11640 11641 /***/ 11294: 11642 /***/ ((__unused_webpack_module, exports) => { 11643 11644 "use strict"; 11645 11646 /* 11647 Copyright 2023 The Sigstore Authors. 11648 11649 Licensed under the Apache License, Version 2.0 (the "License"); 11650 you may not use this file except in compliance with the License. 11651 You may obtain a copy of the License at 11652 11653 http://www.apache.org/licenses/LICENSE-2.0 11654 11655 Unless required by applicable law or agreed to in writing, software 11656 distributed under the License is distributed on an "AS IS" BASIS, 11657 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11658 See the License for the specific language governing permissions and 11659 limitations under the License. 11660 */ 11661 Object.defineProperty(exports, "__esModule", ({ value: true })); 11662 exports.HTTPError = void 0; 11663 class HTTPError extends Error { 11664 constructor({ status, message, location, }) { 11665 super(`(${status}) ${message}`); 11666 this.statusCode = status; 11667 this.location = location; 11668 } 11669 } 11670 exports.HTTPError = HTTPError; 11671 11672 11673 /***/ }), 11674 11675 /***/ 78509: 11676 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 11677 11678 "use strict"; 11679 11680 var __importDefault = (this && this.__importDefault) || function (mod) { 11681 return (mod && mod.__esModule) ? mod : { "default": mod }; 11682 }; 11683 Object.defineProperty(exports, "__esModule", ({ value: true })); 11684 exports.fetchWithRetry = void 0; 11685 /* 11686 Copyright 2023 The Sigstore Authors. 11687 11688 Licensed under the Apache License, Version 2.0 (the "License"); 11689 you may not use this file except in compliance with the License. 11690 You may obtain a copy of the License at 11691 11692 http://www.apache.org/licenses/LICENSE-2.0 11693 11694 Unless required by applicable law or agreed to in writing, software 11695 distributed under the License is distributed on an "AS IS" BASIS, 11696 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11697 See the License for the specific language governing permissions and 11698 limitations under the License. 11699 */ 11700 const http2_1 = __nccwpck_require__(85158); 11701 const make_fetch_happen_1 = __importDefault(__nccwpck_require__(9525)); 11702 const proc_log_1 = __nccwpck_require__(56528); 11703 const promise_retry_1 = __importDefault(__nccwpck_require__(54742)); 11704 const util_1 = __nccwpck_require__(90724); 11705 const error_1 = __nccwpck_require__(11294); 11706 const { HTTP2_HEADER_LOCATION, HTTP2_HEADER_CONTENT_TYPE, HTTP2_HEADER_USER_AGENT, HTTP_STATUS_INTERNAL_SERVER_ERROR, HTTP_STATUS_TOO_MANY_REQUESTS, HTTP_STATUS_REQUEST_TIMEOUT, } = http2_1.constants; 11707 async function fetchWithRetry(url, options) { 11708 return (0, promise_retry_1.default)(async (retry, attemptNum) => { 11709 const method = options.method || 'POST'; 11710 const headers = { 11711 [HTTP2_HEADER_USER_AGENT]: util_1.ua.getUserAgent(), 11712 ...options.headers, 11713 }; 11714 const response = await (0, make_fetch_happen_1.default)(url, { 11715 method, 11716 headers, 11717 body: options.body, 11718 timeout: options.timeout, 11719 retry: false, // We're handling retries ourselves 11720 }).catch((reason) => { 11721 proc_log_1.log.http('fetch', `${method} ${url} attempt ${attemptNum} failed with ${reason}`); 11722 return retry(reason); 11723 }); 11724 if (response.ok) { 11725 return response; 11726 } 11727 else { 11728 const error = await errorFromResponse(response); 11729 proc_log_1.log.http('fetch', `${method} ${url} attempt ${attemptNum} failed with ${response.status}`); 11730 if (retryable(response.status)) { 11731 return retry(error); 11732 } 11733 else { 11734 throw error; 11735 } 11736 } 11737 }, retryOpts(options.retry)); 11738 } 11739 exports.fetchWithRetry = fetchWithRetry; 11740 // Translate a Response into an HTTPError instance. This will attempt to parse 11741 // the response body for a message, but will default to the statusText if none 11742 // is found. 11743 const errorFromResponse = async (response) => { 11744 let message = response.statusText; 11745 const location = response.headers?.get(HTTP2_HEADER_LOCATION) || undefined; 11746 const contentType = response.headers?.get(HTTP2_HEADER_CONTENT_TYPE); 11747 // If response type is JSON, try to parse the body for a message 11748 if (contentType?.includes('application/json')) { 11749 try { 11750 const body = await response.json(); 11751 message = body.message || message; 11752 } 11753 catch (e) { 11754 // ignore 11755 } 11756 } 11757 return new error_1.HTTPError({ 11758 status: response.status, 11759 message: message, 11760 location: location, 11761 }); 11762 }; 11763 // Determine if a status code is retryable. This includes 5xx errors, 408, and 11764 // 429. 11765 const retryable = (status) => [HTTP_STATUS_REQUEST_TIMEOUT, HTTP_STATUS_TOO_MANY_REQUESTS].includes(status) || status >= HTTP_STATUS_INTERNAL_SERVER_ERROR; 11766 // Normalize the retry options to the format expected by promise-retry 11767 const retryOpts = (retry) => { 11768 if (typeof retry === 'boolean') { 11769 return { retries: retry ? 1 : 0 }; 11770 } 11771 else if (typeof retry === 'number') { 11772 return { retries: retry }; 11773 } 11774 else { 11775 return { retries: 0, ...retry }; 11776 } 11777 }; 11778 11779 11780 /***/ }), 11781 11782 /***/ 62960: 11783 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 11784 11785 "use strict"; 11786 11787 Object.defineProperty(exports, "__esModule", ({ value: true })); 11788 exports.Fulcio = void 0; 11789 /* 11790 Copyright 2023 The Sigstore Authors. 11791 11792 Licensed under the Apache License, Version 2.0 (the "License"); 11793 you may not use this file except in compliance with the License. 11794 You may obtain a copy of the License at 11795 11796 http://www.apache.org/licenses/LICENSE-2.0 11797 11798 Unless required by applicable law or agreed to in writing, software 11799 distributed under the License is distributed on an "AS IS" BASIS, 11800 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11801 See the License for the specific language governing permissions and 11802 limitations under the License. 11803 */ 11804 const fetch_1 = __nccwpck_require__(78509); 11805 /** 11806 * Fulcio API client. 11807 */ 11808 class Fulcio { 11809 constructor(options) { 11810 this.options = options; 11811 } 11812 async createSigningCertificate(request) { 11813 const { baseURL, retry, timeout } = this.options; 11814 const url = `${baseURL}/api/v2/signingCert`; 11815 const response = await (0, fetch_1.fetchWithRetry)(url, { 11816 headers: { 11817 'Content-Type': 'application/json', 11818 }, 11819 body: JSON.stringify(request), 11820 timeout, 11821 retry, 11822 }); 11823 return response.json(); 11824 } 11825 } 11826 exports.Fulcio = Fulcio; 11827 11828 11829 /***/ }), 11830 11831 /***/ 56205: 11832 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 11833 11834 "use strict"; 11835 11836 Object.defineProperty(exports, "__esModule", ({ value: true })); 11837 exports.Rekor = void 0; 11838 /* 11839 Copyright 2023 The Sigstore Authors. 11840 11841 Licensed under the Apache License, Version 2.0 (the "License"); 11842 you may not use this file except in compliance with the License. 11843 You may obtain a copy of the License at 11844 11845 http://www.apache.org/licenses/LICENSE-2.0 11846 11847 Unless required by applicable law or agreed to in writing, software 11848 distributed under the License is distributed on an "AS IS" BASIS, 11849 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11850 See the License for the specific language governing permissions and 11851 limitations under the License. 11852 */ 11853 const fetch_1 = __nccwpck_require__(78509); 11854 /** 11855 * Rekor API client. 11856 */ 11857 class Rekor { 11858 constructor(options) { 11859 this.options = options; 11860 } 11861 /** 11862 * Create a new entry in the Rekor log. 11863 * @param propsedEntry {ProposedEntry} Data to create a new entry 11864 * @returns {Promise<Entry>} The created entry 11865 */ 11866 async createEntry(propsedEntry) { 11867 const { baseURL, timeout, retry } = this.options; 11868 const url = `${baseURL}/api/v1/log/entries`; 11869 const response = await (0, fetch_1.fetchWithRetry)(url, { 11870 headers: { 11871 'Content-Type': 'application/json', 11872 Accept: 'application/json', 11873 }, 11874 body: JSON.stringify(propsedEntry), 11875 timeout, 11876 retry, 11877 }); 11878 const data = await response.json(); 11879 return entryFromResponse(data); 11880 } 11881 /** 11882 * Get an entry from the Rekor log. 11883 * @param uuid {string} The UUID of the entry to retrieve 11884 * @returns {Promise<Entry>} The retrieved entry 11885 */ 11886 async getEntry(uuid) { 11887 const { baseURL, timeout, retry } = this.options; 11888 const url = `${baseURL}/api/v1/log/entries/${uuid}`; 11889 const response = await (0, fetch_1.fetchWithRetry)(url, { 11890 method: 'GET', 11891 headers: { 11892 Accept: 'application/json', 11893 }, 11894 timeout, 11895 retry, 11896 }); 11897 const data = await response.json(); 11898 return entryFromResponse(data); 11899 } 11900 } 11901 exports.Rekor = Rekor; 11902 // Unpack the response from the Rekor API into a more convenient format. 11903 function entryFromResponse(data) { 11904 const entries = Object.entries(data); 11905 if (entries.length != 1) { 11906 throw new Error('Received multiple entries in Rekor response'); 11907 } 11908 // Grab UUID and entry data from the response 11909 const [uuid, entry] = entries[0]; 11910 return { 11911 ...entry, 11912 uuid, 11913 }; 11914 } 11915 11916 11917 /***/ }), 11918 11919 /***/ 82759: 11920 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 11921 11922 "use strict"; 11923 11924 Object.defineProperty(exports, "__esModule", ({ value: true })); 11925 exports.TimestampAuthority = void 0; 11926 /* 11927 Copyright 2023 The Sigstore Authors. 11928 11929 Licensed under the Apache License, Version 2.0 (the "License"); 11930 you may not use this file except in compliance with the License. 11931 You may obtain a copy of the License at 11932 11933 http://www.apache.org/licenses/LICENSE-2.0 11934 11935 Unless required by applicable law or agreed to in writing, software 11936 distributed under the License is distributed on an "AS IS" BASIS, 11937 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11938 See the License for the specific language governing permissions and 11939 limitations under the License. 11940 */ 11941 const fetch_1 = __nccwpck_require__(78509); 11942 class TimestampAuthority { 11943 constructor(options) { 11944 this.options = options; 11945 } 11946 async createTimestamp(request) { 11947 const { baseURL, timeout, retry } = this.options; 11948 const url = `${baseURL}/api/v1/timestamp`; 11949 const response = await (0, fetch_1.fetchWithRetry)(url, { 11950 headers: { 11951 'Content-Type': 'application/json', 11952 }, 11953 body: JSON.stringify(request), 11954 timeout, 11955 retry, 11956 }); 11957 return response.buffer(); 11958 } 11959 } 11960 exports.TimestampAuthority = TimestampAuthority; 11961 11962 11963 /***/ }), 11964 11965 /***/ 13110: 11966 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 11967 11968 "use strict"; 11969 11970 var __importDefault = (this && this.__importDefault) || function (mod) { 11971 return (mod && mod.__esModule) ? mod : { "default": mod }; 11972 }; 11973 Object.defineProperty(exports, "__esModule", ({ value: true })); 11974 exports.CIContextProvider = void 0; 11975 /* 11976 Copyright 2023 The Sigstore Authors. 11977 11978 Licensed under the Apache License, Version 2.0 (the "License"); 11979 you may not use this file except in compliance with the License. 11980 You may obtain a copy of the License at 11981 11982 http://www.apache.org/licenses/LICENSE-2.0 11983 11984 Unless required by applicable law or agreed to in writing, software 11985 distributed under the License is distributed on an "AS IS" BASIS, 11986 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11987 See the License for the specific language governing permissions and 11988 limitations under the License. 11989 */ 11990 const make_fetch_happen_1 = __importDefault(__nccwpck_require__(9525)); 11991 // Collection of all the CI-specific providers we have implemented 11992 const providers = [getGHAToken, getEnv]; 11993 /** 11994 * CIContextProvider is a composite identity provider which will iterate 11995 * over all of the CI-specific providers and return the token from the first 11996 * one that resolves. 11997 */ 11998 class CIContextProvider { 11999 /* istanbul ignore next */ 12000 constructor(audience = 'sigstore') { 12001 this.audience = audience; 12002 } 12003 // Invoke all registered ProviderFuncs and return the value of whichever one 12004 // resolves first. 12005 async getToken() { 12006 return Promise.any(providers.map((getToken) => getToken(this.audience))).catch(() => Promise.reject('CI: no tokens available')); 12007 } 12008 } 12009 exports.CIContextProvider = CIContextProvider; 12010 /** 12011 * getGHAToken can retrieve an OIDC token when running in a GitHub Actions 12012 * workflow 12013 */ 12014 async function getGHAToken(audience) { 12015 // Check to see if we're running in GitHub Actions 12016 if (!process.env.ACTIONS_ID_TOKEN_REQUEST_URL || 12017 !process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN) { 12018 return Promise.reject('no token available'); 12019 } 12020 // Construct URL to request token w/ appropriate audience 12021 const url = new URL(process.env.ACTIONS_ID_TOKEN_REQUEST_URL); 12022 url.searchParams.append('audience', audience); 12023 const response = await (0, make_fetch_happen_1.default)(url.href, { 12024 retry: 2, 12025 headers: { 12026 Accept: 'application/json', 12027 Authorization: `Bearer ${process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN}`, 12028 }, 12029 }); 12030 return response.json().then((data) => data.value); 12031 } 12032 /** 12033 * getEnv can retrieve an OIDC token from an environment variable. 12034 * This matches the behavior of https://github.com/sigstore/cosign/tree/main/pkg/providers/envvar 12035 */ 12036 async function getEnv() { 12037 if (!process.env.SIGSTORE_ID_TOKEN) { 12038 return Promise.reject('no token available'); 12039 } 12040 return process.env.SIGSTORE_ID_TOKEN; 12041 } 12042 12043 12044 /***/ }), 12045 12046 /***/ 44463: 12047 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 12048 12049 "use strict"; 12050 12051 Object.defineProperty(exports, "__esModule", ({ value: true })); 12052 exports.CIContextProvider = void 0; 12053 /* 12054 Copyright 2023 The Sigstore Authors. 12055 12056 Licensed under the Apache License, Version 2.0 (the "License"); 12057 you may not use this file except in compliance with the License. 12058 You may obtain a copy of the License at 12059 12060 http://www.apache.org/licenses/LICENSE-2.0 12061 12062 Unless required by applicable law or agreed to in writing, software 12063 distributed under the License is distributed on an "AS IS" BASIS, 12064 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12065 See the License for the specific language governing permissions and 12066 limitations under the License. 12067 */ 12068 var ci_1 = __nccwpck_require__(13110); 12069 Object.defineProperty(exports, "CIContextProvider", ({ enumerable: true, get: function () { return ci_1.CIContextProvider; } })); 12070 12071 12072 /***/ }), 12073 12074 /***/ 42071: 12075 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 12076 12077 "use strict"; 12078 12079 Object.defineProperty(exports, "__esModule", ({ value: true })); 12080 exports.TSAWitness = exports.RekorWitness = exports.DEFAULT_REKOR_URL = exports.FulcioSigner = exports.DEFAULT_FULCIO_URL = exports.CIContextProvider = exports.InternalError = exports.MessageSignatureBundleBuilder = exports.DSSEBundleBuilder = void 0; 12081 var bundler_1 = __nccwpck_require__(94929); 12082 Object.defineProperty(exports, "DSSEBundleBuilder", ({ enumerable: true, get: function () { return bundler_1.DSSEBundleBuilder; } })); 12083 Object.defineProperty(exports, "MessageSignatureBundleBuilder", ({ enumerable: true, get: function () { return bundler_1.MessageSignatureBundleBuilder; } })); 12084 var error_1 = __nccwpck_require__(30532); 12085 Object.defineProperty(exports, "InternalError", ({ enumerable: true, get: function () { return error_1.InternalError; } })); 12086 var identity_1 = __nccwpck_require__(44463); 12087 Object.defineProperty(exports, "CIContextProvider", ({ enumerable: true, get: function () { return identity_1.CIContextProvider; } })); 12088 var signer_1 = __nccwpck_require__(17551); 12089 Object.defineProperty(exports, "DEFAULT_FULCIO_URL", ({ enumerable: true, get: function () { return signer_1.DEFAULT_FULCIO_URL; } })); 12090 Object.defineProperty(exports, "FulcioSigner", ({ enumerable: true, get: function () { return signer_1.FulcioSigner; } })); 12091 var witness_1 = __nccwpck_require__(42170); 12092 Object.defineProperty(exports, "DEFAULT_REKOR_URL", ({ enumerable: true, get: function () { return witness_1.DEFAULT_REKOR_URL; } })); 12093 Object.defineProperty(exports, "RekorWitness", ({ enumerable: true, get: function () { return witness_1.RekorWitness; } })); 12094 Object.defineProperty(exports, "TSAWitness", ({ enumerable: true, get: function () { return witness_1.TSAWitness; } })); 12095 12096 12097 /***/ }), 12098 12099 /***/ 90334: 12100 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 12101 12102 "use strict"; 12103 12104 Object.defineProperty(exports, "__esModule", ({ value: true })); 12105 exports.CAClient = void 0; 12106 /* 12107 Copyright 2023 The Sigstore Authors. 12108 12109 Licensed under the Apache License, Version 2.0 (the "License"); 12110 you may not use this file except in compliance with the License. 12111 You may obtain a copy of the License at 12112 12113 http://www.apache.org/licenses/LICENSE-2.0 12114 12115 Unless required by applicable law or agreed to in writing, software 12116 distributed under the License is distributed on an "AS IS" BASIS, 12117 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12118 See the License for the specific language governing permissions and 12119 limitations under the License. 12120 */ 12121 const error_1 = __nccwpck_require__(30532); 12122 const fulcio_1 = __nccwpck_require__(62960); 12123 class CAClient { 12124 constructor(options) { 12125 this.fulcio = new fulcio_1.Fulcio({ 12126 baseURL: options.fulcioBaseURL, 12127 retry: options.retry, 12128 timeout: options.timeout, 12129 }); 12130 } 12131 async createSigningCertificate(identityToken, publicKey, challenge) { 12132 const request = toCertificateRequest(identityToken, publicKey, challenge); 12133 try { 12134 const resp = await this.fulcio.createSigningCertificate(request); 12135 // Account for the fact that the response may contain either a 12136 // signedCertificateEmbeddedSct or a signedCertificateDetachedSct. 12137 const cert = resp.signedCertificateEmbeddedSct 12138 ? resp.signedCertificateEmbeddedSct 12139 : resp.signedCertificateDetachedSct; 12140 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion 12141 return cert.chain.certificates; 12142 } 12143 catch (err) { 12144 (0, error_1.internalError)(err, 'CA_CREATE_SIGNING_CERTIFICATE_ERROR', 'error creating signing certificate'); 12145 } 12146 } 12147 } 12148 exports.CAClient = CAClient; 12149 function toCertificateRequest(identityToken, publicKey, challenge) { 12150 return { 12151 credentials: { 12152 oidcIdentityToken: identityToken, 12153 }, 12154 publicKeyRequest: { 12155 publicKey: { 12156 algorithm: 'ECDSA', 12157 content: publicKey, 12158 }, 12159 proofOfPossession: challenge.toString('base64'), 12160 }, 12161 }; 12162 } 12163 12164 12165 /***/ }), 12166 12167 /***/ 98489: 12168 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 12169 12170 "use strict"; 12171 12172 var __importDefault = (this && this.__importDefault) || function (mod) { 12173 return (mod && mod.__esModule) ? mod : { "default": mod }; 12174 }; 12175 Object.defineProperty(exports, "__esModule", ({ value: true })); 12176 exports.EphemeralSigner = void 0; 12177 /* 12178 Copyright 2023 The Sigstore Authors. 12179 12180 Licensed under the Apache License, Version 2.0 (the "License"); 12181 you may not use this file except in compliance with the License. 12182 You may obtain a copy of the License at 12183 12184 http://www.apache.org/licenses/LICENSE-2.0 12185 12186 Unless required by applicable law or agreed to in writing, software 12187 distributed under the License is distributed on an "AS IS" BASIS, 12188 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12189 See the License for the specific language governing permissions and 12190 limitations under the License. 12191 */ 12192 const crypto_1 = __importDefault(__nccwpck_require__(6113)); 12193 const EC_KEYPAIR_TYPE = 'ec'; 12194 const P256_CURVE = 'P-256'; 12195 // Signer implementation which uses an ephemeral keypair to sign artifacts. 12196 // The private key lives only in memory and is tied to the lifetime of the 12197 // EphemeralSigner instance. 12198 class EphemeralSigner { 12199 constructor() { 12200 this.keypair = crypto_1.default.generateKeyPairSync(EC_KEYPAIR_TYPE, { 12201 namedCurve: P256_CURVE, 12202 }); 12203 } 12204 async sign(data) { 12205 const signature = crypto_1.default.sign(null, data, this.keypair.privateKey); 12206 const publicKey = this.keypair.publicKey 12207 .export({ format: 'pem', type: 'spki' }) 12208 .toString('ascii'); 12209 return { 12210 signature: signature, 12211 key: { $case: 'publicKey', publicKey }, 12212 }; 12213 } 12214 } 12215 exports.EphemeralSigner = EphemeralSigner; 12216 12217 12218 /***/ }), 12219 12220 /***/ 57328: 12221 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 12222 12223 "use strict"; 12224 12225 Object.defineProperty(exports, "__esModule", ({ value: true })); 12226 exports.FulcioSigner = exports.DEFAULT_FULCIO_URL = void 0; 12227 /* 12228 Copyright 2023 The Sigstore Authors. 12229 12230 Licensed under the Apache License, Version 2.0 (the "License"); 12231 you may not use this file except in compliance with the License. 12232 You may obtain a copy of the License at 12233 12234 http://www.apache.org/licenses/LICENSE-2.0 12235 12236 Unless required by applicable law or agreed to in writing, software 12237 distributed under the License is distributed on an "AS IS" BASIS, 12238 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12239 See the License for the specific language governing permissions and 12240 limitations under the License. 12241 */ 12242 const error_1 = __nccwpck_require__(30532); 12243 const util_1 = __nccwpck_require__(90724); 12244 const ca_1 = __nccwpck_require__(90334); 12245 const ephemeral_1 = __nccwpck_require__(98489); 12246 exports.DEFAULT_FULCIO_URL = 'https://fulcio.sigstore.dev'; 12247 // Signer implementation which can be used to decorate another signer 12248 // with a Fulcio-issued signing certificate for the signer's public key. 12249 // Must be instantiated with an identity provider which can provide a JWT 12250 // which represents the identity to be bound to the signing certificate. 12251 class FulcioSigner { 12252 constructor(options) { 12253 this.ca = new ca_1.CAClient({ 12254 ...options, 12255 fulcioBaseURL: options.fulcioBaseURL || /* istanbul ignore next */ exports.DEFAULT_FULCIO_URL, 12256 }); 12257 this.identityProvider = options.identityProvider; 12258 this.keyHolder = options.keyHolder || new ephemeral_1.EphemeralSigner(); 12259 } 12260 async sign(data) { 12261 // Retrieve identity token from the supplied identity provider 12262 const identityToken = await this.getIdentityToken(); 12263 // Extract challenge claim from OIDC token 12264 let subject; 12265 try { 12266 subject = util_1.oidc.extractJWTSubject(identityToken); 12267 } 12268 catch (err) { 12269 throw new error_1.InternalError({ 12270 code: 'IDENTITY_TOKEN_PARSE_ERROR', 12271 message: `invalid identity token: ${identityToken}`, 12272 cause: err, 12273 }); 12274 } 12275 // Construct challenge value by signing the subject claim 12276 const challenge = await this.keyHolder.sign(Buffer.from(subject)); 12277 if (challenge.key.$case !== 'publicKey') { 12278 throw new error_1.InternalError({ 12279 code: 'CA_CREATE_SIGNING_CERTIFICATE_ERROR', 12280 message: 'unexpected format for signing key', 12281 }); 12282 } 12283 // Create signing certificate 12284 const certificates = await this.ca.createSigningCertificate(identityToken, challenge.key.publicKey, challenge.signature); 12285 // Generate artifact signature 12286 const signature = await this.keyHolder.sign(data); 12287 // Specifically returning only the first certificate in the chain 12288 // as the key. 12289 return { 12290 signature: signature.signature, 12291 key: { 12292 $case: 'x509Certificate', 12293 certificate: certificates[0], 12294 }, 12295 }; 12296 } 12297 async getIdentityToken() { 12298 try { 12299 return await this.identityProvider.getToken(); 12300 } 12301 catch (err) { 12302 throw new error_1.InternalError({ 12303 code: 'IDENTITY_TOKEN_READ_ERROR', 12304 message: 'error retrieving identity token', 12305 cause: err, 12306 }); 12307 } 12308 } 12309 } 12310 exports.FulcioSigner = FulcioSigner; 12311 12312 12313 /***/ }), 12314 12315 /***/ 17551: 12316 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 12317 12318 "use strict"; 12319 12320 /* istanbul ignore file */ 12321 Object.defineProperty(exports, "__esModule", ({ value: true })); 12322 exports.FulcioSigner = exports.DEFAULT_FULCIO_URL = void 0; 12323 /* 12324 Copyright 2023 The Sigstore Authors. 12325 12326 Licensed under the Apache License, Version 2.0 (the "License"); 12327 you may not use this file except in compliance with the License. 12328 You may obtain a copy of the License at 12329 12330 http://www.apache.org/licenses/LICENSE-2.0 12331 12332 Unless required by applicable law or agreed to in writing, software 12333 distributed under the License is distributed on an "AS IS" BASIS, 12334 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12335 See the License for the specific language governing permissions and 12336 limitations under the License. 12337 */ 12338 var fulcio_1 = __nccwpck_require__(57328); 12339 Object.defineProperty(exports, "DEFAULT_FULCIO_URL", ({ enumerable: true, get: function () { return fulcio_1.DEFAULT_FULCIO_URL; } })); 12340 Object.defineProperty(exports, "FulcioSigner", ({ enumerable: true, get: function () { return fulcio_1.FulcioSigner; } })); 12341 12342 12343 /***/ }), 12344 12345 /***/ 90724: 12346 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 12347 12348 "use strict"; 12349 12350 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 12351 if (k2 === undefined) k2 = k; 12352 var desc = Object.getOwnPropertyDescriptor(m, k); 12353 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 12354 desc = { enumerable: true, get: function() { return m[k]; } }; 12355 } 12356 Object.defineProperty(o, k2, desc); 12357 }) : (function(o, m, k, k2) { 12358 if (k2 === undefined) k2 = k; 12359 o[k2] = m[k]; 12360 })); 12361 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 12362 Object.defineProperty(o, "default", { enumerable: true, value: v }); 12363 }) : function(o, v) { 12364 o["default"] = v; 12365 }); 12366 var __importStar = (this && this.__importStar) || function (mod) { 12367 if (mod && mod.__esModule) return mod; 12368 var result = {}; 12369 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 12370 __setModuleDefault(result, mod); 12371 return result; 12372 }; 12373 Object.defineProperty(exports, "__esModule", ({ value: true })); 12374 exports.ua = exports.oidc = exports.pem = exports.json = exports.encoding = exports.dsse = exports.crypto = void 0; 12375 /* 12376 Copyright 2023 The Sigstore Authors. 12377 12378 Licensed under the Apache License, Version 2.0 (the "License"); 12379 you may not use this file except in compliance with the License. 12380 You may obtain a copy of the License at 12381 12382 http://www.apache.org/licenses/LICENSE-2.0 12383 12384 Unless required by applicable law or agreed to in writing, software 12385 distributed under the License is distributed on an "AS IS" BASIS, 12386 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12387 See the License for the specific language governing permissions and 12388 limitations under the License. 12389 */ 12390 var core_1 = __nccwpck_require__(3352); 12391 Object.defineProperty(exports, "crypto", ({ enumerable: true, get: function () { return core_1.crypto; } })); 12392 Object.defineProperty(exports, "dsse", ({ enumerable: true, get: function () { return core_1.dsse; } })); 12393 Object.defineProperty(exports, "encoding", ({ enumerable: true, get: function () { return core_1.encoding; } })); 12394 Object.defineProperty(exports, "json", ({ enumerable: true, get: function () { return core_1.json; } })); 12395 Object.defineProperty(exports, "pem", ({ enumerable: true, get: function () { return core_1.pem; } })); 12396 exports.oidc = __importStar(__nccwpck_require__(33397)); 12397 exports.ua = __importStar(__nccwpck_require__(46253)); 12398 12399 12400 /***/ }), 12401 12402 /***/ 33397: 12403 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 12404 12405 "use strict"; 12406 12407 Object.defineProperty(exports, "__esModule", ({ value: true })); 12408 exports.extractJWTSubject = void 0; 12409 /* 12410 Copyright 2023 The Sigstore Authors. 12411 12412 Licensed under the Apache License, Version 2.0 (the "License"); 12413 you may not use this file except in compliance with the License. 12414 You may obtain a copy of the License at 12415 12416 http://www.apache.org/licenses/LICENSE-2.0 12417 12418 Unless required by applicable law or agreed to in writing, software 12419 distributed under the License is distributed on an "AS IS" BASIS, 12420 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12421 See the License for the specific language governing permissions and 12422 limitations under the License. 12423 */ 12424 const core_1 = __nccwpck_require__(3352); 12425 function extractJWTSubject(jwt) { 12426 const parts = jwt.split('.', 3); 12427 const payload = JSON.parse(core_1.encoding.base64Decode(parts[1])); 12428 switch (payload.iss) { 12429 case 'https://accounts.google.com': 12430 case 'https://oauth2.sigstore.dev/auth': 12431 return payload.email; 12432 default: 12433 return payload.sub; 12434 } 12435 } 12436 exports.extractJWTSubject = extractJWTSubject; 12437 12438 12439 /***/ }), 12440 12441 /***/ 46253: 12442 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 12443 12444 "use strict"; 12445 12446 var __importDefault = (this && this.__importDefault) || function (mod) { 12447 return (mod && mod.__esModule) ? mod : { "default": mod }; 12448 }; 12449 Object.defineProperty(exports, "__esModule", ({ value: true })); 12450 exports.getUserAgent = void 0; 12451 /* 12452 Copyright 2023 The Sigstore Authors. 12453 12454 Licensed under the Apache License, Version 2.0 (the "License"); 12455 you may not use this file except in compliance with the License. 12456 You may obtain a copy of the License at 12457 12458 http://www.apache.org/licenses/LICENSE-2.0 12459 12460 Unless required by applicable law or agreed to in writing, software 12461 distributed under the License is distributed on an "AS IS" BASIS, 12462 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12463 See the License for the specific language governing permissions and 12464 limitations under the License. 12465 */ 12466 const os_1 = __importDefault(__nccwpck_require__(22037)); 12467 // Format User-Agent: <product> / <product-version> (<platform>) 12468 // source: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent 12469 const getUserAgent = () => { 12470 // eslint-disable-next-line @typescript-eslint/no-var-requires 12471 const packageVersion = (__nccwpck_require__(78992)/* .version */ .i8); 12472 const nodeVersion = process.version; 12473 const platformName = os_1.default.platform(); 12474 const archName = os_1.default.arch(); 12475 return `sigstore-js/${packageVersion} (Node ${nodeVersion}) (${platformName}/${archName})`; 12476 }; 12477 exports.getUserAgent = getUserAgent; 12478 12479 12480 /***/ }), 12481 12482 /***/ 42170: 12483 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 12484 12485 "use strict"; 12486 12487 /* istanbul ignore file */ 12488 Object.defineProperty(exports, "__esModule", ({ value: true })); 12489 exports.TSAWitness = exports.RekorWitness = exports.DEFAULT_REKOR_URL = void 0; 12490 /* 12491 Copyright 2023 The Sigstore Authors. 12492 12493 Licensed under the Apache License, Version 2.0 (the "License"); 12494 you may not use this file except in compliance with the License. 12495 You may obtain a copy of the License at 12496 12497 http://www.apache.org/licenses/LICENSE-2.0 12498 12499 Unless required by applicable law or agreed to in writing, software 12500 distributed under the License is distributed on an "AS IS" BASIS, 12501 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12502 See the License for the specific language governing permissions and 12503 limitations under the License. 12504 */ 12505 var tlog_1 = __nccwpck_require__(57843); 12506 Object.defineProperty(exports, "DEFAULT_REKOR_URL", ({ enumerable: true, get: function () { return tlog_1.DEFAULT_REKOR_URL; } })); 12507 Object.defineProperty(exports, "RekorWitness", ({ enumerable: true, get: function () { return tlog_1.RekorWitness; } })); 12508 var tsa_1 = __nccwpck_require__(80049); 12509 Object.defineProperty(exports, "TSAWitness", ({ enumerable: true, get: function () { return tsa_1.TSAWitness; } })); 12510 12511 12512 /***/ }), 12513 12514 /***/ 76737: 12515 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 12516 12517 "use strict"; 12518 12519 Object.defineProperty(exports, "__esModule", ({ value: true })); 12520 exports.TLogClient = void 0; 12521 /* 12522 Copyright 2023 The Sigstore Authors. 12523 12524 Licensed under the Apache License, Version 2.0 (the "License"); 12525 you may not use this file except in compliance with the License. 12526 You may obtain a copy of the License at 12527 12528 http://www.apache.org/licenses/LICENSE-2.0 12529 12530 Unless required by applicable law or agreed to in writing, software 12531 distributed under the License is distributed on an "AS IS" BASIS, 12532 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12533 See the License for the specific language governing permissions and 12534 limitations under the License. 12535 */ 12536 const error_1 = __nccwpck_require__(30532); 12537 const error_2 = __nccwpck_require__(11294); 12538 const rekor_1 = __nccwpck_require__(56205); 12539 class TLogClient { 12540 constructor(options) { 12541 this.fetchOnConflict = options.fetchOnConflict ?? false; 12542 this.rekor = new rekor_1.Rekor({ 12543 baseURL: options.rekorBaseURL, 12544 retry: options.retry, 12545 timeout: options.timeout, 12546 }); 12547 } 12548 async createEntry(proposedEntry) { 12549 let entry; 12550 try { 12551 entry = await this.rekor.createEntry(proposedEntry); 12552 } 12553 catch (err) { 12554 // If the entry already exists, fetch it (if enabled) 12555 if (entryExistsError(err) && this.fetchOnConflict) { 12556 // Grab the UUID of the existing entry from the location header 12557 /* istanbul ignore next */ 12558 const uuid = err.location.split('/').pop() || ''; 12559 try { 12560 entry = await this.rekor.getEntry(uuid); 12561 } 12562 catch (err) { 12563 (0, error_1.internalError)(err, 'TLOG_FETCH_ENTRY_ERROR', 'error fetching tlog entry'); 12564 } 12565 } 12566 else { 12567 (0, error_1.internalError)(err, 'TLOG_CREATE_ENTRY_ERROR', 'error creating tlog entry'); 12568 } 12569 } 12570 return entry; 12571 } 12572 } 12573 exports.TLogClient = TLogClient; 12574 function entryExistsError(value) { 12575 return (value instanceof error_2.HTTPError && 12576 value.statusCode === 409 && 12577 value.location !== undefined); 12578 } 12579 12580 12581 /***/ }), 12582 12583 /***/ 23776: 12584 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 12585 12586 "use strict"; 12587 12588 Object.defineProperty(exports, "__esModule", ({ value: true })); 12589 exports.toProposedEntry = void 0; 12590 /* 12591 Copyright 2023 The Sigstore Authors. 12592 12593 Licensed under the Apache License, Version 2.0 (the "License"); 12594 you may not use this file except in compliance with the License. 12595 You may obtain a copy of the License at 12596 12597 http://www.apache.org/licenses/LICENSE-2.0 12598 12599 Unless required by applicable law or agreed to in writing, software 12600 distributed under the License is distributed on an "AS IS" BASIS, 12601 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12602 See the License for the specific language governing permissions and 12603 limitations under the License. 12604 */ 12605 const bundle_1 = __nccwpck_require__(29715); 12606 const util_1 = __nccwpck_require__(90724); 12607 function toProposedEntry(content, publicKey, 12608 // TODO: Remove this parameter once have completely switched to 'dsse' entries 12609 entryType = 'intoto') { 12610 switch (content.$case) { 12611 case 'dsseEnvelope': 12612 // TODO: Remove this conditional once have completely switched to 'dsse' entries 12613 if (entryType === 'dsse') { 12614 return toProposedDSSEEntry(content.dsseEnvelope, publicKey); 12615 } 12616 return toProposedIntotoEntry(content.dsseEnvelope, publicKey); 12617 case 'messageSignature': 12618 return toProposedHashedRekordEntry(content.messageSignature, publicKey); 12619 } 12620 } 12621 exports.toProposedEntry = toProposedEntry; 12622 // Returns a properly formatted Rekor "hashedrekord" entry for the given digest 12623 // and signature 12624 function toProposedHashedRekordEntry(messageSignature, publicKey) { 12625 const hexDigest = messageSignature.messageDigest.digest.toString('hex'); 12626 const b64Signature = messageSignature.signature.toString('base64'); 12627 const b64Key = util_1.encoding.base64Encode(publicKey); 12628 return { 12629 apiVersion: '0.0.1', 12630 kind: 'hashedrekord', 12631 spec: { 12632 data: { 12633 hash: { 12634 algorithm: 'sha256', 12635 value: hexDigest, 12636 }, 12637 }, 12638 signature: { 12639 content: b64Signature, 12640 publicKey: { 12641 content: b64Key, 12642 }, 12643 }, 12644 }, 12645 }; 12646 } 12647 // Returns a properly formatted Rekor "dsse" entry for the given DSSE envelope 12648 // and signature 12649 function toProposedDSSEEntry(envelope, publicKey) { 12650 const envelopeJSON = JSON.stringify((0, bundle_1.envelopeToJSON)(envelope)); 12651 const encodedKey = util_1.encoding.base64Encode(publicKey); 12652 return { 12653 apiVersion: '0.0.1', 12654 kind: 'dsse', 12655 spec: { 12656 proposedContent: { 12657 envelope: envelopeJSON, 12658 verifiers: [encodedKey], 12659 }, 12660 }, 12661 }; 12662 } 12663 // Returns a properly formatted Rekor "intoto" entry for the given DSSE 12664 // envelope and signature 12665 function toProposedIntotoEntry(envelope, publicKey) { 12666 // Calculate the value for the payloadHash field in the Rekor entry 12667 const payloadHash = util_1.crypto.hash(envelope.payload).toString('hex'); 12668 // Calculate the value for the hash field in the Rekor entry 12669 const envelopeHash = calculateDSSEHash(envelope, publicKey); 12670 // Collect values for re-creating the DSSE envelope. 12671 // Double-encode payload and signature cause that's what Rekor expects 12672 const payload = util_1.encoding.base64Encode(envelope.payload.toString('base64')); 12673 const sig = util_1.encoding.base64Encode(envelope.signatures[0].sig.toString('base64')); 12674 const keyid = envelope.signatures[0].keyid; 12675 const encodedKey = util_1.encoding.base64Encode(publicKey); 12676 // Create the envelope portion of the entry. Note the inclusion of the 12677 // publicKey in the signature struct is not a standard part of a DSSE 12678 // envelope, but is required by Rekor. 12679 const dsse = { 12680 payloadType: envelope.payloadType, 12681 payload: payload, 12682 signatures: [{ sig, publicKey: encodedKey }], 12683 }; 12684 // If the keyid is an empty string, Rekor seems to remove it altogether. We 12685 // need to do the same here so that we can properly recreate the entry for 12686 // verification. 12687 if (keyid.length > 0) { 12688 dsse.signatures[0].keyid = keyid; 12689 } 12690 return { 12691 apiVersion: '0.0.2', 12692 kind: 'intoto', 12693 spec: { 12694 content: { 12695 envelope: dsse, 12696 hash: { algorithm: 'sha256', value: envelopeHash }, 12697 payloadHash: { algorithm: 'sha256', value: payloadHash }, 12698 }, 12699 }, 12700 }; 12701 } 12702 // Calculates the hash of a DSSE envelope for inclusion in a Rekor entry. 12703 // There is no standard way to do this, so the scheme we're using as as 12704 // follows: 12705 // * payload is base64 encoded 12706 // * signature is base64 encoded (only the first signature is used) 12707 // * keyid is included ONLY if it is NOT an empty string 12708 // * The resulting JSON is canonicalized and hashed to a hex string 12709 function calculateDSSEHash(envelope, publicKey) { 12710 const dsse = { 12711 payloadType: envelope.payloadType, 12712 payload: envelope.payload.toString('base64'), 12713 signatures: [ 12714 { sig: envelope.signatures[0].sig.toString('base64'), publicKey }, 12715 ], 12716 }; 12717 // If the keyid is an empty string, Rekor seems to remove it altogether. 12718 if (envelope.signatures[0].keyid.length > 0) { 12719 dsse.signatures[0].keyid = envelope.signatures[0].keyid; 12720 } 12721 return util_1.crypto.hash(util_1.json.canonicalize(dsse)).toString('hex'); 12722 } 12723 12724 12725 /***/ }), 12726 12727 /***/ 57843: 12728 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 12729 12730 "use strict"; 12731 12732 Object.defineProperty(exports, "__esModule", ({ value: true })); 12733 exports.RekorWitness = exports.DEFAULT_REKOR_URL = void 0; 12734 /* 12735 Copyright 2023 The Sigstore Authors. 12736 12737 Licensed under the Apache License, Version 2.0 (the "License"); 12738 you may not use this file except in compliance with the License. 12739 You may obtain a copy of the License at 12740 12741 http://www.apache.org/licenses/LICENSE-2.0 12742 12743 Unless required by applicable law or agreed to in writing, software 12744 distributed under the License is distributed on an "AS IS" BASIS, 12745 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12746 See the License for the specific language governing permissions and 12747 limitations under the License. 12748 */ 12749 const util_1 = __nccwpck_require__(90724); 12750 const client_1 = __nccwpck_require__(76737); 12751 const entry_1 = __nccwpck_require__(23776); 12752 exports.DEFAULT_REKOR_URL = 'https://rekor.sigstore.dev'; 12753 class RekorWitness { 12754 constructor(options) { 12755 this.entryType = options.entryType; 12756 this.tlog = new client_1.TLogClient({ 12757 ...options, 12758 rekorBaseURL: options.rekorBaseURL || /* istanbul ignore next */ exports.DEFAULT_REKOR_URL, 12759 }); 12760 } 12761 async testify(content, publicKey) { 12762 const proposedEntry = (0, entry_1.toProposedEntry)(content, publicKey, this.entryType); 12763 const entry = await this.tlog.createEntry(proposedEntry); 12764 return toTransparencyLogEntry(entry); 12765 } 12766 } 12767 exports.RekorWitness = RekorWitness; 12768 function toTransparencyLogEntry(entry) { 12769 const logID = Buffer.from(entry.logID, 'hex'); 12770 // Parse entry body so we can extract the kind and version. 12771 const bodyJSON = util_1.encoding.base64Decode(entry.body); 12772 const entryBody = JSON.parse(bodyJSON); 12773 const promise = entry?.verification?.signedEntryTimestamp 12774 ? inclusionPromise(entry.verification.signedEntryTimestamp) 12775 : undefined; 12776 const proof = entry?.verification?.inclusionProof 12777 ? inclusionProof(entry.verification.inclusionProof) 12778 : undefined; 12779 const tlogEntry = { 12780 logIndex: entry.logIndex.toString(), 12781 logId: { 12782 keyId: logID, 12783 }, 12784 integratedTime: entry.integratedTime.toString(), 12785 kindVersion: { 12786 kind: entryBody.kind, 12787 version: entryBody.apiVersion, 12788 }, 12789 inclusionPromise: promise, 12790 inclusionProof: proof, 12791 canonicalizedBody: Buffer.from(entry.body, 'base64'), 12792 }; 12793 return { 12794 tlogEntries: [tlogEntry], 12795 }; 12796 } 12797 function inclusionPromise(promise) { 12798 return { 12799 signedEntryTimestamp: Buffer.from(promise, 'base64'), 12800 }; 12801 } 12802 function inclusionProof(proof) { 12803 return { 12804 logIndex: proof.logIndex.toString(), 12805 treeSize: proof.treeSize.toString(), 12806 rootHash: Buffer.from(proof.rootHash, 'hex'), 12807 hashes: proof.hashes.map((h) => Buffer.from(h, 'hex')), 12808 checkpoint: { 12809 envelope: proof.checkpoint, 12810 }, 12811 }; 12812 } 12813 12814 12815 /***/ }), 12816 12817 /***/ 12239: 12818 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 12819 12820 "use strict"; 12821 12822 Object.defineProperty(exports, "__esModule", ({ value: true })); 12823 exports.TSAClient = void 0; 12824 /* 12825 Copyright 2023 The Sigstore Authors. 12826 12827 Licensed under the Apache License, Version 2.0 (the "License"); 12828 you may not use this file except in compliance with the License. 12829 You may obtain a copy of the License at 12830 12831 http://www.apache.org/licenses/LICENSE-2.0 12832 12833 Unless required by applicable law or agreed to in writing, software 12834 distributed under the License is distributed on an "AS IS" BASIS, 12835 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12836 See the License for the specific language governing permissions and 12837 limitations under the License. 12838 */ 12839 const error_1 = __nccwpck_require__(30532); 12840 const tsa_1 = __nccwpck_require__(82759); 12841 const util_1 = __nccwpck_require__(90724); 12842 class TSAClient { 12843 constructor(options) { 12844 this.tsa = new tsa_1.TimestampAuthority({ 12845 baseURL: options.tsaBaseURL, 12846 retry: options.retry, 12847 timeout: options.timeout, 12848 }); 12849 } 12850 async createTimestamp(signature) { 12851 const request = { 12852 artifactHash: util_1.crypto.hash(signature).toString('base64'), 12853 hashAlgorithm: 'sha256', 12854 }; 12855 try { 12856 return await this.tsa.createTimestamp(request); 12857 } 12858 catch (err) { 12859 (0, error_1.internalError)(err, 'TSA_CREATE_TIMESTAMP_ERROR', 'error creating timestamp'); 12860 } 12861 } 12862 } 12863 exports.TSAClient = TSAClient; 12864 12865 12866 /***/ }), 12867 12868 /***/ 80049: 12869 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 12870 12871 "use strict"; 12872 12873 Object.defineProperty(exports, "__esModule", ({ value: true })); 12874 exports.TSAWitness = void 0; 12875 /* 12876 Copyright 2023 The Sigstore Authors. 12877 12878 Licensed under the Apache License, Version 2.0 (the "License"); 12879 you may not use this file except in compliance with the License. 12880 You may obtain a copy of the License at 12881 12882 http://www.apache.org/licenses/LICENSE-2.0 12883 12884 Unless required by applicable law or agreed to in writing, software 12885 distributed under the License is distributed on an "AS IS" BASIS, 12886 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12887 See the License for the specific language governing permissions and 12888 limitations under the License. 12889 */ 12890 const client_1 = __nccwpck_require__(12239); 12891 class TSAWitness { 12892 constructor(options) { 12893 this.tsa = new client_1.TSAClient({ 12894 tsaBaseURL: options.tsaBaseURL, 12895 retry: options.retry, 12896 timeout: options.timeout, 12897 }); 12898 } 12899 async testify(content) { 12900 const signature = extractSignature(content); 12901 const timestamp = await this.tsa.createTimestamp(signature); 12902 return { 12903 rfc3161Timestamps: [{ signedTimestamp: timestamp }], 12904 }; 12905 } 12906 } 12907 exports.TSAWitness = TSAWitness; 12908 function extractSignature(content) { 12909 switch (content.$case) { 12910 case 'dsseEnvelope': 12911 return content.dsseEnvelope.signatures[0].sig; 12912 case 'messageSignature': 12913 return content.messageSignature.signature; 12914 } 12915 } 12916 12917 12918 /***/ }), 12919 12920 /***/ 68134: 12921 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 12922 12923 "use strict"; 12924 12925 var __importDefault = (this && this.__importDefault) || function (mod) { 12926 return (mod && mod.__esModule) ? mod : { "default": mod }; 12927 }; 12928 Object.defineProperty(exports, "__esModule", ({ value: true })); 12929 exports.appDataPath = void 0; 12930 /* 12931 Copyright 2023 The Sigstore Authors. 12932 12933 Licensed under the Apache License, Version 2.0 (the "License"); 12934 you may not use this file except in compliance with the License. 12935 You may obtain a copy of the License at 12936 12937 http://www.apache.org/licenses/LICENSE-2.0 12938 12939 Unless required by applicable law or agreed to in writing, software 12940 distributed under the License is distributed on an "AS IS" BASIS, 12941 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12942 See the License for the specific language governing permissions and 12943 limitations under the License. 12944 */ 12945 const os_1 = __importDefault(__nccwpck_require__(22037)); 12946 const path_1 = __importDefault(__nccwpck_require__(71017)); 12947 function appDataPath(name) { 12948 const homedir = os_1.default.homedir(); 12949 switch (process.platform) { 12950 /* istanbul ignore next */ 12951 case 'darwin': { 12952 const appSupport = path_1.default.join(homedir, 'Library', 'Application Support'); 12953 return path_1.default.join(appSupport, name); 12954 } 12955 /* istanbul ignore next */ 12956 case 'win32': { 12957 const localAppData = process.env.LOCALAPPDATA || path_1.default.join(homedir, 'AppData', 'Local'); 12958 return path_1.default.join(localAppData, name, 'Data'); 12959 } 12960 /* istanbul ignore next */ 12961 default: { 12962 const localData = process.env.XDG_DATA_HOME || path_1.default.join(homedir, '.local', 'share'); 12963 return path_1.default.join(localData, name); 12964 } 12965 } 12966 } 12967 exports.appDataPath = appDataPath; 12968 12969 12970 /***/ }), 12971 12972 /***/ 78447: 12973 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 12974 12975 "use strict"; 12976 12977 var __importDefault = (this && this.__importDefault) || function (mod) { 12978 return (mod && mod.__esModule) ? mod : { "default": mod }; 12979 }; 12980 Object.defineProperty(exports, "__esModule", ({ value: true })); 12981 exports.TUFClient = void 0; 12982 /* 12983 Copyright 2023 The Sigstore Authors. 12984 12985 Licensed under the Apache License, Version 2.0 (the "License"); 12986 you may not use this file except in compliance with the License. 12987 You may obtain a copy of the License at 12988 12989 http://www.apache.org/licenses/LICENSE-2.0 12990 12991 Unless required by applicable law or agreed to in writing, software 12992 distributed under the License is distributed on an "AS IS" BASIS, 12993 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12994 See the License for the specific language governing permissions and 12995 limitations under the License. 12996 */ 12997 const fs_1 = __importDefault(__nccwpck_require__(57147)); 12998 const path_1 = __importDefault(__nccwpck_require__(71017)); 12999 const tuf_js_1 = __nccwpck_require__(89475); 13000 const _1 = __nccwpck_require__(88567); 13001 const target_1 = __nccwpck_require__(51412); 13002 const TARGETS_DIR_NAME = 'targets'; 13003 class TUFClient { 13004 constructor(options) { 13005 const url = new URL(options.mirrorURL); 13006 const repoName = encodeURIComponent(url.host + url.pathname.replace(/\/$/, '')); 13007 const cachePath = path_1.default.join(options.cachePath, repoName); 13008 initTufCache(cachePath); 13009 seedCache({ 13010 cachePath, 13011 mirrorURL: options.mirrorURL, 13012 tufRootPath: options.rootPath, 13013 forceInit: options.forceInit, 13014 }); 13015 this.updater = initClient({ 13016 mirrorURL: options.mirrorURL, 13017 cachePath, 13018 forceCache: options.forceCache, 13019 retry: options.retry, 13020 timeout: options.timeout, 13021 }); 13022 } 13023 async refresh() { 13024 return this.updater.refresh(); 13025 } 13026 getTarget(targetName) { 13027 return (0, target_1.readTarget)(this.updater, targetName); 13028 } 13029 } 13030 exports.TUFClient = TUFClient; 13031 // Initializes the TUF cache directory structure including the initial 13032 // root.json file. If the cache directory does not exist, it will be 13033 // created. If the targets directory does not exist, it will be created. 13034 // If the root.json file does not exist, it will be copied from the 13035 // rootPath argument. 13036 function initTufCache(cachePath) { 13037 const targetsPath = path_1.default.join(cachePath, TARGETS_DIR_NAME); 13038 if (!fs_1.default.existsSync(cachePath)) { 13039 fs_1.default.mkdirSync(cachePath, { recursive: true }); 13040 } 13041 if (!fs_1.default.existsSync(targetsPath)) { 13042 fs_1.default.mkdirSync(targetsPath); 13043 } 13044 } 13045 // Populates the TUF cache with the initial root.json file. If the root.json 13046 // file does not exist (or we're forcing re-initialization), copy it from either 13047 // the rootPath argument or from one of the repo seeds. 13048 function seedCache({ cachePath, mirrorURL, tufRootPath, forceInit, }) { 13049 const cachedRootPath = path_1.default.join(cachePath, 'root.json'); 13050 // If the root.json file does not exist (or we're forcing re-initialization), 13051 // populate it either from the supplied rootPath or from one of the repo seeds. 13052 if (!fs_1.default.existsSync(cachedRootPath) || forceInit) { 13053 if (tufRootPath) { 13054 fs_1.default.copyFileSync(tufRootPath, cachedRootPath); 13055 } 13056 else { 13057 /* eslint-disable @typescript-eslint/no-var-requires */ 13058 const seeds = __nccwpck_require__(84998); 13059 const repoSeed = seeds[mirrorURL]; 13060 if (!repoSeed) { 13061 throw new _1.TUFError({ 13062 code: 'TUF_INIT_CACHE_ERROR', 13063 message: `No root.json found for mirror: ${mirrorURL}`, 13064 }); 13065 } 13066 fs_1.default.writeFileSync(cachedRootPath, Buffer.from(repoSeed['root.json'], 'base64')); 13067 // Copy any seed targets into the cache 13068 Object.entries(repoSeed.targets).forEach(([targetName, target]) => { 13069 fs_1.default.writeFileSync(path_1.default.join(cachePath, TARGETS_DIR_NAME, targetName), Buffer.from(target, 'base64')); 13070 }); 13071 } 13072 } 13073 } 13074 function initClient(options) { 13075 const config = { 13076 fetchTimeout: options.timeout, 13077 fetchRetry: options.retry, 13078 }; 13079 return new tuf_js_1.Updater({ 13080 metadataBaseUrl: options.mirrorURL, 13081 targetBaseUrl: `${options.mirrorURL}/targets`, 13082 metadataDir: options.cachePath, 13083 targetDir: path_1.default.join(options.cachePath, TARGETS_DIR_NAME), 13084 forceCache: options.forceCache, 13085 config, 13086 }); 13087 } 13088 13089 13090 /***/ }), 13091 13092 /***/ 38624: 13093 /***/ ((__unused_webpack_module, exports) => { 13094 13095 "use strict"; 13096 13097 Object.defineProperty(exports, "__esModule", ({ value: true })); 13098 exports.TUFError = void 0; 13099 class TUFError extends Error { 13100 constructor({ code, message, cause, }) { 13101 super(message); 13102 this.code = code; 13103 this.cause = cause; 13104 this.name = this.constructor.name; 13105 } 13106 } 13107 exports.TUFError = TUFError; 13108 13109 13110 /***/ }), 13111 13112 /***/ 88567: 13113 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 13114 13115 "use strict"; 13116 13117 Object.defineProperty(exports, "__esModule", ({ value: true })); 13118 exports.TUFError = exports.initTUF = exports.getTrustedRoot = exports.DEFAULT_MIRROR_URL = void 0; 13119 /* 13120 Copyright 2023 The Sigstore Authors. 13121 13122 Licensed under the Apache License, Version 2.0 (the "License"); 13123 you may not use this file except in compliance with the License. 13124 You may obtain a copy of the License at 13125 13126 http://www.apache.org/licenses/LICENSE-2.0 13127 13128 Unless required by applicable law or agreed to in writing, software 13129 distributed under the License is distributed on an "AS IS" BASIS, 13130 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13131 See the License for the specific language governing permissions and 13132 limitations under the License. 13133 */ 13134 const protobuf_specs_1 = __nccwpck_require__(60530); 13135 const appdata_1 = __nccwpck_require__(68134); 13136 const client_1 = __nccwpck_require__(78447); 13137 exports.DEFAULT_MIRROR_URL = 'https://tuf-repo-cdn.sigstore.dev'; 13138 const DEFAULT_CACHE_DIR = 'sigstore-js'; 13139 const DEFAULT_RETRY = { retries: 2 }; 13140 const DEFAULT_TIMEOUT = 5000; 13141 const TRUSTED_ROOT_TARGET = 'trusted_root.json'; 13142 async function getTrustedRoot( 13143 /* istanbul ignore next */ 13144 options = {}) { 13145 const client = createClient(options); 13146 const trustedRoot = await client.getTarget(TRUSTED_ROOT_TARGET); 13147 return protobuf_specs_1.TrustedRoot.fromJSON(JSON.parse(trustedRoot)); 13148 } 13149 exports.getTrustedRoot = getTrustedRoot; 13150 async function initTUF( 13151 /* istanbul ignore next */ 13152 options = {}) { 13153 const client = createClient(options); 13154 return client.refresh().then(() => client); 13155 } 13156 exports.initTUF = initTUF; 13157 // Create a TUF client with default options 13158 function createClient(options) { 13159 /* istanbul ignore next */ 13160 return new client_1.TUFClient({ 13161 cachePath: options.cachePath || (0, appdata_1.appDataPath)(DEFAULT_CACHE_DIR), 13162 rootPath: options.rootPath, 13163 mirrorURL: options.mirrorURL || exports.DEFAULT_MIRROR_URL, 13164 retry: options.retry ?? DEFAULT_RETRY, 13165 timeout: options.timeout ?? DEFAULT_TIMEOUT, 13166 forceCache: options.forceCache ?? false, 13167 forceInit: options.forceInit ?? options.force ?? false, 13168 }); 13169 } 13170 var error_1 = __nccwpck_require__(38624); 13171 Object.defineProperty(exports, "TUFError", ({ enumerable: true, get: function () { return error_1.TUFError; } })); 13172 13173 13174 /***/ }), 13175 13176 /***/ 51412: 13177 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 13178 13179 "use strict"; 13180 13181 var __importDefault = (this && this.__importDefault) || function (mod) { 13182 return (mod && mod.__esModule) ? mod : { "default": mod }; 13183 }; 13184 Object.defineProperty(exports, "__esModule", ({ value: true })); 13185 exports.readTarget = void 0; 13186 /* 13187 Copyright 2023 The Sigstore Authors. 13188 13189 Licensed under the Apache License, Version 2.0 (the "License"); 13190 you may not use this file except in compliance with the License. 13191 You may obtain a copy of the License at 13192 13193 http://www.apache.org/licenses/LICENSE-2.0 13194 13195 Unless required by applicable law or agreed to in writing, software 13196 distributed under the License is distributed on an "AS IS" BASIS, 13197 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13198 See the License for the specific language governing permissions and 13199 limitations under the License. 13200 */ 13201 const fs_1 = __importDefault(__nccwpck_require__(57147)); 13202 const error_1 = __nccwpck_require__(38624); 13203 // Downloads and returns the specified target from the provided TUF Updater. 13204 async function readTarget(tuf, targetPath) { 13205 const path = await getTargetPath(tuf, targetPath); 13206 return new Promise((resolve, reject) => { 13207 fs_1.default.readFile(path, 'utf-8', (err, data) => { 13208 if (err) { 13209 reject(new error_1.TUFError({ 13210 code: 'TUF_READ_TARGET_ERROR', 13211 message: `error reading target ${path}`, 13212 cause: err, 13213 })); 13214 } 13215 else { 13216 resolve(data); 13217 } 13218 }); 13219 }); 13220 } 13221 exports.readTarget = readTarget; 13222 // Returns the local path to the specified target. If the target is not yet 13223 // cached locally, the provided TUF Updater will be used to download and 13224 // cache the target. 13225 async function getTargetPath(tuf, target) { 13226 let targetInfo; 13227 try { 13228 targetInfo = await tuf.getTargetInfo(target); 13229 } 13230 catch (err) { 13231 throw new error_1.TUFError({ 13232 code: 'TUF_REFRESH_METADATA_ERROR', 13233 message: 'error refreshing TUF metadata', 13234 cause: err, 13235 }); 13236 } 13237 if (!targetInfo) { 13238 throw new error_1.TUFError({ 13239 code: 'TUF_FIND_TARGET_ERROR', 13240 message: `target ${target} not found`, 13241 }); 13242 } 13243 let path = await tuf.findCachedTarget(targetInfo); 13244 // An empty path here means the target has not been cached locally, or is 13245 // out of date. In either case, we need to download it. 13246 if (!path) { 13247 try { 13248 path = await tuf.downloadTarget(targetInfo); 13249 } 13250 catch (err) { 13251 throw new error_1.TUFError({ 13252 code: 'TUF_DOWNLOAD_TARGET_ERROR', 13253 message: `error downloading target ${path}`, 13254 cause: err, 13255 }); 13256 } 13257 } 13258 return path; 13259 } 13260 13261 13262 /***/ }), 13263 13264 /***/ 6738: 13265 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 13266 13267 "use strict"; 13268 13269 Object.defineProperty(exports, "__esModule", ({ value: true })); 13270 exports.DSSESignatureContent = void 0; 13271 /* 13272 Copyright 2023 The Sigstore Authors. 13273 13274 Licensed under the Apache License, Version 2.0 (the "License"); 13275 you may not use this file except in compliance with the License. 13276 You may obtain a copy of the License at 13277 13278 http://www.apache.org/licenses/LICENSE-2.0 13279 13280 Unless required by applicable law or agreed to in writing, software 13281 distributed under the License is distributed on an "AS IS" BASIS, 13282 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13283 See the License for the specific language governing permissions and 13284 limitations under the License. 13285 */ 13286 const core_1 = __nccwpck_require__(3352); 13287 class DSSESignatureContent { 13288 constructor(env) { 13289 this.env = env; 13290 } 13291 compareDigest(digest) { 13292 return core_1.crypto.bufferEqual(digest, core_1.crypto.hash(this.env.payload)); 13293 } 13294 compareSignature(signature) { 13295 return core_1.crypto.bufferEqual(signature, this.signature); 13296 } 13297 verifySignature(key) { 13298 return core_1.crypto.verify(this.preAuthEncoding, key, this.signature); 13299 } 13300 get signature() { 13301 return this.env.signatures.length > 0 13302 ? this.env.signatures[0].sig 13303 : Buffer.from(''); 13304 } 13305 // DSSE Pre-Authentication Encoding 13306 get preAuthEncoding() { 13307 return core_1.dsse.preAuthEncoding(this.env.payloadType, this.env.payload); 13308 } 13309 } 13310 exports.DSSESignatureContent = DSSESignatureContent; 13311 13312 13313 /***/ }), 13314 13315 /***/ 19045: 13316 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 13317 13318 "use strict"; 13319 13320 Object.defineProperty(exports, "__esModule", ({ value: true })); 13321 exports.signatureContent = exports.toSignedEntity = void 0; 13322 const core_1 = __nccwpck_require__(3352); 13323 const dsse_1 = __nccwpck_require__(6738); 13324 const message_1 = __nccwpck_require__(66843); 13325 function toSignedEntity(bundle, artifact) { 13326 const { tlogEntries, timestampVerificationData } = bundle.verificationMaterial; 13327 const timestamps = []; 13328 for (const entry of tlogEntries) { 13329 timestamps.push({ 13330 $case: 'transparency-log', 13331 tlogEntry: entry, 13332 }); 13333 } 13334 for (const ts of timestampVerificationData?.rfc3161Timestamps ?? []) { 13335 timestamps.push({ 13336 $case: 'timestamp-authority', 13337 timestamp: core_1.RFC3161Timestamp.parse(ts.signedTimestamp), 13338 }); 13339 } 13340 return { 13341 signature: signatureContent(bundle, artifact), 13342 key: key(bundle), 13343 tlogEntries, 13344 timestamps, 13345 }; 13346 } 13347 exports.toSignedEntity = toSignedEntity; 13348 function signatureContent(bundle, artifact) { 13349 switch (bundle.content.$case) { 13350 case 'dsseEnvelope': 13351 return new dsse_1.DSSESignatureContent(bundle.content.dsseEnvelope); 13352 case 'messageSignature': 13353 return new message_1.MessageSignatureContent(bundle.content.messageSignature, artifact); 13354 } 13355 } 13356 exports.signatureContent = signatureContent; 13357 function key(bundle) { 13358 switch (bundle.verificationMaterial.content.$case) { 13359 case 'publicKey': 13360 return { 13361 $case: 'public-key', 13362 hint: bundle.verificationMaterial.content.publicKey.hint, 13363 }; 13364 case 'x509CertificateChain': 13365 return { 13366 $case: 'certificate', 13367 certificate: core_1.X509Certificate.parse(bundle.verificationMaterial.content.x509CertificateChain 13368 .certificates[0].rawBytes), 13369 }; 13370 case 'certificate': 13371 return { 13372 $case: 'certificate', 13373 certificate: core_1.X509Certificate.parse(bundle.verificationMaterial.content.certificate.rawBytes), 13374 }; 13375 } 13376 } 13377 13378 13379 /***/ }), 13380 13381 /***/ 66843: 13382 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 13383 13384 "use strict"; 13385 13386 Object.defineProperty(exports, "__esModule", ({ value: true })); 13387 exports.MessageSignatureContent = void 0; 13388 /* 13389 Copyright 2023 The Sigstore Authors. 13390 13391 Licensed under the Apache License, Version 2.0 (the "License"); 13392 you may not use this file except in compliance with the License. 13393 You may obtain a copy of the License at 13394 13395 http://www.apache.org/licenses/LICENSE-2.0 13396 13397 Unless required by applicable law or agreed to in writing, software 13398 distributed under the License is distributed on an "AS IS" BASIS, 13399 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13400 See the License for the specific language governing permissions and 13401 limitations under the License. 13402 */ 13403 const core_1 = __nccwpck_require__(3352); 13404 class MessageSignatureContent { 13405 constructor(messageSignature, artifact) { 13406 this.signature = messageSignature.signature; 13407 this.messageDigest = messageSignature.messageDigest.digest; 13408 this.artifact = artifact; 13409 } 13410 compareSignature(signature) { 13411 return core_1.crypto.bufferEqual(signature, this.signature); 13412 } 13413 compareDigest(digest) { 13414 return core_1.crypto.bufferEqual(digest, this.messageDigest); 13415 } 13416 verifySignature(key) { 13417 return core_1.crypto.verify(this.artifact, key, this.signature); 13418 } 13419 } 13420 exports.MessageSignatureContent = MessageSignatureContent; 13421 13422 13423 /***/ }), 13424 13425 /***/ 58948: 13426 /***/ ((__unused_webpack_module, exports) => { 13427 13428 "use strict"; 13429 13430 Object.defineProperty(exports, "__esModule", ({ value: true })); 13431 exports.PolicyError = exports.VerificationError = void 0; 13432 /* 13433 Copyright 2023 The Sigstore Authors. 13434 13435 Licensed under the Apache License, Version 2.0 (the "License"); 13436 you may not use this file except in compliance with the License. 13437 You may obtain a copy of the License at 13438 13439 http://www.apache.org/licenses/LICENSE-2.0 13440 13441 Unless required by applicable law or agreed to in writing, software 13442 distributed under the License is distributed on an "AS IS" BASIS, 13443 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13444 See the License for the specific language governing permissions and 13445 limitations under the License. 13446 */ 13447 class BaseError extends Error { 13448 constructor({ code, message, cause, }) { 13449 super(message); 13450 this.code = code; 13451 this.cause = cause; 13452 this.name = this.constructor.name; 13453 } 13454 } 13455 class VerificationError extends BaseError { 13456 } 13457 exports.VerificationError = VerificationError; 13458 class PolicyError extends BaseError { 13459 } 13460 exports.PolicyError = PolicyError; 13461 13462 13463 /***/ }), 13464 13465 /***/ 10666: 13466 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 13467 13468 "use strict"; 13469 13470 Object.defineProperty(exports, "__esModule", ({ value: true })); 13471 exports.Verifier = exports.toTrustMaterial = exports.VerificationError = exports.PolicyError = exports.toSignedEntity = void 0; 13472 /* istanbul ignore file */ 13473 /* 13474 Copyright 2023 The Sigstore Authors. 13475 13476 Licensed under the Apache License, Version 2.0 (the "License"); 13477 you may not use this file except in compliance with the License. 13478 You may obtain a copy of the License at 13479 13480 http://www.apache.org/licenses/LICENSE-2.0 13481 13482 Unless required by applicable law or agreed to in writing, software 13483 distributed under the License is distributed on an "AS IS" BASIS, 13484 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13485 See the License for the specific language governing permissions and 13486 limitations under the License. 13487 */ 13488 var bundle_1 = __nccwpck_require__(19045); 13489 Object.defineProperty(exports, "toSignedEntity", ({ enumerable: true, get: function () { return bundle_1.toSignedEntity; } })); 13490 var error_1 = __nccwpck_require__(58948); 13491 Object.defineProperty(exports, "PolicyError", ({ enumerable: true, get: function () { return error_1.PolicyError; } })); 13492 Object.defineProperty(exports, "VerificationError", ({ enumerable: true, get: function () { return error_1.VerificationError; } })); 13493 var trust_1 = __nccwpck_require__(14503); 13494 Object.defineProperty(exports, "toTrustMaterial", ({ enumerable: true, get: function () { return trust_1.toTrustMaterial; } })); 13495 var verifier_1 = __nccwpck_require__(95456); 13496 Object.defineProperty(exports, "Verifier", ({ enumerable: true, get: function () { return verifier_1.Verifier; } })); 13497 13498 13499 /***/ }), 13500 13501 /***/ 88766: 13502 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 13503 13504 "use strict"; 13505 13506 Object.defineProperty(exports, "__esModule", ({ value: true })); 13507 exports.CertificateChainVerifier = exports.verifyCertificateChain = void 0; 13508 const error_1 = __nccwpck_require__(58948); 13509 const trust_1 = __nccwpck_require__(14503); 13510 function verifyCertificateChain(leaf, certificateAuthorities) { 13511 // Filter list of trusted CAs to those which are valid for the given 13512 // leaf certificate. 13513 const cas = (0, trust_1.filterCertAuthorities)(certificateAuthorities, { 13514 start: leaf.notBefore, 13515 end: leaf.notAfter, 13516 }); 13517 /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ 13518 let error; 13519 for (const ca of cas) { 13520 try { 13521 const verifier = new CertificateChainVerifier({ 13522 trustedCerts: ca.certChain, 13523 untrustedCert: leaf, 13524 }); 13525 return verifier.verify(); 13526 } 13527 catch (err) { 13528 error = err; 13529 } 13530 } 13531 // If we failed to verify the certificate chain for all of the trusted 13532 // CAs, throw the last error we encountered. 13533 throw new error_1.VerificationError({ 13534 code: 'CERTIFICATE_ERROR', 13535 message: 'Failed to verify certificate chain', 13536 cause: error, 13537 }); 13538 } 13539 exports.verifyCertificateChain = verifyCertificateChain; 13540 class CertificateChainVerifier { 13541 constructor(opts) { 13542 this.untrustedCert = opts.untrustedCert; 13543 this.trustedCerts = opts.trustedCerts; 13544 this.localCerts = dedupeCertificates([ 13545 ...opts.trustedCerts, 13546 opts.untrustedCert, 13547 ]); 13548 } 13549 verify() { 13550 // Construct certificate path from leaf to root 13551 const certificatePath = this.sort(); 13552 // Perform validation checks on each certificate in the path 13553 this.checkPath(certificatePath); 13554 // Return verified certificate path 13555 return certificatePath; 13556 } 13557 sort() { 13558 const leafCert = this.untrustedCert; 13559 // Construct all possible paths from the leaf 13560 let paths = this.buildPaths(leafCert); 13561 // Filter for paths which contain a trusted certificate 13562 paths = paths.filter((path) => path.some((cert) => this.trustedCerts.includes(cert))); 13563 if (paths.length === 0) { 13564 throw new error_1.VerificationError({ 13565 code: 'CERTIFICATE_ERROR', 13566 message: 'no trusted certificate path found', 13567 }); 13568 } 13569 // Find the shortest of possible paths 13570 /* istanbul ignore next */ 13571 const path = paths.reduce((prev, curr) => prev.length < curr.length ? prev : curr); 13572 // Construct chain from shortest path 13573 // Removes the last certificate in the path, which will be a second copy 13574 // of the root certificate given that the root is self-signed. 13575 return [leafCert, ...path].slice(0, -1); 13576 } 13577 // Recursively build all possible paths from the leaf to the root 13578 buildPaths(certificate) { 13579 const paths = []; 13580 const issuers = this.findIssuer(certificate); 13581 if (issuers.length === 0) { 13582 throw new error_1.VerificationError({ 13583 code: 'CERTIFICATE_ERROR', 13584 message: 'no valid certificate path found', 13585 }); 13586 } 13587 for (let i = 0; i < issuers.length; i++) { 13588 const issuer = issuers[i]; 13589 // Base case - issuer is self 13590 if (issuer.equals(certificate)) { 13591 paths.push([certificate]); 13592 continue; 13593 } 13594 // Recursively build path for the issuer 13595 const subPaths = this.buildPaths(issuer); 13596 // Construct paths by appending the issuer to each subpath 13597 for (let j = 0; j < subPaths.length; j++) { 13598 paths.push([issuer, ...subPaths[j]]); 13599 } 13600 } 13601 return paths; 13602 } 13603 // Return all possible issuers for the given certificate 13604 findIssuer(certificate) { 13605 let issuers = []; 13606 let keyIdentifier; 13607 // Exit early if the certificate is self-signed 13608 if (certificate.subject.equals(certificate.issuer)) { 13609 if (certificate.verify()) { 13610 return [certificate]; 13611 } 13612 } 13613 // If the certificate has an authority key identifier, use that 13614 // to find the issuer 13615 if (certificate.extAuthorityKeyID) { 13616 keyIdentifier = certificate.extAuthorityKeyID.keyIdentifier; 13617 // TODO: Add support for authorityCertIssuer/authorityCertSerialNumber 13618 // though Fulcio doesn't appear to use these 13619 } 13620 // Find possible issuers by comparing the authorityKeyID/subjectKeyID 13621 // or issuer/subject. Potential issuers are added to the result array. 13622 this.localCerts.forEach((possibleIssuer) => { 13623 if (keyIdentifier) { 13624 if (possibleIssuer.extSubjectKeyID) { 13625 if (possibleIssuer.extSubjectKeyID.keyIdentifier.equals(keyIdentifier)) { 13626 issuers.push(possibleIssuer); 13627 } 13628 return; 13629 } 13630 } 13631 // Fallback to comparing certificate issuer and subject if 13632 // subjectKey/authorityKey extensions are not present 13633 if (possibleIssuer.subject.equals(certificate.issuer)) { 13634 issuers.push(possibleIssuer); 13635 } 13636 }); 13637 // Remove any issuers which fail to verify the certificate 13638 issuers = issuers.filter((issuer) => { 13639 try { 13640 return certificate.verify(issuer); 13641 } 13642 catch (ex) { 13643 /* istanbul ignore next - should never error */ 13644 return false; 13645 } 13646 }); 13647 return issuers; 13648 } 13649 checkPath(path) { 13650 /* istanbul ignore if */ 13651 if (path.length < 1) { 13652 throw new error_1.VerificationError({ 13653 code: 'CERTIFICATE_ERROR', 13654 message: 'certificate chain must contain at least one certificate', 13655 }); 13656 } 13657 // Ensure that all certificates beyond the leaf are CAs 13658 const validCAs = path.slice(1).every((cert) => cert.isCA); 13659 if (!validCAs) { 13660 throw new error_1.VerificationError({ 13661 code: 'CERTIFICATE_ERROR', 13662 message: 'intermediate certificate is not a CA', 13663 }); 13664 } 13665 // Certificate's issuer must match the subject of the next certificate 13666 // in the chain 13667 for (let i = path.length - 2; i >= 0; i--) { 13668 /* istanbul ignore if */ 13669 if (!path[i].issuer.equals(path[i + 1].subject)) { 13670 throw new error_1.VerificationError({ 13671 code: 'CERTIFICATE_ERROR', 13672 message: 'incorrect certificate name chaining', 13673 }); 13674 } 13675 } 13676 // Check pathlength constraints 13677 for (let i = 0; i < path.length; i++) { 13678 const cert = path[i]; 13679 // If the certificate is a CA, check the path length 13680 if (cert.extBasicConstraints?.isCA) { 13681 const pathLength = cert.extBasicConstraints.pathLenConstraint; 13682 // The path length, if set, indicates how many intermediate 13683 // certificates (NOT including the leaf) are allowed to follow. The 13684 // pathLength constraint of any intermediate CA certificate MUST be 13685 // greater than or equal to it's own depth in the chain (with an 13686 // adjustment for the leaf certificate) 13687 if (pathLength !== undefined && pathLength < i - 1) { 13688 throw new error_1.VerificationError({ 13689 code: 'CERTIFICATE_ERROR', 13690 message: 'path length constraint exceeded', 13691 }); 13692 } 13693 } 13694 } 13695 } 13696 } 13697 exports.CertificateChainVerifier = CertificateChainVerifier; 13698 // Remove duplicate certificates from the array 13699 function dedupeCertificates(certs) { 13700 for (let i = 0; i < certs.length; i++) { 13701 for (let j = i + 1; j < certs.length; j++) { 13702 if (certs[i].equals(certs[j])) { 13703 certs.splice(j, 1); 13704 j--; 13705 } 13706 } 13707 } 13708 return certs; 13709 } 13710 13711 13712 /***/ }), 13713 13714 /***/ 96829: 13715 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 13716 13717 "use strict"; 13718 13719 Object.defineProperty(exports, "__esModule", ({ value: true })); 13720 exports.verifyCertificate = exports.verifyPublicKey = void 0; 13721 /* 13722 Copyright 2023 The Sigstore Authors. 13723 13724 Licensed under the Apache License, Version 2.0 (the "License"); 13725 you may not use this file except in compliance with the License. 13726 You may obtain a copy of the License at 13727 13728 http://www.apache.org/licenses/LICENSE-2.0 13729 13730 Unless required by applicable law or agreed to in writing, software 13731 distributed under the License is distributed on an "AS IS" BASIS, 13732 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13733 See the License for the specific language governing permissions and 13734 limitations under the License. 13735 */ 13736 const core_1 = __nccwpck_require__(3352); 13737 const error_1 = __nccwpck_require__(58948); 13738 const certificate_1 = __nccwpck_require__(88766); 13739 const sct_1 = __nccwpck_require__(8669); 13740 const OID_FULCIO_ISSUER_V1 = '1.3.6.1.4.1.57264.1.1'; 13741 const OID_FULCIO_ISSUER_V2 = '1.3.6.1.4.1.57264.1.8'; 13742 function verifyPublicKey(hint, timestamps, trustMaterial) { 13743 const key = trustMaterial.publicKey(hint); 13744 timestamps.forEach((timestamp) => { 13745 if (!key.validFor(timestamp)) { 13746 throw new error_1.VerificationError({ 13747 code: 'PUBLIC_KEY_ERROR', 13748 message: `Public key is not valid for timestamp: ${timestamp.toISOString()}`, 13749 }); 13750 } 13751 }); 13752 return { key: key.publicKey }; 13753 } 13754 exports.verifyPublicKey = verifyPublicKey; 13755 function verifyCertificate(leaf, timestamps, trustMaterial) { 13756 // Check that leaf certificate chains to a trusted CA 13757 const path = (0, certificate_1.verifyCertificateChain)(leaf, trustMaterial.certificateAuthorities); 13758 // Check that ALL certificates are valid for ALL of the timestamps 13759 const validForDate = timestamps.every((timestamp) => path.every((cert) => cert.validForDate(timestamp))); 13760 if (!validForDate) { 13761 throw new error_1.VerificationError({ 13762 code: 'CERTIFICATE_ERROR', 13763 message: 'certificate is not valid or expired at the specified date', 13764 }); 13765 } 13766 return { 13767 scts: (0, sct_1.verifySCTs)(path[0], path[1], trustMaterial.ctlogs), 13768 signer: getSigner(path[0]), 13769 }; 13770 } 13771 exports.verifyCertificate = verifyCertificate; 13772 function getSigner(cert) { 13773 let issuer; 13774 const issuerExtension = cert.extension(OID_FULCIO_ISSUER_V2); 13775 if (issuerExtension) { 13776 issuer = issuerExtension.valueObj.subs?.[0]?.value.toString('ascii'); 13777 } 13778 else { 13779 issuer = cert.extension(OID_FULCIO_ISSUER_V1)?.value.toString('ascii'); 13780 } 13781 const identity = { 13782 extensions: { issuer }, 13783 subjectAlternativeName: cert.subjectAltName, 13784 }; 13785 return { 13786 key: core_1.crypto.createPublicKey(cert.publicKey), 13787 identity, 13788 }; 13789 } 13790 13791 13792 /***/ }), 13793 13794 /***/ 8669: 13795 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 13796 13797 "use strict"; 13798 13799 Object.defineProperty(exports, "__esModule", ({ value: true })); 13800 exports.verifySCTs = void 0; 13801 /* 13802 Copyright 2023 The Sigstore Authors. 13803 13804 Licensed under the Apache License, Version 2.0 (the "License"); 13805 you may not use this file except in compliance with the License. 13806 You may obtain a copy of the License at 13807 13808 http://www.apache.org/licenses/LICENSE-2.0 13809 13810 Unless required by applicable law or agreed to in writing, software 13811 distributed under the License is distributed on an "AS IS" BASIS, 13812 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13813 See the License for the specific language governing permissions and 13814 limitations under the License. 13815 */ 13816 const core_1 = __nccwpck_require__(3352); 13817 const error_1 = __nccwpck_require__(58948); 13818 const trust_1 = __nccwpck_require__(14503); 13819 function verifySCTs(cert, issuer, ctlogs) { 13820 let extSCT; 13821 // Verifying the SCT requires that we remove the SCT extension and 13822 // re-encode the TBS structure to DER -- this value is part of the data 13823 // over which the signature is calculated. Since this is a destructive action 13824 // we create a copy of the certificate so we can remove the SCT extension 13825 // without affecting the original certificate. 13826 const clone = cert.clone(); 13827 // Intentionally not using the findExtension method here because we want to 13828 // remove the the SCT extension from the certificate before calculating the 13829 // PreCert structure 13830 for (let i = 0; i < clone.extensions.length; i++) { 13831 const ext = clone.extensions[i]; 13832 if (ext.subs[0].toOID() === core_1.EXTENSION_OID_SCT) { 13833 extSCT = new core_1.X509SCTExtension(ext); 13834 // Remove the extension from the certificate 13835 clone.extensions.splice(i, 1); 13836 break; 13837 } 13838 } 13839 // No SCT extension found to verify 13840 if (!extSCT) { 13841 return []; 13842 } 13843 // Found an SCT extension but it has no SCTs 13844 /* istanbul ignore if -- too difficult to fabricate test case for this */ 13845 if (extSCT.signedCertificateTimestamps.length === 0) { 13846 return []; 13847 } 13848 // Construct the PreCert structure 13849 // https://www.rfc-editor.org/rfc/rfc6962#section-3.2 13850 const preCert = new core_1.ByteStream(); 13851 // Calculate hash of the issuer's public key 13852 const issuerId = core_1.crypto.hash(issuer.publicKey); 13853 preCert.appendView(issuerId); 13854 // Re-encodes the certificate to DER after removing the SCT extension 13855 const tbs = clone.tbsCertificate.toDER(); 13856 preCert.appendUint24(tbs.length); 13857 preCert.appendView(tbs); 13858 // Calculate and return the verification results for each SCT 13859 return extSCT.signedCertificateTimestamps.map((sct) => { 13860 // Find the ctlog instance that corresponds to the SCT's logID 13861 const validCTLogs = (0, trust_1.filterTLogAuthorities)(ctlogs, { 13862 logID: sct.logID, 13863 targetDate: sct.datetime, 13864 }); 13865 // See if the SCT is valid for any of the CT logs 13866 const verified = validCTLogs.some((log) => sct.verify(preCert.buffer, log.publicKey)); 13867 if (!verified) { 13868 throw new error_1.VerificationError({ 13869 code: 'CERTIFICATE_ERROR', 13870 message: 'SCT verification failed', 13871 }); 13872 } 13873 return sct.logID; 13874 }); 13875 } 13876 exports.verifySCTs = verifySCTs; 13877 13878 13879 /***/ }), 13880 13881 /***/ 83978: 13882 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 13883 13884 "use strict"; 13885 13886 Object.defineProperty(exports, "__esModule", ({ value: true })); 13887 exports.verifyExtensions = exports.verifySubjectAlternativeName = void 0; 13888 const error_1 = __nccwpck_require__(58948); 13889 function verifySubjectAlternativeName(policyIdentity, signerIdentity) { 13890 if (signerIdentity === undefined || !signerIdentity.match(policyIdentity)) { 13891 throw new error_1.PolicyError({ 13892 code: 'UNTRUSTED_SIGNER_ERROR', 13893 message: `certificate identity error - expected ${policyIdentity}, got ${signerIdentity}`, 13894 }); 13895 } 13896 } 13897 exports.verifySubjectAlternativeName = verifySubjectAlternativeName; 13898 function verifyExtensions(policyExtensions, signerExtensions = {}) { 13899 let key; 13900 for (key in policyExtensions) { 13901 if (signerExtensions[key] !== policyExtensions[key]) { 13902 throw new error_1.PolicyError({ 13903 code: 'UNTRUSTED_SIGNER_ERROR', 13904 message: `invalid certificate extension - expected ${key}=${policyExtensions[key]}, got ${key}=${signerExtensions[key]}`, 13905 }); 13906 } 13907 } 13908 } 13909 exports.verifyExtensions = verifyExtensions; 13910 13911 13912 /***/ }), 13913 13914 /***/ 37339: 13915 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 13916 13917 "use strict"; 13918 13919 Object.defineProperty(exports, "__esModule", ({ value: true })); 13920 exports.verifyCheckpoint = void 0; 13921 /* 13922 Copyright 2023 The Sigstore Authors. 13923 13924 Licensed under the Apache License, Version 2.0 (the "License"); 13925 you may not use this file except in compliance with the License. 13926 You may obtain a copy of the License at 13927 13928 http://www.apache.org/licenses/LICENSE-2.0 13929 13930 Unless required by applicable law or agreed to in writing, software 13931 distributed under the License is distributed on an "AS IS" BASIS, 13932 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13933 See the License for the specific language governing permissions and 13934 limitations under the License. 13935 */ 13936 const core_1 = __nccwpck_require__(3352); 13937 const error_1 = __nccwpck_require__(58948); 13938 const trust_1 = __nccwpck_require__(14503); 13939 // Separator between the note and the signatures in a checkpoint 13940 const CHECKPOINT_SEPARATOR = '\n\n'; 13941 // Checkpoint signatures are of the following form: 13942 // "– <identity> <key_hint+signature_bytes>\n" 13943 // where: 13944 // - the prefix is an emdash (U+2014). 13945 // - <identity> gives a human-readable representation of the signing ID. 13946 // - <key_hint+signature_bytes> is the first 4 bytes of the SHA256 hash of the 13947 // associated public key followed by the signature bytes. 13948 const SIGNATURE_REGEX = /\u2014 (\S+) (\S+)\n/g; 13949 // Verifies the checkpoint value in the given tlog entry. There are two steps 13950 // to the verification: 13951 // 1. Verify that all signatures in the checkpoint can be verified against a 13952 // trusted public key 13953 // 2. Verify that the root hash in the checkpoint matches the root hash in the 13954 // inclusion proof 13955 // See: https://github.com/transparency-dev/formats/blob/main/log/README.md 13956 function verifyCheckpoint(entry, tlogs) { 13957 // Filter tlog instances to just those which were valid at the time of the 13958 // entry 13959 const validTLogs = (0, trust_1.filterTLogAuthorities)(tlogs, { 13960 targetDate: new Date(Number(entry.integratedTime) * 1000), 13961 }); 13962 const inclusionProof = entry.inclusionProof; 13963 const signedNote = SignedNote.fromString(inclusionProof.checkpoint.envelope); 13964 const checkpoint = LogCheckpoint.fromString(signedNote.note); 13965 // Verify that the signatures in the checkpoint are all valid 13966 if (!verifySignedNote(signedNote, validTLogs)) { 13967 throw new error_1.VerificationError({ 13968 code: 'TLOG_INCLUSION_PROOF_ERROR', 13969 message: 'invalid checkpoint signature', 13970 }); 13971 } 13972 // Verify that the root hash from the checkpoint matches the root hash in the 13973 // inclusion proof 13974 if (!core_1.crypto.bufferEqual(checkpoint.logHash, inclusionProof.rootHash)) { 13975 throw new error_1.VerificationError({ 13976 code: 'TLOG_INCLUSION_PROOF_ERROR', 13977 message: 'root hash mismatch', 13978 }); 13979 } 13980 } 13981 exports.verifyCheckpoint = verifyCheckpoint; 13982 // Verifies the signatures in the SignedNote. For each signature, the 13983 // corresponding transparency log is looked up by the key hint and the 13984 // signature is verified against the public key in the transparency log. 13985 // Throws an error if any of the signatures are invalid. 13986 function verifySignedNote(signedNote, tlogs) { 13987 const data = Buffer.from(signedNote.note, 'utf-8'); 13988 return signedNote.signatures.every((signature) => { 13989 // Find the transparency log instance with the matching key hint 13990 const tlog = tlogs.find((tlog) => core_1.crypto.bufferEqual(tlog.logID.subarray(0, 4), signature.keyHint)); 13991 if (!tlog) { 13992 return false; 13993 } 13994 return core_1.crypto.verify(data, tlog.publicKey, signature.signature); 13995 }); 13996 } 13997 // SignedNote represents a signed note from a transparency log checkpoint. Consists 13998 // of a body (or note) and one more signatures calculated over the body. See 13999 // https://github.com/transparency-dev/formats/blob/main/log/README.md#signed-envelope 14000 class SignedNote { 14001 constructor(note, signatures) { 14002 this.note = note; 14003 this.signatures = signatures; 14004 } 14005 // Deserialize a SignedNote from a string 14006 static fromString(envelope) { 14007 if (!envelope.includes(CHECKPOINT_SEPARATOR)) { 14008 throw new error_1.VerificationError({ 14009 code: 'TLOG_INCLUSION_PROOF_ERROR', 14010 message: 'missing checkpoint separator', 14011 }); 14012 } 14013 // Split the note into the header and the data portions at the separator 14014 const split = envelope.indexOf(CHECKPOINT_SEPARATOR); 14015 const header = envelope.slice(0, split + 1); 14016 const data = envelope.slice(split + CHECKPOINT_SEPARATOR.length); 14017 // Find all the signature lines in the data portion 14018 const matches = data.matchAll(SIGNATURE_REGEX); 14019 // Parse each of the matched signature lines into the name and signature. 14020 // The first four bytes of the signature are the key hint (should match the 14021 // first four bytes of the log ID), and the rest is the signature itself. 14022 const signatures = Array.from(matches, (match) => { 14023 const [, name, signature] = match; 14024 const sigBytes = Buffer.from(signature, 'base64'); 14025 if (sigBytes.length < 5) { 14026 throw new error_1.VerificationError({ 14027 code: 'TLOG_INCLUSION_PROOF_ERROR', 14028 message: 'malformed checkpoint signature', 14029 }); 14030 } 14031 return { 14032 name, 14033 keyHint: sigBytes.subarray(0, 4), 14034 signature: sigBytes.subarray(4), 14035 }; 14036 }); 14037 if (signatures.length === 0) { 14038 throw new error_1.VerificationError({ 14039 code: 'TLOG_INCLUSION_PROOF_ERROR', 14040 message: 'no signatures found in checkpoint', 14041 }); 14042 } 14043 return new SignedNote(header, signatures); 14044 } 14045 } 14046 // LogCheckpoint represents a transparency log checkpoint. Consists of the 14047 // following: 14048 // - origin: the name of the transparency log 14049 // - logSize: the size of the log at the time of the checkpoint 14050 // - logHash: the root hash of the log at the time of the checkpoint 14051 // - rest: the rest of the checkpoint body, which is a list of log entries 14052 // See: 14053 // https://github.com/transparency-dev/formats/blob/main/log/README.md#checkpoint-body 14054 class LogCheckpoint { 14055 constructor(origin, logSize, logHash, rest) { 14056 this.origin = origin; 14057 this.logSize = logSize; 14058 this.logHash = logHash; 14059 this.rest = rest; 14060 } 14061 static fromString(note) { 14062 const lines = note.trimEnd().split('\n'); 14063 if (lines.length < 3) { 14064 throw new error_1.VerificationError({ 14065 code: 'TLOG_INCLUSION_PROOF_ERROR', 14066 message: 'too few lines in checkpoint header', 14067 }); 14068 } 14069 const origin = lines[0]; 14070 const logSize = BigInt(lines[1]); 14071 const rootHash = Buffer.from(lines[2], 'base64'); 14072 const rest = lines.slice(3); 14073 return new LogCheckpoint(origin, logSize, rootHash, rest); 14074 } 14075 } 14076 14077 14078 /***/ }), 14079 14080 /***/ 29511: 14081 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 14082 14083 "use strict"; 14084 14085 Object.defineProperty(exports, "__esModule", ({ value: true })); 14086 exports.verifyTLogTimestamp = exports.verifyTSATimestamp = void 0; 14087 const error_1 = __nccwpck_require__(58948); 14088 const checkpoint_1 = __nccwpck_require__(37339); 14089 const merkle_1 = __nccwpck_require__(11407); 14090 const set_1 = __nccwpck_require__(67527); 14091 const tsa_1 = __nccwpck_require__(2574); 14092 function verifyTSATimestamp(timestamp, data, timestampAuthorities) { 14093 (0, tsa_1.verifyRFC3161Timestamp)(timestamp, data, timestampAuthorities); 14094 return { 14095 type: 'timestamp-authority', 14096 logID: timestamp.signerSerialNumber, 14097 timestamp: timestamp.signingTime, 14098 }; 14099 } 14100 exports.verifyTSATimestamp = verifyTSATimestamp; 14101 function verifyTLogTimestamp(entry, tlogAuthorities) { 14102 let inclusionVerified = false; 14103 if (isTLogEntryWithInclusionPromise(entry)) { 14104 (0, set_1.verifyTLogSET)(entry, tlogAuthorities); 14105 inclusionVerified = true; 14106 } 14107 if (isTLogEntryWithInclusionProof(entry)) { 14108 (0, merkle_1.verifyMerkleInclusion)(entry); 14109 (0, checkpoint_1.verifyCheckpoint)(entry, tlogAuthorities); 14110 inclusionVerified = true; 14111 } 14112 if (!inclusionVerified) { 14113 throw new error_1.VerificationError({ 14114 code: 'TLOG_MISSING_INCLUSION_ERROR', 14115 message: 'inclusion could not be verified', 14116 }); 14117 } 14118 return { 14119 type: 'transparency-log', 14120 logID: entry.logId.keyId, 14121 timestamp: new Date(Number(entry.integratedTime) * 1000), 14122 }; 14123 } 14124 exports.verifyTLogTimestamp = verifyTLogTimestamp; 14125 function isTLogEntryWithInclusionPromise(entry) { 14126 return entry.inclusionPromise !== undefined; 14127 } 14128 function isTLogEntryWithInclusionProof(entry) { 14129 return entry.inclusionProof !== undefined; 14130 } 14131 14132 14133 /***/ }), 14134 14135 /***/ 11407: 14136 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 14137 14138 "use strict"; 14139 14140 Object.defineProperty(exports, "__esModule", ({ value: true })); 14141 exports.verifyMerkleInclusion = void 0; 14142 /* 14143 Copyright 2023 The Sigstore Authors. 14144 14145 Licensed under the Apache License, Version 2.0 (the "License"); 14146 you may not use this file except in compliance with the License. 14147 You may obtain a copy of the License at 14148 14149 http://www.apache.org/licenses/LICENSE-2.0 14150 14151 Unless required by applicable law or agreed to in writing, software 14152 distributed under the License is distributed on an "AS IS" BASIS, 14153 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14154 See the License for the specific language governing permissions and 14155 limitations under the License. 14156 */ 14157 const core_1 = __nccwpck_require__(3352); 14158 const error_1 = __nccwpck_require__(58948); 14159 const RFC6962_LEAF_HASH_PREFIX = Buffer.from([0x00]); 14160 const RFC6962_NODE_HASH_PREFIX = Buffer.from([0x01]); 14161 function verifyMerkleInclusion(entry) { 14162 const inclusionProof = entry.inclusionProof; 14163 const logIndex = BigInt(inclusionProof.logIndex); 14164 const treeSize = BigInt(inclusionProof.treeSize); 14165 if (logIndex < 0n || logIndex >= treeSize) { 14166 throw new error_1.VerificationError({ 14167 code: 'TLOG_INCLUSION_PROOF_ERROR', 14168 message: `invalid index: ${logIndex}`, 14169 }); 14170 } 14171 // Figure out which subset of hashes corresponds to the inner and border 14172 // nodes 14173 const { inner, border } = decompInclProof(logIndex, treeSize); 14174 if (inclusionProof.hashes.length !== inner + border) { 14175 throw new error_1.VerificationError({ 14176 code: 'TLOG_INCLUSION_PROOF_ERROR', 14177 message: 'invalid hash count', 14178 }); 14179 } 14180 const innerHashes = inclusionProof.hashes.slice(0, inner); 14181 const borderHashes = inclusionProof.hashes.slice(inner); 14182 // The entry's hash is the leaf hash 14183 const leafHash = hashLeaf(entry.canonicalizedBody); 14184 // Chain the hashes belonging to the inner and border portions 14185 const calculatedHash = chainBorderRight(chainInner(leafHash, innerHashes, logIndex), borderHashes); 14186 // Calculated hash should match the root hash in the inclusion proof 14187 if (!core_1.crypto.bufferEqual(calculatedHash, inclusionProof.rootHash)) { 14188 throw new error_1.VerificationError({ 14189 code: 'TLOG_INCLUSION_PROOF_ERROR', 14190 message: 'calculated root hash does not match inclusion proof', 14191 }); 14192 } 14193 } 14194 exports.verifyMerkleInclusion = verifyMerkleInclusion; 14195 // Breaks down inclusion proof for a leaf at the specified index in a tree of 14196 // the specified size. The split point is where paths to the index leaf and 14197 // the (size - 1) leaf diverge. Returns lengths of the bottom and upper proof 14198 // parts. 14199 function decompInclProof(index, size) { 14200 const inner = innerProofSize(index, size); 14201 const border = onesCount(index >> BigInt(inner)); 14202 return { inner, border }; 14203 } 14204 // Computes a subtree hash for a node on or below the tree's right border. 14205 // Assumes the provided proof hashes are ordered from lower to higher levels 14206 // and seed is the initial hash of the node specified by the index. 14207 function chainInner(seed, hashes, index) { 14208 return hashes.reduce((acc, h, i) => { 14209 if ((index >> BigInt(i)) & BigInt(1)) { 14210 return hashChildren(h, acc); 14211 } 14212 else { 14213 return hashChildren(acc, h); 14214 } 14215 }, seed); 14216 } 14217 // Computes a subtree hash for nodes along the tree's right border. 14218 function chainBorderRight(seed, hashes) { 14219 return hashes.reduce((acc, h) => hashChildren(h, acc), seed); 14220 } 14221 function innerProofSize(index, size) { 14222 return bitLength(index ^ (size - BigInt(1))); 14223 } 14224 // Counts the number of ones in the binary representation of the given number. 14225 // https://en.wikipedia.org/wiki/Hamming_weight 14226 function onesCount(num) { 14227 return num.toString(2).split('1').length - 1; 14228 } 14229 // Returns the number of bits necessary to represent an integer in binary. 14230 function bitLength(n) { 14231 if (n === 0n) { 14232 return 0; 14233 } 14234 return n.toString(2).length; 14235 } 14236 // Hashing logic according to RFC6962. 14237 // https://datatracker.ietf.org/doc/html/rfc6962#section-2 14238 function hashChildren(left, right) { 14239 return core_1.crypto.hash(RFC6962_NODE_HASH_PREFIX, left, right); 14240 } 14241 function hashLeaf(leaf) { 14242 return core_1.crypto.hash(RFC6962_LEAF_HASH_PREFIX, leaf); 14243 } 14244 14245 14246 /***/ }), 14247 14248 /***/ 67527: 14249 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 14250 14251 "use strict"; 14252 14253 Object.defineProperty(exports, "__esModule", ({ value: true })); 14254 exports.verifyTLogSET = void 0; 14255 /* 14256 Copyright 2023 The Sigstore Authors. 14257 14258 Licensed under the Apache License, Version 2.0 (the "License"); 14259 you may not use this file except in compliance with the License. 14260 You may obtain a copy of the License at 14261 14262 http://www.apache.org/licenses/LICENSE-2.0 14263 14264 Unless required by applicable law or agreed to in writing, software 14265 distributed under the License is distributed on an "AS IS" BASIS, 14266 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14267 See the License for the specific language governing permissions and 14268 limitations under the License. 14269 */ 14270 const core_1 = __nccwpck_require__(3352); 14271 const error_1 = __nccwpck_require__(58948); 14272 const trust_1 = __nccwpck_require__(14503); 14273 // Verifies the SET for the given entry against the list of trusted 14274 // transparency logs. Returns true if the SET can be verified against at least 14275 // one of the trusted logs; otherwise, returns false. 14276 function verifyTLogSET(entry, tlogs) { 14277 // Filter the list of tlog instances to only those which might be able to 14278 // verify the SET 14279 const validTLogs = (0, trust_1.filterTLogAuthorities)(tlogs, { 14280 logID: entry.logId.keyId, 14281 targetDate: new Date(Number(entry.integratedTime) * 1000), 14282 }); 14283 // Check to see if we can verify the SET against any of the valid tlogs 14284 const verified = validTLogs.some((tlog) => { 14285 // Re-create the original Rekor verification payload 14286 const payload = toVerificationPayload(entry); 14287 // Canonicalize the payload and turn into a buffer for verification 14288 const data = Buffer.from(core_1.json.canonicalize(payload), 'utf8'); 14289 // Extract the SET from the tlog entry 14290 const signature = entry.inclusionPromise.signedEntryTimestamp; 14291 return core_1.crypto.verify(data, tlog.publicKey, signature); 14292 }); 14293 if (!verified) { 14294 throw new error_1.VerificationError({ 14295 code: 'TLOG_INCLUSION_PROMISE_ERROR', 14296 message: 'inclusion promise could not be verified', 14297 }); 14298 } 14299 } 14300 exports.verifyTLogSET = verifyTLogSET; 14301 // Returns a properly formatted "VerificationPayload" for one of the 14302 // transaction log entires in the given bundle which can be used for SET 14303 // verification. 14304 function toVerificationPayload(entry) { 14305 const { integratedTime, logIndex, logId, canonicalizedBody } = entry; 14306 return { 14307 body: canonicalizedBody.toString('base64'), 14308 integratedTime: Number(integratedTime), 14309 logIndex: Number(logIndex), 14310 logID: logId.keyId.toString('hex'), 14311 }; 14312 } 14313 14314 14315 /***/ }), 14316 14317 /***/ 2574: 14318 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 14319 14320 "use strict"; 14321 14322 Object.defineProperty(exports, "__esModule", ({ value: true })); 14323 exports.verifyRFC3161Timestamp = void 0; 14324 const core_1 = __nccwpck_require__(3352); 14325 const error_1 = __nccwpck_require__(58948); 14326 const certificate_1 = __nccwpck_require__(88766); 14327 const trust_1 = __nccwpck_require__(14503); 14328 function verifyRFC3161Timestamp(timestamp, data, timestampAuthorities) { 14329 const signingTime = timestamp.signingTime; 14330 // Filter for CAs which were valid at the time of signing 14331 timestampAuthorities = (0, trust_1.filterCertAuthorities)(timestampAuthorities, { 14332 start: signingTime, 14333 end: signingTime, 14334 }); 14335 // Filter for CAs which match serial and issuer embedded in the timestamp 14336 timestampAuthorities = filterCAsBySerialAndIssuer(timestampAuthorities, { 14337 serialNumber: timestamp.signerSerialNumber, 14338 issuer: timestamp.signerIssuer, 14339 }); 14340 // Check that we can verify the timestamp with AT LEAST ONE of the remaining 14341 // CAs 14342 const verified = timestampAuthorities.some((ca) => { 14343 try { 14344 verifyTimestampForCA(timestamp, data, ca); 14345 return true; 14346 } 14347 catch (e) { 14348 return false; 14349 } 14350 }); 14351 if (!verified) { 14352 throw new error_1.VerificationError({ 14353 code: 'TIMESTAMP_ERROR', 14354 message: 'timestamp could not be verified', 14355 }); 14356 } 14357 } 14358 exports.verifyRFC3161Timestamp = verifyRFC3161Timestamp; 14359 function verifyTimestampForCA(timestamp, data, ca) { 14360 const [leaf, ...cas] = ca.certChain; 14361 const signingKey = core_1.crypto.createPublicKey(leaf.publicKey); 14362 const signingTime = timestamp.signingTime; 14363 // Verify the certificate chain for the provided CA 14364 try { 14365 new certificate_1.CertificateChainVerifier({ 14366 untrustedCert: leaf, 14367 trustedCerts: cas, 14368 }).verify(); 14369 } 14370 catch (e) { 14371 throw new error_1.VerificationError({ 14372 code: 'TIMESTAMP_ERROR', 14373 message: 'invalid certificate chain', 14374 }); 14375 } 14376 // Check that all of the CA certs were valid at the time of signing 14377 const validAtSigningTime = ca.certChain.every((cert) => cert.validForDate(signingTime)); 14378 if (!validAtSigningTime) { 14379 throw new error_1.VerificationError({ 14380 code: 'TIMESTAMP_ERROR', 14381 message: 'timestamp was signed with an expired certificate', 14382 }); 14383 } 14384 // Check that the signing certificate's key can be used to verify the 14385 // timestamp signature. 14386 timestamp.verify(data, signingKey); 14387 } 14388 // Filters the list of CAs to those which have a leaf signing certificate which 14389 // matches the given serial number and issuer. 14390 function filterCAsBySerialAndIssuer(timestampAuthorities, criteria) { 14391 return timestampAuthorities.filter((ca) => ca.certChain.length > 0 && 14392 core_1.crypto.bufferEqual(ca.certChain[0].serialNumber, criteria.serialNumber) && 14393 core_1.crypto.bufferEqual(ca.certChain[0].issuer, criteria.issuer)); 14394 } 14395 14396 14397 /***/ }), 14398 14399 /***/ 4625: 14400 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 14401 14402 "use strict"; 14403 14404 Object.defineProperty(exports, "__esModule", ({ value: true })); 14405 exports.verifyDSSETLogBody = void 0; 14406 /* 14407 Copyright 2023 The Sigstore Authors. 14408 14409 Licensed under the Apache License, Version 2.0 (the "License"); 14410 you may not use this file except in compliance with the License. 14411 You may obtain a copy of the License at 14412 14413 http://www.apache.org/licenses/LICENSE-2.0 14414 14415 Unless required by applicable law or agreed to in writing, software 14416 distributed under the License is distributed on an "AS IS" BASIS, 14417 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14418 See the License for the specific language governing permissions and 14419 limitations under the License. 14420 */ 14421 const error_1 = __nccwpck_require__(58948); 14422 // Compare the given intoto tlog entry to the given bundle 14423 function verifyDSSETLogBody(tlogEntry, content) { 14424 switch (tlogEntry.apiVersion) { 14425 case '0.0.1': 14426 return verifyDSSE001TLogBody(tlogEntry, content); 14427 default: 14428 throw new error_1.VerificationError({ 14429 code: 'TLOG_BODY_ERROR', 14430 message: `unsupported dsse version: ${tlogEntry.apiVersion}`, 14431 }); 14432 } 14433 } 14434 exports.verifyDSSETLogBody = verifyDSSETLogBody; 14435 // Compare the given dsse v0.0.1 tlog entry to the given DSSE envelope. 14436 function verifyDSSE001TLogBody(tlogEntry, content) { 14437 // Ensure the bundle's DSSE only contains a single signature 14438 if (tlogEntry.spec.signatures?.length !== 1) { 14439 throw new error_1.VerificationError({ 14440 code: 'TLOG_BODY_ERROR', 14441 message: 'signature count mismatch', 14442 }); 14443 } 14444 const tlogSig = tlogEntry.spec.signatures[0].signature; 14445 // Ensure that the signature in the bundle's DSSE matches tlog entry 14446 if (!content.compareSignature(Buffer.from(tlogSig, 'base64'))) 14447 throw new error_1.VerificationError({ 14448 code: 'TLOG_BODY_ERROR', 14449 message: 'tlog entry signature mismatch', 14450 }); 14451 // Ensure the digest of the bundle's DSSE payload matches the digest in the 14452 // tlog entry 14453 const tlogHash = tlogEntry.spec.payloadHash?.value || ''; 14454 if (!content.compareDigest(Buffer.from(tlogHash, 'hex'))) { 14455 throw new error_1.VerificationError({ 14456 code: 'TLOG_BODY_ERROR', 14457 message: 'DSSE payload hash mismatch', 14458 }); 14459 } 14460 } 14461 14462 14463 /***/ }), 14464 14465 /***/ 935: 14466 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 14467 14468 "use strict"; 14469 14470 Object.defineProperty(exports, "__esModule", ({ value: true })); 14471 exports.verifyHashedRekordTLogBody = void 0; 14472 /* 14473 Copyright 2023 The Sigstore Authors. 14474 14475 Licensed under the Apache License, Version 2.0 (the "License"); 14476 you may not use this file except in compliance with the License. 14477 You may obtain a copy of the License at 14478 14479 http://www.apache.org/licenses/LICENSE-2.0 14480 14481 Unless required by applicable law or agreed to in writing, software 14482 distributed under the License is distributed on an "AS IS" BASIS, 14483 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14484 See the License for the specific language governing permissions and 14485 limitations under the License. 14486 */ 14487 const error_1 = __nccwpck_require__(58948); 14488 // Compare the given hashedrekord tlog entry to the given bundle 14489 function verifyHashedRekordTLogBody(tlogEntry, content) { 14490 switch (tlogEntry.apiVersion) { 14491 case '0.0.1': 14492 return verifyHashedrekord001TLogBody(tlogEntry, content); 14493 default: 14494 throw new error_1.VerificationError({ 14495 code: 'TLOG_BODY_ERROR', 14496 message: `unsupported hashedrekord version: ${tlogEntry.apiVersion}`, 14497 }); 14498 } 14499 } 14500 exports.verifyHashedRekordTLogBody = verifyHashedRekordTLogBody; 14501 // Compare the given hashedrekord v0.0.1 tlog entry to the given message 14502 // signature 14503 function verifyHashedrekord001TLogBody(tlogEntry, content) { 14504 // Ensure that the bundles message signature matches the tlog entry 14505 const tlogSig = tlogEntry.spec.signature.content || ''; 14506 if (!content.compareSignature(Buffer.from(tlogSig, 'base64'))) { 14507 throw new error_1.VerificationError({ 14508 code: 'TLOG_BODY_ERROR', 14509 message: 'signature mismatch', 14510 }); 14511 } 14512 // Ensure that the bundle's message digest matches the tlog entry 14513 const tlogDigest = tlogEntry.spec.data.hash?.value || ''; 14514 if (!content.compareDigest(Buffer.from(tlogDigest, 'hex'))) { 14515 throw new error_1.VerificationError({ 14516 code: 'TLOG_BODY_ERROR', 14517 message: 'digest mismatch', 14518 }); 14519 } 14520 } 14521 14522 14523 /***/ }), 14524 14525 /***/ 24566: 14526 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 14527 14528 "use strict"; 14529 14530 Object.defineProperty(exports, "__esModule", ({ value: true })); 14531 exports.verifyTLogBody = void 0; 14532 /* 14533 Copyright 2023 The Sigstore Authors. 14534 14535 Licensed under the Apache License, Version 2.0 (the "License"); 14536 you may not use this file except in compliance with the License. 14537 You may obtain a copy of the License at 14538 14539 http://www.apache.org/licenses/LICENSE-2.0 14540 14541 Unless required by applicable law or agreed to in writing, software 14542 distributed under the License is distributed on an "AS IS" BASIS, 14543 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14544 See the License for the specific language governing permissions and 14545 limitations under the License. 14546 */ 14547 const error_1 = __nccwpck_require__(58948); 14548 const dsse_1 = __nccwpck_require__(4625); 14549 const hashedrekord_1 = __nccwpck_require__(935); 14550 const intoto_1 = __nccwpck_require__(23109); 14551 // Verifies that the given tlog entry matches the supplied signature content. 14552 function verifyTLogBody(entry, sigContent) { 14553 const { kind, version } = entry.kindVersion; 14554 const body = JSON.parse(entry.canonicalizedBody.toString('utf8')); 14555 if (kind !== body.kind || version !== body.apiVersion) { 14556 throw new error_1.VerificationError({ 14557 code: 'TLOG_BODY_ERROR', 14558 message: `kind/version mismatch - expected: ${kind}/${version}, received: ${body.kind}/${body.apiVersion}`, 14559 }); 14560 } 14561 switch (body.kind) { 14562 case 'dsse': 14563 return (0, dsse_1.verifyDSSETLogBody)(body, sigContent); 14564 case 'intoto': 14565 return (0, intoto_1.verifyIntotoTLogBody)(body, sigContent); 14566 case 'hashedrekord': 14567 return (0, hashedrekord_1.verifyHashedRekordTLogBody)(body, sigContent); 14568 /* istanbul ignore next */ 14569 default: 14570 throw new error_1.VerificationError({ 14571 code: 'TLOG_BODY_ERROR', 14572 message: `unsupported kind: ${kind}`, 14573 }); 14574 } 14575 } 14576 exports.verifyTLogBody = verifyTLogBody; 14577 14578 14579 /***/ }), 14580 14581 /***/ 23109: 14582 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 14583 14584 "use strict"; 14585 14586 Object.defineProperty(exports, "__esModule", ({ value: true })); 14587 exports.verifyIntotoTLogBody = void 0; 14588 /* 14589 Copyright 2023 The Sigstore Authors. 14590 14591 Licensed under the Apache License, Version 2.0 (the "License"); 14592 you may not use this file except in compliance with the License. 14593 You may obtain a copy of the License at 14594 14595 http://www.apache.org/licenses/LICENSE-2.0 14596 14597 Unless required by applicable law or agreed to in writing, software 14598 distributed under the License is distributed on an "AS IS" BASIS, 14599 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14600 See the License for the specific language governing permissions and 14601 limitations under the License. 14602 */ 14603 const error_1 = __nccwpck_require__(58948); 14604 // Compare the given intoto tlog entry to the given bundle 14605 function verifyIntotoTLogBody(tlogEntry, content) { 14606 switch (tlogEntry.apiVersion) { 14607 case '0.0.2': 14608 return verifyIntoto002TLogBody(tlogEntry, content); 14609 default: 14610 throw new error_1.VerificationError({ 14611 code: 'TLOG_BODY_ERROR', 14612 message: `unsupported intoto version: ${tlogEntry.apiVersion}`, 14613 }); 14614 } 14615 } 14616 exports.verifyIntotoTLogBody = verifyIntotoTLogBody; 14617 // Compare the given intoto v0.0.2 tlog entry to the given DSSE envelope. 14618 function verifyIntoto002TLogBody(tlogEntry, content) { 14619 // Ensure the bundle's DSSE contains a single signature 14620 if (tlogEntry.spec.content.envelope.signatures?.length !== 1) { 14621 throw new error_1.VerificationError({ 14622 code: 'TLOG_BODY_ERROR', 14623 message: 'signature count mismatch', 14624 }); 14625 } 14626 // Signature is double-base64-encoded in the tlog entry 14627 const tlogSig = base64Decode(tlogEntry.spec.content.envelope.signatures[0].sig); 14628 // Ensure that the signature in the bundle's DSSE matches tlog entry 14629 if (!content.compareSignature(Buffer.from(tlogSig, 'base64'))) { 14630 throw new error_1.VerificationError({ 14631 code: 'TLOG_BODY_ERROR', 14632 message: 'tlog entry signature mismatch', 14633 }); 14634 } 14635 // Ensure the digest of the bundle's DSSE payload matches the digest in the 14636 // tlog entry 14637 const tlogHash = tlogEntry.spec.content.payloadHash?.value || ''; 14638 if (!content.compareDigest(Buffer.from(tlogHash, 'hex'))) { 14639 throw new error_1.VerificationError({ 14640 code: 'TLOG_BODY_ERROR', 14641 message: 'DSSE payload hash mismatch', 14642 }); 14643 } 14644 } 14645 function base64Decode(str) { 14646 return Buffer.from(str, 'base64').toString('utf-8'); 14647 } 14648 14649 14650 /***/ }), 14651 14652 /***/ 26906: 14653 /***/ ((__unused_webpack_module, exports) => { 14654 14655 "use strict"; 14656 14657 Object.defineProperty(exports, "__esModule", ({ value: true })); 14658 exports.filterTLogAuthorities = exports.filterCertAuthorities = void 0; 14659 function filterCertAuthorities(certAuthorities, criteria) { 14660 return certAuthorities.filter((ca) => { 14661 return (ca.validFor.start <= criteria.start && ca.validFor.end >= criteria.end); 14662 }); 14663 } 14664 exports.filterCertAuthorities = filterCertAuthorities; 14665 // Filter the list of tlog instances to only those which match the given log 14666 // ID and have public keys which are valid for the given integrated time. 14667 function filterTLogAuthorities(tlogAuthorities, criteria) { 14668 return tlogAuthorities.filter((tlog) => { 14669 // If we're filtering by log ID and the log IDs don't match, we can't use 14670 // this tlog 14671 if (criteria.logID && !tlog.logID.equals(criteria.logID)) { 14672 return false; 14673 } 14674 // Check that the integrated time is within the validFor range 14675 return (tlog.validFor.start <= criteria.targetDate && 14676 criteria.targetDate <= tlog.validFor.end); 14677 }); 14678 } 14679 exports.filterTLogAuthorities = filterTLogAuthorities; 14680 14681 14682 /***/ }), 14683 14684 /***/ 14503: 14685 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 14686 14687 "use strict"; 14688 14689 Object.defineProperty(exports, "__esModule", ({ value: true })); 14690 exports.toTrustMaterial = exports.filterTLogAuthorities = exports.filterCertAuthorities = void 0; 14691 /* 14692 Copyright 2023 The Sigstore Authors. 14693 14694 Licensed under the Apache License, Version 2.0 (the "License"); 14695 you may not use this file except in compliance with the License. 14696 You may obtain a copy of the License at 14697 14698 http://www.apache.org/licenses/LICENSE-2.0 14699 14700 Unless required by applicable law or agreed to in writing, software 14701 distributed under the License is distributed on an "AS IS" BASIS, 14702 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14703 See the License for the specific language governing permissions and 14704 limitations under the License. 14705 */ 14706 const core_1 = __nccwpck_require__(3352); 14707 const protobuf_specs_1 = __nccwpck_require__(60530); 14708 const error_1 = __nccwpck_require__(58948); 14709 const BEGINNING_OF_TIME = new Date(0); 14710 const END_OF_TIME = new Date(8640000000000000); 14711 var filter_1 = __nccwpck_require__(26906); 14712 Object.defineProperty(exports, "filterCertAuthorities", ({ enumerable: true, get: function () { return filter_1.filterCertAuthorities; } })); 14713 Object.defineProperty(exports, "filterTLogAuthorities", ({ enumerable: true, get: function () { return filter_1.filterTLogAuthorities; } })); 14714 function toTrustMaterial(root, keys) { 14715 const keyFinder = typeof keys === 'function' ? keys : keyLocator(keys); 14716 return { 14717 certificateAuthorities: root.certificateAuthorities.map(createCertAuthority), 14718 timestampAuthorities: root.timestampAuthorities.map(createCertAuthority), 14719 tlogs: root.tlogs.map(createTLogAuthority), 14720 ctlogs: root.ctlogs.map(createTLogAuthority), 14721 publicKey: keyFinder, 14722 }; 14723 } 14724 exports.toTrustMaterial = toTrustMaterial; 14725 function createTLogAuthority(tlogInstance) { 14726 const keyDetails = tlogInstance.publicKey.keyDetails; 14727 const keyType = keyDetails === protobuf_specs_1.PublicKeyDetails.PKCS1_RSA_PKCS1V5 || 14728 keyDetails === protobuf_specs_1.PublicKeyDetails.PKIX_RSA_PKCS1V5 || 14729 keyDetails === protobuf_specs_1.PublicKeyDetails.PKIX_RSA_PKCS1V15_2048_SHA256 || 14730 keyDetails === protobuf_specs_1.PublicKeyDetails.PKIX_RSA_PKCS1V15_3072_SHA256 || 14731 keyDetails === protobuf_specs_1.PublicKeyDetails.PKIX_RSA_PKCS1V15_4096_SHA256 14732 ? 'pkcs1' 14733 : 'spki'; 14734 return { 14735 logID: tlogInstance.logId.keyId, 14736 publicKey: core_1.crypto.createPublicKey(tlogInstance.publicKey.rawBytes, keyType), 14737 validFor: { 14738 start: tlogInstance.publicKey.validFor?.start || BEGINNING_OF_TIME, 14739 end: tlogInstance.publicKey.validFor?.end || END_OF_TIME, 14740 }, 14741 }; 14742 } 14743 function createCertAuthority(ca) { 14744 return { 14745 certChain: ca.certChain.certificates.map((cert) => { 14746 return core_1.X509Certificate.parse(cert.rawBytes); 14747 }), 14748 validFor: { 14749 start: ca.validFor?.start || BEGINNING_OF_TIME, 14750 end: ca.validFor?.end || END_OF_TIME, 14751 }, 14752 }; 14753 } 14754 function keyLocator(keys) { 14755 return (hint) => { 14756 const key = (keys || {})[hint]; 14757 if (!key) { 14758 throw new error_1.VerificationError({ 14759 code: 'PUBLIC_KEY_ERROR', 14760 message: `key not found: ${hint}`, 14761 }); 14762 } 14763 return { 14764 publicKey: core_1.crypto.createPublicKey(key.rawBytes), 14765 validFor: (date) => { 14766 return ((key.validFor?.start || BEGINNING_OF_TIME) <= date && 14767 (key.validFor?.end || END_OF_TIME) >= date); 14768 }, 14769 }; 14770 }; 14771 } 14772 14773 14774 /***/ }), 14775 14776 /***/ 95456: 14777 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 14778 14779 "use strict"; 14780 14781 Object.defineProperty(exports, "__esModule", ({ value: true })); 14782 exports.Verifier = void 0; 14783 /* 14784 Copyright 2023 The Sigstore Authors. 14785 14786 Licensed under the Apache License, Version 2.0 (the "License"); 14787 you may not use this file except in compliance with the License. 14788 You may obtain a copy of the License at 14789 14790 http://www.apache.org/licenses/LICENSE-2.0 14791 14792 Unless required by applicable law or agreed to in writing, software 14793 distributed under the License is distributed on an "AS IS" BASIS, 14794 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14795 See the License for the specific language governing permissions and 14796 limitations under the License. 14797 */ 14798 const util_1 = __nccwpck_require__(73837); 14799 const error_1 = __nccwpck_require__(58948); 14800 const key_1 = __nccwpck_require__(96829); 14801 const policy_1 = __nccwpck_require__(83978); 14802 const timestamp_1 = __nccwpck_require__(29511); 14803 const tlog_1 = __nccwpck_require__(24566); 14804 class Verifier { 14805 constructor(trustMaterial, options = {}) { 14806 this.trustMaterial = trustMaterial; 14807 this.options = { 14808 ctlogThreshold: options.ctlogThreshold ?? 1, 14809 tlogThreshold: options.tlogThreshold ?? 1, 14810 tsaThreshold: options.tsaThreshold ?? 0, 14811 }; 14812 } 14813 verify(entity, policy) { 14814 const timestamps = this.verifyTimestamps(entity); 14815 const signer = this.verifySigningKey(entity, timestamps); 14816 this.verifyTLogs(entity); 14817 this.verifySignature(entity, signer); 14818 if (policy) { 14819 this.verifyPolicy(policy, signer.identity || {}); 14820 } 14821 return signer; 14822 } 14823 // Checks that all of the timestamps in the entity are valid and returns them 14824 verifyTimestamps(entity) { 14825 let tlogCount = 0; 14826 let tsaCount = 0; 14827 const timestamps = entity.timestamps.map((timestamp) => { 14828 switch (timestamp.$case) { 14829 case 'timestamp-authority': 14830 tsaCount++; 14831 return (0, timestamp_1.verifyTSATimestamp)(timestamp.timestamp, entity.signature.signature, this.trustMaterial.timestampAuthorities); 14832 case 'transparency-log': 14833 tlogCount++; 14834 return (0, timestamp_1.verifyTLogTimestamp)(timestamp.tlogEntry, this.trustMaterial.tlogs); 14835 } 14836 }); 14837 // Check for duplicate timestamps 14838 if (containsDupes(timestamps)) { 14839 throw new error_1.VerificationError({ 14840 code: 'TIMESTAMP_ERROR', 14841 message: 'duplicate timestamp', 14842 }); 14843 } 14844 if (tlogCount < this.options.tlogThreshold) { 14845 throw new error_1.VerificationError({ 14846 code: 'TIMESTAMP_ERROR', 14847 message: `expected ${this.options.tlogThreshold} tlog timestamps, got ${tlogCount}`, 14848 }); 14849 } 14850 if (tsaCount < this.options.tsaThreshold) { 14851 throw new error_1.VerificationError({ 14852 code: 'TIMESTAMP_ERROR', 14853 message: `expected ${this.options.tsaThreshold} tsa timestamps, got ${tsaCount}`, 14854 }); 14855 } 14856 return timestamps.map((t) => t.timestamp); 14857 } 14858 // Checks that the signing key is valid for all of the the supplied timestamps 14859 // and returns the signer. 14860 verifySigningKey({ key }, timestamps) { 14861 switch (key.$case) { 14862 case 'public-key': { 14863 return (0, key_1.verifyPublicKey)(key.hint, timestamps, this.trustMaterial); 14864 } 14865 case 'certificate': { 14866 const result = (0, key_1.verifyCertificate)(key.certificate, timestamps, this.trustMaterial); 14867 /* istanbul ignore next - no fixture */ 14868 if (containsDupes(result.scts)) { 14869 throw new error_1.VerificationError({ 14870 code: 'CERTIFICATE_ERROR', 14871 message: 'duplicate SCT', 14872 }); 14873 } 14874 if (result.scts.length < this.options.ctlogThreshold) { 14875 throw new error_1.VerificationError({ 14876 code: 'CERTIFICATE_ERROR', 14877 message: `expected ${this.options.ctlogThreshold} SCTs, got ${result.scts.length}`, 14878 }); 14879 } 14880 return result.signer; 14881 } 14882 } 14883 } 14884 // Checks that the tlog entries are valid for the supplied content 14885 verifyTLogs({ signature: content, tlogEntries }) { 14886 tlogEntries.forEach((entry) => (0, tlog_1.verifyTLogBody)(entry, content)); 14887 } 14888 // Checks that the signature is valid for the supplied content 14889 verifySignature(entity, signer) { 14890 if (!entity.signature.verifySignature(signer.key)) { 14891 throw new error_1.VerificationError({ 14892 code: 'SIGNATURE_ERROR', 14893 message: 'signature verification failed', 14894 }); 14895 } 14896 } 14897 verifyPolicy(policy, identity) { 14898 // Check the subject alternative name of the signer matches the policy 14899 if (policy.subjectAlternativeName) { 14900 (0, policy_1.verifySubjectAlternativeName)(policy.subjectAlternativeName, identity.subjectAlternativeName); 14901 } 14902 // Check that the extensions of the signer match the policy 14903 if (policy.extensions) { 14904 (0, policy_1.verifyExtensions)(policy.extensions, identity.extensions); 14905 } 14906 } 14907 } 14908 exports.Verifier = Verifier; 14909 // Checks for duplicate items in the array. Objects are compared using 14910 // deep equality. 14911 function containsDupes(arr) { 14912 for (let i = 0; i < arr.length; i++) { 14913 for (let j = i + 1; j < arr.length; j++) { 14914 if ((0, util_1.isDeepStrictEqual)(arr[i], arr[j])) { 14915 return true; 14916 } 14917 } 14918 } 14919 return false; 14920 } 14921 14922 14923 /***/ }), 14924 14925 /***/ 19652: 14926 /***/ ((module) => { 14927 14928 const COMMA = ','; 14929 const COLON = ':'; 14930 const LEFT_SQUARE_BRACKET = '['; 14931 const RIGHT_SQUARE_BRACKET = ']'; 14932 const LEFT_CURLY_BRACKET = '{'; 14933 const RIGHT_CURLY_BRACKET = '}'; 14934 14935 // Recursively encodes the supplied object according to the canonical JSON form 14936 // as specified at http://wiki.laptop.org/go/Canonical_JSON. It's a restricted 14937 // dialect of JSON in which keys are lexically sorted, floats are not allowed, 14938 // and only double quotes and backslashes are escaped. 14939 function canonicalize(object) { 14940 const buffer = []; 14941 if (typeof object === 'string') { 14942 buffer.push(canonicalizeString(object)); 14943 } else if (typeof object === 'boolean') { 14944 buffer.push(JSON.stringify(object)); 14945 } else if (Number.isInteger(object)) { 14946 buffer.push(JSON.stringify(object)); 14947 } else if (object === null) { 14948 buffer.push(JSON.stringify(object)); 14949 } else if (Array.isArray(object)) { 14950 buffer.push(LEFT_SQUARE_BRACKET); 14951 let first = true; 14952 object.forEach((element) => { 14953 if (!first) { 14954 buffer.push(COMMA); 14955 } 14956 first = false; 14957 buffer.push(canonicalize(element)); 14958 }); 14959 buffer.push(RIGHT_SQUARE_BRACKET); 14960 } else if (typeof object === 'object') { 14961 buffer.push(LEFT_CURLY_BRACKET); 14962 let first = true; 14963 Object.keys(object) 14964 .sort() 14965 .forEach((property) => { 14966 if (!first) { 14967 buffer.push(COMMA); 14968 } 14969 first = false; 14970 buffer.push(canonicalizeString(property)); 14971 buffer.push(COLON); 14972 buffer.push(canonicalize(object[property])); 14973 }); 14974 buffer.push(RIGHT_CURLY_BRACKET); 14975 } else { 14976 throw new TypeError('cannot encode ' + object.toString()); 14977 } 14978 14979 return buffer.join(''); 14980 } 14981 14982 // String canonicalization consists of escaping backslash (\) and double 14983 // quote (") characters and wrapping the resulting string in double quotes. 14984 function canonicalizeString(string) { 14985 const escapedString = string.replace(/\\/g, '\\\\').replace(/"/g, '\\"'); 14986 return '"' + escapedString + '"'; 14987 } 14988 14989 module.exports = { 14990 canonicalize, 14991 }; 14992 14993 14994 /***/ }), 14995 14996 /***/ 60159: 14997 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 14998 14999 "use strict"; 15000 15001 var __importDefault = (this && this.__importDefault) || function (mod) { 15002 return (mod && mod.__esModule) ? mod : { "default": mod }; 15003 }; 15004 Object.defineProperty(exports, "__esModule", ({ value: true })); 15005 exports.Signed = exports.isMetadataKind = exports.MetadataKind = void 0; 15006 const util_1 = __importDefault(__nccwpck_require__(73837)); 15007 const error_1 = __nccwpck_require__(58448); 15008 const utils_1 = __nccwpck_require__(45688); 15009 const SPECIFICATION_VERSION = ['1', '0', '31']; 15010 var MetadataKind; 15011 (function (MetadataKind) { 15012 MetadataKind["Root"] = "root"; 15013 MetadataKind["Timestamp"] = "timestamp"; 15014 MetadataKind["Snapshot"] = "snapshot"; 15015 MetadataKind["Targets"] = "targets"; 15016 })(MetadataKind || (exports.MetadataKind = MetadataKind = {})); 15017 function isMetadataKind(value) { 15018 return (typeof value === 'string' && 15019 Object.values(MetadataKind).includes(value)); 15020 } 15021 exports.isMetadataKind = isMetadataKind; 15022 /*** 15023 * A base class for the signed part of TUF metadata. 15024 * 15025 * Objects with base class Signed are usually included in a ``Metadata`` object 15026 * on the signed attribute. This class provides attributes and methods that 15027 * are common for all TUF metadata types (roles). 15028 */ 15029 class Signed { 15030 constructor(options) { 15031 this.specVersion = options.specVersion || SPECIFICATION_VERSION.join('.'); 15032 const specList = this.specVersion.split('.'); 15033 if (!(specList.length === 2 || specList.length === 3) || 15034 !specList.every((item) => isNumeric(item))) { 15035 throw new error_1.ValueError('Failed to parse specVersion'); 15036 } 15037 // major version must match 15038 if (specList[0] != SPECIFICATION_VERSION[0]) { 15039 throw new error_1.ValueError('Unsupported specVersion'); 15040 } 15041 this.expires = options.expires || new Date().toISOString(); 15042 this.version = options.version || 1; 15043 this.unrecognizedFields = options.unrecognizedFields || {}; 15044 } 15045 equals(other) { 15046 if (!(other instanceof Signed)) { 15047 return false; 15048 } 15049 return (this.specVersion === other.specVersion && 15050 this.expires === other.expires && 15051 this.version === other.version && 15052 util_1.default.isDeepStrictEqual(this.unrecognizedFields, other.unrecognizedFields)); 15053 } 15054 isExpired(referenceTime) { 15055 if (!referenceTime) { 15056 referenceTime = new Date(); 15057 } 15058 return referenceTime >= new Date(this.expires); 15059 } 15060 static commonFieldsFromJSON(data) { 15061 const { spec_version, expires, version, ...rest } = data; 15062 if (utils_1.guard.isDefined(spec_version) && !(typeof spec_version === 'string')) { 15063 throw new TypeError('spec_version must be a string'); 15064 } 15065 if (utils_1.guard.isDefined(expires) && !(typeof expires === 'string')) { 15066 throw new TypeError('expires must be a string'); 15067 } 15068 if (utils_1.guard.isDefined(version) && !(typeof version === 'number')) { 15069 throw new TypeError('version must be a number'); 15070 } 15071 return { 15072 specVersion: spec_version, 15073 expires, 15074 version, 15075 unrecognizedFields: rest, 15076 }; 15077 } 15078 } 15079 exports.Signed = Signed; 15080 function isNumeric(str) { 15081 return !isNaN(Number(str)); 15082 } 15083 15084 15085 /***/ }), 15086 15087 /***/ 71662: 15088 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 15089 15090 "use strict"; 15091 15092 var __importDefault = (this && this.__importDefault) || function (mod) { 15093 return (mod && mod.__esModule) ? mod : { "default": mod }; 15094 }; 15095 Object.defineProperty(exports, "__esModule", ({ value: true })); 15096 exports.Delegations = void 0; 15097 const util_1 = __importDefault(__nccwpck_require__(73837)); 15098 const error_1 = __nccwpck_require__(58448); 15099 const key_1 = __nccwpck_require__(66697); 15100 const role_1 = __nccwpck_require__(49393); 15101 const utils_1 = __nccwpck_require__(45688); 15102 /** 15103 * A container object storing information about all delegations. 15104 * 15105 * Targets roles that are trusted to provide signed metadata files 15106 * describing targets with designated pathnames and/or further delegations. 15107 */ 15108 class Delegations { 15109 constructor(options) { 15110 this.keys = options.keys; 15111 this.unrecognizedFields = options.unrecognizedFields || {}; 15112 if (options.roles) { 15113 if (Object.keys(options.roles).some((roleName) => role_1.TOP_LEVEL_ROLE_NAMES.includes(roleName))) { 15114 throw new error_1.ValueError('Delegated role name conflicts with top-level role name'); 15115 } 15116 } 15117 this.succinctRoles = options.succinctRoles; 15118 this.roles = options.roles; 15119 } 15120 equals(other) { 15121 if (!(other instanceof Delegations)) { 15122 return false; 15123 } 15124 return (util_1.default.isDeepStrictEqual(this.keys, other.keys) && 15125 util_1.default.isDeepStrictEqual(this.roles, other.roles) && 15126 util_1.default.isDeepStrictEqual(this.unrecognizedFields, other.unrecognizedFields) && 15127 util_1.default.isDeepStrictEqual(this.succinctRoles, other.succinctRoles)); 15128 } 15129 *rolesForTarget(targetPath) { 15130 if (this.roles) { 15131 for (const role of Object.values(this.roles)) { 15132 if (role.isDelegatedPath(targetPath)) { 15133 yield { role: role.name, terminating: role.terminating }; 15134 } 15135 } 15136 } 15137 else if (this.succinctRoles) { 15138 yield { 15139 role: this.succinctRoles.getRoleForTarget(targetPath), 15140 terminating: true, 15141 }; 15142 } 15143 } 15144 toJSON() { 15145 const json = { 15146 keys: keysToJSON(this.keys), 15147 ...this.unrecognizedFields, 15148 }; 15149 if (this.roles) { 15150 json.roles = rolesToJSON(this.roles); 15151 } 15152 else if (this.succinctRoles) { 15153 json.succinct_roles = this.succinctRoles.toJSON(); 15154 } 15155 return json; 15156 } 15157 static fromJSON(data) { 15158 const { keys, roles, succinct_roles, ...unrecognizedFields } = data; 15159 let succinctRoles; 15160 if (utils_1.guard.isObject(succinct_roles)) { 15161 succinctRoles = role_1.SuccinctRoles.fromJSON(succinct_roles); 15162 } 15163 return new Delegations({ 15164 keys: keysFromJSON(keys), 15165 roles: rolesFromJSON(roles), 15166 unrecognizedFields, 15167 succinctRoles, 15168 }); 15169 } 15170 } 15171 exports.Delegations = Delegations; 15172 function keysToJSON(keys) { 15173 return Object.entries(keys).reduce((acc, [keyId, key]) => ({ 15174 ...acc, 15175 [keyId]: key.toJSON(), 15176 }), {}); 15177 } 15178 function rolesToJSON(roles) { 15179 return Object.values(roles).map((role) => role.toJSON()); 15180 } 15181 function keysFromJSON(data) { 15182 if (!utils_1.guard.isObjectRecord(data)) { 15183 throw new TypeError('keys is malformed'); 15184 } 15185 return Object.entries(data).reduce((acc, [keyID, keyData]) => ({ 15186 ...acc, 15187 [keyID]: key_1.Key.fromJSON(keyID, keyData), 15188 }), {}); 15189 } 15190 function rolesFromJSON(data) { 15191 let roleMap; 15192 if (utils_1.guard.isDefined(data)) { 15193 if (!utils_1.guard.isObjectArray(data)) { 15194 throw new TypeError('roles is malformed'); 15195 } 15196 roleMap = data.reduce((acc, role) => { 15197 const delegatedRole = role_1.DelegatedRole.fromJSON(role); 15198 return { 15199 ...acc, 15200 [delegatedRole.name]: delegatedRole, 15201 }; 15202 }, {}); 15203 } 15204 return roleMap; 15205 } 15206 15207 15208 /***/ }), 15209 15210 /***/ 58448: 15211 /***/ ((__unused_webpack_module, exports) => { 15212 15213 "use strict"; 15214 15215 Object.defineProperty(exports, "__esModule", ({ value: true })); 15216 exports.UnsupportedAlgorithmError = exports.CryptoError = exports.LengthOrHashMismatchError = exports.UnsignedMetadataError = exports.RepositoryError = exports.ValueError = void 0; 15217 // An error about insufficient values 15218 class ValueError extends Error { 15219 } 15220 exports.ValueError = ValueError; 15221 // An error with a repository's state, such as a missing file. 15222 // It covers all exceptions that come from the repository side when 15223 // looking from the perspective of users of metadata API or ngclient. 15224 class RepositoryError extends Error { 15225 } 15226 exports.RepositoryError = RepositoryError; 15227 // An error about metadata object with insufficient threshold of signatures. 15228 class UnsignedMetadataError extends RepositoryError { 15229 } 15230 exports.UnsignedMetadataError = UnsignedMetadataError; 15231 // An error while checking the length and hash values of an object. 15232 class LengthOrHashMismatchError extends RepositoryError { 15233 } 15234 exports.LengthOrHashMismatchError = LengthOrHashMismatchError; 15235 class CryptoError extends Error { 15236 } 15237 exports.CryptoError = CryptoError; 15238 class UnsupportedAlgorithmError extends CryptoError { 15239 } 15240 exports.UnsupportedAlgorithmError = UnsupportedAlgorithmError; 15241 15242 15243 /***/ }), 15244 15245 /***/ 51923: 15246 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 15247 15248 "use strict"; 15249 15250 var __importDefault = (this && this.__importDefault) || function (mod) { 15251 return (mod && mod.__esModule) ? mod : { "default": mod }; 15252 }; 15253 Object.defineProperty(exports, "__esModule", ({ value: true })); 15254 exports.TargetFile = exports.MetaFile = void 0; 15255 const crypto_1 = __importDefault(__nccwpck_require__(6113)); 15256 const util_1 = __importDefault(__nccwpck_require__(73837)); 15257 const error_1 = __nccwpck_require__(58448); 15258 const utils_1 = __nccwpck_require__(45688); 15259 // A container with information about a particular metadata file. 15260 // 15261 // This class is used for Timestamp and Snapshot metadata. 15262 class MetaFile { 15263 constructor(opts) { 15264 if (opts.version <= 0) { 15265 throw new error_1.ValueError('Metafile version must be at least 1'); 15266 } 15267 if (opts.length !== undefined) { 15268 validateLength(opts.length); 15269 } 15270 this.version = opts.version; 15271 this.length = opts.length; 15272 this.hashes = opts.hashes; 15273 this.unrecognizedFields = opts.unrecognizedFields || {}; 15274 } 15275 equals(other) { 15276 if (!(other instanceof MetaFile)) { 15277 return false; 15278 } 15279 return (this.version === other.version && 15280 this.length === other.length && 15281 util_1.default.isDeepStrictEqual(this.hashes, other.hashes) && 15282 util_1.default.isDeepStrictEqual(this.unrecognizedFields, other.unrecognizedFields)); 15283 } 15284 verify(data) { 15285 // Verifies that the given data matches the expected length. 15286 if (this.length !== undefined) { 15287 if (data.length !== this.length) { 15288 throw new error_1.LengthOrHashMismatchError(`Expected length ${this.length} but got ${data.length}`); 15289 } 15290 } 15291 // Verifies that the given data matches the supplied hashes. 15292 if (this.hashes) { 15293 Object.entries(this.hashes).forEach(([key, value]) => { 15294 let hash; 15295 try { 15296 hash = crypto_1.default.createHash(key); 15297 } 15298 catch (e) { 15299 throw new error_1.LengthOrHashMismatchError(`Hash algorithm ${key} not supported`); 15300 } 15301 const observedHash = hash.update(data).digest('hex'); 15302 if (observedHash !== value) { 15303 throw new error_1.LengthOrHashMismatchError(`Expected hash ${value} but got ${observedHash}`); 15304 } 15305 }); 15306 } 15307 } 15308 toJSON() { 15309 const json = { 15310 version: this.version, 15311 ...this.unrecognizedFields, 15312 }; 15313 if (this.length !== undefined) { 15314 json.length = this.length; 15315 } 15316 if (this.hashes) { 15317 json.hashes = this.hashes; 15318 } 15319 return json; 15320 } 15321 static fromJSON(data) { 15322 const { version, length, hashes, ...rest } = data; 15323 if (typeof version !== 'number') { 15324 throw new TypeError('version must be a number'); 15325 } 15326 if (utils_1.guard.isDefined(length) && typeof length !== 'number') { 15327 throw new TypeError('length must be a number'); 15328 } 15329 if (utils_1.guard.isDefined(hashes) && !utils_1.guard.isStringRecord(hashes)) { 15330 throw new TypeError('hashes must be string keys and values'); 15331 } 15332 return new MetaFile({ 15333 version, 15334 length, 15335 hashes, 15336 unrecognizedFields: rest, 15337 }); 15338 } 15339 } 15340 exports.MetaFile = MetaFile; 15341 // Container for info about a particular target file. 15342 // 15343 // This class is used for Target metadata. 15344 class TargetFile { 15345 constructor(opts) { 15346 validateLength(opts.length); 15347 this.length = opts.length; 15348 this.path = opts.path; 15349 this.hashes = opts.hashes; 15350 this.unrecognizedFields = opts.unrecognizedFields || {}; 15351 } 15352 get custom() { 15353 const custom = this.unrecognizedFields['custom']; 15354 if (!custom || Array.isArray(custom) || !(typeof custom === 'object')) { 15355 return {}; 15356 } 15357 return custom; 15358 } 15359 equals(other) { 15360 if (!(other instanceof TargetFile)) { 15361 return false; 15362 } 15363 return (this.length === other.length && 15364 this.path === other.path && 15365 util_1.default.isDeepStrictEqual(this.hashes, other.hashes) && 15366 util_1.default.isDeepStrictEqual(this.unrecognizedFields, other.unrecognizedFields)); 15367 } 15368 async verify(stream) { 15369 let observedLength = 0; 15370 // Create a digest for each hash algorithm 15371 const digests = Object.keys(this.hashes).reduce((acc, key) => { 15372 try { 15373 acc[key] = crypto_1.default.createHash(key); 15374 } 15375 catch (e) { 15376 throw new error_1.LengthOrHashMismatchError(`Hash algorithm ${key} not supported`); 15377 } 15378 return acc; 15379 }, {}); 15380 // Read stream chunk by chunk 15381 for await (const chunk of stream) { 15382 // Keep running tally of stream length 15383 observedLength += chunk.length; 15384 // Append chunk to each digest 15385 Object.values(digests).forEach((digest) => { 15386 digest.update(chunk); 15387 }); 15388 } 15389 // Verify length matches expected value 15390 if (observedLength !== this.length) { 15391 throw new error_1.LengthOrHashMismatchError(`Expected length ${this.length} but got ${observedLength}`); 15392 } 15393 // Verify each digest matches expected value 15394 Object.entries(digests).forEach(([key, value]) => { 15395 const expected = this.hashes[key]; 15396 const actual = value.digest('hex'); 15397 if (actual !== expected) { 15398 throw new error_1.LengthOrHashMismatchError(`Expected hash ${expected} but got ${actual}`); 15399 } 15400 }); 15401 } 15402 toJSON() { 15403 return { 15404 length: this.length, 15405 hashes: this.hashes, 15406 ...this.unrecognizedFields, 15407 }; 15408 } 15409 static fromJSON(path, data) { 15410 const { length, hashes, ...rest } = data; 15411 if (typeof length !== 'number') { 15412 throw new TypeError('length must be a number'); 15413 } 15414 if (!utils_1.guard.isStringRecord(hashes)) { 15415 throw new TypeError('hashes must have string keys and values'); 15416 } 15417 return new TargetFile({ 15418 length, 15419 path, 15420 hashes, 15421 unrecognizedFields: rest, 15422 }); 15423 } 15424 } 15425 exports.TargetFile = TargetFile; 15426 // Check that supplied length if valid 15427 function validateLength(length) { 15428 if (length < 0) { 15429 throw new error_1.ValueError('Length must be at least 0'); 15430 } 15431 } 15432 15433 15434 /***/ }), 15435 15436 /***/ 75833: 15437 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 15438 15439 "use strict"; 15440 15441 Object.defineProperty(exports, "__esModule", ({ value: true })); 15442 exports.Timestamp = exports.Targets = exports.Snapshot = exports.Signature = exports.Root = exports.Metadata = exports.Key = exports.TargetFile = exports.MetaFile = exports.ValueError = exports.MetadataKind = void 0; 15443 var base_1 = __nccwpck_require__(60159); 15444 Object.defineProperty(exports, "MetadataKind", ({ enumerable: true, get: function () { return base_1.MetadataKind; } })); 15445 var error_1 = __nccwpck_require__(58448); 15446 Object.defineProperty(exports, "ValueError", ({ enumerable: true, get: function () { return error_1.ValueError; } })); 15447 var file_1 = __nccwpck_require__(51923); 15448 Object.defineProperty(exports, "MetaFile", ({ enumerable: true, get: function () { return file_1.MetaFile; } })); 15449 Object.defineProperty(exports, "TargetFile", ({ enumerable: true, get: function () { return file_1.TargetFile; } })); 15450 var key_1 = __nccwpck_require__(66697); 15451 Object.defineProperty(exports, "Key", ({ enumerable: true, get: function () { return key_1.Key; } })); 15452 var metadata_1 = __nccwpck_require__(1593); 15453 Object.defineProperty(exports, "Metadata", ({ enumerable: true, get: function () { return metadata_1.Metadata; } })); 15454 var root_1 = __nccwpck_require__(9392); 15455 Object.defineProperty(exports, "Root", ({ enumerable: true, get: function () { return root_1.Root; } })); 15456 var signature_1 = __nccwpck_require__(54222); 15457 Object.defineProperty(exports, "Signature", ({ enumerable: true, get: function () { return signature_1.Signature; } })); 15458 var snapshot_1 = __nccwpck_require__(92326); 15459 Object.defineProperty(exports, "Snapshot", ({ enumerable: true, get: function () { return snapshot_1.Snapshot; } })); 15460 var targets_1 = __nccwpck_require__(5799); 15461 Object.defineProperty(exports, "Targets", ({ enumerable: true, get: function () { return targets_1.Targets; } })); 15462 var timestamp_1 = __nccwpck_require__(4042); 15463 Object.defineProperty(exports, "Timestamp", ({ enumerable: true, get: function () { return timestamp_1.Timestamp; } })); 15464 15465 15466 /***/ }), 15467 15468 /***/ 66697: 15469 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 15470 15471 "use strict"; 15472 15473 var __importDefault = (this && this.__importDefault) || function (mod) { 15474 return (mod && mod.__esModule) ? mod : { "default": mod }; 15475 }; 15476 Object.defineProperty(exports, "__esModule", ({ value: true })); 15477 exports.Key = void 0; 15478 const util_1 = __importDefault(__nccwpck_require__(73837)); 15479 const error_1 = __nccwpck_require__(58448); 15480 const utils_1 = __nccwpck_require__(45688); 15481 const key_1 = __nccwpck_require__(78725); 15482 // A container class representing the public portion of a Key. 15483 class Key { 15484 constructor(options) { 15485 const { keyID, keyType, scheme, keyVal, unrecognizedFields } = options; 15486 this.keyID = keyID; 15487 this.keyType = keyType; 15488 this.scheme = scheme; 15489 this.keyVal = keyVal; 15490 this.unrecognizedFields = unrecognizedFields || {}; 15491 } 15492 // Verifies the that the metadata.signatures contains a signature made with 15493 // this key and is correctly signed. 15494 verifySignature(metadata) { 15495 const signature = metadata.signatures[this.keyID]; 15496 if (!signature) 15497 throw new error_1.UnsignedMetadataError('no signature for key found in metadata'); 15498 if (!this.keyVal.public) 15499 throw new error_1.UnsignedMetadataError('no public key found'); 15500 const publicKey = (0, key_1.getPublicKey)({ 15501 keyType: this.keyType, 15502 scheme: this.scheme, 15503 keyVal: this.keyVal.public, 15504 }); 15505 const signedData = metadata.signed.toJSON(); 15506 try { 15507 if (!utils_1.crypto.verifySignature(signedData, publicKey, signature.sig)) { 15508 throw new error_1.UnsignedMetadataError(`failed to verify ${this.keyID} signature`); 15509 } 15510 } 15511 catch (error) { 15512 if (error instanceof error_1.UnsignedMetadataError) { 15513 throw error; 15514 } 15515 throw new error_1.UnsignedMetadataError(`failed to verify ${this.keyID} signature`); 15516 } 15517 } 15518 equals(other) { 15519 if (!(other instanceof Key)) { 15520 return false; 15521 } 15522 return (this.keyID === other.keyID && 15523 this.keyType === other.keyType && 15524 this.scheme === other.scheme && 15525 util_1.default.isDeepStrictEqual(this.keyVal, other.keyVal) && 15526 util_1.default.isDeepStrictEqual(this.unrecognizedFields, other.unrecognizedFields)); 15527 } 15528 toJSON() { 15529 return { 15530 keytype: this.keyType, 15531 scheme: this.scheme, 15532 keyval: this.keyVal, 15533 ...this.unrecognizedFields, 15534 }; 15535 } 15536 static fromJSON(keyID, data) { 15537 const { keytype, scheme, keyval, ...rest } = data; 15538 if (typeof keytype !== 'string') { 15539 throw new TypeError('keytype must be a string'); 15540 } 15541 if (typeof scheme !== 'string') { 15542 throw new TypeError('scheme must be a string'); 15543 } 15544 if (!utils_1.guard.isStringRecord(keyval)) { 15545 throw new TypeError('keyval must be a string record'); 15546 } 15547 return new Key({ 15548 keyID, 15549 keyType: keytype, 15550 scheme, 15551 keyVal: keyval, 15552 unrecognizedFields: rest, 15553 }); 15554 } 15555 } 15556 exports.Key = Key; 15557 15558 15559 /***/ }), 15560 15561 /***/ 1593: 15562 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 15563 15564 "use strict"; 15565 15566 var __importDefault = (this && this.__importDefault) || function (mod) { 15567 return (mod && mod.__esModule) ? mod : { "default": mod }; 15568 }; 15569 Object.defineProperty(exports, "__esModule", ({ value: true })); 15570 exports.Metadata = void 0; 15571 const canonical_json_1 = __nccwpck_require__(19652); 15572 const util_1 = __importDefault(__nccwpck_require__(73837)); 15573 const base_1 = __nccwpck_require__(60159); 15574 const error_1 = __nccwpck_require__(58448); 15575 const root_1 = __nccwpck_require__(9392); 15576 const signature_1 = __nccwpck_require__(54222); 15577 const snapshot_1 = __nccwpck_require__(92326); 15578 const targets_1 = __nccwpck_require__(5799); 15579 const timestamp_1 = __nccwpck_require__(4042); 15580 const utils_1 = __nccwpck_require__(45688); 15581 /*** 15582 * A container for signed TUF metadata. 15583 * 15584 * Provides methods to convert to and from json, read and write to and 15585 * from JSON and to create and verify metadata signatures. 15586 * 15587 * ``Metadata[T]`` is a generic container type where T can be any one type of 15588 * [``Root``, ``Timestamp``, ``Snapshot``, ``Targets``]. The purpose of this 15589 * is to allow static type checking of the signed attribute in code using 15590 * Metadata:: 15591 * 15592 * root_md = Metadata[Root].fromJSON("root.json") 15593 * # root_md type is now Metadata[Root]. This means signed and its 15594 * # attributes like consistent_snapshot are now statically typed and the 15595 * # types can be verified by static type checkers and shown by IDEs 15596 * 15597 * Using a type constraint is not required but not doing so means T is not a 15598 * specific type so static typing cannot happen. Note that the type constraint 15599 * ``[Root]`` is not validated at runtime (as pure annotations are not available 15600 * then). 15601 * 15602 * Apart from ``expires`` all of the arguments to the inner constructors have 15603 * reasonable default values for new metadata. 15604 */ 15605 class Metadata { 15606 constructor(signed, signatures, unrecognizedFields) { 15607 this.signed = signed; 15608 this.signatures = signatures || {}; 15609 this.unrecognizedFields = unrecognizedFields || {}; 15610 } 15611 sign(signer, append = true) { 15612 const bytes = Buffer.from((0, canonical_json_1.canonicalize)(this.signed.toJSON())); 15613 const signature = signer(bytes); 15614 if (!append) { 15615 this.signatures = {}; 15616 } 15617 this.signatures[signature.keyID] = signature; 15618 } 15619 verifyDelegate(delegatedRole, delegatedMetadata) { 15620 let role; 15621 let keys = {}; 15622 switch (this.signed.type) { 15623 case base_1.MetadataKind.Root: 15624 keys = this.signed.keys; 15625 role = this.signed.roles[delegatedRole]; 15626 break; 15627 case base_1.MetadataKind.Targets: 15628 if (!this.signed.delegations) { 15629 throw new error_1.ValueError(`No delegations found for ${delegatedRole}`); 15630 } 15631 keys = this.signed.delegations.keys; 15632 if (this.signed.delegations.roles) { 15633 role = this.signed.delegations.roles[delegatedRole]; 15634 } 15635 else if (this.signed.delegations.succinctRoles) { 15636 if (this.signed.delegations.succinctRoles.isDelegatedRole(delegatedRole)) { 15637 role = this.signed.delegations.succinctRoles; 15638 } 15639 } 15640 break; 15641 default: 15642 throw new TypeError('invalid metadata type'); 15643 } 15644 if (!role) { 15645 throw new error_1.ValueError(`no delegation found for ${delegatedRole}`); 15646 } 15647 const signingKeys = new Set(); 15648 role.keyIDs.forEach((keyID) => { 15649 const key = keys[keyID]; 15650 // If we dont' have the key, continue checking other keys 15651 if (!key) { 15652 return; 15653 } 15654 try { 15655 key.verifySignature(delegatedMetadata); 15656 signingKeys.add(key.keyID); 15657 } 15658 catch (error) { 15659 // continue 15660 } 15661 }); 15662 if (signingKeys.size < role.threshold) { 15663 throw new error_1.UnsignedMetadataError(`${delegatedRole} was signed by ${signingKeys.size}/${role.threshold} keys`); 15664 } 15665 } 15666 equals(other) { 15667 if (!(other instanceof Metadata)) { 15668 return false; 15669 } 15670 return (this.signed.equals(other.signed) && 15671 util_1.default.isDeepStrictEqual(this.signatures, other.signatures) && 15672 util_1.default.isDeepStrictEqual(this.unrecognizedFields, other.unrecognizedFields)); 15673 } 15674 toJSON() { 15675 const signatures = Object.values(this.signatures).map((signature) => { 15676 return signature.toJSON(); 15677 }); 15678 return { 15679 signatures, 15680 signed: this.signed.toJSON(), 15681 ...this.unrecognizedFields, 15682 }; 15683 } 15684 static fromJSON(type, data) { 15685 const { signed, signatures, ...rest } = data; 15686 if (!utils_1.guard.isDefined(signed) || !utils_1.guard.isObject(signed)) { 15687 throw new TypeError('signed is not defined'); 15688 } 15689 if (type !== signed._type) { 15690 throw new error_1.ValueError(`expected '${type}', got ${signed['_type']}`); 15691 } 15692 let signedObj; 15693 switch (type) { 15694 case base_1.MetadataKind.Root: 15695 signedObj = root_1.Root.fromJSON(signed); 15696 break; 15697 case base_1.MetadataKind.Timestamp: 15698 signedObj = timestamp_1.Timestamp.fromJSON(signed); 15699 break; 15700 case base_1.MetadataKind.Snapshot: 15701 signedObj = snapshot_1.Snapshot.fromJSON(signed); 15702 break; 15703 case base_1.MetadataKind.Targets: 15704 signedObj = targets_1.Targets.fromJSON(signed); 15705 break; 15706 default: 15707 throw new TypeError('invalid metadata type'); 15708 } 15709 const sigMap = signaturesFromJSON(signatures); 15710 return new Metadata(signedObj, sigMap, rest); 15711 } 15712 } 15713 exports.Metadata = Metadata; 15714 function signaturesFromJSON(data) { 15715 if (!utils_1.guard.isObjectArray(data)) { 15716 throw new TypeError('signatures is not an array'); 15717 } 15718 return data.reduce((acc, sigData) => { 15719 const signature = signature_1.Signature.fromJSON(sigData); 15720 return { ...acc, [signature.keyID]: signature }; 15721 }, {}); 15722 } 15723 15724 15725 /***/ }), 15726 15727 /***/ 49393: 15728 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 15729 15730 "use strict"; 15731 15732 var __importDefault = (this && this.__importDefault) || function (mod) { 15733 return (mod && mod.__esModule) ? mod : { "default": mod }; 15734 }; 15735 Object.defineProperty(exports, "__esModule", ({ value: true })); 15736 exports.SuccinctRoles = exports.DelegatedRole = exports.Role = exports.TOP_LEVEL_ROLE_NAMES = void 0; 15737 const crypto_1 = __importDefault(__nccwpck_require__(6113)); 15738 const minimatch_1 = __nccwpck_require__(54878); 15739 const util_1 = __importDefault(__nccwpck_require__(73837)); 15740 const error_1 = __nccwpck_require__(58448); 15741 const utils_1 = __nccwpck_require__(45688); 15742 exports.TOP_LEVEL_ROLE_NAMES = [ 15743 'root', 15744 'targets', 15745 'snapshot', 15746 'timestamp', 15747 ]; 15748 /** 15749 * Container that defines which keys are required to sign roles metadata. 15750 * 15751 * Role defines how many keys are required to successfully sign the roles 15752 * metadata, and which keys are accepted. 15753 */ 15754 class Role { 15755 constructor(options) { 15756 const { keyIDs, threshold, unrecognizedFields } = options; 15757 if (hasDuplicates(keyIDs)) { 15758 throw new error_1.ValueError('duplicate key IDs found'); 15759 } 15760 if (threshold < 1) { 15761 throw new error_1.ValueError('threshold must be at least 1'); 15762 } 15763 this.keyIDs = keyIDs; 15764 this.threshold = threshold; 15765 this.unrecognizedFields = unrecognizedFields || {}; 15766 } 15767 equals(other) { 15768 if (!(other instanceof Role)) { 15769 return false; 15770 } 15771 return (this.threshold === other.threshold && 15772 util_1.default.isDeepStrictEqual(this.keyIDs, other.keyIDs) && 15773 util_1.default.isDeepStrictEqual(this.unrecognizedFields, other.unrecognizedFields)); 15774 } 15775 toJSON() { 15776 return { 15777 keyids: this.keyIDs, 15778 threshold: this.threshold, 15779 ...this.unrecognizedFields, 15780 }; 15781 } 15782 static fromJSON(data) { 15783 const { keyids, threshold, ...rest } = data; 15784 if (!utils_1.guard.isStringArray(keyids)) { 15785 throw new TypeError('keyids must be an array'); 15786 } 15787 if (typeof threshold !== 'number') { 15788 throw new TypeError('threshold must be a number'); 15789 } 15790 return new Role({ 15791 keyIDs: keyids, 15792 threshold, 15793 unrecognizedFields: rest, 15794 }); 15795 } 15796 } 15797 exports.Role = Role; 15798 function hasDuplicates(array) { 15799 return new Set(array).size !== array.length; 15800 } 15801 /** 15802 * A container with information about a delegated role. 15803 * 15804 * A delegation can happen in two ways: 15805 * - ``paths`` is set: delegates targets matching any path pattern in ``paths`` 15806 * - ``pathHashPrefixes`` is set: delegates targets whose target path hash 15807 * starts with any of the prefixes in ``pathHashPrefixes`` 15808 * 15809 * ``paths`` and ``pathHashPrefixes`` are mutually exclusive: both cannot be 15810 * set, at least one of them must be set. 15811 */ 15812 class DelegatedRole extends Role { 15813 constructor(opts) { 15814 super(opts); 15815 const { name, terminating, paths, pathHashPrefixes } = opts; 15816 this.name = name; 15817 this.terminating = terminating; 15818 if (opts.paths && opts.pathHashPrefixes) { 15819 throw new error_1.ValueError('paths and pathHashPrefixes are mutually exclusive'); 15820 } 15821 this.paths = paths; 15822 this.pathHashPrefixes = pathHashPrefixes; 15823 } 15824 equals(other) { 15825 if (!(other instanceof DelegatedRole)) { 15826 return false; 15827 } 15828 return (super.equals(other) && 15829 this.name === other.name && 15830 this.terminating === other.terminating && 15831 util_1.default.isDeepStrictEqual(this.paths, other.paths) && 15832 util_1.default.isDeepStrictEqual(this.pathHashPrefixes, other.pathHashPrefixes)); 15833 } 15834 isDelegatedPath(targetFilepath) { 15835 if (this.paths) { 15836 return this.paths.some((pathPattern) => isTargetInPathPattern(targetFilepath, pathPattern)); 15837 } 15838 if (this.pathHashPrefixes) { 15839 const hasher = crypto_1.default.createHash('sha256'); 15840 const pathHash = hasher.update(targetFilepath).digest('hex'); 15841 return this.pathHashPrefixes.some((pathHashPrefix) => pathHash.startsWith(pathHashPrefix)); 15842 } 15843 return false; 15844 } 15845 toJSON() { 15846 const json = { 15847 ...super.toJSON(), 15848 name: this.name, 15849 terminating: this.terminating, 15850 }; 15851 if (this.paths) { 15852 json.paths = this.paths; 15853 } 15854 if (this.pathHashPrefixes) { 15855 json.path_hash_prefixes = this.pathHashPrefixes; 15856 } 15857 return json; 15858 } 15859 static fromJSON(data) { 15860 const { keyids, threshold, name, terminating, paths, path_hash_prefixes, ...rest } = data; 15861 if (!utils_1.guard.isStringArray(keyids)) { 15862 throw new TypeError('keyids must be an array of strings'); 15863 } 15864 if (typeof threshold !== 'number') { 15865 throw new TypeError('threshold must be a number'); 15866 } 15867 if (typeof name !== 'string') { 15868 throw new TypeError('name must be a string'); 15869 } 15870 if (typeof terminating !== 'boolean') { 15871 throw new TypeError('terminating must be a boolean'); 15872 } 15873 if (utils_1.guard.isDefined(paths) && !utils_1.guard.isStringArray(paths)) { 15874 throw new TypeError('paths must be an array of strings'); 15875 } 15876 if (utils_1.guard.isDefined(path_hash_prefixes) && 15877 !utils_1.guard.isStringArray(path_hash_prefixes)) { 15878 throw new TypeError('path_hash_prefixes must be an array of strings'); 15879 } 15880 return new DelegatedRole({ 15881 keyIDs: keyids, 15882 threshold, 15883 name, 15884 terminating, 15885 paths, 15886 pathHashPrefixes: path_hash_prefixes, 15887 unrecognizedFields: rest, 15888 }); 15889 } 15890 } 15891 exports.DelegatedRole = DelegatedRole; 15892 // JS version of Ruby's Array#zip 15893 const zip = (a, b) => a.map((k, i) => [k, b[i]]); 15894 function isTargetInPathPattern(target, pattern) { 15895 const targetParts = target.split('/'); 15896 const patternParts = pattern.split('/'); 15897 if (patternParts.length != targetParts.length) { 15898 return false; 15899 } 15900 return zip(targetParts, patternParts).every(([targetPart, patternPart]) => (0, minimatch_1.minimatch)(targetPart, patternPart)); 15901 } 15902 /** 15903 * Succinctly defines a hash bin delegation graph. 15904 * 15905 * A ``SuccinctRoles`` object describes a delegation graph that covers all 15906 * targets, distributing them uniformly over the delegated roles (i.e. bins) 15907 * in the graph. 15908 * 15909 * The total number of bins is 2 to the power of the passed ``bit_length``. 15910 * 15911 * Bin names are the concatenation of the passed ``name_prefix`` and a 15912 * zero-padded hex representation of the bin index separated by a hyphen. 15913 * 15914 * The passed ``keyids`` and ``threshold`` is used for each bin, and each bin 15915 * is 'terminating'. 15916 * 15917 * For details: https://github.com/theupdateframework/taps/blob/master/tap15.md 15918 */ 15919 class SuccinctRoles extends Role { 15920 constructor(opts) { 15921 super(opts); 15922 const { bitLength, namePrefix } = opts; 15923 if (bitLength <= 0 || bitLength > 32) { 15924 throw new error_1.ValueError('bitLength must be between 1 and 32'); 15925 } 15926 this.bitLength = bitLength; 15927 this.namePrefix = namePrefix; 15928 // Calculate the suffix_len value based on the total number of bins in 15929 // hex. If bit_length = 10 then number_of_bins = 1024 or bin names will 15930 // have a suffix between "000" and "3ff" in hex and suffix_len will be 3 15931 // meaning the third bin will have a suffix of "003". 15932 this.numberOfBins = Math.pow(2, bitLength); 15933 // suffix_len is calculated based on "number_of_bins - 1" as the name 15934 // of the last bin contains the number "number_of_bins -1" as a suffix. 15935 this.suffixLen = (this.numberOfBins - 1).toString(16).length; 15936 } 15937 equals(other) { 15938 if (!(other instanceof SuccinctRoles)) { 15939 return false; 15940 } 15941 return (super.equals(other) && 15942 this.bitLength === other.bitLength && 15943 this.namePrefix === other.namePrefix); 15944 } 15945 /*** 15946 * Calculates the name of the delegated role responsible for 'target_filepath'. 15947 * 15948 * The target at path ''target_filepath' is assigned to a bin by casting 15949 * the left-most 'bit_length' of bits of the file path hash digest to 15950 * int, using it as bin index between 0 and '2**bit_length - 1'. 15951 * 15952 * Args: 15953 * target_filepath: URL path to a target file, relative to a base 15954 * targets URL. 15955 */ 15956 getRoleForTarget(targetFilepath) { 15957 const hasher = crypto_1.default.createHash('sha256'); 15958 const hasherBuffer = hasher.update(targetFilepath).digest(); 15959 // can't ever need more than 4 bytes (32 bits). 15960 const hashBytes = hasherBuffer.subarray(0, 4); 15961 // Right shift hash bytes, so that we only have the leftmost 15962 // bit_length bits that we care about. 15963 const shiftValue = 32 - this.bitLength; 15964 const binNumber = hashBytes.readUInt32BE() >>> shiftValue; 15965 // Add zero padding if necessary and cast to hex the suffix. 15966 const suffix = binNumber.toString(16).padStart(this.suffixLen, '0'); 15967 return `${this.namePrefix}-${suffix}`; 15968 } 15969 *getRoles() { 15970 for (let i = 0; i < this.numberOfBins; i++) { 15971 const suffix = i.toString(16).padStart(this.suffixLen, '0'); 15972 yield `${this.namePrefix}-${suffix}`; 15973 } 15974 } 15975 /*** 15976 * Determines whether the given ``role_name`` is in one of 15977 * the delegated roles that ``SuccinctRoles`` represents. 15978 * 15979 * Args: 15980 * role_name: The name of the role to check against. 15981 */ 15982 isDelegatedRole(roleName) { 15983 const desiredPrefix = this.namePrefix + '-'; 15984 if (!roleName.startsWith(desiredPrefix)) { 15985 return false; 15986 } 15987 const suffix = roleName.slice(desiredPrefix.length, roleName.length); 15988 if (suffix.length != this.suffixLen) { 15989 return false; 15990 } 15991 // make sure the suffix is a hex string 15992 if (!suffix.match(/^[0-9a-fA-F]+$/)) { 15993 return false; 15994 } 15995 const num = parseInt(suffix, 16); 15996 return 0 <= num && num < this.numberOfBins; 15997 } 15998 toJSON() { 15999 const json = { 16000 ...super.toJSON(), 16001 bit_length: this.bitLength, 16002 name_prefix: this.namePrefix, 16003 }; 16004 return json; 16005 } 16006 static fromJSON(data) { 16007 const { keyids, threshold, bit_length, name_prefix, ...rest } = data; 16008 if (!utils_1.guard.isStringArray(keyids)) { 16009 throw new TypeError('keyids must be an array of strings'); 16010 } 16011 if (typeof threshold !== 'number') { 16012 throw new TypeError('threshold must be a number'); 16013 } 16014 if (typeof bit_length !== 'number') { 16015 throw new TypeError('bit_length must be a number'); 16016 } 16017 if (typeof name_prefix !== 'string') { 16018 throw new TypeError('name_prefix must be a string'); 16019 } 16020 return new SuccinctRoles({ 16021 keyIDs: keyids, 16022 threshold, 16023 bitLength: bit_length, 16024 namePrefix: name_prefix, 16025 unrecognizedFields: rest, 16026 }); 16027 } 16028 } 16029 exports.SuccinctRoles = SuccinctRoles; 16030 16031 16032 /***/ }), 16033 16034 /***/ 9392: 16035 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 16036 16037 "use strict"; 16038 16039 var __importDefault = (this && this.__importDefault) || function (mod) { 16040 return (mod && mod.__esModule) ? mod : { "default": mod }; 16041 }; 16042 Object.defineProperty(exports, "__esModule", ({ value: true })); 16043 exports.Root = void 0; 16044 const util_1 = __importDefault(__nccwpck_require__(73837)); 16045 const base_1 = __nccwpck_require__(60159); 16046 const error_1 = __nccwpck_require__(58448); 16047 const key_1 = __nccwpck_require__(66697); 16048 const role_1 = __nccwpck_require__(49393); 16049 const utils_1 = __nccwpck_require__(45688); 16050 /** 16051 * A container for the signed part of root metadata. 16052 * 16053 * The top-level role and metadata file signed by the root keys. 16054 * This role specifies trusted keys for all other top-level roles, which may further delegate trust. 16055 */ 16056 class Root extends base_1.Signed { 16057 constructor(options) { 16058 super(options); 16059 this.type = base_1.MetadataKind.Root; 16060 this.keys = options.keys || {}; 16061 this.consistentSnapshot = options.consistentSnapshot ?? true; 16062 if (!options.roles) { 16063 this.roles = role_1.TOP_LEVEL_ROLE_NAMES.reduce((acc, role) => ({ 16064 ...acc, 16065 [role]: new role_1.Role({ keyIDs: [], threshold: 1 }), 16066 }), {}); 16067 } 16068 else { 16069 const roleNames = new Set(Object.keys(options.roles)); 16070 if (!role_1.TOP_LEVEL_ROLE_NAMES.every((role) => roleNames.has(role))) { 16071 throw new error_1.ValueError('missing top-level role'); 16072 } 16073 this.roles = options.roles; 16074 } 16075 } 16076 addKey(key, role) { 16077 if (!this.roles[role]) { 16078 throw new error_1.ValueError(`role ${role} does not exist`); 16079 } 16080 if (!this.roles[role].keyIDs.includes(key.keyID)) { 16081 this.roles[role].keyIDs.push(key.keyID); 16082 } 16083 this.keys[key.keyID] = key; 16084 } 16085 equals(other) { 16086 if (!(other instanceof Root)) { 16087 return false; 16088 } 16089 return (super.equals(other) && 16090 this.consistentSnapshot === other.consistentSnapshot && 16091 util_1.default.isDeepStrictEqual(this.keys, other.keys) && 16092 util_1.default.isDeepStrictEqual(this.roles, other.roles)); 16093 } 16094 toJSON() { 16095 return { 16096 _type: this.type, 16097 spec_version: this.specVersion, 16098 version: this.version, 16099 expires: this.expires, 16100 keys: keysToJSON(this.keys), 16101 roles: rolesToJSON(this.roles), 16102 consistent_snapshot: this.consistentSnapshot, 16103 ...this.unrecognizedFields, 16104 }; 16105 } 16106 static fromJSON(data) { 16107 const { unrecognizedFields, ...commonFields } = base_1.Signed.commonFieldsFromJSON(data); 16108 const { keys, roles, consistent_snapshot, ...rest } = unrecognizedFields; 16109 if (typeof consistent_snapshot !== 'boolean') { 16110 throw new TypeError('consistent_snapshot must be a boolean'); 16111 } 16112 return new Root({ 16113 ...commonFields, 16114 keys: keysFromJSON(keys), 16115 roles: rolesFromJSON(roles), 16116 consistentSnapshot: consistent_snapshot, 16117 unrecognizedFields: rest, 16118 }); 16119 } 16120 } 16121 exports.Root = Root; 16122 function keysToJSON(keys) { 16123 return Object.entries(keys).reduce((acc, [keyID, key]) => ({ ...acc, [keyID]: key.toJSON() }), {}); 16124 } 16125 function rolesToJSON(roles) { 16126 return Object.entries(roles).reduce((acc, [roleName, role]) => ({ ...acc, [roleName]: role.toJSON() }), {}); 16127 } 16128 function keysFromJSON(data) { 16129 let keys; 16130 if (utils_1.guard.isDefined(data)) { 16131 if (!utils_1.guard.isObjectRecord(data)) { 16132 throw new TypeError('keys must be an object'); 16133 } 16134 keys = Object.entries(data).reduce((acc, [keyID, keyData]) => ({ 16135 ...acc, 16136 [keyID]: key_1.Key.fromJSON(keyID, keyData), 16137 }), {}); 16138 } 16139 return keys; 16140 } 16141 function rolesFromJSON(data) { 16142 let roles; 16143 if (utils_1.guard.isDefined(data)) { 16144 if (!utils_1.guard.isObjectRecord(data)) { 16145 throw new TypeError('roles must be an object'); 16146 } 16147 roles = Object.entries(data).reduce((acc, [roleName, roleData]) => ({ 16148 ...acc, 16149 [roleName]: role_1.Role.fromJSON(roleData), 16150 }), {}); 16151 } 16152 return roles; 16153 } 16154 16155 16156 /***/ }), 16157 16158 /***/ 54222: 16159 /***/ ((__unused_webpack_module, exports) => { 16160 16161 "use strict"; 16162 16163 Object.defineProperty(exports, "__esModule", ({ value: true })); 16164 exports.Signature = void 0; 16165 /** 16166 * A container class containing information about a signature. 16167 * 16168 * Contains a signature and the keyid uniquely identifying the key used 16169 * to generate the signature. 16170 * 16171 * Provide a `fromJSON` method to create a Signature from a JSON object. 16172 */ 16173 class Signature { 16174 constructor(options) { 16175 const { keyID, sig } = options; 16176 this.keyID = keyID; 16177 this.sig = sig; 16178 } 16179 toJSON() { 16180 return { 16181 keyid: this.keyID, 16182 sig: this.sig, 16183 }; 16184 } 16185 static fromJSON(data) { 16186 const { keyid, sig } = data; 16187 if (typeof keyid !== 'string') { 16188 throw new TypeError('keyid must be a string'); 16189 } 16190 if (typeof sig !== 'string') { 16191 throw new TypeError('sig must be a string'); 16192 } 16193 return new Signature({ 16194 keyID: keyid, 16195 sig: sig, 16196 }); 16197 } 16198 } 16199 exports.Signature = Signature; 16200 16201 16202 /***/ }), 16203 16204 /***/ 92326: 16205 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 16206 16207 "use strict"; 16208 16209 var __importDefault = (this && this.__importDefault) || function (mod) { 16210 return (mod && mod.__esModule) ? mod : { "default": mod }; 16211 }; 16212 Object.defineProperty(exports, "__esModule", ({ value: true })); 16213 exports.Snapshot = void 0; 16214 const util_1 = __importDefault(__nccwpck_require__(73837)); 16215 const base_1 = __nccwpck_require__(60159); 16216 const file_1 = __nccwpck_require__(51923); 16217 const utils_1 = __nccwpck_require__(45688); 16218 /** 16219 * A container for the signed part of snapshot metadata. 16220 * 16221 * Snapshot contains information about all target Metadata files. 16222 * A top-level role that specifies the latest versions of all targets metadata files, 16223 * and hence the latest versions of all targets (including any dependencies between them) on the repository. 16224 */ 16225 class Snapshot extends base_1.Signed { 16226 constructor(opts) { 16227 super(opts); 16228 this.type = base_1.MetadataKind.Snapshot; 16229 this.meta = opts.meta || { 'targets.json': new file_1.MetaFile({ version: 1 }) }; 16230 } 16231 equals(other) { 16232 if (!(other instanceof Snapshot)) { 16233 return false; 16234 } 16235 return super.equals(other) && util_1.default.isDeepStrictEqual(this.meta, other.meta); 16236 } 16237 toJSON() { 16238 return { 16239 _type: this.type, 16240 meta: metaToJSON(this.meta), 16241 spec_version: this.specVersion, 16242 version: this.version, 16243 expires: this.expires, 16244 ...this.unrecognizedFields, 16245 }; 16246 } 16247 static fromJSON(data) { 16248 const { unrecognizedFields, ...commonFields } = base_1.Signed.commonFieldsFromJSON(data); 16249 const { meta, ...rest } = unrecognizedFields; 16250 return new Snapshot({ 16251 ...commonFields, 16252 meta: metaFromJSON(meta), 16253 unrecognizedFields: rest, 16254 }); 16255 } 16256 } 16257 exports.Snapshot = Snapshot; 16258 function metaToJSON(meta) { 16259 return Object.entries(meta).reduce((acc, [path, metadata]) => ({ 16260 ...acc, 16261 [path]: metadata.toJSON(), 16262 }), {}); 16263 } 16264 function metaFromJSON(data) { 16265 let meta; 16266 if (utils_1.guard.isDefined(data)) { 16267 if (!utils_1.guard.isObjectRecord(data)) { 16268 throw new TypeError('meta field is malformed'); 16269 } 16270 else { 16271 meta = Object.entries(data).reduce((acc, [path, metadata]) => ({ 16272 ...acc, 16273 [path]: file_1.MetaFile.fromJSON(metadata), 16274 }), {}); 16275 } 16276 } 16277 return meta; 16278 } 16279 16280 16281 /***/ }), 16282 16283 /***/ 5799: 16284 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 16285 16286 "use strict"; 16287 16288 var __importDefault = (this && this.__importDefault) || function (mod) { 16289 return (mod && mod.__esModule) ? mod : { "default": mod }; 16290 }; 16291 Object.defineProperty(exports, "__esModule", ({ value: true })); 16292 exports.Targets = void 0; 16293 const util_1 = __importDefault(__nccwpck_require__(73837)); 16294 const base_1 = __nccwpck_require__(60159); 16295 const delegations_1 = __nccwpck_require__(71662); 16296 const file_1 = __nccwpck_require__(51923); 16297 const utils_1 = __nccwpck_require__(45688); 16298 // Container for the signed part of targets metadata. 16299 // 16300 // Targets contains verifying information about target files and also delegates 16301 // responsible to other Targets roles. 16302 class Targets extends base_1.Signed { 16303 constructor(options) { 16304 super(options); 16305 this.type = base_1.MetadataKind.Targets; 16306 this.targets = options.targets || {}; 16307 this.delegations = options.delegations; 16308 } 16309 addTarget(target) { 16310 this.targets[target.path] = target; 16311 } 16312 equals(other) { 16313 if (!(other instanceof Targets)) { 16314 return false; 16315 } 16316 return (super.equals(other) && 16317 util_1.default.isDeepStrictEqual(this.targets, other.targets) && 16318 util_1.default.isDeepStrictEqual(this.delegations, other.delegations)); 16319 } 16320 toJSON() { 16321 const json = { 16322 _type: this.type, 16323 spec_version: this.specVersion, 16324 version: this.version, 16325 expires: this.expires, 16326 targets: targetsToJSON(this.targets), 16327 ...this.unrecognizedFields, 16328 }; 16329 if (this.delegations) { 16330 json.delegations = this.delegations.toJSON(); 16331 } 16332 return json; 16333 } 16334 static fromJSON(data) { 16335 const { unrecognizedFields, ...commonFields } = base_1.Signed.commonFieldsFromJSON(data); 16336 const { targets, delegations, ...rest } = unrecognizedFields; 16337 return new Targets({ 16338 ...commonFields, 16339 targets: targetsFromJSON(targets), 16340 delegations: delegationsFromJSON(delegations), 16341 unrecognizedFields: rest, 16342 }); 16343 } 16344 } 16345 exports.Targets = Targets; 16346 function targetsToJSON(targets) { 16347 return Object.entries(targets).reduce((acc, [path, target]) => ({ 16348 ...acc, 16349 [path]: target.toJSON(), 16350 }), {}); 16351 } 16352 function targetsFromJSON(data) { 16353 let targets; 16354 if (utils_1.guard.isDefined(data)) { 16355 if (!utils_1.guard.isObjectRecord(data)) { 16356 throw new TypeError('targets must be an object'); 16357 } 16358 else { 16359 targets = Object.entries(data).reduce((acc, [path, target]) => ({ 16360 ...acc, 16361 [path]: file_1.TargetFile.fromJSON(path, target), 16362 }), {}); 16363 } 16364 } 16365 return targets; 16366 } 16367 function delegationsFromJSON(data) { 16368 let delegations; 16369 if (utils_1.guard.isDefined(data)) { 16370 if (!utils_1.guard.isObject(data)) { 16371 throw new TypeError('delegations must be an object'); 16372 } 16373 else { 16374 delegations = delegations_1.Delegations.fromJSON(data); 16375 } 16376 } 16377 return delegations; 16378 } 16379 16380 16381 /***/ }), 16382 16383 /***/ 4042: 16384 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 16385 16386 "use strict"; 16387 16388 Object.defineProperty(exports, "__esModule", ({ value: true })); 16389 exports.Timestamp = void 0; 16390 const base_1 = __nccwpck_require__(60159); 16391 const file_1 = __nccwpck_require__(51923); 16392 const utils_1 = __nccwpck_require__(45688); 16393 /** 16394 * A container for the signed part of timestamp metadata. 16395 * 16396 * A top-level that specifies the latest version of the snapshot role metadata file, 16397 * and hence the latest versions of all metadata and targets on the repository. 16398 */ 16399 class Timestamp extends base_1.Signed { 16400 constructor(options) { 16401 super(options); 16402 this.type = base_1.MetadataKind.Timestamp; 16403 this.snapshotMeta = options.snapshotMeta || new file_1.MetaFile({ version: 1 }); 16404 } 16405 equals(other) { 16406 if (!(other instanceof Timestamp)) { 16407 return false; 16408 } 16409 return super.equals(other) && this.snapshotMeta.equals(other.snapshotMeta); 16410 } 16411 toJSON() { 16412 return { 16413 _type: this.type, 16414 spec_version: this.specVersion, 16415 version: this.version, 16416 expires: this.expires, 16417 meta: { 'snapshot.json': this.snapshotMeta.toJSON() }, 16418 ...this.unrecognizedFields, 16419 }; 16420 } 16421 static fromJSON(data) { 16422 const { unrecognizedFields, ...commonFields } = base_1.Signed.commonFieldsFromJSON(data); 16423 const { meta, ...rest } = unrecognizedFields; 16424 return new Timestamp({ 16425 ...commonFields, 16426 snapshotMeta: snapshotMetaFromJSON(meta), 16427 unrecognizedFields: rest, 16428 }); 16429 } 16430 } 16431 exports.Timestamp = Timestamp; 16432 function snapshotMetaFromJSON(data) { 16433 let snapshotMeta; 16434 if (utils_1.guard.isDefined(data)) { 16435 const snapshotData = data['snapshot.json']; 16436 if (!utils_1.guard.isDefined(snapshotData) || !utils_1.guard.isObject(snapshotData)) { 16437 throw new TypeError('missing snapshot.json in meta'); 16438 } 16439 else { 16440 snapshotMeta = file_1.MetaFile.fromJSON(snapshotData); 16441 } 16442 } 16443 return snapshotMeta; 16444 } 16445 16446 16447 /***/ }), 16448 16449 /***/ 27106: 16450 /***/ ((__unused_webpack_module, exports) => { 16451 16452 "use strict"; 16453 16454 Object.defineProperty(exports, "__esModule", ({ value: true })); 16455 exports.isObjectRecord = exports.isStringRecord = exports.isObjectArray = exports.isStringArray = exports.isObject = exports.isDefined = void 0; 16456 function isDefined(val) { 16457 return val !== undefined; 16458 } 16459 exports.isDefined = isDefined; 16460 function isObject(value) { 16461 return typeof value === 'object' && value !== null; 16462 } 16463 exports.isObject = isObject; 16464 function isStringArray(value) { 16465 return Array.isArray(value) && value.every((v) => typeof v === 'string'); 16466 } 16467 exports.isStringArray = isStringArray; 16468 function isObjectArray(value) { 16469 return Array.isArray(value) && value.every(isObject); 16470 } 16471 exports.isObjectArray = isObjectArray; 16472 function isStringRecord(value) { 16473 return (typeof value === 'object' && 16474 value !== null && 16475 Object.keys(value).every((k) => typeof k === 'string') && 16476 Object.values(value).every((v) => typeof v === 'string')); 16477 } 16478 exports.isStringRecord = isStringRecord; 16479 function isObjectRecord(value) { 16480 return (typeof value === 'object' && 16481 value !== null && 16482 Object.keys(value).every((k) => typeof k === 'string') && 16483 Object.values(value).every((v) => typeof v === 'object' && v !== null)); 16484 } 16485 exports.isObjectRecord = isObjectRecord; 16486 16487 16488 /***/ }), 16489 16490 /***/ 45688: 16491 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 16492 16493 "use strict"; 16494 16495 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 16496 if (k2 === undefined) k2 = k; 16497 var desc = Object.getOwnPropertyDescriptor(m, k); 16498 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 16499 desc = { enumerable: true, get: function() { return m[k]; } }; 16500 } 16501 Object.defineProperty(o, k2, desc); 16502 }) : (function(o, m, k, k2) { 16503 if (k2 === undefined) k2 = k; 16504 o[k2] = m[k]; 16505 })); 16506 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 16507 Object.defineProperty(o, "default", { enumerable: true, value: v }); 16508 }) : function(o, v) { 16509 o["default"] = v; 16510 }); 16511 var __importStar = (this && this.__importStar) || function (mod) { 16512 if (mod && mod.__esModule) return mod; 16513 var result = {}; 16514 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 16515 __setModuleDefault(result, mod); 16516 return result; 16517 }; 16518 Object.defineProperty(exports, "__esModule", ({ value: true })); 16519 exports.crypto = exports.guard = void 0; 16520 exports.guard = __importStar(__nccwpck_require__(27106)); 16521 exports.crypto = __importStar(__nccwpck_require__(8430)); 16522 16523 16524 /***/ }), 16525 16526 /***/ 78725: 16527 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 16528 16529 "use strict"; 16530 16531 var __importDefault = (this && this.__importDefault) || function (mod) { 16532 return (mod && mod.__esModule) ? mod : { "default": mod }; 16533 }; 16534 Object.defineProperty(exports, "__esModule", ({ value: true })); 16535 exports.getPublicKey = void 0; 16536 const crypto_1 = __importDefault(__nccwpck_require__(6113)); 16537 const error_1 = __nccwpck_require__(58448); 16538 const oid_1 = __nccwpck_require__(68680); 16539 const ASN1_TAG_SEQUENCE = 0x30; 16540 const ANS1_TAG_BIT_STRING = 0x03; 16541 const NULL_BYTE = 0x00; 16542 const OID_EDDSA = '1.3.101.112'; 16543 const OID_EC_PUBLIC_KEY = '1.2.840.10045.2.1'; 16544 const OID_EC_CURVE_P256V1 = '1.2.840.10045.3.1.7'; 16545 const PEM_HEADER = '-----BEGIN PUBLIC KEY-----'; 16546 function getPublicKey(keyInfo) { 16547 switch (keyInfo.keyType) { 16548 case 'rsa': 16549 return getRSAPublicKey(keyInfo); 16550 case 'ed25519': 16551 return getED25519PublicKey(keyInfo); 16552 case 'ecdsa': 16553 case 'ecdsa-sha2-nistp256': 16554 case 'ecdsa-sha2-nistp384': 16555 return getECDCSAPublicKey(keyInfo); 16556 default: 16557 throw new error_1.UnsupportedAlgorithmError(`Unsupported key type: ${keyInfo.keyType}`); 16558 } 16559 } 16560 exports.getPublicKey = getPublicKey; 16561 function getRSAPublicKey(keyInfo) { 16562 // Only support PEM-encoded RSA keys 16563 if (!keyInfo.keyVal.startsWith(PEM_HEADER)) { 16564 throw new error_1.CryptoError('Invalid key format'); 16565 } 16566 const key = crypto_1.default.createPublicKey(keyInfo.keyVal); 16567 switch (keyInfo.scheme) { 16568 case 'rsassa-pss-sha256': 16569 return { 16570 key: key, 16571 padding: crypto_1.default.constants.RSA_PKCS1_PSS_PADDING, 16572 }; 16573 default: 16574 throw new error_1.UnsupportedAlgorithmError(`Unsupported RSA scheme: ${keyInfo.scheme}`); 16575 } 16576 } 16577 function getED25519PublicKey(keyInfo) { 16578 let key; 16579 // If key is already PEM-encoded we can just parse it 16580 if (keyInfo.keyVal.startsWith(PEM_HEADER)) { 16581 key = crypto_1.default.createPublicKey(keyInfo.keyVal); 16582 } 16583 else { 16584 // If key is not PEM-encoded it had better be hex 16585 if (!isHex(keyInfo.keyVal)) { 16586 throw new error_1.CryptoError('Invalid key format'); 16587 } 16588 key = crypto_1.default.createPublicKey({ 16589 key: ed25519.hexToDER(keyInfo.keyVal), 16590 format: 'der', 16591 type: 'spki', 16592 }); 16593 } 16594 return { key }; 16595 } 16596 function getECDCSAPublicKey(keyInfo) { 16597 let key; 16598 // If key is already PEM-encoded we can just parse it 16599 if (keyInfo.keyVal.startsWith(PEM_HEADER)) { 16600 key = crypto_1.default.createPublicKey(keyInfo.keyVal); 16601 } 16602 else { 16603 // If key is not PEM-encoded it had better be hex 16604 if (!isHex(keyInfo.keyVal)) { 16605 throw new error_1.CryptoError('Invalid key format'); 16606 } 16607 key = crypto_1.default.createPublicKey({ 16608 key: ecdsa.hexToDER(keyInfo.keyVal), 16609 format: 'der', 16610 type: 'spki', 16611 }); 16612 } 16613 return { key }; 16614 } 16615 const ed25519 = { 16616 // Translates a hex key into a crypto KeyObject 16617 // https://keygen.sh/blog/how-to-use-hexadecimal-ed25519-keys-in-node/ 16618 hexToDER: (hex) => { 16619 const key = Buffer.from(hex, 'hex'); 16620 const oid = (0, oid_1.encodeOIDString)(OID_EDDSA); 16621 // Create a byte sequence containing the OID and key 16622 const elements = Buffer.concat([ 16623 Buffer.concat([ 16624 Buffer.from([ASN1_TAG_SEQUENCE]), 16625 Buffer.from([oid.length]), 16626 oid, 16627 ]), 16628 Buffer.concat([ 16629 Buffer.from([ANS1_TAG_BIT_STRING]), 16630 Buffer.from([key.length + 1]), 16631 Buffer.from([NULL_BYTE]), 16632 key, 16633 ]), 16634 ]); 16635 // Wrap up by creating a sequence of elements 16636 const der = Buffer.concat([ 16637 Buffer.from([ASN1_TAG_SEQUENCE]), 16638 Buffer.from([elements.length]), 16639 elements, 16640 ]); 16641 return der; 16642 }, 16643 }; 16644 const ecdsa = { 16645 hexToDER: (hex) => { 16646 const key = Buffer.from(hex, 'hex'); 16647 const bitString = Buffer.concat([ 16648 Buffer.from([ANS1_TAG_BIT_STRING]), 16649 Buffer.from([key.length + 1]), 16650 Buffer.from([NULL_BYTE]), 16651 key, 16652 ]); 16653 const oids = Buffer.concat([ 16654 (0, oid_1.encodeOIDString)(OID_EC_PUBLIC_KEY), 16655 (0, oid_1.encodeOIDString)(OID_EC_CURVE_P256V1), 16656 ]); 16657 const oidSequence = Buffer.concat([ 16658 Buffer.from([ASN1_TAG_SEQUENCE]), 16659 Buffer.from([oids.length]), 16660 oids, 16661 ]); 16662 // Wrap up by creating a sequence of elements 16663 const der = Buffer.concat([ 16664 Buffer.from([ASN1_TAG_SEQUENCE]), 16665 Buffer.from([oidSequence.length + bitString.length]), 16666 oidSequence, 16667 bitString, 16668 ]); 16669 return der; 16670 }, 16671 }; 16672 const isHex = (key) => /^[0-9a-fA-F]+$/.test(key); 16673 16674 16675 /***/ }), 16676 16677 /***/ 68680: 16678 /***/ ((__unused_webpack_module, exports) => { 16679 16680 "use strict"; 16681 16682 Object.defineProperty(exports, "__esModule", ({ value: true })); 16683 exports.encodeOIDString = void 0; 16684 const ANS1_TAG_OID = 0x06; 16685 function encodeOIDString(oid) { 16686 const parts = oid.split('.'); 16687 // The first two subidentifiers are encoded into the first byte 16688 const first = parseInt(parts[0], 10) * 40 + parseInt(parts[1], 10); 16689 const rest = []; 16690 parts.slice(2).forEach((part) => { 16691 const bytes = encodeVariableLengthInteger(parseInt(part, 10)); 16692 rest.push(...bytes); 16693 }); 16694 const der = Buffer.from([first, ...rest]); 16695 return Buffer.from([ANS1_TAG_OID, der.length, ...der]); 16696 } 16697 exports.encodeOIDString = encodeOIDString; 16698 function encodeVariableLengthInteger(value) { 16699 const bytes = []; 16700 let mask = 0x00; 16701 while (value > 0) { 16702 bytes.unshift((value & 0x7f) | mask); 16703 value >>= 7; 16704 mask = 0x80; 16705 } 16706 return bytes; 16707 } 16708 16709 16710 /***/ }), 16711 16712 /***/ 8430: 16713 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 16714 16715 "use strict"; 16716 16717 var __importDefault = (this && this.__importDefault) || function (mod) { 16718 return (mod && mod.__esModule) ? mod : { "default": mod }; 16719 }; 16720 Object.defineProperty(exports, "__esModule", ({ value: true })); 16721 exports.verifySignature = void 0; 16722 const canonical_json_1 = __nccwpck_require__(19652); 16723 const crypto_1 = __importDefault(__nccwpck_require__(6113)); 16724 const verifySignature = (metaDataSignedData, key, signature) => { 16725 const canonicalData = Buffer.from((0, canonical_json_1.canonicalize)(metaDataSignedData)); 16726 return crypto_1.default.verify(undefined, canonicalData, key, Buffer.from(signature, 'hex')); 16727 }; 16728 exports.verifySignature = verifySignature; 16729 16730 16731 /***/ }), 16732 16733 /***/ 14515: 16734 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 16735 16736 var balanced = __nccwpck_require__(9417); 16737 16738 module.exports = expandTop; 16739 16740 var escSlash = '\0SLASH'+Math.random()+'\0'; 16741 var escOpen = '\0OPEN'+Math.random()+'\0'; 16742 var escClose = '\0CLOSE'+Math.random()+'\0'; 16743 var escComma = '\0COMMA'+Math.random()+'\0'; 16744 var escPeriod = '\0PERIOD'+Math.random()+'\0'; 16745 16746 function numeric(str) { 16747 return parseInt(str, 10) == str 16748 ? parseInt(str, 10) 16749 : str.charCodeAt(0); 16750 } 16751 16752 function escapeBraces(str) { 16753 return str.split('\\\\').join(escSlash) 16754 .split('\\{').join(escOpen) 16755 .split('\\}').join(escClose) 16756 .split('\\,').join(escComma) 16757 .split('\\.').join(escPeriod); 16758 } 16759 16760 function unescapeBraces(str) { 16761 return str.split(escSlash).join('\\') 16762 .split(escOpen).join('{') 16763 .split(escClose).join('}') 16764 .split(escComma).join(',') 16765 .split(escPeriod).join('.'); 16766 } 16767 16768 16769 // Basically just str.split(","), but handling cases 16770 // where we have nested braced sections, which should be 16771 // treated as individual members, like {a,{b,c},d} 16772 function parseCommaParts(str) { 16773 if (!str) 16774 return ['']; 16775 16776 var parts = []; 16777 var m = balanced('{', '}', str); 16778 16779 if (!m) 16780 return str.split(','); 16781 16782 var pre = m.pre; 16783 var body = m.body; 16784 var post = m.post; 16785 var p = pre.split(','); 16786 16787 p[p.length-1] += '{' + body + '}'; 16788 var postParts = parseCommaParts(post); 16789 if (post.length) { 16790 p[p.length-1] += postParts.shift(); 16791 p.push.apply(p, postParts); 16792 } 16793 16794 parts.push.apply(parts, p); 16795 16796 return parts; 16797 } 16798 16799 function expandTop(str) { 16800 if (!str) 16801 return []; 16802 16803 // I don't know why Bash 4.3 does this, but it does. 16804 // Anything starting with {} will have the first two bytes preserved 16805 // but *only* at the top level, so {},a}b will not expand to anything, 16806 // but a{},b}c will be expanded to [a}c,abc]. 16807 // One could argue that this is a bug in Bash, but since the goal of 16808 // this module is to match Bash's rules, we escape a leading {} 16809 if (str.substr(0, 2) === '{}') { 16810 str = '\\{\\}' + str.substr(2); 16811 } 16812 16813 return expand(escapeBraces(str), true).map(unescapeBraces); 16814 } 16815 16816 function embrace(str) { 16817 return '{' + str + '}'; 16818 } 16819 function isPadded(el) { 16820 return /^-?0\d/.test(el); 16821 } 16822 16823 function lte(i, y) { 16824 return i <= y; 16825 } 16826 function gte(i, y) { 16827 return i >= y; 16828 } 16829 16830 function expand(str, isTop) { 16831 var expansions = []; 16832 16833 var m = balanced('{', '}', str); 16834 if (!m) return [str]; 16835 16836 // no need to expand pre, since it is guaranteed to be free of brace-sets 16837 var pre = m.pre; 16838 var post = m.post.length 16839 ? expand(m.post, false) 16840 : ['']; 16841 16842 if (/\$$/.test(m.pre)) { 16843 for (var k = 0; k < post.length; k++) { 16844 var expansion = pre+ '{' + m.body + '}' + post[k]; 16845 expansions.push(expansion); 16846 } 16847 } else { 16848 var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); 16849 var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); 16850 var isSequence = isNumericSequence || isAlphaSequence; 16851 var isOptions = m.body.indexOf(',') >= 0; 16852 if (!isSequence && !isOptions) { 16853 // {a},b} 16854 if (m.post.match(/,.*\}/)) { 16855 str = m.pre + '{' + m.body + escClose + m.post; 16856 return expand(str); 16857 } 16858 return [str]; 16859 } 16860 16861 var n; 16862 if (isSequence) { 16863 n = m.body.split(/\.\./); 16864 } else { 16865 n = parseCommaParts(m.body); 16866 if (n.length === 1) { 16867 // x{{a,b}}y ==> x{a}y x{b}y 16868 n = expand(n[0], false).map(embrace); 16869 if (n.length === 1) { 16870 return post.map(function(p) { 16871 return m.pre + n[0] + p; 16872 }); 16873 } 16874 } 16875 } 16876 16877 // at this point, n is the parts, and we know it's not a comma set 16878 // with a single entry. 16879 var N; 16880 16881 if (isSequence) { 16882 var x = numeric(n[0]); 16883 var y = numeric(n[1]); 16884 var width = Math.max(n[0].length, n[1].length) 16885 var incr = n.length == 3 16886 ? Math.abs(numeric(n[2])) 16887 : 1; 16888 var test = lte; 16889 var reverse = y < x; 16890 if (reverse) { 16891 incr *= -1; 16892 test = gte; 16893 } 16894 var pad = n.some(isPadded); 16895 16896 N = []; 16897 16898 for (var i = x; test(i, y); i += incr) { 16899 var c; 16900 if (isAlphaSequence) { 16901 c = String.fromCharCode(i); 16902 if (c === '\\') 16903 c = ''; 16904 } else { 16905 c = String(i); 16906 if (pad) { 16907 var need = width - c.length; 16908 if (need > 0) { 16909 var z = new Array(need + 1).join('0'); 16910 if (i < 0) 16911 c = '-' + z + c.slice(1); 16912 else 16913 c = z + c; 16914 } 16915 } 16916 } 16917 N.push(c); 16918 } 16919 } else { 16920 N = []; 16921 16922 for (var j = 0; j < n.length; j++) { 16923 N.push.apply(N, expand(n[j], false)); 16924 } 16925 } 16926 16927 for (var j = 0; j < N.length; j++) { 16928 for (var k = 0; k < post.length; k++) { 16929 var expansion = pre + N[j] + post[k]; 16930 if (!isTop || isSequence || expansion) 16931 expansions.push(expansion); 16932 } 16933 } 16934 } 16935 16936 return expansions; 16937 } 16938 16939 16940 16941 /***/ }), 16942 16943 /***/ 8348: 16944 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 16945 16946 "use strict"; 16947 16948 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 16949 if (k2 === undefined) k2 = k; 16950 var desc = Object.getOwnPropertyDescriptor(m, k); 16951 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 16952 desc = { enumerable: true, get: function() { return m[k]; } }; 16953 } 16954 Object.defineProperty(o, k2, desc); 16955 }) : (function(o, m, k, k2) { 16956 if (k2 === undefined) k2 = k; 16957 o[k2] = m[k]; 16958 })); 16959 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 16960 Object.defineProperty(o, "default", { enumerable: true, value: v }); 16961 }) : function(o, v) { 16962 o["default"] = v; 16963 }); 16964 var __importStar = (this && this.__importStar) || function (mod) { 16965 if (mod && mod.__esModule) return mod; 16966 var result = {}; 16967 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 16968 __setModuleDefault(result, mod); 16969 return result; 16970 }; 16971 Object.defineProperty(exports, "__esModule", ({ value: true })); 16972 exports.req = exports.json = exports.toBuffer = void 0; 16973 const http = __importStar(__nccwpck_require__(13685)); 16974 const https = __importStar(__nccwpck_require__(95687)); 16975 async function toBuffer(stream) { 16976 let length = 0; 16977 const chunks = []; 16978 for await (const chunk of stream) { 16979 length += chunk.length; 16980 chunks.push(chunk); 16981 } 16982 return Buffer.concat(chunks, length); 16983 } 16984 exports.toBuffer = toBuffer; 16985 // eslint-disable-next-line @typescript-eslint/no-explicit-any 16986 async function json(stream) { 16987 const buf = await toBuffer(stream); 16988 const str = buf.toString('utf8'); 16989 try { 16990 return JSON.parse(str); 16991 } 16992 catch (_err) { 16993 const err = _err; 16994 err.message += ` (input: ${str})`; 16995 throw err; 16996 } 16997 } 16998 exports.json = json; 16999 function req(url, opts = {}) { 17000 const href = typeof url === 'string' ? url : url.href; 17001 const req = (href.startsWith('https:') ? https : http).request(url, opts); 17002 const promise = new Promise((resolve, reject) => { 17003 req 17004 .once('response', resolve) 17005 .once('error', reject) 17006 .end(); 17007 }); 17008 req.then = promise.then.bind(promise); 17009 return req; 17010 } 17011 exports.req = req; 17012 //# sourceMappingURL=helpers.js.map 17013 17014 /***/ }), 17015 17016 /***/ 70694: 17017 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 17018 17019 "use strict"; 17020 17021 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 17022 if (k2 === undefined) k2 = k; 17023 var desc = Object.getOwnPropertyDescriptor(m, k); 17024 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 17025 desc = { enumerable: true, get: function() { return m[k]; } }; 17026 } 17027 Object.defineProperty(o, k2, desc); 17028 }) : (function(o, m, k, k2) { 17029 if (k2 === undefined) k2 = k; 17030 o[k2] = m[k]; 17031 })); 17032 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 17033 Object.defineProperty(o, "default", { enumerable: true, value: v }); 17034 }) : function(o, v) { 17035 o["default"] = v; 17036 }); 17037 var __importStar = (this && this.__importStar) || function (mod) { 17038 if (mod && mod.__esModule) return mod; 17039 var result = {}; 17040 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 17041 __setModuleDefault(result, mod); 17042 return result; 17043 }; 17044 var __exportStar = (this && this.__exportStar) || function(m, exports) { 17045 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 17046 }; 17047 Object.defineProperty(exports, "__esModule", ({ value: true })); 17048 exports.Agent = void 0; 17049 const http = __importStar(__nccwpck_require__(13685)); 17050 __exportStar(__nccwpck_require__(8348), exports); 17051 const INTERNAL = Symbol('AgentBaseInternalState'); 17052 class Agent extends http.Agent { 17053 constructor(opts) { 17054 super(opts); 17055 this[INTERNAL] = {}; 17056 } 17057 /** 17058 * Determine whether this is an `http` or `https` request. 17059 */ 17060 isSecureEndpoint(options) { 17061 if (options) { 17062 // First check the `secureEndpoint` property explicitly, since this 17063 // means that a parent `Agent` is "passing through" to this instance. 17064 // eslint-disable-next-line @typescript-eslint/no-explicit-any 17065 if (typeof options.secureEndpoint === 'boolean') { 17066 return options.secureEndpoint; 17067 } 17068 // If no explicit `secure` endpoint, check if `protocol` property is 17069 // set. This will usually be the case since using a full string URL 17070 // or `URL` instance should be the most common usage. 17071 if (typeof options.protocol === 'string') { 17072 return options.protocol === 'https:'; 17073 } 17074 } 17075 // Finally, if no `protocol` property was set, then fall back to 17076 // checking the stack trace of the current call stack, and try to 17077 // detect the "https" module. 17078 const { stack } = new Error(); 17079 if (typeof stack !== 'string') 17080 return false; 17081 return stack 17082 .split('\n') 17083 .some((l) => l.indexOf('(https.js:') !== -1 || 17084 l.indexOf('node:https:') !== -1); 17085 } 17086 createSocket(req, options, cb) { 17087 const connectOpts = { 17088 ...options, 17089 secureEndpoint: this.isSecureEndpoint(options), 17090 }; 17091 Promise.resolve() 17092 .then(() => this.connect(req, connectOpts)) 17093 .then((socket) => { 17094 if (socket instanceof http.Agent) { 17095 // @ts-expect-error `addRequest()` isn't defined in `@types/node` 17096 return socket.addRequest(req, connectOpts); 17097 } 17098 this[INTERNAL].currentSocket = socket; 17099 // @ts-expect-error `createSocket()` isn't defined in `@types/node` 17100 super.createSocket(req, options, cb); 17101 }, cb); 17102 } 17103 createConnection() { 17104 const socket = this[INTERNAL].currentSocket; 17105 this[INTERNAL].currentSocket = undefined; 17106 if (!socket) { 17107 throw new Error('No socket was returned in the `connect()` function'); 17108 } 17109 return socket; 17110 } 17111 get defaultPort() { 17112 return (this[INTERNAL].defaultPort ?? 17113 (this.protocol === 'https:' ? 443 : 80)); 17114 } 17115 set defaultPort(v) { 17116 if (this[INTERNAL]) { 17117 this[INTERNAL].defaultPort = v; 17118 } 17119 } 17120 get protocol() { 17121 return (this[INTERNAL].protocol ?? 17122 (this.isSecureEndpoint() ? 'https:' : 'http:')); 17123 } 17124 set protocol(v) { 17125 if (this[INTERNAL]) { 17126 this[INTERNAL].protocol = v; 17127 } 17128 } 17129 } 17130 exports.Agent = Agent; 17131 //# sourceMappingURL=index.js.map 17132 17133 /***/ }), 17134 17135 /***/ 61231: 17136 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 17137 17138 "use strict"; 17139 17140 const indentString = __nccwpck_require__(98043); 17141 const cleanStack = __nccwpck_require__(27972); 17142 17143 const cleanInternalStack = stack => stack.replace(/\s+at .*aggregate-error\/index.js:\d+:\d+\)?/g, ''); 17144 17145 class AggregateError extends Error { 17146 constructor(errors) { 17147 if (!Array.isArray(errors)) { 17148 throw new TypeError(`Expected input to be an Array, got ${typeof errors}`); 17149 } 17150 17151 errors = [...errors].map(error => { 17152 if (error instanceof Error) { 17153 return error; 17154 } 17155 17156 if (error !== null && typeof error === 'object') { 17157 // Handle plain error objects with message property and/or possibly other metadata 17158 return Object.assign(new Error(error.message), error); 17159 } 17160 17161 return new Error(error); 17162 }); 17163 17164 let message = errors 17165 .map(error => { 17166 // The `stack` property is not standardized, so we can't assume it exists 17167 return typeof error.stack === 'string' ? cleanInternalStack(cleanStack(error.stack)) : String(error); 17168 }) 17169 .join('\n'); 17170 message = '\n' + indentString(message, 4); 17171 super(message); 17172 17173 this.name = 'AggregateError'; 17174 17175 Object.defineProperty(this, '_errors', {value: errors}); 17176 } 17177 17178 * [Symbol.iterator]() { 17179 for (const error of this._errors) { 17180 yield error; 17181 } 17182 } 17183 } 17184 17185 module.exports = AggregateError; 17186 17187 17188 /***/ }), 17189 17190 /***/ 9417: 17191 /***/ ((module) => { 17192 17193 "use strict"; 17194 17195 module.exports = balanced; 17196 function balanced(a, b, str) { 17197 if (a instanceof RegExp) a = maybeMatch(a, str); 17198 if (b instanceof RegExp) b = maybeMatch(b, str); 17199 17200 var r = range(a, b, str); 17201 17202 return r && { 17203 start: r[0], 17204 end: r[1], 17205 pre: str.slice(0, r[0]), 17206 body: str.slice(r[0] + a.length, r[1]), 17207 post: str.slice(r[1] + b.length) 17208 }; 17209 } 17210 17211 function maybeMatch(reg, str) { 17212 var m = str.match(reg); 17213 return m ? m[0] : null; 17214 } 17215 17216 balanced.range = range; 17217 function range(a, b, str) { 17218 var begs, beg, left, right, result; 17219 var ai = str.indexOf(a); 17220 var bi = str.indexOf(b, ai + 1); 17221 var i = ai; 17222 17223 if (ai >= 0 && bi > 0) { 17224 if(a===b) { 17225 return [ai, bi]; 17226 } 17227 begs = []; 17228 left = str.length; 17229 17230 while (i >= 0 && !result) { 17231 if (i == ai) { 17232 begs.push(i); 17233 ai = str.indexOf(a, i + 1); 17234 } else if (begs.length == 1) { 17235 result = [ begs.pop(), bi ]; 17236 } else { 17237 beg = begs.pop(); 17238 if (beg < left) { 17239 left = beg; 17240 right = bi; 17241 } 17242 17243 bi = str.indexOf(b, i + 1); 17244 } 17245 17246 i = ai < bi && ai >= 0 ? ai : bi; 17247 } 17248 17249 if (begs.length) { 17250 result = [ left, right ]; 17251 } 17252 } 17253 17254 return result; 17255 } 17256 17257 17258 /***/ }), 17259 17260 /***/ 83682: 17261 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 17262 17263 var register = __nccwpck_require__(44670); 17264 var addHook = __nccwpck_require__(5549); 17265 var removeHook = __nccwpck_require__(6819); 17266 17267 // bind with array of arguments: https://stackoverflow.com/a/21792913 17268 var bind = Function.bind; 17269 var bindable = bind.bind(bind); 17270 17271 function bindApi(hook, state, name) { 17272 var removeHookRef = bindable(removeHook, null).apply( 17273 null, 17274 name ? [state, name] : [state] 17275 ); 17276 hook.api = { remove: removeHookRef }; 17277 hook.remove = removeHookRef; 17278 ["before", "error", "after", "wrap"].forEach(function (kind) { 17279 var args = name ? [state, kind, name] : [state, kind]; 17280 hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args); 17281 }); 17282 } 17283 17284 function HookSingular() { 17285 var singularHookName = "h"; 17286 var singularHookState = { 17287 registry: {}, 17288 }; 17289 var singularHook = register.bind(null, singularHookState, singularHookName); 17290 bindApi(singularHook, singularHookState, singularHookName); 17291 return singularHook; 17292 } 17293 17294 function HookCollection() { 17295 var state = { 17296 registry: {}, 17297 }; 17298 17299 var hook = register.bind(null, state); 17300 bindApi(hook, state); 17301 17302 return hook; 17303 } 17304 17305 var collectionHookDeprecationMessageDisplayed = false; 17306 function Hook() { 17307 if (!collectionHookDeprecationMessageDisplayed) { 17308 console.warn( 17309 '[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4' 17310 ); 17311 collectionHookDeprecationMessageDisplayed = true; 17312 } 17313 return HookCollection(); 17314 } 17315 17316 Hook.Singular = HookSingular.bind(); 17317 Hook.Collection = HookCollection.bind(); 17318 17319 module.exports = Hook; 17320 // expose constructors as a named property for TypeScript 17321 module.exports.Hook = Hook; 17322 module.exports.Singular = Hook.Singular; 17323 module.exports.Collection = Hook.Collection; 17324 17325 17326 /***/ }), 17327 17328 /***/ 5549: 17329 /***/ ((module) => { 17330 17331 module.exports = addHook; 17332 17333 function addHook(state, kind, name, hook) { 17334 var orig = hook; 17335 if (!state.registry[name]) { 17336 state.registry[name] = []; 17337 } 17338 17339 if (kind === "before") { 17340 hook = function (method, options) { 17341 return Promise.resolve() 17342 .then(orig.bind(null, options)) 17343 .then(method.bind(null, options)); 17344 }; 17345 } 17346 17347 if (kind === "after") { 17348 hook = function (method, options) { 17349 var result; 17350 return Promise.resolve() 17351 .then(method.bind(null, options)) 17352 .then(function (result_) { 17353 result = result_; 17354 return orig(result, options); 17355 }) 17356 .then(function () { 17357 return result; 17358 }); 17359 }; 17360 } 17361 17362 if (kind === "error") { 17363 hook = function (method, options) { 17364 return Promise.resolve() 17365 .then(method.bind(null, options)) 17366 .catch(function (error) { 17367 return orig(error, options); 17368 }); 17369 }; 17370 } 17371 17372 state.registry[name].push({ 17373 hook: hook, 17374 orig: orig, 17375 }); 17376 } 17377 17378 17379 /***/ }), 17380 17381 /***/ 44670: 17382 /***/ ((module) => { 17383 17384 module.exports = register; 17385 17386 function register(state, name, method, options) { 17387 if (typeof method !== "function") { 17388 throw new Error("method for before hook must be a function"); 17389 } 17390 17391 if (!options) { 17392 options = {}; 17393 } 17394 17395 if (Array.isArray(name)) { 17396 return name.reverse().reduce(function (callback, name) { 17397 return register.bind(null, state, name, callback, options); 17398 }, method)(); 17399 } 17400 17401 return Promise.resolve().then(function () { 17402 if (!state.registry[name]) { 17403 return method(options); 17404 } 17405 17406 return state.registry[name].reduce(function (method, registered) { 17407 return registered.hook.bind(null, method, options); 17408 }, method)(); 17409 }); 17410 } 17411 17412 17413 /***/ }), 17414 17415 /***/ 6819: 17416 /***/ ((module) => { 17417 17418 module.exports = removeHook; 17419 17420 function removeHook(state, name, method) { 17421 if (!state.registry[name]) { 17422 return; 17423 } 17424 17425 var index = state.registry[name] 17426 .map(function (registered) { 17427 return registered.orig; 17428 }) 17429 .indexOf(method); 17430 17431 if (index === -1) { 17432 return; 17433 } 17434 17435 state.registry[name].splice(index, 1); 17436 } 17437 17438 17439 /***/ }), 17440 17441 /***/ 83491: 17442 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 17443 17444 "use strict"; 17445 17446 17447 const contentVer = (__nccwpck_require__(51526)/* ["cache-version"].content */ .Jw.k) 17448 const hashToSegments = __nccwpck_require__(12700) 17449 const path = __nccwpck_require__(71017) 17450 const ssri = __nccwpck_require__(4406) 17451 17452 // Current format of content file path: 17453 // 17454 // sha512-BaSE64Hex= -> 17455 // ~/.my-cache/content-v2/sha512/ba/da/55deadbeefc0ffee 17456 // 17457 module.exports = contentPath 17458 17459 function contentPath (cache, integrity) { 17460 const sri = ssri.parse(integrity, { single: true }) 17461 // contentPath is the *strongest* algo given 17462 return path.join( 17463 contentDir(cache), 17464 sri.algorithm, 17465 ...hashToSegments(sri.hexDigest()) 17466 ) 17467 } 17468 17469 module.exports.contentDir = contentDir 17470 17471 function contentDir (cache) { 17472 return path.join(cache, `content-v${contentVer}`) 17473 } 17474 17475 17476 /***/ }), 17477 17478 /***/ 99409: 17479 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 17480 17481 "use strict"; 17482 17483 17484 const fs = __nccwpck_require__(73292) 17485 const fsm = __nccwpck_require__(10968) 17486 const ssri = __nccwpck_require__(4406) 17487 const contentPath = __nccwpck_require__(83491) 17488 const Pipeline = __nccwpck_require__(69891) 17489 17490 module.exports = read 17491 17492 const MAX_SINGLE_READ_SIZE = 64 * 1024 * 1024 17493 async function read (cache, integrity, opts = {}) { 17494 const { size } = opts 17495 const { stat, cpath, sri } = await withContentSri(cache, integrity, async (cpath, sri) => { 17496 // get size 17497 const stat = size ? { size } : await fs.stat(cpath) 17498 return { stat, cpath, sri } 17499 }) 17500 17501 if (stat.size > MAX_SINGLE_READ_SIZE) { 17502 return readPipeline(cpath, stat.size, sri, new Pipeline()).concat() 17503 } 17504 17505 const data = await fs.readFile(cpath, { encoding: null }) 17506 17507 if (stat.size !== data.length) { 17508 throw sizeError(stat.size, data.length) 17509 } 17510 17511 if (!ssri.checkData(data, sri)) { 17512 throw integrityError(sri, cpath) 17513 } 17514 17515 return data 17516 } 17517 17518 const readPipeline = (cpath, size, sri, stream) => { 17519 stream.push( 17520 new fsm.ReadStream(cpath, { 17521 size, 17522 readSize: MAX_SINGLE_READ_SIZE, 17523 }), 17524 ssri.integrityStream({ 17525 integrity: sri, 17526 size, 17527 }) 17528 ) 17529 return stream 17530 } 17531 17532 module.exports.stream = readStream 17533 module.exports.readStream = readStream 17534 17535 function readStream (cache, integrity, opts = {}) { 17536 const { size } = opts 17537 const stream = new Pipeline() 17538 // Set all this up to run on the stream and then just return the stream 17539 Promise.resolve().then(async () => { 17540 const { stat, cpath, sri } = await withContentSri(cache, integrity, async (cpath, sri) => { 17541 // get size 17542 const stat = size ? { size } : await fs.stat(cpath) 17543 return { stat, cpath, sri } 17544 }) 17545 17546 return readPipeline(cpath, stat.size, sri, stream) 17547 }).catch(err => stream.emit('error', err)) 17548 17549 return stream 17550 } 17551 17552 module.exports.copy = copy 17553 17554 function copy (cache, integrity, dest) { 17555 return withContentSri(cache, integrity, (cpath, sri) => { 17556 return fs.copyFile(cpath, dest) 17557 }) 17558 } 17559 17560 module.exports.hasContent = hasContent 17561 17562 async function hasContent (cache, integrity) { 17563 if (!integrity) { 17564 return false 17565 } 17566 17567 try { 17568 return await withContentSri(cache, integrity, async (cpath, sri) => { 17569 const stat = await fs.stat(cpath) 17570 return { size: stat.size, sri, stat } 17571 }) 17572 } catch (err) { 17573 if (err.code === 'ENOENT') { 17574 return false 17575 } 17576 17577 if (err.code === 'EPERM') { 17578 /* istanbul ignore else */ 17579 if (process.platform !== 'win32') { 17580 throw err 17581 } else { 17582 return false 17583 } 17584 } 17585 } 17586 } 17587 17588 async function withContentSri (cache, integrity, fn) { 17589 const sri = ssri.parse(integrity) 17590 // If `integrity` has multiple entries, pick the first digest 17591 // with available local data. 17592 const algo = sri.pickAlgorithm() 17593 const digests = sri[algo] 17594 17595 if (digests.length <= 1) { 17596 const cpath = contentPath(cache, digests[0]) 17597 return fn(cpath, digests[0]) 17598 } else { 17599 // Can't use race here because a generic error can happen before 17600 // a ENOENT error, and can happen before a valid result 17601 const results = await Promise.all(digests.map(async (meta) => { 17602 try { 17603 return await withContentSri(cache, meta, fn) 17604 } catch (err) { 17605 if (err.code === 'ENOENT') { 17606 return Object.assign( 17607 new Error('No matching content found for ' + sri.toString()), 17608 { code: 'ENOENT' } 17609 ) 17610 } 17611 return err 17612 } 17613 })) 17614 // Return the first non error if it is found 17615 const result = results.find((r) => !(r instanceof Error)) 17616 if (result) { 17617 return result 17618 } 17619 17620 // Throw the No matching content found error 17621 const enoentError = results.find((r) => r.code === 'ENOENT') 17622 if (enoentError) { 17623 throw enoentError 17624 } 17625 17626 // Throw generic error 17627 throw results.find((r) => r instanceof Error) 17628 } 17629 } 17630 17631 function sizeError (expected, found) { 17632 /* eslint-disable-next-line max-len */ 17633 const err = new Error(`Bad data size: expected inserted data to be ${expected} bytes, but got ${found} instead`) 17634 err.expected = expected 17635 err.found = found 17636 err.code = 'EBADSIZE' 17637 return err 17638 } 17639 17640 function integrityError (sri, path) { 17641 const err = new Error(`Integrity verification failed for ${sri} (${path})`) 17642 err.code = 'EINTEGRITY' 17643 err.sri = sri 17644 err.path = path 17645 return err 17646 } 17647 17648 17649 /***/ }), 17650 17651 /***/ 51343: 17652 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 17653 17654 "use strict"; 17655 17656 17657 const fs = __nccwpck_require__(73292) 17658 const contentPath = __nccwpck_require__(83491) 17659 const { hasContent } = __nccwpck_require__(99409) 17660 17661 module.exports = rm 17662 17663 async function rm (cache, integrity) { 17664 const content = await hasContent(cache, integrity) 17665 // ~pretty~ sure we can't end up with a content lacking sri, but be safe 17666 if (content && content.sri) { 17667 await fs.rm(contentPath(cache, content.sri), { recursive: true, force: true }) 17668 return true 17669 } else { 17670 return false 17671 } 17672 } 17673 17674 17675 /***/ }), 17676 17677 /***/ 73729: 17678 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 17679 17680 "use strict"; 17681 17682 17683 const events = __nccwpck_require__(82361) 17684 17685 const contentPath = __nccwpck_require__(83491) 17686 const fs = __nccwpck_require__(73292) 17687 const { moveFile } = __nccwpck_require__(10575) 17688 const { Minipass } = __nccwpck_require__(14968) 17689 const Pipeline = __nccwpck_require__(69891) 17690 const Flush = __nccwpck_require__(4181) 17691 const path = __nccwpck_require__(71017) 17692 const ssri = __nccwpck_require__(4406) 17693 const uniqueFilename = __nccwpck_require__(91747) 17694 const fsm = __nccwpck_require__(10968) 17695 17696 module.exports = write 17697 17698 // Cache of move operations in process so we don't duplicate 17699 const moveOperations = new Map() 17700 17701 async function write (cache, data, opts = {}) { 17702 const { algorithms, size, integrity } = opts 17703 17704 if (typeof size === 'number' && data.length !== size) { 17705 throw sizeError(size, data.length) 17706 } 17707 17708 const sri = ssri.fromData(data, algorithms ? { algorithms } : {}) 17709 if (integrity && !ssri.checkData(data, integrity, opts)) { 17710 throw checksumError(integrity, sri) 17711 } 17712 17713 for (const algo in sri) { 17714 const tmp = await makeTmp(cache, opts) 17715 const hash = sri[algo].toString() 17716 try { 17717 await fs.writeFile(tmp.target, data, { flag: 'wx' }) 17718 await moveToDestination(tmp, cache, hash, opts) 17719 } finally { 17720 if (!tmp.moved) { 17721 await fs.rm(tmp.target, { recursive: true, force: true }) 17722 } 17723 } 17724 } 17725 return { integrity: sri, size: data.length } 17726 } 17727 17728 module.exports.stream = writeStream 17729 17730 // writes proxied to the 'inputStream' that is passed to the Promise 17731 // 'end' is deferred until content is handled. 17732 class CacacheWriteStream extends Flush { 17733 constructor (cache, opts) { 17734 super() 17735 this.opts = opts 17736 this.cache = cache 17737 this.inputStream = new Minipass() 17738 this.inputStream.on('error', er => this.emit('error', er)) 17739 this.inputStream.on('drain', () => this.emit('drain')) 17740 this.handleContentP = null 17741 } 17742 17743 write (chunk, encoding, cb) { 17744 if (!this.handleContentP) { 17745 this.handleContentP = handleContent( 17746 this.inputStream, 17747 this.cache, 17748 this.opts 17749 ) 17750 this.handleContentP.catch(error => this.emit('error', error)) 17751 } 17752 return this.inputStream.write(chunk, encoding, cb) 17753 } 17754 17755 flush (cb) { 17756 this.inputStream.end(() => { 17757 if (!this.handleContentP) { 17758 const e = new Error('Cache input stream was empty') 17759 e.code = 'ENODATA' 17760 // empty streams are probably emitting end right away. 17761 // defer this one tick by rejecting a promise on it. 17762 return Promise.reject(e).catch(cb) 17763 } 17764 // eslint-disable-next-line promise/catch-or-return 17765 this.handleContentP.then( 17766 (res) => { 17767 res.integrity && this.emit('integrity', res.integrity) 17768 // eslint-disable-next-line promise/always-return 17769 res.size !== null && this.emit('size', res.size) 17770 cb() 17771 }, 17772 (er) => cb(er) 17773 ) 17774 }) 17775 } 17776 } 17777 17778 function writeStream (cache, opts = {}) { 17779 return new CacacheWriteStream(cache, opts) 17780 } 17781 17782 async function handleContent (inputStream, cache, opts) { 17783 const tmp = await makeTmp(cache, opts) 17784 try { 17785 const res = await pipeToTmp(inputStream, cache, tmp.target, opts) 17786 await moveToDestination( 17787 tmp, 17788 cache, 17789 res.integrity, 17790 opts 17791 ) 17792 return res 17793 } finally { 17794 if (!tmp.moved) { 17795 await fs.rm(tmp.target, { recursive: true, force: true }) 17796 } 17797 } 17798 } 17799 17800 async function pipeToTmp (inputStream, cache, tmpTarget, opts) { 17801 const outStream = new fsm.WriteStream(tmpTarget, { 17802 flags: 'wx', 17803 }) 17804 17805 if (opts.integrityEmitter) { 17806 // we need to create these all simultaneously since they can fire in any order 17807 const [integrity, size] = await Promise.all([ 17808 events.once(opts.integrityEmitter, 'integrity').then(res => res[0]), 17809 events.once(opts.integrityEmitter, 'size').then(res => res[0]), 17810 new Pipeline(inputStream, outStream).promise(), 17811 ]) 17812 return { integrity, size } 17813 } 17814 17815 let integrity 17816 let size 17817 const hashStream = ssri.integrityStream({ 17818 integrity: opts.integrity, 17819 algorithms: opts.algorithms, 17820 size: opts.size, 17821 }) 17822 hashStream.on('integrity', i => { 17823 integrity = i 17824 }) 17825 hashStream.on('size', s => { 17826 size = s 17827 }) 17828 17829 const pipeline = new Pipeline(inputStream, hashStream, outStream) 17830 await pipeline.promise() 17831 return { integrity, size } 17832 } 17833 17834 async function makeTmp (cache, opts) { 17835 const tmpTarget = uniqueFilename(path.join(cache, 'tmp'), opts.tmpPrefix) 17836 await fs.mkdir(path.dirname(tmpTarget), { recursive: true }) 17837 return { 17838 target: tmpTarget, 17839 moved: false, 17840 } 17841 } 17842 17843 async function moveToDestination (tmp, cache, sri, opts) { 17844 const destination = contentPath(cache, sri) 17845 const destDir = path.dirname(destination) 17846 if (moveOperations.has(destination)) { 17847 return moveOperations.get(destination) 17848 } 17849 moveOperations.set( 17850 destination, 17851 fs.mkdir(destDir, { recursive: true }) 17852 .then(async () => { 17853 await moveFile(tmp.target, destination, { overwrite: false }) 17854 tmp.moved = true 17855 return tmp.moved 17856 }) 17857 .catch(err => { 17858 if (!err.message.startsWith('The destination file exists')) { 17859 throw Object.assign(err, { code: 'EEXIST' }) 17860 } 17861 }).finally(() => { 17862 moveOperations.delete(destination) 17863 }) 17864 17865 ) 17866 return moveOperations.get(destination) 17867 } 17868 17869 function sizeError (expected, found) { 17870 /* eslint-disable-next-line max-len */ 17871 const err = new Error(`Bad data size: expected inserted data to be ${expected} bytes, but got ${found} instead`) 17872 err.expected = expected 17873 err.found = found 17874 err.code = 'EBADSIZE' 17875 return err 17876 } 17877 17878 function checksumError (expected, found) { 17879 const err = new Error(`Integrity check failed: 17880 Wanted: ${expected} 17881 Found: ${found}`) 17882 err.code = 'EINTEGRITY' 17883 err.expected = expected 17884 err.found = found 17885 return err 17886 } 17887 17888 17889 /***/ }), 17890 17891 /***/ 90595: 17892 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 17893 17894 "use strict"; 17895 17896 17897 const crypto = __nccwpck_require__(6113) 17898 const { 17899 appendFile, 17900 mkdir, 17901 readFile, 17902 readdir, 17903 rm, 17904 writeFile, 17905 } = __nccwpck_require__(73292) 17906 const { Minipass } = __nccwpck_require__(14968) 17907 const path = __nccwpck_require__(71017) 17908 const ssri = __nccwpck_require__(4406) 17909 const uniqueFilename = __nccwpck_require__(91747) 17910 17911 const contentPath = __nccwpck_require__(83491) 17912 const hashToSegments = __nccwpck_require__(12700) 17913 const indexV = (__nccwpck_require__(51526)/* ["cache-version"].index */ .Jw.K) 17914 const { moveFile } = __nccwpck_require__(10575) 17915 17916 module.exports.NotFoundError = class NotFoundError extends Error { 17917 constructor (cache, key) { 17918 super(`No cache entry for ${key} found in ${cache}`) 17919 this.code = 'ENOENT' 17920 this.cache = cache 17921 this.key = key 17922 } 17923 } 17924 17925 module.exports.compact = compact 17926 17927 async function compact (cache, key, matchFn, opts = {}) { 17928 const bucket = bucketPath(cache, key) 17929 const entries = await bucketEntries(bucket) 17930 const newEntries = [] 17931 // we loop backwards because the bottom-most result is the newest 17932 // since we add new entries with appendFile 17933 for (let i = entries.length - 1; i >= 0; --i) { 17934 const entry = entries[i] 17935 // a null integrity could mean either a delete was appended 17936 // or the user has simply stored an index that does not map 17937 // to any content. we determine if the user wants to keep the 17938 // null integrity based on the validateEntry function passed in options. 17939 // if the integrity is null and no validateEntry is provided, we break 17940 // as we consider the null integrity to be a deletion of everything 17941 // that came before it. 17942 if (entry.integrity === null && !opts.validateEntry) { 17943 break 17944 } 17945 17946 // if this entry is valid, and it is either the first entry or 17947 // the newEntries array doesn't already include an entry that 17948 // matches this one based on the provided matchFn, then we add 17949 // it to the beginning of our list 17950 if ((!opts.validateEntry || opts.validateEntry(entry) === true) && 17951 (newEntries.length === 0 || 17952 !newEntries.find((oldEntry) => matchFn(oldEntry, entry)))) { 17953 newEntries.unshift(entry) 17954 } 17955 } 17956 17957 const newIndex = '\n' + newEntries.map((entry) => { 17958 const stringified = JSON.stringify(entry) 17959 const hash = hashEntry(stringified) 17960 return `${hash}\t${stringified}` 17961 }).join('\n') 17962 17963 const setup = async () => { 17964 const target = uniqueFilename(path.join(cache, 'tmp'), opts.tmpPrefix) 17965 await mkdir(path.dirname(target), { recursive: true }) 17966 return { 17967 target, 17968 moved: false, 17969 } 17970 } 17971 17972 const teardown = async (tmp) => { 17973 if (!tmp.moved) { 17974 return rm(tmp.target, { recursive: true, force: true }) 17975 } 17976 } 17977 17978 const write = async (tmp) => { 17979 await writeFile(tmp.target, newIndex, { flag: 'wx' }) 17980 await mkdir(path.dirname(bucket), { recursive: true }) 17981 // we use @npmcli/move-file directly here because we 17982 // want to overwrite the existing file 17983 await moveFile(tmp.target, bucket) 17984 tmp.moved = true 17985 } 17986 17987 // write the file atomically 17988 const tmp = await setup() 17989 try { 17990 await write(tmp) 17991 } finally { 17992 await teardown(tmp) 17993 } 17994 17995 // we reverse the list we generated such that the newest 17996 // entries come first in order to make looping through them easier 17997 // the true passed to formatEntry tells it to keep null 17998 // integrity values, if they made it this far it's because 17999 // validateEntry returned true, and as such we should return it 18000 return newEntries.reverse().map((entry) => formatEntry(cache, entry, true)) 18001 } 18002 18003 module.exports.insert = insert 18004 18005 async function insert (cache, key, integrity, opts = {}) { 18006 const { metadata, size, time } = opts 18007 const bucket = bucketPath(cache, key) 18008 const entry = { 18009 key, 18010 integrity: integrity && ssri.stringify(integrity), 18011 time: time || Date.now(), 18012 size, 18013 metadata, 18014 } 18015 try { 18016 await mkdir(path.dirname(bucket), { recursive: true }) 18017 const stringified = JSON.stringify(entry) 18018 // NOTE - Cleverness ahoy! 18019 // 18020 // This works because it's tremendously unlikely for an entry to corrupt 18021 // another while still preserving the string length of the JSON in 18022 // question. So, we just slap the length in there and verify it on read. 18023 // 18024 // Thanks to @isaacs for the whiteboarding session that ended up with 18025 // this. 18026 await appendFile(bucket, `\n${hashEntry(stringified)}\t${stringified}`) 18027 } catch (err) { 18028 if (err.code === 'ENOENT') { 18029 return undefined 18030 } 18031 18032 throw err 18033 } 18034 return formatEntry(cache, entry) 18035 } 18036 18037 module.exports.find = find 18038 18039 async function find (cache, key) { 18040 const bucket = bucketPath(cache, key) 18041 try { 18042 const entries = await bucketEntries(bucket) 18043 return entries.reduce((latest, next) => { 18044 if (next && next.key === key) { 18045 return formatEntry(cache, next) 18046 } else { 18047 return latest 18048 } 18049 }, null) 18050 } catch (err) { 18051 if (err.code === 'ENOENT') { 18052 return null 18053 } else { 18054 throw err 18055 } 18056 } 18057 } 18058 18059 module.exports["delete"] = del 18060 18061 function del (cache, key, opts = {}) { 18062 if (!opts.removeFully) { 18063 return insert(cache, key, null, opts) 18064 } 18065 18066 const bucket = bucketPath(cache, key) 18067 return rm(bucket, { recursive: true, force: true }) 18068 } 18069 18070 module.exports.lsStream = lsStream 18071 18072 function lsStream (cache) { 18073 const indexDir = bucketDir(cache) 18074 const stream = new Minipass({ objectMode: true }) 18075 18076 // Set all this up to run on the stream and then just return the stream 18077 Promise.resolve().then(async () => { 18078 const buckets = await readdirOrEmpty(indexDir) 18079 await Promise.all(buckets.map(async (bucket) => { 18080 const bucketPath = path.join(indexDir, bucket) 18081 const subbuckets = await readdirOrEmpty(bucketPath) 18082 await Promise.all(subbuckets.map(async (subbucket) => { 18083 const subbucketPath = path.join(bucketPath, subbucket) 18084 18085 // "/cachename/<bucket 0xFF>/<bucket 0xFF>./*" 18086 const subbucketEntries = await readdirOrEmpty(subbucketPath) 18087 await Promise.all(subbucketEntries.map(async (entry) => { 18088 const entryPath = path.join(subbucketPath, entry) 18089 try { 18090 const entries = await bucketEntries(entryPath) 18091 // using a Map here prevents duplicate keys from showing up 18092 // twice, I guess? 18093 const reduced = entries.reduce((acc, entry) => { 18094 acc.set(entry.key, entry) 18095 return acc 18096 }, new Map()) 18097 // reduced is a map of key => entry 18098 for (const entry of reduced.values()) { 18099 const formatted = formatEntry(cache, entry) 18100 if (formatted) { 18101 stream.write(formatted) 18102 } 18103 } 18104 } catch (err) { 18105 if (err.code === 'ENOENT') { 18106 return undefined 18107 } 18108 throw err 18109 } 18110 })) 18111 })) 18112 })) 18113 stream.end() 18114 return stream 18115 }).catch(err => stream.emit('error', err)) 18116 18117 return stream 18118 } 18119 18120 module.exports.ls = ls 18121 18122 async function ls (cache) { 18123 const entries = await lsStream(cache).collect() 18124 return entries.reduce((acc, xs) => { 18125 acc[xs.key] = xs 18126 return acc 18127 }, {}) 18128 } 18129 18130 module.exports.bucketEntries = bucketEntries 18131 18132 async function bucketEntries (bucket, filter) { 18133 const data = await readFile(bucket, 'utf8') 18134 return _bucketEntries(data, filter) 18135 } 18136 18137 function _bucketEntries (data, filter) { 18138 const entries = [] 18139 data.split('\n').forEach((entry) => { 18140 if (!entry) { 18141 return 18142 } 18143 18144 const pieces = entry.split('\t') 18145 if (!pieces[1] || hashEntry(pieces[1]) !== pieces[0]) { 18146 // Hash is no good! Corruption or malice? Doesn't matter! 18147 // EJECT EJECT 18148 return 18149 } 18150 let obj 18151 try { 18152 obj = JSON.parse(pieces[1]) 18153 } catch (_) { 18154 // eslint-ignore-next-line no-empty-block 18155 } 18156 // coverage disabled here, no need to test with an entry that parses to something falsey 18157 // istanbul ignore else 18158 if (obj) { 18159 entries.push(obj) 18160 } 18161 }) 18162 return entries 18163 } 18164 18165 module.exports.bucketDir = bucketDir 18166 18167 function bucketDir (cache) { 18168 return path.join(cache, `index-v${indexV}`) 18169 } 18170 18171 module.exports.bucketPath = bucketPath 18172 18173 function bucketPath (cache, key) { 18174 const hashed = hashKey(key) 18175 return path.join.apply( 18176 path, 18177 [bucketDir(cache)].concat(hashToSegments(hashed)) 18178 ) 18179 } 18180 18181 module.exports.hashKey = hashKey 18182 18183 function hashKey (key) { 18184 return hash(key, 'sha256') 18185 } 18186 18187 module.exports.hashEntry = hashEntry 18188 18189 function hashEntry (str) { 18190 return hash(str, 'sha1') 18191 } 18192 18193 function hash (str, digest) { 18194 return crypto 18195 .createHash(digest) 18196 .update(str) 18197 .digest('hex') 18198 } 18199 18200 function formatEntry (cache, entry, keepAll) { 18201 // Treat null digests as deletions. They'll shadow any previous entries. 18202 if (!entry.integrity && !keepAll) { 18203 return null 18204 } 18205 18206 return { 18207 key: entry.key, 18208 integrity: entry.integrity, 18209 path: entry.integrity ? contentPath(cache, entry.integrity) : undefined, 18210 size: entry.size, 18211 time: entry.time, 18212 metadata: entry.metadata, 18213 } 18214 } 18215 18216 function readdirOrEmpty (dir) { 18217 return readdir(dir).catch((err) => { 18218 if (err.code === 'ENOENT' || err.code === 'ENOTDIR') { 18219 return [] 18220 } 18221 18222 throw err 18223 }) 18224 } 18225 18226 18227 /***/ }), 18228 18229 /***/ 10408: 18230 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 18231 18232 "use strict"; 18233 18234 18235 const Collect = __nccwpck_require__(74658) 18236 const { Minipass } = __nccwpck_require__(14968) 18237 const Pipeline = __nccwpck_require__(69891) 18238 18239 const index = __nccwpck_require__(90595) 18240 const memo = __nccwpck_require__(5575) 18241 const read = __nccwpck_require__(99409) 18242 18243 async function getData (cache, key, opts = {}) { 18244 const { integrity, memoize, size } = opts 18245 const memoized = memo.get(cache, key, opts) 18246 if (memoized && memoize !== false) { 18247 return { 18248 metadata: memoized.entry.metadata, 18249 data: memoized.data, 18250 integrity: memoized.entry.integrity, 18251 size: memoized.entry.size, 18252 } 18253 } 18254 18255 const entry = await index.find(cache, key, opts) 18256 if (!entry) { 18257 throw new index.NotFoundError(cache, key) 18258 } 18259 const data = await read(cache, entry.integrity, { integrity, size }) 18260 if (memoize) { 18261 memo.put(cache, entry, data, opts) 18262 } 18263 18264 return { 18265 data, 18266 metadata: entry.metadata, 18267 size: entry.size, 18268 integrity: entry.integrity, 18269 } 18270 } 18271 module.exports = getData 18272 18273 async function getDataByDigest (cache, key, opts = {}) { 18274 const { integrity, memoize, size } = opts 18275 const memoized = memo.get.byDigest(cache, key, opts) 18276 if (memoized && memoize !== false) { 18277 return memoized 18278 } 18279 18280 const res = await read(cache, key, { integrity, size }) 18281 if (memoize) { 18282 memo.put.byDigest(cache, key, res, opts) 18283 } 18284 return res 18285 } 18286 module.exports.byDigest = getDataByDigest 18287 18288 const getMemoizedStream = (memoized) => { 18289 const stream = new Minipass() 18290 stream.on('newListener', function (ev, cb) { 18291 ev === 'metadata' && cb(memoized.entry.metadata) 18292 ev === 'integrity' && cb(memoized.entry.integrity) 18293 ev === 'size' && cb(memoized.entry.size) 18294 }) 18295 stream.end(memoized.data) 18296 return stream 18297 } 18298 18299 function getStream (cache, key, opts = {}) { 18300 const { memoize, size } = opts 18301 const memoized = memo.get(cache, key, opts) 18302 if (memoized && memoize !== false) { 18303 return getMemoizedStream(memoized) 18304 } 18305 18306 const stream = new Pipeline() 18307 // Set all this up to run on the stream and then just return the stream 18308 Promise.resolve().then(async () => { 18309 const entry = await index.find(cache, key) 18310 if (!entry) { 18311 throw new index.NotFoundError(cache, key) 18312 } 18313 18314 stream.emit('metadata', entry.metadata) 18315 stream.emit('integrity', entry.integrity) 18316 stream.emit('size', entry.size) 18317 stream.on('newListener', function (ev, cb) { 18318 ev === 'metadata' && cb(entry.metadata) 18319 ev === 'integrity' && cb(entry.integrity) 18320 ev === 'size' && cb(entry.size) 18321 }) 18322 18323 const src = read.readStream( 18324 cache, 18325 entry.integrity, 18326 { ...opts, size: typeof size !== 'number' ? entry.size : size } 18327 ) 18328 18329 if (memoize) { 18330 const memoStream = new Collect.PassThrough() 18331 memoStream.on('collect', data => memo.put(cache, entry, data, opts)) 18332 stream.unshift(memoStream) 18333 } 18334 stream.unshift(src) 18335 return stream 18336 }).catch((err) => stream.emit('error', err)) 18337 18338 return stream 18339 } 18340 18341 module.exports.stream = getStream 18342 18343 function getStreamDigest (cache, integrity, opts = {}) { 18344 const { memoize } = opts 18345 const memoized = memo.get.byDigest(cache, integrity, opts) 18346 if (memoized && memoize !== false) { 18347 const stream = new Minipass() 18348 stream.end(memoized) 18349 return stream 18350 } else { 18351 const stream = read.readStream(cache, integrity, opts) 18352 if (!memoize) { 18353 return stream 18354 } 18355 18356 const memoStream = new Collect.PassThrough() 18357 memoStream.on('collect', data => memo.put.byDigest( 18358 cache, 18359 integrity, 18360 data, 18361 opts 18362 )) 18363 return new Pipeline(stream, memoStream) 18364 } 18365 } 18366 18367 module.exports.stream.byDigest = getStreamDigest 18368 18369 function info (cache, key, opts = {}) { 18370 const { memoize } = opts 18371 const memoized = memo.get(cache, key, opts) 18372 if (memoized && memoize !== false) { 18373 return Promise.resolve(memoized.entry) 18374 } else { 18375 return index.find(cache, key) 18376 } 18377 } 18378 module.exports.info = info 18379 18380 async function copy (cache, key, dest, opts = {}) { 18381 const entry = await index.find(cache, key, opts) 18382 if (!entry) { 18383 throw new index.NotFoundError(cache, key) 18384 } 18385 await read.copy(cache, entry.integrity, dest, opts) 18386 return { 18387 metadata: entry.metadata, 18388 size: entry.size, 18389 integrity: entry.integrity, 18390 } 18391 } 18392 18393 module.exports.copy = copy 18394 18395 async function copyByDigest (cache, key, dest, opts = {}) { 18396 await read.copy(cache, key, dest, opts) 18397 return key 18398 } 18399 18400 module.exports.copy.byDigest = copyByDigest 18401 18402 module.exports.hasContent = read.hasContent 18403 18404 18405 /***/ }), 18406 18407 /***/ 85490: 18408 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 18409 18410 "use strict"; 18411 18412 18413 const get = __nccwpck_require__(10408) 18414 const put = __nccwpck_require__(70178) 18415 const rm = __nccwpck_require__(70123) 18416 const verify = __nccwpck_require__(70584) 18417 const { clearMemoized } = __nccwpck_require__(5575) 18418 const tmp = __nccwpck_require__(70644) 18419 const index = __nccwpck_require__(90595) 18420 18421 module.exports.index = {} 18422 module.exports.index.compact = index.compact 18423 module.exports.index.insert = index.insert 18424 18425 module.exports.ls = index.ls 18426 module.exports.ls.stream = index.lsStream 18427 18428 module.exports.get = get 18429 module.exports.get.byDigest = get.byDigest 18430 module.exports.get.stream = get.stream 18431 module.exports.get.stream.byDigest = get.stream.byDigest 18432 module.exports.get.copy = get.copy 18433 module.exports.get.copy.byDigest = get.copy.byDigest 18434 module.exports.get.info = get.info 18435 module.exports.get.hasContent = get.hasContent 18436 18437 module.exports.put = put 18438 module.exports.put.stream = put.stream 18439 18440 module.exports.rm = rm.entry 18441 module.exports.rm.all = rm.all 18442 module.exports.rm.entry = module.exports.rm 18443 module.exports.rm.content = rm.content 18444 18445 module.exports.clearMemoized = clearMemoized 18446 18447 module.exports.tmp = {} 18448 module.exports.tmp.mkdir = tmp.mkdir 18449 module.exports.tmp.withTmp = tmp.withTmp 18450 18451 module.exports.verify = verify 18452 module.exports.verify.lastRun = verify.lastRun 18453 18454 18455 /***/ }), 18456 18457 /***/ 5575: 18458 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 18459 18460 "use strict"; 18461 18462 18463 const { LRUCache } = __nccwpck_require__(96874) 18464 18465 const MEMOIZED = new LRUCache({ 18466 max: 500, 18467 maxSize: 50 * 1024 * 1024, // 50MB 18468 ttl: 3 * 60 * 1000, // 3 minutes 18469 sizeCalculation: (entry, key) => key.startsWith('key:') ? entry.data.length : entry.length, 18470 }) 18471 18472 module.exports.clearMemoized = clearMemoized 18473 18474 function clearMemoized () { 18475 const old = {} 18476 MEMOIZED.forEach((v, k) => { 18477 old[k] = v 18478 }) 18479 MEMOIZED.clear() 18480 return old 18481 } 18482 18483 module.exports.put = put 18484 18485 function put (cache, entry, data, opts) { 18486 pickMem(opts).set(`key:${cache}:${entry.key}`, { entry, data }) 18487 putDigest(cache, entry.integrity, data, opts) 18488 } 18489 18490 module.exports.put.byDigest = putDigest 18491 18492 function putDigest (cache, integrity, data, opts) { 18493 pickMem(opts).set(`digest:${cache}:${integrity}`, data) 18494 } 18495 18496 module.exports.get = get 18497 18498 function get (cache, key, opts) { 18499 return pickMem(opts).get(`key:${cache}:${key}`) 18500 } 18501 18502 module.exports.get.byDigest = getDigest 18503 18504 function getDigest (cache, integrity, opts) { 18505 return pickMem(opts).get(`digest:${cache}:${integrity}`) 18506 } 18507 18508 class ObjProxy { 18509 constructor (obj) { 18510 this.obj = obj 18511 } 18512 18513 get (key) { 18514 return this.obj[key] 18515 } 18516 18517 set (key, val) { 18518 this.obj[key] = val 18519 } 18520 } 18521 18522 function pickMem (opts) { 18523 if (!opts || !opts.memoize) { 18524 return MEMOIZED 18525 } else if (opts.memoize.get && opts.memoize.set) { 18526 return opts.memoize 18527 } else if (typeof opts.memoize === 'object') { 18528 return new ObjProxy(opts.memoize) 18529 } else { 18530 return MEMOIZED 18531 } 18532 } 18533 18534 18535 /***/ }), 18536 18537 /***/ 70178: 18538 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 18539 18540 "use strict"; 18541 18542 18543 const index = __nccwpck_require__(90595) 18544 const memo = __nccwpck_require__(5575) 18545 const write = __nccwpck_require__(73729) 18546 const Flush = __nccwpck_require__(4181) 18547 const { PassThrough } = __nccwpck_require__(74658) 18548 const Pipeline = __nccwpck_require__(69891) 18549 18550 const putOpts = (opts) => ({ 18551 algorithms: ['sha512'], 18552 ...opts, 18553 }) 18554 18555 module.exports = putData 18556 18557 async function putData (cache, key, data, opts = {}) { 18558 const { memoize } = opts 18559 opts = putOpts(opts) 18560 const res = await write(cache, data, opts) 18561 const entry = await index.insert(cache, key, res.integrity, { ...opts, size: res.size }) 18562 if (memoize) { 18563 memo.put(cache, entry, data, opts) 18564 } 18565 18566 return res.integrity 18567 } 18568 18569 module.exports.stream = putStream 18570 18571 function putStream (cache, key, opts = {}) { 18572 const { memoize } = opts 18573 opts = putOpts(opts) 18574 let integrity 18575 let size 18576 let error 18577 18578 let memoData 18579 const pipeline = new Pipeline() 18580 // first item in the pipeline is the memoizer, because we need 18581 // that to end first and get the collected data. 18582 if (memoize) { 18583 const memoizer = new PassThrough().on('collect', data => { 18584 memoData = data 18585 }) 18586 pipeline.push(memoizer) 18587 } 18588 18589 // contentStream is a write-only, not a passthrough 18590 // no data comes out of it. 18591 const contentStream = write.stream(cache, opts) 18592 .on('integrity', (int) => { 18593 integrity = int 18594 }) 18595 .on('size', (s) => { 18596 size = s 18597 }) 18598 .on('error', (err) => { 18599 error = err 18600 }) 18601 18602 pipeline.push(contentStream) 18603 18604 // last but not least, we write the index and emit hash and size, 18605 // and memoize if we're doing that 18606 pipeline.push(new Flush({ 18607 async flush () { 18608 if (!error) { 18609 const entry = await index.insert(cache, key, integrity, { ...opts, size }) 18610 if (memoize && memoData) { 18611 memo.put(cache, entry, memoData, opts) 18612 } 18613 pipeline.emit('integrity', integrity) 18614 pipeline.emit('size', size) 18615 } 18616 }, 18617 })) 18618 18619 return pipeline 18620 } 18621 18622 18623 /***/ }), 18624 18625 /***/ 70123: 18626 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 18627 18628 "use strict"; 18629 18630 18631 const { rm } = __nccwpck_require__(73292) 18632 const glob = __nccwpck_require__(98066) 18633 const index = __nccwpck_require__(90595) 18634 const memo = __nccwpck_require__(5575) 18635 const path = __nccwpck_require__(71017) 18636 const rmContent = __nccwpck_require__(51343) 18637 18638 module.exports = entry 18639 module.exports.entry = entry 18640 18641 function entry (cache, key, opts) { 18642 memo.clearMemoized() 18643 return index.delete(cache, key, opts) 18644 } 18645 18646 module.exports.content = content 18647 18648 function content (cache, integrity) { 18649 memo.clearMemoized() 18650 return rmContent(cache, integrity) 18651 } 18652 18653 module.exports.all = all 18654 18655 async function all (cache) { 18656 memo.clearMemoized() 18657 const paths = await glob(path.join(cache, '*(content-*|index-*)'), { silent: true, nosort: true }) 18658 return Promise.all(paths.map((p) => rm(p, { recursive: true, force: true }))) 18659 } 18660 18661 18662 /***/ }), 18663 18664 /***/ 98066: 18665 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 18666 18667 "use strict"; 18668 18669 18670 const { glob } = __nccwpck_require__(50836) 18671 const path = __nccwpck_require__(71017) 18672 18673 const globify = (pattern) => pattern.split(path.win32.sep).join(path.posix.sep) 18674 module.exports = (path, options) => glob(globify(path), options) 18675 18676 18677 /***/ }), 18678 18679 /***/ 12700: 18680 /***/ ((module) => { 18681 18682 "use strict"; 18683 18684 18685 module.exports = hashToSegments 18686 18687 function hashToSegments (hash) { 18688 return [hash.slice(0, 2), hash.slice(2, 4), hash.slice(4)] 18689 } 18690 18691 18692 /***/ }), 18693 18694 /***/ 70644: 18695 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 18696 18697 "use strict"; 18698 18699 18700 const { withTempDir } = __nccwpck_require__(10575) 18701 const fs = __nccwpck_require__(73292) 18702 const path = __nccwpck_require__(71017) 18703 18704 module.exports.mkdir = mktmpdir 18705 18706 async function mktmpdir (cache, opts = {}) { 18707 const { tmpPrefix } = opts 18708 const tmpDir = path.join(cache, 'tmp') 18709 await fs.mkdir(tmpDir, { recursive: true, owner: 'inherit' }) 18710 // do not use path.join(), it drops the trailing / if tmpPrefix is unset 18711 const target = `${tmpDir}${path.sep}${tmpPrefix || ''}` 18712 return fs.mkdtemp(target, { owner: 'inherit' }) 18713 } 18714 18715 module.exports.withTmp = withTmp 18716 18717 function withTmp (cache, opts, cb) { 18718 if (!cb) { 18719 cb = opts 18720 opts = {} 18721 } 18722 return withTempDir(path.join(cache, 'tmp'), cb, opts) 18723 } 18724 18725 18726 /***/ }), 18727 18728 /***/ 70584: 18729 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 18730 18731 "use strict"; 18732 18733 18734 const { 18735 mkdir, 18736 readFile, 18737 rm, 18738 stat, 18739 truncate, 18740 writeFile, 18741 } = __nccwpck_require__(73292) 18742 const pMap = __nccwpck_require__(91855) 18743 const contentPath = __nccwpck_require__(83491) 18744 const fsm = __nccwpck_require__(10968) 18745 const glob = __nccwpck_require__(98066) 18746 const index = __nccwpck_require__(90595) 18747 const path = __nccwpck_require__(71017) 18748 const ssri = __nccwpck_require__(4406) 18749 18750 const hasOwnProperty = (obj, key) => 18751 Object.prototype.hasOwnProperty.call(obj, key) 18752 18753 const verifyOpts = (opts) => ({ 18754 concurrency: 20, 18755 log: { silly () {} }, 18756 ...opts, 18757 }) 18758 18759 module.exports = verify 18760 18761 async function verify (cache, opts) { 18762 opts = verifyOpts(opts) 18763 opts.log.silly('verify', 'verifying cache at', cache) 18764 18765 const steps = [ 18766 markStartTime, 18767 fixPerms, 18768 garbageCollect, 18769 rebuildIndex, 18770 cleanTmp, 18771 writeVerifile, 18772 markEndTime, 18773 ] 18774 18775 const stats = {} 18776 for (const step of steps) { 18777 const label = step.name 18778 const start = new Date() 18779 const s = await step(cache, opts) 18780 if (s) { 18781 Object.keys(s).forEach((k) => { 18782 stats[k] = s[k] 18783 }) 18784 } 18785 const end = new Date() 18786 if (!stats.runTime) { 18787 stats.runTime = {} 18788 } 18789 stats.runTime[label] = end - start 18790 } 18791 stats.runTime.total = stats.endTime - stats.startTime 18792 opts.log.silly( 18793 'verify', 18794 'verification finished for', 18795 cache, 18796 'in', 18797 `${stats.runTime.total}ms` 18798 ) 18799 return stats 18800 } 18801 18802 async function markStartTime (cache, opts) { 18803 return { startTime: new Date() } 18804 } 18805 18806 async function markEndTime (cache, opts) { 18807 return { endTime: new Date() } 18808 } 18809 18810 async function fixPerms (cache, opts) { 18811 opts.log.silly('verify', 'fixing cache permissions') 18812 await mkdir(cache, { recursive: true }) 18813 return null 18814 } 18815 18816 // Implements a naive mark-and-sweep tracing garbage collector. 18817 // 18818 // The algorithm is basically as follows: 18819 // 1. Read (and filter) all index entries ("pointers") 18820 // 2. Mark each integrity value as "live" 18821 // 3. Read entire filesystem tree in `content-vX/` dir 18822 // 4. If content is live, verify its checksum and delete it if it fails 18823 // 5. If content is not marked as live, rm it. 18824 // 18825 async function garbageCollect (cache, opts) { 18826 opts.log.silly('verify', 'garbage collecting content') 18827 const indexStream = index.lsStream(cache) 18828 const liveContent = new Set() 18829 indexStream.on('data', (entry) => { 18830 if (opts.filter && !opts.filter(entry)) { 18831 return 18832 } 18833 18834 // integrity is stringified, re-parse it so we can get each hash 18835 const integrity = ssri.parse(entry.integrity) 18836 for (const algo in integrity) { 18837 liveContent.add(integrity[algo].toString()) 18838 } 18839 }) 18840 await new Promise((resolve, reject) => { 18841 indexStream.on('end', resolve).on('error', reject) 18842 }) 18843 const contentDir = contentPath.contentDir(cache) 18844 const files = await glob(path.join(contentDir, '**'), { 18845 follow: false, 18846 nodir: true, 18847 nosort: true, 18848 }) 18849 const stats = { 18850 verifiedContent: 0, 18851 reclaimedCount: 0, 18852 reclaimedSize: 0, 18853 badContentCount: 0, 18854 keptSize: 0, 18855 } 18856 await pMap( 18857 files, 18858 async (f) => { 18859 const split = f.split(/[/\\]/) 18860 const digest = split.slice(split.length - 3).join('') 18861 const algo = split[split.length - 4] 18862 const integrity = ssri.fromHex(digest, algo) 18863 if (liveContent.has(integrity.toString())) { 18864 const info = await verifyContent(f, integrity) 18865 if (!info.valid) { 18866 stats.reclaimedCount++ 18867 stats.badContentCount++ 18868 stats.reclaimedSize += info.size 18869 } else { 18870 stats.verifiedContent++ 18871 stats.keptSize += info.size 18872 } 18873 } else { 18874 // No entries refer to this content. We can delete. 18875 stats.reclaimedCount++ 18876 const s = await stat(f) 18877 await rm(f, { recursive: true, force: true }) 18878 stats.reclaimedSize += s.size 18879 } 18880 return stats 18881 }, 18882 { concurrency: opts.concurrency } 18883 ) 18884 return stats 18885 } 18886 18887 async function verifyContent (filepath, sri) { 18888 const contentInfo = {} 18889 try { 18890 const { size } = await stat(filepath) 18891 contentInfo.size = size 18892 contentInfo.valid = true 18893 await ssri.checkStream(new fsm.ReadStream(filepath), sri) 18894 } catch (err) { 18895 if (err.code === 'ENOENT') { 18896 return { size: 0, valid: false } 18897 } 18898 if (err.code !== 'EINTEGRITY') { 18899 throw err 18900 } 18901 18902 await rm(filepath, { recursive: true, force: true }) 18903 contentInfo.valid = false 18904 } 18905 return contentInfo 18906 } 18907 18908 async function rebuildIndex (cache, opts) { 18909 opts.log.silly('verify', 'rebuilding index') 18910 const entries = await index.ls(cache) 18911 const stats = { 18912 missingContent: 0, 18913 rejectedEntries: 0, 18914 totalEntries: 0, 18915 } 18916 const buckets = {} 18917 for (const k in entries) { 18918 /* istanbul ignore else */ 18919 if (hasOwnProperty(entries, k)) { 18920 const hashed = index.hashKey(k) 18921 const entry = entries[k] 18922 const excluded = opts.filter && !opts.filter(entry) 18923 excluded && stats.rejectedEntries++ 18924 if (buckets[hashed] && !excluded) { 18925 buckets[hashed].push(entry) 18926 } else if (buckets[hashed] && excluded) { 18927 // skip 18928 } else if (excluded) { 18929 buckets[hashed] = [] 18930 buckets[hashed]._path = index.bucketPath(cache, k) 18931 } else { 18932 buckets[hashed] = [entry] 18933 buckets[hashed]._path = index.bucketPath(cache, k) 18934 } 18935 } 18936 } 18937 await pMap( 18938 Object.keys(buckets), 18939 (key) => { 18940 return rebuildBucket(cache, buckets[key], stats, opts) 18941 }, 18942 { concurrency: opts.concurrency } 18943 ) 18944 return stats 18945 } 18946 18947 async function rebuildBucket (cache, bucket, stats, opts) { 18948 await truncate(bucket._path) 18949 // This needs to be serialized because cacache explicitly 18950 // lets very racy bucket conflicts clobber each other. 18951 for (const entry of bucket) { 18952 const content = contentPath(cache, entry.integrity) 18953 try { 18954 await stat(content) 18955 await index.insert(cache, entry.key, entry.integrity, { 18956 metadata: entry.metadata, 18957 size: entry.size, 18958 time: entry.time, 18959 }) 18960 stats.totalEntries++ 18961 } catch (err) { 18962 if (err.code === 'ENOENT') { 18963 stats.rejectedEntries++ 18964 stats.missingContent++ 18965 } else { 18966 throw err 18967 } 18968 } 18969 } 18970 } 18971 18972 function cleanTmp (cache, opts) { 18973 opts.log.silly('verify', 'cleaning tmp directory') 18974 return rm(path.join(cache, 'tmp'), { recursive: true, force: true }) 18975 } 18976 18977 async function writeVerifile (cache, opts) { 18978 const verifile = path.join(cache, '_lastverified') 18979 opts.log.silly('verify', 'writing verifile to ' + verifile) 18980 return writeFile(verifile, `${Date.now()}`) 18981 } 18982 18983 module.exports.lastRun = lastRun 18984 18985 async function lastRun (cache) { 18986 const data = await readFile(path.join(cache, '_lastverified'), { encoding: 'utf8' }) 18987 return new Date(+data) 18988 } 18989 18990 18991 /***/ }), 18992 18993 /***/ 42443: 18994 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 18995 18996 var balanced = __nccwpck_require__(9417); 18997 18998 module.exports = expandTop; 18999 19000 var escSlash = '\0SLASH'+Math.random()+'\0'; 19001 var escOpen = '\0OPEN'+Math.random()+'\0'; 19002 var escClose = '\0CLOSE'+Math.random()+'\0'; 19003 var escComma = '\0COMMA'+Math.random()+'\0'; 19004 var escPeriod = '\0PERIOD'+Math.random()+'\0'; 19005 19006 function numeric(str) { 19007 return parseInt(str, 10) == str 19008 ? parseInt(str, 10) 19009 : str.charCodeAt(0); 19010 } 19011 19012 function escapeBraces(str) { 19013 return str.split('\\\\').join(escSlash) 19014 .split('\\{').join(escOpen) 19015 .split('\\}').join(escClose) 19016 .split('\\,').join(escComma) 19017 .split('\\.').join(escPeriod); 19018 } 19019 19020 function unescapeBraces(str) { 19021 return str.split(escSlash).join('\\') 19022 .split(escOpen).join('{') 19023 .split(escClose).join('}') 19024 .split(escComma).join(',') 19025 .split(escPeriod).join('.'); 19026 } 19027 19028 19029 // Basically just str.split(","), but handling cases 19030 // where we have nested braced sections, which should be 19031 // treated as individual members, like {a,{b,c},d} 19032 function parseCommaParts(str) { 19033 if (!str) 19034 return ['']; 19035 19036 var parts = []; 19037 var m = balanced('{', '}', str); 19038 19039 if (!m) 19040 return str.split(','); 19041 19042 var pre = m.pre; 19043 var body = m.body; 19044 var post = m.post; 19045 var p = pre.split(','); 19046 19047 p[p.length-1] += '{' + body + '}'; 19048 var postParts = parseCommaParts(post); 19049 if (post.length) { 19050 p[p.length-1] += postParts.shift(); 19051 p.push.apply(p, postParts); 19052 } 19053 19054 parts.push.apply(parts, p); 19055 19056 return parts; 19057 } 19058 19059 function expandTop(str) { 19060 if (!str) 19061 return []; 19062 19063 // I don't know why Bash 4.3 does this, but it does. 19064 // Anything starting with {} will have the first two bytes preserved 19065 // but *only* at the top level, so {},a}b will not expand to anything, 19066 // but a{},b}c will be expanded to [a}c,abc]. 19067 // One could argue that this is a bug in Bash, but since the goal of 19068 // this module is to match Bash's rules, we escape a leading {} 19069 if (str.substr(0, 2) === '{}') { 19070 str = '\\{\\}' + str.substr(2); 19071 } 19072 19073 return expand(escapeBraces(str), true).map(unescapeBraces); 19074 } 19075 19076 function embrace(str) { 19077 return '{' + str + '}'; 19078 } 19079 function isPadded(el) { 19080 return /^-?0\d/.test(el); 19081 } 19082 19083 function lte(i, y) { 19084 return i <= y; 19085 } 19086 function gte(i, y) { 19087 return i >= y; 19088 } 19089 19090 function expand(str, isTop) { 19091 var expansions = []; 19092 19093 var m = balanced('{', '}', str); 19094 if (!m) return [str]; 19095 19096 // no need to expand pre, since it is guaranteed to be free of brace-sets 19097 var pre = m.pre; 19098 var post = m.post.length 19099 ? expand(m.post, false) 19100 : ['']; 19101 19102 if (/\$$/.test(m.pre)) { 19103 for (var k = 0; k < post.length; k++) { 19104 var expansion = pre+ '{' + m.body + '}' + post[k]; 19105 expansions.push(expansion); 19106 } 19107 } else { 19108 var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); 19109 var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); 19110 var isSequence = isNumericSequence || isAlphaSequence; 19111 var isOptions = m.body.indexOf(',') >= 0; 19112 if (!isSequence && !isOptions) { 19113 // {a},b} 19114 if (m.post.match(/,.*\}/)) { 19115 str = m.pre + '{' + m.body + escClose + m.post; 19116 return expand(str); 19117 } 19118 return [str]; 19119 } 19120 19121 var n; 19122 if (isSequence) { 19123 n = m.body.split(/\.\./); 19124 } else { 19125 n = parseCommaParts(m.body); 19126 if (n.length === 1) { 19127 // x{{a,b}}y ==> x{a}y x{b}y 19128 n = expand(n[0], false).map(embrace); 19129 if (n.length === 1) { 19130 return post.map(function(p) { 19131 return m.pre + n[0] + p; 19132 }); 19133 } 19134 } 19135 } 19136 19137 // at this point, n is the parts, and we know it's not a comma set 19138 // with a single entry. 19139 var N; 19140 19141 if (isSequence) { 19142 var x = numeric(n[0]); 19143 var y = numeric(n[1]); 19144 var width = Math.max(n[0].length, n[1].length) 19145 var incr = n.length == 3 19146 ? Math.abs(numeric(n[2])) 19147 : 1; 19148 var test = lte; 19149 var reverse = y < x; 19150 if (reverse) { 19151 incr *= -1; 19152 test = gte; 19153 } 19154 var pad = n.some(isPadded); 19155 19156 N = []; 19157 19158 for (var i = x; test(i, y); i += incr) { 19159 var c; 19160 if (isAlphaSequence) { 19161 c = String.fromCharCode(i); 19162 if (c === '\\') 19163 c = ''; 19164 } else { 19165 c = String(i); 19166 if (pad) { 19167 var need = width - c.length; 19168 if (need > 0) { 19169 var z = new Array(need + 1).join('0'); 19170 if (i < 0) 19171 c = '-' + z + c.slice(1); 19172 else 19173 c = z + c; 19174 } 19175 } 19176 } 19177 N.push(c); 19178 } 19179 } else { 19180 N = []; 19181 19182 for (var j = 0; j < n.length; j++) { 19183 N.push.apply(N, expand(n[j], false)); 19184 } 19185 } 19186 19187 for (var j = 0; j < N.length; j++) { 19188 for (var k = 0; k < post.length; k++) { 19189 var expansion = pre + N[j] + post[k]; 19190 if (!isTop || isSequence || expansion) 19191 expansions.push(expansion); 19192 } 19193 } 19194 } 19195 19196 return expansions; 19197 } 19198 19199 19200 19201 /***/ }), 19202 19203 /***/ 27972: 19204 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 19205 19206 "use strict"; 19207 19208 const os = __nccwpck_require__(22037); 19209 19210 const extractPathRegex = /\s+at.*(?:\(|\s)(.*)\)?/; 19211 const pathRegex = /^(?:(?:(?:node|(?:internal\/[\w/]*|.*node_modules\/(?:babel-polyfill|pirates)\/.*)?\w+)\.js:\d+:\d+)|native)/; 19212 const homeDir = typeof os.homedir === 'undefined' ? '' : os.homedir(); 19213 19214 module.exports = (stack, options) => { 19215 options = Object.assign({pretty: false}, options); 19216 19217 return stack.replace(/\\/g, '/') 19218 .split('\n') 19219 .filter(line => { 19220 const pathMatches = line.match(extractPathRegex); 19221 if (pathMatches === null || !pathMatches[1]) { 19222 return true; 19223 } 19224 19225 const match = pathMatches[1]; 19226 19227 // Electron 19228 if ( 19229 match.includes('.app/Contents/Resources/electron.asar') || 19230 match.includes('.app/Contents/Resources/default_app.asar') 19231 ) { 19232 return false; 19233 } 19234 19235 return !pathRegex.test(match); 19236 }) 19237 .filter(line => line.trim() !== '') 19238 .map(line => { 19239 if (options.pretty) { 19240 return line.replace(extractPathRegex, (m, p1) => m.replace(p1, p1.replace(homeDir, '~'))); 19241 } 19242 19243 return line; 19244 }) 19245 .join('\n'); 19246 }; 19247 19248 19249 /***/ }), 19250 19251 /***/ 28222: 19252 /***/ ((module, exports, __nccwpck_require__) => { 19253 19254 /* eslint-env browser */ 19255 19256 /** 19257 * This is the web browser implementation of `debug()`. 19258 */ 19259 19260 exports.formatArgs = formatArgs; 19261 exports.save = save; 19262 exports.load = load; 19263 exports.useColors = useColors; 19264 exports.storage = localstorage(); 19265 exports.destroy = (() => { 19266 let warned = false; 19267 19268 return () => { 19269 if (!warned) { 19270 warned = true; 19271 console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); 19272 } 19273 }; 19274 })(); 19275 19276 /** 19277 * Colors. 19278 */ 19279 19280 exports.colors = [ 19281 '#0000CC', 19282 '#0000FF', 19283 '#0033CC', 19284 '#0033FF', 19285 '#0066CC', 19286 '#0066FF', 19287 '#0099CC', 19288 '#0099FF', 19289 '#00CC00', 19290 '#00CC33', 19291 '#00CC66', 19292 '#00CC99', 19293 '#00CCCC', 19294 '#00CCFF', 19295 '#3300CC', 19296 '#3300FF', 19297 '#3333CC', 19298 '#3333FF', 19299 '#3366CC', 19300 '#3366FF', 19301 '#3399CC', 19302 '#3399FF', 19303 '#33CC00', 19304 '#33CC33', 19305 '#33CC66', 19306 '#33CC99', 19307 '#33CCCC', 19308 '#33CCFF', 19309 '#6600CC', 19310 '#6600FF', 19311 '#6633CC', 19312 '#6633FF', 19313 '#66CC00', 19314 '#66CC33', 19315 '#9900CC', 19316 '#9900FF', 19317 '#9933CC', 19318 '#9933FF', 19319 '#99CC00', 19320 '#99CC33', 19321 '#CC0000', 19322 '#CC0033', 19323 '#CC0066', 19324 '#CC0099', 19325 '#CC00CC', 19326 '#CC00FF', 19327 '#CC3300', 19328 '#CC3333', 19329 '#CC3366', 19330 '#CC3399', 19331 '#CC33CC', 19332 '#CC33FF', 19333 '#CC6600', 19334 '#CC6633', 19335 '#CC9900', 19336 '#CC9933', 19337 '#CCCC00', 19338 '#CCCC33', 19339 '#FF0000', 19340 '#FF0033', 19341 '#FF0066', 19342 '#FF0099', 19343 '#FF00CC', 19344 '#FF00FF', 19345 '#FF3300', 19346 '#FF3333', 19347 '#FF3366', 19348 '#FF3399', 19349 '#FF33CC', 19350 '#FF33FF', 19351 '#FF6600', 19352 '#FF6633', 19353 '#FF9900', 19354 '#FF9933', 19355 '#FFCC00', 19356 '#FFCC33' 19357 ]; 19358 19359 /** 19360 * Currently only WebKit-based Web Inspectors, Firefox >= v31, 19361 * and the Firebug extension (any Firefox version) are known 19362 * to support "%c" CSS customizations. 19363 * 19364 * TODO: add a `localStorage` variable to explicitly enable/disable colors 19365 */ 19366 19367 // eslint-disable-next-line complexity 19368 function useColors() { 19369 // NB: In an Electron preload script, document will be defined but not fully 19370 // initialized. Since we know we're in Chrome, we'll just detect this case 19371 // explicitly 19372 if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { 19373 return true; 19374 } 19375 19376 // Internet Explorer and Edge do not support colors. 19377 if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { 19378 return false; 19379 } 19380 19381 // Is webkit? http://stackoverflow.com/a/16459606/376773 19382 // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 19383 return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || 19384 // Is firebug? http://stackoverflow.com/a/398120/376773 19385 (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || 19386 // Is firefox >= v31? 19387 // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages 19388 (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || 19389 // Double check webkit in userAgent just in case we are in a worker 19390 (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); 19391 } 19392 19393 /** 19394 * Colorize log arguments if enabled. 19395 * 19396 * @api public 19397 */ 19398 19399 function formatArgs(args) { 19400 args[0] = (this.useColors ? '%c' : '') + 19401 this.namespace + 19402 (this.useColors ? ' %c' : ' ') + 19403 args[0] + 19404 (this.useColors ? '%c ' : ' ') + 19405 '+' + module.exports.humanize(this.diff); 19406 19407 if (!this.useColors) { 19408 return; 19409 } 19410 19411 const c = 'color: ' + this.color; 19412 args.splice(1, 0, c, 'color: inherit'); 19413 19414 // The final "%c" is somewhat tricky, because there could be other 19415 // arguments passed either before or after the %c, so we need to 19416 // figure out the correct index to insert the CSS into 19417 let index = 0; 19418 let lastC = 0; 19419 args[0].replace(/%[a-zA-Z%]/g, match => { 19420 if (match === '%%') { 19421 return; 19422 } 19423 index++; 19424 if (match === '%c') { 19425 // We only are interested in the *last* %c 19426 // (the user may have provided their own) 19427 lastC = index; 19428 } 19429 }); 19430 19431 args.splice(lastC, 0, c); 19432 } 19433 19434 /** 19435 * Invokes `console.debug()` when available. 19436 * No-op when `console.debug` is not a "function". 19437 * If `console.debug` is not available, falls back 19438 * to `console.log`. 19439 * 19440 * @api public 19441 */ 19442 exports.log = console.debug || console.log || (() => {}); 19443 19444 /** 19445 * Save `namespaces`. 19446 * 19447 * @param {String} namespaces 19448 * @api private 19449 */ 19450 function save(namespaces) { 19451 try { 19452 if (namespaces) { 19453 exports.storage.setItem('debug', namespaces); 19454 } else { 19455 exports.storage.removeItem('debug'); 19456 } 19457 } catch (error) { 19458 // Swallow 19459 // XXX (@Qix-) should we be logging these? 19460 } 19461 } 19462 19463 /** 19464 * Load `namespaces`. 19465 * 19466 * @return {String} returns the previously persisted debug modes 19467 * @api private 19468 */ 19469 function load() { 19470 let r; 19471 try { 19472 r = exports.storage.getItem('debug'); 19473 } catch (error) { 19474 // Swallow 19475 // XXX (@Qix-) should we be logging these? 19476 } 19477 19478 // If debug isn't set in LS, and we're in Electron, try to load $DEBUG 19479 if (!r && typeof process !== 'undefined' && 'env' in process) { 19480 r = process.env.DEBUG; 19481 } 19482 19483 return r; 19484 } 19485 19486 /** 19487 * Localstorage attempts to return the localstorage. 19488 * 19489 * This is necessary because safari throws 19490 * when a user disables cookies/localstorage 19491 * and you attempt to access it. 19492 * 19493 * @return {LocalStorage} 19494 * @api private 19495 */ 19496 19497 function localstorage() { 19498 try { 19499 // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context 19500 // The Browser also has localStorage in the global context. 19501 return localStorage; 19502 } catch (error) { 19503 // Swallow 19504 // XXX (@Qix-) should we be logging these? 19505 } 19506 } 19507 19508 module.exports = __nccwpck_require__(46243)(exports); 19509 19510 const {formatters} = module.exports; 19511 19512 /** 19513 * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. 19514 */ 19515 19516 formatters.j = function (v) { 19517 try { 19518 return JSON.stringify(v); 19519 } catch (error) { 19520 return '[UnexpectedJSONParseError]: ' + error.message; 19521 } 19522 }; 19523 19524 19525 /***/ }), 19526 19527 /***/ 46243: 19528 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 19529 19530 19531 /** 19532 * This is the common logic for both the Node.js and web browser 19533 * implementations of `debug()`. 19534 */ 19535 19536 function setup(env) { 19537 createDebug.debug = createDebug; 19538 createDebug.default = createDebug; 19539 createDebug.coerce = coerce; 19540 createDebug.disable = disable; 19541 createDebug.enable = enable; 19542 createDebug.enabled = enabled; 19543 createDebug.humanize = __nccwpck_require__(80900); 19544 createDebug.destroy = destroy; 19545 19546 Object.keys(env).forEach(key => { 19547 createDebug[key] = env[key]; 19548 }); 19549 19550 /** 19551 * The currently active debug mode names, and names to skip. 19552 */ 19553 19554 createDebug.names = []; 19555 createDebug.skips = []; 19556 19557 /** 19558 * Map of special "%n" handling functions, for the debug "format" argument. 19559 * 19560 * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". 19561 */ 19562 createDebug.formatters = {}; 19563 19564 /** 19565 * Selects a color for a debug namespace 19566 * @param {String} namespace The namespace string for the debug instance to be colored 19567 * @return {Number|String} An ANSI color code for the given namespace 19568 * @api private 19569 */ 19570 function selectColor(namespace) { 19571 let hash = 0; 19572 19573 for (let i = 0; i < namespace.length; i++) { 19574 hash = ((hash << 5) - hash) + namespace.charCodeAt(i); 19575 hash |= 0; // Convert to 32bit integer 19576 } 19577 19578 return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; 19579 } 19580 createDebug.selectColor = selectColor; 19581 19582 /** 19583 * Create a debugger with the given `namespace`. 19584 * 19585 * @param {String} namespace 19586 * @return {Function} 19587 * @api public 19588 */ 19589 function createDebug(namespace) { 19590 let prevTime; 19591 let enableOverride = null; 19592 let namespacesCache; 19593 let enabledCache; 19594 19595 function debug(...args) { 19596 // Disabled? 19597 if (!debug.enabled) { 19598 return; 19599 } 19600 19601 const self = debug; 19602 19603 // Set `diff` timestamp 19604 const curr = Number(new Date()); 19605 const ms = curr - (prevTime || curr); 19606 self.diff = ms; 19607 self.prev = prevTime; 19608 self.curr = curr; 19609 prevTime = curr; 19610 19611 args[0] = createDebug.coerce(args[0]); 19612 19613 if (typeof args[0] !== 'string') { 19614 // Anything else let's inspect with %O 19615 args.unshift('%O'); 19616 } 19617 19618 // Apply any `formatters` transformations 19619 let index = 0; 19620 args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { 19621 // If we encounter an escaped % then don't increase the array index 19622 if (match === '%%') { 19623 return '%'; 19624 } 19625 index++; 19626 const formatter = createDebug.formatters[format]; 19627 if (typeof formatter === 'function') { 19628 const val = args[index]; 19629 match = formatter.call(self, val); 19630 19631 // Now we need to remove `args[index]` since it's inlined in the `format` 19632 args.splice(index, 1); 19633 index--; 19634 } 19635 return match; 19636 }); 19637 19638 // Apply env-specific formatting (colors, etc.) 19639 createDebug.formatArgs.call(self, args); 19640 19641 const logFn = self.log || createDebug.log; 19642 logFn.apply(self, args); 19643 } 19644 19645 debug.namespace = namespace; 19646 debug.useColors = createDebug.useColors(); 19647 debug.color = createDebug.selectColor(namespace); 19648 debug.extend = extend; 19649 debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. 19650 19651 Object.defineProperty(debug, 'enabled', { 19652 enumerable: true, 19653 configurable: false, 19654 get: () => { 19655 if (enableOverride !== null) { 19656 return enableOverride; 19657 } 19658 if (namespacesCache !== createDebug.namespaces) { 19659 namespacesCache = createDebug.namespaces; 19660 enabledCache = createDebug.enabled(namespace); 19661 } 19662 19663 return enabledCache; 19664 }, 19665 set: v => { 19666 enableOverride = v; 19667 } 19668 }); 19669 19670 // Env-specific initialization logic for debug instances 19671 if (typeof createDebug.init === 'function') { 19672 createDebug.init(debug); 19673 } 19674 19675 return debug; 19676 } 19677 19678 function extend(namespace, delimiter) { 19679 const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); 19680 newDebug.log = this.log; 19681 return newDebug; 19682 } 19683 19684 /** 19685 * Enables a debug mode by namespaces. This can include modes 19686 * separated by a colon and wildcards. 19687 * 19688 * @param {String} namespaces 19689 * @api public 19690 */ 19691 function enable(namespaces) { 19692 createDebug.save(namespaces); 19693 createDebug.namespaces = namespaces; 19694 19695 createDebug.names = []; 19696 createDebug.skips = []; 19697 19698 let i; 19699 const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); 19700 const len = split.length; 19701 19702 for (i = 0; i < len; i++) { 19703 if (!split[i]) { 19704 // ignore empty strings 19705 continue; 19706 } 19707 19708 namespaces = split[i].replace(/\*/g, '.*?'); 19709 19710 if (namespaces[0] === '-') { 19711 createDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$')); 19712 } else { 19713 createDebug.names.push(new RegExp('^' + namespaces + '$')); 19714 } 19715 } 19716 } 19717 19718 /** 19719 * Disable debug output. 19720 * 19721 * @return {String} namespaces 19722 * @api public 19723 */ 19724 function disable() { 19725 const namespaces = [ 19726 ...createDebug.names.map(toNamespace), 19727 ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) 19728 ].join(','); 19729 createDebug.enable(''); 19730 return namespaces; 19731 } 19732 19733 /** 19734 * Returns true if the given mode name is enabled, false otherwise. 19735 * 19736 * @param {String} name 19737 * @return {Boolean} 19738 * @api public 19739 */ 19740 function enabled(name) { 19741 if (name[name.length - 1] === '*') { 19742 return true; 19743 } 19744 19745 let i; 19746 let len; 19747 19748 for (i = 0, len = createDebug.skips.length; i < len; i++) { 19749 if (createDebug.skips[i].test(name)) { 19750 return false; 19751 } 19752 } 19753 19754 for (i = 0, len = createDebug.names.length; i < len; i++) { 19755 if (createDebug.names[i].test(name)) { 19756 return true; 19757 } 19758 } 19759 19760 return false; 19761 } 19762 19763 /** 19764 * Convert regexp to namespace 19765 * 19766 * @param {RegExp} regxep 19767 * @return {String} namespace 19768 * @api private 19769 */ 19770 function toNamespace(regexp) { 19771 return regexp.toString() 19772 .substring(2, regexp.toString().length - 2) 19773 .replace(/\.\*\?$/, '*'); 19774 } 19775 19776 /** 19777 * Coerce `val`. 19778 * 19779 * @param {Mixed} val 19780 * @return {Mixed} 19781 * @api private 19782 */ 19783 function coerce(val) { 19784 if (val instanceof Error) { 19785 return val.stack || val.message; 19786 } 19787 return val; 19788 } 19789 19790 /** 19791 * XXX DO NOT USE. This is a temporary stub function. 19792 * XXX It WILL be removed in the next major release. 19793 */ 19794 function destroy() { 19795 console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); 19796 } 19797 19798 createDebug.enable(createDebug.load()); 19799 19800 return createDebug; 19801 } 19802 19803 module.exports = setup; 19804 19805 19806 /***/ }), 19807 19808 /***/ 38237: 19809 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 19810 19811 /** 19812 * Detect Electron renderer / nwjs process, which is node, but we should 19813 * treat as a browser. 19814 */ 19815 19816 if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) { 19817 module.exports = __nccwpck_require__(28222); 19818 } else { 19819 module.exports = __nccwpck_require__(35332); 19820 } 19821 19822 19823 /***/ }), 19824 19825 /***/ 35332: 19826 /***/ ((module, exports, __nccwpck_require__) => { 19827 19828 /** 19829 * Module dependencies. 19830 */ 19831 19832 const tty = __nccwpck_require__(76224); 19833 const util = __nccwpck_require__(73837); 19834 19835 /** 19836 * This is the Node.js implementation of `debug()`. 19837 */ 19838 19839 exports.init = init; 19840 exports.log = log; 19841 exports.formatArgs = formatArgs; 19842 exports.save = save; 19843 exports.load = load; 19844 exports.useColors = useColors; 19845 exports.destroy = util.deprecate( 19846 () => {}, 19847 'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.' 19848 ); 19849 19850 /** 19851 * Colors. 19852 */ 19853 19854 exports.colors = [6, 2, 3, 4, 5, 1]; 19855 19856 try { 19857 // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json) 19858 // eslint-disable-next-line import/no-extraneous-dependencies 19859 const supportsColor = __nccwpck_require__(59318); 19860 19861 if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) { 19862 exports.colors = [ 19863 20, 19864 21, 19865 26, 19866 27, 19867 32, 19868 33, 19869 38, 19870 39, 19871 40, 19872 41, 19873 42, 19874 43, 19875 44, 19876 45, 19877 56, 19878 57, 19879 62, 19880 63, 19881 68, 19882 69, 19883 74, 19884 75, 19885 76, 19886 77, 19887 78, 19888 79, 19889 80, 19890 81, 19891 92, 19892 93, 19893 98, 19894 99, 19895 112, 19896 113, 19897 128, 19898 129, 19899 134, 19900 135, 19901 148, 19902 149, 19903 160, 19904 161, 19905 162, 19906 163, 19907 164, 19908 165, 19909 166, 19910 167, 19911 168, 19912 169, 19913 170, 19914 171, 19915 172, 19916 173, 19917 178, 19918 179, 19919 184, 19920 185, 19921 196, 19922 197, 19923 198, 19924 199, 19925 200, 19926 201, 19927 202, 19928 203, 19929 204, 19930 205, 19931 206, 19932 207, 19933 208, 19934 209, 19935 214, 19936 215, 19937 220, 19938 221 19939 ]; 19940 } 19941 } catch (error) { 19942 // Swallow - we only care if `supports-color` is available; it doesn't have to be. 19943 } 19944 19945 /** 19946 * Build up the default `inspectOpts` object from the environment variables. 19947 * 19948 * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js 19949 */ 19950 19951 exports.inspectOpts = Object.keys(process.env).filter(key => { 19952 return /^debug_/i.test(key); 19953 }).reduce((obj, key) => { 19954 // Camel-case 19955 const prop = key 19956 .substring(6) 19957 .toLowerCase() 19958 .replace(/_([a-z])/g, (_, k) => { 19959 return k.toUpperCase(); 19960 }); 19961 19962 // Coerce string value into JS value 19963 let val = process.env[key]; 19964 if (/^(yes|on|true|enabled)$/i.test(val)) { 19965 val = true; 19966 } else if (/^(no|off|false|disabled)$/i.test(val)) { 19967 val = false; 19968 } else if (val === 'null') { 19969 val = null; 19970 } else { 19971 val = Number(val); 19972 } 19973 19974 obj[prop] = val; 19975 return obj; 19976 }, {}); 19977 19978 /** 19979 * Is stdout a TTY? Colored output is enabled when `true`. 19980 */ 19981 19982 function useColors() { 19983 return 'colors' in exports.inspectOpts ? 19984 Boolean(exports.inspectOpts.colors) : 19985 tty.isatty(process.stderr.fd); 19986 } 19987 19988 /** 19989 * Adds ANSI color escape codes if enabled. 19990 * 19991 * @api public 19992 */ 19993 19994 function formatArgs(args) { 19995 const {namespace: name, useColors} = this; 19996 19997 if (useColors) { 19998 const c = this.color; 19999 const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c); 20000 const prefix = ` ${colorCode};1m${name} \u001B[0m`; 20001 20002 args[0] = prefix + args[0].split('\n').join('\n' + prefix); 20003 args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m'); 20004 } else { 20005 args[0] = getDate() + name + ' ' + args[0]; 20006 } 20007 } 20008 20009 function getDate() { 20010 if (exports.inspectOpts.hideDate) { 20011 return ''; 20012 } 20013 return new Date().toISOString() + ' '; 20014 } 20015 20016 /** 20017 * Invokes `util.format()` with the specified arguments and writes to stderr. 20018 */ 20019 20020 function log(...args) { 20021 return process.stderr.write(util.format(...args) + '\n'); 20022 } 20023 20024 /** 20025 * Save `namespaces`. 20026 * 20027 * @param {String} namespaces 20028 * @api private 20029 */ 20030 function save(namespaces) { 20031 if (namespaces) { 20032 process.env.DEBUG = namespaces; 20033 } else { 20034 // If you set a process.env field to null or undefined, it gets cast to the 20035 // string 'null' or 'undefined'. Just delete instead. 20036 delete process.env.DEBUG; 20037 } 20038 } 20039 20040 /** 20041 * Load `namespaces`. 20042 * 20043 * @return {String} returns the previously persisted debug modes 20044 * @api private 20045 */ 20046 20047 function load() { 20048 return process.env.DEBUG; 20049 } 20050 20051 /** 20052 * Init logic for `debug` instances. 20053 * 20054 * Create a new `inspectOpts` object in case `useColors` is set 20055 * differently for a particular `debug` instance. 20056 */ 20057 20058 function init(debug) { 20059 debug.inspectOpts = {}; 20060 20061 const keys = Object.keys(exports.inspectOpts); 20062 for (let i = 0; i < keys.length; i++) { 20063 debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; 20064 } 20065 } 20066 20067 module.exports = __nccwpck_require__(46243)(exports); 20068 20069 const {formatters} = module.exports; 20070 20071 /** 20072 * Map %o to `util.inspect()`, all on a single line. 20073 */ 20074 20075 formatters.o = function (v) { 20076 this.inspectOpts.colors = this.useColors; 20077 return util.inspect(v, this.inspectOpts) 20078 .split('\n') 20079 .map(str => str.trim()) 20080 .join(' '); 20081 }; 20082 20083 /** 20084 * Map %O to `util.inspect()`, allowing multiple lines if needed. 20085 */ 20086 20087 formatters.O = function (v) { 20088 this.inspectOpts.colors = this.useColors; 20089 return util.inspect(v, this.inspectOpts); 20090 }; 20091 20092 20093 /***/ }), 20094 20095 /***/ 58932: 20096 /***/ ((__unused_webpack_module, exports) => { 20097 20098 "use strict"; 20099 20100 20101 Object.defineProperty(exports, "__esModule", ({ value: true })); 20102 20103 class Deprecation extends Error { 20104 constructor(message) { 20105 super(message); // Maintains proper stack trace (only available on V8) 20106 20107 /* istanbul ignore next */ 20108 20109 if (Error.captureStackTrace) { 20110 Error.captureStackTrace(this, this.constructor); 20111 } 20112 20113 this.name = 'Deprecation'; 20114 } 20115 20116 } 20117 20118 exports.Deprecation = Deprecation; 20119 20120 20121 /***/ }), 20122 20123 /***/ 28685: 20124 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 20125 20126 "use strict"; 20127 20128 20129 var iconvLite = __nccwpck_require__(19032); 20130 20131 // Expose to the world 20132 module.exports.O = convert; 20133 20134 /** 20135 * Convert encoding of an UTF-8 string or a buffer 20136 * 20137 * @param {String|Buffer} str String to be converted 20138 * @param {String} to Encoding to be converted to 20139 * @param {String} [from='UTF-8'] Encoding to be converted from 20140 * @return {Buffer} Encoded string 20141 */ 20142 function convert(str, to, from) { 20143 from = checkEncoding(from || 'UTF-8'); 20144 to = checkEncoding(to || 'UTF-8'); 20145 str = str || ''; 20146 20147 var result; 20148 20149 if (from !== 'UTF-8' && typeof str === 'string') { 20150 str = Buffer.from(str, 'binary'); 20151 } 20152 20153 if (from === to) { 20154 if (typeof str === 'string') { 20155 result = Buffer.from(str); 20156 } else { 20157 result = str; 20158 } 20159 } else { 20160 try { 20161 result = convertIconvLite(str, to, from); 20162 } catch (E) { 20163 console.error(E); 20164 result = str; 20165 } 20166 } 20167 20168 if (typeof result === 'string') { 20169 result = Buffer.from(result, 'utf-8'); 20170 } 20171 20172 return result; 20173 } 20174 20175 /** 20176 * Convert encoding of astring with iconv-lite 20177 * 20178 * @param {String|Buffer} str String to be converted 20179 * @param {String} to Encoding to be converted to 20180 * @param {String} [from='UTF-8'] Encoding to be converted from 20181 * @return {Buffer} Encoded string 20182 */ 20183 function convertIconvLite(str, to, from) { 20184 if (to === 'UTF-8') { 20185 return iconvLite.decode(str, from); 20186 } else if (from === 'UTF-8') { 20187 return iconvLite.encode(str, to); 20188 } else { 20189 return iconvLite.encode(iconvLite.decode(str, from), to); 20190 } 20191 } 20192 20193 /** 20194 * Converts charset name if needed 20195 * 20196 * @param {String} name Character set 20197 * @return {String} Character set name 20198 */ 20199 function checkEncoding(name) { 20200 return (name || '') 20201 .toString() 20202 .trim() 20203 .replace(/^latin[\-_]?(\d+)$/i, 'ISO-8859-$1') 20204 .replace(/^win(?:dows)?[\-_]?(\d+)$/i, 'WINDOWS-$1') 20205 .replace(/^utf[\-_]?(\d+)$/i, 'UTF-$1') 20206 .replace(/^ks_c_5601\-1987$/i, 'CP949') 20207 .replace(/^us[\-_]?ascii$/i, 'ASCII') 20208 .toUpperCase(); 20209 } 20210 20211 20212 /***/ }), 20213 20214 /***/ 52997: 20215 /***/ ((module) => { 20216 20217 "use strict"; 20218 20219 20220 function assign(obj, props) { 20221 for (const key in props) { 20222 Object.defineProperty(obj, key, { 20223 value: props[key], 20224 enumerable: true, 20225 configurable: true, 20226 }); 20227 } 20228 20229 return obj; 20230 } 20231 20232 function createError(err, code, props) { 20233 if (!err || typeof err === 'string') { 20234 throw new TypeError('Please pass an Error to err-code'); 20235 } 20236 20237 if (!props) { 20238 props = {}; 20239 } 20240 20241 if (typeof code === 'object') { 20242 props = code; 20243 code = undefined; 20244 } 20245 20246 if (code != null) { 20247 props.code = code; 20248 } 20249 20250 try { 20251 return assign(err, props); 20252 } catch (_) { 20253 props.message = err.message; 20254 props.stack = err.stack; 20255 20256 const ErrClass = function () {}; 20257 20258 ErrClass.prototype = Object.create(Object.getPrototypeOf(err)); 20259 20260 return assign(new ErrClass(), props); 20261 } 20262 } 20263 20264 module.exports = createError; 20265 20266 20267 /***/ }), 20268 20269 /***/ 10968: 20270 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 20271 20272 "use strict"; 20273 20274 const { Minipass } = __nccwpck_require__(14968) 20275 const EE = (__nccwpck_require__(82361).EventEmitter) 20276 const fs = __nccwpck_require__(57147) 20277 20278 const writev = fs.writev 20279 20280 const _autoClose = Symbol('_autoClose') 20281 const _close = Symbol('_close') 20282 const _ended = Symbol('_ended') 20283 const _fd = Symbol('_fd') 20284 const _finished = Symbol('_finished') 20285 const _flags = Symbol('_flags') 20286 const _flush = Symbol('_flush') 20287 const _handleChunk = Symbol('_handleChunk') 20288 const _makeBuf = Symbol('_makeBuf') 20289 const _mode = Symbol('_mode') 20290 const _needDrain = Symbol('_needDrain') 20291 const _onerror = Symbol('_onerror') 20292 const _onopen = Symbol('_onopen') 20293 const _onread = Symbol('_onread') 20294 const _onwrite = Symbol('_onwrite') 20295 const _open = Symbol('_open') 20296 const _path = Symbol('_path') 20297 const _pos = Symbol('_pos') 20298 const _queue = Symbol('_queue') 20299 const _read = Symbol('_read') 20300 const _readSize = Symbol('_readSize') 20301 const _reading = Symbol('_reading') 20302 const _remain = Symbol('_remain') 20303 const _size = Symbol('_size') 20304 const _write = Symbol('_write') 20305 const _writing = Symbol('_writing') 20306 const _defaultFlag = Symbol('_defaultFlag') 20307 const _errored = Symbol('_errored') 20308 20309 class ReadStream extends Minipass { 20310 constructor (path, opt) { 20311 opt = opt || {} 20312 super(opt) 20313 20314 this.readable = true 20315 this.writable = false 20316 20317 if (typeof path !== 'string') { 20318 throw new TypeError('path must be a string') 20319 } 20320 20321 this[_errored] = false 20322 this[_fd] = typeof opt.fd === 'number' ? opt.fd : null 20323 this[_path] = path 20324 this[_readSize] = opt.readSize || 16 * 1024 * 1024 20325 this[_reading] = false 20326 this[_size] = typeof opt.size === 'number' ? opt.size : Infinity 20327 this[_remain] = this[_size] 20328 this[_autoClose] = typeof opt.autoClose === 'boolean' ? 20329 opt.autoClose : true 20330 20331 if (typeof this[_fd] === 'number') { 20332 this[_read]() 20333 } else { 20334 this[_open]() 20335 } 20336 } 20337 20338 get fd () { 20339 return this[_fd] 20340 } 20341 20342 get path () { 20343 return this[_path] 20344 } 20345 20346 write () { 20347 throw new TypeError('this is a readable stream') 20348 } 20349 20350 end () { 20351 throw new TypeError('this is a readable stream') 20352 } 20353 20354 [_open] () { 20355 fs.open(this[_path], 'r', (er, fd) => this[_onopen](er, fd)) 20356 } 20357 20358 [_onopen] (er, fd) { 20359 if (er) { 20360 this[_onerror](er) 20361 } else { 20362 this[_fd] = fd 20363 this.emit('open', fd) 20364 this[_read]() 20365 } 20366 } 20367 20368 [_makeBuf] () { 20369 return Buffer.allocUnsafe(Math.min(this[_readSize], this[_remain])) 20370 } 20371 20372 [_read] () { 20373 if (!this[_reading]) { 20374 this[_reading] = true 20375 const buf = this[_makeBuf]() 20376 /* istanbul ignore if */ 20377 if (buf.length === 0) { 20378 return process.nextTick(() => this[_onread](null, 0, buf)) 20379 } 20380 fs.read(this[_fd], buf, 0, buf.length, null, (er, br, b) => 20381 this[_onread](er, br, b)) 20382 } 20383 } 20384 20385 [_onread] (er, br, buf) { 20386 this[_reading] = false 20387 if (er) { 20388 this[_onerror](er) 20389 } else if (this[_handleChunk](br, buf)) { 20390 this[_read]() 20391 } 20392 } 20393 20394 [_close] () { 20395 if (this[_autoClose] && typeof this[_fd] === 'number') { 20396 const fd = this[_fd] 20397 this[_fd] = null 20398 fs.close(fd, er => er ? this.emit('error', er) : this.emit('close')) 20399 } 20400 } 20401 20402 [_onerror] (er) { 20403 this[_reading] = true 20404 this[_close]() 20405 this.emit('error', er) 20406 } 20407 20408 [_handleChunk] (br, buf) { 20409 let ret = false 20410 // no effect if infinite 20411 this[_remain] -= br 20412 if (br > 0) { 20413 ret = super.write(br < buf.length ? buf.slice(0, br) : buf) 20414 } 20415 20416 if (br === 0 || this[_remain] <= 0) { 20417 ret = false 20418 this[_close]() 20419 super.end() 20420 } 20421 20422 return ret 20423 } 20424 20425 emit (ev, data) { 20426 switch (ev) { 20427 case 'prefinish': 20428 case 'finish': 20429 break 20430 20431 case 'drain': 20432 if (typeof this[_fd] === 'number') { 20433 this[_read]() 20434 } 20435 break 20436 20437 case 'error': 20438 if (this[_errored]) { 20439 return 20440 } 20441 this[_errored] = true 20442 return super.emit(ev, data) 20443 20444 default: 20445 return super.emit(ev, data) 20446 } 20447 } 20448 } 20449 20450 class ReadStreamSync extends ReadStream { 20451 [_open] () { 20452 let threw = true 20453 try { 20454 this[_onopen](null, fs.openSync(this[_path], 'r')) 20455 threw = false 20456 } finally { 20457 if (threw) { 20458 this[_close]() 20459 } 20460 } 20461 } 20462 20463 [_read] () { 20464 let threw = true 20465 try { 20466 if (!this[_reading]) { 20467 this[_reading] = true 20468 do { 20469 const buf = this[_makeBuf]() 20470 /* istanbul ignore next */ 20471 const br = buf.length === 0 ? 0 20472 : fs.readSync(this[_fd], buf, 0, buf.length, null) 20473 if (!this[_handleChunk](br, buf)) { 20474 break 20475 } 20476 } while (true) 20477 this[_reading] = false 20478 } 20479 threw = false 20480 } finally { 20481 if (threw) { 20482 this[_close]() 20483 } 20484 } 20485 } 20486 20487 [_close] () { 20488 if (this[_autoClose] && typeof this[_fd] === 'number') { 20489 const fd = this[_fd] 20490 this[_fd] = null 20491 fs.closeSync(fd) 20492 this.emit('close') 20493 } 20494 } 20495 } 20496 20497 class WriteStream extends EE { 20498 constructor (path, opt) { 20499 opt = opt || {} 20500 super(opt) 20501 this.readable = false 20502 this.writable = true 20503 this[_errored] = false 20504 this[_writing] = false 20505 this[_ended] = false 20506 this[_needDrain] = false 20507 this[_queue] = [] 20508 this[_path] = path 20509 this[_fd] = typeof opt.fd === 'number' ? opt.fd : null 20510 this[_mode] = opt.mode === undefined ? 0o666 : opt.mode 20511 this[_pos] = typeof opt.start === 'number' ? opt.start : null 20512 this[_autoClose] = typeof opt.autoClose === 'boolean' ? 20513 opt.autoClose : true 20514 20515 // truncating makes no sense when writing into the middle 20516 const defaultFlag = this[_pos] !== null ? 'r+' : 'w' 20517 this[_defaultFlag] = opt.flags === undefined 20518 this[_flags] = this[_defaultFlag] ? defaultFlag : opt.flags 20519 20520 if (this[_fd] === null) { 20521 this[_open]() 20522 } 20523 } 20524 20525 emit (ev, data) { 20526 if (ev === 'error') { 20527 if (this[_errored]) { 20528 return 20529 } 20530 this[_errored] = true 20531 } 20532 return super.emit(ev, data) 20533 } 20534 20535 get fd () { 20536 return this[_fd] 20537 } 20538 20539 get path () { 20540 return this[_path] 20541 } 20542 20543 [_onerror] (er) { 20544 this[_close]() 20545 this[_writing] = true 20546 this.emit('error', er) 20547 } 20548 20549 [_open] () { 20550 fs.open(this[_path], this[_flags], this[_mode], 20551 (er, fd) => this[_onopen](er, fd)) 20552 } 20553 20554 [_onopen] (er, fd) { 20555 if (this[_defaultFlag] && 20556 this[_flags] === 'r+' && 20557 er && er.code === 'ENOENT') { 20558 this[_flags] = 'w' 20559 this[_open]() 20560 } else if (er) { 20561 this[_onerror](er) 20562 } else { 20563 this[_fd] = fd 20564 this.emit('open', fd) 20565 if (!this[_writing]) { 20566 this[_flush]() 20567 } 20568 } 20569 } 20570 20571 end (buf, enc) { 20572 if (buf) { 20573 this.write(buf, enc) 20574 } 20575 20576 this[_ended] = true 20577 20578 // synthetic after-write logic, where drain/finish live 20579 if (!this[_writing] && !this[_queue].length && 20580 typeof this[_fd] === 'number') { 20581 this[_onwrite](null, 0) 20582 } 20583 return this 20584 } 20585 20586 write (buf, enc) { 20587 if (typeof buf === 'string') { 20588 buf = Buffer.from(buf, enc) 20589 } 20590 20591 if (this[_ended]) { 20592 this.emit('error', new Error('write() after end()')) 20593 return false 20594 } 20595 20596 if (this[_fd] === null || this[_writing] || this[_queue].length) { 20597 this[_queue].push(buf) 20598 this[_needDrain] = true 20599 return false 20600 } 20601 20602 this[_writing] = true 20603 this[_write](buf) 20604 return true 20605 } 20606 20607 [_write] (buf) { 20608 fs.write(this[_fd], buf, 0, buf.length, this[_pos], (er, bw) => 20609 this[_onwrite](er, bw)) 20610 } 20611 20612 [_onwrite] (er, bw) { 20613 if (er) { 20614 this[_onerror](er) 20615 } else { 20616 if (this[_pos] !== null) { 20617 this[_pos] += bw 20618 } 20619 if (this[_queue].length) { 20620 this[_flush]() 20621 } else { 20622 this[_writing] = false 20623 20624 if (this[_ended] && !this[_finished]) { 20625 this[_finished] = true 20626 this[_close]() 20627 this.emit('finish') 20628 } else if (this[_needDrain]) { 20629 this[_needDrain] = false 20630 this.emit('drain') 20631 } 20632 } 20633 } 20634 } 20635 20636 [_flush] () { 20637 if (this[_queue].length === 0) { 20638 if (this[_ended]) { 20639 this[_onwrite](null, 0) 20640 } 20641 } else if (this[_queue].length === 1) { 20642 this[_write](this[_queue].pop()) 20643 } else { 20644 const iovec = this[_queue] 20645 this[_queue] = [] 20646 writev(this[_fd], iovec, this[_pos], 20647 (er, bw) => this[_onwrite](er, bw)) 20648 } 20649 } 20650 20651 [_close] () { 20652 if (this[_autoClose] && typeof this[_fd] === 'number') { 20653 const fd = this[_fd] 20654 this[_fd] = null 20655 fs.close(fd, er => er ? this.emit('error', er) : this.emit('close')) 20656 } 20657 } 20658 } 20659 20660 class WriteStreamSync extends WriteStream { 20661 [_open] () { 20662 let fd 20663 // only wrap in a try{} block if we know we'll retry, to avoid 20664 // the rethrow obscuring the error's source frame in most cases. 20665 if (this[_defaultFlag] && this[_flags] === 'r+') { 20666 try { 20667 fd = fs.openSync(this[_path], this[_flags], this[_mode]) 20668 } catch (er) { 20669 if (er.code === 'ENOENT') { 20670 this[_flags] = 'w' 20671 return this[_open]() 20672 } else { 20673 throw er 20674 } 20675 } 20676 } else { 20677 fd = fs.openSync(this[_path], this[_flags], this[_mode]) 20678 } 20679 20680 this[_onopen](null, fd) 20681 } 20682 20683 [_close] () { 20684 if (this[_autoClose] && typeof this[_fd] === 'number') { 20685 const fd = this[_fd] 20686 this[_fd] = null 20687 fs.closeSync(fd) 20688 this.emit('close') 20689 } 20690 } 20691 20692 [_write] (buf) { 20693 // throw the original, but try to close if it fails 20694 let threw = true 20695 try { 20696 this[_onwrite](null, 20697 fs.writeSync(this[_fd], buf, 0, buf.length, this[_pos])) 20698 threw = false 20699 } finally { 20700 if (threw) { 20701 try { 20702 this[_close]() 20703 } catch { 20704 // ok error 20705 } 20706 } 20707 } 20708 } 20709 } 20710 20711 exports.ReadStream = ReadStream 20712 exports.ReadStreamSync = ReadStreamSync 20713 20714 exports.WriteStream = WriteStream 20715 exports.WriteStreamSync = WriteStreamSync 20716 20717 20718 /***/ }), 20719 20720 /***/ 31621: 20721 /***/ ((module) => { 20722 20723 "use strict"; 20724 20725 20726 module.exports = (flag, argv = process.argv) => { 20727 const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); 20728 const position = argv.indexOf(prefix + flag); 20729 const terminatorPosition = argv.indexOf('--'); 20730 return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition); 20731 }; 20732 20733 20734 /***/ }), 20735 20736 /***/ 61002: 20737 /***/ ((module) => { 20738 20739 "use strict"; 20740 20741 // rfc7231 6.1 20742 const statusCodeCacheableByDefault = new Set([ 20743 200, 20744 203, 20745 204, 20746 206, 20747 300, 20748 301, 20749 308, 20750 404, 20751 405, 20752 410, 20753 414, 20754 501, 20755 ]); 20756 20757 // This implementation does not understand partial responses (206) 20758 const understoodStatuses = new Set([ 20759 200, 20760 203, 20761 204, 20762 300, 20763 301, 20764 302, 20765 303, 20766 307, 20767 308, 20768 404, 20769 405, 20770 410, 20771 414, 20772 501, 20773 ]); 20774 20775 const errorStatusCodes = new Set([ 20776 500, 20777 502, 20778 503, 20779 504, 20780 ]); 20781 20782 const hopByHopHeaders = { 20783 date: true, // included, because we add Age update Date 20784 connection: true, 20785 'keep-alive': true, 20786 'proxy-authenticate': true, 20787 'proxy-authorization': true, 20788 te: true, 20789 trailer: true, 20790 'transfer-encoding': true, 20791 upgrade: true, 20792 }; 20793 20794 const excludedFromRevalidationUpdate = { 20795 // Since the old body is reused, it doesn't make sense to change properties of the body 20796 'content-length': true, 20797 'content-encoding': true, 20798 'transfer-encoding': true, 20799 'content-range': true, 20800 }; 20801 20802 function toNumberOrZero(s) { 20803 const n = parseInt(s, 10); 20804 return isFinite(n) ? n : 0; 20805 } 20806 20807 // RFC 5861 20808 function isErrorResponse(response) { 20809 // consider undefined response as faulty 20810 if(!response) { 20811 return true 20812 } 20813 return errorStatusCodes.has(response.status); 20814 } 20815 20816 function parseCacheControl(header) { 20817 const cc = {}; 20818 if (!header) return cc; 20819 20820 // 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), 20821 // the directive's value is considered invalid. Caches are encouraged to consider responses that have invalid freshness information to be stale 20822 const parts = header.trim().split(/,/); 20823 for (const part of parts) { 20824 const [k, v] = part.split(/=/, 2); 20825 cc[k.trim()] = v === undefined ? true : v.trim().replace(/^"|"$/g, ''); 20826 } 20827 20828 return cc; 20829 } 20830 20831 function formatCacheControl(cc) { 20832 let parts = []; 20833 for (const k in cc) { 20834 const v = cc[k]; 20835 parts.push(v === true ? k : k + '=' + v); 20836 } 20837 if (!parts.length) { 20838 return undefined; 20839 } 20840 return parts.join(', '); 20841 } 20842 20843 module.exports = class CachePolicy { 20844 constructor( 20845 req, 20846 res, 20847 { 20848 shared, 20849 cacheHeuristic, 20850 immutableMinTimeToLive, 20851 ignoreCargoCult, 20852 _fromObject, 20853 } = {} 20854 ) { 20855 if (_fromObject) { 20856 this._fromObject(_fromObject); 20857 return; 20858 } 20859 20860 if (!res || !res.headers) { 20861 throw Error('Response headers missing'); 20862 } 20863 this._assertRequestHasHeaders(req); 20864 20865 this._responseTime = this.now(); 20866 this._isShared = shared !== false; 20867 this._cacheHeuristic = 20868 undefined !== cacheHeuristic ? cacheHeuristic : 0.1; // 10% matches IE 20869 this._immutableMinTtl = 20870 undefined !== immutableMinTimeToLive 20871 ? immutableMinTimeToLive 20872 : 24 * 3600 * 1000; 20873 20874 this._status = 'status' in res ? res.status : 200; 20875 this._resHeaders = res.headers; 20876 this._rescc = parseCacheControl(res.headers['cache-control']); 20877 this._method = 'method' in req ? req.method : 'GET'; 20878 this._url = req.url; 20879 this._host = req.headers.host; 20880 this._noAuthorization = !req.headers.authorization; 20881 this._reqHeaders = res.headers.vary ? req.headers : null; // Don't keep all request headers if they won't be used 20882 this._reqcc = parseCacheControl(req.headers['cache-control']); 20883 20884 // Assume that if someone uses legacy, non-standard uncecessary options they don't understand caching, 20885 // so there's no point stricly adhering to the blindly copy&pasted directives. 20886 if ( 20887 ignoreCargoCult && 20888 'pre-check' in this._rescc && 20889 'post-check' in this._rescc 20890 ) { 20891 delete this._rescc['pre-check']; 20892 delete this._rescc['post-check']; 20893 delete this._rescc['no-cache']; 20894 delete this._rescc['no-store']; 20895 delete this._rescc['must-revalidate']; 20896 this._resHeaders = Object.assign({}, this._resHeaders, { 20897 'cache-control': formatCacheControl(this._rescc), 20898 }); 20899 delete this._resHeaders.expires; 20900 delete this._resHeaders.pragma; 20901 } 20902 20903 // When the Cache-Control header field is not present in a request, caches MUST consider the no-cache request pragma-directive 20904 // as having the same effect as if "Cache-Control: no-cache" were present (see Section 5.2.1). 20905 if ( 20906 res.headers['cache-control'] == null && 20907 /no-cache/.test(res.headers.pragma) 20908 ) { 20909 this._rescc['no-cache'] = true; 20910 } 20911 } 20912 20913 now() { 20914 return Date.now(); 20915 } 20916 20917 storable() { 20918 // The "no-store" request directive indicates that a cache MUST NOT store any part of either this request or any response to it. 20919 return !!( 20920 !this._reqcc['no-store'] && 20921 // A cache MUST NOT store a response to any request, unless: 20922 // The request method is understood by the cache and defined as being cacheable, and 20923 ('GET' === this._method || 20924 'HEAD' === this._method || 20925 ('POST' === this._method && this._hasExplicitExpiration())) && 20926 // the response status code is understood by the cache, and 20927 understoodStatuses.has(this._status) && 20928 // the "no-store" cache directive does not appear in request or response header fields, and 20929 !this._rescc['no-store'] && 20930 // the "private" response directive does not appear in the response, if the cache is shared, and 20931 (!this._isShared || !this._rescc.private) && 20932 // the Authorization header field does not appear in the request, if the cache is shared, 20933 (!this._isShared || 20934 this._noAuthorization || 20935 this._allowsStoringAuthenticated()) && 20936 // the response either: 20937 // contains an Expires header field, or 20938 (this._resHeaders.expires || 20939 // contains a max-age response directive, or 20940 // contains a s-maxage response directive and the cache is shared, or 20941 // contains a public response directive. 20942 this._rescc['max-age'] || 20943 (this._isShared && this._rescc['s-maxage']) || 20944 this._rescc.public || 20945 // has a status code that is defined as cacheable by default 20946 statusCodeCacheableByDefault.has(this._status)) 20947 ); 20948 } 20949 20950 _hasExplicitExpiration() { 20951 // 4.2.1 Calculating Freshness Lifetime 20952 return ( 20953 (this._isShared && this._rescc['s-maxage']) || 20954 this._rescc['max-age'] || 20955 this._resHeaders.expires 20956 ); 20957 } 20958 20959 _assertRequestHasHeaders(req) { 20960 if (!req || !req.headers) { 20961 throw Error('Request headers missing'); 20962 } 20963 } 20964 20965 satisfiesWithoutRevalidation(req) { 20966 this._assertRequestHasHeaders(req); 20967 20968 // When presented with a request, a cache MUST NOT reuse a stored response, unless: 20969 // the presented request does not contain the no-cache pragma (Section 5.4), nor the no-cache cache directive, 20970 // unless the stored response is successfully validated (Section 4.3), and 20971 const requestCC = parseCacheControl(req.headers['cache-control']); 20972 if (requestCC['no-cache'] || /no-cache/.test(req.headers.pragma)) { 20973 return false; 20974 } 20975 20976 if (requestCC['max-age'] && this.age() > requestCC['max-age']) { 20977 return false; 20978 } 20979 20980 if ( 20981 requestCC['min-fresh'] && 20982 this.timeToLive() < 1000 * requestCC['min-fresh'] 20983 ) { 20984 return false; 20985 } 20986 20987 // the stored response is either: 20988 // fresh, or allowed to be served stale 20989 if (this.stale()) { 20990 const allowsStale = 20991 requestCC['max-stale'] && 20992 !this._rescc['must-revalidate'] && 20993 (true === requestCC['max-stale'] || 20994 requestCC['max-stale'] > this.age() - this.maxAge()); 20995 if (!allowsStale) { 20996 return false; 20997 } 20998 } 20999 21000 return this._requestMatches(req, false); 21001 } 21002 21003 _requestMatches(req, allowHeadMethod) { 21004 // The presented effective request URI and that of the stored response match, and 21005 return ( 21006 (!this._url || this._url === req.url) && 21007 this._host === req.headers.host && 21008 // the request method associated with the stored response allows it to be used for the presented request, and 21009 (!req.method || 21010 this._method === req.method || 21011 (allowHeadMethod && 'HEAD' === req.method)) && 21012 // selecting header fields nominated by the stored response (if any) match those presented, and 21013 this._varyMatches(req) 21014 ); 21015 } 21016 21017 _allowsStoringAuthenticated() { 21018 // following Cache-Control response directives (Section 5.2.2) have such an effect: must-revalidate, public, and s-maxage. 21019 return ( 21020 this._rescc['must-revalidate'] || 21021 this._rescc.public || 21022 this._rescc['s-maxage'] 21023 ); 21024 } 21025 21026 _varyMatches(req) { 21027 if (!this._resHeaders.vary) { 21028 return true; 21029 } 21030 21031 // A Vary header field-value of "*" always fails to match 21032 if (this._resHeaders.vary === '*') { 21033 return false; 21034 } 21035 21036 const fields = this._resHeaders.vary 21037 .trim() 21038 .toLowerCase() 21039 .split(/\s*,\s*/); 21040 for (const name of fields) { 21041 if (req.headers[name] !== this._reqHeaders[name]) return false; 21042 } 21043 return true; 21044 } 21045 21046 _copyWithoutHopByHopHeaders(inHeaders) { 21047 const headers = {}; 21048 for (const name in inHeaders) { 21049 if (hopByHopHeaders[name]) continue; 21050 headers[name] = inHeaders[name]; 21051 } 21052 // 9.1. Connection 21053 if (inHeaders.connection) { 21054 const tokens = inHeaders.connection.trim().split(/\s*,\s*/); 21055 for (const name of tokens) { 21056 delete headers[name]; 21057 } 21058 } 21059 if (headers.warning) { 21060 const warnings = headers.warning.split(/,/).filter(warning => { 21061 return !/^\s*1[0-9][0-9]/.test(warning); 21062 }); 21063 if (!warnings.length) { 21064 delete headers.warning; 21065 } else { 21066 headers.warning = warnings.join(',').trim(); 21067 } 21068 } 21069 return headers; 21070 } 21071 21072 responseHeaders() { 21073 const headers = this._copyWithoutHopByHopHeaders(this._resHeaders); 21074 const age = this.age(); 21075 21076 // A cache SHOULD generate 113 warning if it heuristically chose a freshness 21077 // lifetime greater than 24 hours and the response's age is greater than 24 hours. 21078 if ( 21079 age > 3600 * 24 && 21080 !this._hasExplicitExpiration() && 21081 this.maxAge() > 3600 * 24 21082 ) { 21083 headers.warning = 21084 (headers.warning ? `${headers.warning}, ` : '') + 21085 '113 - "rfc7234 5.5.4"'; 21086 } 21087 headers.age = `${Math.round(age)}`; 21088 headers.date = new Date(this.now()).toUTCString(); 21089 return headers; 21090 } 21091 21092 /** 21093 * Value of the Date response header or current time if Date was invalid 21094 * @return timestamp 21095 */ 21096 date() { 21097 const serverDate = Date.parse(this._resHeaders.date); 21098 if (isFinite(serverDate)) { 21099 return serverDate; 21100 } 21101 return this._responseTime; 21102 } 21103 21104 /** 21105 * Value of the Age header, in seconds, updated for the current time. 21106 * May be fractional. 21107 * 21108 * @return Number 21109 */ 21110 age() { 21111 let age = this._ageValue(); 21112 21113 const residentTime = (this.now() - this._responseTime) / 1000; 21114 return age + residentTime; 21115 } 21116 21117 _ageValue() { 21118 return toNumberOrZero(this._resHeaders.age); 21119 } 21120 21121 /** 21122 * Value of applicable max-age (or heuristic equivalent) in seconds. This counts since response's `Date`. 21123 * 21124 * For an up-to-date value, see `timeToLive()`. 21125 * 21126 * @return Number 21127 */ 21128 maxAge() { 21129 if (!this.storable() || this._rescc['no-cache']) { 21130 return 0; 21131 } 21132 21133 // Shared responses with cookies are cacheable according to the RFC, but IMHO it'd be unwise to do so by default 21134 // so this implementation requires explicit opt-in via public header 21135 if ( 21136 this._isShared && 21137 (this._resHeaders['set-cookie'] && 21138 !this._rescc.public && 21139 !this._rescc.immutable) 21140 ) { 21141 return 0; 21142 } 21143 21144 if (this._resHeaders.vary === '*') { 21145 return 0; 21146 } 21147 21148 if (this._isShared) { 21149 if (this._rescc['proxy-revalidate']) { 21150 return 0; 21151 } 21152 // if a response includes the s-maxage directive, a shared cache recipient MUST ignore the Expires field. 21153 if (this._rescc['s-maxage']) { 21154 return toNumberOrZero(this._rescc['s-maxage']); 21155 } 21156 } 21157 21158 // If a response includes a Cache-Control field with the max-age directive, a recipient MUST ignore the Expires field. 21159 if (this._rescc['max-age']) { 21160 return toNumberOrZero(this._rescc['max-age']); 21161 } 21162 21163 const defaultMinTtl = this._rescc.immutable ? this._immutableMinTtl : 0; 21164 21165 const serverDate = this.date(); 21166 if (this._resHeaders.expires) { 21167 const expires = Date.parse(this._resHeaders.expires); 21168 // A cache recipient MUST interpret invalid date formats, especially the value "0", as representing a time in the past (i.e., "already expired"). 21169 if (Number.isNaN(expires) || expires < serverDate) { 21170 return 0; 21171 } 21172 return Math.max(defaultMinTtl, (expires - serverDate) / 1000); 21173 } 21174 21175 if (this._resHeaders['last-modified']) { 21176 const lastModified = Date.parse(this._resHeaders['last-modified']); 21177 if (isFinite(lastModified) && serverDate > lastModified) { 21178 return Math.max( 21179 defaultMinTtl, 21180 ((serverDate - lastModified) / 1000) * this._cacheHeuristic 21181 ); 21182 } 21183 } 21184 21185 return defaultMinTtl; 21186 } 21187 21188 timeToLive() { 21189 const age = this.maxAge() - this.age(); 21190 const staleIfErrorAge = age + toNumberOrZero(this._rescc['stale-if-error']); 21191 const staleWhileRevalidateAge = age + toNumberOrZero(this._rescc['stale-while-revalidate']); 21192 return Math.max(0, age, staleIfErrorAge, staleWhileRevalidateAge) * 1000; 21193 } 21194 21195 stale() { 21196 return this.maxAge() <= this.age(); 21197 } 21198 21199 _useStaleIfError() { 21200 return this.maxAge() + toNumberOrZero(this._rescc['stale-if-error']) > this.age(); 21201 } 21202 21203 useStaleWhileRevalidate() { 21204 return this.maxAge() + toNumberOrZero(this._rescc['stale-while-revalidate']) > this.age(); 21205 } 21206 21207 static fromObject(obj) { 21208 return new this(undefined, undefined, { _fromObject: obj }); 21209 } 21210 21211 _fromObject(obj) { 21212 if (this._responseTime) throw Error('Reinitialized'); 21213 if (!obj || obj.v !== 1) throw Error('Invalid serialization'); 21214 21215 this._responseTime = obj.t; 21216 this._isShared = obj.sh; 21217 this._cacheHeuristic = obj.ch; 21218 this._immutableMinTtl = 21219 obj.imm !== undefined ? obj.imm : 24 * 3600 * 1000; 21220 this._status = obj.st; 21221 this._resHeaders = obj.resh; 21222 this._rescc = obj.rescc; 21223 this._method = obj.m; 21224 this._url = obj.u; 21225 this._host = obj.h; 21226 this._noAuthorization = obj.a; 21227 this._reqHeaders = obj.reqh; 21228 this._reqcc = obj.reqcc; 21229 } 21230 21231 toObject() { 21232 return { 21233 v: 1, 21234 t: this._responseTime, 21235 sh: this._isShared, 21236 ch: this._cacheHeuristic, 21237 imm: this._immutableMinTtl, 21238 st: this._status, 21239 resh: this._resHeaders, 21240 rescc: this._rescc, 21241 m: this._method, 21242 u: this._url, 21243 h: this._host, 21244 a: this._noAuthorization, 21245 reqh: this._reqHeaders, 21246 reqcc: this._reqcc, 21247 }; 21248 } 21249 21250 /** 21251 * Headers for sending to the origin server to revalidate stale response. 21252 * Allows server to return 304 to allow reuse of the previous response. 21253 * 21254 * Hop by hop headers are always stripped. 21255 * Revalidation headers may be added or removed, depending on request. 21256 */ 21257 revalidationHeaders(incomingReq) { 21258 this._assertRequestHasHeaders(incomingReq); 21259 const headers = this._copyWithoutHopByHopHeaders(incomingReq.headers); 21260 21261 // This implementation does not understand range requests 21262 delete headers['if-range']; 21263 21264 if (!this._requestMatches(incomingReq, true) || !this.storable()) { 21265 // revalidation allowed via HEAD 21266 // not for the same resource, or wasn't allowed to be cached anyway 21267 delete headers['if-none-match']; 21268 delete headers['if-modified-since']; 21269 return headers; 21270 } 21271 21272 /* 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. */ 21273 if (this._resHeaders.etag) { 21274 headers['if-none-match'] = headers['if-none-match'] 21275 ? `${headers['if-none-match']}, ${this._resHeaders.etag}` 21276 : this._resHeaders.etag; 21277 } 21278 21279 // 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. 21280 const forbidsWeakValidators = 21281 headers['accept-ranges'] || 21282 headers['if-match'] || 21283 headers['if-unmodified-since'] || 21284 (this._method && this._method != 'GET'); 21285 21286 /* 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. 21287 Note: This implementation does not understand partial responses (206) */ 21288 if (forbidsWeakValidators) { 21289 delete headers['if-modified-since']; 21290 21291 if (headers['if-none-match']) { 21292 const etags = headers['if-none-match'] 21293 .split(/,/) 21294 .filter(etag => { 21295 return !/^\s*W\//.test(etag); 21296 }); 21297 if (!etags.length) { 21298 delete headers['if-none-match']; 21299 } else { 21300 headers['if-none-match'] = etags.join(',').trim(); 21301 } 21302 } 21303 } else if ( 21304 this._resHeaders['last-modified'] && 21305 !headers['if-modified-since'] 21306 ) { 21307 headers['if-modified-since'] = this._resHeaders['last-modified']; 21308 } 21309 21310 return headers; 21311 } 21312 21313 /** 21314 * Creates new CachePolicy with information combined from the previews response, 21315 * and the new revalidation response. 21316 * 21317 * Returns {policy, modified} where modified is a boolean indicating 21318 * whether the response body has been modified, and old cached body can't be used. 21319 * 21320 * @return {Object} {policy: CachePolicy, modified: Boolean} 21321 */ 21322 revalidatedPolicy(request, response) { 21323 this._assertRequestHasHeaders(request); 21324 if(this._useStaleIfError() && isErrorResponse(response)) { // I consider the revalidation request unsuccessful 21325 return { 21326 modified: false, 21327 matches: false, 21328 policy: this, 21329 }; 21330 } 21331 if (!response || !response.headers) { 21332 throw Error('Response headers missing'); 21333 } 21334 21335 // These aren't going to be supported exactly, since one CachePolicy object 21336 // doesn't know about all the other cached objects. 21337 let matches = false; 21338 if (response.status !== undefined && response.status != 304) { 21339 matches = false; 21340 } else if ( 21341 response.headers.etag && 21342 !/^\s*W\//.test(response.headers.etag) 21343 ) { 21344 // "All of the stored responses with the same strong validator are selected. 21345 // If none of the stored responses contain the same strong validator, 21346 // then the cache MUST NOT use the new response to update any stored responses." 21347 matches = 21348 this._resHeaders.etag && 21349 this._resHeaders.etag.replace(/^\s*W\//, '') === 21350 response.headers.etag; 21351 } else if (this._resHeaders.etag && response.headers.etag) { 21352 // "If the new response contains a weak validator and that validator corresponds 21353 // to one of the cache's stored responses, 21354 // then the most recent of those matching stored responses is selected for update." 21355 matches = 21356 this._resHeaders.etag.replace(/^\s*W\//, '') === 21357 response.headers.etag.replace(/^\s*W\//, ''); 21358 } else if (this._resHeaders['last-modified']) { 21359 matches = 21360 this._resHeaders['last-modified'] === 21361 response.headers['last-modified']; 21362 } else { 21363 // If the new response does not include any form of validator (such as in the case where 21364 // a client generates an If-Modified-Since request from a source other than the Last-Modified 21365 // response header field), and there is only one stored response, and that stored response also 21366 // lacks a validator, then that stored response is selected for update. 21367 if ( 21368 !this._resHeaders.etag && 21369 !this._resHeaders['last-modified'] && 21370 !response.headers.etag && 21371 !response.headers['last-modified'] 21372 ) { 21373 matches = true; 21374 } 21375 } 21376 21377 if (!matches) { 21378 return { 21379 policy: new this.constructor(request, response), 21380 // Client receiving 304 without body, even if it's invalid/mismatched has no option 21381 // but to reuse a cached body. We don't have a good way to tell clients to do 21382 // error recovery in such case. 21383 modified: response.status != 304, 21384 matches: false, 21385 }; 21386 } 21387 21388 // use other header fields provided in the 304 (Not Modified) response to replace all instances 21389 // of the corresponding header fields in the stored response. 21390 const headers = {}; 21391 for (const k in this._resHeaders) { 21392 headers[k] = 21393 k in response.headers && !excludedFromRevalidationUpdate[k] 21394 ? response.headers[k] 21395 : this._resHeaders[k]; 21396 } 21397 21398 const newResponse = Object.assign({}, response, { 21399 status: this._status, 21400 method: this._method, 21401 headers, 21402 }); 21403 return { 21404 policy: new this.constructor(request, newResponse, { 21405 shared: this._isShared, 21406 cacheHeuristic: this._cacheHeuristic, 21407 immutableMinTimeToLive: this._immutableMinTtl, 21408 }), 21409 modified: false, 21410 matches: true, 21411 }; 21412 } 21413 }; 21414 21415 21416 /***/ }), 21417 21418 /***/ 23764: 21419 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 21420 21421 "use strict"; 21422 21423 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 21424 if (k2 === undefined) k2 = k; 21425 var desc = Object.getOwnPropertyDescriptor(m, k); 21426 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 21427 desc = { enumerable: true, get: function() { return m[k]; } }; 21428 } 21429 Object.defineProperty(o, k2, desc); 21430 }) : (function(o, m, k, k2) { 21431 if (k2 === undefined) k2 = k; 21432 o[k2] = m[k]; 21433 })); 21434 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 21435 Object.defineProperty(o, "default", { enumerable: true, value: v }); 21436 }) : function(o, v) { 21437 o["default"] = v; 21438 }); 21439 var __importStar = (this && this.__importStar) || function (mod) { 21440 if (mod && mod.__esModule) return mod; 21441 var result = {}; 21442 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 21443 __setModuleDefault(result, mod); 21444 return result; 21445 }; 21446 var __importDefault = (this && this.__importDefault) || function (mod) { 21447 return (mod && mod.__esModule) ? mod : { "default": mod }; 21448 }; 21449 Object.defineProperty(exports, "__esModule", ({ value: true })); 21450 exports.HttpProxyAgent = void 0; 21451 const net = __importStar(__nccwpck_require__(41808)); 21452 const tls = __importStar(__nccwpck_require__(24404)); 21453 const debug_1 = __importDefault(__nccwpck_require__(38237)); 21454 const events_1 = __nccwpck_require__(82361); 21455 const agent_base_1 = __nccwpck_require__(70694); 21456 const url_1 = __nccwpck_require__(57310); 21457 const debug = (0, debug_1.default)('http-proxy-agent'); 21458 /** 21459 * The `HttpProxyAgent` implements an HTTP Agent subclass that connects 21460 * to the specified "HTTP proxy server" in order to proxy HTTP requests. 21461 */ 21462 class HttpProxyAgent extends agent_base_1.Agent { 21463 constructor(proxy, opts) { 21464 super(opts); 21465 this.proxy = typeof proxy === 'string' ? new url_1.URL(proxy) : proxy; 21466 this.proxyHeaders = opts?.headers ?? {}; 21467 debug('Creating new HttpProxyAgent instance: %o', this.proxy.href); 21468 // Trim off the brackets from IPv6 addresses 21469 const host = (this.proxy.hostname || this.proxy.host).replace(/^\[|\]$/g, ''); 21470 const port = this.proxy.port 21471 ? parseInt(this.proxy.port, 10) 21472 : this.proxy.protocol === 'https:' 21473 ? 443 21474 : 80; 21475 this.connectOpts = { 21476 ...(opts ? omit(opts, 'headers') : null), 21477 host, 21478 port, 21479 }; 21480 } 21481 addRequest(req, opts) { 21482 req._header = null; 21483 this.setRequestProps(req, opts); 21484 // @ts-expect-error `addRequest()` isn't defined in `@types/node` 21485 super.addRequest(req, opts); 21486 } 21487 setRequestProps(req, opts) { 21488 const { proxy } = this; 21489 const protocol = opts.secureEndpoint ? 'https:' : 'http:'; 21490 const hostname = req.getHeader('host') || 'localhost'; 21491 const base = `${protocol}//${hostname}`; 21492 const url = new url_1.URL(req.path, base); 21493 if (opts.port !== 80) { 21494 url.port = String(opts.port); 21495 } 21496 // Change the `http.ClientRequest` instance's "path" field 21497 // to the absolute path of the URL that will be requested. 21498 req.path = String(url); 21499 // Inject the `Proxy-Authorization` header if necessary. 21500 const headers = typeof this.proxyHeaders === 'function' 21501 ? this.proxyHeaders() 21502 : { ...this.proxyHeaders }; 21503 if (proxy.username || proxy.password) { 21504 const auth = `${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`; 21505 headers['Proxy-Authorization'] = `Basic ${Buffer.from(auth).toString('base64')}`; 21506 } 21507 if (!headers['Proxy-Connection']) { 21508 headers['Proxy-Connection'] = this.keepAlive 21509 ? 'Keep-Alive' 21510 : 'close'; 21511 } 21512 for (const name of Object.keys(headers)) { 21513 const value = headers[name]; 21514 if (value) { 21515 req.setHeader(name, value); 21516 } 21517 } 21518 } 21519 async connect(req, opts) { 21520 req._header = null; 21521 if (!req.path.includes('://')) { 21522 this.setRequestProps(req, opts); 21523 } 21524 // At this point, the http ClientRequest's internal `_header` field 21525 // might have already been set. If this is the case then we'll need 21526 // to re-generate the string since we just changed the `req.path`. 21527 let first; 21528 let endOfHeaders; 21529 debug('Regenerating stored HTTP header string for request'); 21530 req._implicitHeader(); 21531 if (req.outputData && req.outputData.length > 0) { 21532 debug('Patching connection write() output buffer with updated header'); 21533 first = req.outputData[0].data; 21534 endOfHeaders = first.indexOf('\r\n\r\n') + 4; 21535 req.outputData[0].data = 21536 req._header + first.substring(endOfHeaders); 21537 debug('Output buffer: %o', req.outputData[0].data); 21538 } 21539 // Create a socket connection to the proxy server. 21540 let socket; 21541 if (this.proxy.protocol === 'https:') { 21542 debug('Creating `tls.Socket`: %o', this.connectOpts); 21543 socket = tls.connect(this.connectOpts); 21544 } 21545 else { 21546 debug('Creating `net.Socket`: %o', this.connectOpts); 21547 socket = net.connect(this.connectOpts); 21548 } 21549 // Wait for the socket's `connect` event, so that this `callback()` 21550 // function throws instead of the `http` request machinery. This is 21551 // important for i.e. `PacProxyAgent` which determines a failed proxy 21552 // connection via the `callback()` function throwing. 21553 await (0, events_1.once)(socket, 'connect'); 21554 return socket; 21555 } 21556 } 21557 HttpProxyAgent.protocols = ['http', 'https']; 21558 exports.HttpProxyAgent = HttpProxyAgent; 21559 function omit(obj, ...keys) { 21560 const ret = {}; 21561 let key; 21562 for (key in obj) { 21563 if (!keys.includes(key)) { 21564 ret[key] = obj[key]; 21565 } 21566 } 21567 return ret; 21568 } 21569 //# sourceMappingURL=index.js.map 21570 21571 /***/ }), 21572 21573 /***/ 77219: 21574 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 21575 21576 "use strict"; 21577 21578 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 21579 if (k2 === undefined) k2 = k; 21580 var desc = Object.getOwnPropertyDescriptor(m, k); 21581 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 21582 desc = { enumerable: true, get: function() { return m[k]; } }; 21583 } 21584 Object.defineProperty(o, k2, desc); 21585 }) : (function(o, m, k, k2) { 21586 if (k2 === undefined) k2 = k; 21587 o[k2] = m[k]; 21588 })); 21589 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 21590 Object.defineProperty(o, "default", { enumerable: true, value: v }); 21591 }) : function(o, v) { 21592 o["default"] = v; 21593 }); 21594 var __importStar = (this && this.__importStar) || function (mod) { 21595 if (mod && mod.__esModule) return mod; 21596 var result = {}; 21597 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 21598 __setModuleDefault(result, mod); 21599 return result; 21600 }; 21601 var __importDefault = (this && this.__importDefault) || function (mod) { 21602 return (mod && mod.__esModule) ? mod : { "default": mod }; 21603 }; 21604 Object.defineProperty(exports, "__esModule", ({ value: true })); 21605 exports.HttpsProxyAgent = void 0; 21606 const net = __importStar(__nccwpck_require__(41808)); 21607 const tls = __importStar(__nccwpck_require__(24404)); 21608 const assert_1 = __importDefault(__nccwpck_require__(39491)); 21609 const debug_1 = __importDefault(__nccwpck_require__(38237)); 21610 const agent_base_1 = __nccwpck_require__(70694); 21611 const url_1 = __nccwpck_require__(57310); 21612 const parse_proxy_response_1 = __nccwpck_require__(595); 21613 const debug = (0, debug_1.default)('https-proxy-agent'); 21614 /** 21615 * The `HttpsProxyAgent` implements an HTTP Agent subclass that connects to 21616 * the specified "HTTP(s) proxy server" in order to proxy HTTPS requests. 21617 * 21618 * Outgoing HTTP requests are first tunneled through the proxy server using the 21619 * `CONNECT` HTTP request method to establish a connection to the proxy server, 21620 * and then the proxy server connects to the destination target and issues the 21621 * HTTP request from the proxy server. 21622 * 21623 * `https:` requests have their socket connection upgraded to TLS once 21624 * the connection to the proxy server has been established. 21625 */ 21626 class HttpsProxyAgent extends agent_base_1.Agent { 21627 constructor(proxy, opts) { 21628 super(opts); 21629 this.options = { path: undefined }; 21630 this.proxy = typeof proxy === 'string' ? new url_1.URL(proxy) : proxy; 21631 this.proxyHeaders = opts?.headers ?? {}; 21632 debug('Creating new HttpsProxyAgent instance: %o', this.proxy.href); 21633 // Trim off the brackets from IPv6 addresses 21634 const host = (this.proxy.hostname || this.proxy.host).replace(/^\[|\]$/g, ''); 21635 const port = this.proxy.port 21636 ? parseInt(this.proxy.port, 10) 21637 : this.proxy.protocol === 'https:' 21638 ? 443 21639 : 80; 21640 this.connectOpts = { 21641 // Attempt to negotiate http/1.1 for proxy servers that support http/2 21642 ALPNProtocols: ['http/1.1'], 21643 ...(opts ? omit(opts, 'headers') : null), 21644 host, 21645 port, 21646 }; 21647 } 21648 /** 21649 * Called when the node-core HTTP client library is creating a 21650 * new HTTP request. 21651 */ 21652 async connect(req, opts) { 21653 const { proxy } = this; 21654 if (!opts.host) { 21655 throw new TypeError('No "host" provided'); 21656 } 21657 // Create a socket connection to the proxy server. 21658 let socket; 21659 if (proxy.protocol === 'https:') { 21660 debug('Creating `tls.Socket`: %o', this.connectOpts); 21661 const servername = this.connectOpts.servername || this.connectOpts.host; 21662 socket = tls.connect({ 21663 ...this.connectOpts, 21664 servername: servername && net.isIP(servername) ? undefined : servername, 21665 }); 21666 } 21667 else { 21668 debug('Creating `net.Socket`: %o', this.connectOpts); 21669 socket = net.connect(this.connectOpts); 21670 } 21671 const headers = typeof this.proxyHeaders === 'function' 21672 ? this.proxyHeaders() 21673 : { ...this.proxyHeaders }; 21674 const host = net.isIPv6(opts.host) ? `[${opts.host}]` : opts.host; 21675 let payload = `CONNECT ${host}:${opts.port} HTTP/1.1\r\n`; 21676 // Inject the `Proxy-Authorization` header if necessary. 21677 if (proxy.username || proxy.password) { 21678 const auth = `${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`; 21679 headers['Proxy-Authorization'] = `Basic ${Buffer.from(auth).toString('base64')}`; 21680 } 21681 headers.Host = `${host}:${opts.port}`; 21682 if (!headers['Proxy-Connection']) { 21683 headers['Proxy-Connection'] = this.keepAlive 21684 ? 'Keep-Alive' 21685 : 'close'; 21686 } 21687 for (const name of Object.keys(headers)) { 21688 payload += `${name}: ${headers[name]}\r\n`; 21689 } 21690 const proxyResponsePromise = (0, parse_proxy_response_1.parseProxyResponse)(socket); 21691 socket.write(`${payload}\r\n`); 21692 const { connect, buffered } = await proxyResponsePromise; 21693 req.emit('proxyConnect', connect); 21694 this.emit('proxyConnect', connect, req); 21695 if (connect.statusCode === 200) { 21696 req.once('socket', resume); 21697 if (opts.secureEndpoint) { 21698 // The proxy is connecting to a TLS server, so upgrade 21699 // this socket connection to a TLS connection. 21700 debug('Upgrading socket connection to TLS'); 21701 const servername = opts.servername || opts.host; 21702 return tls.connect({ 21703 ...omit(opts, 'host', 'path', 'port'), 21704 socket, 21705 servername: net.isIP(servername) ? undefined : servername, 21706 }); 21707 } 21708 return socket; 21709 } 21710 // Some other status code that's not 200... need to re-play the HTTP 21711 // header "data" events onto the socket once the HTTP machinery is 21712 // attached so that the node core `http` can parse and handle the 21713 // error status code. 21714 // Close the original socket, and a new "fake" socket is returned 21715 // instead, so that the proxy doesn't get the HTTP request 21716 // written to it (which may contain `Authorization` headers or other 21717 // sensitive data). 21718 // 21719 // See: https://hackerone.com/reports/541502 21720 socket.destroy(); 21721 const fakeSocket = new net.Socket({ writable: false }); 21722 fakeSocket.readable = true; 21723 // Need to wait for the "socket" event to re-play the "data" events. 21724 req.once('socket', (s) => { 21725 debug('Replaying proxy buffer for failed request'); 21726 (0, assert_1.default)(s.listenerCount('data') > 0); 21727 // Replay the "buffered" Buffer onto the fake `socket`, since at 21728 // this point the HTTP module machinery has been hooked up for 21729 // the user. 21730 s.push(buffered); 21731 s.push(null); 21732 }); 21733 return fakeSocket; 21734 } 21735 } 21736 HttpsProxyAgent.protocols = ['http', 'https']; 21737 exports.HttpsProxyAgent = HttpsProxyAgent; 21738 function resume(socket) { 21739 socket.resume(); 21740 } 21741 function omit(obj, ...keys) { 21742 const ret = {}; 21743 let key; 21744 for (key in obj) { 21745 if (!keys.includes(key)) { 21746 ret[key] = obj[key]; 21747 } 21748 } 21749 return ret; 21750 } 21751 //# sourceMappingURL=index.js.map 21752 21753 /***/ }), 21754 21755 /***/ 595: 21756 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 21757 21758 "use strict"; 21759 21760 var __importDefault = (this && this.__importDefault) || function (mod) { 21761 return (mod && mod.__esModule) ? mod : { "default": mod }; 21762 }; 21763 Object.defineProperty(exports, "__esModule", ({ value: true })); 21764 exports.parseProxyResponse = void 0; 21765 const debug_1 = __importDefault(__nccwpck_require__(38237)); 21766 const debug = (0, debug_1.default)('https-proxy-agent:parse-proxy-response'); 21767 function parseProxyResponse(socket) { 21768 return new Promise((resolve, reject) => { 21769 // we need to buffer any HTTP traffic that happens with the proxy before we get 21770 // the CONNECT response, so that if the response is anything other than an "200" 21771 // response code, then we can re-play the "data" events on the socket once the 21772 // HTTP parser is hooked up... 21773 let buffersLength = 0; 21774 const buffers = []; 21775 function read() { 21776 const b = socket.read(); 21777 if (b) 21778 ondata(b); 21779 else 21780 socket.once('readable', read); 21781 } 21782 function cleanup() { 21783 socket.removeListener('end', onend); 21784 socket.removeListener('error', onerror); 21785 socket.removeListener('readable', read); 21786 } 21787 function onend() { 21788 cleanup(); 21789 debug('onend'); 21790 reject(new Error('Proxy connection ended before receiving CONNECT response')); 21791 } 21792 function onerror(err) { 21793 cleanup(); 21794 debug('onerror %o', err); 21795 reject(err); 21796 } 21797 function ondata(b) { 21798 buffers.push(b); 21799 buffersLength += b.length; 21800 const buffered = Buffer.concat(buffers, buffersLength); 21801 const endOfHeaders = buffered.indexOf('\r\n\r\n'); 21802 if (endOfHeaders === -1) { 21803 // keep buffering 21804 debug('have not received end of HTTP headers yet...'); 21805 read(); 21806 return; 21807 } 21808 const headerParts = buffered 21809 .slice(0, endOfHeaders) 21810 .toString('ascii') 21811 .split('\r\n'); 21812 const firstLine = headerParts.shift(); 21813 if (!firstLine) { 21814 socket.destroy(); 21815 return reject(new Error('No header received from proxy CONNECT response')); 21816 } 21817 const firstLineParts = firstLine.split(' '); 21818 const statusCode = +firstLineParts[1]; 21819 const statusText = firstLineParts.slice(2).join(' '); 21820 const headers = {}; 21821 for (const header of headerParts) { 21822 if (!header) 21823 continue; 21824 const firstColon = header.indexOf(':'); 21825 if (firstColon === -1) { 21826 socket.destroy(); 21827 return reject(new Error(`Invalid header from proxy CONNECT response: "${header}"`)); 21828 } 21829 const key = header.slice(0, firstColon).toLowerCase(); 21830 const value = header.slice(firstColon + 1).trimStart(); 21831 const current = headers[key]; 21832 if (typeof current === 'string') { 21833 headers[key] = [current, value]; 21834 } 21835 else if (Array.isArray(current)) { 21836 current.push(value); 21837 } 21838 else { 21839 headers[key] = value; 21840 } 21841 } 21842 debug('got proxy server response: %o %o', firstLine, headers); 21843 cleanup(); 21844 resolve({ 21845 connect: { 21846 statusCode, 21847 statusText, 21848 headers, 21849 }, 21850 buffered, 21851 }); 21852 } 21853 socket.on('error', onerror); 21854 socket.on('end', onend); 21855 read(); 21856 }); 21857 } 21858 exports.parseProxyResponse = parseProxyResponse; 21859 //# sourceMappingURL=parse-proxy-response.js.map 21860 21861 /***/ }), 21862 21863 /***/ 39695: 21864 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 21865 21866 "use strict"; 21867 21868 var Buffer = (__nccwpck_require__(15118).Buffer); 21869 21870 // Multibyte codec. In this scheme, a character is represented by 1 or more bytes. 21871 // Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences. 21872 // To save memory and loading time, we read table files only when requested. 21873 21874 exports._dbcs = DBCSCodec; 21875 21876 var UNASSIGNED = -1, 21877 GB18030_CODE = -2, 21878 SEQ_START = -10, 21879 NODE_START = -1000, 21880 UNASSIGNED_NODE = new Array(0x100), 21881 DEF_CHAR = -1; 21882 21883 for (var i = 0; i < 0x100; i++) 21884 UNASSIGNED_NODE[i] = UNASSIGNED; 21885 21886 21887 // Class DBCSCodec reads and initializes mapping tables. 21888 function DBCSCodec(codecOptions, iconv) { 21889 this.encodingName = codecOptions.encodingName; 21890 if (!codecOptions) 21891 throw new Error("DBCS codec is called without the data.") 21892 if (!codecOptions.table) 21893 throw new Error("Encoding '" + this.encodingName + "' has no data."); 21894 21895 // Load tables. 21896 var mappingTable = codecOptions.table(); 21897 21898 21899 // Decode tables: MBCS -> Unicode. 21900 21901 // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256. 21902 // Trie root is decodeTables[0]. 21903 // Values: >= 0 -> unicode character code. can be > 0xFFFF 21904 // == UNASSIGNED -> unknown/unassigned sequence. 21905 // == GB18030_CODE -> this is the end of a GB18030 4-byte sequence. 21906 // <= NODE_START -> index of the next node in our trie to process next byte. 21907 // <= SEQ_START -> index of the start of a character code sequence, in decodeTableSeq. 21908 this.decodeTables = []; 21909 this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node. 21910 21911 // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. 21912 this.decodeTableSeq = []; 21913 21914 // Actual mapping tables consist of chunks. Use them to fill up decode tables. 21915 for (var i = 0; i < mappingTable.length; i++) 21916 this._addDecodeChunk(mappingTable[i]); 21917 21918 // Load & create GB18030 tables when needed. 21919 if (typeof codecOptions.gb18030 === 'function') { 21920 this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges. 21921 21922 // Add GB18030 common decode nodes. 21923 var commonThirdByteNodeIdx = this.decodeTables.length; 21924 this.decodeTables.push(UNASSIGNED_NODE.slice(0)); 21925 21926 var commonFourthByteNodeIdx = this.decodeTables.length; 21927 this.decodeTables.push(UNASSIGNED_NODE.slice(0)); 21928 21929 // Fill out the tree 21930 var firstByteNode = this.decodeTables[0]; 21931 for (var i = 0x81; i <= 0xFE; i++) { 21932 var secondByteNode = this.decodeTables[NODE_START - firstByteNode[i]]; 21933 for (var j = 0x30; j <= 0x39; j++) { 21934 if (secondByteNode[j] === UNASSIGNED) { 21935 secondByteNode[j] = NODE_START - commonThirdByteNodeIdx; 21936 } else if (secondByteNode[j] > NODE_START) { 21937 throw new Error("gb18030 decode tables conflict at byte 2"); 21938 } 21939 21940 var thirdByteNode = this.decodeTables[NODE_START - secondByteNode[j]]; 21941 for (var k = 0x81; k <= 0xFE; k++) { 21942 if (thirdByteNode[k] === UNASSIGNED) { 21943 thirdByteNode[k] = NODE_START - commonFourthByteNodeIdx; 21944 } else if (thirdByteNode[k] === NODE_START - commonFourthByteNodeIdx) { 21945 continue; 21946 } else if (thirdByteNode[k] > NODE_START) { 21947 throw new Error("gb18030 decode tables conflict at byte 3"); 21948 } 21949 21950 var fourthByteNode = this.decodeTables[NODE_START - thirdByteNode[k]]; 21951 for (var l = 0x30; l <= 0x39; l++) { 21952 if (fourthByteNode[l] === UNASSIGNED) 21953 fourthByteNode[l] = GB18030_CODE; 21954 } 21955 } 21956 } 21957 } 21958 } 21959 21960 this.defaultCharUnicode = iconv.defaultCharUnicode; 21961 21962 21963 // Encode tables: Unicode -> DBCS. 21964 21965 // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance. 21966 // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null. 21967 // Values: >= 0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.). 21968 // == UNASSIGNED -> no conversion found. Output a default char. 21969 // <= SEQ_START -> it's an index in encodeTableSeq, see below. The character starts a sequence. 21970 this.encodeTable = []; 21971 21972 // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of 21973 // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key 21974 // means end of sequence (needed when one sequence is a strict subsequence of another). 21975 // Objects are kept separately from encodeTable to increase performance. 21976 this.encodeTableSeq = []; 21977 21978 // Some chars can be decoded, but need not be encoded. 21979 var skipEncodeChars = {}; 21980 if (codecOptions.encodeSkipVals) 21981 for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) { 21982 var val = codecOptions.encodeSkipVals[i]; 21983 if (typeof val === 'number') 21984 skipEncodeChars[val] = true; 21985 else 21986 for (var j = val.from; j <= val.to; j++) 21987 skipEncodeChars[j] = true; 21988 } 21989 21990 // Use decode trie to recursively fill out encode tables. 21991 this._fillEncodeTable(0, 0, skipEncodeChars); 21992 21993 // Add more encoding pairs when needed. 21994 if (codecOptions.encodeAdd) { 21995 for (var uChar in codecOptions.encodeAdd) 21996 if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar)) 21997 this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]); 21998 } 21999 22000 this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)]; 22001 if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?']; 22002 if (this.defCharSB === UNASSIGNED) this.defCharSB = "?".charCodeAt(0); 22003 } 22004 22005 DBCSCodec.prototype.encoder = DBCSEncoder; 22006 DBCSCodec.prototype.decoder = DBCSDecoder; 22007 22008 // Decoder helpers 22009 DBCSCodec.prototype._getDecodeTrieNode = function(addr) { 22010 var bytes = []; 22011 for (; addr > 0; addr >>>= 8) 22012 bytes.push(addr & 0xFF); 22013 if (bytes.length == 0) 22014 bytes.push(0); 22015 22016 var node = this.decodeTables[0]; 22017 for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie. 22018 var val = node[bytes[i]]; 22019 22020 if (val == UNASSIGNED) { // Create new node. 22021 node[bytes[i]] = NODE_START - this.decodeTables.length; 22022 this.decodeTables.push(node = UNASSIGNED_NODE.slice(0)); 22023 } 22024 else if (val <= NODE_START) { // Existing node. 22025 node = this.decodeTables[NODE_START - val]; 22026 } 22027 else 22028 throw new Error("Overwrite byte in " + this.encodingName + ", addr: " + addr.toString(16)); 22029 } 22030 return node; 22031 } 22032 22033 22034 DBCSCodec.prototype._addDecodeChunk = function(chunk) { 22035 // First element of chunk is the hex mbcs code where we start. 22036 var curAddr = parseInt(chunk[0], 16); 22037 22038 // Choose the decoding node where we'll write our chars. 22039 var writeTable = this._getDecodeTrieNode(curAddr); 22040 curAddr = curAddr & 0xFF; 22041 22042 // Write all other elements of the chunk to the table. 22043 for (var k = 1; k < chunk.length; k++) { 22044 var part = chunk[k]; 22045 if (typeof part === "string") { // String, write as-is. 22046 for (var l = 0; l < part.length;) { 22047 var code = part.charCodeAt(l++); 22048 if (0xD800 <= code && code < 0xDC00) { // Decode surrogate 22049 var codeTrail = part.charCodeAt(l++); 22050 if (0xDC00 <= codeTrail && codeTrail < 0xE000) 22051 writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00); 22052 else 22053 throw new Error("Incorrect surrogate pair in " + this.encodingName + " at chunk " + chunk[0]); 22054 } 22055 else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used) 22056 var len = 0xFFF - code + 2; 22057 var seq = []; 22058 for (var m = 0; m < len; m++) 22059 seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq. 22060 22061 writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length; 22062 this.decodeTableSeq.push(seq); 22063 } 22064 else 22065 writeTable[curAddr++] = code; // Basic char 22066 } 22067 } 22068 else if (typeof part === "number") { // Integer, meaning increasing sequence starting with prev character. 22069 var charCode = writeTable[curAddr - 1] + 1; 22070 for (var l = 0; l < part; l++) 22071 writeTable[curAddr++] = charCode++; 22072 } 22073 else 22074 throw new Error("Incorrect type '" + typeof part + "' given in " + this.encodingName + " at chunk " + chunk[0]); 22075 } 22076 if (curAddr > 0xFF) 22077 throw new Error("Incorrect chunk in " + this.encodingName + " at addr " + chunk[0] + ": too long" + curAddr); 22078 } 22079 22080 // Encoder helpers 22081 DBCSCodec.prototype._getEncodeBucket = function(uCode) { 22082 var high = uCode >> 8; // This could be > 0xFF because of astral characters. 22083 if (this.encodeTable[high] === undefined) 22084 this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand. 22085 return this.encodeTable[high]; 22086 } 22087 22088 DBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) { 22089 var bucket = this._getEncodeBucket(uCode); 22090 var low = uCode & 0xFF; 22091 if (bucket[low] <= SEQ_START) 22092 this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it. 22093 else if (bucket[low] == UNASSIGNED) 22094 bucket[low] = dbcsCode; 22095 } 22096 22097 DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) { 22098 22099 // Get the root of character tree according to first character of the sequence. 22100 var uCode = seq[0]; 22101 var bucket = this._getEncodeBucket(uCode); 22102 var low = uCode & 0xFF; 22103 22104 var node; 22105 if (bucket[low] <= SEQ_START) { 22106 // There's already a sequence with - use it. 22107 node = this.encodeTableSeq[SEQ_START-bucket[low]]; 22108 } 22109 else { 22110 // There was no sequence object - allocate a new one. 22111 node = {}; 22112 if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence. 22113 bucket[low] = SEQ_START - this.encodeTableSeq.length; 22114 this.encodeTableSeq.push(node); 22115 } 22116 22117 // Traverse the character tree, allocating new nodes as needed. 22118 for (var j = 1; j < seq.length-1; j++) { 22119 var oldVal = node[uCode]; 22120 if (typeof oldVal === 'object') 22121 node = oldVal; 22122 else { 22123 node = node[uCode] = {} 22124 if (oldVal !== undefined) 22125 node[DEF_CHAR] = oldVal 22126 } 22127 } 22128 22129 // Set the leaf to given dbcsCode. 22130 uCode = seq[seq.length-1]; 22131 node[uCode] = dbcsCode; 22132 } 22133 22134 DBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) { 22135 var node = this.decodeTables[nodeIdx]; 22136 var hasValues = false; 22137 var subNodeEmpty = {}; 22138 for (var i = 0; i < 0x100; i++) { 22139 var uCode = node[i]; 22140 var mbCode = prefix + i; 22141 if (skipEncodeChars[mbCode]) 22142 continue; 22143 22144 if (uCode >= 0) { 22145 this._setEncodeChar(uCode, mbCode); 22146 hasValues = true; 22147 } else if (uCode <= NODE_START) { 22148 var subNodeIdx = NODE_START - uCode; 22149 if (!subNodeEmpty[subNodeIdx]) { // Skip empty subtrees (they are too large in gb18030). 22150 var newPrefix = (mbCode << 8) >>> 0; // NOTE: '>>> 0' keeps 32-bit num positive. 22151 if (this._fillEncodeTable(subNodeIdx, newPrefix, skipEncodeChars)) 22152 hasValues = true; 22153 else 22154 subNodeEmpty[subNodeIdx] = true; 22155 } 22156 } else if (uCode <= SEQ_START) { 22157 this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode); 22158 hasValues = true; 22159 } 22160 } 22161 return hasValues; 22162 } 22163 22164 22165 22166 // == Encoder ================================================================== 22167 22168 function DBCSEncoder(options, codec) { 22169 // Encoder state 22170 this.leadSurrogate = -1; 22171 this.seqObj = undefined; 22172 22173 // Static data 22174 this.encodeTable = codec.encodeTable; 22175 this.encodeTableSeq = codec.encodeTableSeq; 22176 this.defaultCharSingleByte = codec.defCharSB; 22177 this.gb18030 = codec.gb18030; 22178 } 22179 22180 DBCSEncoder.prototype.write = function(str) { 22181 var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)), 22182 leadSurrogate = this.leadSurrogate, 22183 seqObj = this.seqObj, nextChar = -1, 22184 i = 0, j = 0; 22185 22186 while (true) { 22187 // 0. Get next character. 22188 if (nextChar === -1) { 22189 if (i == str.length) break; 22190 var uCode = str.charCodeAt(i++); 22191 } 22192 else { 22193 var uCode = nextChar; 22194 nextChar = -1; 22195 } 22196 22197 // 1. Handle surrogates. 22198 if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates. 22199 if (uCode < 0xDC00) { // We've got lead surrogate. 22200 if (leadSurrogate === -1) { 22201 leadSurrogate = uCode; 22202 continue; 22203 } else { 22204 leadSurrogate = uCode; 22205 // Double lead surrogate found. 22206 uCode = UNASSIGNED; 22207 } 22208 } else { // We've got trail surrogate. 22209 if (leadSurrogate !== -1) { 22210 uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00); 22211 leadSurrogate = -1; 22212 } else { 22213 // Incomplete surrogate pair - only trail surrogate found. 22214 uCode = UNASSIGNED; 22215 } 22216 22217 } 22218 } 22219 else if (leadSurrogate !== -1) { 22220 // Incomplete surrogate pair - only lead surrogate found. 22221 nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char. 22222 leadSurrogate = -1; 22223 } 22224 22225 // 2. Convert uCode character. 22226 var dbcsCode = UNASSIGNED; 22227 if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence 22228 var resCode = seqObj[uCode]; 22229 if (typeof resCode === 'object') { // Sequence continues. 22230 seqObj = resCode; 22231 continue; 22232 22233 } else if (typeof resCode == 'number') { // Sequence finished. Write it. 22234 dbcsCode = resCode; 22235 22236 } else if (resCode == undefined) { // Current character is not part of the sequence. 22237 22238 // Try default character for this sequence 22239 resCode = seqObj[DEF_CHAR]; 22240 if (resCode !== undefined) { 22241 dbcsCode = resCode; // Found. Write it. 22242 nextChar = uCode; // Current character will be written too in the next iteration. 22243 22244 } else { 22245 // TODO: What if we have no default? (resCode == undefined) 22246 // Then, we should write first char of the sequence as-is and try the rest recursively. 22247 // Didn't do it for now because no encoding has this situation yet. 22248 // Currently, just skip the sequence and write current char. 22249 } 22250 } 22251 seqObj = undefined; 22252 } 22253 else if (uCode >= 0) { // Regular character 22254 var subtable = this.encodeTable[uCode >> 8]; 22255 if (subtable !== undefined) 22256 dbcsCode = subtable[uCode & 0xFF]; 22257 22258 if (dbcsCode <= SEQ_START) { // Sequence start 22259 seqObj = this.encodeTableSeq[SEQ_START-dbcsCode]; 22260 continue; 22261 } 22262 22263 if (dbcsCode == UNASSIGNED && this.gb18030) { 22264 // Use GB18030 algorithm to find character(s) to write. 22265 var idx = findIdx(this.gb18030.uChars, uCode); 22266 if (idx != -1) { 22267 var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]); 22268 newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600; 22269 newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260; 22270 newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10; 22271 newBuf[j++] = 0x30 + dbcsCode; 22272 continue; 22273 } 22274 } 22275 } 22276 22277 // 3. Write dbcsCode character. 22278 if (dbcsCode === UNASSIGNED) 22279 dbcsCode = this.defaultCharSingleByte; 22280 22281 if (dbcsCode < 0x100) { 22282 newBuf[j++] = dbcsCode; 22283 } 22284 else if (dbcsCode < 0x10000) { 22285 newBuf[j++] = dbcsCode >> 8; // high byte 22286 newBuf[j++] = dbcsCode & 0xFF; // low byte 22287 } 22288 else if (dbcsCode < 0x1000000) { 22289 newBuf[j++] = dbcsCode >> 16; 22290 newBuf[j++] = (dbcsCode >> 8) & 0xFF; 22291 newBuf[j++] = dbcsCode & 0xFF; 22292 } else { 22293 newBuf[j++] = dbcsCode >>> 24; 22294 newBuf[j++] = (dbcsCode >>> 16) & 0xFF; 22295 newBuf[j++] = (dbcsCode >>> 8) & 0xFF; 22296 newBuf[j++] = dbcsCode & 0xFF; 22297 } 22298 } 22299 22300 this.seqObj = seqObj; 22301 this.leadSurrogate = leadSurrogate; 22302 return newBuf.slice(0, j); 22303 } 22304 22305 DBCSEncoder.prototype.end = function() { 22306 if (this.leadSurrogate === -1 && this.seqObj === undefined) 22307 return; // All clean. Most often case. 22308 22309 var newBuf = Buffer.alloc(10), j = 0; 22310 22311 if (this.seqObj) { // We're in the sequence. 22312 var dbcsCode = this.seqObj[DEF_CHAR]; 22313 if (dbcsCode !== undefined) { // Write beginning of the sequence. 22314 if (dbcsCode < 0x100) { 22315 newBuf[j++] = dbcsCode; 22316 } 22317 else { 22318 newBuf[j++] = dbcsCode >> 8; // high byte 22319 newBuf[j++] = dbcsCode & 0xFF; // low byte 22320 } 22321 } else { 22322 // See todo above. 22323 } 22324 this.seqObj = undefined; 22325 } 22326 22327 if (this.leadSurrogate !== -1) { 22328 // Incomplete surrogate pair - only lead surrogate found. 22329 newBuf[j++] = this.defaultCharSingleByte; 22330 this.leadSurrogate = -1; 22331 } 22332 22333 return newBuf.slice(0, j); 22334 } 22335 22336 // Export for testing 22337 DBCSEncoder.prototype.findIdx = findIdx; 22338 22339 22340 // == Decoder ================================================================== 22341 22342 function DBCSDecoder(options, codec) { 22343 // Decoder state 22344 this.nodeIdx = 0; 22345 this.prevBytes = []; 22346 22347 // Static data 22348 this.decodeTables = codec.decodeTables; 22349 this.decodeTableSeq = codec.decodeTableSeq; 22350 this.defaultCharUnicode = codec.defaultCharUnicode; 22351 this.gb18030 = codec.gb18030; 22352 } 22353 22354 DBCSDecoder.prototype.write = function(buf) { 22355 var newBuf = Buffer.alloc(buf.length*2), 22356 nodeIdx = this.nodeIdx, 22357 prevBytes = this.prevBytes, prevOffset = this.prevBytes.length, 22358 seqStart = -this.prevBytes.length, // idx of the start of current parsed sequence. 22359 uCode; 22360 22361 for (var i = 0, j = 0; i < buf.length; i++) { 22362 var curByte = (i >= 0) ? buf[i] : prevBytes[i + prevOffset]; 22363 22364 // Lookup in current trie node. 22365 var uCode = this.decodeTables[nodeIdx][curByte]; 22366 22367 if (uCode >= 0) { 22368 // Normal character, just use it. 22369 } 22370 else if (uCode === UNASSIGNED) { // Unknown char. 22371 // TODO: Callback with seq. 22372 uCode = this.defaultCharUnicode.charCodeAt(0); 22373 i = seqStart; // Skip one byte ('i' will be incremented by the for loop) and try to parse again. 22374 } 22375 else if (uCode === GB18030_CODE) { 22376 if (i >= 3) { 22377 var ptr = (buf[i-3]-0x81)*12600 + (buf[i-2]-0x30)*1260 + (buf[i-1]-0x81)*10 + (curByte-0x30); 22378 } else { 22379 var ptr = (prevBytes[i-3+prevOffset]-0x81)*12600 + 22380 (((i-2 >= 0) ? buf[i-2] : prevBytes[i-2+prevOffset])-0x30)*1260 + 22381 (((i-1 >= 0) ? buf[i-1] : prevBytes[i-1+prevOffset])-0x81)*10 + 22382 (curByte-0x30); 22383 } 22384 var idx = findIdx(this.gb18030.gbChars, ptr); 22385 uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx]; 22386 } 22387 else if (uCode <= NODE_START) { // Go to next trie node. 22388 nodeIdx = NODE_START - uCode; 22389 continue; 22390 } 22391 else if (uCode <= SEQ_START) { // Output a sequence of chars. 22392 var seq = this.decodeTableSeq[SEQ_START - uCode]; 22393 for (var k = 0; k < seq.length - 1; k++) { 22394 uCode = seq[k]; 22395 newBuf[j++] = uCode & 0xFF; 22396 newBuf[j++] = uCode >> 8; 22397 } 22398 uCode = seq[seq.length-1]; 22399 } 22400 else 22401 throw new Error("iconv-lite internal error: invalid decoding table value " + uCode + " at " + nodeIdx + "/" + curByte); 22402 22403 // Write the character to buffer, handling higher planes using surrogate pair. 22404 if (uCode >= 0x10000) { 22405 uCode -= 0x10000; 22406 var uCodeLead = 0xD800 | (uCode >> 10); 22407 newBuf[j++] = uCodeLead & 0xFF; 22408 newBuf[j++] = uCodeLead >> 8; 22409 22410 uCode = 0xDC00 | (uCode & 0x3FF); 22411 } 22412 newBuf[j++] = uCode & 0xFF; 22413 newBuf[j++] = uCode >> 8; 22414 22415 // Reset trie node. 22416 nodeIdx = 0; seqStart = i+1; 22417 } 22418 22419 this.nodeIdx = nodeIdx; 22420 this.prevBytes = (seqStart >= 0) 22421 ? Array.prototype.slice.call(buf, seqStart) 22422 : prevBytes.slice(seqStart + prevOffset).concat(Array.prototype.slice.call(buf)); 22423 22424 return newBuf.slice(0, j).toString('ucs2'); 22425 } 22426 22427 DBCSDecoder.prototype.end = function() { 22428 var ret = ''; 22429 22430 // Try to parse all remaining chars. 22431 while (this.prevBytes.length > 0) { 22432 // Skip 1 character in the buffer. 22433 ret += this.defaultCharUnicode; 22434 var bytesArr = this.prevBytes.slice(1); 22435 22436 // Parse remaining as usual. 22437 this.prevBytes = []; 22438 this.nodeIdx = 0; 22439 if (bytesArr.length > 0) 22440 ret += this.write(bytesArr); 22441 } 22442 22443 this.prevBytes = []; 22444 this.nodeIdx = 0; 22445 return ret; 22446 } 22447 22448 // Binary search for GB18030. Returns largest i such that table[i] <= val. 22449 function findIdx(table, val) { 22450 if (table[0] > val) 22451 return -1; 22452 22453 var l = 0, r = table.length; 22454 while (l < r-1) { // always table[l] <= val < table[r] 22455 var mid = l + ((r-l+1) >> 1); 22456 if (table[mid] <= val) 22457 l = mid; 22458 else 22459 r = mid; 22460 } 22461 return l; 22462 } 22463 22464 22465 22466 /***/ }), 22467 22468 /***/ 91386: 22469 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 22470 22471 "use strict"; 22472 22473 22474 // Description of supported double byte encodings and aliases. 22475 // Tables are not require()-d until they are needed to speed up library load. 22476 // require()-s are direct to support Browserify. 22477 22478 module.exports = { 22479 22480 // == Japanese/ShiftJIS ==================================================== 22481 // All japanese encodings are based on JIS X set of standards: 22482 // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF. 22483 // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. 22484 // Has several variations in 1978, 1983, 1990 and 1997. 22485 // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead. 22486 // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233. 22487 // 2 planes, first is superset of 0208, second - revised 0212. 22488 // Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx) 22489 22490 // Byte encodings are: 22491 // * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte 22492 // encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC. 22493 // Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI. 22494 // * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes. 22495 // 0x00-0x7F - lower part of 0201 22496 // 0x8E, 0xA1-0xDF - upper part of 0201 22497 // (0xA1-0xFE)x2 - 0208 plane (94x94). 22498 // 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94). 22499 // * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon. 22500 // Used as-is in ISO2022 family. 22501 // * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, 22502 // 0201-1976 Roman, 0208-1978, 0208-1983. 22503 // * ISO2022-JP-1: Adds esc seq for 0212-1990. 22504 // * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7. 22505 // * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2. 22506 // * ISO2022-JP-2004: Adds 0213-2004 Plane 1. 22507 // 22508 // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes. 22509 // 22510 // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html 22511 22512 'shiftjis': { 22513 type: '_dbcs', 22514 table: function() { return __nccwpck_require__(27014) }, 22515 encodeAdd: {'\u00a5': 0x5C, '\u203E': 0x7E}, 22516 encodeSkipVals: [{from: 0xED40, to: 0xF940}], 22517 }, 22518 'csshiftjis': 'shiftjis', 22519 'mskanji': 'shiftjis', 22520 'sjis': 'shiftjis', 22521 'windows31j': 'shiftjis', 22522 'ms31j': 'shiftjis', 22523 'xsjis': 'shiftjis', 22524 'windows932': 'shiftjis', 22525 'ms932': 'shiftjis', 22526 '932': 'shiftjis', 22527 'cp932': 'shiftjis', 22528 22529 'eucjp': { 22530 type: '_dbcs', 22531 table: function() { return __nccwpck_require__(31532) }, 22532 encodeAdd: {'\u00a5': 0x5C, '\u203E': 0x7E}, 22533 }, 22534 22535 // TODO: KDDI extension to Shift_JIS 22536 // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes. 22537 // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars. 22538 22539 22540 // == Chinese/GBK ========================================================== 22541 // http://en.wikipedia.org/wiki/GBK 22542 // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder 22543 22544 // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936 22545 'gb2312': 'cp936', 22546 'gb231280': 'cp936', 22547 'gb23121980': 'cp936', 22548 'csgb2312': 'cp936', 22549 'csiso58gb231280': 'cp936', 22550 'euccn': 'cp936', 22551 22552 // Microsoft's CP936 is a subset and approximation of GBK. 22553 'windows936': 'cp936', 22554 'ms936': 'cp936', 22555 '936': 'cp936', 22556 'cp936': { 22557 type: '_dbcs', 22558 table: function() { return __nccwpck_require__(13336) }, 22559 }, 22560 22561 // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other. 22562 'gbk': { 22563 type: '_dbcs', 22564 table: function() { return (__nccwpck_require__(13336).concat)(__nccwpck_require__(44346)) }, 22565 }, 22566 'xgbk': 'gbk', 22567 'isoir58': 'gbk', 22568 22569 // GB18030 is an algorithmic extension of GBK. 22570 // Main source: https://www.w3.org/TR/encoding/#gbk-encoder 22571 // http://icu-project.org/docs/papers/gb18030.html 22572 // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml 22573 // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0 22574 'gb18030': { 22575 type: '_dbcs', 22576 table: function() { return (__nccwpck_require__(13336).concat)(__nccwpck_require__(44346)) }, 22577 gb18030: function() { return __nccwpck_require__(83121) }, 22578 encodeSkipVals: [0x80], 22579 encodeAdd: {'€': 0xA2E3}, 22580 }, 22581 22582 'chinese': 'gb18030', 22583 22584 22585 // == Korean =============================================================== 22586 // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same. 22587 'windows949': 'cp949', 22588 'ms949': 'cp949', 22589 '949': 'cp949', 22590 'cp949': { 22591 type: '_dbcs', 22592 table: function() { return __nccwpck_require__(77348) }, 22593 }, 22594 22595 'cseuckr': 'cp949', 22596 'csksc56011987': 'cp949', 22597 'euckr': 'cp949', 22598 'isoir149': 'cp949', 22599 'korean': 'cp949', 22600 'ksc56011987': 'cp949', 22601 'ksc56011989': 'cp949', 22602 'ksc5601': 'cp949', 22603 22604 22605 // == Big5/Taiwan/Hong Kong ================================================ 22606 // There are lots of tables for Big5 and cp950. Please see the following links for history: 22607 // http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html 22608 // Variations, in roughly number of defined chars: 22609 // * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT 22610 // * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/ 22611 // * Big5-2003 (Taiwan standard) almost superset of cp950. 22612 // * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers. 22613 // * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. 22614 // many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years. 22615 // Plus, it has 4 combining sequences. 22616 // Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299 22617 // because big5-hkscs is the only encoding to include astral characters in non-algorithmic way. 22618 // Implementations are not consistent within browsers; sometimes labeled as just big5. 22619 // MS Internet Explorer switches from big5 to big5-hkscs when a patch applied. 22620 // Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31 22621 // In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s. 22622 // Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt 22623 // http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt 22624 // 22625 // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder 22626 // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong. 22627 22628 'windows950': 'cp950', 22629 'ms950': 'cp950', 22630 '950': 'cp950', 22631 'cp950': { 22632 type: '_dbcs', 22633 table: function() { return __nccwpck_require__(74284) }, 22634 }, 22635 22636 // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus. 22637 'big5': 'big5hkscs', 22638 'big5hkscs': { 22639 type: '_dbcs', 22640 table: function() { return (__nccwpck_require__(74284).concat)(__nccwpck_require__(63480)) }, 22641 encodeSkipVals: [ 22642 // Although Encoding Standard says we should avoid encoding to HKSCS area (See Step 1 of 22643 // https://encoding.spec.whatwg.org/#index-big5-pointer), we still do it to increase compatibility with ICU. 22644 // But if a single unicode point can be encoded both as HKSCS and regular Big5, we prefer the latter. 22645 0x8e69, 0x8e6f, 0x8e7e, 0x8eab, 0x8eb4, 0x8ecd, 0x8ed0, 0x8f57, 0x8f69, 0x8f6e, 0x8fcb, 0x8ffe, 22646 0x906d, 0x907a, 0x90c4, 0x90dc, 0x90f1, 0x91bf, 0x92af, 0x92b0, 0x92b1, 0x92b2, 0x92d1, 0x9447, 0x94ca, 22647 0x95d9, 0x96fc, 0x9975, 0x9b76, 0x9b78, 0x9b7b, 0x9bc6, 0x9bde, 0x9bec, 0x9bf6, 0x9c42, 0x9c53, 0x9c62, 22648 0x9c68, 0x9c6b, 0x9c77, 0x9cbc, 0x9cbd, 0x9cd0, 0x9d57, 0x9d5a, 0x9dc4, 0x9def, 0x9dfb, 0x9ea9, 0x9eef, 22649 0x9efd, 0x9f60, 0x9fcb, 0xa077, 0xa0dc, 0xa0df, 0x8fcc, 0x92c8, 0x9644, 0x96ed, 22650 22651 // Step 2 of https://encoding.spec.whatwg.org/#index-big5-pointer: Use last pointer for U+2550, U+255E, U+2561, U+256A, U+5341, or U+5345 22652 0xa2a4, 0xa2a5, 0xa2a7, 0xa2a6, 0xa2cc, 0xa2ce, 22653 ], 22654 }, 22655 22656 'cnbig5': 'big5hkscs', 22657 'csbig5': 'big5hkscs', 22658 'xxbig5': 'big5hkscs', 22659 }; 22660 22661 22662 /***/ }), 22663 22664 /***/ 82733: 22665 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 22666 22667 "use strict"; 22668 22669 22670 // Update this array if you add/rename/remove files in this directory. 22671 // We support Browserify by skipping automatic module discovery and requiring modules directly. 22672 var modules = [ 22673 __nccwpck_require__(12376), 22674 __nccwpck_require__(59557), 22675 __nccwpck_require__(11155), 22676 __nccwpck_require__(51644), 22677 __nccwpck_require__(26657), 22678 __nccwpck_require__(41080), 22679 __nccwpck_require__(21012), 22680 __nccwpck_require__(39695), 22681 __nccwpck_require__(91386), 22682 ]; 22683 22684 // Put all encoding/alias/codec definitions to single object and export it. 22685 for (var i = 0; i < modules.length; i++) { 22686 var module = modules[i]; 22687 for (var enc in module) 22688 if (Object.prototype.hasOwnProperty.call(module, enc)) 22689 exports[enc] = module[enc]; 22690 } 22691 22692 22693 /***/ }), 22694 22695 /***/ 12376: 22696 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 22697 22698 "use strict"; 22699 22700 var Buffer = (__nccwpck_require__(15118).Buffer); 22701 22702 // Export Node.js internal encodings. 22703 22704 module.exports = { 22705 // Encodings 22706 utf8: { type: "_internal", bomAware: true}, 22707 cesu8: { type: "_internal", bomAware: true}, 22708 unicode11utf8: "utf8", 22709 22710 ucs2: { type: "_internal", bomAware: true}, 22711 utf16le: "ucs2", 22712 22713 binary: { type: "_internal" }, 22714 base64: { type: "_internal" }, 22715 hex: { type: "_internal" }, 22716 22717 // Codec. 22718 _internal: InternalCodec, 22719 }; 22720 22721 //------------------------------------------------------------------------------ 22722 22723 function InternalCodec(codecOptions, iconv) { 22724 this.enc = codecOptions.encodingName; 22725 this.bomAware = codecOptions.bomAware; 22726 22727 if (this.enc === "base64") 22728 this.encoder = InternalEncoderBase64; 22729 else if (this.enc === "cesu8") { 22730 this.enc = "utf8"; // Use utf8 for decoding. 22731 this.encoder = InternalEncoderCesu8; 22732 22733 // Add decoder for versions of Node not supporting CESU-8 22734 if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '💩') { 22735 this.decoder = InternalDecoderCesu8; 22736 this.defaultCharUnicode = iconv.defaultCharUnicode; 22737 } 22738 } 22739 } 22740 22741 InternalCodec.prototype.encoder = InternalEncoder; 22742 InternalCodec.prototype.decoder = InternalDecoder; 22743 22744 //------------------------------------------------------------------------------ 22745 22746 // We use node.js internal decoder. Its signature is the same as ours. 22747 var StringDecoder = (__nccwpck_require__(71576).StringDecoder); 22748 22749 if (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method. 22750 StringDecoder.prototype.end = function() {}; 22751 22752 22753 function InternalDecoder(options, codec) { 22754 this.decoder = new StringDecoder(codec.enc); 22755 } 22756 22757 InternalDecoder.prototype.write = function(buf) { 22758 if (!Buffer.isBuffer(buf)) { 22759 buf = Buffer.from(buf); 22760 } 22761 22762 return this.decoder.write(buf); 22763 } 22764 22765 InternalDecoder.prototype.end = function() { 22766 return this.decoder.end(); 22767 } 22768 22769 22770 //------------------------------------------------------------------------------ 22771 // Encoder is mostly trivial 22772 22773 function InternalEncoder(options, codec) { 22774 this.enc = codec.enc; 22775 } 22776 22777 InternalEncoder.prototype.write = function(str) { 22778 return Buffer.from(str, this.enc); 22779 } 22780 22781 InternalEncoder.prototype.end = function() { 22782 } 22783 22784 22785 //------------------------------------------------------------------------------ 22786 // Except base64 encoder, which must keep its state. 22787 22788 function InternalEncoderBase64(options, codec) { 22789 this.prevStr = ''; 22790 } 22791 22792 InternalEncoderBase64.prototype.write = function(str) { 22793 str = this.prevStr + str; 22794 var completeQuads = str.length - (str.length % 4); 22795 this.prevStr = str.slice(completeQuads); 22796 str = str.slice(0, completeQuads); 22797 22798 return Buffer.from(str, "base64"); 22799 } 22800 22801 InternalEncoderBase64.prototype.end = function() { 22802 return Buffer.from(this.prevStr, "base64"); 22803 } 22804 22805 22806 //------------------------------------------------------------------------------ 22807 // CESU-8 encoder is also special. 22808 22809 function InternalEncoderCesu8(options, codec) { 22810 } 22811 22812 InternalEncoderCesu8.prototype.write = function(str) { 22813 var buf = Buffer.alloc(str.length * 3), bufIdx = 0; 22814 for (var i = 0; i < str.length; i++) { 22815 var charCode = str.charCodeAt(i); 22816 // Naive implementation, but it works because CESU-8 is especially easy 22817 // to convert from UTF-16 (which all JS strings are encoded in). 22818 if (charCode < 0x80) 22819 buf[bufIdx++] = charCode; 22820 else if (charCode < 0x800) { 22821 buf[bufIdx++] = 0xC0 + (charCode >>> 6); 22822 buf[bufIdx++] = 0x80 + (charCode & 0x3f); 22823 } 22824 else { // charCode will always be < 0x10000 in javascript. 22825 buf[bufIdx++] = 0xE0 + (charCode >>> 12); 22826 buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f); 22827 buf[bufIdx++] = 0x80 + (charCode & 0x3f); 22828 } 22829 } 22830 return buf.slice(0, bufIdx); 22831 } 22832 22833 InternalEncoderCesu8.prototype.end = function() { 22834 } 22835 22836 //------------------------------------------------------------------------------ 22837 // CESU-8 decoder is not implemented in Node v4.0+ 22838 22839 function InternalDecoderCesu8(options, codec) { 22840 this.acc = 0; 22841 this.contBytes = 0; 22842 this.accBytes = 0; 22843 this.defaultCharUnicode = codec.defaultCharUnicode; 22844 } 22845 22846 InternalDecoderCesu8.prototype.write = function(buf) { 22847 var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, 22848 res = ''; 22849 for (var i = 0; i < buf.length; i++) { 22850 var curByte = buf[i]; 22851 if ((curByte & 0xC0) !== 0x80) { // Leading byte 22852 if (contBytes > 0) { // Previous code is invalid 22853 res += this.defaultCharUnicode; 22854 contBytes = 0; 22855 } 22856 22857 if (curByte < 0x80) { // Single-byte code 22858 res += String.fromCharCode(curByte); 22859 } else if (curByte < 0xE0) { // Two-byte code 22860 acc = curByte & 0x1F; 22861 contBytes = 1; accBytes = 1; 22862 } else if (curByte < 0xF0) { // Three-byte code 22863 acc = curByte & 0x0F; 22864 contBytes = 2; accBytes = 1; 22865 } else { // Four or more are not supported for CESU-8. 22866 res += this.defaultCharUnicode; 22867 } 22868 } else { // Continuation byte 22869 if (contBytes > 0) { // We're waiting for it. 22870 acc = (acc << 6) | (curByte & 0x3f); 22871 contBytes--; accBytes++; 22872 if (contBytes === 0) { 22873 // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80) 22874 if (accBytes === 2 && acc < 0x80 && acc > 0) 22875 res += this.defaultCharUnicode; 22876 else if (accBytes === 3 && acc < 0x800) 22877 res += this.defaultCharUnicode; 22878 else 22879 // Actually add character. 22880 res += String.fromCharCode(acc); 22881 } 22882 } else { // Unexpected continuation byte 22883 res += this.defaultCharUnicode; 22884 } 22885 } 22886 } 22887 this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes; 22888 return res; 22889 } 22890 22891 InternalDecoderCesu8.prototype.end = function() { 22892 var res = 0; 22893 if (this.contBytes > 0) 22894 res += this.defaultCharUnicode; 22895 return res; 22896 } 22897 22898 22899 /***/ }), 22900 22901 /***/ 26657: 22902 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 22903 22904 "use strict"; 22905 22906 var Buffer = (__nccwpck_require__(15118).Buffer); 22907 22908 // Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that 22909 // correspond to encoded bytes (if 128 - then lower half is ASCII). 22910 22911 exports._sbcs = SBCSCodec; 22912 function SBCSCodec(codecOptions, iconv) { 22913 if (!codecOptions) 22914 throw new Error("SBCS codec is called without the data.") 22915 22916 // Prepare char buffer for decoding. 22917 if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256)) 22918 throw new Error("Encoding '"+codecOptions.type+"' has incorrect 'chars' (must be of len 128 or 256)"); 22919 22920 if (codecOptions.chars.length === 128) { 22921 var asciiString = ""; 22922 for (var i = 0; i < 128; i++) 22923 asciiString += String.fromCharCode(i); 22924 codecOptions.chars = asciiString + codecOptions.chars; 22925 } 22926 22927 this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2'); 22928 22929 // Encoding buffer. 22930 var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0)); 22931 22932 for (var i = 0; i < codecOptions.chars.length; i++) 22933 encodeBuf[codecOptions.chars.charCodeAt(i)] = i; 22934 22935 this.encodeBuf = encodeBuf; 22936 } 22937 22938 SBCSCodec.prototype.encoder = SBCSEncoder; 22939 SBCSCodec.prototype.decoder = SBCSDecoder; 22940 22941 22942 function SBCSEncoder(options, codec) { 22943 this.encodeBuf = codec.encodeBuf; 22944 } 22945 22946 SBCSEncoder.prototype.write = function(str) { 22947 var buf = Buffer.alloc(str.length); 22948 for (var i = 0; i < str.length; i++) 22949 buf[i] = this.encodeBuf[str.charCodeAt(i)]; 22950 22951 return buf; 22952 } 22953 22954 SBCSEncoder.prototype.end = function() { 22955 } 22956 22957 22958 function SBCSDecoder(options, codec) { 22959 this.decodeBuf = codec.decodeBuf; 22960 } 22961 22962 SBCSDecoder.prototype.write = function(buf) { 22963 // Strings are immutable in JS -> we use ucs2 buffer to speed up computations. 22964 var decodeBuf = this.decodeBuf; 22965 var newBuf = Buffer.alloc(buf.length*2); 22966 var idx1 = 0, idx2 = 0; 22967 for (var i = 0; i < buf.length; i++) { 22968 idx1 = buf[i]*2; idx2 = i*2; 22969 newBuf[idx2] = decodeBuf[idx1]; 22970 newBuf[idx2+1] = decodeBuf[idx1+1]; 22971 } 22972 return newBuf.toString('ucs2'); 22973 } 22974 22975 SBCSDecoder.prototype.end = function() { 22976 } 22977 22978 22979 /***/ }), 22980 22981 /***/ 21012: 22982 /***/ ((module) => { 22983 22984 "use strict"; 22985 22986 22987 // Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script. 22988 module.exports = { 22989 "437": "cp437", 22990 "737": "cp737", 22991 "775": "cp775", 22992 "850": "cp850", 22993 "852": "cp852", 22994 "855": "cp855", 22995 "856": "cp856", 22996 "857": "cp857", 22997 "858": "cp858", 22998 "860": "cp860", 22999 "861": "cp861", 23000 "862": "cp862", 23001 "863": "cp863", 23002 "864": "cp864", 23003 "865": "cp865", 23004 "866": "cp866", 23005 "869": "cp869", 23006 "874": "windows874", 23007 "922": "cp922", 23008 "1046": "cp1046", 23009 "1124": "cp1124", 23010 "1125": "cp1125", 23011 "1129": "cp1129", 23012 "1133": "cp1133", 23013 "1161": "cp1161", 23014 "1162": "cp1162", 23015 "1163": "cp1163", 23016 "1250": "windows1250", 23017 "1251": "windows1251", 23018 "1252": "windows1252", 23019 "1253": "windows1253", 23020 "1254": "windows1254", 23021 "1255": "windows1255", 23022 "1256": "windows1256", 23023 "1257": "windows1257", 23024 "1258": "windows1258", 23025 "28591": "iso88591", 23026 "28592": "iso88592", 23027 "28593": "iso88593", 23028 "28594": "iso88594", 23029 "28595": "iso88595", 23030 "28596": "iso88596", 23031 "28597": "iso88597", 23032 "28598": "iso88598", 23033 "28599": "iso88599", 23034 "28600": "iso885910", 23035 "28601": "iso885911", 23036 "28603": "iso885913", 23037 "28604": "iso885914", 23038 "28605": "iso885915", 23039 "28606": "iso885916", 23040 "windows874": { 23041 "type": "_sbcs", 23042 "chars": "€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" 23043 }, 23044 "win874": "windows874", 23045 "cp874": "windows874", 23046 "windows1250": { 23047 "type": "_sbcs", 23048 "chars": "€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙" 23049 }, 23050 "win1250": "windows1250", 23051 "cp1250": "windows1250", 23052 "windows1251": { 23053 "type": "_sbcs", 23054 "chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя" 23055 }, 23056 "win1251": "windows1251", 23057 "cp1251": "windows1251", 23058 "windows1252": { 23059 "type": "_sbcs", 23060 "chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" 23061 }, 23062 "win1252": "windows1252", 23063 "cp1252": "windows1252", 23064 "windows1253": { 23065 "type": "_sbcs", 23066 "chars": "€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�" 23067 }, 23068 "win1253": "windows1253", 23069 "cp1253": "windows1253", 23070 "windows1254": { 23071 "type": "_sbcs", 23072 "chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ" 23073 }, 23074 "win1254": "windows1254", 23075 "cp1254": "windows1254", 23076 "windows1255": { 23077 "type": "_sbcs", 23078 "chars": "€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת���" 23079 }, 23080 "win1255": "windows1255", 23081 "cp1255": "windows1255", 23082 "windows1256": { 23083 "type": "_sbcs", 23084 "chars": "€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œں ،¢£¤¥¦§¨©ھ«¬®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûüے" 23085 }, 23086 "win1256": "windows1256", 23087 "cp1256": "windows1256", 23088 "windows1257": { 23089 "type": "_sbcs", 23090 "chars": "€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙" 23091 }, 23092 "win1257": "windows1257", 23093 "cp1257": "windows1257", 23094 "windows1258": { 23095 "type": "_sbcs", 23096 "chars": "€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ" 23097 }, 23098 "win1258": "windows1258", 23099 "cp1258": "windows1258", 23100 "iso88591": { 23101 "type": "_sbcs", 23102 "chars": " ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" 23103 }, 23104 "cp28591": "iso88591", 23105 "iso88592": { 23106 "type": "_sbcs", 23107 "chars": " Ą˘Ł¤ĽŚ§¨ŠŞŤŹŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙" 23108 }, 23109 "cp28592": "iso88592", 23110 "iso88593": { 23111 "type": "_sbcs", 23112 "chars": " Ħ˘£¤�Ĥ§¨İŞĞĴ�ݰħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙" 23113 }, 23114 "cp28593": "iso88593", 23115 "iso88594": { 23116 "type": "_sbcs", 23117 "chars": " ĄĸŖ¤Ĩϧ¨ŠĒĢŦޝ°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙" 23118 }, 23119 "cp28594": "iso88594", 23120 "iso88595": { 23121 "type": "_sbcs", 23122 "chars": " ЁЂЃЄЅІЇЈЉЊЋЌЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ" 23123 }, 23124 "cp28595": "iso88595", 23125 "iso88596": { 23126 "type": "_sbcs", 23127 "chars": " ���¤�������،�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������" 23128 }, 23129 "cp28596": "iso88596", 23130 "iso88597": { 23131 "type": "_sbcs", 23132 "chars": " ‘’£€₯¦§¨©ͺ«¬�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�" 23133 }, 23134 "cp28597": "iso88597", 23135 "iso88598": { 23136 "type": "_sbcs", 23137 "chars": " �¢£¤¥¦§¨©×«¬®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת���" 23138 }, 23139 "cp28598": "iso88598", 23140 "iso88599": { 23141 "type": "_sbcs", 23142 "chars": " ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ" 23143 }, 23144 "cp28599": "iso88599", 23145 "iso885910": { 23146 "type": "_sbcs", 23147 "chars": " ĄĒĢĪĨͧĻĐŠŦŽŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ" 23148 }, 23149 "cp28600": "iso885910", 23150 "iso885911": { 23151 "type": "_sbcs", 23152 "chars": " กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" 23153 }, 23154 "cp28601": "iso885911", 23155 "iso885913": { 23156 "type": "_sbcs", 23157 "chars": " ”¢£¤„¦§Ø©Ŗ«¬®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’" 23158 }, 23159 "cp28603": "iso885913", 23160 "iso885914": { 23161 "type": "_sbcs", 23162 "chars": " Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ" 23163 }, 23164 "cp28604": "iso885914", 23165 "iso885915": { 23166 "type": "_sbcs", 23167 "chars": " ¡¢£€¥Š§š©ª«¬®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" 23168 }, 23169 "cp28605": "iso885915", 23170 "iso885916": { 23171 "type": "_sbcs", 23172 "chars": " ĄąŁ€„Чš©Ș«ŹźŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ" 23173 }, 23174 "cp28606": "iso885916", 23175 "cp437": { 23176 "type": "_sbcs", 23177 "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " 23178 }, 23179 "ibm437": "cp437", 23180 "csibm437": "cp437", 23181 "cp737": { 23182 "type": "_sbcs", 23183 "chars": "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ " 23184 }, 23185 "ibm737": "cp737", 23186 "csibm737": "cp737", 23187 "cp775": { 23188 "type": "_sbcs", 23189 "chars": "ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’±“¾¶§÷„°∙·¹³²■ " 23190 }, 23191 "ibm775": "cp775", 23192 "csibm775": "cp775", 23193 "cp850": { 23194 "type": "_sbcs", 23195 "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´±‗¾¶§÷¸°¨·¹³²■ " 23196 }, 23197 "ibm850": "cp850", 23198 "csibm850": "cp850", 23199 "cp852": { 23200 "type": "_sbcs", 23201 "chars": "ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´˝˛ˇ˘§÷¸°¨˙űŘř■ " 23202 }, 23203 "ibm852": "cp852", 23204 "csibm852": "cp852", 23205 "cp855": { 23206 "type": "_sbcs", 23207 "chars": "ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№ыЫзЗшШэЭщЩчЧ§■ " 23208 }, 23209 "ibm855": "cp855", 23210 "csibm855": "cp855", 23211 "cp856": { 23212 "type": "_sbcs", 23213 "chars": "אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´±‗¾¶§÷¸°¨·¹³²■ " 23214 }, 23215 "ibm856": "cp856", 23216 "csibm856": "cp856", 23217 "cp857": { 23218 "type": "_sbcs", 23219 "chars": "ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´±�¾¶§÷¸°¨·¹³²■ " 23220 }, 23221 "ibm857": "cp857", 23222 "csibm857": "cp857", 23223 "cp858": { 23224 "type": "_sbcs", 23225 "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´±‗¾¶§÷¸°¨·¹³²■ " 23226 }, 23227 "ibm858": "cp858", 23228 "csibm858": "cp858", 23229 "cp860": { 23230 "type": "_sbcs", 23231 "chars": "ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " 23232 }, 23233 "ibm860": "cp860", 23234 "csibm860": "cp860", 23235 "cp861": { 23236 "type": "_sbcs", 23237 "chars": "ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " 23238 }, 23239 "ibm861": "cp861", 23240 "csibm861": "cp861", 23241 "cp862": { 23242 "type": "_sbcs", 23243 "chars": "אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " 23244 }, 23245 "ibm862": "cp862", 23246 "csibm862": "cp862", 23247 "cp863": { 23248 "type": "_sbcs", 23249 "chars": "ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " 23250 }, 23251 "ibm863": "cp863", 23252 "csibm863": "cp863", 23253 "cp864": { 23254 "type": "_sbcs", 23255 "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�" 23256 }, 23257 "ibm864": "cp864", 23258 "csibm864": "cp864", 23259 "cp865": { 23260 "type": "_sbcs", 23261 "chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " 23262 }, 23263 "ibm865": "cp865", 23264 "csibm865": "cp865", 23265 "cp866": { 23266 "type": "_sbcs", 23267 "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ " 23268 }, 23269 "ibm866": "cp866", 23270 "csibm866": "cp866", 23271 "cp869": { 23272 "type": "_sbcs", 23273 "chars": "������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄±υφχ§ψ΅°¨ωϋΰώ■ " 23274 }, 23275 "ibm869": "cp869", 23276 "csibm869": "cp869", 23277 "cp922": { 23278 "type": "_sbcs", 23279 "chars": " ¡¢£¤¥¦§¨©ª«¬®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖרÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ" 23280 }, 23281 "ibm922": "cp922", 23282 "csibm922": "cp922", 23283 "cp1046": { 23284 "type": "_sbcs", 23285 "chars": "ﺈ×÷ﹱ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�" 23286 }, 23287 "ibm1046": "cp1046", 23288 "csibm1046": "cp1046", 23289 "cp1124": { 23290 "type": "_sbcs", 23291 "chars": " ЁЂҐЄЅІЇЈЉЊЋЌЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ" 23292 }, 23293 "ibm1124": "cp1124", 23294 "csibm1124": "cp1124", 23295 "cp1125": { 23296 "type": "_sbcs", 23297 "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ " 23298 }, 23299 "ibm1125": "cp1125", 23300 "csibm1125": "cp1125", 23301 "cp1129": { 23302 "type": "_sbcs", 23303 "chars": " ¡¢£¤¥¦§œ©ª«¬®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ" 23304 }, 23305 "ibm1129": "cp1129", 23306 "csibm1129": "cp1129", 23307 "cp1133": { 23308 "type": "_sbcs", 23309 "chars": " ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�" 23310 }, 23311 "ibm1133": "cp1133", 23312 "csibm1133": "cp1133", 23313 "cp1161": { 23314 "type": "_sbcs", 23315 "chars": "��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ " 23316 }, 23317 "ibm1161": "cp1161", 23318 "csibm1161": "cp1161", 23319 "cp1162": { 23320 "type": "_sbcs", 23321 "chars": "€…‘’“”•–— กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" 23322 }, 23323 "ibm1162": "cp1162", 23324 "csibm1162": "cp1162", 23325 "cp1163": { 23326 "type": "_sbcs", 23327 "chars": " ¡¢£€¥¦§œ©ª«¬®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ" 23328 }, 23329 "ibm1163": "cp1163", 23330 "csibm1163": "cp1163", 23331 "maccroatian": { 23332 "type": "_sbcs", 23333 "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ" 23334 }, 23335 "maccyrillic": { 23336 "type": "_sbcs", 23337 "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤" 23338 }, 23339 "macgreek": { 23340 "type": "_sbcs", 23341 "chars": "Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�" 23342 }, 23343 "maciceland": { 23344 "type": "_sbcs", 23345 "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" 23346 }, 23347 "macroman": { 23348 "type": "_sbcs", 23349 "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" 23350 }, 23351 "macromania": { 23352 "type": "_sbcs", 23353 "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" 23354 }, 23355 "macthai": { 23356 "type": "_sbcs", 23357 "chars": "«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����" 23358 }, 23359 "macturkish": { 23360 "type": "_sbcs", 23361 "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ" 23362 }, 23363 "macukraine": { 23364 "type": "_sbcs", 23365 "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤" 23366 }, 23367 "koi8r": { 23368 "type": "_sbcs", 23369 "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" 23370 }, 23371 "koi8u": { 23372 "type": "_sbcs", 23373 "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" 23374 }, 23375 "koi8ru": { 23376 "type": "_sbcs", 23377 "chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" 23378 }, 23379 "koi8t": { 23380 "type": "_sbcs", 23381 "chars": "қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" 23382 }, 23383 "armscii8": { 23384 "type": "_sbcs", 23385 "chars": " �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�" 23386 }, 23387 "rk1048": { 23388 "type": "_sbcs", 23389 "chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя" 23390 }, 23391 "tcvn": { 23392 "type": "_sbcs", 23393 "chars": "\u0000ÚỤ\u0003ỪỬỮ\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010ỨỰỲỶỸÝỴ\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ" 23394 }, 23395 "georgianacademy": { 23396 "type": "_sbcs", 23397 "chars": "‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ" 23398 }, 23399 "georgianps": { 23400 "type": "_sbcs", 23401 "chars": "‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" 23402 }, 23403 "pt154": { 23404 "type": "_sbcs", 23405 "chars": "ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя" 23406 }, 23407 "viscii": { 23408 "type": "_sbcs", 23409 "chars": "\u0000\u0001Ẳ\u0003\u0004ẴẪ\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013Ỷ\u0015\u0016\u0017\u0018Ỹ\u001a\u001b\u001c\u001dỴ\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ" 23410 }, 23411 "iso646cn": { 23412 "type": "_sbcs", 23413 "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������" 23414 }, 23415 "iso646jp": { 23416 "type": "_sbcs", 23417 "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������" 23418 }, 23419 "hproman8": { 23420 "type": "_sbcs", 23421 "chars": " ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�" 23422 }, 23423 "macintosh": { 23424 "type": "_sbcs", 23425 "chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" 23426 }, 23427 "ascii": { 23428 "type": "_sbcs", 23429 "chars": "��������������������������������������������������������������������������������������������������������������������������������" 23430 }, 23431 "tis620": { 23432 "type": "_sbcs", 23433 "chars": "���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" 23434 } 23435 } 23436 23437 /***/ }), 23438 23439 /***/ 41080: 23440 /***/ ((module) => { 23441 23442 "use strict"; 23443 23444 23445 // Manually added data to be used by sbcs codec in addition to generated one. 23446 23447 module.exports = { 23448 // Not supported by iconv, not sure why. 23449 "10029": "maccenteuro", 23450 "maccenteuro": { 23451 "type": "_sbcs", 23452 "chars": "ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ" 23453 }, 23454 23455 "808": "cp808", 23456 "ibm808": "cp808", 23457 "cp808": { 23458 "type": "_sbcs", 23459 "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ " 23460 }, 23461 23462 "mik": { 23463 "type": "_sbcs", 23464 "chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " 23465 }, 23466 23467 "cp720": { 23468 "type": "_sbcs", 23469 "chars": "\x80\x81éâ\x84à\x86çêëèïî\x8d\x8e\x8f\x90\u0651\u0652ô¤ـûùءآأؤ£إئابةتثجحخدذرزسشص«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ضطظعغفµقكلمنهوىي≡\u064b\u064c\u064d\u064e\u064f\u0650≈°∙·√ⁿ²■\u00a0" 23470 }, 23471 23472 // Aliases of generated encodings. 23473 "ascii8bit": "ascii", 23474 "usascii": "ascii", 23475 "ansix34": "ascii", 23476 "ansix341968": "ascii", 23477 "ansix341986": "ascii", 23478 "csascii": "ascii", 23479 "cp367": "ascii", 23480 "ibm367": "ascii", 23481 "isoir6": "ascii", 23482 "iso646us": "ascii", 23483 "iso646irv": "ascii", 23484 "us": "ascii", 23485 23486 "latin1": "iso88591", 23487 "latin2": "iso88592", 23488 "latin3": "iso88593", 23489 "latin4": "iso88594", 23490 "latin5": "iso88599", 23491 "latin6": "iso885910", 23492 "latin7": "iso885913", 23493 "latin8": "iso885914", 23494 "latin9": "iso885915", 23495 "latin10": "iso885916", 23496 23497 "csisolatin1": "iso88591", 23498 "csisolatin2": "iso88592", 23499 "csisolatin3": "iso88593", 23500 "csisolatin4": "iso88594", 23501 "csisolatincyrillic": "iso88595", 23502 "csisolatinarabic": "iso88596", 23503 "csisolatingreek" : "iso88597", 23504 "csisolatinhebrew": "iso88598", 23505 "csisolatin5": "iso88599", 23506 "csisolatin6": "iso885910", 23507 23508 "l1": "iso88591", 23509 "l2": "iso88592", 23510 "l3": "iso88593", 23511 "l4": "iso88594", 23512 "l5": "iso88599", 23513 "l6": "iso885910", 23514 "l7": "iso885913", 23515 "l8": "iso885914", 23516 "l9": "iso885915", 23517 "l10": "iso885916", 23518 23519 "isoir14": "iso646jp", 23520 "isoir57": "iso646cn", 23521 "isoir100": "iso88591", 23522 "isoir101": "iso88592", 23523 "isoir109": "iso88593", 23524 "isoir110": "iso88594", 23525 "isoir144": "iso88595", 23526 "isoir127": "iso88596", 23527 "isoir126": "iso88597", 23528 "isoir138": "iso88598", 23529 "isoir148": "iso88599", 23530 "isoir157": "iso885910", 23531 "isoir166": "tis620", 23532 "isoir179": "iso885913", 23533 "isoir199": "iso885914", 23534 "isoir203": "iso885915", 23535 "isoir226": "iso885916", 23536 23537 "cp819": "iso88591", 23538 "ibm819": "iso88591", 23539 23540 "cyrillic": "iso88595", 23541 23542 "arabic": "iso88596", 23543 "arabic8": "iso88596", 23544 "ecma114": "iso88596", 23545 "asmo708": "iso88596", 23546 23547 "greek" : "iso88597", 23548 "greek8" : "iso88597", 23549 "ecma118" : "iso88597", 23550 "elot928" : "iso88597", 23551 23552 "hebrew": "iso88598", 23553 "hebrew8": "iso88598", 23554 23555 "turkish": "iso88599", 23556 "turkish8": "iso88599", 23557 23558 "thai": "iso885911", 23559 "thai8": "iso885911", 23560 23561 "celtic": "iso885914", 23562 "celtic8": "iso885914", 23563 "isoceltic": "iso885914", 23564 23565 "tis6200": "tis620", 23566 "tis62025291": "tis620", 23567 "tis62025330": "tis620", 23568 23569 "10000": "macroman", 23570 "10006": "macgreek", 23571 "10007": "maccyrillic", 23572 "10079": "maciceland", 23573 "10081": "macturkish", 23574 23575 "cspc8codepage437": "cp437", 23576 "cspc775baltic": "cp775", 23577 "cspc850multilingual": "cp850", 23578 "cspcp852": "cp852", 23579 "cspc862latinhebrew": "cp862", 23580 "cpgr": "cp869", 23581 23582 "msee": "cp1250", 23583 "mscyrl": "cp1251", 23584 "msansi": "cp1252", 23585 "msgreek": "cp1253", 23586 "msturk": "cp1254", 23587 "mshebr": "cp1255", 23588 "msarab": "cp1256", 23589 "winbaltrim": "cp1257", 23590 23591 "cp20866": "koi8r", 23592 "20866": "koi8r", 23593 "ibm878": "koi8r", 23594 "cskoi8r": "koi8r", 23595 23596 "cp21866": "koi8u", 23597 "21866": "koi8u", 23598 "ibm1168": "koi8u", 23599 23600 "strk10482002": "rk1048", 23601 23602 "tcvn5712": "tcvn", 23603 "tcvn57121": "tcvn", 23604 23605 "gb198880": "iso646cn", 23606 "cn": "iso646cn", 23607 23608 "csiso14jisc6220ro": "iso646jp", 23609 "jisc62201969ro": "iso646jp", 23610 "jp": "iso646jp", 23611 23612 "cshproman8": "hproman8", 23613 "r8": "hproman8", 23614 "roman8": "hproman8", 23615 "xroman8": "hproman8", 23616 "ibm1051": "hproman8", 23617 23618 "mac": "macintosh", 23619 "csmacintosh": "macintosh", 23620 }; 23621 23622 23623 23624 /***/ }), 23625 23626 /***/ 11155: 23627 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 23628 23629 "use strict"; 23630 23631 var Buffer = (__nccwpck_require__(15118).Buffer); 23632 23633 // Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js 23634 23635 // == UTF16-BE codec. ========================================================== 23636 23637 exports.utf16be = Utf16BECodec; 23638 function Utf16BECodec() { 23639 } 23640 23641 Utf16BECodec.prototype.encoder = Utf16BEEncoder; 23642 Utf16BECodec.prototype.decoder = Utf16BEDecoder; 23643 Utf16BECodec.prototype.bomAware = true; 23644 23645 23646 // -- Encoding 23647 23648 function Utf16BEEncoder() { 23649 } 23650 23651 Utf16BEEncoder.prototype.write = function(str) { 23652 var buf = Buffer.from(str, 'ucs2'); 23653 for (var i = 0; i < buf.length; i += 2) { 23654 var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp; 23655 } 23656 return buf; 23657 } 23658 23659 Utf16BEEncoder.prototype.end = function() { 23660 } 23661 23662 23663 // -- Decoding 23664 23665 function Utf16BEDecoder() { 23666 this.overflowByte = -1; 23667 } 23668 23669 Utf16BEDecoder.prototype.write = function(buf) { 23670 if (buf.length == 0) 23671 return ''; 23672 23673 var buf2 = Buffer.alloc(buf.length + 1), 23674 i = 0, j = 0; 23675 23676 if (this.overflowByte !== -1) { 23677 buf2[0] = buf[0]; 23678 buf2[1] = this.overflowByte; 23679 i = 1; j = 2; 23680 } 23681 23682 for (; i < buf.length-1; i += 2, j+= 2) { 23683 buf2[j] = buf[i+1]; 23684 buf2[j+1] = buf[i]; 23685 } 23686 23687 this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1; 23688 23689 return buf2.slice(0, j).toString('ucs2'); 23690 } 23691 23692 Utf16BEDecoder.prototype.end = function() { 23693 this.overflowByte = -1; 23694 } 23695 23696 23697 // == UTF-16 codec ============================================================= 23698 // Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic. 23699 // Defaults to UTF-16LE, as it's prevalent and default in Node. 23700 // http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le 23701 // Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'}); 23702 23703 // Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false). 23704 23705 exports.utf16 = Utf16Codec; 23706 function Utf16Codec(codecOptions, iconv) { 23707 this.iconv = iconv; 23708 } 23709 23710 Utf16Codec.prototype.encoder = Utf16Encoder; 23711 Utf16Codec.prototype.decoder = Utf16Decoder; 23712 23713 23714 // -- Encoding (pass-through) 23715 23716 function Utf16Encoder(options, codec) { 23717 options = options || {}; 23718 if (options.addBOM === undefined) 23719 options.addBOM = true; 23720 this.encoder = codec.iconv.getEncoder('utf-16le', options); 23721 } 23722 23723 Utf16Encoder.prototype.write = function(str) { 23724 return this.encoder.write(str); 23725 } 23726 23727 Utf16Encoder.prototype.end = function() { 23728 return this.encoder.end(); 23729 } 23730 23731 23732 // -- Decoding 23733 23734 function Utf16Decoder(options, codec) { 23735 this.decoder = null; 23736 this.initialBufs = []; 23737 this.initialBufsLen = 0; 23738 23739 this.options = options || {}; 23740 this.iconv = codec.iconv; 23741 } 23742 23743 Utf16Decoder.prototype.write = function(buf) { 23744 if (!this.decoder) { 23745 // Codec is not chosen yet. Accumulate initial bytes. 23746 this.initialBufs.push(buf); 23747 this.initialBufsLen += buf.length; 23748 23749 if (this.initialBufsLen < 16) // We need more bytes to use space heuristic (see below) 23750 return ''; 23751 23752 // We have enough bytes -> detect endianness. 23753 var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding); 23754 this.decoder = this.iconv.getDecoder(encoding, this.options); 23755 23756 var resStr = ''; 23757 for (var i = 0; i < this.initialBufs.length; i++) 23758 resStr += this.decoder.write(this.initialBufs[i]); 23759 23760 this.initialBufs.length = this.initialBufsLen = 0; 23761 return resStr; 23762 } 23763 23764 return this.decoder.write(buf); 23765 } 23766 23767 Utf16Decoder.prototype.end = function() { 23768 if (!this.decoder) { 23769 var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding); 23770 this.decoder = this.iconv.getDecoder(encoding, this.options); 23771 23772 var resStr = ''; 23773 for (var i = 0; i < this.initialBufs.length; i++) 23774 resStr += this.decoder.write(this.initialBufs[i]); 23775 23776 var trail = this.decoder.end(); 23777 if (trail) 23778 resStr += trail; 23779 23780 this.initialBufs.length = this.initialBufsLen = 0; 23781 return resStr; 23782 } 23783 return this.decoder.end(); 23784 } 23785 23786 function detectEncoding(bufs, defaultEncoding) { 23787 var b = []; 23788 var charsProcessed = 0; 23789 var asciiCharsLE = 0, asciiCharsBE = 0; // Number of ASCII chars when decoded as LE or BE. 23790 23791 outer_loop: 23792 for (var i = 0; i < bufs.length; i++) { 23793 var buf = bufs[i]; 23794 for (var j = 0; j < buf.length; j++) { 23795 b.push(buf[j]); 23796 if (b.length === 2) { 23797 if (charsProcessed === 0) { 23798 // Check BOM first. 23799 if (b[0] === 0xFF && b[1] === 0xFE) return 'utf-16le'; 23800 if (b[0] === 0xFE && b[1] === 0xFF) return 'utf-16be'; 23801 } 23802 23803 if (b[0] === 0 && b[1] !== 0) asciiCharsBE++; 23804 if (b[0] !== 0 && b[1] === 0) asciiCharsLE++; 23805 23806 b.length = 0; 23807 charsProcessed++; 23808 23809 if (charsProcessed >= 100) { 23810 break outer_loop; 23811 } 23812 } 23813 } 23814 } 23815 23816 // Make decisions. 23817 // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon. 23818 // So, we count ASCII as if it was LE or BE, and decide from that. 23819 if (asciiCharsBE > asciiCharsLE) return 'utf-16be'; 23820 if (asciiCharsBE < asciiCharsLE) return 'utf-16le'; 23821 23822 // Couldn't decide (likely all zeros or not enough data). 23823 return defaultEncoding || 'utf-16le'; 23824 } 23825 23826 23827 23828 23829 /***/ }), 23830 23831 /***/ 59557: 23832 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 23833 23834 "use strict"; 23835 23836 23837 var Buffer = (__nccwpck_require__(15118).Buffer); 23838 23839 // == UTF32-LE/BE codec. ========================================================== 23840 23841 exports._utf32 = Utf32Codec; 23842 23843 function Utf32Codec(codecOptions, iconv) { 23844 this.iconv = iconv; 23845 this.bomAware = true; 23846 this.isLE = codecOptions.isLE; 23847 } 23848 23849 exports.utf32le = { type: '_utf32', isLE: true }; 23850 exports.utf32be = { type: '_utf32', isLE: false }; 23851 23852 // Aliases 23853 exports.ucs4le = 'utf32le'; 23854 exports.ucs4be = 'utf32be'; 23855 23856 Utf32Codec.prototype.encoder = Utf32Encoder; 23857 Utf32Codec.prototype.decoder = Utf32Decoder; 23858 23859 // -- Encoding 23860 23861 function Utf32Encoder(options, codec) { 23862 this.isLE = codec.isLE; 23863 this.highSurrogate = 0; 23864 } 23865 23866 Utf32Encoder.prototype.write = function(str) { 23867 var src = Buffer.from(str, 'ucs2'); 23868 var dst = Buffer.alloc(src.length * 2); 23869 var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE; 23870 var offset = 0; 23871 23872 for (var i = 0; i < src.length; i += 2) { 23873 var code = src.readUInt16LE(i); 23874 var isHighSurrogate = (0xD800 <= code && code < 0xDC00); 23875 var isLowSurrogate = (0xDC00 <= code && code < 0xE000); 23876 23877 if (this.highSurrogate) { 23878 if (isHighSurrogate || !isLowSurrogate) { 23879 // There shouldn't be two high surrogates in a row, nor a high surrogate which isn't followed by a low 23880 // surrogate. If this happens, keep the pending high surrogate as a stand-alone semi-invalid character 23881 // (technically wrong, but expected by some applications, like Windows file names). 23882 write32.call(dst, this.highSurrogate, offset); 23883 offset += 4; 23884 } 23885 else { 23886 // Create 32-bit value from high and low surrogates; 23887 var codepoint = (((this.highSurrogate - 0xD800) << 10) | (code - 0xDC00)) + 0x10000; 23888 23889 write32.call(dst, codepoint, offset); 23890 offset += 4; 23891 this.highSurrogate = 0; 23892 23893 continue; 23894 } 23895 } 23896 23897 if (isHighSurrogate) 23898 this.highSurrogate = code; 23899 else { 23900 // Even if the current character is a low surrogate, with no previous high surrogate, we'll 23901 // encode it as a semi-invalid stand-alone character for the same reasons expressed above for 23902 // unpaired high surrogates. 23903 write32.call(dst, code, offset); 23904 offset += 4; 23905 this.highSurrogate = 0; 23906 } 23907 } 23908 23909 if (offset < dst.length) 23910 dst = dst.slice(0, offset); 23911 23912 return dst; 23913 }; 23914 23915 Utf32Encoder.prototype.end = function() { 23916 // Treat any leftover high surrogate as a semi-valid independent character. 23917 if (!this.highSurrogate) 23918 return; 23919 23920 var buf = Buffer.alloc(4); 23921 23922 if (this.isLE) 23923 buf.writeUInt32LE(this.highSurrogate, 0); 23924 else 23925 buf.writeUInt32BE(this.highSurrogate, 0); 23926 23927 this.highSurrogate = 0; 23928 23929 return buf; 23930 }; 23931 23932 // -- Decoding 23933 23934 function Utf32Decoder(options, codec) { 23935 this.isLE = codec.isLE; 23936 this.badChar = codec.iconv.defaultCharUnicode.charCodeAt(0); 23937 this.overflow = []; 23938 } 23939 23940 Utf32Decoder.prototype.write = function(src) { 23941 if (src.length === 0) 23942 return ''; 23943 23944 var i = 0; 23945 var codepoint = 0; 23946 var dst = Buffer.alloc(src.length + 4); 23947 var offset = 0; 23948 var isLE = this.isLE; 23949 var overflow = this.overflow; 23950 var badChar = this.badChar; 23951 23952 if (overflow.length > 0) { 23953 for (; i < src.length && overflow.length < 4; i++) 23954 overflow.push(src[i]); 23955 23956 if (overflow.length === 4) { 23957 // NOTE: codepoint is a signed int32 and can be negative. 23958 // NOTE: We copied this block from below to help V8 optimize it (it works with array, not buffer). 23959 if (isLE) { 23960 codepoint = overflow[i] | (overflow[i+1] << 8) | (overflow[i+2] << 16) | (overflow[i+3] << 24); 23961 } else { 23962 codepoint = overflow[i+3] | (overflow[i+2] << 8) | (overflow[i+1] << 16) | (overflow[i] << 24); 23963 } 23964 overflow.length = 0; 23965 23966 offset = _writeCodepoint(dst, offset, codepoint, badChar); 23967 } 23968 } 23969 23970 // Main loop. Should be as optimized as possible. 23971 for (; i < src.length - 3; i += 4) { 23972 // NOTE: codepoint is a signed int32 and can be negative. 23973 if (isLE) { 23974 codepoint = src[i] | (src[i+1] << 8) | (src[i+2] << 16) | (src[i+3] << 24); 23975 } else { 23976 codepoint = src[i+3] | (src[i+2] << 8) | (src[i+1] << 16) | (src[i] << 24); 23977 } 23978 offset = _writeCodepoint(dst, offset, codepoint, badChar); 23979 } 23980 23981 // Keep overflowing bytes. 23982 for (; i < src.length; i++) { 23983 overflow.push(src[i]); 23984 } 23985 23986 return dst.slice(0, offset).toString('ucs2'); 23987 }; 23988 23989 function _writeCodepoint(dst, offset, codepoint, badChar) { 23990 // NOTE: codepoint is signed int32 and can be negative. We keep it that way to help V8 with optimizations. 23991 if (codepoint < 0 || codepoint > 0x10FFFF) { 23992 // Not a valid Unicode codepoint 23993 codepoint = badChar; 23994 } 23995 23996 // Ephemeral Planes: Write high surrogate. 23997 if (codepoint >= 0x10000) { 23998 codepoint -= 0x10000; 23999 24000 var high = 0xD800 | (codepoint >> 10); 24001 dst[offset++] = high & 0xff; 24002 dst[offset++] = high >> 8; 24003 24004 // Low surrogate is written below. 24005 var codepoint = 0xDC00 | (codepoint & 0x3FF); 24006 } 24007 24008 // Write BMP char or low surrogate. 24009 dst[offset++] = codepoint & 0xff; 24010 dst[offset++] = codepoint >> 8; 24011 24012 return offset; 24013 }; 24014 24015 Utf32Decoder.prototype.end = function() { 24016 this.overflow.length = 0; 24017 }; 24018 24019 // == UTF-32 Auto codec ============================================================= 24020 // Decoder chooses automatically from UTF-32LE and UTF-32BE using BOM and space-based heuristic. 24021 // Defaults to UTF-32LE. http://en.wikipedia.org/wiki/UTF-32 24022 // Encoder/decoder default can be changed: iconv.decode(buf, 'utf32', {defaultEncoding: 'utf-32be'}); 24023 24024 // Encoder prepends BOM (which can be overridden with (addBOM: false}). 24025 24026 exports.utf32 = Utf32AutoCodec; 24027 exports.ucs4 = 'utf32'; 24028 24029 function Utf32AutoCodec(options, iconv) { 24030 this.iconv = iconv; 24031 } 24032 24033 Utf32AutoCodec.prototype.encoder = Utf32AutoEncoder; 24034 Utf32AutoCodec.prototype.decoder = Utf32AutoDecoder; 24035 24036 // -- Encoding 24037 24038 function Utf32AutoEncoder(options, codec) { 24039 options = options || {}; 24040 24041 if (options.addBOM === undefined) 24042 options.addBOM = true; 24043 24044 this.encoder = codec.iconv.getEncoder(options.defaultEncoding || 'utf-32le', options); 24045 } 24046 24047 Utf32AutoEncoder.prototype.write = function(str) { 24048 return this.encoder.write(str); 24049 }; 24050 24051 Utf32AutoEncoder.prototype.end = function() { 24052 return this.encoder.end(); 24053 }; 24054 24055 // -- Decoding 24056 24057 function Utf32AutoDecoder(options, codec) { 24058 this.decoder = null; 24059 this.initialBufs = []; 24060 this.initialBufsLen = 0; 24061 this.options = options || {}; 24062 this.iconv = codec.iconv; 24063 } 24064 24065 Utf32AutoDecoder.prototype.write = function(buf) { 24066 if (!this.decoder) { 24067 // Codec is not chosen yet. Accumulate initial bytes. 24068 this.initialBufs.push(buf); 24069 this.initialBufsLen += buf.length; 24070 24071 if (this.initialBufsLen < 32) // We need more bytes to use space heuristic (see below) 24072 return ''; 24073 24074 // We have enough bytes -> detect endianness. 24075 var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding); 24076 this.decoder = this.iconv.getDecoder(encoding, this.options); 24077 24078 var resStr = ''; 24079 for (var i = 0; i < this.initialBufs.length; i++) 24080 resStr += this.decoder.write(this.initialBufs[i]); 24081 24082 this.initialBufs.length = this.initialBufsLen = 0; 24083 return resStr; 24084 } 24085 24086 return this.decoder.write(buf); 24087 }; 24088 24089 Utf32AutoDecoder.prototype.end = function() { 24090 if (!this.decoder) { 24091 var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding); 24092 this.decoder = this.iconv.getDecoder(encoding, this.options); 24093 24094 var resStr = ''; 24095 for (var i = 0; i < this.initialBufs.length; i++) 24096 resStr += this.decoder.write(this.initialBufs[i]); 24097 24098 var trail = this.decoder.end(); 24099 if (trail) 24100 resStr += trail; 24101 24102 this.initialBufs.length = this.initialBufsLen = 0; 24103 return resStr; 24104 } 24105 24106 return this.decoder.end(); 24107 }; 24108 24109 function detectEncoding(bufs, defaultEncoding) { 24110 var b = []; 24111 var charsProcessed = 0; 24112 var invalidLE = 0, invalidBE = 0; // Number of invalid chars when decoded as LE or BE. 24113 var bmpCharsLE = 0, bmpCharsBE = 0; // Number of BMP chars when decoded as LE or BE. 24114 24115 outer_loop: 24116 for (var i = 0; i < bufs.length; i++) { 24117 var buf = bufs[i]; 24118 for (var j = 0; j < buf.length; j++) { 24119 b.push(buf[j]); 24120 if (b.length === 4) { 24121 if (charsProcessed === 0) { 24122 // Check BOM first. 24123 if (b[0] === 0xFF && b[1] === 0xFE && b[2] === 0 && b[3] === 0) { 24124 return 'utf-32le'; 24125 } 24126 if (b[0] === 0 && b[1] === 0 && b[2] === 0xFE && b[3] === 0xFF) { 24127 return 'utf-32be'; 24128 } 24129 } 24130 24131 if (b[0] !== 0 || b[1] > 0x10) invalidBE++; 24132 if (b[3] !== 0 || b[2] > 0x10) invalidLE++; 24133 24134 if (b[0] === 0 && b[1] === 0 && (b[2] !== 0 || b[3] !== 0)) bmpCharsBE++; 24135 if ((b[0] !== 0 || b[1] !== 0) && b[2] === 0 && b[3] === 0) bmpCharsLE++; 24136 24137 b.length = 0; 24138 charsProcessed++; 24139 24140 if (charsProcessed >= 100) { 24141 break outer_loop; 24142 } 24143 } 24144 } 24145 } 24146 24147 // Make decisions. 24148 if (bmpCharsBE - invalidBE > bmpCharsLE - invalidLE) return 'utf-32be'; 24149 if (bmpCharsBE - invalidBE < bmpCharsLE - invalidLE) return 'utf-32le'; 24150 24151 // Couldn't decide (likely all zeros or not enough data). 24152 return defaultEncoding || 'utf-32le'; 24153 } 24154 24155 24156 /***/ }), 24157 24158 /***/ 51644: 24159 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 24160 24161 "use strict"; 24162 24163 var Buffer = (__nccwpck_require__(15118).Buffer); 24164 24165 // UTF-7 codec, according to https://tools.ietf.org/html/rfc2152 24166 // See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3 24167 24168 exports.utf7 = Utf7Codec; 24169 exports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7 24170 function Utf7Codec(codecOptions, iconv) { 24171 this.iconv = iconv; 24172 }; 24173 24174 Utf7Codec.prototype.encoder = Utf7Encoder; 24175 Utf7Codec.prototype.decoder = Utf7Decoder; 24176 Utf7Codec.prototype.bomAware = true; 24177 24178 24179 // -- Encoding 24180 24181 var nonDirectChars = /[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g; 24182 24183 function Utf7Encoder(options, codec) { 24184 this.iconv = codec.iconv; 24185 } 24186 24187 Utf7Encoder.prototype.write = function(str) { 24188 // Naive implementation. 24189 // Non-direct chars are encoded as "+<base64>-"; single "+" char is encoded as "+-". 24190 return Buffer.from(str.replace(nonDirectChars, function(chunk) { 24191 return "+" + (chunk === '+' ? '' : 24192 this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) 24193 + "-"; 24194 }.bind(this))); 24195 } 24196 24197 Utf7Encoder.prototype.end = function() { 24198 } 24199 24200 24201 // -- Decoding 24202 24203 function Utf7Decoder(options, codec) { 24204 this.iconv = codec.iconv; 24205 this.inBase64 = false; 24206 this.base64Accum = ''; 24207 } 24208 24209 var base64Regex = /[A-Za-z0-9\/+]/; 24210 var base64Chars = []; 24211 for (var i = 0; i < 256; i++) 24212 base64Chars[i] = base64Regex.test(String.fromCharCode(i)); 24213 24214 var plusChar = '+'.charCodeAt(0), 24215 minusChar = '-'.charCodeAt(0), 24216 andChar = '&'.charCodeAt(0); 24217 24218 Utf7Decoder.prototype.write = function(buf) { 24219 var res = "", lastI = 0, 24220 inBase64 = this.inBase64, 24221 base64Accum = this.base64Accum; 24222 24223 // The decoder is more involved as we must handle chunks in stream. 24224 24225 for (var i = 0; i < buf.length; i++) { 24226 if (!inBase64) { // We're in direct mode. 24227 // Write direct chars until '+' 24228 if (buf[i] == plusChar) { 24229 res += this.iconv.decode(buf.slice(lastI, i), "ascii"); // Write direct chars. 24230 lastI = i+1; 24231 inBase64 = true; 24232 } 24233 } else { // We decode base64. 24234 if (!base64Chars[buf[i]]) { // Base64 ended. 24235 if (i == lastI && buf[i] == minusChar) {// "+-" -> "+" 24236 res += "+"; 24237 } else { 24238 var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), "ascii"); 24239 res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); 24240 } 24241 24242 if (buf[i] != minusChar) // Minus is absorbed after base64. 24243 i--; 24244 24245 lastI = i+1; 24246 inBase64 = false; 24247 base64Accum = ''; 24248 } 24249 } 24250 } 24251 24252 if (!inBase64) { 24253 res += this.iconv.decode(buf.slice(lastI), "ascii"); // Write direct chars. 24254 } else { 24255 var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), "ascii"); 24256 24257 var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars. 24258 base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future. 24259 b64str = b64str.slice(0, canBeDecoded); 24260 24261 res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); 24262 } 24263 24264 this.inBase64 = inBase64; 24265 this.base64Accum = base64Accum; 24266 24267 return res; 24268 } 24269 24270 Utf7Decoder.prototype.end = function() { 24271 var res = ""; 24272 if (this.inBase64 && this.base64Accum.length > 0) 24273 res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), "utf16-be"); 24274 24275 this.inBase64 = false; 24276 this.base64Accum = ''; 24277 return res; 24278 } 24279 24280 24281 // UTF-7-IMAP codec. 24282 // RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3) 24283 // Differences: 24284 // * Base64 part is started by "&" instead of "+" 24285 // * Direct characters are 0x20-0x7E, except "&" (0x26) 24286 // * In Base64, "," is used instead of "/" 24287 // * Base64 must not be used to represent direct characters. 24288 // * No implicit shift back from Base64 (should always end with '-') 24289 // * String must end in non-shifted position. 24290 // * "-&" while in base64 is not allowed. 24291 24292 24293 exports.utf7imap = Utf7IMAPCodec; 24294 function Utf7IMAPCodec(codecOptions, iconv) { 24295 this.iconv = iconv; 24296 }; 24297 24298 Utf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder; 24299 Utf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder; 24300 Utf7IMAPCodec.prototype.bomAware = true; 24301 24302 24303 // -- Encoding 24304 24305 function Utf7IMAPEncoder(options, codec) { 24306 this.iconv = codec.iconv; 24307 this.inBase64 = false; 24308 this.base64Accum = Buffer.alloc(6); 24309 this.base64AccumIdx = 0; 24310 } 24311 24312 Utf7IMAPEncoder.prototype.write = function(str) { 24313 var inBase64 = this.inBase64, 24314 base64Accum = this.base64Accum, 24315 base64AccumIdx = this.base64AccumIdx, 24316 buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0; 24317 24318 for (var i = 0; i < str.length; i++) { 24319 var uChar = str.charCodeAt(i); 24320 if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'. 24321 if (inBase64) { 24322 if (base64AccumIdx > 0) { 24323 bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\//g, ',').replace(/=+$/, ''), bufIdx); 24324 base64AccumIdx = 0; 24325 } 24326 24327 buf[bufIdx++] = minusChar; // Write '-', then go to direct mode. 24328 inBase64 = false; 24329 } 24330 24331 if (!inBase64) { 24332 buf[bufIdx++] = uChar; // Write direct character 24333 24334 if (uChar === andChar) // Ampersand -> '&-' 24335 buf[bufIdx++] = minusChar; 24336 } 24337 24338 } else { // Non-direct character 24339 if (!inBase64) { 24340 buf[bufIdx++] = andChar; // Write '&', then go to base64 mode. 24341 inBase64 = true; 24342 } 24343 if (inBase64) { 24344 base64Accum[base64AccumIdx++] = uChar >> 8; 24345 base64Accum[base64AccumIdx++] = uChar & 0xFF; 24346 24347 if (base64AccumIdx == base64Accum.length) { 24348 bufIdx += buf.write(base64Accum.toString('base64').replace(/\//g, ','), bufIdx); 24349 base64AccumIdx = 0; 24350 } 24351 } 24352 } 24353 } 24354 24355 this.inBase64 = inBase64; 24356 this.base64AccumIdx = base64AccumIdx; 24357 24358 return buf.slice(0, bufIdx); 24359 } 24360 24361 Utf7IMAPEncoder.prototype.end = function() { 24362 var buf = Buffer.alloc(10), bufIdx = 0; 24363 if (this.inBase64) { 24364 if (this.base64AccumIdx > 0) { 24365 bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\//g, ',').replace(/=+$/, ''), bufIdx); 24366 this.base64AccumIdx = 0; 24367 } 24368 24369 buf[bufIdx++] = minusChar; // Write '-', then go to direct mode. 24370 this.inBase64 = false; 24371 } 24372 24373 return buf.slice(0, bufIdx); 24374 } 24375 24376 24377 // -- Decoding 24378 24379 function Utf7IMAPDecoder(options, codec) { 24380 this.iconv = codec.iconv; 24381 this.inBase64 = false; 24382 this.base64Accum = ''; 24383 } 24384 24385 var base64IMAPChars = base64Chars.slice(); 24386 base64IMAPChars[','.charCodeAt(0)] = true; 24387 24388 Utf7IMAPDecoder.prototype.write = function(buf) { 24389 var res = "", lastI = 0, 24390 inBase64 = this.inBase64, 24391 base64Accum = this.base64Accum; 24392 24393 // The decoder is more involved as we must handle chunks in stream. 24394 // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end). 24395 24396 for (var i = 0; i < buf.length; i++) { 24397 if (!inBase64) { // We're in direct mode. 24398 // Write direct chars until '&' 24399 if (buf[i] == andChar) { 24400 res += this.iconv.decode(buf.slice(lastI, i), "ascii"); // Write direct chars. 24401 lastI = i+1; 24402 inBase64 = true; 24403 } 24404 } else { // We decode base64. 24405 if (!base64IMAPChars[buf[i]]) { // Base64 ended. 24406 if (i == lastI && buf[i] == minusChar) { // "&-" -> "&" 24407 res += "&"; 24408 } else { 24409 var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), "ascii").replace(/,/g, '/'); 24410 res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); 24411 } 24412 24413 if (buf[i] != minusChar) // Minus may be absorbed after base64. 24414 i--; 24415 24416 lastI = i+1; 24417 inBase64 = false; 24418 base64Accum = ''; 24419 } 24420 } 24421 } 24422 24423 if (!inBase64) { 24424 res += this.iconv.decode(buf.slice(lastI), "ascii"); // Write direct chars. 24425 } else { 24426 var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), "ascii").replace(/,/g, '/'); 24427 24428 var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars. 24429 base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future. 24430 b64str = b64str.slice(0, canBeDecoded); 24431 24432 res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); 24433 } 24434 24435 this.inBase64 = inBase64; 24436 this.base64Accum = base64Accum; 24437 24438 return res; 24439 } 24440 24441 Utf7IMAPDecoder.prototype.end = function() { 24442 var res = ""; 24443 if (this.inBase64 && this.base64Accum.length > 0) 24444 res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), "utf16-be"); 24445 24446 this.inBase64 = false; 24447 this.base64Accum = ''; 24448 return res; 24449 } 24450 24451 24452 24453 24454 /***/ }), 24455 24456 /***/ 67961: 24457 /***/ ((__unused_webpack_module, exports) => { 24458 24459 "use strict"; 24460 24461 24462 var BOMChar = '\uFEFF'; 24463 24464 exports.PrependBOM = PrependBOMWrapper 24465 function PrependBOMWrapper(encoder, options) { 24466 this.encoder = encoder; 24467 this.addBOM = true; 24468 } 24469 24470 PrependBOMWrapper.prototype.write = function(str) { 24471 if (this.addBOM) { 24472 str = BOMChar + str; 24473 this.addBOM = false; 24474 } 24475 24476 return this.encoder.write(str); 24477 } 24478 24479 PrependBOMWrapper.prototype.end = function() { 24480 return this.encoder.end(); 24481 } 24482 24483 24484 //------------------------------------------------------------------------------ 24485 24486 exports.StripBOM = StripBOMWrapper; 24487 function StripBOMWrapper(decoder, options) { 24488 this.decoder = decoder; 24489 this.pass = false; 24490 this.options = options || {}; 24491 } 24492 24493 StripBOMWrapper.prototype.write = function(buf) { 24494 var res = this.decoder.write(buf); 24495 if (this.pass || !res) 24496 return res; 24497 24498 if (res[0] === BOMChar) { 24499 res = res.slice(1); 24500 if (typeof this.options.stripBOM === 'function') 24501 this.options.stripBOM(); 24502 } 24503 24504 this.pass = true; 24505 return res; 24506 } 24507 24508 StripBOMWrapper.prototype.end = function() { 24509 return this.decoder.end(); 24510 } 24511 24512 24513 24514 /***/ }), 24515 24516 /***/ 19032: 24517 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 24518 24519 "use strict"; 24520 24521 24522 var Buffer = (__nccwpck_require__(15118).Buffer); 24523 24524 var bomHandling = __nccwpck_require__(67961), 24525 iconv = module.exports; 24526 24527 // All codecs and aliases are kept here, keyed by encoding name/alias. 24528 // They are lazy loaded in `iconv.getCodec` from `encodings/index.js`. 24529 iconv.encodings = null; 24530 24531 // Characters emitted in case of error. 24532 iconv.defaultCharUnicode = '�'; 24533 iconv.defaultCharSingleByte = '?'; 24534 24535 // Public API. 24536 iconv.encode = function encode(str, encoding, options) { 24537 str = "" + (str || ""); // Ensure string. 24538 24539 var encoder = iconv.getEncoder(encoding, options); 24540 24541 var res = encoder.write(str); 24542 var trail = encoder.end(); 24543 24544 return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res; 24545 } 24546 24547 iconv.decode = function decode(buf, encoding, options) { 24548 if (typeof buf === 'string') { 24549 if (!iconv.skipDecodeWarning) { 24550 console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding'); 24551 iconv.skipDecodeWarning = true; 24552 } 24553 24554 buf = Buffer.from("" + (buf || ""), "binary"); // Ensure buffer. 24555 } 24556 24557 var decoder = iconv.getDecoder(encoding, options); 24558 24559 var res = decoder.write(buf); 24560 var trail = decoder.end(); 24561 24562 return trail ? (res + trail) : res; 24563 } 24564 24565 iconv.encodingExists = function encodingExists(enc) { 24566 try { 24567 iconv.getCodec(enc); 24568 return true; 24569 } catch (e) { 24570 return false; 24571 } 24572 } 24573 24574 // Legacy aliases to convert functions 24575 iconv.toEncoding = iconv.encode; 24576 iconv.fromEncoding = iconv.decode; 24577 24578 // Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache. 24579 iconv._codecDataCache = {}; 24580 iconv.getCodec = function getCodec(encoding) { 24581 if (!iconv.encodings) 24582 iconv.encodings = __nccwpck_require__(82733); // Lazy load all encoding definitions. 24583 24584 // Canonicalize encoding name: strip all non-alphanumeric chars and appended year. 24585 var enc = iconv._canonicalizeEncoding(encoding); 24586 24587 // Traverse iconv.encodings to find actual codec. 24588 var codecOptions = {}; 24589 while (true) { 24590 var codec = iconv._codecDataCache[enc]; 24591 if (codec) 24592 return codec; 24593 24594 var codecDef = iconv.encodings[enc]; 24595 24596 switch (typeof codecDef) { 24597 case "string": // Direct alias to other encoding. 24598 enc = codecDef; 24599 break; 24600 24601 case "object": // Alias with options. Can be layered. 24602 for (var key in codecDef) 24603 codecOptions[key] = codecDef[key]; 24604 24605 if (!codecOptions.encodingName) 24606 codecOptions.encodingName = enc; 24607 24608 enc = codecDef.type; 24609 break; 24610 24611 case "function": // Codec itself. 24612 if (!codecOptions.encodingName) 24613 codecOptions.encodingName = enc; 24614 24615 // The codec function must load all tables and return object with .encoder and .decoder methods. 24616 // It'll be called only once (for each different options object). 24617 codec = new codecDef(codecOptions, iconv); 24618 24619 iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later. 24620 return codec; 24621 24622 default: 24623 throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '"+enc+"')"); 24624 } 24625 } 24626 } 24627 24628 iconv._canonicalizeEncoding = function(encoding) { 24629 // Canonicalize encoding name: strip all non-alphanumeric chars and appended year. 24630 return (''+encoding).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g, ""); 24631 } 24632 24633 iconv.getEncoder = function getEncoder(encoding, options) { 24634 var codec = iconv.getCodec(encoding), 24635 encoder = new codec.encoder(options, codec); 24636 24637 if (codec.bomAware && options && options.addBOM) 24638 encoder = new bomHandling.PrependBOM(encoder, options); 24639 24640 return encoder; 24641 } 24642 24643 iconv.getDecoder = function getDecoder(encoding, options) { 24644 var codec = iconv.getCodec(encoding), 24645 decoder = new codec.decoder(options, codec); 24646 24647 if (codec.bomAware && !(options && options.stripBOM === false)) 24648 decoder = new bomHandling.StripBOM(decoder, options); 24649 24650 return decoder; 24651 } 24652 24653 // Streaming API 24654 // NOTE: Streaming API naturally depends on 'stream' module from Node.js. Unfortunately in browser environments this module can add 24655 // up to 100Kb to the output bundle. To avoid unnecessary code bloat, we don't enable Streaming API in browser by default. 24656 // If you would like to enable it explicitly, please add the following code to your app: 24657 // > iconv.enableStreamingAPI(require('stream')); 24658 iconv.enableStreamingAPI = function enableStreamingAPI(stream_module) { 24659 if (iconv.supportsStreams) 24660 return; 24661 24662 // Dependency-inject stream module to create IconvLite stream classes. 24663 var streams = __nccwpck_require__(76409)(stream_module); 24664 24665 // Not public API yet, but expose the stream classes. 24666 iconv.IconvLiteEncoderStream = streams.IconvLiteEncoderStream; 24667 iconv.IconvLiteDecoderStream = streams.IconvLiteDecoderStream; 24668 24669 // Streaming API. 24670 iconv.encodeStream = function encodeStream(encoding, options) { 24671 return new iconv.IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options); 24672 } 24673 24674 iconv.decodeStream = function decodeStream(encoding, options) { 24675 return new iconv.IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options); 24676 } 24677 24678 iconv.supportsStreams = true; 24679 } 24680 24681 // Enable Streaming API automatically if 'stream' module is available and non-empty (the majority of environments). 24682 var stream_module; 24683 try { 24684 stream_module = __nccwpck_require__(12781); 24685 } catch (e) {} 24686 24687 if (stream_module && stream_module.Transform) { 24688 iconv.enableStreamingAPI(stream_module); 24689 24690 } else { 24691 // In rare cases where 'stream' module is not available by default, throw a helpful exception. 24692 iconv.encodeStream = iconv.decodeStream = function() { 24693 throw new Error("iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it."); 24694 }; 24695 } 24696 24697 if (false) {} 24698 24699 24700 /***/ }), 24701 24702 /***/ 76409: 24703 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 24704 24705 "use strict"; 24706 24707 24708 var Buffer = (__nccwpck_require__(15118).Buffer); 24709 24710 // NOTE: Due to 'stream' module being pretty large (~100Kb, significant in browser environments), 24711 // we opt to dependency-inject it instead of creating a hard dependency. 24712 module.exports = function(stream_module) { 24713 var Transform = stream_module.Transform; 24714 24715 // == Encoder stream ======================================================= 24716 24717 function IconvLiteEncoderStream(conv, options) { 24718 this.conv = conv; 24719 options = options || {}; 24720 options.decodeStrings = false; // We accept only strings, so we don't need to decode them. 24721 Transform.call(this, options); 24722 } 24723 24724 IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, { 24725 constructor: { value: IconvLiteEncoderStream } 24726 }); 24727 24728 IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) { 24729 if (typeof chunk != 'string') 24730 return done(new Error("Iconv encoding stream needs strings as its input.")); 24731 try { 24732 var res = this.conv.write(chunk); 24733 if (res && res.length) this.push(res); 24734 done(); 24735 } 24736 catch (e) { 24737 done(e); 24738 } 24739 } 24740 24741 IconvLiteEncoderStream.prototype._flush = function(done) { 24742 try { 24743 var res = this.conv.end(); 24744 if (res && res.length) this.push(res); 24745 done(); 24746 } 24747 catch (e) { 24748 done(e); 24749 } 24750 } 24751 24752 IconvLiteEncoderStream.prototype.collect = function(cb) { 24753 var chunks = []; 24754 this.on('error', cb); 24755 this.on('data', function(chunk) { chunks.push(chunk); }); 24756 this.on('end', function() { 24757 cb(null, Buffer.concat(chunks)); 24758 }); 24759 return this; 24760 } 24761 24762 24763 // == Decoder stream ======================================================= 24764 24765 function IconvLiteDecoderStream(conv, options) { 24766 this.conv = conv; 24767 options = options || {}; 24768 options.encoding = this.encoding = 'utf8'; // We output strings. 24769 Transform.call(this, options); 24770 } 24771 24772 IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, { 24773 constructor: { value: IconvLiteDecoderStream } 24774 }); 24775 24776 IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) { 24777 if (!Buffer.isBuffer(chunk) && !(chunk instanceof Uint8Array)) 24778 return done(new Error("Iconv decoding stream needs buffers as its input.")); 24779 try { 24780 var res = this.conv.write(chunk); 24781 if (res && res.length) this.push(res, this.encoding); 24782 done(); 24783 } 24784 catch (e) { 24785 done(e); 24786 } 24787 } 24788 24789 IconvLiteDecoderStream.prototype._flush = function(done) { 24790 try { 24791 var res = this.conv.end(); 24792 if (res && res.length) this.push(res, this.encoding); 24793 done(); 24794 } 24795 catch (e) { 24796 done(e); 24797 } 24798 } 24799 24800 IconvLiteDecoderStream.prototype.collect = function(cb) { 24801 var res = ''; 24802 this.on('error', cb); 24803 this.on('data', function(chunk) { res += chunk; }); 24804 this.on('end', function() { 24805 cb(null, res); 24806 }); 24807 return this; 24808 } 24809 24810 return { 24811 IconvLiteEncoderStream: IconvLiteEncoderStream, 24812 IconvLiteDecoderStream: IconvLiteDecoderStream, 24813 }; 24814 }; 24815 24816 24817 /***/ }), 24818 24819 /***/ 52527: 24820 /***/ ((module) => { 24821 24822 /** 24823 * @preserve 24824 * JS Implementation of incremental MurmurHash3 (r150) (as of May 10, 2013) 24825 * 24826 * @author <a href="mailto:jensyt@gmail.com">Jens Taylor</a> 24827 * @see http://github.com/homebrewing/brauhaus-diff 24828 * @author <a href="mailto:gary.court@gmail.com">Gary Court</a> 24829 * @see http://github.com/garycourt/murmurhash-js 24830 * @author <a href="mailto:aappleby@gmail.com">Austin Appleby</a> 24831 * @see http://sites.google.com/site/murmurhash/ 24832 */ 24833 (function(){ 24834 var cache; 24835 24836 // Call this function without `new` to use the cached object (good for 24837 // single-threaded environments), or with `new` to create a new object. 24838 // 24839 // @param {string} key A UTF-16 or ASCII string 24840 // @param {number} seed An optional positive integer 24841 // @return {object} A MurmurHash3 object for incremental hashing 24842 function MurmurHash3(key, seed) { 24843 var m = this instanceof MurmurHash3 ? this : cache; 24844 m.reset(seed) 24845 if (typeof key === 'string' && key.length > 0) { 24846 m.hash(key); 24847 } 24848 24849 if (m !== this) { 24850 return m; 24851 } 24852 }; 24853 24854 // Incrementally add a string to this hash 24855 // 24856 // @param {string} key A UTF-16 or ASCII string 24857 // @return {object} this 24858 MurmurHash3.prototype.hash = function(key) { 24859 var h1, k1, i, top, len; 24860 24861 len = key.length; 24862 this.len += len; 24863 24864 k1 = this.k1; 24865 i = 0; 24866 switch (this.rem) { 24867 case 0: k1 ^= len > i ? (key.charCodeAt(i++) & 0xffff) : 0; 24868 case 1: k1 ^= len > i ? (key.charCodeAt(i++) & 0xffff) << 8 : 0; 24869 case 2: k1 ^= len > i ? (key.charCodeAt(i++) & 0xffff) << 16 : 0; 24870 case 3: 24871 k1 ^= len > i ? (key.charCodeAt(i) & 0xff) << 24 : 0; 24872 k1 ^= len > i ? (key.charCodeAt(i++) & 0xff00) >> 8 : 0; 24873 } 24874 24875 this.rem = (len + this.rem) & 3; // & 3 is same as % 4 24876 len -= this.rem; 24877 if (len > 0) { 24878 h1 = this.h1; 24879 while (1) { 24880 k1 = (k1 * 0x2d51 + (k1 & 0xffff) * 0xcc9e0000) & 0xffffffff; 24881 k1 = (k1 << 15) | (k1 >>> 17); 24882 k1 = (k1 * 0x3593 + (k1 & 0xffff) * 0x1b870000) & 0xffffffff; 24883 24884 h1 ^= k1; 24885 h1 = (h1 << 13) | (h1 >>> 19); 24886 h1 = (h1 * 5 + 0xe6546b64) & 0xffffffff; 24887 24888 if (i >= len) { 24889 break; 24890 } 24891 24892 k1 = ((key.charCodeAt(i++) & 0xffff)) ^ 24893 ((key.charCodeAt(i++) & 0xffff) << 8) ^ 24894 ((key.charCodeAt(i++) & 0xffff) << 16); 24895 top = key.charCodeAt(i++); 24896 k1 ^= ((top & 0xff) << 24) ^ 24897 ((top & 0xff00) >> 8); 24898 } 24899 24900 k1 = 0; 24901 switch (this.rem) { 24902 case 3: k1 ^= (key.charCodeAt(i + 2) & 0xffff) << 16; 24903 case 2: k1 ^= (key.charCodeAt(i + 1) & 0xffff) << 8; 24904 case 1: k1 ^= (key.charCodeAt(i) & 0xffff); 24905 } 24906 24907 this.h1 = h1; 24908 } 24909 24910 this.k1 = k1; 24911 return this; 24912 }; 24913 24914 // Get the result of this hash 24915 // 24916 // @return {number} The 32-bit hash 24917 MurmurHash3.prototype.result = function() { 24918 var k1, h1; 24919 24920 k1 = this.k1; 24921 h1 = this.h1; 24922 24923 if (k1 > 0) { 24924 k1 = (k1 * 0x2d51 + (k1 & 0xffff) * 0xcc9e0000) & 0xffffffff; 24925 k1 = (k1 << 15) | (k1 >>> 17); 24926 k1 = (k1 * 0x3593 + (k1 & 0xffff) * 0x1b870000) & 0xffffffff; 24927 h1 ^= k1; 24928 } 24929 24930 h1 ^= this.len; 24931 24932 h1 ^= h1 >>> 16; 24933 h1 = (h1 * 0xca6b + (h1 & 0xffff) * 0x85eb0000) & 0xffffffff; 24934 h1 ^= h1 >>> 13; 24935 h1 = (h1 * 0xae35 + (h1 & 0xffff) * 0xc2b20000) & 0xffffffff; 24936 h1 ^= h1 >>> 16; 24937 24938 return h1 >>> 0; 24939 }; 24940 24941 // Reset the hash object for reuse 24942 // 24943 // @param {number} seed An optional positive integer 24944 MurmurHash3.prototype.reset = function(seed) { 24945 this.h1 = typeof seed === 'number' ? seed : 0; 24946 this.rem = this.k1 = this.len = 0; 24947 return this; 24948 }; 24949 24950 // A cached object to use. This can be safely used if you're in a single- 24951 // threaded environment, otherwise you need to create new hashes to use. 24952 cache = new MurmurHash3(); 24953 24954 if (true) { 24955 module.exports = MurmurHash3; 24956 } else {} 24957 }()); 24958 24959 24960 /***/ }), 24961 24962 /***/ 98043: 24963 /***/ ((module) => { 24964 24965 "use strict"; 24966 24967 24968 module.exports = (string, count = 1, options) => { 24969 options = { 24970 indent: ' ', 24971 includeEmptyLines: false, 24972 ...options 24973 }; 24974 24975 if (typeof string !== 'string') { 24976 throw new TypeError( 24977 `Expected \`input\` to be a \`string\`, got \`${typeof string}\`` 24978 ); 24979 } 24980 24981 if (typeof count !== 'number') { 24982 throw new TypeError( 24983 `Expected \`count\` to be a \`number\`, got \`${typeof count}\`` 24984 ); 24985 } 24986 24987 if (typeof options.indent !== 'string') { 24988 throw new TypeError( 24989 `Expected \`options.indent\` to be a \`string\`, got \`${typeof options.indent}\`` 24990 ); 24991 } 24992 24993 if (count === 0) { 24994 return string; 24995 } 24996 24997 const regex = options.includeEmptyLines ? /^/gm : /^(?!\s*$)/gm; 24998 24999 return string.replace(regex, options.indent.repeat(count)); 25000 }; 25001 25002 25003 /***/ }), 25004 25005 /***/ 50903: 25006 /***/ ((__unused_webpack_module, exports) => { 25007 25008 "use strict"; 25009 25010 Object.defineProperty(exports, "__esModule", ({ value: true })); 25011 exports.AddressError = void 0; 25012 class AddressError extends Error { 25013 constructor(message, parseMessage) { 25014 super(message); 25015 this.name = 'AddressError'; 25016 if (parseMessage !== null) { 25017 this.parseMessage = parseMessage; 25018 } 25019 } 25020 } 25021 exports.AddressError = AddressError; 25022 //# sourceMappingURL=address-error.js.map 25023 25024 /***/ }), 25025 25026 /***/ 53233: 25027 /***/ ((__unused_webpack_module, exports) => { 25028 25029 "use strict"; 25030 25031 Object.defineProperty(exports, "__esModule", ({ value: true })); 25032 exports.isCorrect = exports.isInSubnet = void 0; 25033 function isInSubnet(address) { 25034 if (this.subnetMask < address.subnetMask) { 25035 return false; 25036 } 25037 if (this.mask(address.subnetMask) === address.mask()) { 25038 return true; 25039 } 25040 return false; 25041 } 25042 exports.isInSubnet = isInSubnet; 25043 function isCorrect(defaultBits) { 25044 return function () { 25045 if (this.addressMinusSuffix !== this.correctForm()) { 25046 return false; 25047 } 25048 if (this.subnetMask === defaultBits && !this.parsedSubnet) { 25049 return true; 25050 } 25051 return this.parsedSubnet === String(this.subnetMask); 25052 }; 25053 } 25054 exports.isCorrect = isCorrect; 25055 //# sourceMappingURL=common.js.map 25056 25057 /***/ }), 25058 25059 /***/ 78953: 25060 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 25061 25062 "use strict"; 25063 25064 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 25065 if (k2 === undefined) k2 = k; 25066 var desc = Object.getOwnPropertyDescriptor(m, k); 25067 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 25068 desc = { enumerable: true, get: function() { return m[k]; } }; 25069 } 25070 Object.defineProperty(o, k2, desc); 25071 }) : (function(o, m, k, k2) { 25072 if (k2 === undefined) k2 = k; 25073 o[k2] = m[k]; 25074 })); 25075 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 25076 Object.defineProperty(o, "default", { enumerable: true, value: v }); 25077 }) : function(o, v) { 25078 o["default"] = v; 25079 }); 25080 var __importStar = (this && this.__importStar) || function (mod) { 25081 if (mod && mod.__esModule) return mod; 25082 var result = {}; 25083 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 25084 __setModuleDefault(result, mod); 25085 return result; 25086 }; 25087 Object.defineProperty(exports, "__esModule", ({ value: true })); 25088 exports.v6 = exports.AddressError = exports.Address6 = exports.Address4 = void 0; 25089 const ipv4_1 = __nccwpck_require__(50753); 25090 Object.defineProperty(exports, "Address4", ({ enumerable: true, get: function () { return ipv4_1.Address4; } })); 25091 const ipv6_1 = __nccwpck_require__(88292); 25092 Object.defineProperty(exports, "Address6", ({ enumerable: true, get: function () { return ipv6_1.Address6; } })); 25093 const address_error_1 = __nccwpck_require__(50903); 25094 Object.defineProperty(exports, "AddressError", ({ enumerable: true, get: function () { return address_error_1.AddressError; } })); 25095 const helpers = __importStar(__nccwpck_require__(10945)); 25096 exports.v6 = { helpers }; 25097 //# sourceMappingURL=ip-address.js.map 25098 25099 /***/ }), 25100 25101 /***/ 50753: 25102 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 25103 25104 "use strict"; 25105 25106 /* eslint-disable no-param-reassign */ 25107 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 25108 if (k2 === undefined) k2 = k; 25109 var desc = Object.getOwnPropertyDescriptor(m, k); 25110 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 25111 desc = { enumerable: true, get: function() { return m[k]; } }; 25112 } 25113 Object.defineProperty(o, k2, desc); 25114 }) : (function(o, m, k, k2) { 25115 if (k2 === undefined) k2 = k; 25116 o[k2] = m[k]; 25117 })); 25118 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 25119 Object.defineProperty(o, "default", { enumerable: true, value: v }); 25120 }) : function(o, v) { 25121 o["default"] = v; 25122 }); 25123 var __importStar = (this && this.__importStar) || function (mod) { 25124 if (mod && mod.__esModule) return mod; 25125 var result = {}; 25126 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 25127 __setModuleDefault(result, mod); 25128 return result; 25129 }; 25130 Object.defineProperty(exports, "__esModule", ({ value: true })); 25131 exports.Address4 = void 0; 25132 const common = __importStar(__nccwpck_require__(53233)); 25133 const constants = __importStar(__nccwpck_require__(66417)); 25134 const address_error_1 = __nccwpck_require__(50903); 25135 const jsbn_1 = __nccwpck_require__(85587); 25136 const sprintf_js_1 = __nccwpck_require__(33988); 25137 /** 25138 * Represents an IPv4 address 25139 * @class Address4 25140 * @param {string} address - An IPv4 address string 25141 */ 25142 class Address4 { 25143 constructor(address) { 25144 this.groups = constants.GROUPS; 25145 this.parsedAddress = []; 25146 this.parsedSubnet = ''; 25147 this.subnet = '/32'; 25148 this.subnetMask = 32; 25149 this.v4 = true; 25150 /** 25151 * Returns true if the address is correct, false otherwise 25152 * @memberof Address4 25153 * @instance 25154 * @returns {Boolean} 25155 */ 25156 this.isCorrect = common.isCorrect(constants.BITS); 25157 /** 25158 * Returns true if the given address is in the subnet of the current address 25159 * @memberof Address4 25160 * @instance 25161 * @returns {boolean} 25162 */ 25163 this.isInSubnet = common.isInSubnet; 25164 this.address = address; 25165 const subnet = constants.RE_SUBNET_STRING.exec(address); 25166 if (subnet) { 25167 this.parsedSubnet = subnet[0].replace('/', ''); 25168 this.subnetMask = parseInt(this.parsedSubnet, 10); 25169 this.subnet = `/${this.subnetMask}`; 25170 if (this.subnetMask < 0 || this.subnetMask > constants.BITS) { 25171 throw new address_error_1.AddressError('Invalid subnet mask.'); 25172 } 25173 address = address.replace(constants.RE_SUBNET_STRING, ''); 25174 } 25175 this.addressMinusSuffix = address; 25176 this.parsedAddress = this.parse(address); 25177 } 25178 static isValid(address) { 25179 try { 25180 // eslint-disable-next-line no-new 25181 new Address4(address); 25182 return true; 25183 } 25184 catch (e) { 25185 return false; 25186 } 25187 } 25188 /* 25189 * Parses a v4 address 25190 */ 25191 parse(address) { 25192 const groups = address.split('.'); 25193 if (!address.match(constants.RE_ADDRESS)) { 25194 throw new address_error_1.AddressError('Invalid IPv4 address.'); 25195 } 25196 return groups; 25197 } 25198 /** 25199 * Returns the correct form of an address 25200 * @memberof Address4 25201 * @instance 25202 * @returns {String} 25203 */ 25204 correctForm() { 25205 return this.parsedAddress.map((part) => parseInt(part, 10)).join('.'); 25206 } 25207 /** 25208 * Converts a hex string to an IPv4 address object 25209 * @memberof Address4 25210 * @static 25211 * @param {string} hex - a hex string to convert 25212 * @returns {Address4} 25213 */ 25214 static fromHex(hex) { 25215 const padded = hex.replace(/:/g, '').padStart(8, '0'); 25216 const groups = []; 25217 let i; 25218 for (i = 0; i < 8; i += 2) { 25219 const h = padded.slice(i, i + 2); 25220 groups.push(parseInt(h, 16)); 25221 } 25222 return new Address4(groups.join('.')); 25223 } 25224 /** 25225 * Converts an integer into a IPv4 address object 25226 * @memberof Address4 25227 * @static 25228 * @param {integer} integer - a number to convert 25229 * @returns {Address4} 25230 */ 25231 static fromInteger(integer) { 25232 return Address4.fromHex(integer.toString(16)); 25233 } 25234 /** 25235 * Return an address from in-addr.arpa form 25236 * @memberof Address4 25237 * @static 25238 * @param {string} arpaFormAddress - an 'in-addr.arpa' form ipv4 address 25239 * @returns {Adress4} 25240 * @example 25241 * var address = Address4.fromArpa(42.2.0.192.in-addr.arpa.) 25242 * address.correctForm(); // '192.0.2.42' 25243 */ 25244 static fromArpa(arpaFormAddress) { 25245 // remove ending ".in-addr.arpa." or just "." 25246 const leader = arpaFormAddress.replace(/(\.in-addr\.arpa)?\.$/, ''); 25247 const address = leader.split('.').reverse().join('.'); 25248 return new Address4(address); 25249 } 25250 /** 25251 * Converts an IPv4 address object to a hex string 25252 * @memberof Address4 25253 * @instance 25254 * @returns {String} 25255 */ 25256 toHex() { 25257 return this.parsedAddress.map((part) => (0, sprintf_js_1.sprintf)('%02x', parseInt(part, 10))).join(':'); 25258 } 25259 /** 25260 * Converts an IPv4 address object to an array of bytes 25261 * @memberof Address4 25262 * @instance 25263 * @returns {Array} 25264 */ 25265 toArray() { 25266 return this.parsedAddress.map((part) => parseInt(part, 10)); 25267 } 25268 /** 25269 * Converts an IPv4 address object to an IPv6 address group 25270 * @memberof Address4 25271 * @instance 25272 * @returns {String} 25273 */ 25274 toGroup6() { 25275 const output = []; 25276 let i; 25277 for (i = 0; i < constants.GROUPS; i += 2) { 25278 const hex = (0, sprintf_js_1.sprintf)('%02x%02x', parseInt(this.parsedAddress[i], 10), parseInt(this.parsedAddress[i + 1], 10)); 25279 output.push((0, sprintf_js_1.sprintf)('%x', parseInt(hex, 16))); 25280 } 25281 return output.join(':'); 25282 } 25283 /** 25284 * Returns the address as a BigInteger 25285 * @memberof Address4 25286 * @instance 25287 * @returns {BigInteger} 25288 */ 25289 bigInteger() { 25290 return new jsbn_1.BigInteger(this.parsedAddress.map((n) => (0, sprintf_js_1.sprintf)('%02x', parseInt(n, 10))).join(''), 16); 25291 } 25292 /** 25293 * Helper function getting start address. 25294 * @memberof Address4 25295 * @instance 25296 * @returns {BigInteger} 25297 */ 25298 _startAddress() { 25299 return new jsbn_1.BigInteger(this.mask() + '0'.repeat(constants.BITS - this.subnetMask), 2); 25300 } 25301 /** 25302 * The first address in the range given by this address' subnet. 25303 * Often referred to as the Network Address. 25304 * @memberof Address4 25305 * @instance 25306 * @returns {Address4} 25307 */ 25308 startAddress() { 25309 return Address4.fromBigInteger(this._startAddress()); 25310 } 25311 /** 25312 * The first host address in the range given by this address's subnet ie 25313 * the first address after the Network Address 25314 * @memberof Address4 25315 * @instance 25316 * @returns {Address4} 25317 */ 25318 startAddressExclusive() { 25319 const adjust = new jsbn_1.BigInteger('1'); 25320 return Address4.fromBigInteger(this._startAddress().add(adjust)); 25321 } 25322 /** 25323 * Helper function getting end address. 25324 * @memberof Address4 25325 * @instance 25326 * @returns {BigInteger} 25327 */ 25328 _endAddress() { 25329 return new jsbn_1.BigInteger(this.mask() + '1'.repeat(constants.BITS - this.subnetMask), 2); 25330 } 25331 /** 25332 * The last address in the range given by this address' subnet 25333 * Often referred to as the Broadcast 25334 * @memberof Address4 25335 * @instance 25336 * @returns {Address4} 25337 */ 25338 endAddress() { 25339 return Address4.fromBigInteger(this._endAddress()); 25340 } 25341 /** 25342 * The last host address in the range given by this address's subnet ie 25343 * the last address prior to the Broadcast Address 25344 * @memberof Address4 25345 * @instance 25346 * @returns {Address4} 25347 */ 25348 endAddressExclusive() { 25349 const adjust = new jsbn_1.BigInteger('1'); 25350 return Address4.fromBigInteger(this._endAddress().subtract(adjust)); 25351 } 25352 /** 25353 * Converts a BigInteger to a v4 address object 25354 * @memberof Address4 25355 * @static 25356 * @param {BigInteger} bigInteger - a BigInteger to convert 25357 * @returns {Address4} 25358 */ 25359 static fromBigInteger(bigInteger) { 25360 return Address4.fromInteger(parseInt(bigInteger.toString(), 10)); 25361 } 25362 /** 25363 * Returns the first n bits of the address, defaulting to the 25364 * subnet mask 25365 * @memberof Address4 25366 * @instance 25367 * @returns {String} 25368 */ 25369 mask(mask) { 25370 if (mask === undefined) { 25371 mask = this.subnetMask; 25372 } 25373 return this.getBitsBase2(0, mask); 25374 } 25375 /** 25376 * Returns the bits in the given range as a base-2 string 25377 * @memberof Address4 25378 * @instance 25379 * @returns {string} 25380 */ 25381 getBitsBase2(start, end) { 25382 return this.binaryZeroPad().slice(start, end); 25383 } 25384 /** 25385 * Return the reversed ip6.arpa form of the address 25386 * @memberof Address4 25387 * @param {Object} options 25388 * @param {boolean} options.omitSuffix - omit the "in-addr.arpa" suffix 25389 * @instance 25390 * @returns {String} 25391 */ 25392 reverseForm(options) { 25393 if (!options) { 25394 options = {}; 25395 } 25396 const reversed = this.correctForm().split('.').reverse().join('.'); 25397 if (options.omitSuffix) { 25398 return reversed; 25399 } 25400 return (0, sprintf_js_1.sprintf)('%s.in-addr.arpa.', reversed); 25401 } 25402 /** 25403 * Returns true if the given address is a multicast address 25404 * @memberof Address4 25405 * @instance 25406 * @returns {boolean} 25407 */ 25408 isMulticast() { 25409 return this.isInSubnet(new Address4('224.0.0.0/4')); 25410 } 25411 /** 25412 * Returns a zero-padded base-2 string representation of the address 25413 * @memberof Address4 25414 * @instance 25415 * @returns {string} 25416 */ 25417 binaryZeroPad() { 25418 return this.bigInteger().toString(2).padStart(constants.BITS, '0'); 25419 } 25420 /** 25421 * Groups an IPv4 address for inclusion at the end of an IPv6 address 25422 * @returns {String} 25423 */ 25424 groupForV6() { 25425 const segments = this.parsedAddress; 25426 return this.address.replace(constants.RE_ADDRESS, (0, sprintf_js_1.sprintf)('<span class="hover-group group-v4 group-6">%s</span>.<span class="hover-group group-v4 group-7">%s</span>', segments.slice(0, 2).join('.'), segments.slice(2, 4).join('.'))); 25427 } 25428 } 25429 exports.Address4 = Address4; 25430 //# sourceMappingURL=ipv4.js.map 25431 25432 /***/ }), 25433 25434 /***/ 88292: 25435 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 25436 25437 "use strict"; 25438 25439 /* eslint-disable prefer-destructuring */ 25440 /* eslint-disable no-param-reassign */ 25441 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 25442 if (k2 === undefined) k2 = k; 25443 var desc = Object.getOwnPropertyDescriptor(m, k); 25444 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 25445 desc = { enumerable: true, get: function() { return m[k]; } }; 25446 } 25447 Object.defineProperty(o, k2, desc); 25448 }) : (function(o, m, k, k2) { 25449 if (k2 === undefined) k2 = k; 25450 o[k2] = m[k]; 25451 })); 25452 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 25453 Object.defineProperty(o, "default", { enumerable: true, value: v }); 25454 }) : function(o, v) { 25455 o["default"] = v; 25456 }); 25457 var __importStar = (this && this.__importStar) || function (mod) { 25458 if (mod && mod.__esModule) return mod; 25459 var result = {}; 25460 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 25461 __setModuleDefault(result, mod); 25462 return result; 25463 }; 25464 Object.defineProperty(exports, "__esModule", ({ value: true })); 25465 exports.Address6 = void 0; 25466 const common = __importStar(__nccwpck_require__(53233)); 25467 const constants4 = __importStar(__nccwpck_require__(66417)); 25468 const constants6 = __importStar(__nccwpck_require__(31078)); 25469 const helpers = __importStar(__nccwpck_require__(10945)); 25470 const ipv4_1 = __nccwpck_require__(50753); 25471 const regular_expressions_1 = __nccwpck_require__(46738); 25472 const address_error_1 = __nccwpck_require__(50903); 25473 const jsbn_1 = __nccwpck_require__(85587); 25474 const sprintf_js_1 = __nccwpck_require__(33988); 25475 function assert(condition) { 25476 if (!condition) { 25477 throw new Error('Assertion failed.'); 25478 } 25479 } 25480 function addCommas(number) { 25481 const r = /(\d+)(\d{3})/; 25482 while (r.test(number)) { 25483 number = number.replace(r, '$1,$2'); 25484 } 25485 return number; 25486 } 25487 function spanLeadingZeroes4(n) { 25488 n = n.replace(/^(0{1,})([1-9]+)$/, '<span class="parse-error">$1</span>$2'); 25489 n = n.replace(/^(0{1,})(0)$/, '<span class="parse-error">$1</span>$2'); 25490 return n; 25491 } 25492 /* 25493 * A helper function to compact an array 25494 */ 25495 function compact(address, slice) { 25496 const s1 = []; 25497 const s2 = []; 25498 let i; 25499 for (i = 0; i < address.length; i++) { 25500 if (i < slice[0]) { 25501 s1.push(address[i]); 25502 } 25503 else if (i > slice[1]) { 25504 s2.push(address[i]); 25505 } 25506 } 25507 return s1.concat(['compact']).concat(s2); 25508 } 25509 function paddedHex(octet) { 25510 return (0, sprintf_js_1.sprintf)('%04x', parseInt(octet, 16)); 25511 } 25512 function unsignByte(b) { 25513 // eslint-disable-next-line no-bitwise 25514 return b & 0xff; 25515 } 25516 /** 25517 * Represents an IPv6 address 25518 * @class Address6 25519 * @param {string} address - An IPv6 address string 25520 * @param {number} [groups=8] - How many octets to parse 25521 * @example 25522 * var address = new Address6('2001::/32'); 25523 */ 25524 class Address6 { 25525 constructor(address, optionalGroups) { 25526 this.addressMinusSuffix = ''; 25527 this.parsedSubnet = ''; 25528 this.subnet = '/128'; 25529 this.subnetMask = 128; 25530 this.v4 = false; 25531 this.zone = ''; 25532 // #region Attributes 25533 /** 25534 * Returns true if the given address is in the subnet of the current address 25535 * @memberof Address6 25536 * @instance 25537 * @returns {boolean} 25538 */ 25539 this.isInSubnet = common.isInSubnet; 25540 /** 25541 * Returns true if the address is correct, false otherwise 25542 * @memberof Address6 25543 * @instance 25544 * @returns {boolean} 25545 */ 25546 this.isCorrect = common.isCorrect(constants6.BITS); 25547 if (optionalGroups === undefined) { 25548 this.groups = constants6.GROUPS; 25549 } 25550 else { 25551 this.groups = optionalGroups; 25552 } 25553 this.address = address; 25554 const subnet = constants6.RE_SUBNET_STRING.exec(address); 25555 if (subnet) { 25556 this.parsedSubnet = subnet[0].replace('/', ''); 25557 this.subnetMask = parseInt(this.parsedSubnet, 10); 25558 this.subnet = `/${this.subnetMask}`; 25559 if (Number.isNaN(this.subnetMask) || 25560 this.subnetMask < 0 || 25561 this.subnetMask > constants6.BITS) { 25562 throw new address_error_1.AddressError('Invalid subnet mask.'); 25563 } 25564 address = address.replace(constants6.RE_SUBNET_STRING, ''); 25565 } 25566 else if (/\//.test(address)) { 25567 throw new address_error_1.AddressError('Invalid subnet mask.'); 25568 } 25569 const zone = constants6.RE_ZONE_STRING.exec(address); 25570 if (zone) { 25571 this.zone = zone[0]; 25572 address = address.replace(constants6.RE_ZONE_STRING, ''); 25573 } 25574 this.addressMinusSuffix = address; 25575 this.parsedAddress = this.parse(this.addressMinusSuffix); 25576 } 25577 static isValid(address) { 25578 try { 25579 // eslint-disable-next-line no-new 25580 new Address6(address); 25581 return true; 25582 } 25583 catch (e) { 25584 return false; 25585 } 25586 } 25587 /** 25588 * Convert a BigInteger to a v6 address object 25589 * @memberof Address6 25590 * @static 25591 * @param {BigInteger} bigInteger - a BigInteger to convert 25592 * @returns {Address6} 25593 * @example 25594 * var bigInteger = new BigInteger('1000000000000'); 25595 * var address = Address6.fromBigInteger(bigInteger); 25596 * address.correctForm(); // '::e8:d4a5:1000' 25597 */ 25598 static fromBigInteger(bigInteger) { 25599 const hex = bigInteger.toString(16).padStart(32, '0'); 25600 const groups = []; 25601 let i; 25602 for (i = 0; i < constants6.GROUPS; i++) { 25603 groups.push(hex.slice(i * 4, (i + 1) * 4)); 25604 } 25605 return new Address6(groups.join(':')); 25606 } 25607 /** 25608 * Convert a URL (with optional port number) to an address object 25609 * @memberof Address6 25610 * @static 25611 * @param {string} url - a URL with optional port number 25612 * @example 25613 * var addressAndPort = Address6.fromURL('http://[ffff::]:8080/foo/'); 25614 * addressAndPort.address.correctForm(); // 'ffff::' 25615 * addressAndPort.port; // 8080 25616 */ 25617 static fromURL(url) { 25618 let host; 25619 let port = null; 25620 let result; 25621 // If we have brackets parse them and find a port 25622 if (url.indexOf('[') !== -1 && url.indexOf(']:') !== -1) { 25623 result = constants6.RE_URL_WITH_PORT.exec(url); 25624 if (result === null) { 25625 return { 25626 error: 'failed to parse address with port', 25627 address: null, 25628 port: null, 25629 }; 25630 } 25631 host = result[1]; 25632 port = result[2]; 25633 // If there's a URL extract the address 25634 } 25635 else if (url.indexOf('/') !== -1) { 25636 // Remove the protocol prefix 25637 url = url.replace(/^[a-z0-9]+:\/\//, ''); 25638 // Parse the address 25639 result = constants6.RE_URL.exec(url); 25640 if (result === null) { 25641 return { 25642 error: 'failed to parse address from URL', 25643 address: null, 25644 port: null, 25645 }; 25646 } 25647 host = result[1]; 25648 // Otherwise just assign the URL to the host and let the library parse it 25649 } 25650 else { 25651 host = url; 25652 } 25653 // If there's a port convert it to an integer 25654 if (port) { 25655 port = parseInt(port, 10); 25656 // squelch out of range ports 25657 if (port < 0 || port > 65536) { 25658 port = null; 25659 } 25660 } 25661 else { 25662 // Standardize `undefined` to `null` 25663 port = null; 25664 } 25665 return { 25666 address: new Address6(host), 25667 port, 25668 }; 25669 } 25670 /** 25671 * Create an IPv6-mapped address given an IPv4 address 25672 * @memberof Address6 25673 * @static 25674 * @param {string} address - An IPv4 address string 25675 * @returns {Address6} 25676 * @example 25677 * var address = Address6.fromAddress4('192.168.0.1'); 25678 * address.correctForm(); // '::ffff:c0a8:1' 25679 * address.to4in6(); // '::ffff:192.168.0.1' 25680 */ 25681 static fromAddress4(address) { 25682 const address4 = new ipv4_1.Address4(address); 25683 const mask6 = constants6.BITS - (constants4.BITS - address4.subnetMask); 25684 return new Address6(`::ffff:${address4.correctForm()}/${mask6}`); 25685 } 25686 /** 25687 * Return an address from ip6.arpa form 25688 * @memberof Address6 25689 * @static 25690 * @param {string} arpaFormAddress - an 'ip6.arpa' form address 25691 * @returns {Adress6} 25692 * @example 25693 * var address = Address6.fromArpa(e.f.f.f.3.c.2.6.f.f.f.e.6.6.8.e.1.0.6.7.9.4.e.c.0.0.0.0.1.0.0.2.ip6.arpa.) 25694 * address.correctForm(); // '2001:0:ce49:7601:e866:efff:62c3:fffe' 25695 */ 25696 static fromArpa(arpaFormAddress) { 25697 // remove ending ".ip6.arpa." or just "." 25698 let address = arpaFormAddress.replace(/(\.ip6\.arpa)?\.$/, ''); 25699 const semicolonAmount = 7; 25700 // correct ip6.arpa form with ending removed will be 63 characters 25701 if (address.length !== 63) { 25702 throw new address_error_1.AddressError("Invalid 'ip6.arpa' form."); 25703 } 25704 const parts = address.split('.').reverse(); 25705 for (let i = semicolonAmount; i > 0; i--) { 25706 const insertIndex = i * 4; 25707 parts.splice(insertIndex, 0, ':'); 25708 } 25709 address = parts.join(''); 25710 return new Address6(address); 25711 } 25712 /** 25713 * Return the Microsoft UNC transcription of the address 25714 * @memberof Address6 25715 * @instance 25716 * @returns {String} the Microsoft UNC transcription of the address 25717 */ 25718 microsoftTranscription() { 25719 return (0, sprintf_js_1.sprintf)('%s.ipv6-literal.net', this.correctForm().replace(/:/g, '-')); 25720 } 25721 /** 25722 * Return the first n bits of the address, defaulting to the subnet mask 25723 * @memberof Address6 25724 * @instance 25725 * @param {number} [mask=subnet] - the number of bits to mask 25726 * @returns {String} the first n bits of the address as a string 25727 */ 25728 mask(mask = this.subnetMask) { 25729 return this.getBitsBase2(0, mask); 25730 } 25731 /** 25732 * Return the number of possible subnets of a given size in the address 25733 * @memberof Address6 25734 * @instance 25735 * @param {number} [size=128] - the subnet size 25736 * @returns {String} 25737 */ 25738 // TODO: probably useful to have a numeric version of this too 25739 possibleSubnets(subnetSize = 128) { 25740 const availableBits = constants6.BITS - this.subnetMask; 25741 const subnetBits = Math.abs(subnetSize - constants6.BITS); 25742 const subnetPowers = availableBits - subnetBits; 25743 if (subnetPowers < 0) { 25744 return '0'; 25745 } 25746 return addCommas(new jsbn_1.BigInteger('2', 10).pow(subnetPowers).toString(10)); 25747 } 25748 /** 25749 * Helper function getting start address. 25750 * @memberof Address6 25751 * @instance 25752 * @returns {BigInteger} 25753 */ 25754 _startAddress() { 25755 return new jsbn_1.BigInteger(this.mask() + '0'.repeat(constants6.BITS - this.subnetMask), 2); 25756 } 25757 /** 25758 * The first address in the range given by this address' subnet 25759 * Often referred to as the Network Address. 25760 * @memberof Address6 25761 * @instance 25762 * @returns {Address6} 25763 */ 25764 startAddress() { 25765 return Address6.fromBigInteger(this._startAddress()); 25766 } 25767 /** 25768 * The first host address in the range given by this address's subnet ie 25769 * the first address after the Network Address 25770 * @memberof Address6 25771 * @instance 25772 * @returns {Address6} 25773 */ 25774 startAddressExclusive() { 25775 const adjust = new jsbn_1.BigInteger('1'); 25776 return Address6.fromBigInteger(this._startAddress().add(adjust)); 25777 } 25778 /** 25779 * Helper function getting end address. 25780 * @memberof Address6 25781 * @instance 25782 * @returns {BigInteger} 25783 */ 25784 _endAddress() { 25785 return new jsbn_1.BigInteger(this.mask() + '1'.repeat(constants6.BITS - this.subnetMask), 2); 25786 } 25787 /** 25788 * The last address in the range given by this address' subnet 25789 * Often referred to as the Broadcast 25790 * @memberof Address6 25791 * @instance 25792 * @returns {Address6} 25793 */ 25794 endAddress() { 25795 return Address6.fromBigInteger(this._endAddress()); 25796 } 25797 /** 25798 * The last host address in the range given by this address's subnet ie 25799 * the last address prior to the Broadcast Address 25800 * @memberof Address6 25801 * @instance 25802 * @returns {Address6} 25803 */ 25804 endAddressExclusive() { 25805 const adjust = new jsbn_1.BigInteger('1'); 25806 return Address6.fromBigInteger(this._endAddress().subtract(adjust)); 25807 } 25808 /** 25809 * Return the scope of the address 25810 * @memberof Address6 25811 * @instance 25812 * @returns {String} 25813 */ 25814 getScope() { 25815 let scope = constants6.SCOPES[this.getBits(12, 16).intValue()]; 25816 if (this.getType() === 'Global unicast' && scope !== 'Link local') { 25817 scope = 'Global'; 25818 } 25819 return scope || 'Unknown'; 25820 } 25821 /** 25822 * Return the type of the address 25823 * @memberof Address6 25824 * @instance 25825 * @returns {String} 25826 */ 25827 getType() { 25828 for (const subnet of Object.keys(constants6.TYPES)) { 25829 if (this.isInSubnet(new Address6(subnet))) { 25830 return constants6.TYPES[subnet]; 25831 } 25832 } 25833 return 'Global unicast'; 25834 } 25835 /** 25836 * Return the bits in the given range as a BigInteger 25837 * @memberof Address6 25838 * @instance 25839 * @returns {BigInteger} 25840 */ 25841 getBits(start, end) { 25842 return new jsbn_1.BigInteger(this.getBitsBase2(start, end), 2); 25843 } 25844 /** 25845 * Return the bits in the given range as a base-2 string 25846 * @memberof Address6 25847 * @instance 25848 * @returns {String} 25849 */ 25850 getBitsBase2(start, end) { 25851 return this.binaryZeroPad().slice(start, end); 25852 } 25853 /** 25854 * Return the bits in the given range as a base-16 string 25855 * @memberof Address6 25856 * @instance 25857 * @returns {String} 25858 */ 25859 getBitsBase16(start, end) { 25860 const length = end - start; 25861 if (length % 4 !== 0) { 25862 throw new Error('Length of bits to retrieve must be divisible by four'); 25863 } 25864 return this.getBits(start, end) 25865 .toString(16) 25866 .padStart(length / 4, '0'); 25867 } 25868 /** 25869 * Return the bits that are set past the subnet mask length 25870 * @memberof Address6 25871 * @instance 25872 * @returns {String} 25873 */ 25874 getBitsPastSubnet() { 25875 return this.getBitsBase2(this.subnetMask, constants6.BITS); 25876 } 25877 /** 25878 * Return the reversed ip6.arpa form of the address 25879 * @memberof Address6 25880 * @param {Object} options 25881 * @param {boolean} options.omitSuffix - omit the "ip6.arpa" suffix 25882 * @instance 25883 * @returns {String} 25884 */ 25885 reverseForm(options) { 25886 if (!options) { 25887 options = {}; 25888 } 25889 const characters = Math.floor(this.subnetMask / 4); 25890 const reversed = this.canonicalForm() 25891 .replace(/:/g, '') 25892 .split('') 25893 .slice(0, characters) 25894 .reverse() 25895 .join('.'); 25896 if (characters > 0) { 25897 if (options.omitSuffix) { 25898 return reversed; 25899 } 25900 return (0, sprintf_js_1.sprintf)('%s.ip6.arpa.', reversed); 25901 } 25902 if (options.omitSuffix) { 25903 return ''; 25904 } 25905 return 'ip6.arpa.'; 25906 } 25907 /** 25908 * Return the correct form of the address 25909 * @memberof Address6 25910 * @instance 25911 * @returns {String} 25912 */ 25913 correctForm() { 25914 let i; 25915 let groups = []; 25916 let zeroCounter = 0; 25917 const zeroes = []; 25918 for (i = 0; i < this.parsedAddress.length; i++) { 25919 const value = parseInt(this.parsedAddress[i], 16); 25920 if (value === 0) { 25921 zeroCounter++; 25922 } 25923 if (value !== 0 && zeroCounter > 0) { 25924 if (zeroCounter > 1) { 25925 zeroes.push([i - zeroCounter, i - 1]); 25926 } 25927 zeroCounter = 0; 25928 } 25929 } 25930 // Do we end with a string of zeroes? 25931 if (zeroCounter > 1) { 25932 zeroes.push([this.parsedAddress.length - zeroCounter, this.parsedAddress.length - 1]); 25933 } 25934 const zeroLengths = zeroes.map((n) => n[1] - n[0] + 1); 25935 if (zeroes.length > 0) { 25936 const index = zeroLengths.indexOf(Math.max(...zeroLengths)); 25937 groups = compact(this.parsedAddress, zeroes[index]); 25938 } 25939 else { 25940 groups = this.parsedAddress; 25941 } 25942 for (i = 0; i < groups.length; i++) { 25943 if (groups[i] !== 'compact') { 25944 groups[i] = parseInt(groups[i], 16).toString(16); 25945 } 25946 } 25947 let correct = groups.join(':'); 25948 correct = correct.replace(/^compact$/, '::'); 25949 correct = correct.replace(/^compact|compact$/, ':'); 25950 correct = correct.replace(/compact/, ''); 25951 return correct; 25952 } 25953 /** 25954 * Return a zero-padded base-2 string representation of the address 25955 * @memberof Address6 25956 * @instance 25957 * @returns {String} 25958 * @example 25959 * var address = new Address6('2001:4860:4001:803::1011'); 25960 * address.binaryZeroPad(); 25961 * // '0010000000000001010010000110000001000000000000010000100000000011 25962 * // 0000000000000000000000000000000000000000000000000001000000010001' 25963 */ 25964 binaryZeroPad() { 25965 return this.bigInteger().toString(2).padStart(constants6.BITS, '0'); 25966 } 25967 // TODO: Improve the semantics of this helper function 25968 parse4in6(address) { 25969 const groups = address.split(':'); 25970 const lastGroup = groups.slice(-1)[0]; 25971 const address4 = lastGroup.match(constants4.RE_ADDRESS); 25972 if (address4) { 25973 this.parsedAddress4 = address4[0]; 25974 this.address4 = new ipv4_1.Address4(this.parsedAddress4); 25975 for (let i = 0; i < this.address4.groups; i++) { 25976 if (/^0[0-9]+/.test(this.address4.parsedAddress[i])) { 25977 throw new address_error_1.AddressError("IPv4 addresses can't have leading zeroes.", address.replace(constants4.RE_ADDRESS, this.address4.parsedAddress.map(spanLeadingZeroes4).join('.'))); 25978 } 25979 } 25980 this.v4 = true; 25981 groups[groups.length - 1] = this.address4.toGroup6(); 25982 address = groups.join(':'); 25983 } 25984 return address; 25985 } 25986 // TODO: Make private? 25987 parse(address) { 25988 address = this.parse4in6(address); 25989 const badCharacters = address.match(constants6.RE_BAD_CHARACTERS); 25990 if (badCharacters) { 25991 throw new address_error_1.AddressError((0, sprintf_js_1.sprintf)('Bad character%s detected in address: %s', badCharacters.length > 1 ? 's' : '', badCharacters.join('')), address.replace(constants6.RE_BAD_CHARACTERS, '<span class="parse-error">$1</span>')); 25992 } 25993 const badAddress = address.match(constants6.RE_BAD_ADDRESS); 25994 if (badAddress) { 25995 throw new address_error_1.AddressError((0, sprintf_js_1.sprintf)('Address failed regex: %s', badAddress.join('')), address.replace(constants6.RE_BAD_ADDRESS, '<span class="parse-error">$1</span>')); 25996 } 25997 let groups = []; 25998 const halves = address.split('::'); 25999 if (halves.length === 2) { 26000 let first = halves[0].split(':'); 26001 let last = halves[1].split(':'); 26002 if (first.length === 1 && first[0] === '') { 26003 first = []; 26004 } 26005 if (last.length === 1 && last[0] === '') { 26006 last = []; 26007 } 26008 const remaining = this.groups - (first.length + last.length); 26009 if (!remaining) { 26010 throw new address_error_1.AddressError('Error parsing groups'); 26011 } 26012 this.elidedGroups = remaining; 26013 this.elisionBegin = first.length; 26014 this.elisionEnd = first.length + this.elidedGroups; 26015 groups = groups.concat(first); 26016 for (let i = 0; i < remaining; i++) { 26017 groups.push('0'); 26018 } 26019 groups = groups.concat(last); 26020 } 26021 else if (halves.length === 1) { 26022 groups = address.split(':'); 26023 this.elidedGroups = 0; 26024 } 26025 else { 26026 throw new address_error_1.AddressError('Too many :: groups found'); 26027 } 26028 groups = groups.map((group) => (0, sprintf_js_1.sprintf)('%x', parseInt(group, 16))); 26029 if (groups.length !== this.groups) { 26030 throw new address_error_1.AddressError('Incorrect number of groups found'); 26031 } 26032 return groups; 26033 } 26034 /** 26035 * Return the canonical form of the address 26036 * @memberof Address6 26037 * @instance 26038 * @returns {String} 26039 */ 26040 canonicalForm() { 26041 return this.parsedAddress.map(paddedHex).join(':'); 26042 } 26043 /** 26044 * Return the decimal form of the address 26045 * @memberof Address6 26046 * @instance 26047 * @returns {String} 26048 */ 26049 decimal() { 26050 return this.parsedAddress.map((n) => (0, sprintf_js_1.sprintf)('%05d', parseInt(n, 16))).join(':'); 26051 } 26052 /** 26053 * Return the address as a BigInteger 26054 * @memberof Address6 26055 * @instance 26056 * @returns {BigInteger} 26057 */ 26058 bigInteger() { 26059 return new jsbn_1.BigInteger(this.parsedAddress.map(paddedHex).join(''), 16); 26060 } 26061 /** 26062 * Return the last two groups of this address as an IPv4 address string 26063 * @memberof Address6 26064 * @instance 26065 * @returns {Address4} 26066 * @example 26067 * var address = new Address6('2001:4860:4001::1825:bf11'); 26068 * address.to4().correctForm(); // '24.37.191.17' 26069 */ 26070 to4() { 26071 const binary = this.binaryZeroPad().split(''); 26072 return ipv4_1.Address4.fromHex(new jsbn_1.BigInteger(binary.slice(96, 128).join(''), 2).toString(16)); 26073 } 26074 /** 26075 * Return the v4-in-v6 form of the address 26076 * @memberof Address6 26077 * @instance 26078 * @returns {String} 26079 */ 26080 to4in6() { 26081 const address4 = this.to4(); 26082 const address6 = new Address6(this.parsedAddress.slice(0, 6).join(':'), 6); 26083 const correct = address6.correctForm(); 26084 let infix = ''; 26085 if (!/:$/.test(correct)) { 26086 infix = ':'; 26087 } 26088 return correct + infix + address4.address; 26089 } 26090 /** 26091 * Return an object containing the Teredo properties of the address 26092 * @memberof Address6 26093 * @instance 26094 * @returns {Object} 26095 */ 26096 inspectTeredo() { 26097 /* 26098 - Bits 0 to 31 are set to the Teredo prefix (normally 2001:0000::/32). 26099 - Bits 32 to 63 embed the primary IPv4 address of the Teredo server that 26100 is used. 26101 - Bits 64 to 79 can be used to define some flags. Currently only the 26102 higher order bit is used; it is set to 1 if the Teredo client is 26103 located behind a cone NAT, 0 otherwise. For Microsoft's Windows Vista 26104 and Windows Server 2008 implementations, more bits are used. In those 26105 implementations, the format for these 16 bits is "CRAAAAUG AAAAAAAA", 26106 where "C" remains the "Cone" flag. The "R" bit is reserved for future 26107 use. The "U" bit is for the Universal/Local flag (set to 0). The "G" bit 26108 is Individual/Group flag (set to 0). The A bits are set to a 12-bit 26109 randomly generated number chosen by the Teredo client to introduce 26110 additional protection for the Teredo node against IPv6-based scanning 26111 attacks. 26112 - Bits 80 to 95 contains the obfuscated UDP port number. This is the 26113 port number that is mapped by the NAT to the Teredo client with all 26114 bits inverted. 26115 - Bits 96 to 127 contains the obfuscated IPv4 address. This is the 26116 public IPv4 address of the NAT with all bits inverted. 26117 */ 26118 const prefix = this.getBitsBase16(0, 32); 26119 const udpPort = this.getBits(80, 96).xor(new jsbn_1.BigInteger('ffff', 16)).toString(); 26120 const server4 = ipv4_1.Address4.fromHex(this.getBitsBase16(32, 64)); 26121 const client4 = ipv4_1.Address4.fromHex(this.getBits(96, 128).xor(new jsbn_1.BigInteger('ffffffff', 16)).toString(16)); 26122 const flags = this.getBits(64, 80); 26123 const flagsBase2 = this.getBitsBase2(64, 80); 26124 const coneNat = flags.testBit(15); 26125 const reserved = flags.testBit(14); 26126 const groupIndividual = flags.testBit(8); 26127 const universalLocal = flags.testBit(9); 26128 const nonce = new jsbn_1.BigInteger(flagsBase2.slice(2, 6) + flagsBase2.slice(8, 16), 2).toString(10); 26129 return { 26130 prefix: (0, sprintf_js_1.sprintf)('%s:%s', prefix.slice(0, 4), prefix.slice(4, 8)), 26131 server4: server4.address, 26132 client4: client4.address, 26133 flags: flagsBase2, 26134 coneNat, 26135 microsoft: { 26136 reserved, 26137 universalLocal, 26138 groupIndividual, 26139 nonce, 26140 }, 26141 udpPort, 26142 }; 26143 } 26144 /** 26145 * Return an object containing the 6to4 properties of the address 26146 * @memberof Address6 26147 * @instance 26148 * @returns {Object} 26149 */ 26150 inspect6to4() { 26151 /* 26152 - Bits 0 to 15 are set to the 6to4 prefix (2002::/16). 26153 - Bits 16 to 48 embed the IPv4 address of the 6to4 gateway that is used. 26154 */ 26155 const prefix = this.getBitsBase16(0, 16); 26156 const gateway = ipv4_1.Address4.fromHex(this.getBitsBase16(16, 48)); 26157 return { 26158 prefix: (0, sprintf_js_1.sprintf)('%s', prefix.slice(0, 4)), 26159 gateway: gateway.address, 26160 }; 26161 } 26162 /** 26163 * Return a v6 6to4 address from a v6 v4inv6 address 26164 * @memberof Address6 26165 * @instance 26166 * @returns {Address6} 26167 */ 26168 to6to4() { 26169 if (!this.is4()) { 26170 return null; 26171 } 26172 const addr6to4 = [ 26173 '2002', 26174 this.getBitsBase16(96, 112), 26175 this.getBitsBase16(112, 128), 26176 '', 26177 '/16', 26178 ].join(':'); 26179 return new Address6(addr6to4); 26180 } 26181 /** 26182 * Return a byte array 26183 * @memberof Address6 26184 * @instance 26185 * @returns {Array} 26186 */ 26187 toByteArray() { 26188 const byteArray = this.bigInteger().toByteArray(); 26189 // work around issue where `toByteArray` returns a leading 0 element 26190 if (byteArray.length === 17 && byteArray[0] === 0) { 26191 return byteArray.slice(1); 26192 } 26193 return byteArray; 26194 } 26195 /** 26196 * Return an unsigned byte array 26197 * @memberof Address6 26198 * @instance 26199 * @returns {Array} 26200 */ 26201 toUnsignedByteArray() { 26202 return this.toByteArray().map(unsignByte); 26203 } 26204 /** 26205 * Convert a byte array to an Address6 object 26206 * @memberof Address6 26207 * @static 26208 * @returns {Address6} 26209 */ 26210 static fromByteArray(bytes) { 26211 return this.fromUnsignedByteArray(bytes.map(unsignByte)); 26212 } 26213 /** 26214 * Convert an unsigned byte array to an Address6 object 26215 * @memberof Address6 26216 * @static 26217 * @returns {Address6} 26218 */ 26219 static fromUnsignedByteArray(bytes) { 26220 const BYTE_MAX = new jsbn_1.BigInteger('256', 10); 26221 let result = new jsbn_1.BigInteger('0', 10); 26222 let multiplier = new jsbn_1.BigInteger('1', 10); 26223 for (let i = bytes.length - 1; i >= 0; i--) { 26224 result = result.add(multiplier.multiply(new jsbn_1.BigInteger(bytes[i].toString(10), 10))); 26225 multiplier = multiplier.multiply(BYTE_MAX); 26226 } 26227 return Address6.fromBigInteger(result); 26228 } 26229 /** 26230 * Returns true if the address is in the canonical form, false otherwise 26231 * @memberof Address6 26232 * @instance 26233 * @returns {boolean} 26234 */ 26235 isCanonical() { 26236 return this.addressMinusSuffix === this.canonicalForm(); 26237 } 26238 /** 26239 * Returns true if the address is a link local address, false otherwise 26240 * @memberof Address6 26241 * @instance 26242 * @returns {boolean} 26243 */ 26244 isLinkLocal() { 26245 // Zeroes are required, i.e. we can't check isInSubnet with 'fe80::/10' 26246 if (this.getBitsBase2(0, 64) === 26247 '1111111010000000000000000000000000000000000000000000000000000000') { 26248 return true; 26249 } 26250 return false; 26251 } 26252 /** 26253 * Returns true if the address is a multicast address, false otherwise 26254 * @memberof Address6 26255 * @instance 26256 * @returns {boolean} 26257 */ 26258 isMulticast() { 26259 return this.getType() === 'Multicast'; 26260 } 26261 /** 26262 * Returns true if the address is a v4-in-v6 address, false otherwise 26263 * @memberof Address6 26264 * @instance 26265 * @returns {boolean} 26266 */ 26267 is4() { 26268 return this.v4; 26269 } 26270 /** 26271 * Returns true if the address is a Teredo address, false otherwise 26272 * @memberof Address6 26273 * @instance 26274 * @returns {boolean} 26275 */ 26276 isTeredo() { 26277 return this.isInSubnet(new Address6('2001::/32')); 26278 } 26279 /** 26280 * Returns true if the address is a 6to4 address, false otherwise 26281 * @memberof Address6 26282 * @instance 26283 * @returns {boolean} 26284 */ 26285 is6to4() { 26286 return this.isInSubnet(new Address6('2002::/16')); 26287 } 26288 /** 26289 * Returns true if the address is a loopback address, false otherwise 26290 * @memberof Address6 26291 * @instance 26292 * @returns {boolean} 26293 */ 26294 isLoopback() { 26295 return this.getType() === 'Loopback'; 26296 } 26297 // #endregion 26298 // #region HTML 26299 /** 26300 * @returns {String} the address in link form with a default port of 80 26301 */ 26302 href(optionalPort) { 26303 if (optionalPort === undefined) { 26304 optionalPort = ''; 26305 } 26306 else { 26307 optionalPort = (0, sprintf_js_1.sprintf)(':%s', optionalPort); 26308 } 26309 return (0, sprintf_js_1.sprintf)('http://[%s]%s/', this.correctForm(), optionalPort); 26310 } 26311 /** 26312 * @returns {String} a link suitable for conveying the address via a URL hash 26313 */ 26314 link(options) { 26315 if (!options) { 26316 options = {}; 26317 } 26318 if (options.className === undefined) { 26319 options.className = ''; 26320 } 26321 if (options.prefix === undefined) { 26322 options.prefix = '/#address='; 26323 } 26324 if (options.v4 === undefined) { 26325 options.v4 = false; 26326 } 26327 let formFunction = this.correctForm; 26328 if (options.v4) { 26329 formFunction = this.to4in6; 26330 } 26331 if (options.className) { 26332 return (0, sprintf_js_1.sprintf)('<a href="%1$s%2$s" class="%3$s">%2$s</a>', options.prefix, formFunction.call(this), options.className); 26333 } 26334 return (0, sprintf_js_1.sprintf)('<a href="%1$s%2$s">%2$s</a>', options.prefix, formFunction.call(this)); 26335 } 26336 /** 26337 * Groups an address 26338 * @returns {String} 26339 */ 26340 group() { 26341 if (this.elidedGroups === 0) { 26342 // The simple case 26343 return helpers.simpleGroup(this.address).join(':'); 26344 } 26345 assert(typeof this.elidedGroups === 'number'); 26346 assert(typeof this.elisionBegin === 'number'); 26347 // The elided case 26348 const output = []; 26349 const [left, right] = this.address.split('::'); 26350 if (left.length) { 26351 output.push(...helpers.simpleGroup(left)); 26352 } 26353 else { 26354 output.push(''); 26355 } 26356 const classes = ['hover-group']; 26357 for (let i = this.elisionBegin; i < this.elisionBegin + this.elidedGroups; i++) { 26358 classes.push((0, sprintf_js_1.sprintf)('group-%d', i)); 26359 } 26360 output.push((0, sprintf_js_1.sprintf)('<span class="%s"></span>', classes.join(' '))); 26361 if (right.length) { 26362 output.push(...helpers.simpleGroup(right, this.elisionEnd)); 26363 } 26364 else { 26365 output.push(''); 26366 } 26367 if (this.is4()) { 26368 assert(this.address4 instanceof ipv4_1.Address4); 26369 output.pop(); 26370 output.push(this.address4.groupForV6()); 26371 } 26372 return output.join(':'); 26373 } 26374 // #endregion 26375 // #region Regular expressions 26376 /** 26377 * Generate a regular expression string that can be used to find or validate 26378 * all variations of this address 26379 * @memberof Address6 26380 * @instance 26381 * @param {boolean} substringSearch 26382 * @returns {string} 26383 */ 26384 regularExpressionString(substringSearch = false) { 26385 let output = []; 26386 // TODO: revisit why this is necessary 26387 const address6 = new Address6(this.correctForm()); 26388 if (address6.elidedGroups === 0) { 26389 // The simple case 26390 output.push((0, regular_expressions_1.simpleRegularExpression)(address6.parsedAddress)); 26391 } 26392 else if (address6.elidedGroups === constants6.GROUPS) { 26393 // A completely elided address 26394 output.push((0, regular_expressions_1.possibleElisions)(constants6.GROUPS)); 26395 } 26396 else { 26397 // A partially elided address 26398 const halves = address6.address.split('::'); 26399 if (halves[0].length) { 26400 output.push((0, regular_expressions_1.simpleRegularExpression)(halves[0].split(':'))); 26401 } 26402 assert(typeof address6.elidedGroups === 'number'); 26403 output.push((0, regular_expressions_1.possibleElisions)(address6.elidedGroups, halves[0].length !== 0, halves[1].length !== 0)); 26404 if (halves[1].length) { 26405 output.push((0, regular_expressions_1.simpleRegularExpression)(halves[1].split(':'))); 26406 } 26407 output = [output.join(':')]; 26408 } 26409 if (!substringSearch) { 26410 output = [ 26411 '(?=^|', 26412 regular_expressions_1.ADDRESS_BOUNDARY, 26413 '|[^\\w\\:])(', 26414 ...output, 26415 ')(?=[^\\w\\:]|', 26416 regular_expressions_1.ADDRESS_BOUNDARY, 26417 '|$)', 26418 ]; 26419 } 26420 return output.join(''); 26421 } 26422 /** 26423 * Generate a regular expression that can be used to find or validate all 26424 * variations of this address. 26425 * @memberof Address6 26426 * @instance 26427 * @param {boolean} substringSearch 26428 * @returns {RegExp} 26429 */ 26430 regularExpression(substringSearch = false) { 26431 return new RegExp(this.regularExpressionString(substringSearch), 'i'); 26432 } 26433 } 26434 exports.Address6 = Address6; 26435 //# sourceMappingURL=ipv6.js.map 26436 26437 /***/ }), 26438 26439 /***/ 66417: 26440 /***/ ((__unused_webpack_module, exports) => { 26441 26442 "use strict"; 26443 26444 Object.defineProperty(exports, "__esModule", ({ value: true })); 26445 exports.RE_SUBNET_STRING = exports.RE_ADDRESS = exports.GROUPS = exports.BITS = void 0; 26446 exports.BITS = 32; 26447 exports.GROUPS = 4; 26448 exports.RE_ADDRESS = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/g; 26449 exports.RE_SUBNET_STRING = /\/\d{1,2}$/; 26450 //# sourceMappingURL=constants.js.map 26451 26452 /***/ }), 26453 26454 /***/ 31078: 26455 /***/ ((__unused_webpack_module, exports) => { 26456 26457 "use strict"; 26458 26459 Object.defineProperty(exports, "__esModule", ({ value: true })); 26460 exports.RE_URL_WITH_PORT = exports.RE_URL = exports.RE_ZONE_STRING = exports.RE_SUBNET_STRING = exports.RE_BAD_ADDRESS = exports.RE_BAD_CHARACTERS = exports.TYPES = exports.SCOPES = exports.GROUPS = exports.BITS = void 0; 26461 exports.BITS = 128; 26462 exports.GROUPS = 8; 26463 /** 26464 * Represents IPv6 address scopes 26465 * @memberof Address6 26466 * @static 26467 */ 26468 exports.SCOPES = { 26469 0: 'Reserved', 26470 1: 'Interface local', 26471 2: 'Link local', 26472 4: 'Admin local', 26473 5: 'Site local', 26474 8: 'Organization local', 26475 14: 'Global', 26476 15: 'Reserved', 26477 }; 26478 /** 26479 * Represents IPv6 address types 26480 * @memberof Address6 26481 * @static 26482 */ 26483 exports.TYPES = { 26484 'ff01::1/128': 'Multicast (All nodes on this interface)', 26485 'ff01::2/128': 'Multicast (All routers on this interface)', 26486 'ff02::1/128': 'Multicast (All nodes on this link)', 26487 'ff02::2/128': 'Multicast (All routers on this link)', 26488 'ff05::2/128': 'Multicast (All routers in this site)', 26489 'ff02::5/128': 'Multicast (OSPFv3 AllSPF routers)', 26490 'ff02::6/128': 'Multicast (OSPFv3 AllDR routers)', 26491 'ff02::9/128': 'Multicast (RIP routers)', 26492 'ff02::a/128': 'Multicast (EIGRP routers)', 26493 'ff02::d/128': 'Multicast (PIM routers)', 26494 'ff02::16/128': 'Multicast (MLDv2 reports)', 26495 'ff01::fb/128': 'Multicast (mDNSv6)', 26496 'ff02::fb/128': 'Multicast (mDNSv6)', 26497 'ff05::fb/128': 'Multicast (mDNSv6)', 26498 'ff02::1:2/128': 'Multicast (All DHCP servers and relay agents on this link)', 26499 'ff05::1:2/128': 'Multicast (All DHCP servers and relay agents in this site)', 26500 'ff02::1:3/128': 'Multicast (All DHCP servers on this link)', 26501 'ff05::1:3/128': 'Multicast (All DHCP servers in this site)', 26502 '::/128': 'Unspecified', 26503 '::1/128': 'Loopback', 26504 'ff00::/8': 'Multicast', 26505 'fe80::/10': 'Link-local unicast', 26506 }; 26507 /** 26508 * A regular expression that matches bad characters in an IPv6 address 26509 * @memberof Address6 26510 * @static 26511 */ 26512 exports.RE_BAD_CHARACTERS = /([^0-9a-f:/%])/gi; 26513 /** 26514 * A regular expression that matches an incorrect IPv6 address 26515 * @memberof Address6 26516 * @static 26517 */ 26518 exports.RE_BAD_ADDRESS = /([0-9a-f]{5,}|:{3,}|[^:]:$|^:[^:]|\/$)/gi; 26519 /** 26520 * A regular expression that matches an IPv6 subnet 26521 * @memberof Address6 26522 * @static 26523 */ 26524 exports.RE_SUBNET_STRING = /\/\d{1,3}(?=%|$)/; 26525 /** 26526 * A regular expression that matches an IPv6 zone 26527 * @memberof Address6 26528 * @static 26529 */ 26530 exports.RE_ZONE_STRING = /%.*$/; 26531 exports.RE_URL = new RegExp(/^\[{0,1}([0-9a-f:]+)\]{0,1}/); 26532 exports.RE_URL_WITH_PORT = new RegExp(/\[([0-9a-f:]+)\]:([0-9]{1,5})/); 26533 //# sourceMappingURL=constants.js.map 26534 26535 /***/ }), 26536 26537 /***/ 10945: 26538 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 26539 26540 "use strict"; 26541 26542 Object.defineProperty(exports, "__esModule", ({ value: true })); 26543 exports.simpleGroup = exports.spanLeadingZeroes = exports.spanAll = exports.spanAllZeroes = void 0; 26544 const sprintf_js_1 = __nccwpck_require__(33988); 26545 /** 26546 * @returns {String} the string with all zeroes contained in a <span> 26547 */ 26548 function spanAllZeroes(s) { 26549 return s.replace(/(0+)/g, '<span class="zero">$1</span>'); 26550 } 26551 exports.spanAllZeroes = spanAllZeroes; 26552 /** 26553 * @returns {String} the string with each character contained in a <span> 26554 */ 26555 function spanAll(s, offset = 0) { 26556 const letters = s.split(''); 26557 return letters 26558 .map((n, i) => (0, sprintf_js_1.sprintf)('<span class="digit value-%s position-%d">%s</span>', n, i + offset, spanAllZeroes(n)) // XXX Use #base-2 .value-0 instead? 26559 ) 26560 .join(''); 26561 } 26562 exports.spanAll = spanAll; 26563 function spanLeadingZeroesSimple(group) { 26564 return group.replace(/^(0+)/, '<span class="zero">$1</span>'); 26565 } 26566 /** 26567 * @returns {String} the string with leading zeroes contained in a <span> 26568 */ 26569 function spanLeadingZeroes(address) { 26570 const groups = address.split(':'); 26571 return groups.map((g) => spanLeadingZeroesSimple(g)).join(':'); 26572 } 26573 exports.spanLeadingZeroes = spanLeadingZeroes; 26574 /** 26575 * Groups an address 26576 * @returns {String} a grouped address 26577 */ 26578 function simpleGroup(addressString, offset = 0) { 26579 const groups = addressString.split(':'); 26580 return groups.map((g, i) => { 26581 if (/group-v4/.test(g)) { 26582 return g; 26583 } 26584 return (0, sprintf_js_1.sprintf)('<span class="hover-group group-%d">%s</span>', i + offset, spanLeadingZeroesSimple(g)); 26585 }); 26586 } 26587 exports.simpleGroup = simpleGroup; 26588 //# sourceMappingURL=helpers.js.map 26589 26590 /***/ }), 26591 26592 /***/ 46738: 26593 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 26594 26595 "use strict"; 26596 26597 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 26598 if (k2 === undefined) k2 = k; 26599 var desc = Object.getOwnPropertyDescriptor(m, k); 26600 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 26601 desc = { enumerable: true, get: function() { return m[k]; } }; 26602 } 26603 Object.defineProperty(o, k2, desc); 26604 }) : (function(o, m, k, k2) { 26605 if (k2 === undefined) k2 = k; 26606 o[k2] = m[k]; 26607 })); 26608 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 26609 Object.defineProperty(o, "default", { enumerable: true, value: v }); 26610 }) : function(o, v) { 26611 o["default"] = v; 26612 }); 26613 var __importStar = (this && this.__importStar) || function (mod) { 26614 if (mod && mod.__esModule) return mod; 26615 var result = {}; 26616 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 26617 __setModuleDefault(result, mod); 26618 return result; 26619 }; 26620 Object.defineProperty(exports, "__esModule", ({ value: true })); 26621 exports.possibleElisions = exports.simpleRegularExpression = exports.ADDRESS_BOUNDARY = exports.padGroup = exports.groupPossibilities = void 0; 26622 const v6 = __importStar(__nccwpck_require__(31078)); 26623 const sprintf_js_1 = __nccwpck_require__(33988); 26624 function groupPossibilities(possibilities) { 26625 return (0, sprintf_js_1.sprintf)('(%s)', possibilities.join('|')); 26626 } 26627 exports.groupPossibilities = groupPossibilities; 26628 function padGroup(group) { 26629 if (group.length < 4) { 26630 return (0, sprintf_js_1.sprintf)('0{0,%d}%s', 4 - group.length, group); 26631 } 26632 return group; 26633 } 26634 exports.padGroup = padGroup; 26635 exports.ADDRESS_BOUNDARY = '[^A-Fa-f0-9:]'; 26636 function simpleRegularExpression(groups) { 26637 const zeroIndexes = []; 26638 groups.forEach((group, i) => { 26639 const groupInteger = parseInt(group, 16); 26640 if (groupInteger === 0) { 26641 zeroIndexes.push(i); 26642 } 26643 }); 26644 // You can technically elide a single 0, this creates the regular expressions 26645 // to match that eventuality 26646 const possibilities = zeroIndexes.map((zeroIndex) => groups 26647 .map((group, i) => { 26648 if (i === zeroIndex) { 26649 const elision = i === 0 || i === v6.GROUPS - 1 ? ':' : ''; 26650 return groupPossibilities([padGroup(group), elision]); 26651 } 26652 return padGroup(group); 26653 }) 26654 .join(':')); 26655 // The simplest case 26656 possibilities.push(groups.map(padGroup).join(':')); 26657 return groupPossibilities(possibilities); 26658 } 26659 exports.simpleRegularExpression = simpleRegularExpression; 26660 function possibleElisions(elidedGroups, moreLeft, moreRight) { 26661 const left = moreLeft ? '' : ':'; 26662 const right = moreRight ? '' : ':'; 26663 const possibilities = []; 26664 // 1. elision of everything (::) 26665 if (!moreLeft && !moreRight) { 26666 possibilities.push('::'); 26667 } 26668 // 2. complete elision of the middle 26669 if (moreLeft && moreRight) { 26670 possibilities.push(''); 26671 } 26672 if ((moreRight && !moreLeft) || (!moreRight && moreLeft)) { 26673 // 3. complete elision of one side 26674 possibilities.push(':'); 26675 } 26676 // 4. elision from the left side 26677 possibilities.push((0, sprintf_js_1.sprintf)('%s(:0{1,4}){1,%d}', left, elidedGroups - 1)); 26678 // 5. elision from the right side 26679 possibilities.push((0, sprintf_js_1.sprintf)('(0{1,4}:){1,%d}%s', elidedGroups - 1, right)); 26680 // 6. no elision 26681 possibilities.push((0, sprintf_js_1.sprintf)('(0{1,4}:){%d}0{1,4}', elidedGroups - 1)); 26682 // 7. elision (including sloppy elision) from the middle 26683 for (let groups = 1; groups < elidedGroups - 1; groups++) { 26684 for (let position = 1; position < elidedGroups - groups; position++) { 26685 possibilities.push((0, sprintf_js_1.sprintf)('(0{1,4}:){%d}:(0{1,4}:){%d}0{1,4}', position, elidedGroups - position - groups - 1)); 26686 } 26687 } 26688 return groupPossibilities(possibilities); 26689 } 26690 exports.possibleElisions = possibleElisions; 26691 //# sourceMappingURL=regular-expressions.js.map 26692 26693 /***/ }), 26694 26695 /***/ 85587: 26696 /***/ (function(module, exports) { 26697 26698 (function(){ 26699 26700 // Copyright (c) 2005 Tom Wu 26701 // All Rights Reserved. 26702 // See "LICENSE" for details. 26703 26704 // Basic JavaScript BN library - subset useful for RSA encryption. 26705 26706 // Bits per digit 26707 var dbits; 26708 26709 // JavaScript engine analysis 26710 var canary = 0xdeadbeefcafe; 26711 var j_lm = ((canary&0xffffff)==0xefcafe); 26712 26713 // (public) Constructor 26714 function BigInteger(a,b,c) { 26715 if(a != null) 26716 if("number" == typeof a) this.fromNumber(a,b,c); 26717 else if(b == null && "string" != typeof a) this.fromString(a,256); 26718 else this.fromString(a,b); 26719 } 26720 26721 // return new, unset BigInteger 26722 function nbi() { return new BigInteger(null); } 26723 26724 // am: Compute w_j += (x*this_i), propagate carries, 26725 // c is initial carry, returns final carry. 26726 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue 26727 // We need to select the fastest one that works in this environment. 26728 26729 // am1: use a single mult and divide to get the high bits, 26730 // max digit bits should be 26 because 26731 // max internal value = 2*dvalue^2-2*dvalue (< 2^53) 26732 function am1(i,x,w,j,c,n) { 26733 while(--n >= 0) { 26734 var v = x*this[i++]+w[j]+c; 26735 c = Math.floor(v/0x4000000); 26736 w[j++] = v&0x3ffffff; 26737 } 26738 return c; 26739 } 26740 // am2 avoids a big mult-and-extract completely. 26741 // Max digit bits should be <= 30 because we do bitwise ops 26742 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31) 26743 function am2(i,x,w,j,c,n) { 26744 var xl = x&0x7fff, xh = x>>15; 26745 while(--n >= 0) { 26746 var l = this[i]&0x7fff; 26747 var h = this[i++]>>15; 26748 var m = xh*l+h*xl; 26749 l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff); 26750 c = (l>>>30)+(m>>>15)+xh*h+(c>>>30); 26751 w[j++] = l&0x3fffffff; 26752 } 26753 return c; 26754 } 26755 // Alternately, set max digit bits to 28 since some 26756 // browsers slow down when dealing with 32-bit numbers. 26757 function am3(i,x,w,j,c,n) { 26758 var xl = x&0x3fff, xh = x>>14; 26759 while(--n >= 0) { 26760 var l = this[i]&0x3fff; 26761 var h = this[i++]>>14; 26762 var m = xh*l+h*xl; 26763 l = xl*l+((m&0x3fff)<<14)+w[j]+c; 26764 c = (l>>28)+(m>>14)+xh*h; 26765 w[j++] = l&0xfffffff; 26766 } 26767 return c; 26768 } 26769 var inBrowser = typeof navigator !== "undefined"; 26770 if(inBrowser && j_lm && (navigator.appName == "Microsoft Internet Explorer")) { 26771 BigInteger.prototype.am = am2; 26772 dbits = 30; 26773 } 26774 else if(inBrowser && j_lm && (navigator.appName != "Netscape")) { 26775 BigInteger.prototype.am = am1; 26776 dbits = 26; 26777 } 26778 else { // Mozilla/Netscape seems to prefer am3 26779 BigInteger.prototype.am = am3; 26780 dbits = 28; 26781 } 26782 26783 BigInteger.prototype.DB = dbits; 26784 BigInteger.prototype.DM = ((1<<dbits)-1); 26785 BigInteger.prototype.DV = (1<<dbits); 26786 26787 var BI_FP = 52; 26788 BigInteger.prototype.FV = Math.pow(2,BI_FP); 26789 BigInteger.prototype.F1 = BI_FP-dbits; 26790 BigInteger.prototype.F2 = 2*dbits-BI_FP; 26791 26792 // Digit conversions 26793 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"; 26794 var BI_RC = new Array(); 26795 var rr,vv; 26796 rr = "0".charCodeAt(0); 26797 for(vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv; 26798 rr = "a".charCodeAt(0); 26799 for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv; 26800 rr = "A".charCodeAt(0); 26801 for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv; 26802 26803 function int2char(n) { return BI_RM.charAt(n); } 26804 function intAt(s,i) { 26805 var c = BI_RC[s.charCodeAt(i)]; 26806 return (c==null)?-1:c; 26807 } 26808 26809 // (protected) copy this to r 26810 function bnpCopyTo(r) { 26811 for(var i = this.t-1; i >= 0; --i) r[i] = this[i]; 26812 r.t = this.t; 26813 r.s = this.s; 26814 } 26815 26816 // (protected) set from integer value x, -DV <= x < DV 26817 function bnpFromInt(x) { 26818 this.t = 1; 26819 this.s = (x<0)?-1:0; 26820 if(x > 0) this[0] = x; 26821 else if(x < -1) this[0] = x+this.DV; 26822 else this.t = 0; 26823 } 26824 26825 // return bigint initialized to value 26826 function nbv(i) { var r = nbi(); r.fromInt(i); return r; } 26827 26828 // (protected) set from string and radix 26829 function bnpFromString(s,b) { 26830 var k; 26831 if(b == 16) k = 4; 26832 else if(b == 8) k = 3; 26833 else if(b == 256) k = 8; // byte array 26834 else if(b == 2) k = 1; 26835 else if(b == 32) k = 5; 26836 else if(b == 4) k = 2; 26837 else { this.fromRadix(s,b); return; } 26838 this.t = 0; 26839 this.s = 0; 26840 var i = s.length, mi = false, sh = 0; 26841 while(--i >= 0) { 26842 var x = (k==8)?s[i]&0xff:intAt(s,i); 26843 if(x < 0) { 26844 if(s.charAt(i) == "-") mi = true; 26845 continue; 26846 } 26847 mi = false; 26848 if(sh == 0) 26849 this[this.t++] = x; 26850 else if(sh+k > this.DB) { 26851 this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<<sh; 26852 this[this.t++] = (x>>(this.DB-sh)); 26853 } 26854 else 26855 this[this.t-1] |= x<<sh; 26856 sh += k; 26857 if(sh >= this.DB) sh -= this.DB; 26858 } 26859 if(k == 8 && (s[0]&0x80) != 0) { 26860 this.s = -1; 26861 if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)<<sh; 26862 } 26863 this.clamp(); 26864 if(mi) BigInteger.ZERO.subTo(this,this); 26865 } 26866 26867 // (protected) clamp off excess high words 26868 function bnpClamp() { 26869 var c = this.s&this.DM; 26870 while(this.t > 0 && this[this.t-1] == c) --this.t; 26871 } 26872 26873 // (public) return string representation in given radix 26874 function bnToString(b) { 26875 if(this.s < 0) return "-"+this.negate().toString(b); 26876 var k; 26877 if(b == 16) k = 4; 26878 else if(b == 8) k = 3; 26879 else if(b == 2) k = 1; 26880 else if(b == 32) k = 5; 26881 else if(b == 4) k = 2; 26882 else return this.toRadix(b); 26883 var km = (1<<k)-1, d, m = false, r = "", i = this.t; 26884 var p = this.DB-(i*this.DB)%k; 26885 if(i-- > 0) { 26886 if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); } 26887 while(i >= 0) { 26888 if(p < k) { 26889 d = (this[i]&((1<<p)-1))<<(k-p); 26890 d |= this[--i]>>(p+=this.DB-k); 26891 } 26892 else { 26893 d = (this[i]>>(p-=k))&km; 26894 if(p <= 0) { p += this.DB; --i; } 26895 } 26896 if(d > 0) m = true; 26897 if(m) r += int2char(d); 26898 } 26899 } 26900 return m?r:"0"; 26901 } 26902 26903 // (public) -this 26904 function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; } 26905 26906 // (public) |this| 26907 function bnAbs() { return (this.s<0)?this.negate():this; } 26908 26909 // (public) return + if this > a, - if this < a, 0 if equal 26910 function bnCompareTo(a) { 26911 var r = this.s-a.s; 26912 if(r != 0) return r; 26913 var i = this.t; 26914 r = i-a.t; 26915 if(r != 0) return (this.s<0)?-r:r; 26916 while(--i >= 0) if((r=this[i]-a[i]) != 0) return r; 26917 return 0; 26918 } 26919 26920 // returns bit length of the integer x 26921 function nbits(x) { 26922 var r = 1, t; 26923 if((t=x>>>16) != 0) { x = t; r += 16; } 26924 if((t=x>>8) != 0) { x = t; r += 8; } 26925 if((t=x>>4) != 0) { x = t; r += 4; } 26926 if((t=x>>2) != 0) { x = t; r += 2; } 26927 if((t=x>>1) != 0) { x = t; r += 1; } 26928 return r; 26929 } 26930 26931 // (public) return the number of bits in "this" 26932 function bnBitLength() { 26933 if(this.t <= 0) return 0; 26934 return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM)); 26935 } 26936 26937 // (protected) r = this << n*DB 26938 function bnpDLShiftTo(n,r) { 26939 var i; 26940 for(i = this.t-1; i >= 0; --i) r[i+n] = this[i]; 26941 for(i = n-1; i >= 0; --i) r[i] = 0; 26942 r.t = this.t+n; 26943 r.s = this.s; 26944 } 26945 26946 // (protected) r = this >> n*DB 26947 function bnpDRShiftTo(n,r) { 26948 for(var i = n; i < this.t; ++i) r[i-n] = this[i]; 26949 r.t = Math.max(this.t-n,0); 26950 r.s = this.s; 26951 } 26952 26953 // (protected) r = this << n 26954 function bnpLShiftTo(n,r) { 26955 var bs = n%this.DB; 26956 var cbs = this.DB-bs; 26957 var bm = (1<<cbs)-1; 26958 var ds = Math.floor(n/this.DB), c = (this.s<<bs)&this.DM, i; 26959 for(i = this.t-1; i >= 0; --i) { 26960 r[i+ds+1] = (this[i]>>cbs)|c; 26961 c = (this[i]&bm)<<bs; 26962 } 26963 for(i = ds-1; i >= 0; --i) r[i] = 0; 26964 r[ds] = c; 26965 r.t = this.t+ds+1; 26966 r.s = this.s; 26967 r.clamp(); 26968 } 26969 26970 // (protected) r = this >> n 26971 function bnpRShiftTo(n,r) { 26972 r.s = this.s; 26973 var ds = Math.floor(n/this.DB); 26974 if(ds >= this.t) { r.t = 0; return; } 26975 var bs = n%this.DB; 26976 var cbs = this.DB-bs; 26977 var bm = (1<<bs)-1; 26978 r[0] = this[ds]>>bs; 26979 for(var i = ds+1; i < this.t; ++i) { 26980 r[i-ds-1] |= (this[i]&bm)<<cbs; 26981 r[i-ds] = this[i]>>bs; 26982 } 26983 if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<<cbs; 26984 r.t = this.t-ds; 26985 r.clamp(); 26986 } 26987 26988 // (protected) r = this - a 26989 function bnpSubTo(a,r) { 26990 var i = 0, c = 0, m = Math.min(a.t,this.t); 26991 while(i < m) { 26992 c += this[i]-a[i]; 26993 r[i++] = c&this.DM; 26994 c >>= this.DB; 26995 } 26996 if(a.t < this.t) { 26997 c -= a.s; 26998 while(i < this.t) { 26999 c += this[i]; 27000 r[i++] = c&this.DM; 27001 c >>= this.DB; 27002 } 27003 c += this.s; 27004 } 27005 else { 27006 c += this.s; 27007 while(i < a.t) { 27008 c -= a[i]; 27009 r[i++] = c&this.DM; 27010 c >>= this.DB; 27011 } 27012 c -= a.s; 27013 } 27014 r.s = (c<0)?-1:0; 27015 if(c < -1) r[i++] = this.DV+c; 27016 else if(c > 0) r[i++] = c; 27017 r.t = i; 27018 r.clamp(); 27019 } 27020 27021 // (protected) r = this * a, r != this,a (HAC 14.12) 27022 // "this" should be the larger one if appropriate. 27023 function bnpMultiplyTo(a,r) { 27024 var x = this.abs(), y = a.abs(); 27025 var i = x.t; 27026 r.t = i+y.t; 27027 while(--i >= 0) r[i] = 0; 27028 for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t); 27029 r.s = 0; 27030 r.clamp(); 27031 if(this.s != a.s) BigInteger.ZERO.subTo(r,r); 27032 } 27033 27034 // (protected) r = this^2, r != this (HAC 14.16) 27035 function bnpSquareTo(r) { 27036 var x = this.abs(); 27037 var i = r.t = 2*x.t; 27038 while(--i >= 0) r[i] = 0; 27039 for(i = 0; i < x.t-1; ++i) { 27040 var c = x.am(i,x[i],r,2*i,0,1); 27041 if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) { 27042 r[i+x.t] -= x.DV; 27043 r[i+x.t+1] = 1; 27044 } 27045 } 27046 if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1); 27047 r.s = 0; 27048 r.clamp(); 27049 } 27050 27051 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20) 27052 // r != q, this != m. q or r may be null. 27053 function bnpDivRemTo(m,q,r) { 27054 var pm = m.abs(); 27055 if(pm.t <= 0) return; 27056 var pt = this.abs(); 27057 if(pt.t < pm.t) { 27058 if(q != null) q.fromInt(0); 27059 if(r != null) this.copyTo(r); 27060 return; 27061 } 27062 if(r == null) r = nbi(); 27063 var y = nbi(), ts = this.s, ms = m.s; 27064 var nsh = this.DB-nbits(pm[pm.t-1]); // normalize modulus 27065 if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); } 27066 else { pm.copyTo(y); pt.copyTo(r); } 27067 var ys = y.t; 27068 var y0 = y[ys-1]; 27069 if(y0 == 0) return; 27070 var yt = y0*(1<<this.F1)+((ys>1)?y[ys-2]>>this.F2:0); 27071 var d1 = this.FV/yt, d2 = (1<<this.F1)/yt, e = 1<<this.F2; 27072 var i = r.t, j = i-ys, t = (q==null)?nbi():q; 27073 y.dlShiftTo(j,t); 27074 if(r.compareTo(t) >= 0) { 27075 r[r.t++] = 1; 27076 r.subTo(t,r); 27077 } 27078 BigInteger.ONE.dlShiftTo(ys,t); 27079 t.subTo(y,y); // "negative" y so we can replace sub with am later 27080 while(y.t < ys) y[y.t++] = 0; 27081 while(--j >= 0) { 27082 // Estimate quotient digit 27083 var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2); 27084 if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out 27085 y.dlShiftTo(j,t); 27086 r.subTo(t,r); 27087 while(r[i] < --qd) r.subTo(t,r); 27088 } 27089 } 27090 if(q != null) { 27091 r.drShiftTo(ys,q); 27092 if(ts != ms) BigInteger.ZERO.subTo(q,q); 27093 } 27094 r.t = ys; 27095 r.clamp(); 27096 if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder 27097 if(ts < 0) BigInteger.ZERO.subTo(r,r); 27098 } 27099 27100 // (public) this mod a 27101 function bnMod(a) { 27102 var r = nbi(); 27103 this.abs().divRemTo(a,null,r); 27104 if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r); 27105 return r; 27106 } 27107 27108 // Modular reduction using "classic" algorithm 27109 function Classic(m) { this.m = m; } 27110 function cConvert(x) { 27111 if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m); 27112 else return x; 27113 } 27114 function cRevert(x) { return x; } 27115 function cReduce(x) { x.divRemTo(this.m,null,x); } 27116 function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } 27117 function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); } 27118 27119 Classic.prototype.convert = cConvert; 27120 Classic.prototype.revert = cRevert; 27121 Classic.prototype.reduce = cReduce; 27122 Classic.prototype.mulTo = cMulTo; 27123 Classic.prototype.sqrTo = cSqrTo; 27124 27125 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction 27126 // justification: 27127 // xy == 1 (mod m) 27128 // xy = 1+km 27129 // xy(2-xy) = (1+km)(1-km) 27130 // x[y(2-xy)] = 1-k^2m^2 27131 // x[y(2-xy)] == 1 (mod m^2) 27132 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2 27133 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded. 27134 // JS multiply "overflows" differently from C/C++, so care is needed here. 27135 function bnpInvDigit() { 27136 if(this.t < 1) return 0; 27137 var x = this[0]; 27138 if((x&1) == 0) return 0; 27139 var y = x&3; // y == 1/x mod 2^2 27140 y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4 27141 y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8 27142 y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16 27143 // last step - calculate inverse mod DV directly; 27144 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints 27145 y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits 27146 // we really want the negative inverse, and -DV < y < DV 27147 return (y>0)?this.DV-y:-y; 27148 } 27149 27150 // Montgomery reduction 27151 function Montgomery(m) { 27152 this.m = m; 27153 this.mp = m.invDigit(); 27154 this.mpl = this.mp&0x7fff; 27155 this.mph = this.mp>>15; 27156 this.um = (1<<(m.DB-15))-1; 27157 this.mt2 = 2*m.t; 27158 } 27159 27160 // xR mod m 27161 function montConvert(x) { 27162 var r = nbi(); 27163 x.abs().dlShiftTo(this.m.t,r); 27164 r.divRemTo(this.m,null,r); 27165 if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r); 27166 return r; 27167 } 27168 27169 // x/R mod m 27170 function montRevert(x) { 27171 var r = nbi(); 27172 x.copyTo(r); 27173 this.reduce(r); 27174 return r; 27175 } 27176 27177 // x = x/R mod m (HAC 14.32) 27178 function montReduce(x) { 27179 while(x.t <= this.mt2) // pad x so am has enough room later 27180 x[x.t++] = 0; 27181 for(var i = 0; i < this.m.t; ++i) { 27182 // faster way of calculating u0 = x[i]*mp mod DV 27183 var j = x[i]&0x7fff; 27184 var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM; 27185 // use am to combine the multiply-shift-add into one call 27186 j = i+this.m.t; 27187 x[j] += this.m.am(0,u0,x,i,0,this.m.t); 27188 // propagate carry 27189 while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; } 27190 } 27191 x.clamp(); 27192 x.drShiftTo(this.m.t,x); 27193 if(x.compareTo(this.m) >= 0) x.subTo(this.m,x); 27194 } 27195 27196 // r = "x^2/R mod m"; x != r 27197 function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); } 27198 27199 // r = "xy/R mod m"; x,y != r 27200 function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } 27201 27202 Montgomery.prototype.convert = montConvert; 27203 Montgomery.prototype.revert = montRevert; 27204 Montgomery.prototype.reduce = montReduce; 27205 Montgomery.prototype.mulTo = montMulTo; 27206 Montgomery.prototype.sqrTo = montSqrTo; 27207 27208 // (protected) true iff this is even 27209 function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; } 27210 27211 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79) 27212 function bnpExp(e,z) { 27213 if(e > 0xffffffff || e < 1) return BigInteger.ONE; 27214 var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1; 27215 g.copyTo(r); 27216 while(--i >= 0) { 27217 z.sqrTo(r,r2); 27218 if((e&(1<<i)) > 0) z.mulTo(r2,g,r); 27219 else { var t = r; r = r2; r2 = t; } 27220 } 27221 return z.revert(r); 27222 } 27223 27224 // (public) this^e % m, 0 <= e < 2^32 27225 function bnModPowInt(e,m) { 27226 var z; 27227 if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m); 27228 return this.exp(e,z); 27229 } 27230 27231 // protected 27232 BigInteger.prototype.copyTo = bnpCopyTo; 27233 BigInteger.prototype.fromInt = bnpFromInt; 27234 BigInteger.prototype.fromString = bnpFromString; 27235 BigInteger.prototype.clamp = bnpClamp; 27236 BigInteger.prototype.dlShiftTo = bnpDLShiftTo; 27237 BigInteger.prototype.drShiftTo = bnpDRShiftTo; 27238 BigInteger.prototype.lShiftTo = bnpLShiftTo; 27239 BigInteger.prototype.rShiftTo = bnpRShiftTo; 27240 BigInteger.prototype.subTo = bnpSubTo; 27241 BigInteger.prototype.multiplyTo = bnpMultiplyTo; 27242 BigInteger.prototype.squareTo = bnpSquareTo; 27243 BigInteger.prototype.divRemTo = bnpDivRemTo; 27244 BigInteger.prototype.invDigit = bnpInvDigit; 27245 BigInteger.prototype.isEven = bnpIsEven; 27246 BigInteger.prototype.exp = bnpExp; 27247 27248 // public 27249 BigInteger.prototype.toString = bnToString; 27250 BigInteger.prototype.negate = bnNegate; 27251 BigInteger.prototype.abs = bnAbs; 27252 BigInteger.prototype.compareTo = bnCompareTo; 27253 BigInteger.prototype.bitLength = bnBitLength; 27254 BigInteger.prototype.mod = bnMod; 27255 BigInteger.prototype.modPowInt = bnModPowInt; 27256 27257 // "constants" 27258 BigInteger.ZERO = nbv(0); 27259 BigInteger.ONE = nbv(1); 27260 27261 // Copyright (c) 2005-2009 Tom Wu 27262 // All Rights Reserved. 27263 // See "LICENSE" for details. 27264 27265 // Extended JavaScript BN functions, required for RSA private ops. 27266 27267 // Version 1.1: new BigInteger("0", 10) returns "proper" zero 27268 // Version 1.2: square() API, isProbablePrime fix 27269 27270 // (public) 27271 function bnClone() { var r = nbi(); this.copyTo(r); return r; } 27272 27273 // (public) return value as integer 27274 function bnIntValue() { 27275 if(this.s < 0) { 27276 if(this.t == 1) return this[0]-this.DV; 27277 else if(this.t == 0) return -1; 27278 } 27279 else if(this.t == 1) return this[0]; 27280 else if(this.t == 0) return 0; 27281 // assumes 16 < DB < 32 27282 return ((this[1]&((1<<(32-this.DB))-1))<<this.DB)|this[0]; 27283 } 27284 27285 // (public) return value as byte 27286 function bnByteValue() { return (this.t==0)?this.s:(this[0]<<24)>>24; } 27287 27288 // (public) return value as short (assumes DB>=16) 27289 function bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; } 27290 27291 // (protected) return x s.t. r^x < DV 27292 function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); } 27293 27294 // (public) 0 if this == 0, 1 if this > 0 27295 function bnSigNum() { 27296 if(this.s < 0) return -1; 27297 else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0; 27298 else return 1; 27299 } 27300 27301 // (protected) convert to radix string 27302 function bnpToRadix(b) { 27303 if(b == null) b = 10; 27304 if(this.signum() == 0 || b < 2 || b > 36) return "0"; 27305 var cs = this.chunkSize(b); 27306 var a = Math.pow(b,cs); 27307 var d = nbv(a), y = nbi(), z = nbi(), r = ""; 27308 this.divRemTo(d,y,z); 27309 while(y.signum() > 0) { 27310 r = (a+z.intValue()).toString(b).substr(1) + r; 27311 y.divRemTo(d,y,z); 27312 } 27313 return z.intValue().toString(b) + r; 27314 } 27315 27316 // (protected) convert from radix string 27317 function bnpFromRadix(s,b) { 27318 this.fromInt(0); 27319 if(b == null) b = 10; 27320 var cs = this.chunkSize(b); 27321 var d = Math.pow(b,cs), mi = false, j = 0, w = 0; 27322 for(var i = 0; i < s.length; ++i) { 27323 var x = intAt(s,i); 27324 if(x < 0) { 27325 if(s.charAt(i) == "-" && this.signum() == 0) mi = true; 27326 continue; 27327 } 27328 w = b*w+x; 27329 if(++j >= cs) { 27330 this.dMultiply(d); 27331 this.dAddOffset(w,0); 27332 j = 0; 27333 w = 0; 27334 } 27335 } 27336 if(j > 0) { 27337 this.dMultiply(Math.pow(b,j)); 27338 this.dAddOffset(w,0); 27339 } 27340 if(mi) BigInteger.ZERO.subTo(this,this); 27341 } 27342 27343 // (protected) alternate constructor 27344 function bnpFromNumber(a,b,c) { 27345 if("number" == typeof b) { 27346 // new BigInteger(int,int,RNG) 27347 if(a < 2) this.fromInt(1); 27348 else { 27349 this.fromNumber(a,c); 27350 if(!this.testBit(a-1)) // force MSB set 27351 this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this); 27352 if(this.isEven()) this.dAddOffset(1,0); // force odd 27353 while(!this.isProbablePrime(b)) { 27354 this.dAddOffset(2,0); 27355 if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this); 27356 } 27357 } 27358 } 27359 else { 27360 // new BigInteger(int,RNG) 27361 var x = new Array(), t = a&7; 27362 x.length = (a>>3)+1; 27363 b.nextBytes(x); 27364 if(t > 0) x[0] &= ((1<<t)-1); else x[0] = 0; 27365 this.fromString(x,256); 27366 } 27367 } 27368 27369 // (public) convert to bigendian byte array 27370 function bnToByteArray() { 27371 var i = this.t, r = new Array(); 27372 r[0] = this.s; 27373 var p = this.DB-(i*this.DB)%8, d, k = 0; 27374 if(i-- > 0) { 27375 if(p < this.DB && (d = this[i]>>p) != (this.s&this.DM)>>p) 27376 r[k++] = d|(this.s<<(this.DB-p)); 27377 while(i >= 0) { 27378 if(p < 8) { 27379 d = (this[i]&((1<<p)-1))<<(8-p); 27380 d |= this[--i]>>(p+=this.DB-8); 27381 } 27382 else { 27383 d = (this[i]>>(p-=8))&0xff; 27384 if(p <= 0) { p += this.DB; --i; } 27385 } 27386 if((d&0x80) != 0) d |= -256; 27387 if(k == 0 && (this.s&0x80) != (d&0x80)) ++k; 27388 if(k > 0 || d != this.s) r[k++] = d; 27389 } 27390 } 27391 return r; 27392 } 27393 27394 function bnEquals(a) { return(this.compareTo(a)==0); } 27395 function bnMin(a) { return(this.compareTo(a)<0)?this:a; } 27396 function bnMax(a) { return(this.compareTo(a)>0)?this:a; } 27397 27398 // (protected) r = this op a (bitwise) 27399 function bnpBitwiseTo(a,op,r) { 27400 var i, f, m = Math.min(a.t,this.t); 27401 for(i = 0; i < m; ++i) r[i] = op(this[i],a[i]); 27402 if(a.t < this.t) { 27403 f = a.s&this.DM; 27404 for(i = m; i < this.t; ++i) r[i] = op(this[i],f); 27405 r.t = this.t; 27406 } 27407 else { 27408 f = this.s&this.DM; 27409 for(i = m; i < a.t; ++i) r[i] = op(f,a[i]); 27410 r.t = a.t; 27411 } 27412 r.s = op(this.s,a.s); 27413 r.clamp(); 27414 } 27415 27416 // (public) this & a 27417 function op_and(x,y) { return x&y; } 27418 function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; } 27419 27420 // (public) this | a 27421 function op_or(x,y) { return x|y; } 27422 function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; } 27423 27424 // (public) this ^ a 27425 function op_xor(x,y) { return x^y; } 27426 function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; } 27427 27428 // (public) this & ~a 27429 function op_andnot(x,y) { return x&~y; } 27430 function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; } 27431 27432 // (public) ~this 27433 function bnNot() { 27434 var r = nbi(); 27435 for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i]; 27436 r.t = this.t; 27437 r.s = ~this.s; 27438 return r; 27439 } 27440 27441 // (public) this << n 27442 function bnShiftLeft(n) { 27443 var r = nbi(); 27444 if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r); 27445 return r; 27446 } 27447 27448 // (public) this >> n 27449 function bnShiftRight(n) { 27450 var r = nbi(); 27451 if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r); 27452 return r; 27453 } 27454 27455 // return index of lowest 1-bit in x, x < 2^31 27456 function lbit(x) { 27457 if(x == 0) return -1; 27458 var r = 0; 27459 if((x&0xffff) == 0) { x >>= 16; r += 16; } 27460 if((x&0xff) == 0) { x >>= 8; r += 8; } 27461 if((x&0xf) == 0) { x >>= 4; r += 4; } 27462 if((x&3) == 0) { x >>= 2; r += 2; } 27463 if((x&1) == 0) ++r; 27464 return r; 27465 } 27466 27467 // (public) returns index of lowest 1-bit (or -1 if none) 27468 function bnGetLowestSetBit() { 27469 for(var i = 0; i < this.t; ++i) 27470 if(this[i] != 0) return i*this.DB+lbit(this[i]); 27471 if(this.s < 0) return this.t*this.DB; 27472 return -1; 27473 } 27474 27475 // return number of 1 bits in x 27476 function cbit(x) { 27477 var r = 0; 27478 while(x != 0) { x &= x-1; ++r; } 27479 return r; 27480 } 27481 27482 // (public) return number of set bits 27483 function bnBitCount() { 27484 var r = 0, x = this.s&this.DM; 27485 for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x); 27486 return r; 27487 } 27488 27489 // (public) true iff nth bit is set 27490 function bnTestBit(n) { 27491 var j = Math.floor(n/this.DB); 27492 if(j >= this.t) return(this.s!=0); 27493 return((this[j]&(1<<(n%this.DB)))!=0); 27494 } 27495 27496 // (protected) this op (1<<n) 27497 function bnpChangeBit(n,op) { 27498 var r = BigInteger.ONE.shiftLeft(n); 27499 this.bitwiseTo(r,op,r); 27500 return r; 27501 } 27502 27503 // (public) this | (1<<n) 27504 function bnSetBit(n) { return this.changeBit(n,op_or); } 27505 27506 // (public) this & ~(1<<n) 27507 function bnClearBit(n) { return this.changeBit(n,op_andnot); } 27508 27509 // (public) this ^ (1<<n) 27510 function bnFlipBit(n) { return this.changeBit(n,op_xor); } 27511 27512 // (protected) r = this + a 27513 function bnpAddTo(a,r) { 27514 var i = 0, c = 0, m = Math.min(a.t,this.t); 27515 while(i < m) { 27516 c += this[i]+a[i]; 27517 r[i++] = c&this.DM; 27518 c >>= this.DB; 27519 } 27520 if(a.t < this.t) { 27521 c += a.s; 27522 while(i < this.t) { 27523 c += this[i]; 27524 r[i++] = c&this.DM; 27525 c >>= this.DB; 27526 } 27527 c += this.s; 27528 } 27529 else { 27530 c += this.s; 27531 while(i < a.t) { 27532 c += a[i]; 27533 r[i++] = c&this.DM; 27534 c >>= this.DB; 27535 } 27536 c += a.s; 27537 } 27538 r.s = (c<0)?-1:0; 27539 if(c > 0) r[i++] = c; 27540 else if(c < -1) r[i++] = this.DV+c; 27541 r.t = i; 27542 r.clamp(); 27543 } 27544 27545 // (public) this + a 27546 function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; } 27547 27548 // (public) this - a 27549 function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; } 27550 27551 // (public) this * a 27552 function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; } 27553 27554 // (public) this^2 27555 function bnSquare() { var r = nbi(); this.squareTo(r); return r; } 27556 27557 // (public) this / a 27558 function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; } 27559 27560 // (public) this % a 27561 function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; } 27562 27563 // (public) [this/a,this%a] 27564 function bnDivideAndRemainder(a) { 27565 var q = nbi(), r = nbi(); 27566 this.divRemTo(a,q,r); 27567 return new Array(q,r); 27568 } 27569 27570 // (protected) this *= n, this >= 0, 1 < n < DV 27571 function bnpDMultiply(n) { 27572 this[this.t] = this.am(0,n-1,this,0,0,this.t); 27573 ++this.t; 27574 this.clamp(); 27575 } 27576 27577 // (protected) this += n << w words, this >= 0 27578 function bnpDAddOffset(n,w) { 27579 if(n == 0) return; 27580 while(this.t <= w) this[this.t++] = 0; 27581 this[w] += n; 27582 while(this[w] >= this.DV) { 27583 this[w] -= this.DV; 27584 if(++w >= this.t) this[this.t++] = 0; 27585 ++this[w]; 27586 } 27587 } 27588 27589 // A "null" reducer 27590 function NullExp() {} 27591 function nNop(x) { return x; } 27592 function nMulTo(x,y,r) { x.multiplyTo(y,r); } 27593 function nSqrTo(x,r) { x.squareTo(r); } 27594 27595 NullExp.prototype.convert = nNop; 27596 NullExp.prototype.revert = nNop; 27597 NullExp.prototype.mulTo = nMulTo; 27598 NullExp.prototype.sqrTo = nSqrTo; 27599 27600 // (public) this^e 27601 function bnPow(e) { return this.exp(e,new NullExp()); } 27602 27603 // (protected) r = lower n words of "this * a", a.t <= n 27604 // "this" should be the larger one if appropriate. 27605 function bnpMultiplyLowerTo(a,n,r) { 27606 var i = Math.min(this.t+a.t,n); 27607 r.s = 0; // assumes a,this >= 0 27608 r.t = i; 27609 while(i > 0) r[--i] = 0; 27610 var j; 27611 for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(0,a[i],r,i,0,this.t); 27612 for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a[i],r,i,0,n-i); 27613 r.clamp(); 27614 } 27615 27616 // (protected) r = "this * a" without lower n words, n > 0 27617 // "this" should be the larger one if appropriate. 27618 function bnpMultiplyUpperTo(a,n,r) { 27619 --n; 27620 var i = r.t = this.t+a.t-n; 27621 r.s = 0; // assumes a,this >= 0 27622 while(--i >= 0) r[i] = 0; 27623 for(i = Math.max(n-this.t,0); i < a.t; ++i) 27624 r[this.t+i-n] = this.am(n-i,a[i],r,0,0,this.t+i-n); 27625 r.clamp(); 27626 r.drShiftTo(1,r); 27627 } 27628 27629 // Barrett modular reduction 27630 function Barrett(m) { 27631 // setup Barrett 27632 this.r2 = nbi(); 27633 this.q3 = nbi(); 27634 BigInteger.ONE.dlShiftTo(2*m.t,this.r2); 27635 this.mu = this.r2.divide(m); 27636 this.m = m; 27637 } 27638 27639 function barrettConvert(x) { 27640 if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m); 27641 else if(x.compareTo(this.m) < 0) return x; 27642 else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; } 27643 } 27644 27645 function barrettRevert(x) { return x; } 27646 27647 // x = x mod m (HAC 14.42) 27648 function barrettReduce(x) { 27649 x.drShiftTo(this.m.t-1,this.r2); 27650 if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); } 27651 this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3); 27652 this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2); 27653 while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1); 27654 x.subTo(this.r2,x); 27655 while(x.compareTo(this.m) >= 0) x.subTo(this.m,x); 27656 } 27657 27658 // r = x^2 mod m; x != r 27659 function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); } 27660 27661 // r = x*y mod m; x,y != r 27662 function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } 27663 27664 Barrett.prototype.convert = barrettConvert; 27665 Barrett.prototype.revert = barrettRevert; 27666 Barrett.prototype.reduce = barrettReduce; 27667 Barrett.prototype.mulTo = barrettMulTo; 27668 Barrett.prototype.sqrTo = barrettSqrTo; 27669 27670 // (public) this^e % m (HAC 14.85) 27671 function bnModPow(e,m) { 27672 var i = e.bitLength(), k, r = nbv(1), z; 27673 if(i <= 0) return r; 27674 else if(i < 18) k = 1; 27675 else if(i < 48) k = 3; 27676 else if(i < 144) k = 4; 27677 else if(i < 768) k = 5; 27678 else k = 6; 27679 if(i < 8) 27680 z = new Classic(m); 27681 else if(m.isEven()) 27682 z = new Barrett(m); 27683 else 27684 z = new Montgomery(m); 27685 27686 // precomputation 27687 var g = new Array(), n = 3, k1 = k-1, km = (1<<k)-1; 27688 g[1] = z.convert(this); 27689 if(k > 1) { 27690 var g2 = nbi(); 27691 z.sqrTo(g[1],g2); 27692 while(n <= km) { 27693 g[n] = nbi(); 27694 z.mulTo(g2,g[n-2],g[n]); 27695 n += 2; 27696 } 27697 } 27698 27699 var j = e.t-1, w, is1 = true, r2 = nbi(), t; 27700 i = nbits(e[j])-1; 27701 while(j >= 0) { 27702 if(i >= k1) w = (e[j]>>(i-k1))&km; 27703 else { 27704 w = (e[j]&((1<<(i+1))-1))<<(k1-i); 27705 if(j > 0) w |= e[j-1]>>(this.DB+i-k1); 27706 } 27707 27708 n = k; 27709 while((w&1) == 0) { w >>= 1; --n; } 27710 if((i -= n) < 0) { i += this.DB; --j; } 27711 if(is1) { // ret == 1, don't bother squaring or multiplying it 27712 g[w].copyTo(r); 27713 is1 = false; 27714 } 27715 else { 27716 while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; } 27717 if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; } 27718 z.mulTo(r2,g[w],r); 27719 } 27720 27721 while(j >= 0 && (e[j]&(1<<i)) == 0) { 27722 z.sqrTo(r,r2); t = r; r = r2; r2 = t; 27723 if(--i < 0) { i = this.DB-1; --j; } 27724 } 27725 } 27726 return z.revert(r); 27727 } 27728 27729 // (public) gcd(this,a) (HAC 14.54) 27730 function bnGCD(a) { 27731 var x = (this.s<0)?this.negate():this.clone(); 27732 var y = (a.s<0)?a.negate():a.clone(); 27733 if(x.compareTo(y) < 0) { var t = x; x = y; y = t; } 27734 var i = x.getLowestSetBit(), g = y.getLowestSetBit(); 27735 if(g < 0) return x; 27736 if(i < g) g = i; 27737 if(g > 0) { 27738 x.rShiftTo(g,x); 27739 y.rShiftTo(g,y); 27740 } 27741 while(x.signum() > 0) { 27742 if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x); 27743 if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y); 27744 if(x.compareTo(y) >= 0) { 27745 x.subTo(y,x); 27746 x.rShiftTo(1,x); 27747 } 27748 else { 27749 y.subTo(x,y); 27750 y.rShiftTo(1,y); 27751 } 27752 } 27753 if(g > 0) y.lShiftTo(g,y); 27754 return y; 27755 } 27756 27757 // (protected) this % n, n < 2^26 27758 function bnpModInt(n) { 27759 if(n <= 0) return 0; 27760 var d = this.DV%n, r = (this.s<0)?n-1:0; 27761 if(this.t > 0) 27762 if(d == 0) r = this[0]%n; 27763 else for(var i = this.t-1; i >= 0; --i) r = (d*r+this[i])%n; 27764 return r; 27765 } 27766 27767 // (public) 1/this % m (HAC 14.61) 27768 function bnModInverse(m) { 27769 var ac = m.isEven(); 27770 if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO; 27771 var u = m.clone(), v = this.clone(); 27772 var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1); 27773 while(u.signum() != 0) { 27774 while(u.isEven()) { 27775 u.rShiftTo(1,u); 27776 if(ac) { 27777 if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); } 27778 a.rShiftTo(1,a); 27779 } 27780 else if(!b.isEven()) b.subTo(m,b); 27781 b.rShiftTo(1,b); 27782 } 27783 while(v.isEven()) { 27784 v.rShiftTo(1,v); 27785 if(ac) { 27786 if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); } 27787 c.rShiftTo(1,c); 27788 } 27789 else if(!d.isEven()) d.subTo(m,d); 27790 d.rShiftTo(1,d); 27791 } 27792 if(u.compareTo(v) >= 0) { 27793 u.subTo(v,u); 27794 if(ac) a.subTo(c,a); 27795 b.subTo(d,b); 27796 } 27797 else { 27798 v.subTo(u,v); 27799 if(ac) c.subTo(a,c); 27800 d.subTo(b,d); 27801 } 27802 } 27803 if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO; 27804 if(d.compareTo(m) >= 0) return d.subtract(m); 27805 if(d.signum() < 0) d.addTo(m,d); else return d; 27806 if(d.signum() < 0) return d.add(m); else return d; 27807 } 27808 27809 var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997]; 27810 var lplim = (1<<26)/lowprimes[lowprimes.length-1]; 27811 27812 // (public) test primality with certainty >= 1-.5^t 27813 function bnIsProbablePrime(t) { 27814 var i, x = this.abs(); 27815 if(x.t == 1 && x[0] <= lowprimes[lowprimes.length-1]) { 27816 for(i = 0; i < lowprimes.length; ++i) 27817 if(x[0] == lowprimes[i]) return true; 27818 return false; 27819 } 27820 if(x.isEven()) return false; 27821 i = 1; 27822 while(i < lowprimes.length) { 27823 var m = lowprimes[i], j = i+1; 27824 while(j < lowprimes.length && m < lplim) m *= lowprimes[j++]; 27825 m = x.modInt(m); 27826 while(i < j) if(m%lowprimes[i++] == 0) return false; 27827 } 27828 return x.millerRabin(t); 27829 } 27830 27831 // (protected) true if probably prime (HAC 4.24, Miller-Rabin) 27832 function bnpMillerRabin(t) { 27833 var n1 = this.subtract(BigInteger.ONE); 27834 var k = n1.getLowestSetBit(); 27835 if(k <= 0) return false; 27836 var r = n1.shiftRight(k); 27837 t = (t+1)>>1; 27838 if(t > lowprimes.length) t = lowprimes.length; 27839 var a = nbi(); 27840 for(var i = 0; i < t; ++i) { 27841 //Pick bases at random, instead of starting at 2 27842 a.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]); 27843 var y = a.modPow(r,this); 27844 if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) { 27845 var j = 1; 27846 while(j++ < k && y.compareTo(n1) != 0) { 27847 y = y.modPowInt(2,this); 27848 if(y.compareTo(BigInteger.ONE) == 0) return false; 27849 } 27850 if(y.compareTo(n1) != 0) return false; 27851 } 27852 } 27853 return true; 27854 } 27855 27856 // protected 27857 BigInteger.prototype.chunkSize = bnpChunkSize; 27858 BigInteger.prototype.toRadix = bnpToRadix; 27859 BigInteger.prototype.fromRadix = bnpFromRadix; 27860 BigInteger.prototype.fromNumber = bnpFromNumber; 27861 BigInteger.prototype.bitwiseTo = bnpBitwiseTo; 27862 BigInteger.prototype.changeBit = bnpChangeBit; 27863 BigInteger.prototype.addTo = bnpAddTo; 27864 BigInteger.prototype.dMultiply = bnpDMultiply; 27865 BigInteger.prototype.dAddOffset = bnpDAddOffset; 27866 BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo; 27867 BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo; 27868 BigInteger.prototype.modInt = bnpModInt; 27869 BigInteger.prototype.millerRabin = bnpMillerRabin; 27870 27871 // public 27872 BigInteger.prototype.clone = bnClone; 27873 BigInteger.prototype.intValue = bnIntValue; 27874 BigInteger.prototype.byteValue = bnByteValue; 27875 BigInteger.prototype.shortValue = bnShortValue; 27876 BigInteger.prototype.signum = bnSigNum; 27877 BigInteger.prototype.toByteArray = bnToByteArray; 27878 BigInteger.prototype.equals = bnEquals; 27879 BigInteger.prototype.min = bnMin; 27880 BigInteger.prototype.max = bnMax; 27881 BigInteger.prototype.and = bnAnd; 27882 BigInteger.prototype.or = bnOr; 27883 BigInteger.prototype.xor = bnXor; 27884 BigInteger.prototype.andNot = bnAndNot; 27885 BigInteger.prototype.not = bnNot; 27886 BigInteger.prototype.shiftLeft = bnShiftLeft; 27887 BigInteger.prototype.shiftRight = bnShiftRight; 27888 BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit; 27889 BigInteger.prototype.bitCount = bnBitCount; 27890 BigInteger.prototype.testBit = bnTestBit; 27891 BigInteger.prototype.setBit = bnSetBit; 27892 BigInteger.prototype.clearBit = bnClearBit; 27893 BigInteger.prototype.flipBit = bnFlipBit; 27894 BigInteger.prototype.add = bnAdd; 27895 BigInteger.prototype.subtract = bnSubtract; 27896 BigInteger.prototype.multiply = bnMultiply; 27897 BigInteger.prototype.divide = bnDivide; 27898 BigInteger.prototype.remainder = bnRemainder; 27899 BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder; 27900 BigInteger.prototype.modPow = bnModPow; 27901 BigInteger.prototype.modInverse = bnModInverse; 27902 BigInteger.prototype.pow = bnPow; 27903 BigInteger.prototype.gcd = bnGCD; 27904 BigInteger.prototype.isProbablePrime = bnIsProbablePrime; 27905 27906 // JSBN-specific extension 27907 BigInteger.prototype.square = bnSquare; 27908 27909 // Expose the Barrett function 27910 BigInteger.prototype.Barrett = Barrett 27911 27912 // BigInteger interfaces not implemented in jsbn: 27913 27914 // BigInteger(int signum, byte[] magnitude) 27915 // double doubleValue() 27916 // float floatValue() 27917 // int hashCode() 27918 // long longValue() 27919 // static BigInteger valueOf(long val) 27920 27921 // Random number generator - requires a PRNG backend, e.g. prng4.js 27922 27923 // For best results, put code like 27924 // <body onClick='rng_seed_time();' onKeyPress='rng_seed_time();'> 27925 // in your main HTML document. 27926 27927 var rng_state; 27928 var rng_pool; 27929 var rng_pptr; 27930 27931 // Mix in a 32-bit integer into the pool 27932 function rng_seed_int(x) { 27933 rng_pool[rng_pptr++] ^= x & 255; 27934 rng_pool[rng_pptr++] ^= (x >> 8) & 255; 27935 rng_pool[rng_pptr++] ^= (x >> 16) & 255; 27936 rng_pool[rng_pptr++] ^= (x >> 24) & 255; 27937 if(rng_pptr >= rng_psize) rng_pptr -= rng_psize; 27938 } 27939 27940 // Mix in the current time (w/milliseconds) into the pool 27941 function rng_seed_time() { 27942 rng_seed_int(new Date().getTime()); 27943 } 27944 27945 // Initialize the pool with junk if needed. 27946 if(rng_pool == null) { 27947 rng_pool = new Array(); 27948 rng_pptr = 0; 27949 var t; 27950 if(typeof window !== "undefined" && window.crypto) { 27951 if (window.crypto.getRandomValues) { 27952 // Use webcrypto if available 27953 var ua = new Uint8Array(32); 27954 window.crypto.getRandomValues(ua); 27955 for(t = 0; t < 32; ++t) 27956 rng_pool[rng_pptr++] = ua[t]; 27957 } 27958 else if(navigator.appName == "Netscape" && navigator.appVersion < "5") { 27959 // Extract entropy (256 bits) from NS4 RNG if available 27960 var z = window.crypto.random(32); 27961 for(t = 0; t < z.length; ++t) 27962 rng_pool[rng_pptr++] = z.charCodeAt(t) & 255; 27963 } 27964 } 27965 while(rng_pptr < rng_psize) { // extract some randomness from Math.random() 27966 t = Math.floor(65536 * Math.random()); 27967 rng_pool[rng_pptr++] = t >>> 8; 27968 rng_pool[rng_pptr++] = t & 255; 27969 } 27970 rng_pptr = 0; 27971 rng_seed_time(); 27972 //rng_seed_int(window.screenX); 27973 //rng_seed_int(window.screenY); 27974 } 27975 27976 function rng_get_byte() { 27977 if(rng_state == null) { 27978 rng_seed_time(); 27979 rng_state = prng_newstate(); 27980 rng_state.init(rng_pool); 27981 for(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) 27982 rng_pool[rng_pptr] = 0; 27983 rng_pptr = 0; 27984 //rng_pool = null; 27985 } 27986 // TODO: allow reseeding after first request 27987 return rng_state.next(); 27988 } 27989 27990 function rng_get_bytes(ba) { 27991 var i; 27992 for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte(); 27993 } 27994 27995 function SecureRandom() {} 27996 27997 SecureRandom.prototype.nextBytes = rng_get_bytes; 27998 27999 // prng4.js - uses Arcfour as a PRNG 28000 28001 function Arcfour() { 28002 this.i = 0; 28003 this.j = 0; 28004 this.S = new Array(); 28005 } 28006 28007 // Initialize arcfour context from key, an array of ints, each from [0..255] 28008 function ARC4init(key) { 28009 var i, j, t; 28010 for(i = 0; i < 256; ++i) 28011 this.S[i] = i; 28012 j = 0; 28013 for(i = 0; i < 256; ++i) { 28014 j = (j + this.S[i] + key[i % key.length]) & 255; 28015 t = this.S[i]; 28016 this.S[i] = this.S[j]; 28017 this.S[j] = t; 28018 } 28019 this.i = 0; 28020 this.j = 0; 28021 } 28022 28023 function ARC4next() { 28024 var t; 28025 this.i = (this.i + 1) & 255; 28026 this.j = (this.j + this.S[this.i]) & 255; 28027 t = this.S[this.i]; 28028 this.S[this.i] = this.S[this.j]; 28029 this.S[this.j] = t; 28030 return this.S[(t + this.S[this.i]) & 255]; 28031 } 28032 28033 Arcfour.prototype.init = ARC4init; 28034 Arcfour.prototype.next = ARC4next; 28035 28036 // Plug in your RNG constructor here 28037 function prng_newstate() { 28038 return new Arcfour(); 28039 } 28040 28041 // Pool size must be a multiple of 4 and greater than 32. 28042 // An array of bytes the size of the pool will be passed to init() 28043 var rng_psize = 256; 28044 28045 if (true) { 28046 exports = module.exports = { 28047 default: BigInteger, 28048 BigInteger: BigInteger, 28049 SecureRandom: SecureRandom, 28050 }; 28051 } else {} 28052 28053 }).call(this); 28054 28055 28056 /***/ }), 28057 28058 /***/ 7129: 28059 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 28060 28061 "use strict"; 28062 28063 28064 // A linked list to keep track of recently-used-ness 28065 const Yallist = __nccwpck_require__(40665) 28066 28067 const MAX = Symbol('max') 28068 const LENGTH = Symbol('length') 28069 const LENGTH_CALCULATOR = Symbol('lengthCalculator') 28070 const ALLOW_STALE = Symbol('allowStale') 28071 const MAX_AGE = Symbol('maxAge') 28072 const DISPOSE = Symbol('dispose') 28073 const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet') 28074 const LRU_LIST = Symbol('lruList') 28075 const CACHE = Symbol('cache') 28076 const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet') 28077 28078 const naiveLength = () => 1 28079 28080 // lruList is a yallist where the head is the youngest 28081 // item, and the tail is the oldest. the list contains the Hit 28082 // objects as the entries. 28083 // Each Hit object has a reference to its Yallist.Node. This 28084 // never changes. 28085 // 28086 // cache is a Map (or PseudoMap) that matches the keys to 28087 // the Yallist.Node object. 28088 class LRUCache { 28089 constructor (options) { 28090 if (typeof options === 'number') 28091 options = { max: options } 28092 28093 if (!options) 28094 options = {} 28095 28096 if (options.max && (typeof options.max !== 'number' || options.max < 0)) 28097 throw new TypeError('max must be a non-negative number') 28098 // Kind of weird to have a default max of Infinity, but oh well. 28099 const max = this[MAX] = options.max || Infinity 28100 28101 const lc = options.length || naiveLength 28102 this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc 28103 this[ALLOW_STALE] = options.stale || false 28104 if (options.maxAge && typeof options.maxAge !== 'number') 28105 throw new TypeError('maxAge must be a number') 28106 this[MAX_AGE] = options.maxAge || 0 28107 this[DISPOSE] = options.dispose 28108 this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false 28109 this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false 28110 this.reset() 28111 } 28112 28113 // resize the cache when the max changes. 28114 set max (mL) { 28115 if (typeof mL !== 'number' || mL < 0) 28116 throw new TypeError('max must be a non-negative number') 28117 28118 this[MAX] = mL || Infinity 28119 trim(this) 28120 } 28121 get max () { 28122 return this[MAX] 28123 } 28124 28125 set allowStale (allowStale) { 28126 this[ALLOW_STALE] = !!allowStale 28127 } 28128 get allowStale () { 28129 return this[ALLOW_STALE] 28130 } 28131 28132 set maxAge (mA) { 28133 if (typeof mA !== 'number') 28134 throw new TypeError('maxAge must be a non-negative number') 28135 28136 this[MAX_AGE] = mA 28137 trim(this) 28138 } 28139 get maxAge () { 28140 return this[MAX_AGE] 28141 } 28142 28143 // resize the cache when the lengthCalculator changes. 28144 set lengthCalculator (lC) { 28145 if (typeof lC !== 'function') 28146 lC = naiveLength 28147 28148 if (lC !== this[LENGTH_CALCULATOR]) { 28149 this[LENGTH_CALCULATOR] = lC 28150 this[LENGTH] = 0 28151 this[LRU_LIST].forEach(hit => { 28152 hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key) 28153 this[LENGTH] += hit.length 28154 }) 28155 } 28156 trim(this) 28157 } 28158 get lengthCalculator () { return this[LENGTH_CALCULATOR] } 28159 28160 get length () { return this[LENGTH] } 28161 get itemCount () { return this[LRU_LIST].length } 28162 28163 rforEach (fn, thisp) { 28164 thisp = thisp || this 28165 for (let walker = this[LRU_LIST].tail; walker !== null;) { 28166 const prev = walker.prev 28167 forEachStep(this, fn, walker, thisp) 28168 walker = prev 28169 } 28170 } 28171 28172 forEach (fn, thisp) { 28173 thisp = thisp || this 28174 for (let walker = this[LRU_LIST].head; walker !== null;) { 28175 const next = walker.next 28176 forEachStep(this, fn, walker, thisp) 28177 walker = next 28178 } 28179 } 28180 28181 keys () { 28182 return this[LRU_LIST].toArray().map(k => k.key) 28183 } 28184 28185 values () { 28186 return this[LRU_LIST].toArray().map(k => k.value) 28187 } 28188 28189 reset () { 28190 if (this[DISPOSE] && 28191 this[LRU_LIST] && 28192 this[LRU_LIST].length) { 28193 this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value)) 28194 } 28195 28196 this[CACHE] = new Map() // hash of items by key 28197 this[LRU_LIST] = new Yallist() // list of items in order of use recency 28198 this[LENGTH] = 0 // length of items in the list 28199 } 28200 28201 dump () { 28202 return this[LRU_LIST].map(hit => 28203 isStale(this, hit) ? false : { 28204 k: hit.key, 28205 v: hit.value, 28206 e: hit.now + (hit.maxAge || 0) 28207 }).toArray().filter(h => h) 28208 } 28209 28210 dumpLru () { 28211 return this[LRU_LIST] 28212 } 28213 28214 set (key, value, maxAge) { 28215 maxAge = maxAge || this[MAX_AGE] 28216 28217 if (maxAge && typeof maxAge !== 'number') 28218 throw new TypeError('maxAge must be a number') 28219 28220 const now = maxAge ? Date.now() : 0 28221 const len = this[LENGTH_CALCULATOR](value, key) 28222 28223 if (this[CACHE].has(key)) { 28224 if (len > this[MAX]) { 28225 del(this, this[CACHE].get(key)) 28226 return false 28227 } 28228 28229 const node = this[CACHE].get(key) 28230 const item = node.value 28231 28232 // dispose of the old one before overwriting 28233 // split out into 2 ifs for better coverage tracking 28234 if (this[DISPOSE]) { 28235 if (!this[NO_DISPOSE_ON_SET]) 28236 this[DISPOSE](key, item.value) 28237 } 28238 28239 item.now = now 28240 item.maxAge = maxAge 28241 item.value = value 28242 this[LENGTH] += len - item.length 28243 item.length = len 28244 this.get(key) 28245 trim(this) 28246 return true 28247 } 28248 28249 const hit = new Entry(key, value, len, now, maxAge) 28250 28251 // oversized objects fall out of cache automatically. 28252 if (hit.length > this[MAX]) { 28253 if (this[DISPOSE]) 28254 this[DISPOSE](key, value) 28255 28256 return false 28257 } 28258 28259 this[LENGTH] += hit.length 28260 this[LRU_LIST].unshift(hit) 28261 this[CACHE].set(key, this[LRU_LIST].head) 28262 trim(this) 28263 return true 28264 } 28265 28266 has (key) { 28267 if (!this[CACHE].has(key)) return false 28268 const hit = this[CACHE].get(key).value 28269 return !isStale(this, hit) 28270 } 28271 28272 get (key) { 28273 return get(this, key, true) 28274 } 28275 28276 peek (key) { 28277 return get(this, key, false) 28278 } 28279 28280 pop () { 28281 const node = this[LRU_LIST].tail 28282 if (!node) 28283 return null 28284 28285 del(this, node) 28286 return node.value 28287 } 28288 28289 del (key) { 28290 del(this, this[CACHE].get(key)) 28291 } 28292 28293 load (arr) { 28294 // reset the cache 28295 this.reset() 28296 28297 const now = Date.now() 28298 // A previous serialized cache has the most recent items first 28299 for (let l = arr.length - 1; l >= 0; l--) { 28300 const hit = arr[l] 28301 const expiresAt = hit.e || 0 28302 if (expiresAt === 0) 28303 // the item was created without expiration in a non aged cache 28304 this.set(hit.k, hit.v) 28305 else { 28306 const maxAge = expiresAt - now 28307 // dont add already expired items 28308 if (maxAge > 0) { 28309 this.set(hit.k, hit.v, maxAge) 28310 } 28311 } 28312 } 28313 } 28314 28315 prune () { 28316 this[CACHE].forEach((value, key) => get(this, key, false)) 28317 } 28318 } 28319 28320 const get = (self, key, doUse) => { 28321 const node = self[CACHE].get(key) 28322 if (node) { 28323 const hit = node.value 28324 if (isStale(self, hit)) { 28325 del(self, node) 28326 if (!self[ALLOW_STALE]) 28327 return undefined 28328 } else { 28329 if (doUse) { 28330 if (self[UPDATE_AGE_ON_GET]) 28331 node.value.now = Date.now() 28332 self[LRU_LIST].unshiftNode(node) 28333 } 28334 } 28335 return hit.value 28336 } 28337 } 28338 28339 const isStale = (self, hit) => { 28340 if (!hit || (!hit.maxAge && !self[MAX_AGE])) 28341 return false 28342 28343 const diff = Date.now() - hit.now 28344 return hit.maxAge ? diff > hit.maxAge 28345 : self[MAX_AGE] && (diff > self[MAX_AGE]) 28346 } 28347 28348 const trim = self => { 28349 if (self[LENGTH] > self[MAX]) { 28350 for (let walker = self[LRU_LIST].tail; 28351 self[LENGTH] > self[MAX] && walker !== null;) { 28352 // We know that we're about to delete this one, and also 28353 // what the next least recently used key will be, so just 28354 // go ahead and set it now. 28355 const prev = walker.prev 28356 del(self, walker) 28357 walker = prev 28358 } 28359 } 28360 } 28361 28362 const del = (self, node) => { 28363 if (node) { 28364 const hit = node.value 28365 if (self[DISPOSE]) 28366 self[DISPOSE](hit.key, hit.value) 28367 28368 self[LENGTH] -= hit.length 28369 self[CACHE].delete(hit.key) 28370 self[LRU_LIST].removeNode(node) 28371 } 28372 } 28373 28374 class Entry { 28375 constructor (key, value, length, now, maxAge) { 28376 this.key = key 28377 this.value = value 28378 this.length = length 28379 this.now = now 28380 this.maxAge = maxAge || 0 28381 } 28382 } 28383 28384 const forEachStep = (self, fn, node, thisp) => { 28385 let hit = node.value 28386 if (isStale(self, hit)) { 28387 del(self, node) 28388 if (!self[ALLOW_STALE]) 28389 hit = undefined 28390 } 28391 if (hit) 28392 fn.call(thisp, hit.value, hit.key, self) 28393 } 28394 28395 module.exports = LRUCache 28396 28397 28398 /***/ }), 28399 28400 /***/ 37943: 28401 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 28402 28403 const { Request, Response } = __nccwpck_require__(68998) 28404 const { Minipass } = __nccwpck_require__(14968) 28405 const MinipassFlush = __nccwpck_require__(4181) 28406 const cacache = __nccwpck_require__(85490) 28407 const url = __nccwpck_require__(57310) 28408 28409 const CachingMinipassPipeline = __nccwpck_require__(61064) 28410 const CachePolicy = __nccwpck_require__(97986) 28411 const cacheKey = __nccwpck_require__(42147) 28412 const remote = __nccwpck_require__(32619) 28413 28414 const hasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop) 28415 28416 // allow list for request headers that will be written to the cache index 28417 // note: we will also store any request headers 28418 // that are named in a response's vary header 28419 const KEEP_REQUEST_HEADERS = [ 28420 'accept-charset', 28421 'accept-encoding', 28422 'accept-language', 28423 'accept', 28424 'cache-control', 28425 ] 28426 28427 // allow list for response headers that will be written to the cache index 28428 // note: we must not store the real response's age header, or when we load 28429 // a cache policy based on the metadata it will think the cached response 28430 // is always stale 28431 const KEEP_RESPONSE_HEADERS = [ 28432 'cache-control', 28433 'content-encoding', 28434 'content-language', 28435 'content-type', 28436 'date', 28437 'etag', 28438 'expires', 28439 'last-modified', 28440 'link', 28441 'location', 28442 'pragma', 28443 'vary', 28444 ] 28445 28446 // return an object containing all metadata to be written to the index 28447 const getMetadata = (request, response, options) => { 28448 const metadata = { 28449 time: Date.now(), 28450 url: request.url, 28451 reqHeaders: {}, 28452 resHeaders: {}, 28453 28454 // options on which we must match the request and vary the response 28455 options: { 28456 compress: options.compress != null ? options.compress : request.compress, 28457 }, 28458 } 28459 28460 // only save the status if it's not a 200 or 304 28461 if (response.status !== 200 && response.status !== 304) { 28462 metadata.status = response.status 28463 } 28464 28465 for (const name of KEEP_REQUEST_HEADERS) { 28466 if (request.headers.has(name)) { 28467 metadata.reqHeaders[name] = request.headers.get(name) 28468 } 28469 } 28470 28471 // if the request's host header differs from the host in the url 28472 // we need to keep it, otherwise it's just noise and we ignore it 28473 const host = request.headers.get('host') 28474 const parsedUrl = new url.URL(request.url) 28475 if (host && parsedUrl.host !== host) { 28476 metadata.reqHeaders.host = host 28477 } 28478 28479 // if the response has a vary header, make sure 28480 // we store the relevant request headers too 28481 if (response.headers.has('vary')) { 28482 const vary = response.headers.get('vary') 28483 // a vary of "*" means every header causes a different response. 28484 // in that scenario, we do not include any additional headers 28485 // as the freshness check will always fail anyway and we don't 28486 // want to bloat the cache indexes 28487 if (vary !== '*') { 28488 // copy any other request headers that will vary the response 28489 const varyHeaders = vary.trim().toLowerCase().split(/\s*,\s*/) 28490 for (const name of varyHeaders) { 28491 if (request.headers.has(name)) { 28492 metadata.reqHeaders[name] = request.headers.get(name) 28493 } 28494 } 28495 } 28496 } 28497 28498 for (const name of KEEP_RESPONSE_HEADERS) { 28499 if (response.headers.has(name)) { 28500 metadata.resHeaders[name] = response.headers.get(name) 28501 } 28502 } 28503 28504 for (const name of options.cacheAdditionalHeaders) { 28505 if (response.headers.has(name)) { 28506 metadata.resHeaders[name] = response.headers.get(name) 28507 } 28508 } 28509 28510 return metadata 28511 } 28512 28513 // symbols used to hide objects that may be lazily evaluated in a getter 28514 const _request = Symbol('request') 28515 const _response = Symbol('response') 28516 const _policy = Symbol('policy') 28517 28518 class CacheEntry { 28519 constructor ({ entry, request, response, options }) { 28520 if (entry) { 28521 this.key = entry.key 28522 this.entry = entry 28523 // previous versions of this module didn't write an explicit timestamp in 28524 // the metadata, so fall back to the entry's timestamp. we can't use the 28525 // entry timestamp to determine staleness because cacache will update it 28526 // when it verifies its data 28527 this.entry.metadata.time = this.entry.metadata.time || this.entry.time 28528 } else { 28529 this.key = cacheKey(request) 28530 } 28531 28532 this.options = options 28533 28534 // these properties are behind getters that lazily evaluate 28535 this[_request] = request 28536 this[_response] = response 28537 this[_policy] = null 28538 } 28539 28540 // returns a CacheEntry instance that satisfies the given request 28541 // or undefined if no existing entry satisfies 28542 static async find (request, options) { 28543 try { 28544 // compacts the index and returns an array of unique entries 28545 var matches = await cacache.index.compact(options.cachePath, cacheKey(request), (A, B) => { 28546 const entryA = new CacheEntry({ entry: A, options }) 28547 const entryB = new CacheEntry({ entry: B, options }) 28548 return entryA.policy.satisfies(entryB.request) 28549 }, { 28550 validateEntry: (entry) => { 28551 // clean out entries with a buggy content-encoding value 28552 if (entry.metadata && 28553 entry.metadata.resHeaders && 28554 entry.metadata.resHeaders['content-encoding'] === null) { 28555 return false 28556 } 28557 28558 // if an integrity is null, it needs to have a status specified 28559 if (entry.integrity === null) { 28560 return !!(entry.metadata && entry.metadata.status) 28561 } 28562 28563 return true 28564 }, 28565 }) 28566 } catch (err) { 28567 // if the compact request fails, ignore the error and return 28568 return 28569 } 28570 28571 // a cache mode of 'reload' means to behave as though we have no cache 28572 // on the way to the network. return undefined to allow cacheFetch to 28573 // create a brand new request no matter what. 28574 if (options.cache === 'reload') { 28575 return 28576 } 28577 28578 // find the specific entry that satisfies the request 28579 let match 28580 for (const entry of matches) { 28581 const _entry = new CacheEntry({ 28582 entry, 28583 options, 28584 }) 28585 28586 if (_entry.policy.satisfies(request)) { 28587 match = _entry 28588 break 28589 } 28590 } 28591 28592 return match 28593 } 28594 28595 // if the user made a PUT/POST/PATCH then we invalidate our 28596 // cache for the same url by deleting the index entirely 28597 static async invalidate (request, options) { 28598 const key = cacheKey(request) 28599 try { 28600 await cacache.rm.entry(options.cachePath, key, { removeFully: true }) 28601 } catch (err) { 28602 // ignore errors 28603 } 28604 } 28605 28606 get request () { 28607 if (!this[_request]) { 28608 this[_request] = new Request(this.entry.metadata.url, { 28609 method: 'GET', 28610 headers: this.entry.metadata.reqHeaders, 28611 ...this.entry.metadata.options, 28612 }) 28613 } 28614 28615 return this[_request] 28616 } 28617 28618 get response () { 28619 if (!this[_response]) { 28620 this[_response] = new Response(null, { 28621 url: this.entry.metadata.url, 28622 counter: this.options.counter, 28623 status: this.entry.metadata.status || 200, 28624 headers: { 28625 ...this.entry.metadata.resHeaders, 28626 'content-length': this.entry.size, 28627 }, 28628 }) 28629 } 28630 28631 return this[_response] 28632 } 28633 28634 get policy () { 28635 if (!this[_policy]) { 28636 this[_policy] = new CachePolicy({ 28637 entry: this.entry, 28638 request: this.request, 28639 response: this.response, 28640 options: this.options, 28641 }) 28642 } 28643 28644 return this[_policy] 28645 } 28646 28647 // wraps the response in a pipeline that stores the data 28648 // in the cache while the user consumes it 28649 async store (status) { 28650 // if we got a status other than 200, 301, or 308, 28651 // or the CachePolicy forbid storage, append the 28652 // cache status header and return it untouched 28653 if ( 28654 this.request.method !== 'GET' || 28655 ![200, 301, 308].includes(this.response.status) || 28656 !this.policy.storable() 28657 ) { 28658 this.response.headers.set('x-local-cache-status', 'skip') 28659 return this.response 28660 } 28661 28662 const size = this.response.headers.get('content-length') 28663 const cacheOpts = { 28664 algorithms: this.options.algorithms, 28665 metadata: getMetadata(this.request, this.response, this.options), 28666 size, 28667 integrity: this.options.integrity, 28668 integrityEmitter: this.response.body.hasIntegrityEmitter && this.response.body, 28669 } 28670 28671 let body = null 28672 // we only set a body if the status is a 200, redirects are 28673 // stored as metadata only 28674 if (this.response.status === 200) { 28675 let cacheWriteResolve, cacheWriteReject 28676 const cacheWritePromise = new Promise((resolve, reject) => { 28677 cacheWriteResolve = resolve 28678 cacheWriteReject = reject 28679 }).catch((err) => { 28680 body.emit('error', err) 28681 }) 28682 28683 body = new CachingMinipassPipeline({ events: ['integrity', 'size'] }, new MinipassFlush({ 28684 flush () { 28685 return cacheWritePromise 28686 }, 28687 })) 28688 // this is always true since if we aren't reusing the one from the remote fetch, we 28689 // are using the one from cacache 28690 body.hasIntegrityEmitter = true 28691 28692 const onResume = () => { 28693 const tee = new Minipass() 28694 const cacheStream = cacache.put.stream(this.options.cachePath, this.key, cacheOpts) 28695 // re-emit the integrity and size events on our new response body so they can be reused 28696 cacheStream.on('integrity', i => body.emit('integrity', i)) 28697 cacheStream.on('size', s => body.emit('size', s)) 28698 // stick a flag on here so downstream users will know if they can expect integrity events 28699 tee.pipe(cacheStream) 28700 // TODO if the cache write fails, log a warning but return the response anyway 28701 // eslint-disable-next-line promise/catch-or-return 28702 cacheStream.promise().then(cacheWriteResolve, cacheWriteReject) 28703 body.unshift(tee) 28704 body.unshift(this.response.body) 28705 } 28706 28707 body.once('resume', onResume) 28708 body.once('end', () => body.removeListener('resume', onResume)) 28709 } else { 28710 await cacache.index.insert(this.options.cachePath, this.key, null, cacheOpts) 28711 } 28712 28713 // note: we do not set the x-local-cache-hash header because we do not know 28714 // the hash value until after the write to the cache completes, which doesn't 28715 // happen until after the response has been sent and it's too late to write 28716 // the header anyway 28717 this.response.headers.set('x-local-cache', encodeURIComponent(this.options.cachePath)) 28718 this.response.headers.set('x-local-cache-key', encodeURIComponent(this.key)) 28719 this.response.headers.set('x-local-cache-mode', 'stream') 28720 this.response.headers.set('x-local-cache-status', status) 28721 this.response.headers.set('x-local-cache-time', new Date().toISOString()) 28722 const newResponse = new Response(body, { 28723 url: this.response.url, 28724 status: this.response.status, 28725 headers: this.response.headers, 28726 counter: this.options.counter, 28727 }) 28728 return newResponse 28729 } 28730 28731 // use the cached data to create a response and return it 28732 async respond (method, options, status) { 28733 let response 28734 if (method === 'HEAD' || [301, 308].includes(this.response.status)) { 28735 // if the request is a HEAD, or the response is a redirect, 28736 // then the metadata in the entry already includes everything 28737 // we need to build a response 28738 response = this.response 28739 } else { 28740 // we're responding with a full cached response, so create a body 28741 // that reads from cacache and attach it to a new Response 28742 const body = new Minipass() 28743 const headers = { ...this.policy.responseHeaders() } 28744 28745 const onResume = () => { 28746 const cacheStream = cacache.get.stream.byDigest( 28747 this.options.cachePath, this.entry.integrity, { memoize: this.options.memoize } 28748 ) 28749 cacheStream.on('error', async (err) => { 28750 cacheStream.pause() 28751 if (err.code === 'EINTEGRITY') { 28752 await cacache.rm.content( 28753 this.options.cachePath, this.entry.integrity, { memoize: this.options.memoize } 28754 ) 28755 } 28756 if (err.code === 'ENOENT' || err.code === 'EINTEGRITY') { 28757 await CacheEntry.invalidate(this.request, this.options) 28758 } 28759 body.emit('error', err) 28760 cacheStream.resume() 28761 }) 28762 // emit the integrity and size events based on our metadata so we're consistent 28763 body.emit('integrity', this.entry.integrity) 28764 body.emit('size', Number(headers['content-length'])) 28765 cacheStream.pipe(body) 28766 } 28767 28768 body.once('resume', onResume) 28769 body.once('end', () => body.removeListener('resume', onResume)) 28770 response = new Response(body, { 28771 url: this.entry.metadata.url, 28772 counter: options.counter, 28773 status: 200, 28774 headers, 28775 }) 28776 } 28777 28778 response.headers.set('x-local-cache', encodeURIComponent(this.options.cachePath)) 28779 response.headers.set('x-local-cache-hash', encodeURIComponent(this.entry.integrity)) 28780 response.headers.set('x-local-cache-key', encodeURIComponent(this.key)) 28781 response.headers.set('x-local-cache-mode', 'stream') 28782 response.headers.set('x-local-cache-status', status) 28783 response.headers.set('x-local-cache-time', new Date(this.entry.metadata.time).toUTCString()) 28784 return response 28785 } 28786 28787 // use the provided request along with this cache entry to 28788 // revalidate the stored response. returns a response, either 28789 // from the cache or from the update 28790 async revalidate (request, options) { 28791 const revalidateRequest = new Request(request, { 28792 headers: this.policy.revalidationHeaders(request), 28793 }) 28794 28795 try { 28796 // NOTE: be sure to remove the headers property from the 28797 // user supplied options, since we have already defined 28798 // them on the new request object. if they're still in the 28799 // options then those will overwrite the ones from the policy 28800 var response = await remote(revalidateRequest, { 28801 ...options, 28802 headers: undefined, 28803 }) 28804 } catch (err) { 28805 // if the network fetch fails, return the stale 28806 // cached response unless it has a cache-control 28807 // of 'must-revalidate' 28808 if (!this.policy.mustRevalidate) { 28809 return this.respond(request.method, options, 'stale') 28810 } 28811 28812 throw err 28813 } 28814 28815 if (this.policy.revalidated(revalidateRequest, response)) { 28816 // we got a 304, write a new index to the cache and respond from cache 28817 const metadata = getMetadata(request, response, options) 28818 // 304 responses do not include headers that are specific to the response data 28819 // since they do not include a body, so we copy values for headers that were 28820 // in the old cache entry to the new one, if the new metadata does not already 28821 // include that header 28822 for (const name of KEEP_RESPONSE_HEADERS) { 28823 if ( 28824 !hasOwnProperty(metadata.resHeaders, name) && 28825 hasOwnProperty(this.entry.metadata.resHeaders, name) 28826 ) { 28827 metadata.resHeaders[name] = this.entry.metadata.resHeaders[name] 28828 } 28829 } 28830 28831 for (const name of options.cacheAdditionalHeaders) { 28832 const inMeta = hasOwnProperty(metadata.resHeaders, name) 28833 const inEntry = hasOwnProperty(this.entry.metadata.resHeaders, name) 28834 const inPolicy = hasOwnProperty(this.policy.response.headers, name) 28835 28836 // if the header is in the existing entry, but it is not in the metadata 28837 // then we need to write it to the metadata as this will refresh the on-disk cache 28838 if (!inMeta && inEntry) { 28839 metadata.resHeaders[name] = this.entry.metadata.resHeaders[name] 28840 } 28841 // if the header is in the metadata, but not in the policy, then we need to set 28842 // it in the policy so that it's included in the immediate response. future 28843 // responses will load a new cache entry, so we don't need to change that 28844 if (!inPolicy && inMeta) { 28845 this.policy.response.headers[name] = metadata.resHeaders[name] 28846 } 28847 } 28848 28849 try { 28850 await cacache.index.insert(options.cachePath, this.key, this.entry.integrity, { 28851 size: this.entry.size, 28852 metadata, 28853 }) 28854 } catch (err) { 28855 // if updating the cache index fails, we ignore it and 28856 // respond anyway 28857 } 28858 return this.respond(request.method, options, 'revalidated') 28859 } 28860 28861 // if we got a modified response, create a new entry based on it 28862 const newEntry = new CacheEntry({ 28863 request, 28864 response, 28865 options, 28866 }) 28867 28868 // respond with the new entry while writing it to the cache 28869 return newEntry.store('updated') 28870 } 28871 } 28872 28873 module.exports = CacheEntry 28874 28875 28876 /***/ }), 28877 28878 /***/ 93104: 28879 /***/ ((module) => { 28880 28881 class NotCachedError extends Error { 28882 constructor (url) { 28883 /* eslint-disable-next-line max-len */ 28884 super(`request to ${url} failed: cache mode is 'only-if-cached' but no cached response is available.`) 28885 this.code = 'ENOTCACHED' 28886 } 28887 } 28888 28889 module.exports = { 28890 NotCachedError, 28891 } 28892 28893 28894 /***/ }), 28895 28896 /***/ 43189: 28897 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 28898 28899 const { NotCachedError } = __nccwpck_require__(93104) 28900 const CacheEntry = __nccwpck_require__(37943) 28901 const remote = __nccwpck_require__(32619) 28902 28903 // do whatever is necessary to get a Response and return it 28904 const cacheFetch = async (request, options) => { 28905 // try to find a cached entry that satisfies this request 28906 const entry = await CacheEntry.find(request, options) 28907 if (!entry) { 28908 // no cached result, if the cache mode is 'only-if-cached' that's a failure 28909 if (options.cache === 'only-if-cached') { 28910 throw new NotCachedError(request.url) 28911 } 28912 28913 // otherwise, we make a request, store it and return it 28914 const response = await remote(request, options) 28915 const newEntry = new CacheEntry({ request, response, options }) 28916 return newEntry.store('miss') 28917 } 28918 28919 // we have a cached response that satisfies this request, however if the cache 28920 // mode is 'no-cache' then we send the revalidation request no matter what 28921 if (options.cache === 'no-cache') { 28922 return entry.revalidate(request, options) 28923 } 28924 28925 // if the cached entry is not stale, or if the cache mode is 'force-cache' or 28926 // 'only-if-cached' we can respond with the cached entry. set the status 28927 // based on the result of needsRevalidation and respond 28928 const _needsRevalidation = entry.policy.needsRevalidation(request) 28929 if (options.cache === 'force-cache' || 28930 options.cache === 'only-if-cached' || 28931 !_needsRevalidation) { 28932 return entry.respond(request.method, options, _needsRevalidation ? 'stale' : 'hit') 28933 } 28934 28935 // if we got here, the cache entry is stale so revalidate it 28936 return entry.revalidate(request, options) 28937 } 28938 28939 cacheFetch.invalidate = async (request, options) => { 28940 if (!options.cachePath) { 28941 return 28942 } 28943 28944 return CacheEntry.invalidate(request, options) 28945 } 28946 28947 module.exports = cacheFetch 28948 28949 28950 /***/ }), 28951 28952 /***/ 42147: 28953 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 28954 28955 const { URL, format } = __nccwpck_require__(57310) 28956 28957 // options passed to url.format() when generating a key 28958 const formatOptions = { 28959 auth: false, 28960 fragment: false, 28961 search: true, 28962 unicode: false, 28963 } 28964 28965 // returns a string to be used as the cache key for the Request 28966 const cacheKey = (request) => { 28967 const parsed = new URL(request.url) 28968 return `make-fetch-happen:request-cache:${format(parsed, formatOptions)}` 28969 } 28970 28971 module.exports = cacheKey 28972 28973 28974 /***/ }), 28975 28976 /***/ 97986: 28977 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 28978 28979 const CacheSemantics = __nccwpck_require__(61002) 28980 const Negotiator = __nccwpck_require__(95385) 28981 const ssri = __nccwpck_require__(4406) 28982 28983 // options passed to http-cache-semantics constructor 28984 const policyOptions = { 28985 shared: false, 28986 ignoreCargoCult: true, 28987 } 28988 28989 // a fake empty response, used when only testing the 28990 // request for storability 28991 const emptyResponse = { status: 200, headers: {} } 28992 28993 // returns a plain object representation of the Request 28994 const requestObject = (request) => { 28995 const _obj = { 28996 method: request.method, 28997 url: request.url, 28998 headers: {}, 28999 compress: request.compress, 29000 } 29001 29002 request.headers.forEach((value, key) => { 29003 _obj.headers[key] = value 29004 }) 29005 29006 return _obj 29007 } 29008 29009 // returns a plain object representation of the Response 29010 const responseObject = (response) => { 29011 const _obj = { 29012 status: response.status, 29013 headers: {}, 29014 } 29015 29016 response.headers.forEach((value, key) => { 29017 _obj.headers[key] = value 29018 }) 29019 29020 return _obj 29021 } 29022 29023 class CachePolicy { 29024 constructor ({ entry, request, response, options }) { 29025 this.entry = entry 29026 this.request = requestObject(request) 29027 this.response = responseObject(response) 29028 this.options = options 29029 this.policy = new CacheSemantics(this.request, this.response, policyOptions) 29030 29031 if (this.entry) { 29032 // if we have an entry, copy the timestamp to the _responseTime 29033 // this is necessary because the CacheSemantics constructor forces 29034 // the value to Date.now() which means a policy created from a 29035 // cache entry is likely to always identify itself as stale 29036 this.policy._responseTime = this.entry.metadata.time 29037 } 29038 } 29039 29040 // static method to quickly determine if a request alone is storable 29041 static storable (request, options) { 29042 // no cachePath means no caching 29043 if (!options.cachePath) { 29044 return false 29045 } 29046 29047 // user explicitly asked not to cache 29048 if (options.cache === 'no-store') { 29049 return false 29050 } 29051 29052 // we only cache GET and HEAD requests 29053 if (!['GET', 'HEAD'].includes(request.method)) { 29054 return false 29055 } 29056 29057 // otherwise, let http-cache-semantics make the decision 29058 // based on the request's headers 29059 const policy = new CacheSemantics(requestObject(request), emptyResponse, policyOptions) 29060 return policy.storable() 29061 } 29062 29063 // returns true if the policy satisfies the request 29064 satisfies (request) { 29065 const _req = requestObject(request) 29066 if (this.request.headers.host !== _req.headers.host) { 29067 return false 29068 } 29069 29070 if (this.request.compress !== _req.compress) { 29071 return false 29072 } 29073 29074 const negotiatorA = new Negotiator(this.request) 29075 const negotiatorB = new Negotiator(_req) 29076 29077 if (JSON.stringify(negotiatorA.mediaTypes()) !== JSON.stringify(negotiatorB.mediaTypes())) { 29078 return false 29079 } 29080 29081 if (JSON.stringify(negotiatorA.languages()) !== JSON.stringify(negotiatorB.languages())) { 29082 return false 29083 } 29084 29085 if (JSON.stringify(negotiatorA.encodings()) !== JSON.stringify(negotiatorB.encodings())) { 29086 return false 29087 } 29088 29089 if (this.options.integrity) { 29090 return ssri.parse(this.options.integrity).match(this.entry.integrity) 29091 } 29092 29093 return true 29094 } 29095 29096 // returns true if the request and response allow caching 29097 storable () { 29098 return this.policy.storable() 29099 } 29100 29101 // NOTE: this is a hack to avoid parsing the cache-control 29102 // header ourselves, it returns true if the response's 29103 // cache-control contains must-revalidate 29104 get mustRevalidate () { 29105 return !!this.policy._rescc['must-revalidate'] 29106 } 29107 29108 // returns true if the cached response requires revalidation 29109 // for the given request 29110 needsRevalidation (request) { 29111 const _req = requestObject(request) 29112 // force method to GET because we only cache GETs 29113 // but can serve a HEAD from a cached GET 29114 _req.method = 'GET' 29115 return !this.policy.satisfiesWithoutRevalidation(_req) 29116 } 29117 29118 responseHeaders () { 29119 return this.policy.responseHeaders() 29120 } 29121 29122 // returns a new object containing the appropriate headers 29123 // to send a revalidation request 29124 revalidationHeaders (request) { 29125 const _req = requestObject(request) 29126 return this.policy.revalidationHeaders(_req) 29127 } 29128 29129 // returns true if the request/response was revalidated 29130 // successfully. returns false if a new response was received 29131 revalidated (request, response) { 29132 const _req = requestObject(request) 29133 const _res = responseObject(response) 29134 const policy = this.policy.revalidatedPolicy(_req, _res) 29135 return !policy.modified 29136 } 29137 } 29138 29139 module.exports = CachePolicy 29140 29141 29142 /***/ }), 29143 29144 /***/ 11371: 29145 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 29146 29147 "use strict"; 29148 29149 29150 const { FetchError, Request, isRedirect } = __nccwpck_require__(68998) 29151 const url = __nccwpck_require__(57310) 29152 29153 const CachePolicy = __nccwpck_require__(97986) 29154 const cache = __nccwpck_require__(43189) 29155 const remote = __nccwpck_require__(32619) 29156 29157 // given a Request, a Response and user options 29158 // return true if the response is a redirect that 29159 // can be followed. we throw errors that will result 29160 // in the fetch being rejected if the redirect is 29161 // possible but invalid for some reason 29162 const canFollowRedirect = (request, response, options) => { 29163 if (!isRedirect(response.status)) { 29164 return false 29165 } 29166 29167 if (options.redirect === 'manual') { 29168 return false 29169 } 29170 29171 if (options.redirect === 'error') { 29172 throw new FetchError(`redirect mode is set to error: ${request.url}`, 29173 'no-redirect', { code: 'ENOREDIRECT' }) 29174 } 29175 29176 if (!response.headers.has('location')) { 29177 throw new FetchError(`redirect location header missing for: ${request.url}`, 29178 'no-location', { code: 'EINVALIDREDIRECT' }) 29179 } 29180 29181 if (request.counter >= request.follow) { 29182 throw new FetchError(`maximum redirect reached at: ${request.url}`, 29183 'max-redirect', { code: 'EMAXREDIRECT' }) 29184 } 29185 29186 return true 29187 } 29188 29189 // given a Request, a Response, and the user's options return an object 29190 // with a new Request and a new options object that will be used for 29191 // following the redirect 29192 const getRedirect = (request, response, options) => { 29193 const _opts = { ...options } 29194 const location = response.headers.get('location') 29195 const redirectUrl = new url.URL(location, /^https?:/.test(location) ? undefined : request.url) 29196 // Comment below is used under the following license: 29197 /** 29198 * @license 29199 * Copyright (c) 2010-2012 Mikeal Rogers 29200 * Licensed under the Apache License, Version 2.0 (the "License"); 29201 * you may not use this file except in compliance with the License. 29202 * You may obtain a copy of the License at 29203 * http://www.apache.org/licenses/LICENSE-2.0 29204 * Unless required by applicable law or agreed to in writing, 29205 * software distributed under the License is distributed on an "AS 29206 * IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 29207 * express or implied. See the License for the specific language 29208 * governing permissions and limitations under the License. 29209 */ 29210 29211 // Remove authorization if changing hostnames (but not if just 29212 // changing ports or protocols). This matches the behavior of request: 29213 // https://github.com/request/request/blob/b12a6245/lib/redirect.js#L134-L138 29214 if (new url.URL(request.url).hostname !== redirectUrl.hostname) { 29215 request.headers.delete('authorization') 29216 request.headers.delete('cookie') 29217 } 29218 29219 // for POST request with 301/302 response, or any request with 303 response, 29220 // use GET when following redirect 29221 if ( 29222 response.status === 303 || 29223 (request.method === 'POST' && [301, 302].includes(response.status)) 29224 ) { 29225 _opts.method = 'GET' 29226 _opts.body = null 29227 request.headers.delete('content-length') 29228 } 29229 29230 _opts.headers = {} 29231 request.headers.forEach((value, key) => { 29232 _opts.headers[key] = value 29233 }) 29234 29235 _opts.counter = ++request.counter 29236 const redirectReq = new Request(url.format(redirectUrl), _opts) 29237 return { 29238 request: redirectReq, 29239 options: _opts, 29240 } 29241 } 29242 29243 const fetch = async (request, options) => { 29244 const response = CachePolicy.storable(request, options) 29245 ? await cache(request, options) 29246 : await remote(request, options) 29247 29248 // if the request wasn't a GET or HEAD, and the response 29249 // status is between 200 and 399 inclusive, invalidate the 29250 // request url 29251 if (!['GET', 'HEAD'].includes(request.method) && 29252 response.status >= 200 && 29253 response.status <= 399) { 29254 await cache.invalidate(request, options) 29255 } 29256 29257 if (!canFollowRedirect(request, response, options)) { 29258 return response 29259 } 29260 29261 const redirect = getRedirect(request, response, options) 29262 return fetch(redirect.request, redirect.options) 29263 } 29264 29265 module.exports = fetch 29266 29267 29268 /***/ }), 29269 29270 /***/ 9525: 29271 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 29272 29273 const { FetchError, Headers, Request, Response } = __nccwpck_require__(68998) 29274 29275 const configureOptions = __nccwpck_require__(35530) 29276 const fetch = __nccwpck_require__(11371) 29277 29278 const makeFetchHappen = (url, opts) => { 29279 const options = configureOptions(opts) 29280 29281 const request = new Request(url, options) 29282 return fetch(request, options) 29283 } 29284 29285 makeFetchHappen.defaults = (defaultUrl, defaultOptions = {}, wrappedFetch = makeFetchHappen) => { 29286 if (typeof defaultUrl === 'object') { 29287 defaultOptions = defaultUrl 29288 defaultUrl = null 29289 } 29290 29291 const defaultedFetch = (url, options = {}) => { 29292 const finalUrl = url || defaultUrl 29293 const finalOptions = { 29294 ...defaultOptions, 29295 ...options, 29296 headers: { 29297 ...defaultOptions.headers, 29298 ...options.headers, 29299 }, 29300 } 29301 return wrappedFetch(finalUrl, finalOptions) 29302 } 29303 29304 defaultedFetch.defaults = (defaultUrl1, defaultOptions1 = {}) => 29305 makeFetchHappen.defaults(defaultUrl1, defaultOptions1, defaultedFetch) 29306 return defaultedFetch 29307 } 29308 29309 module.exports = makeFetchHappen 29310 module.exports.FetchError = FetchError 29311 module.exports.Headers = Headers 29312 module.exports.Request = Request 29313 module.exports.Response = Response 29314 29315 29316 /***/ }), 29317 29318 /***/ 35530: 29319 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 29320 29321 const dns = __nccwpck_require__(9523) 29322 29323 const conditionalHeaders = [ 29324 'if-modified-since', 29325 'if-none-match', 29326 'if-unmodified-since', 29327 'if-match', 29328 'if-range', 29329 ] 29330 29331 const configureOptions = (opts) => { 29332 const { strictSSL, ...options } = { ...opts } 29333 options.method = options.method ? options.method.toUpperCase() : 'GET' 29334 options.rejectUnauthorized = strictSSL !== false 29335 29336 if (!options.retry) { 29337 options.retry = { retries: 0 } 29338 } else if (typeof options.retry === 'string') { 29339 const retries = parseInt(options.retry, 10) 29340 if (isFinite(retries)) { 29341 options.retry = { retries } 29342 } else { 29343 options.retry = { retries: 0 } 29344 } 29345 } else if (typeof options.retry === 'number') { 29346 options.retry = { retries: options.retry } 29347 } else { 29348 options.retry = { retries: 0, ...options.retry } 29349 } 29350 29351 options.dns = { ttl: 5 * 60 * 1000, lookup: dns.lookup, ...options.dns } 29352 29353 options.cache = options.cache || 'default' 29354 if (options.cache === 'default') { 29355 const hasConditionalHeader = Object.keys(options.headers || {}).some((name) => { 29356 return conditionalHeaders.includes(name.toLowerCase()) 29357 }) 29358 if (hasConditionalHeader) { 29359 options.cache = 'no-store' 29360 } 29361 } 29362 29363 options.cacheAdditionalHeaders = options.cacheAdditionalHeaders || [] 29364 29365 // cacheManager is deprecated, but if it's set and 29366 // cachePath is not we should copy it to the new field 29367 if (options.cacheManager && !options.cachePath) { 29368 options.cachePath = options.cacheManager 29369 } 29370 29371 return options 29372 } 29373 29374 module.exports = configureOptions 29375 29376 29377 /***/ }), 29378 29379 /***/ 61064: 29380 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 29381 29382 "use strict"; 29383 29384 29385 const MinipassPipeline = __nccwpck_require__(69891) 29386 29387 class CachingMinipassPipeline extends MinipassPipeline { 29388 #events = [] 29389 #data = new Map() 29390 29391 constructor (opts, ...streams) { 29392 // CRITICAL: do NOT pass the streams to the call to super(), this will start 29393 // the flow of data and potentially cause the events we need to catch to emit 29394 // before we've finished our own setup. instead we call super() with no args, 29395 // finish our setup, and then push the streams into ourselves to start the 29396 // data flow 29397 super() 29398 this.#events = opts.events 29399 29400 /* istanbul ignore next - coverage disabled because this is pointless to test here */ 29401 if (streams.length) { 29402 this.push(...streams) 29403 } 29404 } 29405 29406 on (event, handler) { 29407 if (this.#events.includes(event) && this.#data.has(event)) { 29408 return handler(...this.#data.get(event)) 29409 } 29410 29411 return super.on(event, handler) 29412 } 29413 29414 emit (event, ...data) { 29415 if (this.#events.includes(event)) { 29416 this.#data.set(event, data) 29417 } 29418 29419 return super.emit(event, ...data) 29420 } 29421 } 29422 29423 module.exports = CachingMinipassPipeline 29424 29425 29426 /***/ }), 29427 29428 /***/ 32619: 29429 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 29430 29431 const { Minipass } = __nccwpck_require__(14968) 29432 const fetch = __nccwpck_require__(68998) 29433 const promiseRetry = __nccwpck_require__(54742) 29434 const ssri = __nccwpck_require__(4406) 29435 const { log } = __nccwpck_require__(56528) 29436 29437 const CachingMinipassPipeline = __nccwpck_require__(61064) 29438 const { getAgent } = __nccwpck_require__(79907) 29439 const pkg = __nccwpck_require__(80557) 29440 29441 const USER_AGENT = `${pkg.name}/${pkg.version} (+https://npm.im/${pkg.name})` 29442 29443 const RETRY_ERRORS = [ 29444 'ECONNRESET', // remote socket closed on us 29445 'ECONNREFUSED', // remote host refused to open connection 29446 'EADDRINUSE', // failed to bind to a local port (proxy?) 29447 'ETIMEDOUT', // someone in the transaction is WAY TOO SLOW 29448 // from @npmcli/agent 29449 'ECONNECTIONTIMEOUT', 29450 'EIDLETIMEOUT', 29451 'ERESPONSETIMEOUT', 29452 'ETRANSFERTIMEOUT', 29453 // Known codes we do NOT retry on: 29454 // ENOTFOUND (getaddrinfo failure. Either bad hostname, or offline) 29455 // EINVALIDPROXY // invalid protocol from @npmcli/agent 29456 // EINVALIDRESPONSE // invalid status code from @npmcli/agent 29457 ] 29458 29459 const RETRY_TYPES = [ 29460 'request-timeout', 29461 ] 29462 29463 // make a request directly to the remote source, 29464 // retrying certain classes of errors as well as 29465 // following redirects (through the cache if necessary) 29466 // and verifying response integrity 29467 const remoteFetch = (request, options) => { 29468 const agent = getAgent(request.url, options) 29469 if (!request.headers.has('connection')) { 29470 request.headers.set('connection', agent ? 'keep-alive' : 'close') 29471 } 29472 29473 if (!request.headers.has('user-agent')) { 29474 request.headers.set('user-agent', USER_AGENT) 29475 } 29476 29477 // keep our own options since we're overriding the agent 29478 // and the redirect mode 29479 const _opts = { 29480 ...options, 29481 agent, 29482 redirect: 'manual', 29483 } 29484 29485 return promiseRetry(async (retryHandler, attemptNum) => { 29486 const req = new fetch.Request(request, _opts) 29487 try { 29488 let res = await fetch(req, _opts) 29489 if (_opts.integrity && res.status === 200) { 29490 // we got a 200 response and the user has specified an expected 29491 // integrity value, so wrap the response in an ssri stream to verify it 29492 const integrityStream = ssri.integrityStream({ 29493 algorithms: _opts.algorithms, 29494 integrity: _opts.integrity, 29495 size: _opts.size, 29496 }) 29497 const pipeline = new CachingMinipassPipeline({ 29498 events: ['integrity', 'size'], 29499 }, res.body, integrityStream) 29500 // we also propagate the integrity and size events out to the pipeline so we can use 29501 // this new response body as an integrityEmitter for cacache 29502 integrityStream.on('integrity', i => pipeline.emit('integrity', i)) 29503 integrityStream.on('size', s => pipeline.emit('size', s)) 29504 res = new fetch.Response(pipeline, res) 29505 // set an explicit flag so we know if our response body will emit integrity and size 29506 res.body.hasIntegrityEmitter = true 29507 } 29508 29509 res.headers.set('x-fetch-attempts', attemptNum) 29510 29511 // do not retry POST requests, or requests with a streaming body 29512 // do retry requests with a 408, 420, 429 or 500+ status in the response 29513 const isStream = Minipass.isStream(req.body) 29514 const isRetriable = req.method !== 'POST' && 29515 !isStream && 29516 ([408, 420, 429].includes(res.status) || res.status >= 500) 29517 29518 if (isRetriable) { 29519 if (typeof options.onRetry === 'function') { 29520 options.onRetry(res) 29521 } 29522 29523 /* eslint-disable-next-line max-len */ 29524 log.http('fetch', `${req.method} ${req.url} attempt ${attemptNum} failed with ${res.status}`) 29525 return retryHandler(res) 29526 } 29527 29528 return res 29529 } catch (err) { 29530 const code = (err.code === 'EPROMISERETRY') 29531 ? err.retried.code 29532 : err.code 29533 29534 // err.retried will be the thing that was thrown from above 29535 // if it's a response, we just got a bad status code and we 29536 // can re-throw to allow the retry 29537 const isRetryError = err.retried instanceof fetch.Response || 29538 (RETRY_ERRORS.includes(code) && RETRY_TYPES.includes(err.type)) 29539 29540 if (req.method === 'POST' || isRetryError) { 29541 throw err 29542 } 29543 29544 if (typeof options.onRetry === 'function') { 29545 options.onRetry(err) 29546 } 29547 29548 log.http('fetch', `${req.method} ${req.url} attempt ${attemptNum} failed with ${err.code}`) 29549 return retryHandler(err) 29550 } 29551 }, options.retry).catch((err) => { 29552 // don't reject for http errors, just return them 29553 if (err.status >= 400 && err.type !== 'system') { 29554 return err 29555 } 29556 29557 throw err 29558 }) 29559 } 29560 29561 module.exports = remoteFetch 29562 29563 29564 /***/ }), 29565 29566 /***/ 74658: 29567 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 29568 29569 const { Minipass } = __nccwpck_require__(14968) 29570 const _data = Symbol('_data') 29571 const _length = Symbol('_length') 29572 class Collect extends Minipass { 29573 constructor (options) { 29574 super(options) 29575 this[_data] = [] 29576 this[_length] = 0 29577 } 29578 write (chunk, encoding, cb) { 29579 if (typeof encoding === 'function') 29580 cb = encoding, encoding = 'utf8' 29581 29582 if (!encoding) 29583 encoding = 'utf8' 29584 29585 const c = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, encoding) 29586 this[_data].push(c) 29587 this[_length] += c.length 29588 if (cb) 29589 cb() 29590 return true 29591 } 29592 end (chunk, encoding, cb) { 29593 if (typeof chunk === 'function') 29594 cb = chunk, chunk = null 29595 if (typeof encoding === 'function') 29596 cb = encoding, encoding = 'utf8' 29597 if (chunk) 29598 this.write(chunk, encoding) 29599 const result = Buffer.concat(this[_data], this[_length]) 29600 super.write(result) 29601 return super.end(cb) 29602 } 29603 } 29604 module.exports = Collect 29605 29606 // it would be possible to DRY this a bit by doing something like 29607 // this.collector = new Collect() and listening on its data event, 29608 // but it's not much code, and we may as well save the extra obj 29609 class CollectPassThrough extends Minipass { 29610 constructor (options) { 29611 super(options) 29612 this[_data] = [] 29613 this[_length] = 0 29614 } 29615 write (chunk, encoding, cb) { 29616 if (typeof encoding === 'function') 29617 cb = encoding, encoding = 'utf8' 29618 29619 if (!encoding) 29620 encoding = 'utf8' 29621 29622 const c = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, encoding) 29623 this[_data].push(c) 29624 this[_length] += c.length 29625 return super.write(chunk, encoding, cb) 29626 } 29627 end (chunk, encoding, cb) { 29628 if (typeof chunk === 'function') 29629 cb = chunk, chunk = null 29630 if (typeof encoding === 'function') 29631 cb = encoding, encoding = 'utf8' 29632 if (chunk) 29633 this.write(chunk, encoding) 29634 const result = Buffer.concat(this[_data], this[_length]) 29635 this.emit('collect', result) 29636 return super.end(cb) 29637 } 29638 } 29639 module.exports.PassThrough = CollectPassThrough 29640 29641 29642 /***/ }), 29643 29644 /***/ 11078: 29645 /***/ ((module) => { 29646 29647 "use strict"; 29648 29649 class AbortError extends Error { 29650 constructor (message) { 29651 super(message) 29652 this.code = 'FETCH_ABORTED' 29653 this.type = 'aborted' 29654 Error.captureStackTrace(this, this.constructor) 29655 } 29656 29657 get name () { 29658 return 'AbortError' 29659 } 29660 29661 // don't allow name to be overridden, but don't throw either 29662 set name (s) {} 29663 } 29664 module.exports = AbortError 29665 29666 29667 /***/ }), 29668 29669 /***/ 67911: 29670 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 29671 29672 "use strict"; 29673 29674 const { Minipass } = __nccwpck_require__(14968) 29675 const TYPE = Symbol('type') 29676 const BUFFER = Symbol('buffer') 29677 29678 class Blob { 29679 constructor (blobParts, options) { 29680 this[TYPE] = '' 29681 29682 const buffers = [] 29683 let size = 0 29684 29685 if (blobParts) { 29686 const a = blobParts 29687 const length = Number(a.length) 29688 for (let i = 0; i < length; i++) { 29689 const element = a[i] 29690 const buffer = element instanceof Buffer ? element 29691 : ArrayBuffer.isView(element) 29692 ? Buffer.from(element.buffer, element.byteOffset, element.byteLength) 29693 : element instanceof ArrayBuffer ? Buffer.from(element) 29694 : element instanceof Blob ? element[BUFFER] 29695 : typeof element === 'string' ? Buffer.from(element) 29696 : Buffer.from(String(element)) 29697 size += buffer.length 29698 buffers.push(buffer) 29699 } 29700 } 29701 29702 this[BUFFER] = Buffer.concat(buffers, size) 29703 29704 const type = options && options.type !== undefined 29705 && String(options.type).toLowerCase() 29706 if (type && !/[^\u0020-\u007E]/.test(type)) { 29707 this[TYPE] = type 29708 } 29709 } 29710 29711 get size () { 29712 return this[BUFFER].length 29713 } 29714 29715 get type () { 29716 return this[TYPE] 29717 } 29718 29719 text () { 29720 return Promise.resolve(this[BUFFER].toString()) 29721 } 29722 29723 arrayBuffer () { 29724 const buf = this[BUFFER] 29725 const off = buf.byteOffset 29726 const len = buf.byteLength 29727 const ab = buf.buffer.slice(off, off + len) 29728 return Promise.resolve(ab) 29729 } 29730 29731 stream () { 29732 return new Minipass().end(this[BUFFER]) 29733 } 29734 29735 slice (start, end, type) { 29736 const size = this.size 29737 const relativeStart = start === undefined ? 0 29738 : start < 0 ? Math.max(size + start, 0) 29739 : Math.min(start, size) 29740 const relativeEnd = end === undefined ? size 29741 : end < 0 ? Math.max(size + end, 0) 29742 : Math.min(end, size) 29743 const span = Math.max(relativeEnd - relativeStart, 0) 29744 29745 const buffer = this[BUFFER] 29746 const slicedBuffer = buffer.slice( 29747 relativeStart, 29748 relativeStart + span 29749 ) 29750 const blob = new Blob([], { type }) 29751 blob[BUFFER] = slicedBuffer 29752 return blob 29753 } 29754 29755 get [Symbol.toStringTag] () { 29756 return 'Blob' 29757 } 29758 29759 static get BUFFER () { 29760 return BUFFER 29761 } 29762 } 29763 29764 Object.defineProperties(Blob.prototype, { 29765 size: { enumerable: true }, 29766 type: { enumerable: true }, 29767 }) 29768 29769 module.exports = Blob 29770 29771 29772 /***/ }), 29773 29774 /***/ 57223: 29775 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 29776 29777 "use strict"; 29778 29779 const { Minipass } = __nccwpck_require__(14968) 29780 const MinipassSized = __nccwpck_require__(55952) 29781 29782 const Blob = __nccwpck_require__(67911) 29783 const { BUFFER } = Blob 29784 const FetchError = __nccwpck_require__(92899) 29785 29786 // optional dependency on 'encoding' 29787 let convert 29788 try { 29789 convert = (__nccwpck_require__(28685)/* .convert */ .O) 29790 } catch (e) { 29791 // defer error until textConverted is called 29792 } 29793 29794 const INTERNALS = Symbol('Body internals') 29795 const CONSUME_BODY = Symbol('consumeBody') 29796 29797 class Body { 29798 constructor (bodyArg, options = {}) { 29799 const { size = 0, timeout = 0 } = options 29800 const body = bodyArg === undefined || bodyArg === null ? null 29801 : isURLSearchParams(bodyArg) ? Buffer.from(bodyArg.toString()) 29802 : isBlob(bodyArg) ? bodyArg 29803 : Buffer.isBuffer(bodyArg) ? bodyArg 29804 : Object.prototype.toString.call(bodyArg) === '[object ArrayBuffer]' 29805 ? Buffer.from(bodyArg) 29806 : ArrayBuffer.isView(bodyArg) 29807 ? Buffer.from(bodyArg.buffer, bodyArg.byteOffset, bodyArg.byteLength) 29808 : Minipass.isStream(bodyArg) ? bodyArg 29809 : Buffer.from(String(bodyArg)) 29810 29811 this[INTERNALS] = { 29812 body, 29813 disturbed: false, 29814 error: null, 29815 } 29816 29817 this.size = size 29818 this.timeout = timeout 29819 29820 if (Minipass.isStream(body)) { 29821 body.on('error', er => { 29822 const error = er.name === 'AbortError' ? er 29823 : new FetchError(`Invalid response while trying to fetch ${ 29824 this.url}: ${er.message}`, 'system', er) 29825 this[INTERNALS].error = error 29826 }) 29827 } 29828 } 29829 29830 get body () { 29831 return this[INTERNALS].body 29832 } 29833 29834 get bodyUsed () { 29835 return this[INTERNALS].disturbed 29836 } 29837 29838 arrayBuffer () { 29839 return this[CONSUME_BODY]().then(buf => 29840 buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength)) 29841 } 29842 29843 blob () { 29844 const ct = this.headers && this.headers.get('content-type') || '' 29845 return this[CONSUME_BODY]().then(buf => Object.assign( 29846 new Blob([], { type: ct.toLowerCase() }), 29847 { [BUFFER]: buf } 29848 )) 29849 } 29850 29851 async json () { 29852 const buf = await this[CONSUME_BODY]() 29853 try { 29854 return JSON.parse(buf.toString()) 29855 } catch (er) { 29856 throw new FetchError( 29857 `invalid json response body at ${this.url} reason: ${er.message}`, 29858 'invalid-json' 29859 ) 29860 } 29861 } 29862 29863 text () { 29864 return this[CONSUME_BODY]().then(buf => buf.toString()) 29865 } 29866 29867 buffer () { 29868 return this[CONSUME_BODY]() 29869 } 29870 29871 textConverted () { 29872 return this[CONSUME_BODY]().then(buf => convertBody(buf, this.headers)) 29873 } 29874 29875 [CONSUME_BODY] () { 29876 if (this[INTERNALS].disturbed) { 29877 return Promise.reject(new TypeError(`body used already for: ${ 29878 this.url}`)) 29879 } 29880 29881 this[INTERNALS].disturbed = true 29882 29883 if (this[INTERNALS].error) { 29884 return Promise.reject(this[INTERNALS].error) 29885 } 29886 29887 // body is null 29888 if (this.body === null) { 29889 return Promise.resolve(Buffer.alloc(0)) 29890 } 29891 29892 if (Buffer.isBuffer(this.body)) { 29893 return Promise.resolve(this.body) 29894 } 29895 29896 const upstream = isBlob(this.body) ? this.body.stream() : this.body 29897 29898 /* istanbul ignore if: should never happen */ 29899 if (!Minipass.isStream(upstream)) { 29900 return Promise.resolve(Buffer.alloc(0)) 29901 } 29902 29903 const stream = this.size && upstream instanceof MinipassSized ? upstream 29904 : !this.size && upstream instanceof Minipass && 29905 !(upstream instanceof MinipassSized) ? upstream 29906 : this.size ? new MinipassSized({ size: this.size }) 29907 : new Minipass() 29908 29909 // allow timeout on slow response body, but only if the stream is still writable. this 29910 // makes the timeout center on the socket stream from lib/index.js rather than the 29911 // intermediary minipass stream we create to receive the data 29912 const resTimeout = this.timeout && stream.writable ? setTimeout(() => { 29913 stream.emit('error', new FetchError( 29914 `Response timeout while trying to fetch ${ 29915 this.url} (over ${this.timeout}ms)`, 'body-timeout')) 29916 }, this.timeout) : null 29917 29918 // do not keep the process open just for this timeout, even 29919 // though we expect it'll get cleared eventually. 29920 if (resTimeout && resTimeout.unref) { 29921 resTimeout.unref() 29922 } 29923 29924 // do the pipe in the promise, because the pipe() can send too much 29925 // data through right away and upset the MP Sized object 29926 return new Promise((resolve, reject) => { 29927 // if the stream is some other kind of stream, then pipe through a MP 29928 // so we can collect it more easily. 29929 if (stream !== upstream) { 29930 upstream.on('error', er => stream.emit('error', er)) 29931 upstream.pipe(stream) 29932 } 29933 resolve() 29934 }).then(() => stream.concat()).then(buf => { 29935 clearTimeout(resTimeout) 29936 return buf 29937 }).catch(er => { 29938 clearTimeout(resTimeout) 29939 // request was aborted, reject with this Error 29940 if (er.name === 'AbortError' || er.name === 'FetchError') { 29941 throw er 29942 } else if (er.name === 'RangeError') { 29943 throw new FetchError(`Could not create Buffer from response body for ${ 29944 this.url}: ${er.message}`, 'system', er) 29945 } else { 29946 // other errors, such as incorrect content-encoding or content-length 29947 throw new FetchError(`Invalid response body while trying to fetch ${ 29948 this.url}: ${er.message}`, 'system', er) 29949 } 29950 }) 29951 } 29952 29953 static clone (instance) { 29954 if (instance.bodyUsed) { 29955 throw new Error('cannot clone body after it is used') 29956 } 29957 29958 const body = instance.body 29959 29960 // check that body is a stream and not form-data object 29961 // NB: can't clone the form-data object without having it as a dependency 29962 if (Minipass.isStream(body) && typeof body.getBoundary !== 'function') { 29963 // create a dedicated tee stream so that we don't lose data 29964 // potentially sitting in the body stream's buffer by writing it 29965 // immediately to p1 and not having it for p2. 29966 const tee = new Minipass() 29967 const p1 = new Minipass() 29968 const p2 = new Minipass() 29969 tee.on('error', er => { 29970 p1.emit('error', er) 29971 p2.emit('error', er) 29972 }) 29973 body.on('error', er => tee.emit('error', er)) 29974 tee.pipe(p1) 29975 tee.pipe(p2) 29976 body.pipe(tee) 29977 // set instance body to one fork, return the other 29978 instance[INTERNALS].body = p1 29979 return p2 29980 } else { 29981 return instance.body 29982 } 29983 } 29984 29985 static extractContentType (body) { 29986 return body === null || body === undefined ? null 29987 : typeof body === 'string' ? 'text/plain;charset=UTF-8' 29988 : isURLSearchParams(body) 29989 ? 'application/x-www-form-urlencoded;charset=UTF-8' 29990 : isBlob(body) ? body.type || null 29991 : Buffer.isBuffer(body) ? null 29992 : Object.prototype.toString.call(body) === '[object ArrayBuffer]' ? null 29993 : ArrayBuffer.isView(body) ? null 29994 : typeof body.getBoundary === 'function' 29995 ? `multipart/form-data;boundary=${body.getBoundary()}` 29996 : Minipass.isStream(body) ? null 29997 : 'text/plain;charset=UTF-8' 29998 } 29999 30000 static getTotalBytes (instance) { 30001 const { body } = instance 30002 return (body === null || body === undefined) ? 0 30003 : isBlob(body) ? body.size 30004 : Buffer.isBuffer(body) ? body.length 30005 : body && typeof body.getLengthSync === 'function' && ( 30006 // detect form data input from form-data module 30007 body._lengthRetrievers && 30008 /* istanbul ignore next */ body._lengthRetrievers.length === 0 || // 1.x 30009 body.hasKnownLength && body.hasKnownLength()) // 2.x 30010 ? body.getLengthSync() 30011 : null 30012 } 30013 30014 static writeToStream (dest, instance) { 30015 const { body } = instance 30016 30017 if (body === null || body === undefined) { 30018 dest.end() 30019 } else if (Buffer.isBuffer(body) || typeof body === 'string') { 30020 dest.end(body) 30021 } else { 30022 // body is stream or blob 30023 const stream = isBlob(body) ? body.stream() : body 30024 stream.on('error', er => dest.emit('error', er)).pipe(dest) 30025 } 30026 30027 return dest 30028 } 30029 } 30030 30031 Object.defineProperties(Body.prototype, { 30032 body: { enumerable: true }, 30033 bodyUsed: { enumerable: true }, 30034 arrayBuffer: { enumerable: true }, 30035 blob: { enumerable: true }, 30036 json: { enumerable: true }, 30037 text: { enumerable: true }, 30038 }) 30039 30040 const isURLSearchParams = obj => 30041 // Duck-typing as a necessary condition. 30042 (typeof obj !== 'object' || 30043 typeof obj.append !== 'function' || 30044 typeof obj.delete !== 'function' || 30045 typeof obj.get !== 'function' || 30046 typeof obj.getAll !== 'function' || 30047 typeof obj.has !== 'function' || 30048 typeof obj.set !== 'function') ? false 30049 // Brand-checking and more duck-typing as optional condition. 30050 : obj.constructor.name === 'URLSearchParams' || 30051 Object.prototype.toString.call(obj) === '[object URLSearchParams]' || 30052 typeof obj.sort === 'function' 30053 30054 const isBlob = obj => 30055 typeof obj === 'object' && 30056 typeof obj.arrayBuffer === 'function' && 30057 typeof obj.type === 'string' && 30058 typeof obj.stream === 'function' && 30059 typeof obj.constructor === 'function' && 30060 typeof obj.constructor.name === 'string' && 30061 /^(Blob|File)$/.test(obj.constructor.name) && 30062 /^(Blob|File)$/.test(obj[Symbol.toStringTag]) 30063 30064 const convertBody = (buffer, headers) => { 30065 /* istanbul ignore if */ 30066 if (typeof convert !== 'function') { 30067 throw new Error('The package `encoding` must be installed to use the textConverted() function') 30068 } 30069 30070 const ct = headers && headers.get('content-type') 30071 let charset = 'utf-8' 30072 let res 30073 30074 // header 30075 if (ct) { 30076 res = /charset=([^;]*)/i.exec(ct) 30077 } 30078 30079 // no charset in content type, peek at response body for at most 1024 bytes 30080 const str = buffer.slice(0, 1024).toString() 30081 30082 // html5 30083 if (!res && str) { 30084 res = /<meta.+?charset=(['"])(.+?)\1/i.exec(str) 30085 } 30086 30087 // html4 30088 if (!res && str) { 30089 res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(str) 30090 30091 if (!res) { 30092 res = /<meta[\s]+?content=(['"])(.+?)\1[\s]+?http-equiv=(['"])content-type\3/i.exec(str) 30093 if (res) { 30094 res.pop() 30095 } // drop last quote 30096 } 30097 30098 if (res) { 30099 res = /charset=(.*)/i.exec(res.pop()) 30100 } 30101 } 30102 30103 // xml 30104 if (!res && str) { 30105 res = /<\?xml.+?encoding=(['"])(.+?)\1/i.exec(str) 30106 } 30107 30108 // found charset 30109 if (res) { 30110 charset = res.pop() 30111 30112 // prevent decode issues when sites use incorrect encoding 30113 // ref: https://hsivonen.fi/encoding-menu/ 30114 if (charset === 'gb2312' || charset === 'gbk') { 30115 charset = 'gb18030' 30116 } 30117 } 30118 30119 // turn raw buffers into a single utf-8 buffer 30120 return convert( 30121 buffer, 30122 'UTF-8', 30123 charset 30124 ).toString() 30125 } 30126 30127 module.exports = Body 30128 30129 30130 /***/ }), 30131 30132 /***/ 92899: 30133 /***/ ((module) => { 30134 30135 "use strict"; 30136 30137 class FetchError extends Error { 30138 constructor (message, type, systemError) { 30139 super(message) 30140 this.code = 'FETCH_ERROR' 30141 30142 // pick up code, expected, path, ... 30143 if (systemError) { 30144 Object.assign(this, systemError) 30145 } 30146 30147 this.errno = this.code 30148 30149 // override anything the system error might've clobbered 30150 this.type = this.code === 'EBADSIZE' && this.found > this.expect 30151 ? 'max-size' : type 30152 this.message = message 30153 Error.captureStackTrace(this, this.constructor) 30154 } 30155 30156 get name () { 30157 return 'FetchError' 30158 } 30159 30160 // don't allow name to be overwritten 30161 set name (n) {} 30162 30163 get [Symbol.toStringTag] () { 30164 return 'FetchError' 30165 } 30166 } 30167 module.exports = FetchError 30168 30169 30170 /***/ }), 30171 30172 /***/ 41504: 30173 /***/ ((module) => { 30174 30175 "use strict"; 30176 30177 const invalidTokenRegex = /[^^_`a-zA-Z\-0-9!#$%&'*+.|~]/ 30178 const invalidHeaderCharRegex = /[^\t\x20-\x7e\x80-\xff]/ 30179 30180 const validateName = name => { 30181 name = `${name}` 30182 if (invalidTokenRegex.test(name) || name === '') { 30183 throw new TypeError(`${name} is not a legal HTTP header name`) 30184 } 30185 } 30186 30187 const validateValue = value => { 30188 value = `${value}` 30189 if (invalidHeaderCharRegex.test(value)) { 30190 throw new TypeError(`${value} is not a legal HTTP header value`) 30191 } 30192 } 30193 30194 const find = (map, name) => { 30195 name = name.toLowerCase() 30196 for (const key in map) { 30197 if (key.toLowerCase() === name) { 30198 return key 30199 } 30200 } 30201 return undefined 30202 } 30203 30204 const MAP = Symbol('map') 30205 class Headers { 30206 constructor (init = undefined) { 30207 this[MAP] = Object.create(null) 30208 if (init instanceof Headers) { 30209 const rawHeaders = init.raw() 30210 const headerNames = Object.keys(rawHeaders) 30211 for (const headerName of headerNames) { 30212 for (const value of rawHeaders[headerName]) { 30213 this.append(headerName, value) 30214 } 30215 } 30216 return 30217 } 30218 30219 // no-op 30220 if (init === undefined || init === null) { 30221 return 30222 } 30223 30224 if (typeof init === 'object') { 30225 const method = init[Symbol.iterator] 30226 if (method !== null && method !== undefined) { 30227 if (typeof method !== 'function') { 30228 throw new TypeError('Header pairs must be iterable') 30229 } 30230 30231 // sequence<sequence<ByteString>> 30232 // Note: per spec we have to first exhaust the lists then process them 30233 const pairs = [] 30234 for (const pair of init) { 30235 if (typeof pair !== 'object' || 30236 typeof pair[Symbol.iterator] !== 'function') { 30237 throw new TypeError('Each header pair must be iterable') 30238 } 30239 const arrPair = Array.from(pair) 30240 if (arrPair.length !== 2) { 30241 throw new TypeError('Each header pair must be a name/value tuple') 30242 } 30243 pairs.push(arrPair) 30244 } 30245 30246 for (const pair of pairs) { 30247 this.append(pair[0], pair[1]) 30248 } 30249 } else { 30250 // record<ByteString, ByteString> 30251 for (const key of Object.keys(init)) { 30252 this.append(key, init[key]) 30253 } 30254 } 30255 } else { 30256 throw new TypeError('Provided initializer must be an object') 30257 } 30258 } 30259 30260 get (name) { 30261 name = `${name}` 30262 validateName(name) 30263 const key = find(this[MAP], name) 30264 if (key === undefined) { 30265 return null 30266 } 30267 30268 return this[MAP][key].join(', ') 30269 } 30270 30271 forEach (callback, thisArg = undefined) { 30272 let pairs = getHeaders(this) 30273 for (let i = 0; i < pairs.length; i++) { 30274 const [name, value] = pairs[i] 30275 callback.call(thisArg, value, name, this) 30276 // refresh in case the callback added more headers 30277 pairs = getHeaders(this) 30278 } 30279 } 30280 30281 set (name, value) { 30282 name = `${name}` 30283 value = `${value}` 30284 validateName(name) 30285 validateValue(value) 30286 const key = find(this[MAP], name) 30287 this[MAP][key !== undefined ? key : name] = [value] 30288 } 30289 30290 append (name, value) { 30291 name = `${name}` 30292 value = `${value}` 30293 validateName(name) 30294 validateValue(value) 30295 const key = find(this[MAP], name) 30296 if (key !== undefined) { 30297 this[MAP][key].push(value) 30298 } else { 30299 this[MAP][name] = [value] 30300 } 30301 } 30302 30303 has (name) { 30304 name = `${name}` 30305 validateName(name) 30306 return find(this[MAP], name) !== undefined 30307 } 30308 30309 delete (name) { 30310 name = `${name}` 30311 validateName(name) 30312 const key = find(this[MAP], name) 30313 if (key !== undefined) { 30314 delete this[MAP][key] 30315 } 30316 } 30317 30318 raw () { 30319 return this[MAP] 30320 } 30321 30322 keys () { 30323 return new HeadersIterator(this, 'key') 30324 } 30325 30326 values () { 30327 return new HeadersIterator(this, 'value') 30328 } 30329 30330 [Symbol.iterator] () { 30331 return new HeadersIterator(this, 'key+value') 30332 } 30333 30334 entries () { 30335 return new HeadersIterator(this, 'key+value') 30336 } 30337 30338 get [Symbol.toStringTag] () { 30339 return 'Headers' 30340 } 30341 30342 static exportNodeCompatibleHeaders (headers) { 30343 const obj = Object.assign(Object.create(null), headers[MAP]) 30344 30345 // http.request() only supports string as Host header. This hack makes 30346 // specifying custom Host header possible. 30347 const hostHeaderKey = find(headers[MAP], 'Host') 30348 if (hostHeaderKey !== undefined) { 30349 obj[hostHeaderKey] = obj[hostHeaderKey][0] 30350 } 30351 30352 return obj 30353 } 30354 30355 static createHeadersLenient (obj) { 30356 const headers = new Headers() 30357 for (const name of Object.keys(obj)) { 30358 if (invalidTokenRegex.test(name)) { 30359 continue 30360 } 30361 30362 if (Array.isArray(obj[name])) { 30363 for (const val of obj[name]) { 30364 if (invalidHeaderCharRegex.test(val)) { 30365 continue 30366 } 30367 30368 if (headers[MAP][name] === undefined) { 30369 headers[MAP][name] = [val] 30370 } else { 30371 headers[MAP][name].push(val) 30372 } 30373 } 30374 } else if (!invalidHeaderCharRegex.test(obj[name])) { 30375 headers[MAP][name] = [obj[name]] 30376 } 30377 } 30378 return headers 30379 } 30380 } 30381 30382 Object.defineProperties(Headers.prototype, { 30383 get: { enumerable: true }, 30384 forEach: { enumerable: true }, 30385 set: { enumerable: true }, 30386 append: { enumerable: true }, 30387 has: { enumerable: true }, 30388 delete: { enumerable: true }, 30389 keys: { enumerable: true }, 30390 values: { enumerable: true }, 30391 entries: { enumerable: true }, 30392 }) 30393 30394 const getHeaders = (headers, kind = 'key+value') => 30395 Object.keys(headers[MAP]).sort().map( 30396 kind === 'key' ? k => k.toLowerCase() 30397 : kind === 'value' ? k => headers[MAP][k].join(', ') 30398 : k => [k.toLowerCase(), headers[MAP][k].join(', ')] 30399 ) 30400 30401 const INTERNAL = Symbol('internal') 30402 30403 class HeadersIterator { 30404 constructor (target, kind) { 30405 this[INTERNAL] = { 30406 target, 30407 kind, 30408 index: 0, 30409 } 30410 } 30411 30412 get [Symbol.toStringTag] () { 30413 return 'HeadersIterator' 30414 } 30415 30416 next () { 30417 /* istanbul ignore if: should be impossible */ 30418 if (!this || Object.getPrototypeOf(this) !== HeadersIterator.prototype) { 30419 throw new TypeError('Value of `this` is not a HeadersIterator') 30420 } 30421 30422 const { target, kind, index } = this[INTERNAL] 30423 const values = getHeaders(target, kind) 30424 const len = values.length 30425 if (index >= len) { 30426 return { 30427 value: undefined, 30428 done: true, 30429 } 30430 } 30431 30432 this[INTERNAL].index++ 30433 30434 return { value: values[index], done: false } 30435 } 30436 } 30437 30438 // manually extend because 'extends' requires a ctor 30439 Object.setPrototypeOf(HeadersIterator.prototype, 30440 Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))) 30441 30442 module.exports = Headers 30443 30444 30445 /***/ }), 30446 30447 /***/ 68998: 30448 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 30449 30450 "use strict"; 30451 30452 const { URL } = __nccwpck_require__(57310) 30453 const http = __nccwpck_require__(13685) 30454 const https = __nccwpck_require__(95687) 30455 const zlib = __nccwpck_require__(33486) 30456 const { Minipass } = __nccwpck_require__(14968) 30457 30458 const Body = __nccwpck_require__(57223) 30459 const { writeToStream, getTotalBytes } = Body 30460 const Response = __nccwpck_require__(72587) 30461 const Headers = __nccwpck_require__(41504) 30462 const { createHeadersLenient } = Headers 30463 const Request = __nccwpck_require__(44410) 30464 const { getNodeRequestOptions } = Request 30465 const FetchError = __nccwpck_require__(92899) 30466 const AbortError = __nccwpck_require__(11078) 30467 30468 // XXX this should really be split up and unit-ized for easier testing 30469 // and better DRY implementation of data/http request aborting 30470 const fetch = async (url, opts) => { 30471 if (/^data:/.test(url)) { 30472 const request = new Request(url, opts) 30473 // delay 1 promise tick so that the consumer can abort right away 30474 return Promise.resolve().then(() => new Promise((resolve, reject) => { 30475 let type, data 30476 try { 30477 const { pathname, search } = new URL(url) 30478 const split = pathname.split(',') 30479 if (split.length < 2) { 30480 throw new Error('invalid data: URI') 30481 } 30482 const mime = split.shift() 30483 const base64 = /;base64$/.test(mime) 30484 type = base64 ? mime.slice(0, -1 * ';base64'.length) : mime 30485 const rawData = decodeURIComponent(split.join(',') + search) 30486 data = base64 ? Buffer.from(rawData, 'base64') : Buffer.from(rawData) 30487 } catch (er) { 30488 return reject(new FetchError(`[${request.method}] ${ 30489 request.url} invalid URL, ${er.message}`, 'system', er)) 30490 } 30491 30492 const { signal } = request 30493 if (signal && signal.aborted) { 30494 return reject(new AbortError('The user aborted a request.')) 30495 } 30496 30497 const headers = { 'Content-Length': data.length } 30498 if (type) { 30499 headers['Content-Type'] = type 30500 } 30501 return resolve(new Response(data, { headers })) 30502 })) 30503 } 30504 30505 return new Promise((resolve, reject) => { 30506 // build request object 30507 const request = new Request(url, opts) 30508 let options 30509 try { 30510 options = getNodeRequestOptions(request) 30511 } catch (er) { 30512 return reject(er) 30513 } 30514 30515 const send = (options.protocol === 'https:' ? https : http).request 30516 const { signal } = request 30517 let response = null 30518 const abort = () => { 30519 const error = new AbortError('The user aborted a request.') 30520 reject(error) 30521 if (Minipass.isStream(request.body) && 30522 typeof request.body.destroy === 'function') { 30523 request.body.destroy(error) 30524 } 30525 if (response && response.body) { 30526 response.body.emit('error', error) 30527 } 30528 } 30529 30530 if (signal && signal.aborted) { 30531 return abort() 30532 } 30533 30534 const abortAndFinalize = () => { 30535 abort() 30536 finalize() 30537 } 30538 30539 const finalize = () => { 30540 req.abort() 30541 if (signal) { 30542 signal.removeEventListener('abort', abortAndFinalize) 30543 } 30544 clearTimeout(reqTimeout) 30545 } 30546 30547 // send request 30548 const req = send(options) 30549 30550 if (signal) { 30551 signal.addEventListener('abort', abortAndFinalize) 30552 } 30553 30554 let reqTimeout = null 30555 if (request.timeout) { 30556 req.once('socket', socket => { 30557 reqTimeout = setTimeout(() => { 30558 reject(new FetchError(`network timeout at: ${ 30559 request.url}`, 'request-timeout')) 30560 finalize() 30561 }, request.timeout) 30562 }) 30563 } 30564 30565 req.on('error', er => { 30566 // if a 'response' event is emitted before the 'error' event, then by the 30567 // time this handler is run it's too late to reject the Promise for the 30568 // response. instead, we forward the error event to the response stream 30569 // so that the error will surface to the user when they try to consume 30570 // the body. this is done as a side effect of aborting the request except 30571 // for in windows, where we must forward the event manually, otherwise 30572 // there is no longer a ref'd socket attached to the request and the 30573 // stream never ends so the event loop runs out of work and the process 30574 // exits without warning. 30575 // coverage skipped here due to the difficulty in testing 30576 // istanbul ignore next 30577 if (req.res) { 30578 req.res.emit('error', er) 30579 } 30580 reject(new FetchError(`request to ${request.url} failed, reason: ${ 30581 er.message}`, 'system', er)) 30582 finalize() 30583 }) 30584 30585 req.on('response', res => { 30586 clearTimeout(reqTimeout) 30587 30588 const headers = createHeadersLenient(res.headers) 30589 30590 // HTTP fetch step 5 30591 if (fetch.isRedirect(res.statusCode)) { 30592 // HTTP fetch step 5.2 30593 const location = headers.get('Location') 30594 30595 // HTTP fetch step 5.3 30596 let locationURL = null 30597 try { 30598 locationURL = location === null ? null : new URL(location, request.url).toString() 30599 } catch { 30600 // error here can only be invalid URL in Location: header 30601 // do not throw when options.redirect == manual 30602 // let the user extract the errorneous redirect URL 30603 if (request.redirect !== 'manual') { 30604 /* eslint-disable-next-line max-len */ 30605 reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect')) 30606 finalize() 30607 return 30608 } 30609 } 30610 30611 // HTTP fetch step 5.5 30612 if (request.redirect === 'error') { 30613 reject(new FetchError('uri requested responds with a redirect, ' + 30614 `redirect mode is set to error: ${request.url}`, 'no-redirect')) 30615 finalize() 30616 return 30617 } else if (request.redirect === 'manual') { 30618 // node-fetch-specific step: make manual redirect a bit easier to 30619 // use by setting the Location header value to the resolved URL. 30620 if (locationURL !== null) { 30621 // handle corrupted header 30622 try { 30623 headers.set('Location', locationURL) 30624 } catch (err) { 30625 /* istanbul ignore next: nodejs server prevent invalid 30626 response headers, we can't test this through normal 30627 request */ 30628 reject(err) 30629 } 30630 } 30631 } else if (request.redirect === 'follow' && locationURL !== null) { 30632 // HTTP-redirect fetch step 5 30633 if (request.counter >= request.follow) { 30634 reject(new FetchError(`maximum redirect reached at: ${ 30635 request.url}`, 'max-redirect')) 30636 finalize() 30637 return 30638 } 30639 30640 // HTTP-redirect fetch step 9 30641 if (res.statusCode !== 303 && 30642 request.body && 30643 getTotalBytes(request) === null) { 30644 reject(new FetchError( 30645 'Cannot follow redirect with body being a readable stream', 30646 'unsupported-redirect' 30647 )) 30648 finalize() 30649 return 30650 } 30651 30652 // Update host due to redirection 30653 request.headers.set('host', (new URL(locationURL)).host) 30654 30655 // HTTP-redirect fetch step 6 (counter increment) 30656 // Create a new Request object. 30657 const requestOpts = { 30658 headers: new Headers(request.headers), 30659 follow: request.follow, 30660 counter: request.counter + 1, 30661 agent: request.agent, 30662 compress: request.compress, 30663 method: request.method, 30664 body: request.body, 30665 signal: request.signal, 30666 timeout: request.timeout, 30667 } 30668 30669 // if the redirect is to a new hostname, strip the authorization and cookie headers 30670 const parsedOriginal = new URL(request.url) 30671 const parsedRedirect = new URL(locationURL) 30672 if (parsedOriginal.hostname !== parsedRedirect.hostname) { 30673 requestOpts.headers.delete('authorization') 30674 requestOpts.headers.delete('cookie') 30675 } 30676 30677 // HTTP-redirect fetch step 11 30678 if (res.statusCode === 303 || ( 30679 (res.statusCode === 301 || res.statusCode === 302) && 30680 request.method === 'POST' 30681 )) { 30682 requestOpts.method = 'GET' 30683 requestOpts.body = undefined 30684 requestOpts.headers.delete('content-length') 30685 } 30686 30687 // HTTP-redirect fetch step 15 30688 resolve(fetch(new Request(locationURL, requestOpts))) 30689 finalize() 30690 return 30691 } 30692 } // end if(isRedirect) 30693 30694 // prepare response 30695 res.once('end', () => 30696 signal && signal.removeEventListener('abort', abortAndFinalize)) 30697 30698 const body = new Minipass() 30699 // if an error occurs, either on the response stream itself, on one of the 30700 // decoder streams, or a response length timeout from the Body class, we 30701 // forward the error through to our internal body stream. If we see an 30702 // error event on that, we call finalize to abort the request and ensure 30703 // we don't leave a socket believing a request is in flight. 30704 // this is difficult to test, so lacks specific coverage. 30705 body.on('error', finalize) 30706 // exceedingly rare that the stream would have an error, 30707 // but just in case we proxy it to the stream in use. 30708 res.on('error', /* istanbul ignore next */ er => body.emit('error', er)) 30709 res.on('data', (chunk) => body.write(chunk)) 30710 res.on('end', () => body.end()) 30711 30712 const responseOptions = { 30713 url: request.url, 30714 status: res.statusCode, 30715 statusText: res.statusMessage, 30716 headers: headers, 30717 size: request.size, 30718 timeout: request.timeout, 30719 counter: request.counter, 30720 trailer: new Promise(resolveTrailer => 30721 res.on('end', () => resolveTrailer(createHeadersLenient(res.trailers)))), 30722 } 30723 30724 // HTTP-network fetch step 12.1.1.3 30725 const codings = headers.get('Content-Encoding') 30726 30727 // HTTP-network fetch step 12.1.1.4: handle content codings 30728 30729 // in following scenarios we ignore compression support 30730 // 1. compression support is disabled 30731 // 2. HEAD request 30732 // 3. no Content-Encoding header 30733 // 4. no content response (204) 30734 // 5. content not modified response (304) 30735 if (!request.compress || 30736 request.method === 'HEAD' || 30737 codings === null || 30738 res.statusCode === 204 || 30739 res.statusCode === 304) { 30740 response = new Response(body, responseOptions) 30741 resolve(response) 30742 return 30743 } 30744 30745 // Be less strict when decoding compressed responses, since sometimes 30746 // servers send slightly invalid responses that are still accepted 30747 // by common browsers. 30748 // Always using Z_SYNC_FLUSH is what cURL does. 30749 const zlibOptions = { 30750 flush: zlib.constants.Z_SYNC_FLUSH, 30751 finishFlush: zlib.constants.Z_SYNC_FLUSH, 30752 } 30753 30754 // for gzip 30755 if (codings === 'gzip' || codings === 'x-gzip') { 30756 const unzip = new zlib.Gunzip(zlibOptions) 30757 response = new Response( 30758 // exceedingly rare that the stream would have an error, 30759 // but just in case we proxy it to the stream in use. 30760 body.on('error', /* istanbul ignore next */ er => unzip.emit('error', er)).pipe(unzip), 30761 responseOptions 30762 ) 30763 resolve(response) 30764 return 30765 } 30766 30767 // for deflate 30768 if (codings === 'deflate' || codings === 'x-deflate') { 30769 // handle the infamous raw deflate response from old servers 30770 // a hack for old IIS and Apache servers 30771 const raw = res.pipe(new Minipass()) 30772 raw.once('data', chunk => { 30773 // see http://stackoverflow.com/questions/37519828 30774 const decoder = (chunk[0] & 0x0F) === 0x08 30775 ? new zlib.Inflate() 30776 : new zlib.InflateRaw() 30777 // exceedingly rare that the stream would have an error, 30778 // but just in case we proxy it to the stream in use. 30779 body.on('error', /* istanbul ignore next */ er => decoder.emit('error', er)).pipe(decoder) 30780 response = new Response(decoder, responseOptions) 30781 resolve(response) 30782 }) 30783 return 30784 } 30785 30786 // for br 30787 if (codings === 'br') { 30788 // ignoring coverage so tests don't have to fake support (or lack of) for brotli 30789 // istanbul ignore next 30790 try { 30791 var decoder = new zlib.BrotliDecompress() 30792 } catch (err) { 30793 reject(err) 30794 finalize() 30795 return 30796 } 30797 // exceedingly rare that the stream would have an error, 30798 // but just in case we proxy it to the stream in use. 30799 body.on('error', /* istanbul ignore next */ er => decoder.emit('error', er)).pipe(decoder) 30800 response = new Response(decoder, responseOptions) 30801 resolve(response) 30802 return 30803 } 30804 30805 // otherwise, use response as-is 30806 response = new Response(body, responseOptions) 30807 resolve(response) 30808 }) 30809 30810 writeToStream(req, request) 30811 }) 30812 } 30813 30814 module.exports = fetch 30815 30816 fetch.isRedirect = code => 30817 code === 301 || 30818 code === 302 || 30819 code === 303 || 30820 code === 307 || 30821 code === 308 30822 30823 fetch.Headers = Headers 30824 fetch.Request = Request 30825 fetch.Response = Response 30826 fetch.FetchError = FetchError 30827 fetch.AbortError = AbortError 30828 30829 30830 /***/ }), 30831 30832 /***/ 44410: 30833 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 30834 30835 "use strict"; 30836 30837 const { URL } = __nccwpck_require__(57310) 30838 const { Minipass } = __nccwpck_require__(14968) 30839 const Headers = __nccwpck_require__(41504) 30840 const { exportNodeCompatibleHeaders } = Headers 30841 const Body = __nccwpck_require__(57223) 30842 const { clone, extractContentType, getTotalBytes } = Body 30843 30844 const version = (__nccwpck_require__(40500)/* .version */ .i8) 30845 const defaultUserAgent = 30846 `minipass-fetch/${version} (+https://github.com/isaacs/minipass-fetch)` 30847 30848 const INTERNALS = Symbol('Request internals') 30849 30850 const isRequest = input => 30851 typeof input === 'object' && typeof input[INTERNALS] === 'object' 30852 30853 const isAbortSignal = signal => { 30854 const proto = ( 30855 signal 30856 && typeof signal === 'object' 30857 && Object.getPrototypeOf(signal) 30858 ) 30859 return !!(proto && proto.constructor.name === 'AbortSignal') 30860 } 30861 30862 class Request extends Body { 30863 constructor (input, init = {}) { 30864 const parsedURL = isRequest(input) ? new URL(input.url) 30865 : input && input.href ? new URL(input.href) 30866 : new URL(`${input}`) 30867 30868 if (isRequest(input)) { 30869 init = { ...input[INTERNALS], ...init } 30870 } else if (!input || typeof input === 'string') { 30871 input = {} 30872 } 30873 30874 const method = (init.method || input.method || 'GET').toUpperCase() 30875 const isGETHEAD = method === 'GET' || method === 'HEAD' 30876 30877 if ((init.body !== null && init.body !== undefined || 30878 isRequest(input) && input.body !== null) && isGETHEAD) { 30879 throw new TypeError('Request with GET/HEAD method cannot have body') 30880 } 30881 30882 const inputBody = init.body !== null && init.body !== undefined ? init.body 30883 : isRequest(input) && input.body !== null ? clone(input) 30884 : null 30885 30886 super(inputBody, { 30887 timeout: init.timeout || input.timeout || 0, 30888 size: init.size || input.size || 0, 30889 }) 30890 30891 const headers = new Headers(init.headers || input.headers || {}) 30892 30893 if (inputBody !== null && inputBody !== undefined && 30894 !headers.has('Content-Type')) { 30895 const contentType = extractContentType(inputBody) 30896 if (contentType) { 30897 headers.append('Content-Type', contentType) 30898 } 30899 } 30900 30901 const signal = 'signal' in init ? init.signal 30902 : null 30903 30904 if (signal !== null && signal !== undefined && !isAbortSignal(signal)) { 30905 throw new TypeError('Expected signal must be an instanceof AbortSignal') 30906 } 30907 30908 // TLS specific options that are handled by node 30909 const { 30910 ca, 30911 cert, 30912 ciphers, 30913 clientCertEngine, 30914 crl, 30915 dhparam, 30916 ecdhCurve, 30917 family, 30918 honorCipherOrder, 30919 key, 30920 passphrase, 30921 pfx, 30922 rejectUnauthorized = process.env.NODE_TLS_REJECT_UNAUTHORIZED !== '0', 30923 secureOptions, 30924 secureProtocol, 30925 servername, 30926 sessionIdContext, 30927 } = init 30928 30929 this[INTERNALS] = { 30930 method, 30931 redirect: init.redirect || input.redirect || 'follow', 30932 headers, 30933 parsedURL, 30934 signal, 30935 ca, 30936 cert, 30937 ciphers, 30938 clientCertEngine, 30939 crl, 30940 dhparam, 30941 ecdhCurve, 30942 family, 30943 honorCipherOrder, 30944 key, 30945 passphrase, 30946 pfx, 30947 rejectUnauthorized, 30948 secureOptions, 30949 secureProtocol, 30950 servername, 30951 sessionIdContext, 30952 } 30953 30954 // node-fetch-only options 30955 this.follow = init.follow !== undefined ? init.follow 30956 : input.follow !== undefined ? input.follow 30957 : 20 30958 this.compress = init.compress !== undefined ? init.compress 30959 : input.compress !== undefined ? input.compress 30960 : true 30961 this.counter = init.counter || input.counter || 0 30962 this.agent = init.agent || input.agent 30963 } 30964 30965 get method () { 30966 return this[INTERNALS].method 30967 } 30968 30969 get url () { 30970 return this[INTERNALS].parsedURL.toString() 30971 } 30972 30973 get headers () { 30974 return this[INTERNALS].headers 30975 } 30976 30977 get redirect () { 30978 return this[INTERNALS].redirect 30979 } 30980 30981 get signal () { 30982 return this[INTERNALS].signal 30983 } 30984 30985 clone () { 30986 return new Request(this) 30987 } 30988 30989 get [Symbol.toStringTag] () { 30990 return 'Request' 30991 } 30992 30993 static getNodeRequestOptions (request) { 30994 const parsedURL = request[INTERNALS].parsedURL 30995 const headers = new Headers(request[INTERNALS].headers) 30996 30997 // fetch step 1.3 30998 if (!headers.has('Accept')) { 30999 headers.set('Accept', '*/*') 31000 } 31001 31002 // Basic fetch 31003 if (!/^https?:$/.test(parsedURL.protocol)) { 31004 throw new TypeError('Only HTTP(S) protocols are supported') 31005 } 31006 31007 if (request.signal && 31008 Minipass.isStream(request.body) && 31009 typeof request.body.destroy !== 'function') { 31010 throw new Error( 31011 'Cancellation of streamed requests with AbortSignal is not supported') 31012 } 31013 31014 // HTTP-network-or-cache fetch steps 2.4-2.7 31015 const contentLengthValue = 31016 (request.body === null || request.body === undefined) && 31017 /^(POST|PUT)$/i.test(request.method) ? '0' 31018 : request.body !== null && request.body !== undefined 31019 ? getTotalBytes(request) 31020 : null 31021 31022 if (contentLengthValue) { 31023 headers.set('Content-Length', contentLengthValue + '') 31024 } 31025 31026 // HTTP-network-or-cache fetch step 2.11 31027 if (!headers.has('User-Agent')) { 31028 headers.set('User-Agent', defaultUserAgent) 31029 } 31030 31031 // HTTP-network-or-cache fetch step 2.15 31032 if (request.compress && !headers.has('Accept-Encoding')) { 31033 headers.set('Accept-Encoding', 'gzip,deflate') 31034 } 31035 31036 const agent = typeof request.agent === 'function' 31037 ? request.agent(parsedURL) 31038 : request.agent 31039 31040 if (!headers.has('Connection') && !agent) { 31041 headers.set('Connection', 'close') 31042 } 31043 31044 // TLS specific options that are handled by node 31045 const { 31046 ca, 31047 cert, 31048 ciphers, 31049 clientCertEngine, 31050 crl, 31051 dhparam, 31052 ecdhCurve, 31053 family, 31054 honorCipherOrder, 31055 key, 31056 passphrase, 31057 pfx, 31058 rejectUnauthorized, 31059 secureOptions, 31060 secureProtocol, 31061 servername, 31062 sessionIdContext, 31063 } = request[INTERNALS] 31064 31065 // HTTP-network fetch step 4.2 31066 // chunked encoding is handled by Node.js 31067 31068 // we cannot spread parsedURL directly, so we have to read each property one-by-one 31069 // and map them to the equivalent https?.request() method options 31070 const urlProps = { 31071 auth: parsedURL.username || parsedURL.password 31072 ? `${parsedURL.username}:${parsedURL.password}` 31073 : '', 31074 host: parsedURL.host, 31075 hostname: parsedURL.hostname, 31076 path: `${parsedURL.pathname}${parsedURL.search}`, 31077 port: parsedURL.port, 31078 protocol: parsedURL.protocol, 31079 } 31080 31081 return { 31082 ...urlProps, 31083 method: request.method, 31084 headers: exportNodeCompatibleHeaders(headers), 31085 agent, 31086 ca, 31087 cert, 31088 ciphers, 31089 clientCertEngine, 31090 crl, 31091 dhparam, 31092 ecdhCurve, 31093 family, 31094 honorCipherOrder, 31095 key, 31096 passphrase, 31097 pfx, 31098 rejectUnauthorized, 31099 secureOptions, 31100 secureProtocol, 31101 servername, 31102 sessionIdContext, 31103 timeout: request.timeout, 31104 } 31105 } 31106 } 31107 31108 module.exports = Request 31109 31110 Object.defineProperties(Request.prototype, { 31111 method: { enumerable: true }, 31112 url: { enumerable: true }, 31113 headers: { enumerable: true }, 31114 redirect: { enumerable: true }, 31115 clone: { enumerable: true }, 31116 signal: { enumerable: true }, 31117 }) 31118 31119 31120 /***/ }), 31121 31122 /***/ 72587: 31123 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 31124 31125 "use strict"; 31126 31127 const http = __nccwpck_require__(13685) 31128 const { STATUS_CODES } = http 31129 31130 const Headers = __nccwpck_require__(41504) 31131 const Body = __nccwpck_require__(57223) 31132 const { clone, extractContentType } = Body 31133 31134 const INTERNALS = Symbol('Response internals') 31135 31136 class Response extends Body { 31137 constructor (body = null, opts = {}) { 31138 super(body, opts) 31139 31140 const status = opts.status || 200 31141 const headers = new Headers(opts.headers) 31142 31143 if (body !== null && body !== undefined && !headers.has('Content-Type')) { 31144 const contentType = extractContentType(body) 31145 if (contentType) { 31146 headers.append('Content-Type', contentType) 31147 } 31148 } 31149 31150 this[INTERNALS] = { 31151 url: opts.url, 31152 status, 31153 statusText: opts.statusText || STATUS_CODES[status], 31154 headers, 31155 counter: opts.counter, 31156 trailer: Promise.resolve(opts.trailer || new Headers()), 31157 } 31158 } 31159 31160 get trailer () { 31161 return this[INTERNALS].trailer 31162 } 31163 31164 get url () { 31165 return this[INTERNALS].url || '' 31166 } 31167 31168 get status () { 31169 return this[INTERNALS].status 31170 } 31171 31172 get ok () { 31173 return this[INTERNALS].status >= 200 && this[INTERNALS].status < 300 31174 } 31175 31176 get redirected () { 31177 return this[INTERNALS].counter > 0 31178 } 31179 31180 get statusText () { 31181 return this[INTERNALS].statusText 31182 } 31183 31184 get headers () { 31185 return this[INTERNALS].headers 31186 } 31187 31188 clone () { 31189 return new Response(clone(this), { 31190 url: this.url, 31191 status: this.status, 31192 statusText: this.statusText, 31193 headers: this.headers, 31194 ok: this.ok, 31195 redirected: this.redirected, 31196 trailer: this.trailer, 31197 }) 31198 } 31199 31200 get [Symbol.toStringTag] () { 31201 return 'Response' 31202 } 31203 } 31204 31205 module.exports = Response 31206 31207 Object.defineProperties(Response.prototype, { 31208 url: { enumerable: true }, 31209 status: { enumerable: true }, 31210 ok: { enumerable: true }, 31211 redirected: { enumerable: true }, 31212 statusText: { enumerable: true }, 31213 headers: { enumerable: true }, 31214 clone: { enumerable: true }, 31215 }) 31216 31217 31218 /***/ }), 31219 31220 /***/ 4181: 31221 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 31222 31223 const Minipass = __nccwpck_require__(27818) 31224 const _flush = Symbol('_flush') 31225 const _flushed = Symbol('_flushed') 31226 const _flushing = Symbol('_flushing') 31227 class Flush extends Minipass { 31228 constructor (opt = {}) { 31229 if (typeof opt === 'function') 31230 opt = { flush: opt } 31231 31232 super(opt) 31233 31234 // or extend this class and provide a 'flush' method in your subclass 31235 if (typeof opt.flush !== 'function' && typeof this.flush !== 'function') 31236 throw new TypeError('must provide flush function in options') 31237 31238 this[_flush] = opt.flush || this.flush 31239 } 31240 31241 emit (ev, ...data) { 31242 if ((ev !== 'end' && ev !== 'finish') || this[_flushed]) 31243 return super.emit(ev, ...data) 31244 31245 if (this[_flushing]) 31246 return 31247 31248 this[_flushing] = true 31249 31250 const afterFlush = er => { 31251 this[_flushed] = true 31252 er ? super.emit('error', er) : super.emit('end') 31253 } 31254 31255 const ret = this[_flush](afterFlush) 31256 if (ret && ret.then) 31257 ret.then(() => afterFlush(), er => afterFlush(er)) 31258 } 31259 } 31260 31261 module.exports = Flush 31262 31263 31264 /***/ }), 31265 31266 /***/ 27818: 31267 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 31268 31269 "use strict"; 31270 31271 const proc = typeof process === 'object' && process ? process : { 31272 stdout: null, 31273 stderr: null, 31274 } 31275 const EE = __nccwpck_require__(82361) 31276 const Stream = __nccwpck_require__(12781) 31277 const SD = (__nccwpck_require__(71576).StringDecoder) 31278 31279 const EOF = Symbol('EOF') 31280 const MAYBE_EMIT_END = Symbol('maybeEmitEnd') 31281 const EMITTED_END = Symbol('emittedEnd') 31282 const EMITTING_END = Symbol('emittingEnd') 31283 const EMITTED_ERROR = Symbol('emittedError') 31284 const CLOSED = Symbol('closed') 31285 const READ = Symbol('read') 31286 const FLUSH = Symbol('flush') 31287 const FLUSHCHUNK = Symbol('flushChunk') 31288 const ENCODING = Symbol('encoding') 31289 const DECODER = Symbol('decoder') 31290 const FLOWING = Symbol('flowing') 31291 const PAUSED = Symbol('paused') 31292 const RESUME = Symbol('resume') 31293 const BUFFERLENGTH = Symbol('bufferLength') 31294 const BUFFERPUSH = Symbol('bufferPush') 31295 const BUFFERSHIFT = Symbol('bufferShift') 31296 const OBJECTMODE = Symbol('objectMode') 31297 const DESTROYED = Symbol('destroyed') 31298 const EMITDATA = Symbol('emitData') 31299 const EMITEND = Symbol('emitEnd') 31300 const EMITEND2 = Symbol('emitEnd2') 31301 const ASYNC = Symbol('async') 31302 31303 const defer = fn => Promise.resolve().then(fn) 31304 31305 // TODO remove when Node v8 support drops 31306 const doIter = global._MP_NO_ITERATOR_SYMBOLS_ !== '1' 31307 const ASYNCITERATOR = doIter && Symbol.asyncIterator 31308 || Symbol('asyncIterator not implemented') 31309 const ITERATOR = doIter && Symbol.iterator 31310 || Symbol('iterator not implemented') 31311 31312 // events that mean 'the stream is over' 31313 // these are treated specially, and re-emitted 31314 // if they are listened for after emitting. 31315 const isEndish = ev => 31316 ev === 'end' || 31317 ev === 'finish' || 31318 ev === 'prefinish' 31319 31320 const isArrayBuffer = b => b instanceof ArrayBuffer || 31321 typeof b === 'object' && 31322 b.constructor && 31323 b.constructor.name === 'ArrayBuffer' && 31324 b.byteLength >= 0 31325 31326 const isArrayBufferView = b => !Buffer.isBuffer(b) && ArrayBuffer.isView(b) 31327 31328 class Pipe { 31329 constructor (src, dest, opts) { 31330 this.src = src 31331 this.dest = dest 31332 this.opts = opts 31333 this.ondrain = () => src[RESUME]() 31334 dest.on('drain', this.ondrain) 31335 } 31336 unpipe () { 31337 this.dest.removeListener('drain', this.ondrain) 31338 } 31339 // istanbul ignore next - only here for the prototype 31340 proxyErrors () {} 31341 end () { 31342 this.unpipe() 31343 if (this.opts.end) 31344 this.dest.end() 31345 } 31346 } 31347 31348 class PipeProxyErrors extends Pipe { 31349 unpipe () { 31350 this.src.removeListener('error', this.proxyErrors) 31351 super.unpipe() 31352 } 31353 constructor (src, dest, opts) { 31354 super(src, dest, opts) 31355 this.proxyErrors = er => dest.emit('error', er) 31356 src.on('error', this.proxyErrors) 31357 } 31358 } 31359 31360 module.exports = class Minipass extends Stream { 31361 constructor (options) { 31362 super() 31363 this[FLOWING] = false 31364 // whether we're explicitly paused 31365 this[PAUSED] = false 31366 this.pipes = [] 31367 this.buffer = [] 31368 this[OBJECTMODE] = options && options.objectMode || false 31369 if (this[OBJECTMODE]) 31370 this[ENCODING] = null 31371 else 31372 this[ENCODING] = options && options.encoding || null 31373 if (this[ENCODING] === 'buffer') 31374 this[ENCODING] = null 31375 this[ASYNC] = options && !!options.async || false 31376 this[DECODER] = this[ENCODING] ? new SD(this[ENCODING]) : null 31377 this[EOF] = false 31378 this[EMITTED_END] = false 31379 this[EMITTING_END] = false 31380 this[CLOSED] = false 31381 this[EMITTED_ERROR] = null 31382 this.writable = true 31383 this.readable = true 31384 this[BUFFERLENGTH] = 0 31385 this[DESTROYED] = false 31386 } 31387 31388 get bufferLength () { return this[BUFFERLENGTH] } 31389 31390 get encoding () { return this[ENCODING] } 31391 set encoding (enc) { 31392 if (this[OBJECTMODE]) 31393 throw new Error('cannot set encoding in objectMode') 31394 31395 if (this[ENCODING] && enc !== this[ENCODING] && 31396 (this[DECODER] && this[DECODER].lastNeed || this[BUFFERLENGTH])) 31397 throw new Error('cannot change encoding') 31398 31399 if (this[ENCODING] !== enc) { 31400 this[DECODER] = enc ? new SD(enc) : null 31401 if (this.buffer.length) 31402 this.buffer = this.buffer.map(chunk => this[DECODER].write(chunk)) 31403 } 31404 31405 this[ENCODING] = enc 31406 } 31407 31408 setEncoding (enc) { 31409 this.encoding = enc 31410 } 31411 31412 get objectMode () { return this[OBJECTMODE] } 31413 set objectMode (om) { this[OBJECTMODE] = this[OBJECTMODE] || !!om } 31414 31415 get ['async'] () { return this[ASYNC] } 31416 set ['async'] (a) { this[ASYNC] = this[ASYNC] || !!a } 31417 31418 write (chunk, encoding, cb) { 31419 if (this[EOF]) 31420 throw new Error('write after end') 31421 31422 if (this[DESTROYED]) { 31423 this.emit('error', Object.assign( 31424 new Error('Cannot call write after a stream was destroyed'), 31425 { code: 'ERR_STREAM_DESTROYED' } 31426 )) 31427 return true 31428 } 31429 31430 if (typeof encoding === 'function') 31431 cb = encoding, encoding = 'utf8' 31432 31433 if (!encoding) 31434 encoding = 'utf8' 31435 31436 const fn = this[ASYNC] ? defer : f => f() 31437 31438 // convert array buffers and typed array views into buffers 31439 // at some point in the future, we may want to do the opposite! 31440 // leave strings and buffers as-is 31441 // anything else switches us into object mode 31442 if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) { 31443 if (isArrayBufferView(chunk)) 31444 chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength) 31445 else if (isArrayBuffer(chunk)) 31446 chunk = Buffer.from(chunk) 31447 else if (typeof chunk !== 'string') 31448 // use the setter so we throw if we have encoding set 31449 this.objectMode = true 31450 } 31451 31452 // handle object mode up front, since it's simpler 31453 // this yields better performance, fewer checks later. 31454 if (this[OBJECTMODE]) { 31455 /* istanbul ignore if - maybe impossible? */ 31456 if (this.flowing && this[BUFFERLENGTH] !== 0) 31457 this[FLUSH](true) 31458 31459 if (this.flowing) 31460 this.emit('data', chunk) 31461 else 31462 this[BUFFERPUSH](chunk) 31463 31464 if (this[BUFFERLENGTH] !== 0) 31465 this.emit('readable') 31466 31467 if (cb) 31468 fn(cb) 31469 31470 return this.flowing 31471 } 31472 31473 // at this point the chunk is a buffer or string 31474 // don't buffer it up or send it to the decoder 31475 if (!chunk.length) { 31476 if (this[BUFFERLENGTH] !== 0) 31477 this.emit('readable') 31478 if (cb) 31479 fn(cb) 31480 return this.flowing 31481 } 31482 31483 // fast-path writing strings of same encoding to a stream with 31484 // an empty buffer, skipping the buffer/decoder dance 31485 if (typeof chunk === 'string' && 31486 // unless it is a string already ready for us to use 31487 !(encoding === this[ENCODING] && !this[DECODER].lastNeed)) { 31488 chunk = Buffer.from(chunk, encoding) 31489 } 31490 31491 if (Buffer.isBuffer(chunk) && this[ENCODING]) 31492 chunk = this[DECODER].write(chunk) 31493 31494 // Note: flushing CAN potentially switch us into not-flowing mode 31495 if (this.flowing && this[BUFFERLENGTH] !== 0) 31496 this[FLUSH](true) 31497 31498 if (this.flowing) 31499 this.emit('data', chunk) 31500 else 31501 this[BUFFERPUSH](chunk) 31502 31503 if (this[BUFFERLENGTH] !== 0) 31504 this.emit('readable') 31505 31506 if (cb) 31507 fn(cb) 31508 31509 return this.flowing 31510 } 31511 31512 read (n) { 31513 if (this[DESTROYED]) 31514 return null 31515 31516 if (this[BUFFERLENGTH] === 0 || n === 0 || n > this[BUFFERLENGTH]) { 31517 this[MAYBE_EMIT_END]() 31518 return null 31519 } 31520 31521 if (this[OBJECTMODE]) 31522 n = null 31523 31524 if (this.buffer.length > 1 && !this[OBJECTMODE]) { 31525 if (this.encoding) 31526 this.buffer = [this.buffer.join('')] 31527 else 31528 this.buffer = [Buffer.concat(this.buffer, this[BUFFERLENGTH])] 31529 } 31530 31531 const ret = this[READ](n || null, this.buffer[0]) 31532 this[MAYBE_EMIT_END]() 31533 return ret 31534 } 31535 31536 [READ] (n, chunk) { 31537 if (n === chunk.length || n === null) 31538 this[BUFFERSHIFT]() 31539 else { 31540 this.buffer[0] = chunk.slice(n) 31541 chunk = chunk.slice(0, n) 31542 this[BUFFERLENGTH] -= n 31543 } 31544 31545 this.emit('data', chunk) 31546 31547 if (!this.buffer.length && !this[EOF]) 31548 this.emit('drain') 31549 31550 return chunk 31551 } 31552 31553 end (chunk, encoding, cb) { 31554 if (typeof chunk === 'function') 31555 cb = chunk, chunk = null 31556 if (typeof encoding === 'function') 31557 cb = encoding, encoding = 'utf8' 31558 if (chunk) 31559 this.write(chunk, encoding) 31560 if (cb) 31561 this.once('end', cb) 31562 this[EOF] = true 31563 this.writable = false 31564 31565 // if we haven't written anything, then go ahead and emit, 31566 // even if we're not reading. 31567 // we'll re-emit if a new 'end' listener is added anyway. 31568 // This makes MP more suitable to write-only use cases. 31569 if (this.flowing || !this[PAUSED]) 31570 this[MAYBE_EMIT_END]() 31571 return this 31572 } 31573 31574 // don't let the internal resume be overwritten 31575 [RESUME] () { 31576 if (this[DESTROYED]) 31577 return 31578 31579 this[PAUSED] = false 31580 this[FLOWING] = true 31581 this.emit('resume') 31582 if (this.buffer.length) 31583 this[FLUSH]() 31584 else if (this[EOF]) 31585 this[MAYBE_EMIT_END]() 31586 else 31587 this.emit('drain') 31588 } 31589 31590 resume () { 31591 return this[RESUME]() 31592 } 31593 31594 pause () { 31595 this[FLOWING] = false 31596 this[PAUSED] = true 31597 } 31598 31599 get destroyed () { 31600 return this[DESTROYED] 31601 } 31602 31603 get flowing () { 31604 return this[FLOWING] 31605 } 31606 31607 get paused () { 31608 return this[PAUSED] 31609 } 31610 31611 [BUFFERPUSH] (chunk) { 31612 if (this[OBJECTMODE]) 31613 this[BUFFERLENGTH] += 1 31614 else 31615 this[BUFFERLENGTH] += chunk.length 31616 this.buffer.push(chunk) 31617 } 31618 31619 [BUFFERSHIFT] () { 31620 if (this.buffer.length) { 31621 if (this[OBJECTMODE]) 31622 this[BUFFERLENGTH] -= 1 31623 else 31624 this[BUFFERLENGTH] -= this.buffer[0].length 31625 } 31626 return this.buffer.shift() 31627 } 31628 31629 [FLUSH] (noDrain) { 31630 do {} while (this[FLUSHCHUNK](this[BUFFERSHIFT]())) 31631 31632 if (!noDrain && !this.buffer.length && !this[EOF]) 31633 this.emit('drain') 31634 } 31635 31636 [FLUSHCHUNK] (chunk) { 31637 return chunk ? (this.emit('data', chunk), this.flowing) : false 31638 } 31639 31640 pipe (dest, opts) { 31641 if (this[DESTROYED]) 31642 return 31643 31644 const ended = this[EMITTED_END] 31645 opts = opts || {} 31646 if (dest === proc.stdout || dest === proc.stderr) 31647 opts.end = false 31648 else 31649 opts.end = opts.end !== false 31650 opts.proxyErrors = !!opts.proxyErrors 31651 31652 // piping an ended stream ends immediately 31653 if (ended) { 31654 if (opts.end) 31655 dest.end() 31656 } else { 31657 this.pipes.push(!opts.proxyErrors ? new Pipe(this, dest, opts) 31658 : new PipeProxyErrors(this, dest, opts)) 31659 if (this[ASYNC]) 31660 defer(() => this[RESUME]()) 31661 else 31662 this[RESUME]() 31663 } 31664 31665 return dest 31666 } 31667 31668 unpipe (dest) { 31669 const p = this.pipes.find(p => p.dest === dest) 31670 if (p) { 31671 this.pipes.splice(this.pipes.indexOf(p), 1) 31672 p.unpipe() 31673 } 31674 } 31675 31676 addListener (ev, fn) { 31677 return this.on(ev, fn) 31678 } 31679 31680 on (ev, fn) { 31681 const ret = super.on(ev, fn) 31682 if (ev === 'data' && !this.pipes.length && !this.flowing) 31683 this[RESUME]() 31684 else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) 31685 super.emit('readable') 31686 else if (isEndish(ev) && this[EMITTED_END]) { 31687 super.emit(ev) 31688 this.removeAllListeners(ev) 31689 } else if (ev === 'error' && this[EMITTED_ERROR]) { 31690 if (this[ASYNC]) 31691 defer(() => fn.call(this, this[EMITTED_ERROR])) 31692 else 31693 fn.call(this, this[EMITTED_ERROR]) 31694 } 31695 return ret 31696 } 31697 31698 get emittedEnd () { 31699 return this[EMITTED_END] 31700 } 31701 31702 [MAYBE_EMIT_END] () { 31703 if (!this[EMITTING_END] && 31704 !this[EMITTED_END] && 31705 !this[DESTROYED] && 31706 this.buffer.length === 0 && 31707 this[EOF]) { 31708 this[EMITTING_END] = true 31709 this.emit('end') 31710 this.emit('prefinish') 31711 this.emit('finish') 31712 if (this[CLOSED]) 31713 this.emit('close') 31714 this[EMITTING_END] = false 31715 } 31716 } 31717 31718 emit (ev, data, ...extra) { 31719 // error and close are only events allowed after calling destroy() 31720 if (ev !== 'error' && ev !== 'close' && ev !== DESTROYED && this[DESTROYED]) 31721 return 31722 else if (ev === 'data') { 31723 return !data ? false 31724 : this[ASYNC] ? defer(() => this[EMITDATA](data)) 31725 : this[EMITDATA](data) 31726 } else if (ev === 'end') { 31727 return this[EMITEND]() 31728 } else if (ev === 'close') { 31729 this[CLOSED] = true 31730 // don't emit close before 'end' and 'finish' 31731 if (!this[EMITTED_END] && !this[DESTROYED]) 31732 return 31733 const ret = super.emit('close') 31734 this.removeAllListeners('close') 31735 return ret 31736 } else if (ev === 'error') { 31737 this[EMITTED_ERROR] = data 31738 const ret = super.emit('error', data) 31739 this[MAYBE_EMIT_END]() 31740 return ret 31741 } else if (ev === 'resume') { 31742 const ret = super.emit('resume') 31743 this[MAYBE_EMIT_END]() 31744 return ret 31745 } else if (ev === 'finish' || ev === 'prefinish') { 31746 const ret = super.emit(ev) 31747 this.removeAllListeners(ev) 31748 return ret 31749 } 31750 31751 // Some other unknown event 31752 const ret = super.emit(ev, data, ...extra) 31753 this[MAYBE_EMIT_END]() 31754 return ret 31755 } 31756 31757 [EMITDATA] (data) { 31758 for (const p of this.pipes) { 31759 if (p.dest.write(data) === false) 31760 this.pause() 31761 } 31762 const ret = super.emit('data', data) 31763 this[MAYBE_EMIT_END]() 31764 return ret 31765 } 31766 31767 [EMITEND] () { 31768 if (this[EMITTED_END]) 31769 return 31770 31771 this[EMITTED_END] = true 31772 this.readable = false 31773 if (this[ASYNC]) 31774 defer(() => this[EMITEND2]()) 31775 else 31776 this[EMITEND2]() 31777 } 31778 31779 [EMITEND2] () { 31780 if (this[DECODER]) { 31781 const data = this[DECODER].end() 31782 if (data) { 31783 for (const p of this.pipes) { 31784 p.dest.write(data) 31785 } 31786 super.emit('data', data) 31787 } 31788 } 31789 31790 for (const p of this.pipes) { 31791 p.end() 31792 } 31793 const ret = super.emit('end') 31794 this.removeAllListeners('end') 31795 return ret 31796 } 31797 31798 // const all = await stream.collect() 31799 collect () { 31800 const buf = [] 31801 if (!this[OBJECTMODE]) 31802 buf.dataLength = 0 31803 // set the promise first, in case an error is raised 31804 // by triggering the flow here. 31805 const p = this.promise() 31806 this.on('data', c => { 31807 buf.push(c) 31808 if (!this[OBJECTMODE]) 31809 buf.dataLength += c.length 31810 }) 31811 return p.then(() => buf) 31812 } 31813 31814 // const data = await stream.concat() 31815 concat () { 31816 return this[OBJECTMODE] 31817 ? Promise.reject(new Error('cannot concat in objectMode')) 31818 : this.collect().then(buf => 31819 this[OBJECTMODE] 31820 ? Promise.reject(new Error('cannot concat in objectMode')) 31821 : this[ENCODING] ? buf.join('') : Buffer.concat(buf, buf.dataLength)) 31822 } 31823 31824 // stream.promise().then(() => done, er => emitted error) 31825 promise () { 31826 return new Promise((resolve, reject) => { 31827 this.on(DESTROYED, () => reject(new Error('stream destroyed'))) 31828 this.on('error', er => reject(er)) 31829 this.on('end', () => resolve()) 31830 }) 31831 } 31832 31833 // for await (let chunk of stream) 31834 [ASYNCITERATOR] () { 31835 const next = () => { 31836 const res = this.read() 31837 if (res !== null) 31838 return Promise.resolve({ done: false, value: res }) 31839 31840 if (this[EOF]) 31841 return Promise.resolve({ done: true }) 31842 31843 let resolve = null 31844 let reject = null 31845 const onerr = er => { 31846 this.removeListener('data', ondata) 31847 this.removeListener('end', onend) 31848 reject(er) 31849 } 31850 const ondata = value => { 31851 this.removeListener('error', onerr) 31852 this.removeListener('end', onend) 31853 this.pause() 31854 resolve({ value: value, done: !!this[EOF] }) 31855 } 31856 const onend = () => { 31857 this.removeListener('error', onerr) 31858 this.removeListener('data', ondata) 31859 resolve({ done: true }) 31860 } 31861 const ondestroy = () => onerr(new Error('stream destroyed')) 31862 return new Promise((res, rej) => { 31863 reject = rej 31864 resolve = res 31865 this.once(DESTROYED, ondestroy) 31866 this.once('error', onerr) 31867 this.once('end', onend) 31868 this.once('data', ondata) 31869 }) 31870 } 31871 31872 return { next } 31873 } 31874 31875 // for (let chunk of stream) 31876 [ITERATOR] () { 31877 const next = () => { 31878 const value = this.read() 31879 const done = value === null 31880 return { value, done } 31881 } 31882 return { next } 31883 } 31884 31885 destroy (er) { 31886 if (this[DESTROYED]) { 31887 if (er) 31888 this.emit('error', er) 31889 else 31890 this.emit(DESTROYED) 31891 return this 31892 } 31893 31894 this[DESTROYED] = true 31895 31896 // throw away all buffered data, it's never coming out 31897 this.buffer.length = 0 31898 this[BUFFERLENGTH] = 0 31899 31900 if (typeof this.close === 'function' && !this[CLOSED]) 31901 this.close() 31902 31903 if (er) 31904 this.emit('error', er) 31905 else // if no error to emit, still reject pending promises 31906 this.emit(DESTROYED) 31907 31908 return this 31909 } 31910 31911 static isStream (s) { 31912 return !!s && (s instanceof Minipass || s instanceof Stream || 31913 s instanceof EE && ( 31914 typeof s.pipe === 'function' || // readable 31915 (typeof s.write === 'function' && typeof s.end === 'function') // writable 31916 )) 31917 } 31918 } 31919 31920 31921 /***/ }), 31922 31923 /***/ 69891: 31924 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 31925 31926 const Minipass = __nccwpck_require__(33392) 31927 const EE = __nccwpck_require__(82361) 31928 const isStream = s => s && s instanceof EE && ( 31929 typeof s.pipe === 'function' || // readable 31930 (typeof s.write === 'function' && typeof s.end === 'function') // writable 31931 ) 31932 31933 const _head = Symbol('_head') 31934 const _tail = Symbol('_tail') 31935 const _linkStreams = Symbol('_linkStreams') 31936 const _setHead = Symbol('_setHead') 31937 const _setTail = Symbol('_setTail') 31938 const _onError = Symbol('_onError') 31939 const _onData = Symbol('_onData') 31940 const _onEnd = Symbol('_onEnd') 31941 const _onDrain = Symbol('_onDrain') 31942 const _streams = Symbol('_streams') 31943 class Pipeline extends Minipass { 31944 constructor (opts, ...streams) { 31945 if (isStream(opts)) { 31946 streams.unshift(opts) 31947 opts = {} 31948 } 31949 31950 super(opts) 31951 this[_streams] = [] 31952 if (streams.length) 31953 this.push(...streams) 31954 } 31955 31956 [_linkStreams] (streams) { 31957 // reduce takes (left,right), and we return right to make it the 31958 // new left value. 31959 return streams.reduce((src, dest) => { 31960 src.on('error', er => dest.emit('error', er)) 31961 src.pipe(dest) 31962 return dest 31963 }) 31964 } 31965 31966 push (...streams) { 31967 this[_streams].push(...streams) 31968 if (this[_tail]) 31969 streams.unshift(this[_tail]) 31970 31971 const linkRet = this[_linkStreams](streams) 31972 31973 this[_setTail](linkRet) 31974 if (!this[_head]) 31975 this[_setHead](streams[0]) 31976 } 31977 31978 unshift (...streams) { 31979 this[_streams].unshift(...streams) 31980 if (this[_head]) 31981 streams.push(this[_head]) 31982 31983 const linkRet = this[_linkStreams](streams) 31984 this[_setHead](streams[0]) 31985 if (!this[_tail]) 31986 this[_setTail](linkRet) 31987 } 31988 31989 destroy (er) { 31990 // set fire to the whole thing. 31991 this[_streams].forEach(s => 31992 typeof s.destroy === 'function' && s.destroy()) 31993 return super.destroy(er) 31994 } 31995 31996 // readable interface -> tail 31997 [_setTail] (stream) { 31998 this[_tail] = stream 31999 stream.on('error', er => this[_onError](stream, er)) 32000 stream.on('data', chunk => this[_onData](stream, chunk)) 32001 stream.on('end', () => this[_onEnd](stream)) 32002 stream.on('finish', () => this[_onEnd](stream)) 32003 } 32004 32005 // errors proxied down the pipeline 32006 // they're considered part of the "read" interface 32007 [_onError] (stream, er) { 32008 if (stream === this[_tail]) 32009 this.emit('error', er) 32010 } 32011 [_onData] (stream, chunk) { 32012 if (stream === this[_tail]) 32013 super.write(chunk) 32014 } 32015 [_onEnd] (stream) { 32016 if (stream === this[_tail]) 32017 super.end() 32018 } 32019 pause () { 32020 super.pause() 32021 return this[_tail] && this[_tail].pause && this[_tail].pause() 32022 } 32023 32024 // NB: Minipass calls its internal private [RESUME] method during 32025 // pipe drains, to avoid hazards where stream.resume() is overridden. 32026 // Thus, we need to listen to the resume *event*, not override the 32027 // resume() method, and proxy *that* to the tail. 32028 emit (ev, ...args) { 32029 if (ev === 'resume' && this[_tail] && this[_tail].resume) 32030 this[_tail].resume() 32031 return super.emit(ev, ...args) 32032 } 32033 32034 // writable interface -> head 32035 [_setHead] (stream) { 32036 this[_head] = stream 32037 stream.on('drain', () => this[_onDrain](stream)) 32038 } 32039 [_onDrain] (stream) { 32040 if (stream === this[_head]) 32041 this.emit('drain') 32042 } 32043 write (chunk, enc, cb) { 32044 return this[_head].write(chunk, enc, cb) && 32045 (this.flowing || this.buffer.length === 0) 32046 } 32047 end (chunk, enc, cb) { 32048 this[_head].end(chunk, enc, cb) 32049 return this 32050 } 32051 } 32052 32053 module.exports = Pipeline 32054 32055 32056 /***/ }), 32057 32058 /***/ 33392: 32059 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 32060 32061 "use strict"; 32062 32063 const proc = typeof process === 'object' && process ? process : { 32064 stdout: null, 32065 stderr: null, 32066 } 32067 const EE = __nccwpck_require__(82361) 32068 const Stream = __nccwpck_require__(12781) 32069 const SD = (__nccwpck_require__(71576).StringDecoder) 32070 32071 const EOF = Symbol('EOF') 32072 const MAYBE_EMIT_END = Symbol('maybeEmitEnd') 32073 const EMITTED_END = Symbol('emittedEnd') 32074 const EMITTING_END = Symbol('emittingEnd') 32075 const EMITTED_ERROR = Symbol('emittedError') 32076 const CLOSED = Symbol('closed') 32077 const READ = Symbol('read') 32078 const FLUSH = Symbol('flush') 32079 const FLUSHCHUNK = Symbol('flushChunk') 32080 const ENCODING = Symbol('encoding') 32081 const DECODER = Symbol('decoder') 32082 const FLOWING = Symbol('flowing') 32083 const PAUSED = Symbol('paused') 32084 const RESUME = Symbol('resume') 32085 const BUFFERLENGTH = Symbol('bufferLength') 32086 const BUFFERPUSH = Symbol('bufferPush') 32087 const BUFFERSHIFT = Symbol('bufferShift') 32088 const OBJECTMODE = Symbol('objectMode') 32089 const DESTROYED = Symbol('destroyed') 32090 const EMITDATA = Symbol('emitData') 32091 const EMITEND = Symbol('emitEnd') 32092 const EMITEND2 = Symbol('emitEnd2') 32093 const ASYNC = Symbol('async') 32094 32095 const defer = fn => Promise.resolve().then(fn) 32096 32097 // TODO remove when Node v8 support drops 32098 const doIter = global._MP_NO_ITERATOR_SYMBOLS_ !== '1' 32099 const ASYNCITERATOR = doIter && Symbol.asyncIterator 32100 || Symbol('asyncIterator not implemented') 32101 const ITERATOR = doIter && Symbol.iterator 32102 || Symbol('iterator not implemented') 32103 32104 // events that mean 'the stream is over' 32105 // these are treated specially, and re-emitted 32106 // if they are listened for after emitting. 32107 const isEndish = ev => 32108 ev === 'end' || 32109 ev === 'finish' || 32110 ev === 'prefinish' 32111 32112 const isArrayBuffer = b => b instanceof ArrayBuffer || 32113 typeof b === 'object' && 32114 b.constructor && 32115 b.constructor.name === 'ArrayBuffer' && 32116 b.byteLength >= 0 32117 32118 const isArrayBufferView = b => !Buffer.isBuffer(b) && ArrayBuffer.isView(b) 32119 32120 class Pipe { 32121 constructor (src, dest, opts) { 32122 this.src = src 32123 this.dest = dest 32124 this.opts = opts 32125 this.ondrain = () => src[RESUME]() 32126 dest.on('drain', this.ondrain) 32127 } 32128 unpipe () { 32129 this.dest.removeListener('drain', this.ondrain) 32130 } 32131 // istanbul ignore next - only here for the prototype 32132 proxyErrors () {} 32133 end () { 32134 this.unpipe() 32135 if (this.opts.end) 32136 this.dest.end() 32137 } 32138 } 32139 32140 class PipeProxyErrors extends Pipe { 32141 unpipe () { 32142 this.src.removeListener('error', this.proxyErrors) 32143 super.unpipe() 32144 } 32145 constructor (src, dest, opts) { 32146 super(src, dest, opts) 32147 this.proxyErrors = er => dest.emit('error', er) 32148 src.on('error', this.proxyErrors) 32149 } 32150 } 32151 32152 module.exports = class Minipass extends Stream { 32153 constructor (options) { 32154 super() 32155 this[FLOWING] = false 32156 // whether we're explicitly paused 32157 this[PAUSED] = false 32158 this.pipes = [] 32159 this.buffer = [] 32160 this[OBJECTMODE] = options && options.objectMode || false 32161 if (this[OBJECTMODE]) 32162 this[ENCODING] = null 32163 else 32164 this[ENCODING] = options && options.encoding || null 32165 if (this[ENCODING] === 'buffer') 32166 this[ENCODING] = null 32167 this[ASYNC] = options && !!options.async || false 32168 this[DECODER] = this[ENCODING] ? new SD(this[ENCODING]) : null 32169 this[EOF] = false 32170 this[EMITTED_END] = false 32171 this[EMITTING_END] = false 32172 this[CLOSED] = false 32173 this[EMITTED_ERROR] = null 32174 this.writable = true 32175 this.readable = true 32176 this[BUFFERLENGTH] = 0 32177 this[DESTROYED] = false 32178 } 32179 32180 get bufferLength () { return this[BUFFERLENGTH] } 32181 32182 get encoding () { return this[ENCODING] } 32183 set encoding (enc) { 32184 if (this[OBJECTMODE]) 32185 throw new Error('cannot set encoding in objectMode') 32186 32187 if (this[ENCODING] && enc !== this[ENCODING] && 32188 (this[DECODER] && this[DECODER].lastNeed || this[BUFFERLENGTH])) 32189 throw new Error('cannot change encoding') 32190 32191 if (this[ENCODING] !== enc) { 32192 this[DECODER] = enc ? new SD(enc) : null 32193 if (this.buffer.length) 32194 this.buffer = this.buffer.map(chunk => this[DECODER].write(chunk)) 32195 } 32196 32197 this[ENCODING] = enc 32198 } 32199 32200 setEncoding (enc) { 32201 this.encoding = enc 32202 } 32203 32204 get objectMode () { return this[OBJECTMODE] } 32205 set objectMode (om) { this[OBJECTMODE] = this[OBJECTMODE] || !!om } 32206 32207 get ['async'] () { return this[ASYNC] } 32208 set ['async'] (a) { this[ASYNC] = this[ASYNC] || !!a } 32209 32210 write (chunk, encoding, cb) { 32211 if (this[EOF]) 32212 throw new Error('write after end') 32213 32214 if (this[DESTROYED]) { 32215 this.emit('error', Object.assign( 32216 new Error('Cannot call write after a stream was destroyed'), 32217 { code: 'ERR_STREAM_DESTROYED' } 32218 )) 32219 return true 32220 } 32221 32222 if (typeof encoding === 'function') 32223 cb = encoding, encoding = 'utf8' 32224 32225 if (!encoding) 32226 encoding = 'utf8' 32227 32228 const fn = this[ASYNC] ? defer : f => f() 32229 32230 // convert array buffers and typed array views into buffers 32231 // at some point in the future, we may want to do the opposite! 32232 // leave strings and buffers as-is 32233 // anything else switches us into object mode 32234 if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) { 32235 if (isArrayBufferView(chunk)) 32236 chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength) 32237 else if (isArrayBuffer(chunk)) 32238 chunk = Buffer.from(chunk) 32239 else if (typeof chunk !== 'string') 32240 // use the setter so we throw if we have encoding set 32241 this.objectMode = true 32242 } 32243 32244 // handle object mode up front, since it's simpler 32245 // this yields better performance, fewer checks later. 32246 if (this[OBJECTMODE]) { 32247 /* istanbul ignore if - maybe impossible? */ 32248 if (this.flowing && this[BUFFERLENGTH] !== 0) 32249 this[FLUSH](true) 32250 32251 if (this.flowing) 32252 this.emit('data', chunk) 32253 else 32254 this[BUFFERPUSH](chunk) 32255 32256 if (this[BUFFERLENGTH] !== 0) 32257 this.emit('readable') 32258 32259 if (cb) 32260 fn(cb) 32261 32262 return this.flowing 32263 } 32264 32265 // at this point the chunk is a buffer or string 32266 // don't buffer it up or send it to the decoder 32267 if (!chunk.length) { 32268 if (this[BUFFERLENGTH] !== 0) 32269 this.emit('readable') 32270 if (cb) 32271 fn(cb) 32272 return this.flowing 32273 } 32274 32275 // fast-path writing strings of same encoding to a stream with 32276 // an empty buffer, skipping the buffer/decoder dance 32277 if (typeof chunk === 'string' && 32278 // unless it is a string already ready for us to use 32279 !(encoding === this[ENCODING] && !this[DECODER].lastNeed)) { 32280 chunk = Buffer.from(chunk, encoding) 32281 } 32282 32283 if (Buffer.isBuffer(chunk) && this[ENCODING]) 32284 chunk = this[DECODER].write(chunk) 32285 32286 // Note: flushing CAN potentially switch us into not-flowing mode 32287 if (this.flowing && this[BUFFERLENGTH] !== 0) 32288 this[FLUSH](true) 32289 32290 if (this.flowing) 32291 this.emit('data', chunk) 32292 else 32293 this[BUFFERPUSH](chunk) 32294 32295 if (this[BUFFERLENGTH] !== 0) 32296 this.emit('readable') 32297 32298 if (cb) 32299 fn(cb) 32300 32301 return this.flowing 32302 } 32303 32304 read (n) { 32305 if (this[DESTROYED]) 32306 return null 32307 32308 if (this[BUFFERLENGTH] === 0 || n === 0 || n > this[BUFFERLENGTH]) { 32309 this[MAYBE_EMIT_END]() 32310 return null 32311 } 32312 32313 if (this[OBJECTMODE]) 32314 n = null 32315 32316 if (this.buffer.length > 1 && !this[OBJECTMODE]) { 32317 if (this.encoding) 32318 this.buffer = [this.buffer.join('')] 32319 else 32320 this.buffer = [Buffer.concat(this.buffer, this[BUFFERLENGTH])] 32321 } 32322 32323 const ret = this[READ](n || null, this.buffer[0]) 32324 this[MAYBE_EMIT_END]() 32325 return ret 32326 } 32327 32328 [READ] (n, chunk) { 32329 if (n === chunk.length || n === null) 32330 this[BUFFERSHIFT]() 32331 else { 32332 this.buffer[0] = chunk.slice(n) 32333 chunk = chunk.slice(0, n) 32334 this[BUFFERLENGTH] -= n 32335 } 32336 32337 this.emit('data', chunk) 32338 32339 if (!this.buffer.length && !this[EOF]) 32340 this.emit('drain') 32341 32342 return chunk 32343 } 32344 32345 end (chunk, encoding, cb) { 32346 if (typeof chunk === 'function') 32347 cb = chunk, chunk = null 32348 if (typeof encoding === 'function') 32349 cb = encoding, encoding = 'utf8' 32350 if (chunk) 32351 this.write(chunk, encoding) 32352 if (cb) 32353 this.once('end', cb) 32354 this[EOF] = true 32355 this.writable = false 32356 32357 // if we haven't written anything, then go ahead and emit, 32358 // even if we're not reading. 32359 // we'll re-emit if a new 'end' listener is added anyway. 32360 // This makes MP more suitable to write-only use cases. 32361 if (this.flowing || !this[PAUSED]) 32362 this[MAYBE_EMIT_END]() 32363 return this 32364 } 32365 32366 // don't let the internal resume be overwritten 32367 [RESUME] () { 32368 if (this[DESTROYED]) 32369 return 32370 32371 this[PAUSED] = false 32372 this[FLOWING] = true 32373 this.emit('resume') 32374 if (this.buffer.length) 32375 this[FLUSH]() 32376 else if (this[EOF]) 32377 this[MAYBE_EMIT_END]() 32378 else 32379 this.emit('drain') 32380 } 32381 32382 resume () { 32383 return this[RESUME]() 32384 } 32385 32386 pause () { 32387 this[FLOWING] = false 32388 this[PAUSED] = true 32389 } 32390 32391 get destroyed () { 32392 return this[DESTROYED] 32393 } 32394 32395 get flowing () { 32396 return this[FLOWING] 32397 } 32398 32399 get paused () { 32400 return this[PAUSED] 32401 } 32402 32403 [BUFFERPUSH] (chunk) { 32404 if (this[OBJECTMODE]) 32405 this[BUFFERLENGTH] += 1 32406 else 32407 this[BUFFERLENGTH] += chunk.length 32408 this.buffer.push(chunk) 32409 } 32410 32411 [BUFFERSHIFT] () { 32412 if (this.buffer.length) { 32413 if (this[OBJECTMODE]) 32414 this[BUFFERLENGTH] -= 1 32415 else 32416 this[BUFFERLENGTH] -= this.buffer[0].length 32417 } 32418 return this.buffer.shift() 32419 } 32420 32421 [FLUSH] (noDrain) { 32422 do {} while (this[FLUSHCHUNK](this[BUFFERSHIFT]())) 32423 32424 if (!noDrain && !this.buffer.length && !this[EOF]) 32425 this.emit('drain') 32426 } 32427 32428 [FLUSHCHUNK] (chunk) { 32429 return chunk ? (this.emit('data', chunk), this.flowing) : false 32430 } 32431 32432 pipe (dest, opts) { 32433 if (this[DESTROYED]) 32434 return 32435 32436 const ended = this[EMITTED_END] 32437 opts = opts || {} 32438 if (dest === proc.stdout || dest === proc.stderr) 32439 opts.end = false 32440 else 32441 opts.end = opts.end !== false 32442 opts.proxyErrors = !!opts.proxyErrors 32443 32444 // piping an ended stream ends immediately 32445 if (ended) { 32446 if (opts.end) 32447 dest.end() 32448 } else { 32449 this.pipes.push(!opts.proxyErrors ? new Pipe(this, dest, opts) 32450 : new PipeProxyErrors(this, dest, opts)) 32451 if (this[ASYNC]) 32452 defer(() => this[RESUME]()) 32453 else 32454 this[RESUME]() 32455 } 32456 32457 return dest 32458 } 32459 32460 unpipe (dest) { 32461 const p = this.pipes.find(p => p.dest === dest) 32462 if (p) { 32463 this.pipes.splice(this.pipes.indexOf(p), 1) 32464 p.unpipe() 32465 } 32466 } 32467 32468 addListener (ev, fn) { 32469 return this.on(ev, fn) 32470 } 32471 32472 on (ev, fn) { 32473 const ret = super.on(ev, fn) 32474 if (ev === 'data' && !this.pipes.length && !this.flowing) 32475 this[RESUME]() 32476 else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) 32477 super.emit('readable') 32478 else if (isEndish(ev) && this[EMITTED_END]) { 32479 super.emit(ev) 32480 this.removeAllListeners(ev) 32481 } else if (ev === 'error' && this[EMITTED_ERROR]) { 32482 if (this[ASYNC]) 32483 defer(() => fn.call(this, this[EMITTED_ERROR])) 32484 else 32485 fn.call(this, this[EMITTED_ERROR]) 32486 } 32487 return ret 32488 } 32489 32490 get emittedEnd () { 32491 return this[EMITTED_END] 32492 } 32493 32494 [MAYBE_EMIT_END] () { 32495 if (!this[EMITTING_END] && 32496 !this[EMITTED_END] && 32497 !this[DESTROYED] && 32498 this.buffer.length === 0 && 32499 this[EOF]) { 32500 this[EMITTING_END] = true 32501 this.emit('end') 32502 this.emit('prefinish') 32503 this.emit('finish') 32504 if (this[CLOSED]) 32505 this.emit('close') 32506 this[EMITTING_END] = false 32507 } 32508 } 32509 32510 emit (ev, data, ...extra) { 32511 // error and close are only events allowed after calling destroy() 32512 if (ev !== 'error' && ev !== 'close' && ev !== DESTROYED && this[DESTROYED]) 32513 return 32514 else if (ev === 'data') { 32515 return !data ? false 32516 : this[ASYNC] ? defer(() => this[EMITDATA](data)) 32517 : this[EMITDATA](data) 32518 } else if (ev === 'end') { 32519 return this[EMITEND]() 32520 } else if (ev === 'close') { 32521 this[CLOSED] = true 32522 // don't emit close before 'end' and 'finish' 32523 if (!this[EMITTED_END] && !this[DESTROYED]) 32524 return 32525 const ret = super.emit('close') 32526 this.removeAllListeners('close') 32527 return ret 32528 } else if (ev === 'error') { 32529 this[EMITTED_ERROR] = data 32530 const ret = super.emit('error', data) 32531 this[MAYBE_EMIT_END]() 32532 return ret 32533 } else if (ev === 'resume') { 32534 const ret = super.emit('resume') 32535 this[MAYBE_EMIT_END]() 32536 return ret 32537 } else if (ev === 'finish' || ev === 'prefinish') { 32538 const ret = super.emit(ev) 32539 this.removeAllListeners(ev) 32540 return ret 32541 } 32542 32543 // Some other unknown event 32544 const ret = super.emit(ev, data, ...extra) 32545 this[MAYBE_EMIT_END]() 32546 return ret 32547 } 32548 32549 [EMITDATA] (data) { 32550 for (const p of this.pipes) { 32551 if (p.dest.write(data) === false) 32552 this.pause() 32553 } 32554 const ret = super.emit('data', data) 32555 this[MAYBE_EMIT_END]() 32556 return ret 32557 } 32558 32559 [EMITEND] () { 32560 if (this[EMITTED_END]) 32561 return 32562 32563 this[EMITTED_END] = true 32564 this.readable = false 32565 if (this[ASYNC]) 32566 defer(() => this[EMITEND2]()) 32567 else 32568 this[EMITEND2]() 32569 } 32570 32571 [EMITEND2] () { 32572 if (this[DECODER]) { 32573 const data = this[DECODER].end() 32574 if (data) { 32575 for (const p of this.pipes) { 32576 p.dest.write(data) 32577 } 32578 super.emit('data', data) 32579 } 32580 } 32581 32582 for (const p of this.pipes) { 32583 p.end() 32584 } 32585 const ret = super.emit('end') 32586 this.removeAllListeners('end') 32587 return ret 32588 } 32589 32590 // const all = await stream.collect() 32591 collect () { 32592 const buf = [] 32593 if (!this[OBJECTMODE]) 32594 buf.dataLength = 0 32595 // set the promise first, in case an error is raised 32596 // by triggering the flow here. 32597 const p = this.promise() 32598 this.on('data', c => { 32599 buf.push(c) 32600 if (!this[OBJECTMODE]) 32601 buf.dataLength += c.length 32602 }) 32603 return p.then(() => buf) 32604 } 32605 32606 // const data = await stream.concat() 32607 concat () { 32608 return this[OBJECTMODE] 32609 ? Promise.reject(new Error('cannot concat in objectMode')) 32610 : this.collect().then(buf => 32611 this[OBJECTMODE] 32612 ? Promise.reject(new Error('cannot concat in objectMode')) 32613 : this[ENCODING] ? buf.join('') : Buffer.concat(buf, buf.dataLength)) 32614 } 32615 32616 // stream.promise().then(() => done, er => emitted error) 32617 promise () { 32618 return new Promise((resolve, reject) => { 32619 this.on(DESTROYED, () => reject(new Error('stream destroyed'))) 32620 this.on('error', er => reject(er)) 32621 this.on('end', () => resolve()) 32622 }) 32623 } 32624 32625 // for await (let chunk of stream) 32626 [ASYNCITERATOR] () { 32627 const next = () => { 32628 const res = this.read() 32629 if (res !== null) 32630 return Promise.resolve({ done: false, value: res }) 32631 32632 if (this[EOF]) 32633 return Promise.resolve({ done: true }) 32634 32635 let resolve = null 32636 let reject = null 32637 const onerr = er => { 32638 this.removeListener('data', ondata) 32639 this.removeListener('end', onend) 32640 reject(er) 32641 } 32642 const ondata = value => { 32643 this.removeListener('error', onerr) 32644 this.removeListener('end', onend) 32645 this.pause() 32646 resolve({ value: value, done: !!this[EOF] }) 32647 } 32648 const onend = () => { 32649 this.removeListener('error', onerr) 32650 this.removeListener('data', ondata) 32651 resolve({ done: true }) 32652 } 32653 const ondestroy = () => onerr(new Error('stream destroyed')) 32654 return new Promise((res, rej) => { 32655 reject = rej 32656 resolve = res 32657 this.once(DESTROYED, ondestroy) 32658 this.once('error', onerr) 32659 this.once('end', onend) 32660 this.once('data', ondata) 32661 }) 32662 } 32663 32664 return { next } 32665 } 32666 32667 // for (let chunk of stream) 32668 [ITERATOR] () { 32669 const next = () => { 32670 const value = this.read() 32671 const done = value === null 32672 return { value, done } 32673 } 32674 return { next } 32675 } 32676 32677 destroy (er) { 32678 if (this[DESTROYED]) { 32679 if (er) 32680 this.emit('error', er) 32681 else 32682 this.emit(DESTROYED) 32683 return this 32684 } 32685 32686 this[DESTROYED] = true 32687 32688 // throw away all buffered data, it's never coming out 32689 this.buffer.length = 0 32690 this[BUFFERLENGTH] = 0 32691 32692 if (typeof this.close === 'function' && !this[CLOSED]) 32693 this.close() 32694 32695 if (er) 32696 this.emit('error', er) 32697 else // if no error to emit, still reject pending promises 32698 this.emit(DESTROYED) 32699 32700 return this 32701 } 32702 32703 static isStream (s) { 32704 return !!s && (s instanceof Minipass || s instanceof Stream || 32705 s instanceof EE && ( 32706 typeof s.pipe === 'function' || // readable 32707 (typeof s.write === 'function' && typeof s.end === 'function') // writable 32708 )) 32709 } 32710 } 32711 32712 32713 /***/ }), 32714 32715 /***/ 55952: 32716 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 32717 32718 const Minipass = __nccwpck_require__(38024) 32719 32720 class SizeError extends Error { 32721 constructor (found, expect) { 32722 super(`Bad data size: expected ${expect} bytes, but got ${found}`) 32723 this.expect = expect 32724 this.found = found 32725 this.code = 'EBADSIZE' 32726 Error.captureStackTrace(this, this.constructor) 32727 } 32728 get name () { 32729 return 'SizeError' 32730 } 32731 } 32732 32733 class MinipassSized extends Minipass { 32734 constructor (options = {}) { 32735 super(options) 32736 32737 if (options.objectMode) 32738 throw new TypeError(`${ 32739 this.constructor.name 32740 } streams only work with string and buffer data`) 32741 32742 this.found = 0 32743 this.expect = options.size 32744 if (typeof this.expect !== 'number' || 32745 this.expect > Number.MAX_SAFE_INTEGER || 32746 isNaN(this.expect) || 32747 this.expect < 0 || 32748 !isFinite(this.expect) || 32749 this.expect !== Math.floor(this.expect)) 32750 throw new Error('invalid expected size: ' + this.expect) 32751 } 32752 32753 write (chunk, encoding, cb) { 32754 const buffer = Buffer.isBuffer(chunk) ? chunk 32755 : typeof chunk === 'string' ? 32756 Buffer.from(chunk, typeof encoding === 'string' ? encoding : 'utf8') 32757 : chunk 32758 32759 if (!Buffer.isBuffer(buffer)) { 32760 this.emit('error', new TypeError(`${ 32761 this.constructor.name 32762 } streams only work with string and buffer data`)) 32763 return false 32764 } 32765 32766 this.found += buffer.length 32767 if (this.found > this.expect) 32768 this.emit('error', new SizeError(this.found, this.expect)) 32769 32770 return super.write(chunk, encoding, cb) 32771 } 32772 32773 emit (ev, ...data) { 32774 if (ev === 'end') { 32775 if (this.found !== this.expect) 32776 this.emit('error', new SizeError(this.found, this.expect)) 32777 } 32778 return super.emit(ev, ...data) 32779 } 32780 } 32781 32782 MinipassSized.SizeError = SizeError 32783 32784 module.exports = MinipassSized 32785 32786 32787 /***/ }), 32788 32789 /***/ 38024: 32790 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 32791 32792 "use strict"; 32793 32794 const proc = typeof process === 'object' && process ? process : { 32795 stdout: null, 32796 stderr: null, 32797 } 32798 const EE = __nccwpck_require__(82361) 32799 const Stream = __nccwpck_require__(12781) 32800 const SD = (__nccwpck_require__(71576).StringDecoder) 32801 32802 const EOF = Symbol('EOF') 32803 const MAYBE_EMIT_END = Symbol('maybeEmitEnd') 32804 const EMITTED_END = Symbol('emittedEnd') 32805 const EMITTING_END = Symbol('emittingEnd') 32806 const EMITTED_ERROR = Symbol('emittedError') 32807 const CLOSED = Symbol('closed') 32808 const READ = Symbol('read') 32809 const FLUSH = Symbol('flush') 32810 const FLUSHCHUNK = Symbol('flushChunk') 32811 const ENCODING = Symbol('encoding') 32812 const DECODER = Symbol('decoder') 32813 const FLOWING = Symbol('flowing') 32814 const PAUSED = Symbol('paused') 32815 const RESUME = Symbol('resume') 32816 const BUFFERLENGTH = Symbol('bufferLength') 32817 const BUFFERPUSH = Symbol('bufferPush') 32818 const BUFFERSHIFT = Symbol('bufferShift') 32819 const OBJECTMODE = Symbol('objectMode') 32820 const DESTROYED = Symbol('destroyed') 32821 const EMITDATA = Symbol('emitData') 32822 const EMITEND = Symbol('emitEnd') 32823 const EMITEND2 = Symbol('emitEnd2') 32824 const ASYNC = Symbol('async') 32825 32826 const defer = fn => Promise.resolve().then(fn) 32827 32828 // TODO remove when Node v8 support drops 32829 const doIter = global._MP_NO_ITERATOR_SYMBOLS_ !== '1' 32830 const ASYNCITERATOR = doIter && Symbol.asyncIterator 32831 || Symbol('asyncIterator not implemented') 32832 const ITERATOR = doIter && Symbol.iterator 32833 || Symbol('iterator not implemented') 32834 32835 // events that mean 'the stream is over' 32836 // these are treated specially, and re-emitted 32837 // if they are listened for after emitting. 32838 const isEndish = ev => 32839 ev === 'end' || 32840 ev === 'finish' || 32841 ev === 'prefinish' 32842 32843 const isArrayBuffer = b => b instanceof ArrayBuffer || 32844 typeof b === 'object' && 32845 b.constructor && 32846 b.constructor.name === 'ArrayBuffer' && 32847 b.byteLength >= 0 32848 32849 const isArrayBufferView = b => !Buffer.isBuffer(b) && ArrayBuffer.isView(b) 32850 32851 class Pipe { 32852 constructor (src, dest, opts) { 32853 this.src = src 32854 this.dest = dest 32855 this.opts = opts 32856 this.ondrain = () => src[RESUME]() 32857 dest.on('drain', this.ondrain) 32858 } 32859 unpipe () { 32860 this.dest.removeListener('drain', this.ondrain) 32861 } 32862 // istanbul ignore next - only here for the prototype 32863 proxyErrors () {} 32864 end () { 32865 this.unpipe() 32866 if (this.opts.end) 32867 this.dest.end() 32868 } 32869 } 32870 32871 class PipeProxyErrors extends Pipe { 32872 unpipe () { 32873 this.src.removeListener('error', this.proxyErrors) 32874 super.unpipe() 32875 } 32876 constructor (src, dest, opts) { 32877 super(src, dest, opts) 32878 this.proxyErrors = er => dest.emit('error', er) 32879 src.on('error', this.proxyErrors) 32880 } 32881 } 32882 32883 module.exports = class Minipass extends Stream { 32884 constructor (options) { 32885 super() 32886 this[FLOWING] = false 32887 // whether we're explicitly paused 32888 this[PAUSED] = false 32889 this.pipes = [] 32890 this.buffer = [] 32891 this[OBJECTMODE] = options && options.objectMode || false 32892 if (this[OBJECTMODE]) 32893 this[ENCODING] = null 32894 else 32895 this[ENCODING] = options && options.encoding || null 32896 if (this[ENCODING] === 'buffer') 32897 this[ENCODING] = null 32898 this[ASYNC] = options && !!options.async || false 32899 this[DECODER] = this[ENCODING] ? new SD(this[ENCODING]) : null 32900 this[EOF] = false 32901 this[EMITTED_END] = false 32902 this[EMITTING_END] = false 32903 this[CLOSED] = false 32904 this[EMITTED_ERROR] = null 32905 this.writable = true 32906 this.readable = true 32907 this[BUFFERLENGTH] = 0 32908 this[DESTROYED] = false 32909 } 32910 32911 get bufferLength () { return this[BUFFERLENGTH] } 32912 32913 get encoding () { return this[ENCODING] } 32914 set encoding (enc) { 32915 if (this[OBJECTMODE]) 32916 throw new Error('cannot set encoding in objectMode') 32917 32918 if (this[ENCODING] && enc !== this[ENCODING] && 32919 (this[DECODER] && this[DECODER].lastNeed || this[BUFFERLENGTH])) 32920 throw new Error('cannot change encoding') 32921 32922 if (this[ENCODING] !== enc) { 32923 this[DECODER] = enc ? new SD(enc) : null 32924 if (this.buffer.length) 32925 this.buffer = this.buffer.map(chunk => this[DECODER].write(chunk)) 32926 } 32927 32928 this[ENCODING] = enc 32929 } 32930 32931 setEncoding (enc) { 32932 this.encoding = enc 32933 } 32934 32935 get objectMode () { return this[OBJECTMODE] } 32936 set objectMode (om) { this[OBJECTMODE] = this[OBJECTMODE] || !!om } 32937 32938 get ['async'] () { return this[ASYNC] } 32939 set ['async'] (a) { this[ASYNC] = this[ASYNC] || !!a } 32940 32941 write (chunk, encoding, cb) { 32942 if (this[EOF]) 32943 throw new Error('write after end') 32944 32945 if (this[DESTROYED]) { 32946 this.emit('error', Object.assign( 32947 new Error('Cannot call write after a stream was destroyed'), 32948 { code: 'ERR_STREAM_DESTROYED' } 32949 )) 32950 return true 32951 } 32952 32953 if (typeof encoding === 'function') 32954 cb = encoding, encoding = 'utf8' 32955 32956 if (!encoding) 32957 encoding = 'utf8' 32958 32959 const fn = this[ASYNC] ? defer : f => f() 32960 32961 // convert array buffers and typed array views into buffers 32962 // at some point in the future, we may want to do the opposite! 32963 // leave strings and buffers as-is 32964 // anything else switches us into object mode 32965 if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) { 32966 if (isArrayBufferView(chunk)) 32967 chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength) 32968 else if (isArrayBuffer(chunk)) 32969 chunk = Buffer.from(chunk) 32970 else if (typeof chunk !== 'string') 32971 // use the setter so we throw if we have encoding set 32972 this.objectMode = true 32973 } 32974 32975 // handle object mode up front, since it's simpler 32976 // this yields better performance, fewer checks later. 32977 if (this[OBJECTMODE]) { 32978 /* istanbul ignore if - maybe impossible? */ 32979 if (this.flowing && this[BUFFERLENGTH] !== 0) 32980 this[FLUSH](true) 32981 32982 if (this.flowing) 32983 this.emit('data', chunk) 32984 else 32985 this[BUFFERPUSH](chunk) 32986 32987 if (this[BUFFERLENGTH] !== 0) 32988 this.emit('readable') 32989 32990 if (cb) 32991 fn(cb) 32992 32993 return this.flowing 32994 } 32995 32996 // at this point the chunk is a buffer or string 32997 // don't buffer it up or send it to the decoder 32998 if (!chunk.length) { 32999 if (this[BUFFERLENGTH] !== 0) 33000 this.emit('readable') 33001 if (cb) 33002 fn(cb) 33003 return this.flowing 33004 } 33005 33006 // fast-path writing strings of same encoding to a stream with 33007 // an empty buffer, skipping the buffer/decoder dance 33008 if (typeof chunk === 'string' && 33009 // unless it is a string already ready for us to use 33010 !(encoding === this[ENCODING] && !this[DECODER].lastNeed)) { 33011 chunk = Buffer.from(chunk, encoding) 33012 } 33013 33014 if (Buffer.isBuffer(chunk) && this[ENCODING]) 33015 chunk = this[DECODER].write(chunk) 33016 33017 // Note: flushing CAN potentially switch us into not-flowing mode 33018 if (this.flowing && this[BUFFERLENGTH] !== 0) 33019 this[FLUSH](true) 33020 33021 if (this.flowing) 33022 this.emit('data', chunk) 33023 else 33024 this[BUFFERPUSH](chunk) 33025 33026 if (this[BUFFERLENGTH] !== 0) 33027 this.emit('readable') 33028 33029 if (cb) 33030 fn(cb) 33031 33032 return this.flowing 33033 } 33034 33035 read (n) { 33036 if (this[DESTROYED]) 33037 return null 33038 33039 if (this[BUFFERLENGTH] === 0 || n === 0 || n > this[BUFFERLENGTH]) { 33040 this[MAYBE_EMIT_END]() 33041 return null 33042 } 33043 33044 if (this[OBJECTMODE]) 33045 n = null 33046 33047 if (this.buffer.length > 1 && !this[OBJECTMODE]) { 33048 if (this.encoding) 33049 this.buffer = [this.buffer.join('')] 33050 else 33051 this.buffer = [Buffer.concat(this.buffer, this[BUFFERLENGTH])] 33052 } 33053 33054 const ret = this[READ](n || null, this.buffer[0]) 33055 this[MAYBE_EMIT_END]() 33056 return ret 33057 } 33058 33059 [READ] (n, chunk) { 33060 if (n === chunk.length || n === null) 33061 this[BUFFERSHIFT]() 33062 else { 33063 this.buffer[0] = chunk.slice(n) 33064 chunk = chunk.slice(0, n) 33065 this[BUFFERLENGTH] -= n 33066 } 33067 33068 this.emit('data', chunk) 33069 33070 if (!this.buffer.length && !this[EOF]) 33071 this.emit('drain') 33072 33073 return chunk 33074 } 33075 33076 end (chunk, encoding, cb) { 33077 if (typeof chunk === 'function') 33078 cb = chunk, chunk = null 33079 if (typeof encoding === 'function') 33080 cb = encoding, encoding = 'utf8' 33081 if (chunk) 33082 this.write(chunk, encoding) 33083 if (cb) 33084 this.once('end', cb) 33085 this[EOF] = true 33086 this.writable = false 33087 33088 // if we haven't written anything, then go ahead and emit, 33089 // even if we're not reading. 33090 // we'll re-emit if a new 'end' listener is added anyway. 33091 // This makes MP more suitable to write-only use cases. 33092 if (this.flowing || !this[PAUSED]) 33093 this[MAYBE_EMIT_END]() 33094 return this 33095 } 33096 33097 // don't let the internal resume be overwritten 33098 [RESUME] () { 33099 if (this[DESTROYED]) 33100 return 33101 33102 this[PAUSED] = false 33103 this[FLOWING] = true 33104 this.emit('resume') 33105 if (this.buffer.length) 33106 this[FLUSH]() 33107 else if (this[EOF]) 33108 this[MAYBE_EMIT_END]() 33109 else 33110 this.emit('drain') 33111 } 33112 33113 resume () { 33114 return this[RESUME]() 33115 } 33116 33117 pause () { 33118 this[FLOWING] = false 33119 this[PAUSED] = true 33120 } 33121 33122 get destroyed () { 33123 return this[DESTROYED] 33124 } 33125 33126 get flowing () { 33127 return this[FLOWING] 33128 } 33129 33130 get paused () { 33131 return this[PAUSED] 33132 } 33133 33134 [BUFFERPUSH] (chunk) { 33135 if (this[OBJECTMODE]) 33136 this[BUFFERLENGTH] += 1 33137 else 33138 this[BUFFERLENGTH] += chunk.length 33139 this.buffer.push(chunk) 33140 } 33141 33142 [BUFFERSHIFT] () { 33143 if (this.buffer.length) { 33144 if (this[OBJECTMODE]) 33145 this[BUFFERLENGTH] -= 1 33146 else 33147 this[BUFFERLENGTH] -= this.buffer[0].length 33148 } 33149 return this.buffer.shift() 33150 } 33151 33152 [FLUSH] (noDrain) { 33153 do {} while (this[FLUSHCHUNK](this[BUFFERSHIFT]())) 33154 33155 if (!noDrain && !this.buffer.length && !this[EOF]) 33156 this.emit('drain') 33157 } 33158 33159 [FLUSHCHUNK] (chunk) { 33160 return chunk ? (this.emit('data', chunk), this.flowing) : false 33161 } 33162 33163 pipe (dest, opts) { 33164 if (this[DESTROYED]) 33165 return 33166 33167 const ended = this[EMITTED_END] 33168 opts = opts || {} 33169 if (dest === proc.stdout || dest === proc.stderr) 33170 opts.end = false 33171 else 33172 opts.end = opts.end !== false 33173 opts.proxyErrors = !!opts.proxyErrors 33174 33175 // piping an ended stream ends immediately 33176 if (ended) { 33177 if (opts.end) 33178 dest.end() 33179 } else { 33180 this.pipes.push(!opts.proxyErrors ? new Pipe(this, dest, opts) 33181 : new PipeProxyErrors(this, dest, opts)) 33182 if (this[ASYNC]) 33183 defer(() => this[RESUME]()) 33184 else 33185 this[RESUME]() 33186 } 33187 33188 return dest 33189 } 33190 33191 unpipe (dest) { 33192 const p = this.pipes.find(p => p.dest === dest) 33193 if (p) { 33194 this.pipes.splice(this.pipes.indexOf(p), 1) 33195 p.unpipe() 33196 } 33197 } 33198 33199 addListener (ev, fn) { 33200 return this.on(ev, fn) 33201 } 33202 33203 on (ev, fn) { 33204 const ret = super.on(ev, fn) 33205 if (ev === 'data' && !this.pipes.length && !this.flowing) 33206 this[RESUME]() 33207 else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) 33208 super.emit('readable') 33209 else if (isEndish(ev) && this[EMITTED_END]) { 33210 super.emit(ev) 33211 this.removeAllListeners(ev) 33212 } else if (ev === 'error' && this[EMITTED_ERROR]) { 33213 if (this[ASYNC]) 33214 defer(() => fn.call(this, this[EMITTED_ERROR])) 33215 else 33216 fn.call(this, this[EMITTED_ERROR]) 33217 } 33218 return ret 33219 } 33220 33221 get emittedEnd () { 33222 return this[EMITTED_END] 33223 } 33224 33225 [MAYBE_EMIT_END] () { 33226 if (!this[EMITTING_END] && 33227 !this[EMITTED_END] && 33228 !this[DESTROYED] && 33229 this.buffer.length === 0 && 33230 this[EOF]) { 33231 this[EMITTING_END] = true 33232 this.emit('end') 33233 this.emit('prefinish') 33234 this.emit('finish') 33235 if (this[CLOSED]) 33236 this.emit('close') 33237 this[EMITTING_END] = false 33238 } 33239 } 33240 33241 emit (ev, data, ...extra) { 33242 // error and close are only events allowed after calling destroy() 33243 if (ev !== 'error' && ev !== 'close' && ev !== DESTROYED && this[DESTROYED]) 33244 return 33245 else if (ev === 'data') { 33246 return !data ? false 33247 : this[ASYNC] ? defer(() => this[EMITDATA](data)) 33248 : this[EMITDATA](data) 33249 } else if (ev === 'end') { 33250 return this[EMITEND]() 33251 } else if (ev === 'close') { 33252 this[CLOSED] = true 33253 // don't emit close before 'end' and 'finish' 33254 if (!this[EMITTED_END] && !this[DESTROYED]) 33255 return 33256 const ret = super.emit('close') 33257 this.removeAllListeners('close') 33258 return ret 33259 } else if (ev === 'error') { 33260 this[EMITTED_ERROR] = data 33261 const ret = super.emit('error', data) 33262 this[MAYBE_EMIT_END]() 33263 return ret 33264 } else if (ev === 'resume') { 33265 const ret = super.emit('resume') 33266 this[MAYBE_EMIT_END]() 33267 return ret 33268 } else if (ev === 'finish' || ev === 'prefinish') { 33269 const ret = super.emit(ev) 33270 this.removeAllListeners(ev) 33271 return ret 33272 } 33273 33274 // Some other unknown event 33275 const ret = super.emit(ev, data, ...extra) 33276 this[MAYBE_EMIT_END]() 33277 return ret 33278 } 33279 33280 [EMITDATA] (data) { 33281 for (const p of this.pipes) { 33282 if (p.dest.write(data) === false) 33283 this.pause() 33284 } 33285 const ret = super.emit('data', data) 33286 this[MAYBE_EMIT_END]() 33287 return ret 33288 } 33289 33290 [EMITEND] () { 33291 if (this[EMITTED_END]) 33292 return 33293 33294 this[EMITTED_END] = true 33295 this.readable = false 33296 if (this[ASYNC]) 33297 defer(() => this[EMITEND2]()) 33298 else 33299 this[EMITEND2]() 33300 } 33301 33302 [EMITEND2] () { 33303 if (this[DECODER]) { 33304 const data = this[DECODER].end() 33305 if (data) { 33306 for (const p of this.pipes) { 33307 p.dest.write(data) 33308 } 33309 super.emit('data', data) 33310 } 33311 } 33312 33313 for (const p of this.pipes) { 33314 p.end() 33315 } 33316 const ret = super.emit('end') 33317 this.removeAllListeners('end') 33318 return ret 33319 } 33320 33321 // const all = await stream.collect() 33322 collect () { 33323 const buf = [] 33324 if (!this[OBJECTMODE]) 33325 buf.dataLength = 0 33326 // set the promise first, in case an error is raised 33327 // by triggering the flow here. 33328 const p = this.promise() 33329 this.on('data', c => { 33330 buf.push(c) 33331 if (!this[OBJECTMODE]) 33332 buf.dataLength += c.length 33333 }) 33334 return p.then(() => buf) 33335 } 33336 33337 // const data = await stream.concat() 33338 concat () { 33339 return this[OBJECTMODE] 33340 ? Promise.reject(new Error('cannot concat in objectMode')) 33341 : this.collect().then(buf => 33342 this[OBJECTMODE] 33343 ? Promise.reject(new Error('cannot concat in objectMode')) 33344 : this[ENCODING] ? buf.join('') : Buffer.concat(buf, buf.dataLength)) 33345 } 33346 33347 // stream.promise().then(() => done, er => emitted error) 33348 promise () { 33349 return new Promise((resolve, reject) => { 33350 this.on(DESTROYED, () => reject(new Error('stream destroyed'))) 33351 this.on('error', er => reject(er)) 33352 this.on('end', () => resolve()) 33353 }) 33354 } 33355 33356 // for await (let chunk of stream) 33357 [ASYNCITERATOR] () { 33358 const next = () => { 33359 const res = this.read() 33360 if (res !== null) 33361 return Promise.resolve({ done: false, value: res }) 33362 33363 if (this[EOF]) 33364 return Promise.resolve({ done: true }) 33365 33366 let resolve = null 33367 let reject = null 33368 const onerr = er => { 33369 this.removeListener('data', ondata) 33370 this.removeListener('end', onend) 33371 reject(er) 33372 } 33373 const ondata = value => { 33374 this.removeListener('error', onerr) 33375 this.removeListener('end', onend) 33376 this.pause() 33377 resolve({ value: value, done: !!this[EOF] }) 33378 } 33379 const onend = () => { 33380 this.removeListener('error', onerr) 33381 this.removeListener('data', ondata) 33382 resolve({ done: true }) 33383 } 33384 const ondestroy = () => onerr(new Error('stream destroyed')) 33385 return new Promise((res, rej) => { 33386 reject = rej 33387 resolve = res 33388 this.once(DESTROYED, ondestroy) 33389 this.once('error', onerr) 33390 this.once('end', onend) 33391 this.once('data', ondata) 33392 }) 33393 } 33394 33395 return { next } 33396 } 33397 33398 // for (let chunk of stream) 33399 [ITERATOR] () { 33400 const next = () => { 33401 const value = this.read() 33402 const done = value === null 33403 return { value, done } 33404 } 33405 return { next } 33406 } 33407 33408 destroy (er) { 33409 if (this[DESTROYED]) { 33410 if (er) 33411 this.emit('error', er) 33412 else 33413 this.emit(DESTROYED) 33414 return this 33415 } 33416 33417 this[DESTROYED] = true 33418 33419 // throw away all buffered data, it's never coming out 33420 this.buffer.length = 0 33421 this[BUFFERLENGTH] = 0 33422 33423 if (typeof this.close === 'function' && !this[CLOSED]) 33424 this.close() 33425 33426 if (er) 33427 this.emit('error', er) 33428 else // if no error to emit, still reject pending promises 33429 this.emit(DESTROYED) 33430 33431 return this 33432 } 33433 33434 static isStream (s) { 33435 return !!s && (s instanceof Minipass || s instanceof Stream || 33436 s instanceof EE && ( 33437 typeof s.pipe === 'function' || // readable 33438 (typeof s.write === 'function' && typeof s.end === 'function') // writable 33439 )) 33440 } 33441 } 33442 33443 33444 /***/ }), 33445 33446 /***/ 6769: 33447 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 33448 33449 // Update with any zlib constants that are added or changed in the future. 33450 // Node v6 didn't export this, so we just hard code the version and rely 33451 // on all the other hard-coded values from zlib v4736. When node v6 33452 // support drops, we can just export the realZlibConstants object. 33453 const realZlibConstants = (__nccwpck_require__(59796).constants) || 33454 /* istanbul ignore next */ { ZLIB_VERNUM: 4736 } 33455 33456 module.exports = Object.freeze(Object.assign(Object.create(null), { 33457 Z_NO_FLUSH: 0, 33458 Z_PARTIAL_FLUSH: 1, 33459 Z_SYNC_FLUSH: 2, 33460 Z_FULL_FLUSH: 3, 33461 Z_FINISH: 4, 33462 Z_BLOCK: 5, 33463 Z_OK: 0, 33464 Z_STREAM_END: 1, 33465 Z_NEED_DICT: 2, 33466 Z_ERRNO: -1, 33467 Z_STREAM_ERROR: -2, 33468 Z_DATA_ERROR: -3, 33469 Z_MEM_ERROR: -4, 33470 Z_BUF_ERROR: -5, 33471 Z_VERSION_ERROR: -6, 33472 Z_NO_COMPRESSION: 0, 33473 Z_BEST_SPEED: 1, 33474 Z_BEST_COMPRESSION: 9, 33475 Z_DEFAULT_COMPRESSION: -1, 33476 Z_FILTERED: 1, 33477 Z_HUFFMAN_ONLY: 2, 33478 Z_RLE: 3, 33479 Z_FIXED: 4, 33480 Z_DEFAULT_STRATEGY: 0, 33481 DEFLATE: 1, 33482 INFLATE: 2, 33483 GZIP: 3, 33484 GUNZIP: 4, 33485 DEFLATERAW: 5, 33486 INFLATERAW: 6, 33487 UNZIP: 7, 33488 BROTLI_DECODE: 8, 33489 BROTLI_ENCODE: 9, 33490 Z_MIN_WINDOWBITS: 8, 33491 Z_MAX_WINDOWBITS: 15, 33492 Z_DEFAULT_WINDOWBITS: 15, 33493 Z_MIN_CHUNK: 64, 33494 Z_MAX_CHUNK: Infinity, 33495 Z_DEFAULT_CHUNK: 16384, 33496 Z_MIN_MEMLEVEL: 1, 33497 Z_MAX_MEMLEVEL: 9, 33498 Z_DEFAULT_MEMLEVEL: 8, 33499 Z_MIN_LEVEL: -1, 33500 Z_MAX_LEVEL: 9, 33501 Z_DEFAULT_LEVEL: -1, 33502 BROTLI_OPERATION_PROCESS: 0, 33503 BROTLI_OPERATION_FLUSH: 1, 33504 BROTLI_OPERATION_FINISH: 2, 33505 BROTLI_OPERATION_EMIT_METADATA: 3, 33506 BROTLI_MODE_GENERIC: 0, 33507 BROTLI_MODE_TEXT: 1, 33508 BROTLI_MODE_FONT: 2, 33509 BROTLI_DEFAULT_MODE: 0, 33510 BROTLI_MIN_QUALITY: 0, 33511 BROTLI_MAX_QUALITY: 11, 33512 BROTLI_DEFAULT_QUALITY: 11, 33513 BROTLI_MIN_WINDOW_BITS: 10, 33514 BROTLI_MAX_WINDOW_BITS: 24, 33515 BROTLI_LARGE_MAX_WINDOW_BITS: 30, 33516 BROTLI_DEFAULT_WINDOW: 22, 33517 BROTLI_MIN_INPUT_BLOCK_BITS: 16, 33518 BROTLI_MAX_INPUT_BLOCK_BITS: 24, 33519 BROTLI_PARAM_MODE: 0, 33520 BROTLI_PARAM_QUALITY: 1, 33521 BROTLI_PARAM_LGWIN: 2, 33522 BROTLI_PARAM_LGBLOCK: 3, 33523 BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4, 33524 BROTLI_PARAM_SIZE_HINT: 5, 33525 BROTLI_PARAM_LARGE_WINDOW: 6, 33526 BROTLI_PARAM_NPOSTFIX: 7, 33527 BROTLI_PARAM_NDIRECT: 8, 33528 BROTLI_DECODER_RESULT_ERROR: 0, 33529 BROTLI_DECODER_RESULT_SUCCESS: 1, 33530 BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2, 33531 BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3, 33532 BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0, 33533 BROTLI_DECODER_PARAM_LARGE_WINDOW: 1, 33534 BROTLI_DECODER_NO_ERROR: 0, 33535 BROTLI_DECODER_SUCCESS: 1, 33536 BROTLI_DECODER_NEEDS_MORE_INPUT: 2, 33537 BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3, 33538 BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1, 33539 BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2, 33540 BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3, 33541 BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4, 33542 BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5, 33543 BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6, 33544 BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7, 33545 BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8, 33546 BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9, 33547 BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10, 33548 BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11, 33549 BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12, 33550 BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13, 33551 BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14, 33552 BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15, 33553 BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16, 33554 BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19, 33555 BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20, 33556 BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21, 33557 BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22, 33558 BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25, 33559 BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26, 33560 BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27, 33561 BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30, 33562 BROTLI_DECODER_ERROR_UNREACHABLE: -31, 33563 }, realZlibConstants)) 33564 33565 33566 /***/ }), 33567 33568 /***/ 33486: 33569 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 33570 33571 "use strict"; 33572 33573 33574 const assert = __nccwpck_require__(39491) 33575 const Buffer = (__nccwpck_require__(14300).Buffer) 33576 const realZlib = __nccwpck_require__(59796) 33577 33578 const constants = exports.constants = __nccwpck_require__(6769) 33579 const Minipass = __nccwpck_require__(47557) 33580 33581 const OriginalBufferConcat = Buffer.concat 33582 33583 const _superWrite = Symbol('_superWrite') 33584 class ZlibError extends Error { 33585 constructor (err) { 33586 super('zlib: ' + err.message) 33587 this.code = err.code 33588 this.errno = err.errno 33589 /* istanbul ignore if */ 33590 if (!this.code) 33591 this.code = 'ZLIB_ERROR' 33592 33593 this.message = 'zlib: ' + err.message 33594 Error.captureStackTrace(this, this.constructor) 33595 } 33596 33597 get name () { 33598 return 'ZlibError' 33599 } 33600 } 33601 33602 // the Zlib class they all inherit from 33603 // This thing manages the queue of requests, and returns 33604 // true or false if there is anything in the queue when 33605 // you call the .write() method. 33606 const _opts = Symbol('opts') 33607 const _flushFlag = Symbol('flushFlag') 33608 const _finishFlushFlag = Symbol('finishFlushFlag') 33609 const _fullFlushFlag = Symbol('fullFlushFlag') 33610 const _handle = Symbol('handle') 33611 const _onError = Symbol('onError') 33612 const _sawError = Symbol('sawError') 33613 const _level = Symbol('level') 33614 const _strategy = Symbol('strategy') 33615 const _ended = Symbol('ended') 33616 const _defaultFullFlush = Symbol('_defaultFullFlush') 33617 33618 class ZlibBase extends Minipass { 33619 constructor (opts, mode) { 33620 if (!opts || typeof opts !== 'object') 33621 throw new TypeError('invalid options for ZlibBase constructor') 33622 33623 super(opts) 33624 this[_sawError] = false 33625 this[_ended] = false 33626 this[_opts] = opts 33627 33628 this[_flushFlag] = opts.flush 33629 this[_finishFlushFlag] = opts.finishFlush 33630 // this will throw if any options are invalid for the class selected 33631 try { 33632 this[_handle] = new realZlib[mode](opts) 33633 } catch (er) { 33634 // make sure that all errors get decorated properly 33635 throw new ZlibError(er) 33636 } 33637 33638 this[_onError] = (err) => { 33639 // no sense raising multiple errors, since we abort on the first one. 33640 if (this[_sawError]) 33641 return 33642 33643 this[_sawError] = true 33644 33645 // there is no way to cleanly recover. 33646 // continuing only obscures problems. 33647 this.close() 33648 this.emit('error', err) 33649 } 33650 33651 this[_handle].on('error', er => this[_onError](new ZlibError(er))) 33652 this.once('end', () => this.close) 33653 } 33654 33655 close () { 33656 if (this[_handle]) { 33657 this[_handle].close() 33658 this[_handle] = null 33659 this.emit('close') 33660 } 33661 } 33662 33663 reset () { 33664 if (!this[_sawError]) { 33665 assert(this[_handle], 'zlib binding closed') 33666 return this[_handle].reset() 33667 } 33668 } 33669 33670 flush (flushFlag) { 33671 if (this.ended) 33672 return 33673 33674 if (typeof flushFlag !== 'number') 33675 flushFlag = this[_fullFlushFlag] 33676 this.write(Object.assign(Buffer.alloc(0), { [_flushFlag]: flushFlag })) 33677 } 33678 33679 end (chunk, encoding, cb) { 33680 if (chunk) 33681 this.write(chunk, encoding) 33682 this.flush(this[_finishFlushFlag]) 33683 this[_ended] = true 33684 return super.end(null, null, cb) 33685 } 33686 33687 get ended () { 33688 return this[_ended] 33689 } 33690 33691 write (chunk, encoding, cb) { 33692 // process the chunk using the sync process 33693 // then super.write() all the outputted chunks 33694 if (typeof encoding === 'function') 33695 cb = encoding, encoding = 'utf8' 33696 33697 if (typeof chunk === 'string') 33698 chunk = Buffer.from(chunk, encoding) 33699 33700 if (this[_sawError]) 33701 return 33702 assert(this[_handle], 'zlib binding closed') 33703 33704 // _processChunk tries to .close() the native handle after it's done, so we 33705 // intercept that by temporarily making it a no-op. 33706 const nativeHandle = this[_handle]._handle 33707 const originalNativeClose = nativeHandle.close 33708 nativeHandle.close = () => {} 33709 const originalClose = this[_handle].close 33710 this[_handle].close = () => {} 33711 // It also calls `Buffer.concat()` at the end, which may be convenient 33712 // for some, but which we are not interested in as it slows us down. 33713 Buffer.concat = (args) => args 33714 let result 33715 try { 33716 const flushFlag = typeof chunk[_flushFlag] === 'number' 33717 ? chunk[_flushFlag] : this[_flushFlag] 33718 result = this[_handle]._processChunk(chunk, flushFlag) 33719 // if we don't throw, reset it back how it was 33720 Buffer.concat = OriginalBufferConcat 33721 } catch (err) { 33722 // or if we do, put Buffer.concat() back before we emit error 33723 // Error events call into user code, which may call Buffer.concat() 33724 Buffer.concat = OriginalBufferConcat 33725 this[_onError](new ZlibError(err)) 33726 } finally { 33727 if (this[_handle]) { 33728 // Core zlib resets `_handle` to null after attempting to close the 33729 // native handle. Our no-op handler prevented actual closure, but we 33730 // need to restore the `._handle` property. 33731 this[_handle]._handle = nativeHandle 33732 nativeHandle.close = originalNativeClose 33733 this[_handle].close = originalClose 33734 // `_processChunk()` adds an 'error' listener. If we don't remove it 33735 // after each call, these handlers start piling up. 33736 this[_handle].removeAllListeners('error') 33737 // make sure OUR error listener is still attached tho 33738 } 33739 } 33740 33741 if (this[_handle]) 33742 this[_handle].on('error', er => this[_onError](new ZlibError(er))) 33743 33744 let writeReturn 33745 if (result) { 33746 if (Array.isArray(result) && result.length > 0) { 33747 // The first buffer is always `handle._outBuffer`, which would be 33748 // re-used for later invocations; so, we always have to copy that one. 33749 writeReturn = this[_superWrite](Buffer.from(result[0])) 33750 for (let i = 1; i < result.length; i++) { 33751 writeReturn = this[_superWrite](result[i]) 33752 } 33753 } else { 33754 writeReturn = this[_superWrite](Buffer.from(result)) 33755 } 33756 } 33757 33758 if (cb) 33759 cb() 33760 return writeReturn 33761 } 33762 33763 [_superWrite] (data) { 33764 return super.write(data) 33765 } 33766 } 33767 33768 class Zlib extends ZlibBase { 33769 constructor (opts, mode) { 33770 opts = opts || {} 33771 33772 opts.flush = opts.flush || constants.Z_NO_FLUSH 33773 opts.finishFlush = opts.finishFlush || constants.Z_FINISH 33774 super(opts, mode) 33775 33776 this[_fullFlushFlag] = constants.Z_FULL_FLUSH 33777 this[_level] = opts.level 33778 this[_strategy] = opts.strategy 33779 } 33780 33781 params (level, strategy) { 33782 if (this[_sawError]) 33783 return 33784 33785 if (!this[_handle]) 33786 throw new Error('cannot switch params when binding is closed') 33787 33788 // no way to test this without also not supporting params at all 33789 /* istanbul ignore if */ 33790 if (!this[_handle].params) 33791 throw new Error('not supported in this implementation') 33792 33793 if (this[_level] !== level || this[_strategy] !== strategy) { 33794 this.flush(constants.Z_SYNC_FLUSH) 33795 assert(this[_handle], 'zlib binding closed') 33796 // .params() calls .flush(), but the latter is always async in the 33797 // core zlib. We override .flush() temporarily to intercept that and 33798 // flush synchronously. 33799 const origFlush = this[_handle].flush 33800 this[_handle].flush = (flushFlag, cb) => { 33801 this.flush(flushFlag) 33802 cb() 33803 } 33804 try { 33805 this[_handle].params(level, strategy) 33806 } finally { 33807 this[_handle].flush = origFlush 33808 } 33809 /* istanbul ignore else */ 33810 if (this[_handle]) { 33811 this[_level] = level 33812 this[_strategy] = strategy 33813 } 33814 } 33815 } 33816 } 33817 33818 // minimal 2-byte header 33819 class Deflate extends Zlib { 33820 constructor (opts) { 33821 super(opts, 'Deflate') 33822 } 33823 } 33824 33825 class Inflate extends Zlib { 33826 constructor (opts) { 33827 super(opts, 'Inflate') 33828 } 33829 } 33830 33831 // gzip - bigger header, same deflate compression 33832 const _portable = Symbol('_portable') 33833 class Gzip extends Zlib { 33834 constructor (opts) { 33835 super(opts, 'Gzip') 33836 this[_portable] = opts && !!opts.portable 33837 } 33838 33839 [_superWrite] (data) { 33840 if (!this[_portable]) 33841 return super[_superWrite](data) 33842 33843 // we'll always get the header emitted in one first chunk 33844 // overwrite the OS indicator byte with 0xFF 33845 this[_portable] = false 33846 data[9] = 255 33847 return super[_superWrite](data) 33848 } 33849 } 33850 33851 class Gunzip extends Zlib { 33852 constructor (opts) { 33853 super(opts, 'Gunzip') 33854 } 33855 } 33856 33857 // raw - no header 33858 class DeflateRaw extends Zlib { 33859 constructor (opts) { 33860 super(opts, 'DeflateRaw') 33861 } 33862 } 33863 33864 class InflateRaw extends Zlib { 33865 constructor (opts) { 33866 super(opts, 'InflateRaw') 33867 } 33868 } 33869 33870 // auto-detect header. 33871 class Unzip extends Zlib { 33872 constructor (opts) { 33873 super(opts, 'Unzip') 33874 } 33875 } 33876 33877 class Brotli extends ZlibBase { 33878 constructor (opts, mode) { 33879 opts = opts || {} 33880 33881 opts.flush = opts.flush || constants.BROTLI_OPERATION_PROCESS 33882 opts.finishFlush = opts.finishFlush || constants.BROTLI_OPERATION_FINISH 33883 33884 super(opts, mode) 33885 33886 this[_fullFlushFlag] = constants.BROTLI_OPERATION_FLUSH 33887 } 33888 } 33889 33890 class BrotliCompress extends Brotli { 33891 constructor (opts) { 33892 super(opts, 'BrotliCompress') 33893 } 33894 } 33895 33896 class BrotliDecompress extends Brotli { 33897 constructor (opts) { 33898 super(opts, 'BrotliDecompress') 33899 } 33900 } 33901 33902 exports.Deflate = Deflate 33903 exports.Inflate = Inflate 33904 exports.Gzip = Gzip 33905 exports.Gunzip = Gunzip 33906 exports.DeflateRaw = DeflateRaw 33907 exports.InflateRaw = InflateRaw 33908 exports.Unzip = Unzip 33909 /* istanbul ignore else */ 33910 if (typeof realZlib.BrotliCompress === 'function') { 33911 exports.BrotliCompress = BrotliCompress 33912 exports.BrotliDecompress = BrotliDecompress 33913 } else { 33914 exports.BrotliCompress = exports.BrotliDecompress = class { 33915 constructor () { 33916 throw new Error('Brotli is not supported in this version of Node.js') 33917 } 33918 } 33919 } 33920 33921 33922 /***/ }), 33923 33924 /***/ 47557: 33925 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 33926 33927 "use strict"; 33928 33929 const proc = typeof process === 'object' && process ? process : { 33930 stdout: null, 33931 stderr: null, 33932 } 33933 const EE = __nccwpck_require__(82361) 33934 const Stream = __nccwpck_require__(12781) 33935 const SD = (__nccwpck_require__(71576).StringDecoder) 33936 33937 const EOF = Symbol('EOF') 33938 const MAYBE_EMIT_END = Symbol('maybeEmitEnd') 33939 const EMITTED_END = Symbol('emittedEnd') 33940 const EMITTING_END = Symbol('emittingEnd') 33941 const EMITTED_ERROR = Symbol('emittedError') 33942 const CLOSED = Symbol('closed') 33943 const READ = Symbol('read') 33944 const FLUSH = Symbol('flush') 33945 const FLUSHCHUNK = Symbol('flushChunk') 33946 const ENCODING = Symbol('encoding') 33947 const DECODER = Symbol('decoder') 33948 const FLOWING = Symbol('flowing') 33949 const PAUSED = Symbol('paused') 33950 const RESUME = Symbol('resume') 33951 const BUFFERLENGTH = Symbol('bufferLength') 33952 const BUFFERPUSH = Symbol('bufferPush') 33953 const BUFFERSHIFT = Symbol('bufferShift') 33954 const OBJECTMODE = Symbol('objectMode') 33955 const DESTROYED = Symbol('destroyed') 33956 const EMITDATA = Symbol('emitData') 33957 const EMITEND = Symbol('emitEnd') 33958 const EMITEND2 = Symbol('emitEnd2') 33959 const ASYNC = Symbol('async') 33960 33961 const defer = fn => Promise.resolve().then(fn) 33962 33963 // TODO remove when Node v8 support drops 33964 const doIter = global._MP_NO_ITERATOR_SYMBOLS_ !== '1' 33965 const ASYNCITERATOR = doIter && Symbol.asyncIterator 33966 || Symbol('asyncIterator not implemented') 33967 const ITERATOR = doIter && Symbol.iterator 33968 || Symbol('iterator not implemented') 33969 33970 // events that mean 'the stream is over' 33971 // these are treated specially, and re-emitted 33972 // if they are listened for after emitting. 33973 const isEndish = ev => 33974 ev === 'end' || 33975 ev === 'finish' || 33976 ev === 'prefinish' 33977 33978 const isArrayBuffer = b => b instanceof ArrayBuffer || 33979 typeof b === 'object' && 33980 b.constructor && 33981 b.constructor.name === 'ArrayBuffer' && 33982 b.byteLength >= 0 33983 33984 const isArrayBufferView = b => !Buffer.isBuffer(b) && ArrayBuffer.isView(b) 33985 33986 class Pipe { 33987 constructor (src, dest, opts) { 33988 this.src = src 33989 this.dest = dest 33990 this.opts = opts 33991 this.ondrain = () => src[RESUME]() 33992 dest.on('drain', this.ondrain) 33993 } 33994 unpipe () { 33995 this.dest.removeListener('drain', this.ondrain) 33996 } 33997 // istanbul ignore next - only here for the prototype 33998 proxyErrors () {} 33999 end () { 34000 this.unpipe() 34001 if (this.opts.end) 34002 this.dest.end() 34003 } 34004 } 34005 34006 class PipeProxyErrors extends Pipe { 34007 unpipe () { 34008 this.src.removeListener('error', this.proxyErrors) 34009 super.unpipe() 34010 } 34011 constructor (src, dest, opts) { 34012 super(src, dest, opts) 34013 this.proxyErrors = er => dest.emit('error', er) 34014 src.on('error', this.proxyErrors) 34015 } 34016 } 34017 34018 module.exports = class Minipass extends Stream { 34019 constructor (options) { 34020 super() 34021 this[FLOWING] = false 34022 // whether we're explicitly paused 34023 this[PAUSED] = false 34024 this.pipes = [] 34025 this.buffer = [] 34026 this[OBJECTMODE] = options && options.objectMode || false 34027 if (this[OBJECTMODE]) 34028 this[ENCODING] = null 34029 else 34030 this[ENCODING] = options && options.encoding || null 34031 if (this[ENCODING] === 'buffer') 34032 this[ENCODING] = null 34033 this[ASYNC] = options && !!options.async || false 34034 this[DECODER] = this[ENCODING] ? new SD(this[ENCODING]) : null 34035 this[EOF] = false 34036 this[EMITTED_END] = false 34037 this[EMITTING_END] = false 34038 this[CLOSED] = false 34039 this[EMITTED_ERROR] = null 34040 this.writable = true 34041 this.readable = true 34042 this[BUFFERLENGTH] = 0 34043 this[DESTROYED] = false 34044 } 34045 34046 get bufferLength () { return this[BUFFERLENGTH] } 34047 34048 get encoding () { return this[ENCODING] } 34049 set encoding (enc) { 34050 if (this[OBJECTMODE]) 34051 throw new Error('cannot set encoding in objectMode') 34052 34053 if (this[ENCODING] && enc !== this[ENCODING] && 34054 (this[DECODER] && this[DECODER].lastNeed || this[BUFFERLENGTH])) 34055 throw new Error('cannot change encoding') 34056 34057 if (this[ENCODING] !== enc) { 34058 this[DECODER] = enc ? new SD(enc) : null 34059 if (this.buffer.length) 34060 this.buffer = this.buffer.map(chunk => this[DECODER].write(chunk)) 34061 } 34062 34063 this[ENCODING] = enc 34064 } 34065 34066 setEncoding (enc) { 34067 this.encoding = enc 34068 } 34069 34070 get objectMode () { return this[OBJECTMODE] } 34071 set objectMode (om) { this[OBJECTMODE] = this[OBJECTMODE] || !!om } 34072 34073 get ['async'] () { return this[ASYNC] } 34074 set ['async'] (a) { this[ASYNC] = this[ASYNC] || !!a } 34075 34076 write (chunk, encoding, cb) { 34077 if (this[EOF]) 34078 throw new Error('write after end') 34079 34080 if (this[DESTROYED]) { 34081 this.emit('error', Object.assign( 34082 new Error('Cannot call write after a stream was destroyed'), 34083 { code: 'ERR_STREAM_DESTROYED' } 34084 )) 34085 return true 34086 } 34087 34088 if (typeof encoding === 'function') 34089 cb = encoding, encoding = 'utf8' 34090 34091 if (!encoding) 34092 encoding = 'utf8' 34093 34094 const fn = this[ASYNC] ? defer : f => f() 34095 34096 // convert array buffers and typed array views into buffers 34097 // at some point in the future, we may want to do the opposite! 34098 // leave strings and buffers as-is 34099 // anything else switches us into object mode 34100 if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) { 34101 if (isArrayBufferView(chunk)) 34102 chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength) 34103 else if (isArrayBuffer(chunk)) 34104 chunk = Buffer.from(chunk) 34105 else if (typeof chunk !== 'string') 34106 // use the setter so we throw if we have encoding set 34107 this.objectMode = true 34108 } 34109 34110 // handle object mode up front, since it's simpler 34111 // this yields better performance, fewer checks later. 34112 if (this[OBJECTMODE]) { 34113 /* istanbul ignore if - maybe impossible? */ 34114 if (this.flowing && this[BUFFERLENGTH] !== 0) 34115 this[FLUSH](true) 34116 34117 if (this.flowing) 34118 this.emit('data', chunk) 34119 else 34120 this[BUFFERPUSH](chunk) 34121 34122 if (this[BUFFERLENGTH] !== 0) 34123 this.emit('readable') 34124 34125 if (cb) 34126 fn(cb) 34127 34128 return this.flowing 34129 } 34130 34131 // at this point the chunk is a buffer or string 34132 // don't buffer it up or send it to the decoder 34133 if (!chunk.length) { 34134 if (this[BUFFERLENGTH] !== 0) 34135 this.emit('readable') 34136 if (cb) 34137 fn(cb) 34138 return this.flowing 34139 } 34140 34141 // fast-path writing strings of same encoding to a stream with 34142 // an empty buffer, skipping the buffer/decoder dance 34143 if (typeof chunk === 'string' && 34144 // unless it is a string already ready for us to use 34145 !(encoding === this[ENCODING] && !this[DECODER].lastNeed)) { 34146 chunk = Buffer.from(chunk, encoding) 34147 } 34148 34149 if (Buffer.isBuffer(chunk) && this[ENCODING]) 34150 chunk = this[DECODER].write(chunk) 34151 34152 // Note: flushing CAN potentially switch us into not-flowing mode 34153 if (this.flowing && this[BUFFERLENGTH] !== 0) 34154 this[FLUSH](true) 34155 34156 if (this.flowing) 34157 this.emit('data', chunk) 34158 else 34159 this[BUFFERPUSH](chunk) 34160 34161 if (this[BUFFERLENGTH] !== 0) 34162 this.emit('readable') 34163 34164 if (cb) 34165 fn(cb) 34166 34167 return this.flowing 34168 } 34169 34170 read (n) { 34171 if (this[DESTROYED]) 34172 return null 34173 34174 if (this[BUFFERLENGTH] === 0 || n === 0 || n > this[BUFFERLENGTH]) { 34175 this[MAYBE_EMIT_END]() 34176 return null 34177 } 34178 34179 if (this[OBJECTMODE]) 34180 n = null 34181 34182 if (this.buffer.length > 1 && !this[OBJECTMODE]) { 34183 if (this.encoding) 34184 this.buffer = [this.buffer.join('')] 34185 else 34186 this.buffer = [Buffer.concat(this.buffer, this[BUFFERLENGTH])] 34187 } 34188 34189 const ret = this[READ](n || null, this.buffer[0]) 34190 this[MAYBE_EMIT_END]() 34191 return ret 34192 } 34193 34194 [READ] (n, chunk) { 34195 if (n === chunk.length || n === null) 34196 this[BUFFERSHIFT]() 34197 else { 34198 this.buffer[0] = chunk.slice(n) 34199 chunk = chunk.slice(0, n) 34200 this[BUFFERLENGTH] -= n 34201 } 34202 34203 this.emit('data', chunk) 34204 34205 if (!this.buffer.length && !this[EOF]) 34206 this.emit('drain') 34207 34208 return chunk 34209 } 34210 34211 end (chunk, encoding, cb) { 34212 if (typeof chunk === 'function') 34213 cb = chunk, chunk = null 34214 if (typeof encoding === 'function') 34215 cb = encoding, encoding = 'utf8' 34216 if (chunk) 34217 this.write(chunk, encoding) 34218 if (cb) 34219 this.once('end', cb) 34220 this[EOF] = true 34221 this.writable = false 34222 34223 // if we haven't written anything, then go ahead and emit, 34224 // even if we're not reading. 34225 // we'll re-emit if a new 'end' listener is added anyway. 34226 // This makes MP more suitable to write-only use cases. 34227 if (this.flowing || !this[PAUSED]) 34228 this[MAYBE_EMIT_END]() 34229 return this 34230 } 34231 34232 // don't let the internal resume be overwritten 34233 [RESUME] () { 34234 if (this[DESTROYED]) 34235 return 34236 34237 this[PAUSED] = false 34238 this[FLOWING] = true 34239 this.emit('resume') 34240 if (this.buffer.length) 34241 this[FLUSH]() 34242 else if (this[EOF]) 34243 this[MAYBE_EMIT_END]() 34244 else 34245 this.emit('drain') 34246 } 34247 34248 resume () { 34249 return this[RESUME]() 34250 } 34251 34252 pause () { 34253 this[FLOWING] = false 34254 this[PAUSED] = true 34255 } 34256 34257 get destroyed () { 34258 return this[DESTROYED] 34259 } 34260 34261 get flowing () { 34262 return this[FLOWING] 34263 } 34264 34265 get paused () { 34266 return this[PAUSED] 34267 } 34268 34269 [BUFFERPUSH] (chunk) { 34270 if (this[OBJECTMODE]) 34271 this[BUFFERLENGTH] += 1 34272 else 34273 this[BUFFERLENGTH] += chunk.length 34274 this.buffer.push(chunk) 34275 } 34276 34277 [BUFFERSHIFT] () { 34278 if (this.buffer.length) { 34279 if (this[OBJECTMODE]) 34280 this[BUFFERLENGTH] -= 1 34281 else 34282 this[BUFFERLENGTH] -= this.buffer[0].length 34283 } 34284 return this.buffer.shift() 34285 } 34286 34287 [FLUSH] (noDrain) { 34288 do {} while (this[FLUSHCHUNK](this[BUFFERSHIFT]())) 34289 34290 if (!noDrain && !this.buffer.length && !this[EOF]) 34291 this.emit('drain') 34292 } 34293 34294 [FLUSHCHUNK] (chunk) { 34295 return chunk ? (this.emit('data', chunk), this.flowing) : false 34296 } 34297 34298 pipe (dest, opts) { 34299 if (this[DESTROYED]) 34300 return 34301 34302 const ended = this[EMITTED_END] 34303 opts = opts || {} 34304 if (dest === proc.stdout || dest === proc.stderr) 34305 opts.end = false 34306 else 34307 opts.end = opts.end !== false 34308 opts.proxyErrors = !!opts.proxyErrors 34309 34310 // piping an ended stream ends immediately 34311 if (ended) { 34312 if (opts.end) 34313 dest.end() 34314 } else { 34315 this.pipes.push(!opts.proxyErrors ? new Pipe(this, dest, opts) 34316 : new PipeProxyErrors(this, dest, opts)) 34317 if (this[ASYNC]) 34318 defer(() => this[RESUME]()) 34319 else 34320 this[RESUME]() 34321 } 34322 34323 return dest 34324 } 34325 34326 unpipe (dest) { 34327 const p = this.pipes.find(p => p.dest === dest) 34328 if (p) { 34329 this.pipes.splice(this.pipes.indexOf(p), 1) 34330 p.unpipe() 34331 } 34332 } 34333 34334 addListener (ev, fn) { 34335 return this.on(ev, fn) 34336 } 34337 34338 on (ev, fn) { 34339 const ret = super.on(ev, fn) 34340 if (ev === 'data' && !this.pipes.length && !this.flowing) 34341 this[RESUME]() 34342 else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) 34343 super.emit('readable') 34344 else if (isEndish(ev) && this[EMITTED_END]) { 34345 super.emit(ev) 34346 this.removeAllListeners(ev) 34347 } else if (ev === 'error' && this[EMITTED_ERROR]) { 34348 if (this[ASYNC]) 34349 defer(() => fn.call(this, this[EMITTED_ERROR])) 34350 else 34351 fn.call(this, this[EMITTED_ERROR]) 34352 } 34353 return ret 34354 } 34355 34356 get emittedEnd () { 34357 return this[EMITTED_END] 34358 } 34359 34360 [MAYBE_EMIT_END] () { 34361 if (!this[EMITTING_END] && 34362 !this[EMITTED_END] && 34363 !this[DESTROYED] && 34364 this.buffer.length === 0 && 34365 this[EOF]) { 34366 this[EMITTING_END] = true 34367 this.emit('end') 34368 this.emit('prefinish') 34369 this.emit('finish') 34370 if (this[CLOSED]) 34371 this.emit('close') 34372 this[EMITTING_END] = false 34373 } 34374 } 34375 34376 emit (ev, data, ...extra) { 34377 // error and close are only events allowed after calling destroy() 34378 if (ev !== 'error' && ev !== 'close' && ev !== DESTROYED && this[DESTROYED]) 34379 return 34380 else if (ev === 'data') { 34381 return !data ? false 34382 : this[ASYNC] ? defer(() => this[EMITDATA](data)) 34383 : this[EMITDATA](data) 34384 } else if (ev === 'end') { 34385 return this[EMITEND]() 34386 } else if (ev === 'close') { 34387 this[CLOSED] = true 34388 // don't emit close before 'end' and 'finish' 34389 if (!this[EMITTED_END] && !this[DESTROYED]) 34390 return 34391 const ret = super.emit('close') 34392 this.removeAllListeners('close') 34393 return ret 34394 } else if (ev === 'error') { 34395 this[EMITTED_ERROR] = data 34396 const ret = super.emit('error', data) 34397 this[MAYBE_EMIT_END]() 34398 return ret 34399 } else if (ev === 'resume') { 34400 const ret = super.emit('resume') 34401 this[MAYBE_EMIT_END]() 34402 return ret 34403 } else if (ev === 'finish' || ev === 'prefinish') { 34404 const ret = super.emit(ev) 34405 this.removeAllListeners(ev) 34406 return ret 34407 } 34408 34409 // Some other unknown event 34410 const ret = super.emit(ev, data, ...extra) 34411 this[MAYBE_EMIT_END]() 34412 return ret 34413 } 34414 34415 [EMITDATA] (data) { 34416 for (const p of this.pipes) { 34417 if (p.dest.write(data) === false) 34418 this.pause() 34419 } 34420 const ret = super.emit('data', data) 34421 this[MAYBE_EMIT_END]() 34422 return ret 34423 } 34424 34425 [EMITEND] () { 34426 if (this[EMITTED_END]) 34427 return 34428 34429 this[EMITTED_END] = true 34430 this.readable = false 34431 if (this[ASYNC]) 34432 defer(() => this[EMITEND2]()) 34433 else 34434 this[EMITEND2]() 34435 } 34436 34437 [EMITEND2] () { 34438 if (this[DECODER]) { 34439 const data = this[DECODER].end() 34440 if (data) { 34441 for (const p of this.pipes) { 34442 p.dest.write(data) 34443 } 34444 super.emit('data', data) 34445 } 34446 } 34447 34448 for (const p of this.pipes) { 34449 p.end() 34450 } 34451 const ret = super.emit('end') 34452 this.removeAllListeners('end') 34453 return ret 34454 } 34455 34456 // const all = await stream.collect() 34457 collect () { 34458 const buf = [] 34459 if (!this[OBJECTMODE]) 34460 buf.dataLength = 0 34461 // set the promise first, in case an error is raised 34462 // by triggering the flow here. 34463 const p = this.promise() 34464 this.on('data', c => { 34465 buf.push(c) 34466 if (!this[OBJECTMODE]) 34467 buf.dataLength += c.length 34468 }) 34469 return p.then(() => buf) 34470 } 34471 34472 // const data = await stream.concat() 34473 concat () { 34474 return this[OBJECTMODE] 34475 ? Promise.reject(new Error('cannot concat in objectMode')) 34476 : this.collect().then(buf => 34477 this[OBJECTMODE] 34478 ? Promise.reject(new Error('cannot concat in objectMode')) 34479 : this[ENCODING] ? buf.join('') : Buffer.concat(buf, buf.dataLength)) 34480 } 34481 34482 // stream.promise().then(() => done, er => emitted error) 34483 promise () { 34484 return new Promise((resolve, reject) => { 34485 this.on(DESTROYED, () => reject(new Error('stream destroyed'))) 34486 this.on('error', er => reject(er)) 34487 this.on('end', () => resolve()) 34488 }) 34489 } 34490 34491 // for await (let chunk of stream) 34492 [ASYNCITERATOR] () { 34493 const next = () => { 34494 const res = this.read() 34495 if (res !== null) 34496 return Promise.resolve({ done: false, value: res }) 34497 34498 if (this[EOF]) 34499 return Promise.resolve({ done: true }) 34500 34501 let resolve = null 34502 let reject = null 34503 const onerr = er => { 34504 this.removeListener('data', ondata) 34505 this.removeListener('end', onend) 34506 reject(er) 34507 } 34508 const ondata = value => { 34509 this.removeListener('error', onerr) 34510 this.removeListener('end', onend) 34511 this.pause() 34512 resolve({ value: value, done: !!this[EOF] }) 34513 } 34514 const onend = () => { 34515 this.removeListener('error', onerr) 34516 this.removeListener('data', ondata) 34517 resolve({ done: true }) 34518 } 34519 const ondestroy = () => onerr(new Error('stream destroyed')) 34520 return new Promise((res, rej) => { 34521 reject = rej 34522 resolve = res 34523 this.once(DESTROYED, ondestroy) 34524 this.once('error', onerr) 34525 this.once('end', onend) 34526 this.once('data', ondata) 34527 }) 34528 } 34529 34530 return { next } 34531 } 34532 34533 // for (let chunk of stream) 34534 [ITERATOR] () { 34535 const next = () => { 34536 const value = this.read() 34537 const done = value === null 34538 return { value, done } 34539 } 34540 return { next } 34541 } 34542 34543 destroy (er) { 34544 if (this[DESTROYED]) { 34545 if (er) 34546 this.emit('error', er) 34547 else 34548 this.emit(DESTROYED) 34549 return this 34550 } 34551 34552 this[DESTROYED] = true 34553 34554 // throw away all buffered data, it's never coming out 34555 this.buffer.length = 0 34556 this[BUFFERLENGTH] = 0 34557 34558 if (typeof this.close === 'function' && !this[CLOSED]) 34559 this.close() 34560 34561 if (er) 34562 this.emit('error', er) 34563 else // if no error to emit, still reject pending promises 34564 this.emit(DESTROYED) 34565 34566 return this 34567 } 34568 34569 static isStream (s) { 34570 return !!s && (s instanceof Minipass || s instanceof Stream || 34571 s instanceof EE && ( 34572 typeof s.pipe === 'function' || // readable 34573 (typeof s.write === 'function' && typeof s.end === 'function') // writable 34574 )) 34575 } 34576 } 34577 34578 34579 /***/ }), 34580 34581 /***/ 80900: 34582 /***/ ((module) => { 34583 34584 /** 34585 * Helpers. 34586 */ 34587 34588 var s = 1000; 34589 var m = s * 60; 34590 var h = m * 60; 34591 var d = h * 24; 34592 var w = d * 7; 34593 var y = d * 365.25; 34594 34595 /** 34596 * Parse or format the given `val`. 34597 * 34598 * Options: 34599 * 34600 * - `long` verbose formatting [false] 34601 * 34602 * @param {String|Number} val 34603 * @param {Object} [options] 34604 * @throws {Error} throw an error if val is not a non-empty string or a number 34605 * @return {String|Number} 34606 * @api public 34607 */ 34608 34609 module.exports = function(val, options) { 34610 options = options || {}; 34611 var type = typeof val; 34612 if (type === 'string' && val.length > 0) { 34613 return parse(val); 34614 } else if (type === 'number' && isFinite(val)) { 34615 return options.long ? fmtLong(val) : fmtShort(val); 34616 } 34617 throw new Error( 34618 'val is not a non-empty string or a valid number. val=' + 34619 JSON.stringify(val) 34620 ); 34621 }; 34622 34623 /** 34624 * Parse the given `str` and return milliseconds. 34625 * 34626 * @param {String} str 34627 * @return {Number} 34628 * @api private 34629 */ 34630 34631 function parse(str) { 34632 str = String(str); 34633 if (str.length > 100) { 34634 return; 34635 } 34636 var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( 34637 str 34638 ); 34639 if (!match) { 34640 return; 34641 } 34642 var n = parseFloat(match[1]); 34643 var type = (match[2] || 'ms').toLowerCase(); 34644 switch (type) { 34645 case 'years': 34646 case 'year': 34647 case 'yrs': 34648 case 'yr': 34649 case 'y': 34650 return n * y; 34651 case 'weeks': 34652 case 'week': 34653 case 'w': 34654 return n * w; 34655 case 'days': 34656 case 'day': 34657 case 'd': 34658 return n * d; 34659 case 'hours': 34660 case 'hour': 34661 case 'hrs': 34662 case 'hr': 34663 case 'h': 34664 return n * h; 34665 case 'minutes': 34666 case 'minute': 34667 case 'mins': 34668 case 'min': 34669 case 'm': 34670 return n * m; 34671 case 'seconds': 34672 case 'second': 34673 case 'secs': 34674 case 'sec': 34675 case 's': 34676 return n * s; 34677 case 'milliseconds': 34678 case 'millisecond': 34679 case 'msecs': 34680 case 'msec': 34681 case 'ms': 34682 return n; 34683 default: 34684 return undefined; 34685 } 34686 } 34687 34688 /** 34689 * Short format for `ms`. 34690 * 34691 * @param {Number} ms 34692 * @return {String} 34693 * @api private 34694 */ 34695 34696 function fmtShort(ms) { 34697 var msAbs = Math.abs(ms); 34698 if (msAbs >= d) { 34699 return Math.round(ms / d) + 'd'; 34700 } 34701 if (msAbs >= h) { 34702 return Math.round(ms / h) + 'h'; 34703 } 34704 if (msAbs >= m) { 34705 return Math.round(ms / m) + 'm'; 34706 } 34707 if (msAbs >= s) { 34708 return Math.round(ms / s) + 's'; 34709 } 34710 return ms + 'ms'; 34711 } 34712 34713 /** 34714 * Long format for `ms`. 34715 * 34716 * @param {Number} ms 34717 * @return {String} 34718 * @api private 34719 */ 34720 34721 function fmtLong(ms) { 34722 var msAbs = Math.abs(ms); 34723 if (msAbs >= d) { 34724 return plural(ms, msAbs, d, 'day'); 34725 } 34726 if (msAbs >= h) { 34727 return plural(ms, msAbs, h, 'hour'); 34728 } 34729 if (msAbs >= m) { 34730 return plural(ms, msAbs, m, 'minute'); 34731 } 34732 if (msAbs >= s) { 34733 return plural(ms, msAbs, s, 'second'); 34734 } 34735 return ms + ' ms'; 34736 } 34737 34738 /** 34739 * Pluralization helper. 34740 */ 34741 34742 function plural(ms, msAbs, n, name) { 34743 var isPlural = msAbs >= n * 1.5; 34744 return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); 34745 } 34746 34747 34748 /***/ }), 34749 34750 /***/ 95385: 34751 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 34752 34753 "use strict"; 34754 /*! 34755 * negotiator 34756 * Copyright(c) 2012 Federico Romero 34757 * Copyright(c) 2012-2014 Isaac Z. Schlueter 34758 * Copyright(c) 2015 Douglas Christopher Wilson 34759 * MIT Licensed 34760 */ 34761 34762 34763 34764 var preferredCharsets = __nccwpck_require__(99296) 34765 var preferredEncodings = __nccwpck_require__(25297) 34766 var preferredLanguages = __nccwpck_require__(19722) 34767 var preferredMediaTypes = __nccwpck_require__(62563) 34768 34769 /** 34770 * Module exports. 34771 * @public 34772 */ 34773 34774 module.exports = Negotiator; 34775 module.exports.Negotiator = Negotiator; 34776 34777 /** 34778 * Create a Negotiator instance from a request. 34779 * @param {object} request 34780 * @public 34781 */ 34782 34783 function Negotiator(request) { 34784 if (!(this instanceof Negotiator)) { 34785 return new Negotiator(request); 34786 } 34787 34788 this.request = request; 34789 } 34790 34791 Negotiator.prototype.charset = function charset(available) { 34792 var set = this.charsets(available); 34793 return set && set[0]; 34794 }; 34795 34796 Negotiator.prototype.charsets = function charsets(available) { 34797 return preferredCharsets(this.request.headers['accept-charset'], available); 34798 }; 34799 34800 Negotiator.prototype.encoding = function encoding(available) { 34801 var set = this.encodings(available); 34802 return set && set[0]; 34803 }; 34804 34805 Negotiator.prototype.encodings = function encodings(available) { 34806 return preferredEncodings(this.request.headers['accept-encoding'], available); 34807 }; 34808 34809 Negotiator.prototype.language = function language(available) { 34810 var set = this.languages(available); 34811 return set && set[0]; 34812 }; 34813 34814 Negotiator.prototype.languages = function languages(available) { 34815 return preferredLanguages(this.request.headers['accept-language'], available); 34816 }; 34817 34818 Negotiator.prototype.mediaType = function mediaType(available) { 34819 var set = this.mediaTypes(available); 34820 return set && set[0]; 34821 }; 34822 34823 Negotiator.prototype.mediaTypes = function mediaTypes(available) { 34824 return preferredMediaTypes(this.request.headers.accept, available); 34825 }; 34826 34827 // Backwards compatibility 34828 Negotiator.prototype.preferredCharset = Negotiator.prototype.charset; 34829 Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets; 34830 Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding; 34831 Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings; 34832 Negotiator.prototype.preferredLanguage = Negotiator.prototype.language; 34833 Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages; 34834 Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType; 34835 Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes; 34836 34837 34838 /***/ }), 34839 34840 /***/ 99296: 34841 /***/ ((module) => { 34842 34843 "use strict"; 34844 /** 34845 * negotiator 34846 * Copyright(c) 2012 Isaac Z. Schlueter 34847 * Copyright(c) 2014 Federico Romero 34848 * Copyright(c) 2014-2015 Douglas Christopher Wilson 34849 * MIT Licensed 34850 */ 34851 34852 34853 34854 /** 34855 * Module exports. 34856 * @public 34857 */ 34858 34859 module.exports = preferredCharsets; 34860 module.exports.preferredCharsets = preferredCharsets; 34861 34862 /** 34863 * Module variables. 34864 * @private 34865 */ 34866 34867 var simpleCharsetRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/; 34868 34869 /** 34870 * Parse the Accept-Charset header. 34871 * @private 34872 */ 34873 34874 function parseAcceptCharset(accept) { 34875 var accepts = accept.split(','); 34876 34877 for (var i = 0, j = 0; i < accepts.length; i++) { 34878 var charset = parseCharset(accepts[i].trim(), i); 34879 34880 if (charset) { 34881 accepts[j++] = charset; 34882 } 34883 } 34884 34885 // trim accepts 34886 accepts.length = j; 34887 34888 return accepts; 34889 } 34890 34891 /** 34892 * Parse a charset from the Accept-Charset header. 34893 * @private 34894 */ 34895 34896 function parseCharset(str, i) { 34897 var match = simpleCharsetRegExp.exec(str); 34898 if (!match) return null; 34899 34900 var charset = match[1]; 34901 var q = 1; 34902 if (match[2]) { 34903 var params = match[2].split(';') 34904 for (var j = 0; j < params.length; j++) { 34905 var p = params[j].trim().split('='); 34906 if (p[0] === 'q') { 34907 q = parseFloat(p[1]); 34908 break; 34909 } 34910 } 34911 } 34912 34913 return { 34914 charset: charset, 34915 q: q, 34916 i: i 34917 }; 34918 } 34919 34920 /** 34921 * Get the priority of a charset. 34922 * @private 34923 */ 34924 34925 function getCharsetPriority(charset, accepted, index) { 34926 var priority = {o: -1, q: 0, s: 0}; 34927 34928 for (var i = 0; i < accepted.length; i++) { 34929 var spec = specify(charset, accepted[i], index); 34930 34931 if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { 34932 priority = spec; 34933 } 34934 } 34935 34936 return priority; 34937 } 34938 34939 /** 34940 * Get the specificity of the charset. 34941 * @private 34942 */ 34943 34944 function specify(charset, spec, index) { 34945 var s = 0; 34946 if(spec.charset.toLowerCase() === charset.toLowerCase()){ 34947 s |= 1; 34948 } else if (spec.charset !== '*' ) { 34949 return null 34950 } 34951 34952 return { 34953 i: index, 34954 o: spec.i, 34955 q: spec.q, 34956 s: s 34957 } 34958 } 34959 34960 /** 34961 * Get the preferred charsets from an Accept-Charset header. 34962 * @public 34963 */ 34964 34965 function preferredCharsets(accept, provided) { 34966 // RFC 2616 sec 14.2: no header = * 34967 var accepts = parseAcceptCharset(accept === undefined ? '*' : accept || ''); 34968 34969 if (!provided) { 34970 // sorted list of all charsets 34971 return accepts 34972 .filter(isQuality) 34973 .sort(compareSpecs) 34974 .map(getFullCharset); 34975 } 34976 34977 var priorities = provided.map(function getPriority(type, index) { 34978 return getCharsetPriority(type, accepts, index); 34979 }); 34980 34981 // sorted list of accepted charsets 34982 return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) { 34983 return provided[priorities.indexOf(priority)]; 34984 }); 34985 } 34986 34987 /** 34988 * Compare two specs. 34989 * @private 34990 */ 34991 34992 function compareSpecs(a, b) { 34993 return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; 34994 } 34995 34996 /** 34997 * Get full charset string. 34998 * @private 34999 */ 35000 35001 function getFullCharset(spec) { 35002 return spec.charset; 35003 } 35004 35005 /** 35006 * Check if a spec has any quality. 35007 * @private 35008 */ 35009 35010 function isQuality(spec) { 35011 return spec.q > 0; 35012 } 35013 35014 35015 /***/ }), 35016 35017 /***/ 25297: 35018 /***/ ((module) => { 35019 35020 "use strict"; 35021 /** 35022 * negotiator 35023 * Copyright(c) 2012 Isaac Z. Schlueter 35024 * Copyright(c) 2014 Federico Romero 35025 * Copyright(c) 2014-2015 Douglas Christopher Wilson 35026 * MIT Licensed 35027 */ 35028 35029 35030 35031 /** 35032 * Module exports. 35033 * @public 35034 */ 35035 35036 module.exports = preferredEncodings; 35037 module.exports.preferredEncodings = preferredEncodings; 35038 35039 /** 35040 * Module variables. 35041 * @private 35042 */ 35043 35044 var simpleEncodingRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/; 35045 35046 /** 35047 * Parse the Accept-Encoding header. 35048 * @private 35049 */ 35050 35051 function parseAcceptEncoding(accept) { 35052 var accepts = accept.split(','); 35053 var hasIdentity = false; 35054 var minQuality = 1; 35055 35056 for (var i = 0, j = 0; i < accepts.length; i++) { 35057 var encoding = parseEncoding(accepts[i].trim(), i); 35058 35059 if (encoding) { 35060 accepts[j++] = encoding; 35061 hasIdentity = hasIdentity || specify('identity', encoding); 35062 minQuality = Math.min(minQuality, encoding.q || 1); 35063 } 35064 } 35065 35066 if (!hasIdentity) { 35067 /* 35068 * If identity doesn't explicitly appear in the accept-encoding header, 35069 * it's added to the list of acceptable encoding with the lowest q 35070 */ 35071 accepts[j++] = { 35072 encoding: 'identity', 35073 q: minQuality, 35074 i: i 35075 }; 35076 } 35077 35078 // trim accepts 35079 accepts.length = j; 35080 35081 return accepts; 35082 } 35083 35084 /** 35085 * Parse an encoding from the Accept-Encoding header. 35086 * @private 35087 */ 35088 35089 function parseEncoding(str, i) { 35090 var match = simpleEncodingRegExp.exec(str); 35091 if (!match) return null; 35092 35093 var encoding = match[1]; 35094 var q = 1; 35095 if (match[2]) { 35096 var params = match[2].split(';'); 35097 for (var j = 0; j < params.length; j++) { 35098 var p = params[j].trim().split('='); 35099 if (p[0] === 'q') { 35100 q = parseFloat(p[1]); 35101 break; 35102 } 35103 } 35104 } 35105 35106 return { 35107 encoding: encoding, 35108 q: q, 35109 i: i 35110 }; 35111 } 35112 35113 /** 35114 * Get the priority of an encoding. 35115 * @private 35116 */ 35117 35118 function getEncodingPriority(encoding, accepted, index) { 35119 var priority = {o: -1, q: 0, s: 0}; 35120 35121 for (var i = 0; i < accepted.length; i++) { 35122 var spec = specify(encoding, accepted[i], index); 35123 35124 if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { 35125 priority = spec; 35126 } 35127 } 35128 35129 return priority; 35130 } 35131 35132 /** 35133 * Get the specificity of the encoding. 35134 * @private 35135 */ 35136 35137 function specify(encoding, spec, index) { 35138 var s = 0; 35139 if(spec.encoding.toLowerCase() === encoding.toLowerCase()){ 35140 s |= 1; 35141 } else if (spec.encoding !== '*' ) { 35142 return null 35143 } 35144 35145 return { 35146 i: index, 35147 o: spec.i, 35148 q: spec.q, 35149 s: s 35150 } 35151 }; 35152 35153 /** 35154 * Get the preferred encodings from an Accept-Encoding header. 35155 * @public 35156 */ 35157 35158 function preferredEncodings(accept, provided) { 35159 var accepts = parseAcceptEncoding(accept || ''); 35160 35161 if (!provided) { 35162 // sorted list of all encodings 35163 return accepts 35164 .filter(isQuality) 35165 .sort(compareSpecs) 35166 .map(getFullEncoding); 35167 } 35168 35169 var priorities = provided.map(function getPriority(type, index) { 35170 return getEncodingPriority(type, accepts, index); 35171 }); 35172 35173 // sorted list of accepted encodings 35174 return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) { 35175 return provided[priorities.indexOf(priority)]; 35176 }); 35177 } 35178 35179 /** 35180 * Compare two specs. 35181 * @private 35182 */ 35183 35184 function compareSpecs(a, b) { 35185 return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; 35186 } 35187 35188 /** 35189 * Get full encoding string. 35190 * @private 35191 */ 35192 35193 function getFullEncoding(spec) { 35194 return spec.encoding; 35195 } 35196 35197 /** 35198 * Check if a spec has any quality. 35199 * @private 35200 */ 35201 35202 function isQuality(spec) { 35203 return spec.q > 0; 35204 } 35205 35206 35207 /***/ }), 35208 35209 /***/ 19722: 35210 /***/ ((module) => { 35211 35212 "use strict"; 35213 /** 35214 * negotiator 35215 * Copyright(c) 2012 Isaac Z. Schlueter 35216 * Copyright(c) 2014 Federico Romero 35217 * Copyright(c) 2014-2015 Douglas Christopher Wilson 35218 * MIT Licensed 35219 */ 35220 35221 35222 35223 /** 35224 * Module exports. 35225 * @public 35226 */ 35227 35228 module.exports = preferredLanguages; 35229 module.exports.preferredLanguages = preferredLanguages; 35230 35231 /** 35232 * Module variables. 35233 * @private 35234 */ 35235 35236 var simpleLanguageRegExp = /^\s*([^\s\-;]+)(?:-([^\s;]+))?\s*(?:;(.*))?$/; 35237 35238 /** 35239 * Parse the Accept-Language header. 35240 * @private 35241 */ 35242 35243 function parseAcceptLanguage(accept) { 35244 var accepts = accept.split(','); 35245 35246 for (var i = 0, j = 0; i < accepts.length; i++) { 35247 var language = parseLanguage(accepts[i].trim(), i); 35248 35249 if (language) { 35250 accepts[j++] = language; 35251 } 35252 } 35253 35254 // trim accepts 35255 accepts.length = j; 35256 35257 return accepts; 35258 } 35259 35260 /** 35261 * Parse a language from the Accept-Language header. 35262 * @private 35263 */ 35264 35265 function parseLanguage(str, i) { 35266 var match = simpleLanguageRegExp.exec(str); 35267 if (!match) return null; 35268 35269 var prefix = match[1] 35270 var suffix = match[2] 35271 var full = prefix 35272 35273 if (suffix) full += "-" + suffix; 35274 35275 var q = 1; 35276 if (match[3]) { 35277 var params = match[3].split(';') 35278 for (var j = 0; j < params.length; j++) { 35279 var p = params[j].split('='); 35280 if (p[0] === 'q') q = parseFloat(p[1]); 35281 } 35282 } 35283 35284 return { 35285 prefix: prefix, 35286 suffix: suffix, 35287 q: q, 35288 i: i, 35289 full: full 35290 }; 35291 } 35292 35293 /** 35294 * Get the priority of a language. 35295 * @private 35296 */ 35297 35298 function getLanguagePriority(language, accepted, index) { 35299 var priority = {o: -1, q: 0, s: 0}; 35300 35301 for (var i = 0; i < accepted.length; i++) { 35302 var spec = specify(language, accepted[i], index); 35303 35304 if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { 35305 priority = spec; 35306 } 35307 } 35308 35309 return priority; 35310 } 35311 35312 /** 35313 * Get the specificity of the language. 35314 * @private 35315 */ 35316 35317 function specify(language, spec, index) { 35318 var p = parseLanguage(language) 35319 if (!p) return null; 35320 var s = 0; 35321 if(spec.full.toLowerCase() === p.full.toLowerCase()){ 35322 s |= 4; 35323 } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) { 35324 s |= 2; 35325 } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) { 35326 s |= 1; 35327 } else if (spec.full !== '*' ) { 35328 return null 35329 } 35330 35331 return { 35332 i: index, 35333 o: spec.i, 35334 q: spec.q, 35335 s: s 35336 } 35337 }; 35338 35339 /** 35340 * Get the preferred languages from an Accept-Language header. 35341 * @public 35342 */ 35343 35344 function preferredLanguages(accept, provided) { 35345 // RFC 2616 sec 14.4: no header = * 35346 var accepts = parseAcceptLanguage(accept === undefined ? '*' : accept || ''); 35347 35348 if (!provided) { 35349 // sorted list of all languages 35350 return accepts 35351 .filter(isQuality) 35352 .sort(compareSpecs) 35353 .map(getFullLanguage); 35354 } 35355 35356 var priorities = provided.map(function getPriority(type, index) { 35357 return getLanguagePriority(type, accepts, index); 35358 }); 35359 35360 // sorted list of accepted languages 35361 return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) { 35362 return provided[priorities.indexOf(priority)]; 35363 }); 35364 } 35365 35366 /** 35367 * Compare two specs. 35368 * @private 35369 */ 35370 35371 function compareSpecs(a, b) { 35372 return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; 35373 } 35374 35375 /** 35376 * Get full language string. 35377 * @private 35378 */ 35379 35380 function getFullLanguage(spec) { 35381 return spec.full; 35382 } 35383 35384 /** 35385 * Check if a spec has any quality. 35386 * @private 35387 */ 35388 35389 function isQuality(spec) { 35390 return spec.q > 0; 35391 } 35392 35393 35394 /***/ }), 35395 35396 /***/ 62563: 35397 /***/ ((module) => { 35398 35399 "use strict"; 35400 /** 35401 * negotiator 35402 * Copyright(c) 2012 Isaac Z. Schlueter 35403 * Copyright(c) 2014 Federico Romero 35404 * Copyright(c) 2014-2015 Douglas Christopher Wilson 35405 * MIT Licensed 35406 */ 35407 35408 35409 35410 /** 35411 * Module exports. 35412 * @public 35413 */ 35414 35415 module.exports = preferredMediaTypes; 35416 module.exports.preferredMediaTypes = preferredMediaTypes; 35417 35418 /** 35419 * Module variables. 35420 * @private 35421 */ 35422 35423 var simpleMediaTypeRegExp = /^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/; 35424 35425 /** 35426 * Parse the Accept header. 35427 * @private 35428 */ 35429 35430 function parseAccept(accept) { 35431 var accepts = splitMediaTypes(accept); 35432 35433 for (var i = 0, j = 0; i < accepts.length; i++) { 35434 var mediaType = parseMediaType(accepts[i].trim(), i); 35435 35436 if (mediaType) { 35437 accepts[j++] = mediaType; 35438 } 35439 } 35440 35441 // trim accepts 35442 accepts.length = j; 35443 35444 return accepts; 35445 } 35446 35447 /** 35448 * Parse a media type from the Accept header. 35449 * @private 35450 */ 35451 35452 function parseMediaType(str, i) { 35453 var match = simpleMediaTypeRegExp.exec(str); 35454 if (!match) return null; 35455 35456 var params = Object.create(null); 35457 var q = 1; 35458 var subtype = match[2]; 35459 var type = match[1]; 35460 35461 if (match[3]) { 35462 var kvps = splitParameters(match[3]).map(splitKeyValuePair); 35463 35464 for (var j = 0; j < kvps.length; j++) { 35465 var pair = kvps[j]; 35466 var key = pair[0].toLowerCase(); 35467 var val = pair[1]; 35468 35469 // get the value, unwrapping quotes 35470 var value = val && val[0] === '"' && val[val.length - 1] === '"' 35471 ? val.substr(1, val.length - 2) 35472 : val; 35473 35474 if (key === 'q') { 35475 q = parseFloat(value); 35476 break; 35477 } 35478 35479 // store parameter 35480 params[key] = value; 35481 } 35482 } 35483 35484 return { 35485 type: type, 35486 subtype: subtype, 35487 params: params, 35488 q: q, 35489 i: i 35490 }; 35491 } 35492 35493 /** 35494 * Get the priority of a media type. 35495 * @private 35496 */ 35497 35498 function getMediaTypePriority(type, accepted, index) { 35499 var priority = {o: -1, q: 0, s: 0}; 35500 35501 for (var i = 0; i < accepted.length; i++) { 35502 var spec = specify(type, accepted[i], index); 35503 35504 if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { 35505 priority = spec; 35506 } 35507 } 35508 35509 return priority; 35510 } 35511 35512 /** 35513 * Get the specificity of the media type. 35514 * @private 35515 */ 35516 35517 function specify(type, spec, index) { 35518 var p = parseMediaType(type); 35519 var s = 0; 35520 35521 if (!p) { 35522 return null; 35523 } 35524 35525 if(spec.type.toLowerCase() == p.type.toLowerCase()) { 35526 s |= 4 35527 } else if(spec.type != '*') { 35528 return null; 35529 } 35530 35531 if(spec.subtype.toLowerCase() == p.subtype.toLowerCase()) { 35532 s |= 2 35533 } else if(spec.subtype != '*') { 35534 return null; 35535 } 35536 35537 var keys = Object.keys(spec.params); 35538 if (keys.length > 0) { 35539 if (keys.every(function (k) { 35540 return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase(); 35541 })) { 35542 s |= 1 35543 } else { 35544 return null 35545 } 35546 } 35547 35548 return { 35549 i: index, 35550 o: spec.i, 35551 q: spec.q, 35552 s: s, 35553 } 35554 } 35555 35556 /** 35557 * Get the preferred media types from an Accept header. 35558 * @public 35559 */ 35560 35561 function preferredMediaTypes(accept, provided) { 35562 // RFC 2616 sec 14.2: no header = */* 35563 var accepts = parseAccept(accept === undefined ? '*/*' : accept || ''); 35564 35565 if (!provided) { 35566 // sorted list of all types 35567 return accepts 35568 .filter(isQuality) 35569 .sort(compareSpecs) 35570 .map(getFullType); 35571 } 35572 35573 var priorities = provided.map(function getPriority(type, index) { 35574 return getMediaTypePriority(type, accepts, index); 35575 }); 35576 35577 // sorted list of accepted types 35578 return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) { 35579 return provided[priorities.indexOf(priority)]; 35580 }); 35581 } 35582 35583 /** 35584 * Compare two specs. 35585 * @private 35586 */ 35587 35588 function compareSpecs(a, b) { 35589 return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; 35590 } 35591 35592 /** 35593 * Get full type string. 35594 * @private 35595 */ 35596 35597 function getFullType(spec) { 35598 return spec.type + '/' + spec.subtype; 35599 } 35600 35601 /** 35602 * Check if a spec has any quality. 35603 * @private 35604 */ 35605 35606 function isQuality(spec) { 35607 return spec.q > 0; 35608 } 35609 35610 /** 35611 * Count the number of quotes in a string. 35612 * @private 35613 */ 35614 35615 function quoteCount(string) { 35616 var count = 0; 35617 var index = 0; 35618 35619 while ((index = string.indexOf('"', index)) !== -1) { 35620 count++; 35621 index++; 35622 } 35623 35624 return count; 35625 } 35626 35627 /** 35628 * Split a key value pair. 35629 * @private 35630 */ 35631 35632 function splitKeyValuePair(str) { 35633 var index = str.indexOf('='); 35634 var key; 35635 var val; 35636 35637 if (index === -1) { 35638 key = str; 35639 } else { 35640 key = str.substr(0, index); 35641 val = str.substr(index + 1); 35642 } 35643 35644 return [key, val]; 35645 } 35646 35647 /** 35648 * Split an Accept header into media types. 35649 * @private 35650 */ 35651 35652 function splitMediaTypes(accept) { 35653 var accepts = accept.split(','); 35654 35655 for (var i = 1, j = 0; i < accepts.length; i++) { 35656 if (quoteCount(accepts[j]) % 2 == 0) { 35657 accepts[++j] = accepts[i]; 35658 } else { 35659 accepts[j] += ',' + accepts[i]; 35660 } 35661 } 35662 35663 // trim accepts 35664 accepts.length = j + 1; 35665 35666 return accepts; 35667 } 35668 35669 /** 35670 * Split a string of parameters. 35671 * @private 35672 */ 35673 35674 function splitParameters(str) { 35675 var parameters = str.split(';'); 35676 35677 for (var i = 1, j = 0; i < parameters.length; i++) { 35678 if (quoteCount(parameters[j]) % 2 == 0) { 35679 parameters[++j] = parameters[i]; 35680 } else { 35681 parameters[j] += ';' + parameters[i]; 35682 } 35683 } 35684 35685 // trim parameters 35686 parameters.length = j + 1; 35687 35688 for (var i = 0; i < parameters.length; i++) { 35689 parameters[i] = parameters[i].trim(); 35690 } 35691 35692 return parameters; 35693 } 35694 35695 35696 /***/ }), 35697 35698 /***/ 1223: 35699 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 35700 35701 var wrappy = __nccwpck_require__(62940) 35702 module.exports = wrappy(once) 35703 module.exports.strict = wrappy(onceStrict) 35704 35705 once.proto = once(function () { 35706 Object.defineProperty(Function.prototype, 'once', { 35707 value: function () { 35708 return once(this) 35709 }, 35710 configurable: true 35711 }) 35712 35713 Object.defineProperty(Function.prototype, 'onceStrict', { 35714 value: function () { 35715 return onceStrict(this) 35716 }, 35717 configurable: true 35718 }) 35719 }) 35720 35721 function once (fn) { 35722 var f = function () { 35723 if (f.called) return f.value 35724 f.called = true 35725 return f.value = fn.apply(this, arguments) 35726 } 35727 f.called = false 35728 return f 35729 } 35730 35731 function onceStrict (fn) { 35732 var f = function () { 35733 if (f.called) 35734 throw new Error(f.onceError) 35735 f.called = true 35736 return f.value = fn.apply(this, arguments) 35737 } 35738 var name = fn.name || 'Function wrapped with `once`' 35739 f.onceError = name + " shouldn't be called more than once" 35740 f.called = false 35741 return f 35742 } 35743 35744 35745 /***/ }), 35746 35747 /***/ 91855: 35748 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 35749 35750 "use strict"; 35751 35752 const AggregateError = __nccwpck_require__(61231); 35753 35754 module.exports = async ( 35755 iterable, 35756 mapper, 35757 { 35758 concurrency = Infinity, 35759 stopOnError = true 35760 } = {} 35761 ) => { 35762 return new Promise((resolve, reject) => { 35763 if (typeof mapper !== 'function') { 35764 throw new TypeError('Mapper function is required'); 35765 } 35766 35767 if (!((Number.isSafeInteger(concurrency) || concurrency === Infinity) && concurrency >= 1)) { 35768 throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${concurrency}\` (${typeof concurrency})`); 35769 } 35770 35771 const result = []; 35772 const errors = []; 35773 const iterator = iterable[Symbol.iterator](); 35774 let isRejected = false; 35775 let isIterableDone = false; 35776 let resolvingCount = 0; 35777 let currentIndex = 0; 35778 35779 const next = () => { 35780 if (isRejected) { 35781 return; 35782 } 35783 35784 const nextItem = iterator.next(); 35785 const index = currentIndex; 35786 currentIndex++; 35787 35788 if (nextItem.done) { 35789 isIterableDone = true; 35790 35791 if (resolvingCount === 0) { 35792 if (!stopOnError && errors.length !== 0) { 35793 reject(new AggregateError(errors)); 35794 } else { 35795 resolve(result); 35796 } 35797 } 35798 35799 return; 35800 } 35801 35802 resolvingCount++; 35803 35804 (async () => { 35805 try { 35806 const element = await nextItem.value; 35807 result[index] = await mapper(element, index); 35808 resolvingCount--; 35809 next(); 35810 } catch (error) { 35811 if (stopOnError) { 35812 isRejected = true; 35813 reject(error); 35814 } else { 35815 errors.push(error); 35816 resolvingCount--; 35817 next(); 35818 } 35819 } 35820 })(); 35821 }; 35822 35823 for (let i = 0; i < concurrency; i++) { 35824 next(); 35825 35826 if (isIterableDone) { 35827 break; 35828 } 35829 } 35830 }); 35831 }; 35832 35833 35834 /***/ }), 35835 35836 /***/ 56528: 35837 /***/ ((module) => { 35838 35839 const META = Symbol('proc-log.meta') 35840 module.exports = { 35841 META: META, 35842 output: { 35843 LEVELS: [ 35844 'standard', 35845 'error', 35846 'buffer', 35847 'flush', 35848 ], 35849 KEYS: { 35850 standard: 'standard', 35851 error: 'error', 35852 buffer: 'buffer', 35853 flush: 'flush', 35854 }, 35855 standard: function (...args) { 35856 return process.emit('output', 'standard', ...args) 35857 }, 35858 error: function (...args) { 35859 return process.emit('output', 'error', ...args) 35860 }, 35861 buffer: function (...args) { 35862 return process.emit('output', 'buffer', ...args) 35863 }, 35864 flush: function (...args) { 35865 return process.emit('output', 'flush', ...args) 35866 }, 35867 }, 35868 log: { 35869 LEVELS: [ 35870 'notice', 35871 'error', 35872 'warn', 35873 'info', 35874 'verbose', 35875 'http', 35876 'silly', 35877 'timing', 35878 'pause', 35879 'resume', 35880 ], 35881 KEYS: { 35882 notice: 'notice', 35883 error: 'error', 35884 warn: 'warn', 35885 info: 'info', 35886 verbose: 'verbose', 35887 http: 'http', 35888 silly: 'silly', 35889 timing: 'timing', 35890 pause: 'pause', 35891 resume: 'resume', 35892 }, 35893 error: function (...args) { 35894 return process.emit('log', 'error', ...args) 35895 }, 35896 notice: function (...args) { 35897 return process.emit('log', 'notice', ...args) 35898 }, 35899 warn: function (...args) { 35900 return process.emit('log', 'warn', ...args) 35901 }, 35902 info: function (...args) { 35903 return process.emit('log', 'info', ...args) 35904 }, 35905 verbose: function (...args) { 35906 return process.emit('log', 'verbose', ...args) 35907 }, 35908 http: function (...args) { 35909 return process.emit('log', 'http', ...args) 35910 }, 35911 silly: function (...args) { 35912 return process.emit('log', 'silly', ...args) 35913 }, 35914 timing: function (...args) { 35915 return process.emit('log', 'timing', ...args) 35916 }, 35917 pause: function () { 35918 return process.emit('log', 'pause') 35919 }, 35920 resume: function () { 35921 return process.emit('log', 'resume') 35922 }, 35923 }, 35924 time: { 35925 LEVELS: [ 35926 'start', 35927 'end', 35928 ], 35929 KEYS: { 35930 start: 'start', 35931 end: 'end', 35932 }, 35933 start: function (name, fn) { 35934 process.emit('time', 'start', name) 35935 function end () { 35936 return process.emit('time', 'end', name) 35937 } 35938 if (typeof fn === 'function') { 35939 const res = fn() 35940 if (res && res.finally) { 35941 return res.finally(end) 35942 } 35943 end() 35944 return res 35945 } 35946 return end 35947 }, 35948 end: function (name) { 35949 return process.emit('time', 'end', name) 35950 }, 35951 }, 35952 input: { 35953 LEVELS: [ 35954 'start', 35955 'end', 35956 'read', 35957 ], 35958 KEYS: { 35959 start: 'start', 35960 end: 'end', 35961 read: 'read', 35962 }, 35963 start: function (fn) { 35964 process.emit('input', 'start') 35965 function end () { 35966 return process.emit('input', 'end') 35967 } 35968 if (typeof fn === 'function') { 35969 const res = fn() 35970 if (res && res.finally) { 35971 return res.finally(end) 35972 } 35973 end() 35974 return res 35975 } 35976 return end 35977 }, 35978 end: function () { 35979 return process.emit('input', 'end') 35980 }, 35981 read: function (...args) { 35982 let resolve, reject 35983 const promise = new Promise((_resolve, _reject) => { 35984 resolve = _resolve 35985 reject = _reject 35986 }) 35987 process.emit('input', 'read', resolve, reject, ...args) 35988 return promise 35989 }, 35990 }, 35991 } 35992 35993 35994 /***/ }), 35995 35996 /***/ 54742: 35997 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 35998 35999 "use strict"; 36000 36001 36002 var errcode = __nccwpck_require__(52997); 36003 var retry = __nccwpck_require__(71604); 36004 36005 var hasOwn = Object.prototype.hasOwnProperty; 36006 36007 function isRetryError(err) { 36008 return err && err.code === 'EPROMISERETRY' && hasOwn.call(err, 'retried'); 36009 } 36010 36011 function promiseRetry(fn, options) { 36012 var temp; 36013 var operation; 36014 36015 if (typeof fn === 'object' && typeof options === 'function') { 36016 // Swap options and fn when using alternate signature (options, fn) 36017 temp = options; 36018 options = fn; 36019 fn = temp; 36020 } 36021 36022 operation = retry.operation(options); 36023 36024 return new Promise(function (resolve, reject) { 36025 operation.attempt(function (number) { 36026 Promise.resolve() 36027 .then(function () { 36028 return fn(function (err) { 36029 if (isRetryError(err)) { 36030 err = err.retried; 36031 } 36032 36033 throw errcode(new Error('Retrying'), 'EPROMISERETRY', { retried: err }); 36034 }, number); 36035 }) 36036 .then(resolve, function (err) { 36037 if (isRetryError(err)) { 36038 err = err.retried; 36039 36040 if (operation.retry(err || new Error())) { 36041 return; 36042 } 36043 } 36044 36045 reject(err); 36046 }); 36047 }); 36048 }); 36049 } 36050 36051 module.exports = promiseRetry; 36052 36053 36054 /***/ }), 36055 36056 /***/ 71604: 36057 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 36058 36059 module.exports = __nccwpck_require__(56244); 36060 36061 /***/ }), 36062 36063 /***/ 56244: 36064 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 36065 36066 var RetryOperation = __nccwpck_require__(45369); 36067 36068 exports.operation = function(options) { 36069 var timeouts = exports.timeouts(options); 36070 return new RetryOperation(timeouts, { 36071 forever: options && options.forever, 36072 unref: options && options.unref, 36073 maxRetryTime: options && options.maxRetryTime 36074 }); 36075 }; 36076 36077 exports.timeouts = function(options) { 36078 if (options instanceof Array) { 36079 return [].concat(options); 36080 } 36081 36082 var opts = { 36083 retries: 10, 36084 factor: 2, 36085 minTimeout: 1 * 1000, 36086 maxTimeout: Infinity, 36087 randomize: false 36088 }; 36089 for (var key in options) { 36090 opts[key] = options[key]; 36091 } 36092 36093 if (opts.minTimeout > opts.maxTimeout) { 36094 throw new Error('minTimeout is greater than maxTimeout'); 36095 } 36096 36097 var timeouts = []; 36098 for (var i = 0; i < opts.retries; i++) { 36099 timeouts.push(this.createTimeout(i, opts)); 36100 } 36101 36102 if (options && options.forever && !timeouts.length) { 36103 timeouts.push(this.createTimeout(i, opts)); 36104 } 36105 36106 // sort the array numerically ascending 36107 timeouts.sort(function(a,b) { 36108 return a - b; 36109 }); 36110 36111 return timeouts; 36112 }; 36113 36114 exports.createTimeout = function(attempt, opts) { 36115 var random = (opts.randomize) 36116 ? (Math.random() + 1) 36117 : 1; 36118 36119 var timeout = Math.round(random * opts.minTimeout * Math.pow(opts.factor, attempt)); 36120 timeout = Math.min(timeout, opts.maxTimeout); 36121 36122 return timeout; 36123 }; 36124 36125 exports.wrap = function(obj, options, methods) { 36126 if (options instanceof Array) { 36127 methods = options; 36128 options = null; 36129 } 36130 36131 if (!methods) { 36132 methods = []; 36133 for (var key in obj) { 36134 if (typeof obj[key] === 'function') { 36135 methods.push(key); 36136 } 36137 } 36138 } 36139 36140 for (var i = 0; i < methods.length; i++) { 36141 var method = methods[i]; 36142 var original = obj[method]; 36143 36144 obj[method] = function retryWrapper(original) { 36145 var op = exports.operation(options); 36146 var args = Array.prototype.slice.call(arguments, 1); 36147 var callback = args.pop(); 36148 36149 args.push(function(err) { 36150 if (op.retry(err)) { 36151 return; 36152 } 36153 if (err) { 36154 arguments[0] = op.mainError(); 36155 } 36156 callback.apply(this, arguments); 36157 }); 36158 36159 op.attempt(function() { 36160 original.apply(obj, args); 36161 }); 36162 }.bind(obj, original); 36163 obj[method].options = options; 36164 } 36165 }; 36166 36167 36168 /***/ }), 36169 36170 /***/ 45369: 36171 /***/ ((module) => { 36172 36173 function RetryOperation(timeouts, options) { 36174 // Compatibility for the old (timeouts, retryForever) signature 36175 if (typeof options === 'boolean') { 36176 options = { forever: options }; 36177 } 36178 36179 this._originalTimeouts = JSON.parse(JSON.stringify(timeouts)); 36180 this._timeouts = timeouts; 36181 this._options = options || {}; 36182 this._maxRetryTime = options && options.maxRetryTime || Infinity; 36183 this._fn = null; 36184 this._errors = []; 36185 this._attempts = 1; 36186 this._operationTimeout = null; 36187 this._operationTimeoutCb = null; 36188 this._timeout = null; 36189 this._operationStart = null; 36190 36191 if (this._options.forever) { 36192 this._cachedTimeouts = this._timeouts.slice(0); 36193 } 36194 } 36195 module.exports = RetryOperation; 36196 36197 RetryOperation.prototype.reset = function() { 36198 this._attempts = 1; 36199 this._timeouts = this._originalTimeouts; 36200 } 36201 36202 RetryOperation.prototype.stop = function() { 36203 if (this._timeout) { 36204 clearTimeout(this._timeout); 36205 } 36206 36207 this._timeouts = []; 36208 this._cachedTimeouts = null; 36209 }; 36210 36211 RetryOperation.prototype.retry = function(err) { 36212 if (this._timeout) { 36213 clearTimeout(this._timeout); 36214 } 36215 36216 if (!err) { 36217 return false; 36218 } 36219 var currentTime = new Date().getTime(); 36220 if (err && currentTime - this._operationStart >= this._maxRetryTime) { 36221 this._errors.unshift(new Error('RetryOperation timeout occurred')); 36222 return false; 36223 } 36224 36225 this._errors.push(err); 36226 36227 var timeout = this._timeouts.shift(); 36228 if (timeout === undefined) { 36229 if (this._cachedTimeouts) { 36230 // retry forever, only keep last error 36231 this._errors.splice(this._errors.length - 1, this._errors.length); 36232 this._timeouts = this._cachedTimeouts.slice(0); 36233 timeout = this._timeouts.shift(); 36234 } else { 36235 return false; 36236 } 36237 } 36238 36239 var self = this; 36240 var timer = setTimeout(function() { 36241 self._attempts++; 36242 36243 if (self._operationTimeoutCb) { 36244 self._timeout = setTimeout(function() { 36245 self._operationTimeoutCb(self._attempts); 36246 }, self._operationTimeout); 36247 36248 if (self._options.unref) { 36249 self._timeout.unref(); 36250 } 36251 } 36252 36253 self._fn(self._attempts); 36254 }, timeout); 36255 36256 if (this._options.unref) { 36257 timer.unref(); 36258 } 36259 36260 return true; 36261 }; 36262 36263 RetryOperation.prototype.attempt = function(fn, timeoutOps) { 36264 this._fn = fn; 36265 36266 if (timeoutOps) { 36267 if (timeoutOps.timeout) { 36268 this._operationTimeout = timeoutOps.timeout; 36269 } 36270 if (timeoutOps.cb) { 36271 this._operationTimeoutCb = timeoutOps.cb; 36272 } 36273 } 36274 36275 var self = this; 36276 if (this._operationTimeoutCb) { 36277 this._timeout = setTimeout(function() { 36278 self._operationTimeoutCb(); 36279 }, self._operationTimeout); 36280 } 36281 36282 this._operationStart = new Date().getTime(); 36283 36284 this._fn(this._attempts); 36285 }; 36286 36287 RetryOperation.prototype.try = function(fn) { 36288 console.log('Using RetryOperation.try() is deprecated'); 36289 this.attempt(fn); 36290 }; 36291 36292 RetryOperation.prototype.start = function(fn) { 36293 console.log('Using RetryOperation.start() is deprecated'); 36294 this.attempt(fn); 36295 }; 36296 36297 RetryOperation.prototype.start = RetryOperation.prototype.try; 36298 36299 RetryOperation.prototype.errors = function() { 36300 return this._errors; 36301 }; 36302 36303 RetryOperation.prototype.attempts = function() { 36304 return this._attempts; 36305 }; 36306 36307 RetryOperation.prototype.mainError = function() { 36308 if (this._errors.length === 0) { 36309 return null; 36310 } 36311 36312 var counts = {}; 36313 var mainError = null; 36314 var mainErrorCount = 0; 36315 36316 for (var i = 0; i < this._errors.length; i++) { 36317 var error = this._errors[i]; 36318 var message = error.message; 36319 var count = (counts[message] || 0) + 1; 36320 36321 counts[message] = count; 36322 36323 if (count >= mainErrorCount) { 36324 mainError = error; 36325 mainErrorCount = count; 36326 } 36327 } 36328 36329 return mainError; 36330 }; 36331 36332 36333 /***/ }), 36334 36335 /***/ 15118: 36336 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 36337 36338 "use strict"; 36339 /* eslint-disable node/no-deprecated-api */ 36340 36341 36342 36343 var buffer = __nccwpck_require__(14300) 36344 var Buffer = buffer.Buffer 36345 36346 var safer = {} 36347 36348 var key 36349 36350 for (key in buffer) { 36351 if (!buffer.hasOwnProperty(key)) continue 36352 if (key === 'SlowBuffer' || key === 'Buffer') continue 36353 safer[key] = buffer[key] 36354 } 36355 36356 var Safer = safer.Buffer = {} 36357 for (key in Buffer) { 36358 if (!Buffer.hasOwnProperty(key)) continue 36359 if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue 36360 Safer[key] = Buffer[key] 36361 } 36362 36363 safer.Buffer.prototype = Buffer.prototype 36364 36365 if (!Safer.from || Safer.from === Uint8Array.from) { 36366 Safer.from = function (value, encodingOrOffset, length) { 36367 if (typeof value === 'number') { 36368 throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof value) 36369 } 36370 if (value && typeof value.length === 'undefined') { 36371 throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value) 36372 } 36373 return Buffer(value, encodingOrOffset, length) 36374 } 36375 } 36376 36377 if (!Safer.alloc) { 36378 Safer.alloc = function (size, fill, encoding) { 36379 if (typeof size !== 'number') { 36380 throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size) 36381 } 36382 if (size < 0 || size >= 2 * (1 << 30)) { 36383 throw new RangeError('The value "' + size + '" is invalid for option "size"') 36384 } 36385 var buf = Buffer(size) 36386 if (!fill || fill.length === 0) { 36387 buf.fill(0) 36388 } else if (typeof encoding === 'string') { 36389 buf.fill(fill, encoding) 36390 } else { 36391 buf.fill(fill) 36392 } 36393 return buf 36394 } 36395 } 36396 36397 if (!safer.kStringMaxLength) { 36398 try { 36399 safer.kStringMaxLength = process.binding('buffer').kStringMaxLength 36400 } catch (e) { 36401 // we can't determine kStringMaxLength in environments where process.binding 36402 // is unsupported, so let's not set it 36403 } 36404 } 36405 36406 if (!safer.constants) { 36407 safer.constants = { 36408 MAX_LENGTH: safer.kMaxLength 36409 } 36410 if (safer.kStringMaxLength) { 36411 safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength 36412 } 36413 } 36414 36415 module.exports = safer 36416 36417 36418 /***/ }), 36419 36420 /***/ 91532: 36421 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 36422 36423 const ANY = Symbol('SemVer ANY') 36424 // hoisted class for cyclic dependency 36425 class Comparator { 36426 static get ANY () { 36427 return ANY 36428 } 36429 36430 constructor (comp, options) { 36431 options = parseOptions(options) 36432 36433 if (comp instanceof Comparator) { 36434 if (comp.loose === !!options.loose) { 36435 return comp 36436 } else { 36437 comp = comp.value 36438 } 36439 } 36440 36441 comp = comp.trim().split(/\s+/).join(' ') 36442 debug('comparator', comp, options) 36443 this.options = options 36444 this.loose = !!options.loose 36445 this.parse(comp) 36446 36447 if (this.semver === ANY) { 36448 this.value = '' 36449 } else { 36450 this.value = this.operator + this.semver.version 36451 } 36452 36453 debug('comp', this) 36454 } 36455 36456 parse (comp) { 36457 const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] 36458 const m = comp.match(r) 36459 36460 if (!m) { 36461 throw new TypeError(`Invalid comparator: ${comp}`) 36462 } 36463 36464 this.operator = m[1] !== undefined ? m[1] : '' 36465 if (this.operator === '=') { 36466 this.operator = '' 36467 } 36468 36469 // if it literally is just '>' or '' then allow anything. 36470 if (!m[2]) { 36471 this.semver = ANY 36472 } else { 36473 this.semver = new SemVer(m[2], this.options.loose) 36474 } 36475 } 36476 36477 toString () { 36478 return this.value 36479 } 36480 36481 test (version) { 36482 debug('Comparator.test', version, this.options.loose) 36483 36484 if (this.semver === ANY || version === ANY) { 36485 return true 36486 } 36487 36488 if (typeof version === 'string') { 36489 try { 36490 version = new SemVer(version, this.options) 36491 } catch (er) { 36492 return false 36493 } 36494 } 36495 36496 return cmp(version, this.operator, this.semver, this.options) 36497 } 36498 36499 intersects (comp, options) { 36500 if (!(comp instanceof Comparator)) { 36501 throw new TypeError('a Comparator is required') 36502 } 36503 36504 if (this.operator === '') { 36505 if (this.value === '') { 36506 return true 36507 } 36508 return new Range(comp.value, options).test(this.value) 36509 } else if (comp.operator === '') { 36510 if (comp.value === '') { 36511 return true 36512 } 36513 return new Range(this.value, options).test(comp.semver) 36514 } 36515 36516 options = parseOptions(options) 36517 36518 // Special cases where nothing can possibly be lower 36519 if (options.includePrerelease && 36520 (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) { 36521 return false 36522 } 36523 if (!options.includePrerelease && 36524 (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) { 36525 return false 36526 } 36527 36528 // Same direction increasing (> or >=) 36529 if (this.operator.startsWith('>') && comp.operator.startsWith('>')) { 36530 return true 36531 } 36532 // Same direction decreasing (< or <=) 36533 if (this.operator.startsWith('<') && comp.operator.startsWith('<')) { 36534 return true 36535 } 36536 // same SemVer and both sides are inclusive (<= or >=) 36537 if ( 36538 (this.semver.version === comp.semver.version) && 36539 this.operator.includes('=') && comp.operator.includes('=')) { 36540 return true 36541 } 36542 // opposite directions less than 36543 if (cmp(this.semver, '<', comp.semver, options) && 36544 this.operator.startsWith('>') && comp.operator.startsWith('<')) { 36545 return true 36546 } 36547 // opposite directions greater than 36548 if (cmp(this.semver, '>', comp.semver, options) && 36549 this.operator.startsWith('<') && comp.operator.startsWith('>')) { 36550 return true 36551 } 36552 return false 36553 } 36554 } 36555 36556 module.exports = Comparator 36557 36558 const parseOptions = __nccwpck_require__(40785) 36559 const { safeRe: re, t } = __nccwpck_require__(92566) 36560 const cmp = __nccwpck_require__(75098) 36561 const debug = __nccwpck_require__(50427) 36562 const SemVer = __nccwpck_require__(48088) 36563 const Range = __nccwpck_require__(9828) 36564 36565 36566 /***/ }), 36567 36568 /***/ 9828: 36569 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 36570 36571 // hoisted class for cyclic dependency 36572 class Range { 36573 constructor (range, options) { 36574 options = parseOptions(options) 36575 36576 if (range instanceof Range) { 36577 if ( 36578 range.loose === !!options.loose && 36579 range.includePrerelease === !!options.includePrerelease 36580 ) { 36581 return range 36582 } else { 36583 return new Range(range.raw, options) 36584 } 36585 } 36586 36587 if (range instanceof Comparator) { 36588 // just put it in the set and return 36589 this.raw = range.value 36590 this.set = [[range]] 36591 this.format() 36592 return this 36593 } 36594 36595 this.options = options 36596 this.loose = !!options.loose 36597 this.includePrerelease = !!options.includePrerelease 36598 36599 // First reduce all whitespace as much as possible so we do not have to rely 36600 // on potentially slow regexes like \s*. This is then stored and used for 36601 // future error messages as well. 36602 this.raw = range 36603 .trim() 36604 .split(/\s+/) 36605 .join(' ') 36606 36607 // First, split on || 36608 this.set = this.raw 36609 .split('||') 36610 // map the range to a 2d array of comparators 36611 .map(r => this.parseRange(r.trim())) 36612 // throw out any comparator lists that are empty 36613 // this generally means that it was not a valid range, which is allowed 36614 // in loose mode, but will still throw if the WHOLE range is invalid. 36615 .filter(c => c.length) 36616 36617 if (!this.set.length) { 36618 throw new TypeError(`Invalid SemVer Range: ${this.raw}`) 36619 } 36620 36621 // if we have any that are not the null set, throw out null sets. 36622 if (this.set.length > 1) { 36623 // keep the first one, in case they're all null sets 36624 const first = this.set[0] 36625 this.set = this.set.filter(c => !isNullSet(c[0])) 36626 if (this.set.length === 0) { 36627 this.set = [first] 36628 } else if (this.set.length > 1) { 36629 // if we have any that are *, then the range is just * 36630 for (const c of this.set) { 36631 if (c.length === 1 && isAny(c[0])) { 36632 this.set = [c] 36633 break 36634 } 36635 } 36636 } 36637 } 36638 36639 this.format() 36640 } 36641 36642 format () { 36643 this.range = this.set 36644 .map((comps) => comps.join(' ').trim()) 36645 .join('||') 36646 .trim() 36647 return this.range 36648 } 36649 36650 toString () { 36651 return this.range 36652 } 36653 36654 parseRange (range) { 36655 // memoize range parsing for performance. 36656 // this is a very hot path, and fully deterministic. 36657 const memoOpts = 36658 (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | 36659 (this.options.loose && FLAG_LOOSE) 36660 const memoKey = memoOpts + ':' + range 36661 const cached = cache.get(memoKey) 36662 if (cached) { 36663 return cached 36664 } 36665 36666 const loose = this.options.loose 36667 // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` 36668 const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] 36669 range = range.replace(hr, hyphenReplace(this.options.includePrerelease)) 36670 debug('hyphen replace', range) 36671 36672 // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` 36673 range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) 36674 debug('comparator trim', range) 36675 36676 // `~ 1.2.3` => `~1.2.3` 36677 range = range.replace(re[t.TILDETRIM], tildeTrimReplace) 36678 debug('tilde trim', range) 36679 36680 // `^ 1.2.3` => `^1.2.3` 36681 range = range.replace(re[t.CARETTRIM], caretTrimReplace) 36682 debug('caret trim', range) 36683 36684 // At this point, the range is completely trimmed and 36685 // ready to be split into comparators. 36686 36687 let rangeList = range 36688 .split(' ') 36689 .map(comp => parseComparator(comp, this.options)) 36690 .join(' ') 36691 .split(/\s+/) 36692 // >=0.0.0 is equivalent to * 36693 .map(comp => replaceGTE0(comp, this.options)) 36694 36695 if (loose) { 36696 // in loose mode, throw out any that are not valid comparators 36697 rangeList = rangeList.filter(comp => { 36698 debug('loose invalid filter', comp, this.options) 36699 return !!comp.match(re[t.COMPARATORLOOSE]) 36700 }) 36701 } 36702 debug('range list', rangeList) 36703 36704 // if any comparators are the null set, then replace with JUST null set 36705 // if more than one comparator, remove any * comparators 36706 // also, don't include the same comparator more than once 36707 const rangeMap = new Map() 36708 const comparators = rangeList.map(comp => new Comparator(comp, this.options)) 36709 for (const comp of comparators) { 36710 if (isNullSet(comp)) { 36711 return [comp] 36712 } 36713 rangeMap.set(comp.value, comp) 36714 } 36715 if (rangeMap.size > 1 && rangeMap.has('')) { 36716 rangeMap.delete('') 36717 } 36718 36719 const result = [...rangeMap.values()] 36720 cache.set(memoKey, result) 36721 return result 36722 } 36723 36724 intersects (range, options) { 36725 if (!(range instanceof Range)) { 36726 throw new TypeError('a Range is required') 36727 } 36728 36729 return this.set.some((thisComparators) => { 36730 return ( 36731 isSatisfiable(thisComparators, options) && 36732 range.set.some((rangeComparators) => { 36733 return ( 36734 isSatisfiable(rangeComparators, options) && 36735 thisComparators.every((thisComparator) => { 36736 return rangeComparators.every((rangeComparator) => { 36737 return thisComparator.intersects(rangeComparator, options) 36738 }) 36739 }) 36740 ) 36741 }) 36742 ) 36743 }) 36744 } 36745 36746 // if ANY of the sets match ALL of its comparators, then pass 36747 test (version) { 36748 if (!version) { 36749 return false 36750 } 36751 36752 if (typeof version === 'string') { 36753 try { 36754 version = new SemVer(version, this.options) 36755 } catch (er) { 36756 return false 36757 } 36758 } 36759 36760 for (let i = 0; i < this.set.length; i++) { 36761 if (testSet(this.set[i], version, this.options)) { 36762 return true 36763 } 36764 } 36765 return false 36766 } 36767 } 36768 36769 module.exports = Range 36770 36771 const LRU = __nccwpck_require__(7129) 36772 const cache = new LRU({ max: 1000 }) 36773 36774 const parseOptions = __nccwpck_require__(40785) 36775 const Comparator = __nccwpck_require__(91532) 36776 const debug = __nccwpck_require__(50427) 36777 const SemVer = __nccwpck_require__(48088) 36778 const { 36779 safeRe: re, 36780 t, 36781 comparatorTrimReplace, 36782 tildeTrimReplace, 36783 caretTrimReplace, 36784 } = __nccwpck_require__(92566) 36785 const { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = __nccwpck_require__(42293) 36786 36787 const isNullSet = c => c.value === '<0.0.0-0' 36788 const isAny = c => c.value === '' 36789 36790 // take a set of comparators and determine whether there 36791 // exists a version which can satisfy it 36792 const isSatisfiable = (comparators, options) => { 36793 let result = true 36794 const remainingComparators = comparators.slice() 36795 let testComparator = remainingComparators.pop() 36796 36797 while (result && remainingComparators.length) { 36798 result = remainingComparators.every((otherComparator) => { 36799 return testComparator.intersects(otherComparator, options) 36800 }) 36801 36802 testComparator = remainingComparators.pop() 36803 } 36804 36805 return result 36806 } 36807 36808 // comprised of xranges, tildes, stars, and gtlt's at this point. 36809 // already replaced the hyphen ranges 36810 // turn into a set of JUST comparators. 36811 const parseComparator = (comp, options) => { 36812 debug('comp', comp, options) 36813 comp = replaceCarets(comp, options) 36814 debug('caret', comp) 36815 comp = replaceTildes(comp, options) 36816 debug('tildes', comp) 36817 comp = replaceXRanges(comp, options) 36818 debug('xrange', comp) 36819 comp = replaceStars(comp, options) 36820 debug('stars', comp) 36821 return comp 36822 } 36823 36824 const isX = id => !id || id.toLowerCase() === 'x' || id === '*' 36825 36826 // ~, ~> --> * (any, kinda silly) 36827 // ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0 36828 // ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0 36829 // ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0 36830 // ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0 36831 // ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0 36832 // ~0.0.1 --> >=0.0.1 <0.1.0-0 36833 const replaceTildes = (comp, options) => { 36834 return comp 36835 .trim() 36836 .split(/\s+/) 36837 .map((c) => replaceTilde(c, options)) 36838 .join(' ') 36839 } 36840 36841 const replaceTilde = (comp, options) => { 36842 const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] 36843 return comp.replace(r, (_, M, m, p, pr) => { 36844 debug('tilde', comp, _, M, m, p, pr) 36845 let ret 36846 36847 if (isX(M)) { 36848 ret = '' 36849 } else if (isX(m)) { 36850 ret = `>=${M}.0.0 <${+M + 1}.0.0-0` 36851 } else if (isX(p)) { 36852 // ~1.2 == >=1.2.0 <1.3.0-0 36853 ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0` 36854 } else if (pr) { 36855 debug('replaceTilde pr', pr) 36856 ret = `>=${M}.${m}.${p}-${pr 36857 } <${M}.${+m + 1}.0-0` 36858 } else { 36859 // ~1.2.3 == >=1.2.3 <1.3.0-0 36860 ret = `>=${M}.${m}.${p 36861 } <${M}.${+m + 1}.0-0` 36862 } 36863 36864 debug('tilde return', ret) 36865 return ret 36866 }) 36867 } 36868 36869 // ^ --> * (any, kinda silly) 36870 // ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0 36871 // ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0 36872 // ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0 36873 // ^1.2.3 --> >=1.2.3 <2.0.0-0 36874 // ^1.2.0 --> >=1.2.0 <2.0.0-0 36875 // ^0.0.1 --> >=0.0.1 <0.0.2-0 36876 // ^0.1.0 --> >=0.1.0 <0.2.0-0 36877 const replaceCarets = (comp, options) => { 36878 return comp 36879 .trim() 36880 .split(/\s+/) 36881 .map((c) => replaceCaret(c, options)) 36882 .join(' ') 36883 } 36884 36885 const replaceCaret = (comp, options) => { 36886 debug('caret', comp, options) 36887 const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] 36888 const z = options.includePrerelease ? '-0' : '' 36889 return comp.replace(r, (_, M, m, p, pr) => { 36890 debug('caret', comp, _, M, m, p, pr) 36891 let ret 36892 36893 if (isX(M)) { 36894 ret = '' 36895 } else if (isX(m)) { 36896 ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0` 36897 } else if (isX(p)) { 36898 if (M === '0') { 36899 ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0` 36900 } else { 36901 ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0` 36902 } 36903 } else if (pr) { 36904 debug('replaceCaret pr', pr) 36905 if (M === '0') { 36906 if (m === '0') { 36907 ret = `>=${M}.${m}.${p}-${pr 36908 } <${M}.${m}.${+p + 1}-0` 36909 } else { 36910 ret = `>=${M}.${m}.${p}-${pr 36911 } <${M}.${+m + 1}.0-0` 36912 } 36913 } else { 36914 ret = `>=${M}.${m}.${p}-${pr 36915 } <${+M + 1}.0.0-0` 36916 } 36917 } else { 36918 debug('no pr') 36919 if (M === '0') { 36920 if (m === '0') { 36921 ret = `>=${M}.${m}.${p 36922 }${z} <${M}.${m}.${+p + 1}-0` 36923 } else { 36924 ret = `>=${M}.${m}.${p 36925 }${z} <${M}.${+m + 1}.0-0` 36926 } 36927 } else { 36928 ret = `>=${M}.${m}.${p 36929 } <${+M + 1}.0.0-0` 36930 } 36931 } 36932 36933 debug('caret return', ret) 36934 return ret 36935 }) 36936 } 36937 36938 const replaceXRanges = (comp, options) => { 36939 debug('replaceXRanges', comp, options) 36940 return comp 36941 .split(/\s+/) 36942 .map((c) => replaceXRange(c, options)) 36943 .join(' ') 36944 } 36945 36946 const replaceXRange = (comp, options) => { 36947 comp = comp.trim() 36948 const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] 36949 return comp.replace(r, (ret, gtlt, M, m, p, pr) => { 36950 debug('xRange', comp, ret, gtlt, M, m, p, pr) 36951 const xM = isX(M) 36952 const xm = xM || isX(m) 36953 const xp = xm || isX(p) 36954 const anyX = xp 36955 36956 if (gtlt === '=' && anyX) { 36957 gtlt = '' 36958 } 36959 36960 // if we're including prereleases in the match, then we need 36961 // to fix this to -0, the lowest possible prerelease value 36962 pr = options.includePrerelease ? '-0' : '' 36963 36964 if (xM) { 36965 if (gtlt === '>' || gtlt === '<') { 36966 // nothing is allowed 36967 ret = '<0.0.0-0' 36968 } else { 36969 // nothing is forbidden 36970 ret = '*' 36971 } 36972 } else if (gtlt && anyX) { 36973 // we know patch is an x, because we have any x at all. 36974 // replace X with 0 36975 if (xm) { 36976 m = 0 36977 } 36978 p = 0 36979 36980 if (gtlt === '>') { 36981 // >1 => >=2.0.0 36982 // >1.2 => >=1.3.0 36983 gtlt = '>=' 36984 if (xm) { 36985 M = +M + 1 36986 m = 0 36987 p = 0 36988 } else { 36989 m = +m + 1 36990 p = 0 36991 } 36992 } else if (gtlt === '<=') { 36993 // <=0.7.x is actually <0.8.0, since any 0.7.x should 36994 // pass. Similarly, <=7.x is actually <8.0.0, etc. 36995 gtlt = '<' 36996 if (xm) { 36997 M = +M + 1 36998 } else { 36999 m = +m + 1 37000 } 37001 } 37002 37003 if (gtlt === '<') { 37004 pr = '-0' 37005 } 37006 37007 ret = `${gtlt + M}.${m}.${p}${pr}` 37008 } else if (xm) { 37009 ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0` 37010 } else if (xp) { 37011 ret = `>=${M}.${m}.0${pr 37012 } <${M}.${+m + 1}.0-0` 37013 } 37014 37015 debug('xRange return', ret) 37016 37017 return ret 37018 }) 37019 } 37020 37021 // Because * is AND-ed with everything else in the comparator, 37022 // and '' means "any version", just remove the *s entirely. 37023 const replaceStars = (comp, options) => { 37024 debug('replaceStars', comp, options) 37025 // Looseness is ignored here. star is always as loose as it gets! 37026 return comp 37027 .trim() 37028 .replace(re[t.STAR], '') 37029 } 37030 37031 const replaceGTE0 = (comp, options) => { 37032 debug('replaceGTE0', comp, options) 37033 return comp 37034 .trim() 37035 .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '') 37036 } 37037 37038 // This function is passed to string.replace(re[t.HYPHENRANGE]) 37039 // M, m, patch, prerelease, build 37040 // 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 37041 // 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do 37042 // 1.2 - 3.4 => >=1.2.0 <3.5.0-0 37043 const hyphenReplace = incPr => ($0, 37044 from, fM, fm, fp, fpr, fb, 37045 to, tM, tm, tp, tpr, tb) => { 37046 if (isX(fM)) { 37047 from = '' 37048 } else if (isX(fm)) { 37049 from = `>=${fM}.0.0${incPr ? '-0' : ''}` 37050 } else if (isX(fp)) { 37051 from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}` 37052 } else if (fpr) { 37053 from = `>=${from}` 37054 } else { 37055 from = `>=${from}${incPr ? '-0' : ''}` 37056 } 37057 37058 if (isX(tM)) { 37059 to = '' 37060 } else if (isX(tm)) { 37061 to = `<${+tM + 1}.0.0-0` 37062 } else if (isX(tp)) { 37063 to = `<${tM}.${+tm + 1}.0-0` 37064 } else if (tpr) { 37065 to = `<=${tM}.${tm}.${tp}-${tpr}` 37066 } else if (incPr) { 37067 to = `<${tM}.${tm}.${+tp + 1}-0` 37068 } else { 37069 to = `<=${to}` 37070 } 37071 37072 return `${from} ${to}`.trim() 37073 } 37074 37075 const testSet = (set, version, options) => { 37076 for (let i = 0; i < set.length; i++) { 37077 if (!set[i].test(version)) { 37078 return false 37079 } 37080 } 37081 37082 if (version.prerelease.length && !options.includePrerelease) { 37083 // Find the set of versions that are allowed to have prereleases 37084 // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 37085 // That should allow `1.2.3-pr.2` to pass. 37086 // However, `1.2.4-alpha.notready` should NOT be allowed, 37087 // even though it's within the range set by the comparators. 37088 for (let i = 0; i < set.length; i++) { 37089 debug(set[i].semver) 37090 if (set[i].semver === Comparator.ANY) { 37091 continue 37092 } 37093 37094 if (set[i].semver.prerelease.length > 0) { 37095 const allowed = set[i].semver 37096 if (allowed.major === version.major && 37097 allowed.minor === version.minor && 37098 allowed.patch === version.patch) { 37099 return true 37100 } 37101 } 37102 } 37103 37104 // Version has a -pre, but it's not one of the ones we like. 37105 return false 37106 } 37107 37108 return true 37109 } 37110 37111 37112 /***/ }), 37113 37114 /***/ 48088: 37115 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37116 37117 const debug = __nccwpck_require__(50427) 37118 const { MAX_LENGTH, MAX_SAFE_INTEGER } = __nccwpck_require__(42293) 37119 const { safeRe: re, t } = __nccwpck_require__(92566) 37120 37121 const parseOptions = __nccwpck_require__(40785) 37122 const { compareIdentifiers } = __nccwpck_require__(92463) 37123 class SemVer { 37124 constructor (version, options) { 37125 options = parseOptions(options) 37126 37127 if (version instanceof SemVer) { 37128 if (version.loose === !!options.loose && 37129 version.includePrerelease === !!options.includePrerelease) { 37130 return version 37131 } else { 37132 version = version.version 37133 } 37134 } else if (typeof version !== 'string') { 37135 throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`) 37136 } 37137 37138 if (version.length > MAX_LENGTH) { 37139 throw new TypeError( 37140 `version is longer than ${MAX_LENGTH} characters` 37141 ) 37142 } 37143 37144 debug('SemVer', version, options) 37145 this.options = options 37146 this.loose = !!options.loose 37147 // this isn't actually relevant for versions, but keep it so that we 37148 // don't run into trouble passing this.options around. 37149 this.includePrerelease = !!options.includePrerelease 37150 37151 const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) 37152 37153 if (!m) { 37154 throw new TypeError(`Invalid Version: ${version}`) 37155 } 37156 37157 this.raw = version 37158 37159 // these are actually numbers 37160 this.major = +m[1] 37161 this.minor = +m[2] 37162 this.patch = +m[3] 37163 37164 if (this.major > MAX_SAFE_INTEGER || this.major < 0) { 37165 throw new TypeError('Invalid major version') 37166 } 37167 37168 if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { 37169 throw new TypeError('Invalid minor version') 37170 } 37171 37172 if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { 37173 throw new TypeError('Invalid patch version') 37174 } 37175 37176 // numberify any prerelease numeric ids 37177 if (!m[4]) { 37178 this.prerelease = [] 37179 } else { 37180 this.prerelease = m[4].split('.').map((id) => { 37181 if (/^[0-9]+$/.test(id)) { 37182 const num = +id 37183 if (num >= 0 && num < MAX_SAFE_INTEGER) { 37184 return num 37185 } 37186 } 37187 return id 37188 }) 37189 } 37190 37191 this.build = m[5] ? m[5].split('.') : [] 37192 this.format() 37193 } 37194 37195 format () { 37196 this.version = `${this.major}.${this.minor}.${this.patch}` 37197 if (this.prerelease.length) { 37198 this.version += `-${this.prerelease.join('.')}` 37199 } 37200 return this.version 37201 } 37202 37203 toString () { 37204 return this.version 37205 } 37206 37207 compare (other) { 37208 debug('SemVer.compare', this.version, this.options, other) 37209 if (!(other instanceof SemVer)) { 37210 if (typeof other === 'string' && other === this.version) { 37211 return 0 37212 } 37213 other = new SemVer(other, this.options) 37214 } 37215 37216 if (other.version === this.version) { 37217 return 0 37218 } 37219 37220 return this.compareMain(other) || this.comparePre(other) 37221 } 37222 37223 compareMain (other) { 37224 if (!(other instanceof SemVer)) { 37225 other = new SemVer(other, this.options) 37226 } 37227 37228 return ( 37229 compareIdentifiers(this.major, other.major) || 37230 compareIdentifiers(this.minor, other.minor) || 37231 compareIdentifiers(this.patch, other.patch) 37232 ) 37233 } 37234 37235 comparePre (other) { 37236 if (!(other instanceof SemVer)) { 37237 other = new SemVer(other, this.options) 37238 } 37239 37240 // NOT having a prerelease is > having one 37241 if (this.prerelease.length && !other.prerelease.length) { 37242 return -1 37243 } else if (!this.prerelease.length && other.prerelease.length) { 37244 return 1 37245 } else if (!this.prerelease.length && !other.prerelease.length) { 37246 return 0 37247 } 37248 37249 let i = 0 37250 do { 37251 const a = this.prerelease[i] 37252 const b = other.prerelease[i] 37253 debug('prerelease compare', i, a, b) 37254 if (a === undefined && b === undefined) { 37255 return 0 37256 } else if (b === undefined) { 37257 return 1 37258 } else if (a === undefined) { 37259 return -1 37260 } else if (a === b) { 37261 continue 37262 } else { 37263 return compareIdentifiers(a, b) 37264 } 37265 } while (++i) 37266 } 37267 37268 compareBuild (other) { 37269 if (!(other instanceof SemVer)) { 37270 other = new SemVer(other, this.options) 37271 } 37272 37273 let i = 0 37274 do { 37275 const a = this.build[i] 37276 const b = other.build[i] 37277 debug('prerelease compare', i, a, b) 37278 if (a === undefined && b === undefined) { 37279 return 0 37280 } else if (b === undefined) { 37281 return 1 37282 } else if (a === undefined) { 37283 return -1 37284 } else if (a === b) { 37285 continue 37286 } else { 37287 return compareIdentifiers(a, b) 37288 } 37289 } while (++i) 37290 } 37291 37292 // preminor will bump the version up to the next minor release, and immediately 37293 // down to pre-release. premajor and prepatch work the same way. 37294 inc (release, identifier, identifierBase) { 37295 switch (release) { 37296 case 'premajor': 37297 this.prerelease.length = 0 37298 this.patch = 0 37299 this.minor = 0 37300 this.major++ 37301 this.inc('pre', identifier, identifierBase) 37302 break 37303 case 'preminor': 37304 this.prerelease.length = 0 37305 this.patch = 0 37306 this.minor++ 37307 this.inc('pre', identifier, identifierBase) 37308 break 37309 case 'prepatch': 37310 // If this is already a prerelease, it will bump to the next version 37311 // drop any prereleases that might already exist, since they are not 37312 // relevant at this point. 37313 this.prerelease.length = 0 37314 this.inc('patch', identifier, identifierBase) 37315 this.inc('pre', identifier, identifierBase) 37316 break 37317 // If the input is a non-prerelease version, this acts the same as 37318 // prepatch. 37319 case 'prerelease': 37320 if (this.prerelease.length === 0) { 37321 this.inc('patch', identifier, identifierBase) 37322 } 37323 this.inc('pre', identifier, identifierBase) 37324 break 37325 37326 case 'major': 37327 // If this is a pre-major version, bump up to the same major version. 37328 // Otherwise increment major. 37329 // 1.0.0-5 bumps to 1.0.0 37330 // 1.1.0 bumps to 2.0.0 37331 if ( 37332 this.minor !== 0 || 37333 this.patch !== 0 || 37334 this.prerelease.length === 0 37335 ) { 37336 this.major++ 37337 } 37338 this.minor = 0 37339 this.patch = 0 37340 this.prerelease = [] 37341 break 37342 case 'minor': 37343 // If this is a pre-minor version, bump up to the same minor version. 37344 // Otherwise increment minor. 37345 // 1.2.0-5 bumps to 1.2.0 37346 // 1.2.1 bumps to 1.3.0 37347 if (this.patch !== 0 || this.prerelease.length === 0) { 37348 this.minor++ 37349 } 37350 this.patch = 0 37351 this.prerelease = [] 37352 break 37353 case 'patch': 37354 // If this is not a pre-release version, it will increment the patch. 37355 // If it is a pre-release it will bump up to the same patch version. 37356 // 1.2.0-5 patches to 1.2.0 37357 // 1.2.0 patches to 1.2.1 37358 if (this.prerelease.length === 0) { 37359 this.patch++ 37360 } 37361 this.prerelease = [] 37362 break 37363 // This probably shouldn't be used publicly. 37364 // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. 37365 case 'pre': { 37366 const base = Number(identifierBase) ? 1 : 0 37367 37368 if (!identifier && identifierBase === false) { 37369 throw new Error('invalid increment argument: identifier is empty') 37370 } 37371 37372 if (this.prerelease.length === 0) { 37373 this.prerelease = [base] 37374 } else { 37375 let i = this.prerelease.length 37376 while (--i >= 0) { 37377 if (typeof this.prerelease[i] === 'number') { 37378 this.prerelease[i]++ 37379 i = -2 37380 } 37381 } 37382 if (i === -1) { 37383 // didn't increment anything 37384 if (identifier === this.prerelease.join('.') && identifierBase === false) { 37385 throw new Error('invalid increment argument: identifier already exists') 37386 } 37387 this.prerelease.push(base) 37388 } 37389 } 37390 if (identifier) { 37391 // 1.2.0-beta.1 bumps to 1.2.0-beta.2, 37392 // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 37393 let prerelease = [identifier, base] 37394 if (identifierBase === false) { 37395 prerelease = [identifier] 37396 } 37397 if (compareIdentifiers(this.prerelease[0], identifier) === 0) { 37398 if (isNaN(this.prerelease[1])) { 37399 this.prerelease = prerelease 37400 } 37401 } else { 37402 this.prerelease = prerelease 37403 } 37404 } 37405 break 37406 } 37407 default: 37408 throw new Error(`invalid increment argument: ${release}`) 37409 } 37410 this.raw = this.format() 37411 if (this.build.length) { 37412 this.raw += `+${this.build.join('.')}` 37413 } 37414 return this 37415 } 37416 } 37417 37418 module.exports = SemVer 37419 37420 37421 /***/ }), 37422 37423 /***/ 48848: 37424 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37425 37426 const parse = __nccwpck_require__(75925) 37427 const clean = (version, options) => { 37428 const s = parse(version.trim().replace(/^[=v]+/, ''), options) 37429 return s ? s.version : null 37430 } 37431 module.exports = clean 37432 37433 37434 /***/ }), 37435 37436 /***/ 75098: 37437 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37438 37439 const eq = __nccwpck_require__(91898) 37440 const neq = __nccwpck_require__(6017) 37441 const gt = __nccwpck_require__(84123) 37442 const gte = __nccwpck_require__(15522) 37443 const lt = __nccwpck_require__(80194) 37444 const lte = __nccwpck_require__(77520) 37445 37446 const cmp = (a, op, b, loose) => { 37447 switch (op) { 37448 case '===': 37449 if (typeof a === 'object') { 37450 a = a.version 37451 } 37452 if (typeof b === 'object') { 37453 b = b.version 37454 } 37455 return a === b 37456 37457 case '!==': 37458 if (typeof a === 'object') { 37459 a = a.version 37460 } 37461 if (typeof b === 'object') { 37462 b = b.version 37463 } 37464 return a !== b 37465 37466 case '': 37467 case '=': 37468 case '==': 37469 return eq(a, b, loose) 37470 37471 case '!=': 37472 return neq(a, b, loose) 37473 37474 case '>': 37475 return gt(a, b, loose) 37476 37477 case '>=': 37478 return gte(a, b, loose) 37479 37480 case '<': 37481 return lt(a, b, loose) 37482 37483 case '<=': 37484 return lte(a, b, loose) 37485 37486 default: 37487 throw new TypeError(`Invalid operator: ${op}`) 37488 } 37489 } 37490 module.exports = cmp 37491 37492 37493 /***/ }), 37494 37495 /***/ 13466: 37496 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37497 37498 const SemVer = __nccwpck_require__(48088) 37499 const parse = __nccwpck_require__(75925) 37500 const { safeRe: re, t } = __nccwpck_require__(92566) 37501 37502 const coerce = (version, options) => { 37503 if (version instanceof SemVer) { 37504 return version 37505 } 37506 37507 if (typeof version === 'number') { 37508 version = String(version) 37509 } 37510 37511 if (typeof version !== 'string') { 37512 return null 37513 } 37514 37515 options = options || {} 37516 37517 let match = null 37518 if (!options.rtl) { 37519 match = version.match(re[t.COERCE]) 37520 } else { 37521 // Find the right-most coercible string that does not share 37522 // a terminus with a more left-ward coercible string. 37523 // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' 37524 // 37525 // Walk through the string checking with a /g regexp 37526 // Manually set the index so as to pick up overlapping matches. 37527 // Stop when we get a match that ends at the string end, since no 37528 // coercible string can be more right-ward without the same terminus. 37529 let next 37530 while ((next = re[t.COERCERTL].exec(version)) && 37531 (!match || match.index + match[0].length !== version.length) 37532 ) { 37533 if (!match || 37534 next.index + next[0].length !== match.index + match[0].length) { 37535 match = next 37536 } 37537 re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length 37538 } 37539 // leave it in a clean state 37540 re[t.COERCERTL].lastIndex = -1 37541 } 37542 37543 if (match === null) { 37544 return null 37545 } 37546 37547 return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options) 37548 } 37549 module.exports = coerce 37550 37551 37552 /***/ }), 37553 37554 /***/ 92156: 37555 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37556 37557 const SemVer = __nccwpck_require__(48088) 37558 const compareBuild = (a, b, loose) => { 37559 const versionA = new SemVer(a, loose) 37560 const versionB = new SemVer(b, loose) 37561 return versionA.compare(versionB) || versionA.compareBuild(versionB) 37562 } 37563 module.exports = compareBuild 37564 37565 37566 /***/ }), 37567 37568 /***/ 62804: 37569 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37570 37571 const compare = __nccwpck_require__(44309) 37572 const compareLoose = (a, b) => compare(a, b, true) 37573 module.exports = compareLoose 37574 37575 37576 /***/ }), 37577 37578 /***/ 44309: 37579 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37580 37581 const SemVer = __nccwpck_require__(48088) 37582 const compare = (a, b, loose) => 37583 new SemVer(a, loose).compare(new SemVer(b, loose)) 37584 37585 module.exports = compare 37586 37587 37588 /***/ }), 37589 37590 /***/ 64297: 37591 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37592 37593 const parse = __nccwpck_require__(75925) 37594 37595 const diff = (version1, version2) => { 37596 const v1 = parse(version1, null, true) 37597 const v2 = parse(version2, null, true) 37598 const comparison = v1.compare(v2) 37599 37600 if (comparison === 0) { 37601 return null 37602 } 37603 37604 const v1Higher = comparison > 0 37605 const highVersion = v1Higher ? v1 : v2 37606 const lowVersion = v1Higher ? v2 : v1 37607 const highHasPre = !!highVersion.prerelease.length 37608 const lowHasPre = !!lowVersion.prerelease.length 37609 37610 if (lowHasPre && !highHasPre) { 37611 // Going from prerelease -> no prerelease requires some special casing 37612 37613 // If the low version has only a major, then it will always be a major 37614 // Some examples: 37615 // 1.0.0-1 -> 1.0.0 37616 // 1.0.0-1 -> 1.1.1 37617 // 1.0.0-1 -> 2.0.0 37618 if (!lowVersion.patch && !lowVersion.minor) { 37619 return 'major' 37620 } 37621 37622 // Otherwise it can be determined by checking the high version 37623 37624 if (highVersion.patch) { 37625 // anything higher than a patch bump would result in the wrong version 37626 return 'patch' 37627 } 37628 37629 if (highVersion.minor) { 37630 // anything higher than a minor bump would result in the wrong version 37631 return 'minor' 37632 } 37633 37634 // bumping major/minor/patch all have same result 37635 return 'major' 37636 } 37637 37638 // add the `pre` prefix if we are going to a prerelease version 37639 const prefix = highHasPre ? 'pre' : '' 37640 37641 if (v1.major !== v2.major) { 37642 return prefix + 'major' 37643 } 37644 37645 if (v1.minor !== v2.minor) { 37646 return prefix + 'minor' 37647 } 37648 37649 if (v1.patch !== v2.patch) { 37650 return prefix + 'patch' 37651 } 37652 37653 // high and low are preleases 37654 return 'prerelease' 37655 } 37656 37657 module.exports = diff 37658 37659 37660 /***/ }), 37661 37662 /***/ 91898: 37663 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37664 37665 const compare = __nccwpck_require__(44309) 37666 const eq = (a, b, loose) => compare(a, b, loose) === 0 37667 module.exports = eq 37668 37669 37670 /***/ }), 37671 37672 /***/ 84123: 37673 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37674 37675 const compare = __nccwpck_require__(44309) 37676 const gt = (a, b, loose) => compare(a, b, loose) > 0 37677 module.exports = gt 37678 37679 37680 /***/ }), 37681 37682 /***/ 15522: 37683 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37684 37685 const compare = __nccwpck_require__(44309) 37686 const gte = (a, b, loose) => compare(a, b, loose) >= 0 37687 module.exports = gte 37688 37689 37690 /***/ }), 37691 37692 /***/ 30900: 37693 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37694 37695 const SemVer = __nccwpck_require__(48088) 37696 37697 const inc = (version, release, options, identifier, identifierBase) => { 37698 if (typeof (options) === 'string') { 37699 identifierBase = identifier 37700 identifier = options 37701 options = undefined 37702 } 37703 37704 try { 37705 return new SemVer( 37706 version instanceof SemVer ? version.version : version, 37707 options 37708 ).inc(release, identifier, identifierBase).version 37709 } catch (er) { 37710 return null 37711 } 37712 } 37713 module.exports = inc 37714 37715 37716 /***/ }), 37717 37718 /***/ 80194: 37719 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37720 37721 const compare = __nccwpck_require__(44309) 37722 const lt = (a, b, loose) => compare(a, b, loose) < 0 37723 module.exports = lt 37724 37725 37726 /***/ }), 37727 37728 /***/ 77520: 37729 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37730 37731 const compare = __nccwpck_require__(44309) 37732 const lte = (a, b, loose) => compare(a, b, loose) <= 0 37733 module.exports = lte 37734 37735 37736 /***/ }), 37737 37738 /***/ 76688: 37739 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37740 37741 const SemVer = __nccwpck_require__(48088) 37742 const major = (a, loose) => new SemVer(a, loose).major 37743 module.exports = major 37744 37745 37746 /***/ }), 37747 37748 /***/ 38447: 37749 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37750 37751 const SemVer = __nccwpck_require__(48088) 37752 const minor = (a, loose) => new SemVer(a, loose).minor 37753 module.exports = minor 37754 37755 37756 /***/ }), 37757 37758 /***/ 6017: 37759 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37760 37761 const compare = __nccwpck_require__(44309) 37762 const neq = (a, b, loose) => compare(a, b, loose) !== 0 37763 module.exports = neq 37764 37765 37766 /***/ }), 37767 37768 /***/ 75925: 37769 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37770 37771 const SemVer = __nccwpck_require__(48088) 37772 const parse = (version, options, throwErrors = false) => { 37773 if (version instanceof SemVer) { 37774 return version 37775 } 37776 try { 37777 return new SemVer(version, options) 37778 } catch (er) { 37779 if (!throwErrors) { 37780 return null 37781 } 37782 throw er 37783 } 37784 } 37785 37786 module.exports = parse 37787 37788 37789 /***/ }), 37790 37791 /***/ 42866: 37792 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37793 37794 const SemVer = __nccwpck_require__(48088) 37795 const patch = (a, loose) => new SemVer(a, loose).patch 37796 module.exports = patch 37797 37798 37799 /***/ }), 37800 37801 /***/ 24016: 37802 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37803 37804 const parse = __nccwpck_require__(75925) 37805 const prerelease = (version, options) => { 37806 const parsed = parse(version, options) 37807 return (parsed && parsed.prerelease.length) ? parsed.prerelease : null 37808 } 37809 module.exports = prerelease 37810 37811 37812 /***/ }), 37813 37814 /***/ 76417: 37815 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37816 37817 const compare = __nccwpck_require__(44309) 37818 const rcompare = (a, b, loose) => compare(b, a, loose) 37819 module.exports = rcompare 37820 37821 37822 /***/ }), 37823 37824 /***/ 8701: 37825 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37826 37827 const compareBuild = __nccwpck_require__(92156) 37828 const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose)) 37829 module.exports = rsort 37830 37831 37832 /***/ }), 37833 37834 /***/ 6055: 37835 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37836 37837 const Range = __nccwpck_require__(9828) 37838 const satisfies = (version, range, options) => { 37839 try { 37840 range = new Range(range, options) 37841 } catch (er) { 37842 return false 37843 } 37844 return range.test(version) 37845 } 37846 module.exports = satisfies 37847 37848 37849 /***/ }), 37850 37851 /***/ 61426: 37852 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37853 37854 const compareBuild = __nccwpck_require__(92156) 37855 const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose)) 37856 module.exports = sort 37857 37858 37859 /***/ }), 37860 37861 /***/ 19601: 37862 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37863 37864 const parse = __nccwpck_require__(75925) 37865 const valid = (version, options) => { 37866 const v = parse(version, options) 37867 return v ? v.version : null 37868 } 37869 module.exports = valid 37870 37871 37872 /***/ }), 37873 37874 /***/ 11383: 37875 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 37876 37877 // just pre-load all the stuff that index.js lazily exports 37878 const internalRe = __nccwpck_require__(92566) 37879 const constants = __nccwpck_require__(42293) 37880 const SemVer = __nccwpck_require__(48088) 37881 const identifiers = __nccwpck_require__(92463) 37882 const parse = __nccwpck_require__(75925) 37883 const valid = __nccwpck_require__(19601) 37884 const clean = __nccwpck_require__(48848) 37885 const inc = __nccwpck_require__(30900) 37886 const diff = __nccwpck_require__(64297) 37887 const major = __nccwpck_require__(76688) 37888 const minor = __nccwpck_require__(38447) 37889 const patch = __nccwpck_require__(42866) 37890 const prerelease = __nccwpck_require__(24016) 37891 const compare = __nccwpck_require__(44309) 37892 const rcompare = __nccwpck_require__(76417) 37893 const compareLoose = __nccwpck_require__(62804) 37894 const compareBuild = __nccwpck_require__(92156) 37895 const sort = __nccwpck_require__(61426) 37896 const rsort = __nccwpck_require__(8701) 37897 const gt = __nccwpck_require__(84123) 37898 const lt = __nccwpck_require__(80194) 37899 const eq = __nccwpck_require__(91898) 37900 const neq = __nccwpck_require__(6017) 37901 const gte = __nccwpck_require__(15522) 37902 const lte = __nccwpck_require__(77520) 37903 const cmp = __nccwpck_require__(75098) 37904 const coerce = __nccwpck_require__(13466) 37905 const Comparator = __nccwpck_require__(91532) 37906 const Range = __nccwpck_require__(9828) 37907 const satisfies = __nccwpck_require__(6055) 37908 const toComparators = __nccwpck_require__(52706) 37909 const maxSatisfying = __nccwpck_require__(20579) 37910 const minSatisfying = __nccwpck_require__(10832) 37911 const minVersion = __nccwpck_require__(34179) 37912 const validRange = __nccwpck_require__(2098) 37913 const outside = __nccwpck_require__(60420) 37914 const gtr = __nccwpck_require__(9380) 37915 const ltr = __nccwpck_require__(33323) 37916 const intersects = __nccwpck_require__(27008) 37917 const simplifyRange = __nccwpck_require__(75297) 37918 const subset = __nccwpck_require__(7863) 37919 module.exports = { 37920 parse, 37921 valid, 37922 clean, 37923 inc, 37924 diff, 37925 major, 37926 minor, 37927 patch, 37928 prerelease, 37929 compare, 37930 rcompare, 37931 compareLoose, 37932 compareBuild, 37933 sort, 37934 rsort, 37935 gt, 37936 lt, 37937 eq, 37938 neq, 37939 gte, 37940 lte, 37941 cmp, 37942 coerce, 37943 Comparator, 37944 Range, 37945 satisfies, 37946 toComparators, 37947 maxSatisfying, 37948 minSatisfying, 37949 minVersion, 37950 validRange, 37951 outside, 37952 gtr, 37953 ltr, 37954 intersects, 37955 simplifyRange, 37956 subset, 37957 SemVer, 37958 re: internalRe.re, 37959 src: internalRe.src, 37960 tokens: internalRe.t, 37961 SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION, 37962 RELEASE_TYPES: constants.RELEASE_TYPES, 37963 compareIdentifiers: identifiers.compareIdentifiers, 37964 rcompareIdentifiers: identifiers.rcompareIdentifiers, 37965 } 37966 37967 37968 /***/ }), 37969 37970 /***/ 42293: 37971 /***/ ((module) => { 37972 37973 // Note: this is the semver.org version of the spec that it implements 37974 // Not necessarily the package version of this code. 37975 const SEMVER_SPEC_VERSION = '2.0.0' 37976 37977 const MAX_LENGTH = 256 37978 const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 37979 /* istanbul ignore next */ 9007199254740991 37980 37981 // Max safe segment length for coercion. 37982 const MAX_SAFE_COMPONENT_LENGTH = 16 37983 37984 // Max safe length for a build identifier. The max length minus 6 characters for 37985 // the shortest version with a build 0.0.0+BUILD. 37986 const MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6 37987 37988 const RELEASE_TYPES = [ 37989 'major', 37990 'premajor', 37991 'minor', 37992 'preminor', 37993 'patch', 37994 'prepatch', 37995 'prerelease', 37996 ] 37997 37998 module.exports = { 37999 MAX_LENGTH, 38000 MAX_SAFE_COMPONENT_LENGTH, 38001 MAX_SAFE_BUILD_LENGTH, 38002 MAX_SAFE_INTEGER, 38003 RELEASE_TYPES, 38004 SEMVER_SPEC_VERSION, 38005 FLAG_INCLUDE_PRERELEASE: 0b001, 38006 FLAG_LOOSE: 0b010, 38007 } 38008 38009 38010 /***/ }), 38011 38012 /***/ 50427: 38013 /***/ ((module) => { 38014 38015 const debug = ( 38016 typeof process === 'object' && 38017 process.env && 38018 process.env.NODE_DEBUG && 38019 /\bsemver\b/i.test(process.env.NODE_DEBUG) 38020 ) ? (...args) => console.error('SEMVER', ...args) 38021 : () => {} 38022 38023 module.exports = debug 38024 38025 38026 /***/ }), 38027 38028 /***/ 92463: 38029 /***/ ((module) => { 38030 38031 const numeric = /^[0-9]+$/ 38032 const compareIdentifiers = (a, b) => { 38033 const anum = numeric.test(a) 38034 const bnum = numeric.test(b) 38035 38036 if (anum && bnum) { 38037 a = +a 38038 b = +b 38039 } 38040 38041 return a === b ? 0 38042 : (anum && !bnum) ? -1 38043 : (bnum && !anum) ? 1 38044 : a < b ? -1 38045 : 1 38046 } 38047 38048 const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a) 38049 38050 module.exports = { 38051 compareIdentifiers, 38052 rcompareIdentifiers, 38053 } 38054 38055 38056 /***/ }), 38057 38058 /***/ 40785: 38059 /***/ ((module) => { 38060 38061 // parse out just the options we care about 38062 const looseOption = Object.freeze({ loose: true }) 38063 const emptyOpts = Object.freeze({ }) 38064 const parseOptions = options => { 38065 if (!options) { 38066 return emptyOpts 38067 } 38068 38069 if (typeof options !== 'object') { 38070 return looseOption 38071 } 38072 38073 return options 38074 } 38075 module.exports = parseOptions 38076 38077 38078 /***/ }), 38079 38080 /***/ 92566: 38081 /***/ ((module, exports, __nccwpck_require__) => { 38082 38083 const { 38084 MAX_SAFE_COMPONENT_LENGTH, 38085 MAX_SAFE_BUILD_LENGTH, 38086 MAX_LENGTH, 38087 } = __nccwpck_require__(42293) 38088 const debug = __nccwpck_require__(50427) 38089 exports = module.exports = {} 38090 38091 // The actual regexps go on exports.re 38092 const re = exports.re = [] 38093 const safeRe = exports.safeRe = [] 38094 const src = exports.src = [] 38095 const t = exports.t = {} 38096 let R = 0 38097 38098 const LETTERDASHNUMBER = '[a-zA-Z0-9-]' 38099 38100 // Replace some greedy regex tokens to prevent regex dos issues. These regex are 38101 // used internally via the safeRe object since all inputs in this library get 38102 // normalized first to trim and collapse all extra whitespace. The original 38103 // regexes are exported for userland consumption and lower level usage. A 38104 // future breaking change could export the safer regex only with a note that 38105 // all input should have extra whitespace removed. 38106 const safeRegexReplacements = [ 38107 ['\\s', 1], 38108 ['\\d', MAX_LENGTH], 38109 [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH], 38110 ] 38111 38112 const makeSafeRegex = (value) => { 38113 for (const [token, max] of safeRegexReplacements) { 38114 value = value 38115 .split(`${token}*`).join(`${token}{0,${max}}`) 38116 .split(`${token}+`).join(`${token}{1,${max}}`) 38117 } 38118 return value 38119 } 38120 38121 const createToken = (name, value, isGlobal) => { 38122 const safe = makeSafeRegex(value) 38123 const index = R++ 38124 debug(name, index, value) 38125 t[name] = index 38126 src[index] = value 38127 re[index] = new RegExp(value, isGlobal ? 'g' : undefined) 38128 safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined) 38129 } 38130 38131 // The following Regular Expressions can be used for tokenizing, 38132 // validating, and parsing SemVer version strings. 38133 38134 // ## Numeric Identifier 38135 // A single `0`, or a non-zero digit followed by zero or more digits. 38136 38137 createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*') 38138 createToken('NUMERICIDENTIFIERLOOSE', '\\d+') 38139 38140 // ## Non-numeric Identifier 38141 // Zero or more digits, followed by a letter or hyphen, and then zero or 38142 // more letters, digits, or hyphens. 38143 38144 createToken('NONNUMERICIDENTIFIER', `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`) 38145 38146 // ## Main Version 38147 // Three dot-separated numeric identifiers. 38148 38149 createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + 38150 `(${src[t.NUMERICIDENTIFIER]})\\.` + 38151 `(${src[t.NUMERICIDENTIFIER]})`) 38152 38153 createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + 38154 `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + 38155 `(${src[t.NUMERICIDENTIFIERLOOSE]})`) 38156 38157 // ## Pre-release Version Identifier 38158 // A numeric identifier, or a non-numeric identifier. 38159 38160 createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] 38161 }|${src[t.NONNUMERICIDENTIFIER]})`) 38162 38163 createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] 38164 }|${src[t.NONNUMERICIDENTIFIER]})`) 38165 38166 // ## Pre-release Version 38167 // Hyphen, followed by one or more dot-separated pre-release version 38168 // identifiers. 38169 38170 createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] 38171 }(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`) 38172 38173 createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] 38174 }(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`) 38175 38176 // ## Build Metadata Identifier 38177 // Any combination of digits, letters, or hyphens. 38178 38179 createToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`) 38180 38181 // ## Build Metadata 38182 // Plus sign, followed by one or more period-separated build metadata 38183 // identifiers. 38184 38185 createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] 38186 }(?:\\.${src[t.BUILDIDENTIFIER]})*))`) 38187 38188 // ## Full Version String 38189 // A main version, followed optionally by a pre-release version and 38190 // build metadata. 38191 38192 // Note that the only major, minor, patch, and pre-release sections of 38193 // the version string are capturing groups. The build metadata is not a 38194 // capturing group, because it should not ever be used in version 38195 // comparison. 38196 38197 createToken('FULLPLAIN', `v?${src[t.MAINVERSION] 38198 }${src[t.PRERELEASE]}?${ 38199 src[t.BUILD]}?`) 38200 38201 createToken('FULL', `^${src[t.FULLPLAIN]}$`) 38202 38203 // like full, but allows v1.2.3 and =1.2.3, which people do sometimes. 38204 // also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty 38205 // common in the npm registry. 38206 createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] 38207 }${src[t.PRERELEASELOOSE]}?${ 38208 src[t.BUILD]}?`) 38209 38210 createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`) 38211 38212 createToken('GTLT', '((?:<|>)?=?)') 38213 38214 // Something like "2.*" or "1.2.x". 38215 // Note that "x.x" is a valid xRange identifer, meaning "any version" 38216 // Only the first item is strictly required. 38217 createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`) 38218 createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`) 38219 38220 createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + 38221 `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + 38222 `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + 38223 `(?:${src[t.PRERELEASE]})?${ 38224 src[t.BUILD]}?` + 38225 `)?)?`) 38226 38227 createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + 38228 `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + 38229 `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + 38230 `(?:${src[t.PRERELEASELOOSE]})?${ 38231 src[t.BUILD]}?` + 38232 `)?)?`) 38233 38234 createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`) 38235 createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`) 38236 38237 // Coercion. 38238 // Extract anything that could conceivably be a part of a valid semver 38239 createToken('COERCE', `${'(^|[^\\d])' + 38240 '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + 38241 `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + 38242 `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + 38243 `(?:$|[^\\d])`) 38244 createToken('COERCERTL', src[t.COERCE], true) 38245 38246 // Tilde ranges. 38247 // Meaning is "reasonably at or greater than" 38248 createToken('LONETILDE', '(?:~>?)') 38249 38250 createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true) 38251 exports.tildeTrimReplace = '$1~' 38252 38253 createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`) 38254 createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`) 38255 38256 // Caret ranges. 38257 // Meaning is "at least and backwards compatible with" 38258 createToken('LONECARET', '(?:\\^)') 38259 38260 createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true) 38261 exports.caretTrimReplace = '$1^' 38262 38263 createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`) 38264 createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`) 38265 38266 // A simple gt/lt/eq thing, or just "" to indicate "any version" 38267 createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`) 38268 createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`) 38269 38270 // An expression to strip any whitespace between the gtlt and the thing 38271 // it modifies, so that `> 1.2.3` ==> `>1.2.3` 38272 createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] 38273 }\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true) 38274 exports.comparatorTrimReplace = '$1$2$3' 38275 38276 // Something like `1.2.3 - 1.2.4` 38277 // Note that these all use the loose form, because they'll be 38278 // checked against either the strict or loose comparator form 38279 // later. 38280 createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + 38281 `\\s+-\\s+` + 38282 `(${src[t.XRANGEPLAIN]})` + 38283 `\\s*$`) 38284 38285 createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + 38286 `\\s+-\\s+` + 38287 `(${src[t.XRANGEPLAINLOOSE]})` + 38288 `\\s*$`) 38289 38290 // Star ranges basically just allow anything at all. 38291 createToken('STAR', '(<|>)?=?\\s*\\*') 38292 // >=0.0.0 is like a star 38293 createToken('GTE0', '^\\s*>=\\s*0\\.0\\.0\\s*$') 38294 createToken('GTE0PRE', '^\\s*>=\\s*0\\.0\\.0-0\\s*$') 38295 38296 38297 /***/ }), 38298 38299 /***/ 9380: 38300 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 38301 38302 // Determine if version is greater than all the versions possible in the range. 38303 const outside = __nccwpck_require__(60420) 38304 const gtr = (version, range, options) => outside(version, range, '>', options) 38305 module.exports = gtr 38306 38307 38308 /***/ }), 38309 38310 /***/ 27008: 38311 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 38312 38313 const Range = __nccwpck_require__(9828) 38314 const intersects = (r1, r2, options) => { 38315 r1 = new Range(r1, options) 38316 r2 = new Range(r2, options) 38317 return r1.intersects(r2, options) 38318 } 38319 module.exports = intersects 38320 38321 38322 /***/ }), 38323 38324 /***/ 33323: 38325 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 38326 38327 const outside = __nccwpck_require__(60420) 38328 // Determine if version is less than all the versions possible in the range 38329 const ltr = (version, range, options) => outside(version, range, '<', options) 38330 module.exports = ltr 38331 38332 38333 /***/ }), 38334 38335 /***/ 20579: 38336 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 38337 38338 const SemVer = __nccwpck_require__(48088) 38339 const Range = __nccwpck_require__(9828) 38340 38341 const maxSatisfying = (versions, range, options) => { 38342 let max = null 38343 let maxSV = null 38344 let rangeObj = null 38345 try { 38346 rangeObj = new Range(range, options) 38347 } catch (er) { 38348 return null 38349 } 38350 versions.forEach((v) => { 38351 if (rangeObj.test(v)) { 38352 // satisfies(v, range, options) 38353 if (!max || maxSV.compare(v) === -1) { 38354 // compare(max, v, true) 38355 max = v 38356 maxSV = new SemVer(max, options) 38357 } 38358 } 38359 }) 38360 return max 38361 } 38362 module.exports = maxSatisfying 38363 38364 38365 /***/ }), 38366 38367 /***/ 10832: 38368 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 38369 38370 const SemVer = __nccwpck_require__(48088) 38371 const Range = __nccwpck_require__(9828) 38372 const minSatisfying = (versions, range, options) => { 38373 let min = null 38374 let minSV = null 38375 let rangeObj = null 38376 try { 38377 rangeObj = new Range(range, options) 38378 } catch (er) { 38379 return null 38380 } 38381 versions.forEach((v) => { 38382 if (rangeObj.test(v)) { 38383 // satisfies(v, range, options) 38384 if (!min || minSV.compare(v) === 1) { 38385 // compare(min, v, true) 38386 min = v 38387 minSV = new SemVer(min, options) 38388 } 38389 } 38390 }) 38391 return min 38392 } 38393 module.exports = minSatisfying 38394 38395 38396 /***/ }), 38397 38398 /***/ 34179: 38399 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 38400 38401 const SemVer = __nccwpck_require__(48088) 38402 const Range = __nccwpck_require__(9828) 38403 const gt = __nccwpck_require__(84123) 38404 38405 const minVersion = (range, loose) => { 38406 range = new Range(range, loose) 38407 38408 let minver = new SemVer('0.0.0') 38409 if (range.test(minver)) { 38410 return minver 38411 } 38412 38413 minver = new SemVer('0.0.0-0') 38414 if (range.test(minver)) { 38415 return minver 38416 } 38417 38418 minver = null 38419 for (let i = 0; i < range.set.length; ++i) { 38420 const comparators = range.set[i] 38421 38422 let setMin = null 38423 comparators.forEach((comparator) => { 38424 // Clone to avoid manipulating the comparator's semver object. 38425 const compver = new SemVer(comparator.semver.version) 38426 switch (comparator.operator) { 38427 case '>': 38428 if (compver.prerelease.length === 0) { 38429 compver.patch++ 38430 } else { 38431 compver.prerelease.push(0) 38432 } 38433 compver.raw = compver.format() 38434 /* fallthrough */ 38435 case '': 38436 case '>=': 38437 if (!setMin || gt(compver, setMin)) { 38438 setMin = compver 38439 } 38440 break 38441 case '<': 38442 case '<=': 38443 /* Ignore maximum versions */ 38444 break 38445 /* istanbul ignore next */ 38446 default: 38447 throw new Error(`Unexpected operation: ${comparator.operator}`) 38448 } 38449 }) 38450 if (setMin && (!minver || gt(minver, setMin))) { 38451 minver = setMin 38452 } 38453 } 38454 38455 if (minver && range.test(minver)) { 38456 return minver 38457 } 38458 38459 return null 38460 } 38461 module.exports = minVersion 38462 38463 38464 /***/ }), 38465 38466 /***/ 60420: 38467 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 38468 38469 const SemVer = __nccwpck_require__(48088) 38470 const Comparator = __nccwpck_require__(91532) 38471 const { ANY } = Comparator 38472 const Range = __nccwpck_require__(9828) 38473 const satisfies = __nccwpck_require__(6055) 38474 const gt = __nccwpck_require__(84123) 38475 const lt = __nccwpck_require__(80194) 38476 const lte = __nccwpck_require__(77520) 38477 const gte = __nccwpck_require__(15522) 38478 38479 const outside = (version, range, hilo, options) => { 38480 version = new SemVer(version, options) 38481 range = new Range(range, options) 38482 38483 let gtfn, ltefn, ltfn, comp, ecomp 38484 switch (hilo) { 38485 case '>': 38486 gtfn = gt 38487 ltefn = lte 38488 ltfn = lt 38489 comp = '>' 38490 ecomp = '>=' 38491 break 38492 case '<': 38493 gtfn = lt 38494 ltefn = gte 38495 ltfn = gt 38496 comp = '<' 38497 ecomp = '<=' 38498 break 38499 default: 38500 throw new TypeError('Must provide a hilo val of "<" or ">"') 38501 } 38502 38503 // If it satisfies the range it is not outside 38504 if (satisfies(version, range, options)) { 38505 return false 38506 } 38507 38508 // From now on, variable terms are as if we're in "gtr" mode. 38509 // but note that everything is flipped for the "ltr" function. 38510 38511 for (let i = 0; i < range.set.length; ++i) { 38512 const comparators = range.set[i] 38513 38514 let high = null 38515 let low = null 38516 38517 comparators.forEach((comparator) => { 38518 if (comparator.semver === ANY) { 38519 comparator = new Comparator('>=0.0.0') 38520 } 38521 high = high || comparator 38522 low = low || comparator 38523 if (gtfn(comparator.semver, high.semver, options)) { 38524 high = comparator 38525 } else if (ltfn(comparator.semver, low.semver, options)) { 38526 low = comparator 38527 } 38528 }) 38529 38530 // If the edge version comparator has a operator then our version 38531 // isn't outside it 38532 if (high.operator === comp || high.operator === ecomp) { 38533 return false 38534 } 38535 38536 // If the lowest version comparator has an operator and our version 38537 // is less than it then it isn't higher than the range 38538 if ((!low.operator || low.operator === comp) && 38539 ltefn(version, low.semver)) { 38540 return false 38541 } else if (low.operator === ecomp && ltfn(version, low.semver)) { 38542 return false 38543 } 38544 } 38545 return true 38546 } 38547 38548 module.exports = outside 38549 38550 38551 /***/ }), 38552 38553 /***/ 75297: 38554 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 38555 38556 // given a set of versions and a range, create a "simplified" range 38557 // that includes the same versions that the original range does 38558 // If the original range is shorter than the simplified one, return that. 38559 const satisfies = __nccwpck_require__(6055) 38560 const compare = __nccwpck_require__(44309) 38561 module.exports = (versions, range, options) => { 38562 const set = [] 38563 let first = null 38564 let prev = null 38565 const v = versions.sort((a, b) => compare(a, b, options)) 38566 for (const version of v) { 38567 const included = satisfies(version, range, options) 38568 if (included) { 38569 prev = version 38570 if (!first) { 38571 first = version 38572 } 38573 } else { 38574 if (prev) { 38575 set.push([first, prev]) 38576 } 38577 prev = null 38578 first = null 38579 } 38580 } 38581 if (first) { 38582 set.push([first, null]) 38583 } 38584 38585 const ranges = [] 38586 for (const [min, max] of set) { 38587 if (min === max) { 38588 ranges.push(min) 38589 } else if (!max && min === v[0]) { 38590 ranges.push('*') 38591 } else if (!max) { 38592 ranges.push(`>=${min}`) 38593 } else if (min === v[0]) { 38594 ranges.push(`<=${max}`) 38595 } else { 38596 ranges.push(`${min} - ${max}`) 38597 } 38598 } 38599 const simplified = ranges.join(' || ') 38600 const original = typeof range.raw === 'string' ? range.raw : String(range) 38601 return simplified.length < original.length ? simplified : range 38602 } 38603 38604 38605 /***/ }), 38606 38607 /***/ 7863: 38608 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 38609 38610 const Range = __nccwpck_require__(9828) 38611 const Comparator = __nccwpck_require__(91532) 38612 const { ANY } = Comparator 38613 const satisfies = __nccwpck_require__(6055) 38614 const compare = __nccwpck_require__(44309) 38615 38616 // Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff: 38617 // - Every simple range `r1, r2, ...` is a null set, OR 38618 // - Every simple range `r1, r2, ...` which is not a null set is a subset of 38619 // some `R1, R2, ...` 38620 // 38621 // Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff: 38622 // - If c is only the ANY comparator 38623 // - If C is only the ANY comparator, return true 38624 // - Else if in prerelease mode, return false 38625 // - else replace c with `[>=0.0.0]` 38626 // - If C is only the ANY comparator 38627 // - if in prerelease mode, return true 38628 // - else replace C with `[>=0.0.0]` 38629 // - Let EQ be the set of = comparators in c 38630 // - If EQ is more than one, return true (null set) 38631 // - Let GT be the highest > or >= comparator in c 38632 // - Let LT be the lowest < or <= comparator in c 38633 // - If GT and LT, and GT.semver > LT.semver, return true (null set) 38634 // - If any C is a = range, and GT or LT are set, return false 38635 // - If EQ 38636 // - If GT, and EQ does not satisfy GT, return true (null set) 38637 // - If LT, and EQ does not satisfy LT, return true (null set) 38638 // - If EQ satisfies every C, return true 38639 // - Else return false 38640 // - If GT 38641 // - If GT.semver is lower than any > or >= comp in C, return false 38642 // - If GT is >=, and GT.semver does not satisfy every C, return false 38643 // - If GT.semver has a prerelease, and not in prerelease mode 38644 // - If no C has a prerelease and the GT.semver tuple, return false 38645 // - If LT 38646 // - If LT.semver is greater than any < or <= comp in C, return false 38647 // - If LT is <=, and LT.semver does not satisfy every C, return false 38648 // - If GT.semver has a prerelease, and not in prerelease mode 38649 // - If no C has a prerelease and the LT.semver tuple, return false 38650 // - Else return true 38651 38652 const subset = (sub, dom, options = {}) => { 38653 if (sub === dom) { 38654 return true 38655 } 38656 38657 sub = new Range(sub, options) 38658 dom = new Range(dom, options) 38659 let sawNonNull = false 38660 38661 OUTER: for (const simpleSub of sub.set) { 38662 for (const simpleDom of dom.set) { 38663 const isSub = simpleSubset(simpleSub, simpleDom, options) 38664 sawNonNull = sawNonNull || isSub !== null 38665 if (isSub) { 38666 continue OUTER 38667 } 38668 } 38669 // the null set is a subset of everything, but null simple ranges in 38670 // a complex range should be ignored. so if we saw a non-null range, 38671 // then we know this isn't a subset, but if EVERY simple range was null, 38672 // then it is a subset. 38673 if (sawNonNull) { 38674 return false 38675 } 38676 } 38677 return true 38678 } 38679 38680 const minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')] 38681 const minimumVersion = [new Comparator('>=0.0.0')] 38682 38683 const simpleSubset = (sub, dom, options) => { 38684 if (sub === dom) { 38685 return true 38686 } 38687 38688 if (sub.length === 1 && sub[0].semver === ANY) { 38689 if (dom.length === 1 && dom[0].semver === ANY) { 38690 return true 38691 } else if (options.includePrerelease) { 38692 sub = minimumVersionWithPreRelease 38693 } else { 38694 sub = minimumVersion 38695 } 38696 } 38697 38698 if (dom.length === 1 && dom[0].semver === ANY) { 38699 if (options.includePrerelease) { 38700 return true 38701 } else { 38702 dom = minimumVersion 38703 } 38704 } 38705 38706 const eqSet = new Set() 38707 let gt, lt 38708 for (const c of sub) { 38709 if (c.operator === '>' || c.operator === '>=') { 38710 gt = higherGT(gt, c, options) 38711 } else if (c.operator === '<' || c.operator === '<=') { 38712 lt = lowerLT(lt, c, options) 38713 } else { 38714 eqSet.add(c.semver) 38715 } 38716 } 38717 38718 if (eqSet.size > 1) { 38719 return null 38720 } 38721 38722 let gtltComp 38723 if (gt && lt) { 38724 gtltComp = compare(gt.semver, lt.semver, options) 38725 if (gtltComp > 0) { 38726 return null 38727 } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) { 38728 return null 38729 } 38730 } 38731 38732 // will iterate one or zero times 38733 for (const eq of eqSet) { 38734 if (gt && !satisfies(eq, String(gt), options)) { 38735 return null 38736 } 38737 38738 if (lt && !satisfies(eq, String(lt), options)) { 38739 return null 38740 } 38741 38742 for (const c of dom) { 38743 if (!satisfies(eq, String(c), options)) { 38744 return false 38745 } 38746 } 38747 38748 return true 38749 } 38750 38751 let higher, lower 38752 let hasDomLT, hasDomGT 38753 // if the subset has a prerelease, we need a comparator in the superset 38754 // with the same tuple and a prerelease, or it's not a subset 38755 let needDomLTPre = lt && 38756 !options.includePrerelease && 38757 lt.semver.prerelease.length ? lt.semver : false 38758 let needDomGTPre = gt && 38759 !options.includePrerelease && 38760 gt.semver.prerelease.length ? gt.semver : false 38761 // exception: <1.2.3-0 is the same as <1.2.3 38762 if (needDomLTPre && needDomLTPre.prerelease.length === 1 && 38763 lt.operator === '<' && needDomLTPre.prerelease[0] === 0) { 38764 needDomLTPre = false 38765 } 38766 38767 for (const c of dom) { 38768 hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>=' 38769 hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<=' 38770 if (gt) { 38771 if (needDomGTPre) { 38772 if (c.semver.prerelease && c.semver.prerelease.length && 38773 c.semver.major === needDomGTPre.major && 38774 c.semver.minor === needDomGTPre.minor && 38775 c.semver.patch === needDomGTPre.patch) { 38776 needDomGTPre = false 38777 } 38778 } 38779 if (c.operator === '>' || c.operator === '>=') { 38780 higher = higherGT(gt, c, options) 38781 if (higher === c && higher !== gt) { 38782 return false 38783 } 38784 } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) { 38785 return false 38786 } 38787 } 38788 if (lt) { 38789 if (needDomLTPre) { 38790 if (c.semver.prerelease && c.semver.prerelease.length && 38791 c.semver.major === needDomLTPre.major && 38792 c.semver.minor === needDomLTPre.minor && 38793 c.semver.patch === needDomLTPre.patch) { 38794 needDomLTPre = false 38795 } 38796 } 38797 if (c.operator === '<' || c.operator === '<=') { 38798 lower = lowerLT(lt, c, options) 38799 if (lower === c && lower !== lt) { 38800 return false 38801 } 38802 } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) { 38803 return false 38804 } 38805 } 38806 if (!c.operator && (lt || gt) && gtltComp !== 0) { 38807 return false 38808 } 38809 } 38810 38811 // if there was a < or >, and nothing in the dom, then must be false 38812 // UNLESS it was limited by another range in the other direction. 38813 // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0 38814 if (gt && hasDomLT && !lt && gtltComp !== 0) { 38815 return false 38816 } 38817 38818 if (lt && hasDomGT && !gt && gtltComp !== 0) { 38819 return false 38820 } 38821 38822 // we needed a prerelease range in a specific tuple, but didn't get one 38823 // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0, 38824 // because it includes prereleases in the 1.2.3 tuple 38825 if (needDomGTPre || needDomLTPre) { 38826 return false 38827 } 38828 38829 return true 38830 } 38831 38832 // >=1.2.3 is lower than >1.2.3 38833 const higherGT = (a, b, options) => { 38834 if (!a) { 38835 return b 38836 } 38837 const comp = compare(a.semver, b.semver, options) 38838 return comp > 0 ? a 38839 : comp < 0 ? b 38840 : b.operator === '>' && a.operator === '>=' ? b 38841 : a 38842 } 38843 38844 // <=1.2.3 is higher than <1.2.3 38845 const lowerLT = (a, b, options) => { 38846 if (!a) { 38847 return b 38848 } 38849 const comp = compare(a.semver, b.semver, options) 38850 return comp < 0 ? a 38851 : comp > 0 ? b 38852 : b.operator === '<' && a.operator === '<=' ? b 38853 : a 38854 } 38855 38856 module.exports = subset 38857 38858 38859 /***/ }), 38860 38861 /***/ 52706: 38862 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 38863 38864 const Range = __nccwpck_require__(9828) 38865 38866 // Mostly just for testing and legacy API reasons 38867 const toComparators = (range, options) => 38868 new Range(range, options).set 38869 .map(comp => comp.map(c => c.value).join(' ').trim().split(' ')) 38870 38871 module.exports = toComparators 38872 38873 38874 /***/ }), 38875 38876 /***/ 2098: 38877 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 38878 38879 const Range = __nccwpck_require__(9828) 38880 const validRange = (range, options) => { 38881 try { 38882 // Return '*' instead of '' so that truthiness works. 38883 // This will throw if it's invalid anyway 38884 return new Range(range, options).range || '*' 38885 } catch (er) { 38886 return null 38887 } 38888 } 38889 module.exports = validRange 38890 38891 38892 /***/ }), 38893 38894 /***/ 63430: 38895 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 38896 38897 "use strict"; 38898 38899 Object.defineProperty(exports, "__esModule", ({ value: true })); 38900 exports.createVerificationPolicy = exports.createKeyFinder = exports.createBundleBuilder = exports.DEFAULT_TIMEOUT = exports.DEFAULT_RETRY = void 0; 38901 /* 38902 Copyright 2023 The Sigstore Authors. 38903 38904 Licensed under the Apache License, Version 2.0 (the "License"); 38905 you may not use this file except in compliance with the License. 38906 You may obtain a copy of the License at 38907 38908 http://www.apache.org/licenses/LICENSE-2.0 38909 38910 Unless required by applicable law or agreed to in writing, software 38911 distributed under the License is distributed on an "AS IS" BASIS, 38912 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 38913 See the License for the specific language governing permissions and 38914 limitations under the License. 38915 */ 38916 const core_1 = __nccwpck_require__(3352); 38917 const sign_1 = __nccwpck_require__(42071); 38918 const verify_1 = __nccwpck_require__(10666); 38919 exports.DEFAULT_RETRY = { retries: 2 }; 38920 exports.DEFAULT_TIMEOUT = 5000; 38921 function createBundleBuilder(bundleType, options) { 38922 const bundlerOptions = { 38923 signer: initSigner(options), 38924 witnesses: initWitnesses(options), 38925 }; 38926 switch (bundleType) { 38927 case 'messageSignature': 38928 return new sign_1.MessageSignatureBundleBuilder(bundlerOptions); 38929 case 'dsseEnvelope': 38930 return new sign_1.DSSEBundleBuilder(bundlerOptions); 38931 } 38932 } 38933 exports.createBundleBuilder = createBundleBuilder; 38934 // Translates the public KeySelector type into the KeyFinderFunc type needed by 38935 // the verifier. 38936 function createKeyFinder(keySelector) { 38937 return (hint) => { 38938 const key = keySelector(hint); 38939 if (!key) { 38940 throw new verify_1.VerificationError({ 38941 code: 'PUBLIC_KEY_ERROR', 38942 message: `key not found: ${hint}`, 38943 }); 38944 } 38945 return { 38946 publicKey: core_1.crypto.createPublicKey(key), 38947 validFor: () => true, 38948 }; 38949 }; 38950 } 38951 exports.createKeyFinder = createKeyFinder; 38952 function createVerificationPolicy(options) { 38953 const policy = {}; 38954 const san = options.certificateIdentityEmail || options.certificateIdentityURI; 38955 if (san) { 38956 policy.subjectAlternativeName = san; 38957 } 38958 if (options.certificateIssuer) { 38959 policy.extensions = { issuer: options.certificateIssuer }; 38960 } 38961 return policy; 38962 } 38963 exports.createVerificationPolicy = createVerificationPolicy; 38964 // Instantiate the FulcioSigner based on the supplied options. 38965 function initSigner(options) { 38966 return new sign_1.FulcioSigner({ 38967 fulcioBaseURL: options.fulcioURL, 38968 identityProvider: options.identityProvider || initIdentityProvider(options), 38969 retry: options.retry ?? exports.DEFAULT_RETRY, 38970 timeout: options.timeout ?? exports.DEFAULT_TIMEOUT, 38971 }); 38972 } 38973 // Instantiate an identity provider based on the supplied options. If an 38974 // explicit identity token is provided, use that. Otherwise, use the CI 38975 // context provider. 38976 function initIdentityProvider(options) { 38977 const token = options.identityToken; 38978 if (token) { 38979 /* istanbul ignore next */ 38980 return { getToken: () => Promise.resolve(token) }; 38981 } 38982 else { 38983 return new sign_1.CIContextProvider('sigstore'); 38984 } 38985 } 38986 // Instantiate a collection of witnesses based on the supplied options. 38987 function initWitnesses(options) { 38988 const witnesses = []; 38989 if (isRekorEnabled(options)) { 38990 witnesses.push(new sign_1.RekorWitness({ 38991 rekorBaseURL: options.rekorURL, 38992 fetchOnConflict: false, 38993 retry: options.retry ?? exports.DEFAULT_RETRY, 38994 timeout: options.timeout ?? exports.DEFAULT_TIMEOUT, 38995 })); 38996 } 38997 if (isTSAEnabled(options)) { 38998 witnesses.push(new sign_1.TSAWitness({ 38999 tsaBaseURL: options.tsaServerURL, 39000 retry: options.retry ?? exports.DEFAULT_RETRY, 39001 timeout: options.timeout ?? exports.DEFAULT_TIMEOUT, 39002 })); 39003 } 39004 return witnesses; 39005 } 39006 // Type assertion to ensure that Rekor is enabled 39007 function isRekorEnabled(options) { 39008 return options.tlogUpload !== false; 39009 } 39010 // Type assertion to ensure that TSA is enabled 39011 function isTSAEnabled(options) { 39012 return options.tsaServerURL !== undefined; 39013 } 39014 39015 39016 /***/ }), 39017 39018 /***/ 99149: 39019 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 39020 39021 "use strict"; 39022 39023 Object.defineProperty(exports, "__esModule", ({ value: true })); 39024 exports.verify = exports.sign = exports.createVerifier = exports.attest = exports.VerificationError = exports.PolicyError = exports.TUFError = exports.InternalError = exports.DEFAULT_REKOR_URL = exports.DEFAULT_FULCIO_URL = exports.ValidationError = void 0; 39025 /* 39026 Copyright 2022 The Sigstore Authors. 39027 39028 Licensed under the Apache License, Version 2.0 (the "License"); 39029 you may not use this file except in compliance with the License. 39030 You may obtain a copy of the License at 39031 39032 http://www.apache.org/licenses/LICENSE-2.0 39033 39034 Unless required by applicable law or agreed to in writing, software 39035 distributed under the License is distributed on an "AS IS" BASIS, 39036 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 39037 See the License for the specific language governing permissions and 39038 limitations under the License. 39039 */ 39040 var bundle_1 = __nccwpck_require__(29715); 39041 Object.defineProperty(exports, "ValidationError", ({ enumerable: true, get: function () { return bundle_1.ValidationError; } })); 39042 var sign_1 = __nccwpck_require__(42071); 39043 Object.defineProperty(exports, "DEFAULT_FULCIO_URL", ({ enumerable: true, get: function () { return sign_1.DEFAULT_FULCIO_URL; } })); 39044 Object.defineProperty(exports, "DEFAULT_REKOR_URL", ({ enumerable: true, get: function () { return sign_1.DEFAULT_REKOR_URL; } })); 39045 Object.defineProperty(exports, "InternalError", ({ enumerable: true, get: function () { return sign_1.InternalError; } })); 39046 var tuf_1 = __nccwpck_require__(88567); 39047 Object.defineProperty(exports, "TUFError", ({ enumerable: true, get: function () { return tuf_1.TUFError; } })); 39048 var verify_1 = __nccwpck_require__(10666); 39049 Object.defineProperty(exports, "PolicyError", ({ enumerable: true, get: function () { return verify_1.PolicyError; } })); 39050 Object.defineProperty(exports, "VerificationError", ({ enumerable: true, get: function () { return verify_1.VerificationError; } })); 39051 var sigstore_1 = __nccwpck_require__(51111); 39052 Object.defineProperty(exports, "attest", ({ enumerable: true, get: function () { return sigstore_1.attest; } })); 39053 Object.defineProperty(exports, "createVerifier", ({ enumerable: true, get: function () { return sigstore_1.createVerifier; } })); 39054 Object.defineProperty(exports, "sign", ({ enumerable: true, get: function () { return sigstore_1.sign; } })); 39055 Object.defineProperty(exports, "verify", ({ enumerable: true, get: function () { return sigstore_1.verify; } })); 39056 39057 39058 /***/ }), 39059 39060 /***/ 51111: 39061 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 39062 39063 "use strict"; 39064 39065 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 39066 if (k2 === undefined) k2 = k; 39067 var desc = Object.getOwnPropertyDescriptor(m, k); 39068 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 39069 desc = { enumerable: true, get: function() { return m[k]; } }; 39070 } 39071 Object.defineProperty(o, k2, desc); 39072 }) : (function(o, m, k, k2) { 39073 if (k2 === undefined) k2 = k; 39074 o[k2] = m[k]; 39075 })); 39076 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 39077 Object.defineProperty(o, "default", { enumerable: true, value: v }); 39078 }) : function(o, v) { 39079 o["default"] = v; 39080 }); 39081 var __importStar = (this && this.__importStar) || function (mod) { 39082 if (mod && mod.__esModule) return mod; 39083 var result = {}; 39084 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 39085 __setModuleDefault(result, mod); 39086 return result; 39087 }; 39088 Object.defineProperty(exports, "__esModule", ({ value: true })); 39089 exports.createVerifier = exports.verify = exports.attest = exports.sign = void 0; 39090 /* 39091 Copyright 2023 The Sigstore Authors. 39092 39093 Licensed under the Apache License, Version 2.0 (the "License"); 39094 you may not use this file except in compliance with the License. 39095 You may obtain a copy of the License at 39096 39097 http://www.apache.org/licenses/LICENSE-2.0 39098 39099 Unless required by applicable law or agreed to in writing, software 39100 distributed under the License is distributed on an "AS IS" BASIS, 39101 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 39102 See the License for the specific language governing permissions and 39103 limitations under the License. 39104 */ 39105 const bundle_1 = __nccwpck_require__(29715); 39106 const tuf = __importStar(__nccwpck_require__(88567)); 39107 const verify_1 = __nccwpck_require__(10666); 39108 const config = __importStar(__nccwpck_require__(63430)); 39109 async function sign(payload, 39110 /* istanbul ignore next */ 39111 options = {}) { 39112 const bundler = config.createBundleBuilder('messageSignature', options); 39113 const bundle = await bundler.create({ data: payload }); 39114 return (0, bundle_1.bundleToJSON)(bundle); 39115 } 39116 exports.sign = sign; 39117 async function attest(payload, payloadType, 39118 /* istanbul ignore next */ 39119 options = {}) { 39120 const bundler = config.createBundleBuilder('dsseEnvelope', options); 39121 const bundle = await bundler.create({ data: payload, type: payloadType }); 39122 return (0, bundle_1.bundleToJSON)(bundle); 39123 } 39124 exports.attest = attest; 39125 async function verify(bundle, dataOrOptions, options) { 39126 let data; 39127 if (Buffer.isBuffer(dataOrOptions)) { 39128 data = dataOrOptions; 39129 } 39130 else { 39131 options = dataOrOptions; 39132 } 39133 return createVerifier(options).then((verifier) => verifier.verify(bundle, data)); 39134 } 39135 exports.verify = verify; 39136 async function createVerifier( 39137 /* istanbul ignore next */ 39138 options = {}) { 39139 const trustedRoot = await tuf.getTrustedRoot({ 39140 mirrorURL: options.tufMirrorURL, 39141 rootPath: options.tufRootPath, 39142 cachePath: options.tufCachePath, 39143 forceCache: options.tufForceCache, 39144 retry: options.retry ?? config.DEFAULT_RETRY, 39145 timeout: options.timeout ?? config.DEFAULT_TIMEOUT, 39146 }); 39147 const keyFinder = options.keySelector 39148 ? config.createKeyFinder(options.keySelector) 39149 : undefined; 39150 const trustMaterial = (0, verify_1.toTrustMaterial)(trustedRoot, keyFinder); 39151 const verifierOptions = { 39152 ctlogThreshold: options.ctLogThreshold, 39153 tlogThreshold: options.tlogThreshold, 39154 }; 39155 const verifier = new verify_1.Verifier(trustMaterial, verifierOptions); 39156 const policy = config.createVerificationPolicy(options); 39157 return { 39158 verify: (bundle, payload) => { 39159 const deserializedBundle = (0, bundle_1.bundleFromJSON)(bundle); 39160 const signedEntity = (0, verify_1.toSignedEntity)(deserializedBundle, payload); 39161 verifier.verify(signedEntity, policy); 39162 return; 39163 }, 39164 }; 39165 } 39166 exports.createVerifier = createVerifier; 39167 39168 39169 /***/ }), 39170 39171 /***/ 71062: 39172 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 39173 39174 "use strict"; 39175 39176 Object.defineProperty(exports, "__esModule", ({ value: true })); 39177 const utils_1 = __nccwpck_require__(98132); 39178 // The default Buffer size if one is not provided. 39179 const DEFAULT_SMARTBUFFER_SIZE = 4096; 39180 // The default string encoding to use for reading/writing strings. 39181 const DEFAULT_SMARTBUFFER_ENCODING = 'utf8'; 39182 class SmartBuffer { 39183 /** 39184 * Creates a new SmartBuffer instance. 39185 * 39186 * @param options { SmartBufferOptions } The SmartBufferOptions to apply to this instance. 39187 */ 39188 constructor(options) { 39189 this.length = 0; 39190 this._encoding = DEFAULT_SMARTBUFFER_ENCODING; 39191 this._writeOffset = 0; 39192 this._readOffset = 0; 39193 if (SmartBuffer.isSmartBufferOptions(options)) { 39194 // Checks for encoding 39195 if (options.encoding) { 39196 utils_1.checkEncoding(options.encoding); 39197 this._encoding = options.encoding; 39198 } 39199 // Checks for initial size length 39200 if (options.size) { 39201 if (utils_1.isFiniteInteger(options.size) && options.size > 0) { 39202 this._buff = Buffer.allocUnsafe(options.size); 39203 } 39204 else { 39205 throw new Error(utils_1.ERRORS.INVALID_SMARTBUFFER_SIZE); 39206 } 39207 // Check for initial Buffer 39208 } 39209 else if (options.buff) { 39210 if (Buffer.isBuffer(options.buff)) { 39211 this._buff = options.buff; 39212 this.length = options.buff.length; 39213 } 39214 else { 39215 throw new Error(utils_1.ERRORS.INVALID_SMARTBUFFER_BUFFER); 39216 } 39217 } 39218 else { 39219 this._buff = Buffer.allocUnsafe(DEFAULT_SMARTBUFFER_SIZE); 39220 } 39221 } 39222 else { 39223 // If something was passed but it's not a SmartBufferOptions object 39224 if (typeof options !== 'undefined') { 39225 throw new Error(utils_1.ERRORS.INVALID_SMARTBUFFER_OBJECT); 39226 } 39227 // Otherwise default to sane options 39228 this._buff = Buffer.allocUnsafe(DEFAULT_SMARTBUFFER_SIZE); 39229 } 39230 } 39231 /** 39232 * Creates a new SmartBuffer instance with the provided internal Buffer size and optional encoding. 39233 * 39234 * @param size { Number } The size of the internal Buffer. 39235 * @param encoding { String } The BufferEncoding to use for strings. 39236 * 39237 * @return { SmartBuffer } 39238 */ 39239 static fromSize(size, encoding) { 39240 return new this({ 39241 size: size, 39242 encoding: encoding 39243 }); 39244 } 39245 /** 39246 * Creates a new SmartBuffer instance with the provided Buffer and optional encoding. 39247 * 39248 * @param buffer { Buffer } The Buffer to use as the internal Buffer value. 39249 * @param encoding { String } The BufferEncoding to use for strings. 39250 * 39251 * @return { SmartBuffer } 39252 */ 39253 static fromBuffer(buff, encoding) { 39254 return new this({ 39255 buff: buff, 39256 encoding: encoding 39257 }); 39258 } 39259 /** 39260 * Creates a new SmartBuffer instance with the provided SmartBufferOptions options. 39261 * 39262 * @param options { SmartBufferOptions } The options to use when creating the SmartBuffer instance. 39263 */ 39264 static fromOptions(options) { 39265 return new this(options); 39266 } 39267 /** 39268 * Type checking function that determines if an object is a SmartBufferOptions object. 39269 */ 39270 static isSmartBufferOptions(options) { 39271 const castOptions = options; 39272 return (castOptions && 39273 (castOptions.encoding !== undefined || castOptions.size !== undefined || castOptions.buff !== undefined)); 39274 } 39275 // Signed integers 39276 /** 39277 * Reads an Int8 value from the current read position or an optionally provided offset. 39278 * 39279 * @param offset { Number } The offset to read data from (optional) 39280 * @return { Number } 39281 */ 39282 readInt8(offset) { 39283 return this._readNumberValue(Buffer.prototype.readInt8, 1, offset); 39284 } 39285 /** 39286 * Reads an Int16BE value from the current read position or an optionally provided offset. 39287 * 39288 * @param offset { Number } The offset to read data from (optional) 39289 * @return { Number } 39290 */ 39291 readInt16BE(offset) { 39292 return this._readNumberValue(Buffer.prototype.readInt16BE, 2, offset); 39293 } 39294 /** 39295 * Reads an Int16LE value from the current read position or an optionally provided offset. 39296 * 39297 * @param offset { Number } The offset to read data from (optional) 39298 * @return { Number } 39299 */ 39300 readInt16LE(offset) { 39301 return this._readNumberValue(Buffer.prototype.readInt16LE, 2, offset); 39302 } 39303 /** 39304 * Reads an Int32BE value from the current read position or an optionally provided offset. 39305 * 39306 * @param offset { Number } The offset to read data from (optional) 39307 * @return { Number } 39308 */ 39309 readInt32BE(offset) { 39310 return this._readNumberValue(Buffer.prototype.readInt32BE, 4, offset); 39311 } 39312 /** 39313 * Reads an Int32LE value from the current read position or an optionally provided offset. 39314 * 39315 * @param offset { Number } The offset to read data from (optional) 39316 * @return { Number } 39317 */ 39318 readInt32LE(offset) { 39319 return this._readNumberValue(Buffer.prototype.readInt32LE, 4, offset); 39320 } 39321 /** 39322 * Reads a BigInt64BE value from the current read position or an optionally provided offset. 39323 * 39324 * @param offset { Number } The offset to read data from (optional) 39325 * @return { BigInt } 39326 */ 39327 readBigInt64BE(offset) { 39328 utils_1.bigIntAndBufferInt64Check('readBigInt64BE'); 39329 return this._readNumberValue(Buffer.prototype.readBigInt64BE, 8, offset); 39330 } 39331 /** 39332 * Reads a BigInt64LE value from the current read position or an optionally provided offset. 39333 * 39334 * @param offset { Number } The offset to read data from (optional) 39335 * @return { BigInt } 39336 */ 39337 readBigInt64LE(offset) { 39338 utils_1.bigIntAndBufferInt64Check('readBigInt64LE'); 39339 return this._readNumberValue(Buffer.prototype.readBigInt64LE, 8, offset); 39340 } 39341 /** 39342 * Writes an Int8 value to the current write position (or at optional offset). 39343 * 39344 * @param value { Number } The value to write. 39345 * @param offset { Number } The offset to write the value at. 39346 * 39347 * @return this 39348 */ 39349 writeInt8(value, offset) { 39350 this._writeNumberValue(Buffer.prototype.writeInt8, 1, value, offset); 39351 return this; 39352 } 39353 /** 39354 * Inserts an Int8 value at the given offset value. 39355 * 39356 * @param value { Number } The value to insert. 39357 * @param offset { Number } The offset to insert the value at. 39358 * 39359 * @return this 39360 */ 39361 insertInt8(value, offset) { 39362 return this._insertNumberValue(Buffer.prototype.writeInt8, 1, value, offset); 39363 } 39364 /** 39365 * Writes an Int16BE value to the current write position (or at optional offset). 39366 * 39367 * @param value { Number } The value to write. 39368 * @param offset { Number } The offset to write the value at. 39369 * 39370 * @return this 39371 */ 39372 writeInt16BE(value, offset) { 39373 return this._writeNumberValue(Buffer.prototype.writeInt16BE, 2, value, offset); 39374 } 39375 /** 39376 * Inserts an Int16BE value at the given offset value. 39377 * 39378 * @param value { Number } The value to insert. 39379 * @param offset { Number } The offset to insert the value at. 39380 * 39381 * @return this 39382 */ 39383 insertInt16BE(value, offset) { 39384 return this._insertNumberValue(Buffer.prototype.writeInt16BE, 2, value, offset); 39385 } 39386 /** 39387 * Writes an Int16LE value to the current write position (or at optional offset). 39388 * 39389 * @param value { Number } The value to write. 39390 * @param offset { Number } The offset to write the value at. 39391 * 39392 * @return this 39393 */ 39394 writeInt16LE(value, offset) { 39395 return this._writeNumberValue(Buffer.prototype.writeInt16LE, 2, value, offset); 39396 } 39397 /** 39398 * Inserts an Int16LE value at the given offset value. 39399 * 39400 * @param value { Number } The value to insert. 39401 * @param offset { Number } The offset to insert the value at. 39402 * 39403 * @return this 39404 */ 39405 insertInt16LE(value, offset) { 39406 return this._insertNumberValue(Buffer.prototype.writeInt16LE, 2, value, offset); 39407 } 39408 /** 39409 * Writes an Int32BE value to the current write position (or at optional offset). 39410 * 39411 * @param value { Number } The value to write. 39412 * @param offset { Number } The offset to write the value at. 39413 * 39414 * @return this 39415 */ 39416 writeInt32BE(value, offset) { 39417 return this._writeNumberValue(Buffer.prototype.writeInt32BE, 4, value, offset); 39418 } 39419 /** 39420 * Inserts an Int32BE value at the given offset value. 39421 * 39422 * @param value { Number } The value to insert. 39423 * @param offset { Number } The offset to insert the value at. 39424 * 39425 * @return this 39426 */ 39427 insertInt32BE(value, offset) { 39428 return this._insertNumberValue(Buffer.prototype.writeInt32BE, 4, value, offset); 39429 } 39430 /** 39431 * Writes an Int32LE value to the current write position (or at optional offset). 39432 * 39433 * @param value { Number } The value to write. 39434 * @param offset { Number } The offset to write the value at. 39435 * 39436 * @return this 39437 */ 39438 writeInt32LE(value, offset) { 39439 return this._writeNumberValue(Buffer.prototype.writeInt32LE, 4, value, offset); 39440 } 39441 /** 39442 * Inserts an Int32LE value at the given offset value. 39443 * 39444 * @param value { Number } The value to insert. 39445 * @param offset { Number } The offset to insert the value at. 39446 * 39447 * @return this 39448 */ 39449 insertInt32LE(value, offset) { 39450 return this._insertNumberValue(Buffer.prototype.writeInt32LE, 4, value, offset); 39451 } 39452 /** 39453 * Writes a BigInt64BE value to the current write position (or at optional offset). 39454 * 39455 * @param value { BigInt } The value to write. 39456 * @param offset { Number } The offset to write the value at. 39457 * 39458 * @return this 39459 */ 39460 writeBigInt64BE(value, offset) { 39461 utils_1.bigIntAndBufferInt64Check('writeBigInt64BE'); 39462 return this._writeNumberValue(Buffer.prototype.writeBigInt64BE, 8, value, offset); 39463 } 39464 /** 39465 * Inserts a BigInt64BE value at the given offset value. 39466 * 39467 * @param value { BigInt } The value to insert. 39468 * @param offset { Number } The offset to insert the value at. 39469 * 39470 * @return this 39471 */ 39472 insertBigInt64BE(value, offset) { 39473 utils_1.bigIntAndBufferInt64Check('writeBigInt64BE'); 39474 return this._insertNumberValue(Buffer.prototype.writeBigInt64BE, 8, value, offset); 39475 } 39476 /** 39477 * Writes a BigInt64LE value to the current write position (or at optional offset). 39478 * 39479 * @param value { BigInt } The value to write. 39480 * @param offset { Number } The offset to write the value at. 39481 * 39482 * @return this 39483 */ 39484 writeBigInt64LE(value, offset) { 39485 utils_1.bigIntAndBufferInt64Check('writeBigInt64LE'); 39486 return this._writeNumberValue(Buffer.prototype.writeBigInt64LE, 8, value, offset); 39487 } 39488 /** 39489 * Inserts a Int64LE value at the given offset value. 39490 * 39491 * @param value { BigInt } The value to insert. 39492 * @param offset { Number } The offset to insert the value at. 39493 * 39494 * @return this 39495 */ 39496 insertBigInt64LE(value, offset) { 39497 utils_1.bigIntAndBufferInt64Check('writeBigInt64LE'); 39498 return this._insertNumberValue(Buffer.prototype.writeBigInt64LE, 8, value, offset); 39499 } 39500 // Unsigned Integers 39501 /** 39502 * Reads an UInt8 value from the current read position or an optionally provided offset. 39503 * 39504 * @param offset { Number } The offset to read data from (optional) 39505 * @return { Number } 39506 */ 39507 readUInt8(offset) { 39508 return this._readNumberValue(Buffer.prototype.readUInt8, 1, offset); 39509 } 39510 /** 39511 * Reads an UInt16BE value from the current read position or an optionally provided offset. 39512 * 39513 * @param offset { Number } The offset to read data from (optional) 39514 * @return { Number } 39515 */ 39516 readUInt16BE(offset) { 39517 return this._readNumberValue(Buffer.prototype.readUInt16BE, 2, offset); 39518 } 39519 /** 39520 * Reads an UInt16LE value from the current read position or an optionally provided offset. 39521 * 39522 * @param offset { Number } The offset to read data from (optional) 39523 * @return { Number } 39524 */ 39525 readUInt16LE(offset) { 39526 return this._readNumberValue(Buffer.prototype.readUInt16LE, 2, offset); 39527 } 39528 /** 39529 * Reads an UInt32BE value from the current read position or an optionally provided offset. 39530 * 39531 * @param offset { Number } The offset to read data from (optional) 39532 * @return { Number } 39533 */ 39534 readUInt32BE(offset) { 39535 return this._readNumberValue(Buffer.prototype.readUInt32BE, 4, offset); 39536 } 39537 /** 39538 * Reads an UInt32LE value from the current read position or an optionally provided offset. 39539 * 39540 * @param offset { Number } The offset to read data from (optional) 39541 * @return { Number } 39542 */ 39543 readUInt32LE(offset) { 39544 return this._readNumberValue(Buffer.prototype.readUInt32LE, 4, offset); 39545 } 39546 /** 39547 * Reads a BigUInt64BE value from the current read position or an optionally provided offset. 39548 * 39549 * @param offset { Number } The offset to read data from (optional) 39550 * @return { BigInt } 39551 */ 39552 readBigUInt64BE(offset) { 39553 utils_1.bigIntAndBufferInt64Check('readBigUInt64BE'); 39554 return this._readNumberValue(Buffer.prototype.readBigUInt64BE, 8, offset); 39555 } 39556 /** 39557 * Reads a BigUInt64LE value from the current read position or an optionally provided offset. 39558 * 39559 * @param offset { Number } The offset to read data from (optional) 39560 * @return { BigInt } 39561 */ 39562 readBigUInt64LE(offset) { 39563 utils_1.bigIntAndBufferInt64Check('readBigUInt64LE'); 39564 return this._readNumberValue(Buffer.prototype.readBigUInt64LE, 8, offset); 39565 } 39566 /** 39567 * Writes an UInt8 value to the current write position (or at optional offset). 39568 * 39569 * @param value { Number } The value to write. 39570 * @param offset { Number } The offset to write the value at. 39571 * 39572 * @return this 39573 */ 39574 writeUInt8(value, offset) { 39575 return this._writeNumberValue(Buffer.prototype.writeUInt8, 1, value, offset); 39576 } 39577 /** 39578 * Inserts an UInt8 value at the given offset value. 39579 * 39580 * @param value { Number } The value to insert. 39581 * @param offset { Number } The offset to insert the value at. 39582 * 39583 * @return this 39584 */ 39585 insertUInt8(value, offset) { 39586 return this._insertNumberValue(Buffer.prototype.writeUInt8, 1, value, offset); 39587 } 39588 /** 39589 * Writes an UInt16BE value to the current write position (or at optional offset). 39590 * 39591 * @param value { Number } The value to write. 39592 * @param offset { Number } The offset to write the value at. 39593 * 39594 * @return this 39595 */ 39596 writeUInt16BE(value, offset) { 39597 return this._writeNumberValue(Buffer.prototype.writeUInt16BE, 2, value, offset); 39598 } 39599 /** 39600 * Inserts an UInt16BE value at the given offset value. 39601 * 39602 * @param value { Number } The value to insert. 39603 * @param offset { Number } The offset to insert the value at. 39604 * 39605 * @return this 39606 */ 39607 insertUInt16BE(value, offset) { 39608 return this._insertNumberValue(Buffer.prototype.writeUInt16BE, 2, value, offset); 39609 } 39610 /** 39611 * Writes an UInt16LE value to the current write position (or at optional offset). 39612 * 39613 * @param value { Number } The value to write. 39614 * @param offset { Number } The offset to write the value at. 39615 * 39616 * @return this 39617 */ 39618 writeUInt16LE(value, offset) { 39619 return this._writeNumberValue(Buffer.prototype.writeUInt16LE, 2, value, offset); 39620 } 39621 /** 39622 * Inserts an UInt16LE value at the given offset value. 39623 * 39624 * @param value { Number } The value to insert. 39625 * @param offset { Number } The offset to insert the value at. 39626 * 39627 * @return this 39628 */ 39629 insertUInt16LE(value, offset) { 39630 return this._insertNumberValue(Buffer.prototype.writeUInt16LE, 2, value, offset); 39631 } 39632 /** 39633 * Writes an UInt32BE value to the current write position (or at optional offset). 39634 * 39635 * @param value { Number } The value to write. 39636 * @param offset { Number } The offset to write the value at. 39637 * 39638 * @return this 39639 */ 39640 writeUInt32BE(value, offset) { 39641 return this._writeNumberValue(Buffer.prototype.writeUInt32BE, 4, value, offset); 39642 } 39643 /** 39644 * Inserts an UInt32BE value at the given offset value. 39645 * 39646 * @param value { Number } The value to insert. 39647 * @param offset { Number } The offset to insert the value at. 39648 * 39649 * @return this 39650 */ 39651 insertUInt32BE(value, offset) { 39652 return this._insertNumberValue(Buffer.prototype.writeUInt32BE, 4, value, offset); 39653 } 39654 /** 39655 * Writes an UInt32LE value to the current write position (or at optional offset). 39656 * 39657 * @param value { Number } The value to write. 39658 * @param offset { Number } The offset to write the value at. 39659 * 39660 * @return this 39661 */ 39662 writeUInt32LE(value, offset) { 39663 return this._writeNumberValue(Buffer.prototype.writeUInt32LE, 4, value, offset); 39664 } 39665 /** 39666 * Inserts an UInt32LE value at the given offset value. 39667 * 39668 * @param value { Number } The value to insert. 39669 * @param offset { Number } The offset to insert the value at. 39670 * 39671 * @return this 39672 */ 39673 insertUInt32LE(value, offset) { 39674 return this._insertNumberValue(Buffer.prototype.writeUInt32LE, 4, value, offset); 39675 } 39676 /** 39677 * Writes a BigUInt64BE value to the current write position (or at optional offset). 39678 * 39679 * @param value { Number } The value to write. 39680 * @param offset { Number } The offset to write the value at. 39681 * 39682 * @return this 39683 */ 39684 writeBigUInt64BE(value, offset) { 39685 utils_1.bigIntAndBufferInt64Check('writeBigUInt64BE'); 39686 return this._writeNumberValue(Buffer.prototype.writeBigUInt64BE, 8, value, offset); 39687 } 39688 /** 39689 * Inserts a BigUInt64BE value at the given offset value. 39690 * 39691 * @param value { Number } The value to insert. 39692 * @param offset { Number } The offset to insert the value at. 39693 * 39694 * @return this 39695 */ 39696 insertBigUInt64BE(value, offset) { 39697 utils_1.bigIntAndBufferInt64Check('writeBigUInt64BE'); 39698 return this._insertNumberValue(Buffer.prototype.writeBigUInt64BE, 8, value, offset); 39699 } 39700 /** 39701 * Writes a BigUInt64LE value to the current write position (or at optional offset). 39702 * 39703 * @param value { Number } The value to write. 39704 * @param offset { Number } The offset to write the value at. 39705 * 39706 * @return this 39707 */ 39708 writeBigUInt64LE(value, offset) { 39709 utils_1.bigIntAndBufferInt64Check('writeBigUInt64LE'); 39710 return this._writeNumberValue(Buffer.prototype.writeBigUInt64LE, 8, value, offset); 39711 } 39712 /** 39713 * Inserts a BigUInt64LE value at the given offset value. 39714 * 39715 * @param value { Number } The value to insert. 39716 * @param offset { Number } The offset to insert the value at. 39717 * 39718 * @return this 39719 */ 39720 insertBigUInt64LE(value, offset) { 39721 utils_1.bigIntAndBufferInt64Check('writeBigUInt64LE'); 39722 return this._insertNumberValue(Buffer.prototype.writeBigUInt64LE, 8, value, offset); 39723 } 39724 // Floating Point 39725 /** 39726 * Reads an FloatBE value from the current read position or an optionally provided offset. 39727 * 39728 * @param offset { Number } The offset to read data from (optional) 39729 * @return { Number } 39730 */ 39731 readFloatBE(offset) { 39732 return this._readNumberValue(Buffer.prototype.readFloatBE, 4, offset); 39733 } 39734 /** 39735 * Reads an FloatLE value from the current read position or an optionally provided offset. 39736 * 39737 * @param offset { Number } The offset to read data from (optional) 39738 * @return { Number } 39739 */ 39740 readFloatLE(offset) { 39741 return this._readNumberValue(Buffer.prototype.readFloatLE, 4, offset); 39742 } 39743 /** 39744 * Writes a FloatBE value to the current write position (or at optional offset). 39745 * 39746 * @param value { Number } The value to write. 39747 * @param offset { Number } The offset to write the value at. 39748 * 39749 * @return this 39750 */ 39751 writeFloatBE(value, offset) { 39752 return this._writeNumberValue(Buffer.prototype.writeFloatBE, 4, value, offset); 39753 } 39754 /** 39755 * Inserts a FloatBE value at the given offset value. 39756 * 39757 * @param value { Number } The value to insert. 39758 * @param offset { Number } The offset to insert the value at. 39759 * 39760 * @return this 39761 */ 39762 insertFloatBE(value, offset) { 39763 return this._insertNumberValue(Buffer.prototype.writeFloatBE, 4, value, offset); 39764 } 39765 /** 39766 * Writes a FloatLE value to the current write position (or at optional offset). 39767 * 39768 * @param value { Number } The value to write. 39769 * @param offset { Number } The offset to write the value at. 39770 * 39771 * @return this 39772 */ 39773 writeFloatLE(value, offset) { 39774 return this._writeNumberValue(Buffer.prototype.writeFloatLE, 4, value, offset); 39775 } 39776 /** 39777 * Inserts a FloatLE value at the given offset value. 39778 * 39779 * @param value { Number } The value to insert. 39780 * @param offset { Number } The offset to insert the value at. 39781 * 39782 * @return this 39783 */ 39784 insertFloatLE(value, offset) { 39785 return this._insertNumberValue(Buffer.prototype.writeFloatLE, 4, value, offset); 39786 } 39787 // Double Floating Point 39788 /** 39789 * Reads an DoublEBE value from the current read position or an optionally provided offset. 39790 * 39791 * @param offset { Number } The offset to read data from (optional) 39792 * @return { Number } 39793 */ 39794 readDoubleBE(offset) { 39795 return this._readNumberValue(Buffer.prototype.readDoubleBE, 8, offset); 39796 } 39797 /** 39798 * Reads an DoubleLE value from the current read position or an optionally provided offset. 39799 * 39800 * @param offset { Number } The offset to read data from (optional) 39801 * @return { Number } 39802 */ 39803 readDoubleLE(offset) { 39804 return this._readNumberValue(Buffer.prototype.readDoubleLE, 8, offset); 39805 } 39806 /** 39807 * Writes a DoubleBE value to the current write position (or at optional offset). 39808 * 39809 * @param value { Number } The value to write. 39810 * @param offset { Number } The offset to write the value at. 39811 * 39812 * @return this 39813 */ 39814 writeDoubleBE(value, offset) { 39815 return this._writeNumberValue(Buffer.prototype.writeDoubleBE, 8, value, offset); 39816 } 39817 /** 39818 * Inserts a DoubleBE value at the given offset value. 39819 * 39820 * @param value { Number } The value to insert. 39821 * @param offset { Number } The offset to insert the value at. 39822 * 39823 * @return this 39824 */ 39825 insertDoubleBE(value, offset) { 39826 return this._insertNumberValue(Buffer.prototype.writeDoubleBE, 8, value, offset); 39827 } 39828 /** 39829 * Writes a DoubleLE value to the current write position (or at optional offset). 39830 * 39831 * @param value { Number } The value to write. 39832 * @param offset { Number } The offset to write the value at. 39833 * 39834 * @return this 39835 */ 39836 writeDoubleLE(value, offset) { 39837 return this._writeNumberValue(Buffer.prototype.writeDoubleLE, 8, value, offset); 39838 } 39839 /** 39840 * Inserts a DoubleLE value at the given offset value. 39841 * 39842 * @param value { Number } The value to insert. 39843 * @param offset { Number } The offset to insert the value at. 39844 * 39845 * @return this 39846 */ 39847 insertDoubleLE(value, offset) { 39848 return this._insertNumberValue(Buffer.prototype.writeDoubleLE, 8, value, offset); 39849 } 39850 // Strings 39851 /** 39852 * Reads a String from the current read position. 39853 * 39854 * @param arg1 { Number | String } The number of bytes to read as a String, or the BufferEncoding to use for 39855 * the string (Defaults to instance level encoding). 39856 * @param encoding { String } The BufferEncoding to use for the string (Defaults to instance level encoding). 39857 * 39858 * @return { String } 39859 */ 39860 readString(arg1, encoding) { 39861 let lengthVal; 39862 // Length provided 39863 if (typeof arg1 === 'number') { 39864 utils_1.checkLengthValue(arg1); 39865 lengthVal = Math.min(arg1, this.length - this._readOffset); 39866 } 39867 else { 39868 encoding = arg1; 39869 lengthVal = this.length - this._readOffset; 39870 } 39871 // Check encoding 39872 if (typeof encoding !== 'undefined') { 39873 utils_1.checkEncoding(encoding); 39874 } 39875 const value = this._buff.slice(this._readOffset, this._readOffset + lengthVal).toString(encoding || this._encoding); 39876 this._readOffset += lengthVal; 39877 return value; 39878 } 39879 /** 39880 * Inserts a String 39881 * 39882 * @param value { String } The String value to insert. 39883 * @param offset { Number } The offset to insert the string at. 39884 * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding). 39885 * 39886 * @return this 39887 */ 39888 insertString(value, offset, encoding) { 39889 utils_1.checkOffsetValue(offset); 39890 return this._handleString(value, true, offset, encoding); 39891 } 39892 /** 39893 * Writes a String 39894 * 39895 * @param value { String } The String value to write. 39896 * @param arg2 { Number | String } The offset to write the string at, or the BufferEncoding to use. 39897 * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding). 39898 * 39899 * @return this 39900 */ 39901 writeString(value, arg2, encoding) { 39902 return this._handleString(value, false, arg2, encoding); 39903 } 39904 /** 39905 * Reads a null-terminated String from the current read position. 39906 * 39907 * @param encoding { String } The BufferEncoding to use for the string (Defaults to instance level encoding). 39908 * 39909 * @return { String } 39910 */ 39911 readStringNT(encoding) { 39912 if (typeof encoding !== 'undefined') { 39913 utils_1.checkEncoding(encoding); 39914 } 39915 // Set null character position to the end SmartBuffer instance. 39916 let nullPos = this.length; 39917 // Find next null character (if one is not found, default from above is used) 39918 for (let i = this._readOffset; i < this.length; i++) { 39919 if (this._buff[i] === 0x00) { 39920 nullPos = i; 39921 break; 39922 } 39923 } 39924 // Read string value 39925 const value = this._buff.slice(this._readOffset, nullPos); 39926 // Increment internal Buffer read offset 39927 this._readOffset = nullPos + 1; 39928 return value.toString(encoding || this._encoding); 39929 } 39930 /** 39931 * Inserts a null-terminated String. 39932 * 39933 * @param value { String } The String value to write. 39934 * @param arg2 { Number | String } The offset to write the string to, or the BufferEncoding to use. 39935 * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding). 39936 * 39937 * @return this 39938 */ 39939 insertStringNT(value, offset, encoding) { 39940 utils_1.checkOffsetValue(offset); 39941 // Write Values 39942 this.insertString(value, offset, encoding); 39943 this.insertUInt8(0x00, offset + value.length); 39944 return this; 39945 } 39946 /** 39947 * Writes a null-terminated String. 39948 * 39949 * @param value { String } The String value to write. 39950 * @param arg2 { Number | String } The offset to write the string to, or the BufferEncoding to use. 39951 * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding). 39952 * 39953 * @return this 39954 */ 39955 writeStringNT(value, arg2, encoding) { 39956 // Write Values 39957 this.writeString(value, arg2, encoding); 39958 this.writeUInt8(0x00, typeof arg2 === 'number' ? arg2 + value.length : this.writeOffset); 39959 return this; 39960 } 39961 // Buffers 39962 /** 39963 * Reads a Buffer from the internal read position. 39964 * 39965 * @param length { Number } The length of data to read as a Buffer. 39966 * 39967 * @return { Buffer } 39968 */ 39969 readBuffer(length) { 39970 if (typeof length !== 'undefined') { 39971 utils_1.checkLengthValue(length); 39972 } 39973 const lengthVal = typeof length === 'number' ? length : this.length; 39974 const endPoint = Math.min(this.length, this._readOffset + lengthVal); 39975 // Read buffer value 39976 const value = this._buff.slice(this._readOffset, endPoint); 39977 // Increment internal Buffer read offset 39978 this._readOffset = endPoint; 39979 return value; 39980 } 39981 /** 39982 * Writes a Buffer to the current write position. 39983 * 39984 * @param value { Buffer } The Buffer to write. 39985 * @param offset { Number } The offset to write the Buffer to. 39986 * 39987 * @return this 39988 */ 39989 insertBuffer(value, offset) { 39990 utils_1.checkOffsetValue(offset); 39991 return this._handleBuffer(value, true, offset); 39992 } 39993 /** 39994 * Writes a Buffer to the current write position. 39995 * 39996 * @param value { Buffer } The Buffer to write. 39997 * @param offset { Number } The offset to write the Buffer to. 39998 * 39999 * @return this 40000 */ 40001 writeBuffer(value, offset) { 40002 return this._handleBuffer(value, false, offset); 40003 } 40004 /** 40005 * Reads a null-terminated Buffer from the current read poisiton. 40006 * 40007 * @return { Buffer } 40008 */ 40009 readBufferNT() { 40010 // Set null character position to the end SmartBuffer instance. 40011 let nullPos = this.length; 40012 // Find next null character (if one is not found, default from above is used) 40013 for (let i = this._readOffset; i < this.length; i++) { 40014 if (this._buff[i] === 0x00) { 40015 nullPos = i; 40016 break; 40017 } 40018 } 40019 // Read value 40020 const value = this._buff.slice(this._readOffset, nullPos); 40021 // Increment internal Buffer read offset 40022 this._readOffset = nullPos + 1; 40023 return value; 40024 } 40025 /** 40026 * Inserts a null-terminated Buffer. 40027 * 40028 * @param value { Buffer } The Buffer to write. 40029 * @param offset { Number } The offset to write the Buffer to. 40030 * 40031 * @return this 40032 */ 40033 insertBufferNT(value, offset) { 40034 utils_1.checkOffsetValue(offset); 40035 // Write Values 40036 this.insertBuffer(value, offset); 40037 this.insertUInt8(0x00, offset + value.length); 40038 return this; 40039 } 40040 /** 40041 * Writes a null-terminated Buffer. 40042 * 40043 * @param value { Buffer } The Buffer to write. 40044 * @param offset { Number } The offset to write the Buffer to. 40045 * 40046 * @return this 40047 */ 40048 writeBufferNT(value, offset) { 40049 // Checks for valid numberic value; 40050 if (typeof offset !== 'undefined') { 40051 utils_1.checkOffsetValue(offset); 40052 } 40053 // Write Values 40054 this.writeBuffer(value, offset); 40055 this.writeUInt8(0x00, typeof offset === 'number' ? offset + value.length : this._writeOffset); 40056 return this; 40057 } 40058 /** 40059 * Clears the SmartBuffer instance to its original empty state. 40060 */ 40061 clear() { 40062 this._writeOffset = 0; 40063 this._readOffset = 0; 40064 this.length = 0; 40065 return this; 40066 } 40067 /** 40068 * Gets the remaining data left to be read from the SmartBuffer instance. 40069 * 40070 * @return { Number } 40071 */ 40072 remaining() { 40073 return this.length - this._readOffset; 40074 } 40075 /** 40076 * Gets the current read offset value of the SmartBuffer instance. 40077 * 40078 * @return { Number } 40079 */ 40080 get readOffset() { 40081 return this._readOffset; 40082 } 40083 /** 40084 * Sets the read offset value of the SmartBuffer instance. 40085 * 40086 * @param offset { Number } - The offset value to set. 40087 */ 40088 set readOffset(offset) { 40089 utils_1.checkOffsetValue(offset); 40090 // Check for bounds. 40091 utils_1.checkTargetOffset(offset, this); 40092 this._readOffset = offset; 40093 } 40094 /** 40095 * Gets the current write offset value of the SmartBuffer instance. 40096 * 40097 * @return { Number } 40098 */ 40099 get writeOffset() { 40100 return this._writeOffset; 40101 } 40102 /** 40103 * Sets the write offset value of the SmartBuffer instance. 40104 * 40105 * @param offset { Number } - The offset value to set. 40106 */ 40107 set writeOffset(offset) { 40108 utils_1.checkOffsetValue(offset); 40109 // Check for bounds. 40110 utils_1.checkTargetOffset(offset, this); 40111 this._writeOffset = offset; 40112 } 40113 /** 40114 * Gets the currently set string encoding of the SmartBuffer instance. 40115 * 40116 * @return { BufferEncoding } The string Buffer encoding currently set. 40117 */ 40118 get encoding() { 40119 return this._encoding; 40120 } 40121 /** 40122 * Sets the string encoding of the SmartBuffer instance. 40123 * 40124 * @param encoding { BufferEncoding } The string Buffer encoding to set. 40125 */ 40126 set encoding(encoding) { 40127 utils_1.checkEncoding(encoding); 40128 this._encoding = encoding; 40129 } 40130 /** 40131 * Gets the underlying internal Buffer. (This includes unmanaged data in the Buffer) 40132 * 40133 * @return { Buffer } The Buffer value. 40134 */ 40135 get internalBuffer() { 40136 return this._buff; 40137 } 40138 /** 40139 * Gets the value of the internal managed Buffer (Includes managed data only) 40140 * 40141 * @param { Buffer } 40142 */ 40143 toBuffer() { 40144 return this._buff.slice(0, this.length); 40145 } 40146 /** 40147 * Gets the String value of the internal managed Buffer 40148 * 40149 * @param encoding { String } The BufferEncoding to display the Buffer as (defaults to instance level encoding). 40150 */ 40151 toString(encoding) { 40152 const encodingVal = typeof encoding === 'string' ? encoding : this._encoding; 40153 // Check for invalid encoding. 40154 utils_1.checkEncoding(encodingVal); 40155 return this._buff.toString(encodingVal, 0, this.length); 40156 } 40157 /** 40158 * Destroys the SmartBuffer instance. 40159 */ 40160 destroy() { 40161 this.clear(); 40162 return this; 40163 } 40164 /** 40165 * Handles inserting and writing strings. 40166 * 40167 * @param value { String } The String value to insert. 40168 * @param isInsert { Boolean } True if inserting a string, false if writing. 40169 * @param arg2 { Number | String } The offset to insert the string at, or the BufferEncoding to use. 40170 * @param encoding { String } The BufferEncoding to use for writing strings (defaults to instance encoding). 40171 */ 40172 _handleString(value, isInsert, arg3, encoding) { 40173 let offsetVal = this._writeOffset; 40174 let encodingVal = this._encoding; 40175 // Check for offset 40176 if (typeof arg3 === 'number') { 40177 offsetVal = arg3; 40178 // Check for encoding 40179 } 40180 else if (typeof arg3 === 'string') { 40181 utils_1.checkEncoding(arg3); 40182 encodingVal = arg3; 40183 } 40184 // Check for encoding (third param) 40185 if (typeof encoding === 'string') { 40186 utils_1.checkEncoding(encoding); 40187 encodingVal = encoding; 40188 } 40189 // Calculate bytelength of string. 40190 const byteLength = Buffer.byteLength(value, encodingVal); 40191 // Ensure there is enough internal Buffer capacity. 40192 if (isInsert) { 40193 this.ensureInsertable(byteLength, offsetVal); 40194 } 40195 else { 40196 this._ensureWriteable(byteLength, offsetVal); 40197 } 40198 // Write value 40199 this._buff.write(value, offsetVal, byteLength, encodingVal); 40200 // Increment internal Buffer write offset; 40201 if (isInsert) { 40202 this._writeOffset += byteLength; 40203 } 40204 else { 40205 // If an offset was given, check to see if we wrote beyond the current writeOffset. 40206 if (typeof arg3 === 'number') { 40207 this._writeOffset = Math.max(this._writeOffset, offsetVal + byteLength); 40208 } 40209 else { 40210 // If no offset was given, we wrote to the end of the SmartBuffer so increment writeOffset. 40211 this._writeOffset += byteLength; 40212 } 40213 } 40214 return this; 40215 } 40216 /** 40217 * Handles writing or insert of a Buffer. 40218 * 40219 * @param value { Buffer } The Buffer to write. 40220 * @param offset { Number } The offset to write the Buffer to. 40221 */ 40222 _handleBuffer(value, isInsert, offset) { 40223 const offsetVal = typeof offset === 'number' ? offset : this._writeOffset; 40224 // Ensure there is enough internal Buffer capacity. 40225 if (isInsert) { 40226 this.ensureInsertable(value.length, offsetVal); 40227 } 40228 else { 40229 this._ensureWriteable(value.length, offsetVal); 40230 } 40231 // Write buffer value 40232 value.copy(this._buff, offsetVal); 40233 // Increment internal Buffer write offset; 40234 if (isInsert) { 40235 this._writeOffset += value.length; 40236 } 40237 else { 40238 // If an offset was given, check to see if we wrote beyond the current writeOffset. 40239 if (typeof offset === 'number') { 40240 this._writeOffset = Math.max(this._writeOffset, offsetVal + value.length); 40241 } 40242 else { 40243 // If no offset was given, we wrote to the end of the SmartBuffer so increment writeOffset. 40244 this._writeOffset += value.length; 40245 } 40246 } 40247 return this; 40248 } 40249 /** 40250 * Ensures that the internal Buffer is large enough to read data. 40251 * 40252 * @param length { Number } The length of the data that needs to be read. 40253 * @param offset { Number } The offset of the data that needs to be read. 40254 */ 40255 ensureReadable(length, offset) { 40256 // Offset value defaults to managed read offset. 40257 let offsetVal = this._readOffset; 40258 // If an offset was provided, use it. 40259 if (typeof offset !== 'undefined') { 40260 // Checks for valid numberic value; 40261 utils_1.checkOffsetValue(offset); 40262 // Overide with custom offset. 40263 offsetVal = offset; 40264 } 40265 // Checks if offset is below zero, or the offset+length offset is beyond the total length of the managed data. 40266 if (offsetVal < 0 || offsetVal + length > this.length) { 40267 throw new Error(utils_1.ERRORS.INVALID_READ_BEYOND_BOUNDS); 40268 } 40269 } 40270 /** 40271 * Ensures that the internal Buffer is large enough to insert data. 40272 * 40273 * @param dataLength { Number } The length of the data that needs to be written. 40274 * @param offset { Number } The offset of the data to be written. 40275 */ 40276 ensureInsertable(dataLength, offset) { 40277 // Checks for valid numberic value; 40278 utils_1.checkOffsetValue(offset); 40279 // Ensure there is enough internal Buffer capacity. 40280 this._ensureCapacity(this.length + dataLength); 40281 // If an offset was provided and its not the very end of the buffer, copy data into appropriate location in regards to the offset. 40282 if (offset < this.length) { 40283 this._buff.copy(this._buff, offset + dataLength, offset, this._buff.length); 40284 } 40285 // Adjust tracked smart buffer length 40286 if (offset + dataLength > this.length) { 40287 this.length = offset + dataLength; 40288 } 40289 else { 40290 this.length += dataLength; 40291 } 40292 } 40293 /** 40294 * Ensures that the internal Buffer is large enough to write data. 40295 * 40296 * @param dataLength { Number } The length of the data that needs to be written. 40297 * @param offset { Number } The offset of the data to be written (defaults to writeOffset). 40298 */ 40299 _ensureWriteable(dataLength, offset) { 40300 const offsetVal = typeof offset === 'number' ? offset : this._writeOffset; 40301 // Ensure enough capacity to write data. 40302 this._ensureCapacity(offsetVal + dataLength); 40303 // Adjust SmartBuffer length (if offset + length is larger than managed length, adjust length) 40304 if (offsetVal + dataLength > this.length) { 40305 this.length = offsetVal + dataLength; 40306 } 40307 } 40308 /** 40309 * Ensures that the internal Buffer is large enough to write at least the given amount of data. 40310 * 40311 * @param minLength { Number } The minimum length of the data needs to be written. 40312 */ 40313 _ensureCapacity(minLength) { 40314 const oldLength = this._buff.length; 40315 if (minLength > oldLength) { 40316 let data = this._buff; 40317 let newLength = (oldLength * 3) / 2 + 1; 40318 if (newLength < minLength) { 40319 newLength = minLength; 40320 } 40321 this._buff = Buffer.allocUnsafe(newLength); 40322 data.copy(this._buff, 0, 0, oldLength); 40323 } 40324 } 40325 /** 40326 * Reads a numeric number value using the provided function. 40327 * 40328 * @typeparam T { number | bigint } The type of the value to be read 40329 * 40330 * @param func { Function(offset: number) => number } The function to read data on the internal Buffer with. 40331 * @param byteSize { Number } The number of bytes read. 40332 * @param offset { Number } The offset to read from (optional). When this is not provided, the managed readOffset is used instead. 40333 * 40334 * @returns { T } the number value 40335 */ 40336 _readNumberValue(func, byteSize, offset) { 40337 this.ensureReadable(byteSize, offset); 40338 // Call Buffer.readXXXX(); 40339 const value = func.call(this._buff, typeof offset === 'number' ? offset : this._readOffset); 40340 // Adjust internal read offset if an optional read offset was not provided. 40341 if (typeof offset === 'undefined') { 40342 this._readOffset += byteSize; 40343 } 40344 return value; 40345 } 40346 /** 40347 * Inserts a numeric number value based on the given offset and value. 40348 * 40349 * @typeparam T { number | bigint } The type of the value to be written 40350 * 40351 * @param func { Function(offset: T, offset?) => number} The function to write data on the internal Buffer with. 40352 * @param byteSize { Number } The number of bytes written. 40353 * @param value { T } The number value to write. 40354 * @param offset { Number } the offset to write the number at (REQUIRED). 40355 * 40356 * @returns SmartBuffer this buffer 40357 */ 40358 _insertNumberValue(func, byteSize, value, offset) { 40359 // Check for invalid offset values. 40360 utils_1.checkOffsetValue(offset); 40361 // Ensure there is enough internal Buffer capacity. (raw offset is passed) 40362 this.ensureInsertable(byteSize, offset); 40363 // Call buffer.writeXXXX(); 40364 func.call(this._buff, value, offset); 40365 // Adjusts internally managed write offset. 40366 this._writeOffset += byteSize; 40367 return this; 40368 } 40369 /** 40370 * Writes a numeric number value based on the given offset and value. 40371 * 40372 * @typeparam T { number | bigint } The type of the value to be written 40373 * 40374 * @param func { Function(offset: T, offset?) => number} The function to write data on the internal Buffer with. 40375 * @param byteSize { Number } The number of bytes written. 40376 * @param value { T } The number value to write. 40377 * @param offset { Number } the offset to write the number at (REQUIRED). 40378 * 40379 * @returns SmartBuffer this buffer 40380 */ 40381 _writeNumberValue(func, byteSize, value, offset) { 40382 // If an offset was provided, validate it. 40383 if (typeof offset === 'number') { 40384 // Check if we're writing beyond the bounds of the managed data. 40385 if (offset < 0) { 40386 throw new Error(utils_1.ERRORS.INVALID_WRITE_BEYOND_BOUNDS); 40387 } 40388 utils_1.checkOffsetValue(offset); 40389 } 40390 // Default to writeOffset if no offset value was given. 40391 const offsetVal = typeof offset === 'number' ? offset : this._writeOffset; 40392 // Ensure there is enough internal Buffer capacity. (raw offset is passed) 40393 this._ensureWriteable(byteSize, offsetVal); 40394 func.call(this._buff, value, offsetVal); 40395 // If an offset was given, check to see if we wrote beyond the current writeOffset. 40396 if (typeof offset === 'number') { 40397 this._writeOffset = Math.max(this._writeOffset, offsetVal + byteSize); 40398 } 40399 else { 40400 // If no numeric offset was given, we wrote to the end of the SmartBuffer so increment writeOffset. 40401 this._writeOffset += byteSize; 40402 } 40403 return this; 40404 } 40405 } 40406 exports.SmartBuffer = SmartBuffer; 40407 //# sourceMappingURL=smartbuffer.js.map 40408 40409 /***/ }), 40410 40411 /***/ 98132: 40412 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 40413 40414 "use strict"; 40415 40416 Object.defineProperty(exports, "__esModule", ({ value: true })); 40417 const buffer_1 = __nccwpck_require__(14300); 40418 /** 40419 * Error strings 40420 */ 40421 const ERRORS = { 40422 INVALID_ENCODING: 'Invalid encoding provided. Please specify a valid encoding the internal Node.js Buffer supports.', 40423 INVALID_SMARTBUFFER_SIZE: 'Invalid size provided. Size must be a valid integer greater than zero.', 40424 INVALID_SMARTBUFFER_BUFFER: 'Invalid Buffer provided in SmartBufferOptions.', 40425 INVALID_SMARTBUFFER_OBJECT: 'Invalid SmartBufferOptions object supplied to SmartBuffer constructor or factory methods.', 40426 INVALID_OFFSET: 'An invalid offset value was provided.', 40427 INVALID_OFFSET_NON_NUMBER: 'An invalid offset value was provided. A numeric value is required.', 40428 INVALID_LENGTH: 'An invalid length value was provided.', 40429 INVALID_LENGTH_NON_NUMBER: 'An invalid length value was provived. A numeric value is required.', 40430 INVALID_TARGET_OFFSET: 'Target offset is beyond the bounds of the internal SmartBuffer data.', 40431 INVALID_TARGET_LENGTH: 'Specified length value moves cursor beyong the bounds of the internal SmartBuffer data.', 40432 INVALID_READ_BEYOND_BOUNDS: 'Attempted to read beyond the bounds of the managed data.', 40433 INVALID_WRITE_BEYOND_BOUNDS: 'Attempted to write beyond the bounds of the managed data.' 40434 }; 40435 exports.ERRORS = ERRORS; 40436 /** 40437 * Checks if a given encoding is a valid Buffer encoding. (Throws an exception if check fails) 40438 * 40439 * @param { String } encoding The encoding string to check. 40440 */ 40441 function checkEncoding(encoding) { 40442 if (!buffer_1.Buffer.isEncoding(encoding)) { 40443 throw new Error(ERRORS.INVALID_ENCODING); 40444 } 40445 } 40446 exports.checkEncoding = checkEncoding; 40447 /** 40448 * Checks if a given number is a finite integer. (Throws an exception if check fails) 40449 * 40450 * @param { Number } value The number value to check. 40451 */ 40452 function isFiniteInteger(value) { 40453 return typeof value === 'number' && isFinite(value) && isInteger(value); 40454 } 40455 exports.isFiniteInteger = isFiniteInteger; 40456 /** 40457 * Checks if an offset/length value is valid. (Throws an exception if check fails) 40458 * 40459 * @param value The value to check. 40460 * @param offset True if checking an offset, false if checking a length. 40461 */ 40462 function checkOffsetOrLengthValue(value, offset) { 40463 if (typeof value === 'number') { 40464 // Check for non finite/non integers 40465 if (!isFiniteInteger(value) || value < 0) { 40466 throw new Error(offset ? ERRORS.INVALID_OFFSET : ERRORS.INVALID_LENGTH); 40467 } 40468 } 40469 else { 40470 throw new Error(offset ? ERRORS.INVALID_OFFSET_NON_NUMBER : ERRORS.INVALID_LENGTH_NON_NUMBER); 40471 } 40472 } 40473 /** 40474 * Checks if a length value is valid. (Throws an exception if check fails) 40475 * 40476 * @param { Number } length The value to check. 40477 */ 40478 function checkLengthValue(length) { 40479 checkOffsetOrLengthValue(length, false); 40480 } 40481 exports.checkLengthValue = checkLengthValue; 40482 /** 40483 * Checks if a offset value is valid. (Throws an exception if check fails) 40484 * 40485 * @param { Number } offset The value to check. 40486 */ 40487 function checkOffsetValue(offset) { 40488 checkOffsetOrLengthValue(offset, true); 40489 } 40490 exports.checkOffsetValue = checkOffsetValue; 40491 /** 40492 * Checks if a target offset value is out of bounds. (Throws an exception if check fails) 40493 * 40494 * @param { Number } offset The offset value to check. 40495 * @param { SmartBuffer } buff The SmartBuffer instance to check against. 40496 */ 40497 function checkTargetOffset(offset, buff) { 40498 if (offset < 0 || offset > buff.length) { 40499 throw new Error(ERRORS.INVALID_TARGET_OFFSET); 40500 } 40501 } 40502 exports.checkTargetOffset = checkTargetOffset; 40503 /** 40504 * Determines whether a given number is a integer. 40505 * @param value The number to check. 40506 */ 40507 function isInteger(value) { 40508 return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; 40509 } 40510 /** 40511 * Throws if Node.js version is too low to support bigint 40512 */ 40513 function bigIntAndBufferInt64Check(bufferMethod) { 40514 if (typeof BigInt === 'undefined') { 40515 throw new Error('Platform does not support JS BigInt type.'); 40516 } 40517 if (typeof buffer_1.Buffer.prototype[bufferMethod] === 'undefined') { 40518 throw new Error(`Platform does not support Buffer.prototype.${bufferMethod}.`); 40519 } 40520 } 40521 exports.bigIntAndBufferInt64Check = bigIntAndBufferInt64Check; 40522 //# sourceMappingURL=utils.js.map 40523 40524 /***/ }), 40525 40526 /***/ 25038: 40527 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 40528 40529 "use strict"; 40530 40531 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 40532 if (k2 === undefined) k2 = k; 40533 var desc = Object.getOwnPropertyDescriptor(m, k); 40534 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 40535 desc = { enumerable: true, get: function() { return m[k]; } }; 40536 } 40537 Object.defineProperty(o, k2, desc); 40538 }) : (function(o, m, k, k2) { 40539 if (k2 === undefined) k2 = k; 40540 o[k2] = m[k]; 40541 })); 40542 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 40543 Object.defineProperty(o, "default", { enumerable: true, value: v }); 40544 }) : function(o, v) { 40545 o["default"] = v; 40546 }); 40547 var __importStar = (this && this.__importStar) || function (mod) { 40548 if (mod && mod.__esModule) return mod; 40549 var result = {}; 40550 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 40551 __setModuleDefault(result, mod); 40552 return result; 40553 }; 40554 var __importDefault = (this && this.__importDefault) || function (mod) { 40555 return (mod && mod.__esModule) ? mod : { "default": mod }; 40556 }; 40557 Object.defineProperty(exports, "__esModule", ({ value: true })); 40558 exports.SocksProxyAgent = void 0; 40559 const socks_1 = __nccwpck_require__(54754); 40560 const agent_base_1 = __nccwpck_require__(70694); 40561 const debug_1 = __importDefault(__nccwpck_require__(38237)); 40562 const dns = __importStar(__nccwpck_require__(9523)); 40563 const net = __importStar(__nccwpck_require__(41808)); 40564 const tls = __importStar(__nccwpck_require__(24404)); 40565 const url_1 = __nccwpck_require__(57310); 40566 const debug = (0, debug_1.default)('socks-proxy-agent'); 40567 function parseSocksURL(url) { 40568 let lookup = false; 40569 let type = 5; 40570 const host = url.hostname; 40571 // From RFC 1928, Section 3: https://tools.ietf.org/html/rfc1928#section-3 40572 // "The SOCKS service is conventionally located on TCP port 1080" 40573 const port = parseInt(url.port, 10) || 1080; 40574 // figure out if we want socks v4 or v5, based on the "protocol" used. 40575 // Defaults to 5. 40576 switch (url.protocol.replace(':', '')) { 40577 case 'socks4': 40578 lookup = true; 40579 type = 4; 40580 break; 40581 // pass through 40582 case 'socks4a': 40583 type = 4; 40584 break; 40585 case 'socks5': 40586 lookup = true; 40587 type = 5; 40588 break; 40589 // pass through 40590 case 'socks': // no version specified, default to 5h 40591 type = 5; 40592 break; 40593 case 'socks5h': 40594 type = 5; 40595 break; 40596 default: 40597 throw new TypeError(`A "socks" protocol must be specified! Got: ${String(url.protocol)}`); 40598 } 40599 const proxy = { 40600 host, 40601 port, 40602 type, 40603 }; 40604 if (url.username) { 40605 Object.defineProperty(proxy, 'userId', { 40606 value: decodeURIComponent(url.username), 40607 enumerable: false, 40608 }); 40609 } 40610 if (url.password != null) { 40611 Object.defineProperty(proxy, 'password', { 40612 value: decodeURIComponent(url.password), 40613 enumerable: false, 40614 }); 40615 } 40616 return { lookup, proxy }; 40617 } 40618 class SocksProxyAgent extends agent_base_1.Agent { 40619 constructor(uri, opts) { 40620 super(opts); 40621 const url = typeof uri === 'string' ? new url_1.URL(uri) : uri; 40622 const { proxy, lookup } = parseSocksURL(url); 40623 this.shouldLookup = lookup; 40624 this.proxy = proxy; 40625 this.timeout = opts?.timeout ?? null; 40626 } 40627 /** 40628 * Initiates a SOCKS connection to the specified SOCKS proxy server, 40629 * which in turn connects to the specified remote host and port. 40630 */ 40631 async connect(req, opts) { 40632 const { shouldLookup, proxy, timeout } = this; 40633 if (!opts.host) { 40634 throw new Error('No `host` defined!'); 40635 } 40636 let { host } = opts; 40637 const { port, lookup: lookupFn = dns.lookup } = opts; 40638 if (shouldLookup) { 40639 // Client-side DNS resolution for "4" and "5" socks proxy versions. 40640 host = await new Promise((resolve, reject) => { 40641 // Use the request's custom lookup, if one was configured: 40642 lookupFn(host, {}, (err, res) => { 40643 if (err) { 40644 reject(err); 40645 } 40646 else { 40647 resolve(res); 40648 } 40649 }); 40650 }); 40651 } 40652 const socksOpts = { 40653 proxy, 40654 destination: { 40655 host, 40656 port: typeof port === 'number' ? port : parseInt(port, 10), 40657 }, 40658 command: 'connect', 40659 timeout: timeout ?? undefined, 40660 }; 40661 const cleanup = (tlsSocket) => { 40662 req.destroy(); 40663 socket.destroy(); 40664 if (tlsSocket) 40665 tlsSocket.destroy(); 40666 }; 40667 debug('Creating socks proxy connection: %o', socksOpts); 40668 const { socket } = await socks_1.SocksClient.createConnection(socksOpts); 40669 debug('Successfully created socks proxy connection'); 40670 if (timeout !== null) { 40671 socket.setTimeout(timeout); 40672 socket.on('timeout', () => cleanup()); 40673 } 40674 if (opts.secureEndpoint) { 40675 // The proxy is connecting to a TLS server, so upgrade 40676 // this socket connection to a TLS connection. 40677 debug('Upgrading socket connection to TLS'); 40678 const servername = opts.servername || opts.host; 40679 const tlsSocket = tls.connect({ 40680 ...omit(opts, 'host', 'path', 'port'), 40681 socket, 40682 servername: net.isIP(servername) ? undefined : servername, 40683 }); 40684 tlsSocket.once('error', (error) => { 40685 debug('Socket TLS error', error.message); 40686 cleanup(tlsSocket); 40687 }); 40688 return tlsSocket; 40689 } 40690 return socket; 40691 } 40692 } 40693 SocksProxyAgent.protocols = [ 40694 'socks', 40695 'socks4', 40696 'socks4a', 40697 'socks5', 40698 'socks5h', 40699 ]; 40700 exports.SocksProxyAgent = SocksProxyAgent; 40701 function omit(obj, ...keys) { 40702 const ret = {}; 40703 let key; 40704 for (key in obj) { 40705 if (!keys.includes(key)) { 40706 ret[key] = obj[key]; 40707 } 40708 } 40709 return ret; 40710 } 40711 //# sourceMappingURL=index.js.map 40712 40713 /***/ }), 40714 40715 /***/ 36127: 40716 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 40717 40718 "use strict"; 40719 40720 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 40721 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 40722 return new (P || (P = Promise))(function (resolve, reject) { 40723 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 40724 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 40725 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 40726 step((generator = generator.apply(thisArg, _arguments || [])).next()); 40727 }); 40728 }; 40729 Object.defineProperty(exports, "__esModule", ({ value: true })); 40730 exports.SocksClientError = exports.SocksClient = void 0; 40731 const events_1 = __nccwpck_require__(82361); 40732 const net = __nccwpck_require__(41808); 40733 const smart_buffer_1 = __nccwpck_require__(71062); 40734 const constants_1 = __nccwpck_require__(49647); 40735 const helpers_1 = __nccwpck_require__(74324); 40736 const receivebuffer_1 = __nccwpck_require__(39740); 40737 const util_1 = __nccwpck_require__(75523); 40738 Object.defineProperty(exports, "SocksClientError", ({ enumerable: true, get: function () { return util_1.SocksClientError; } })); 40739 const ip_address_1 = __nccwpck_require__(78953); 40740 class SocksClient extends events_1.EventEmitter { 40741 constructor(options) { 40742 super(); 40743 this.options = Object.assign({}, options); 40744 // Validate SocksClientOptions 40745 (0, helpers_1.validateSocksClientOptions)(options); 40746 // Default state 40747 this.setState(constants_1.SocksClientState.Created); 40748 } 40749 /** 40750 * Creates a new SOCKS connection. 40751 * 40752 * Note: Supports callbacks and promises. Only supports the connect command. 40753 * @param options { SocksClientOptions } Options. 40754 * @param callback { Function } An optional callback function. 40755 * @returns { Promise } 40756 */ 40757 static createConnection(options, callback) { 40758 return new Promise((resolve, reject) => { 40759 // Validate SocksClientOptions 40760 try { 40761 (0, helpers_1.validateSocksClientOptions)(options, ['connect']); 40762 } 40763 catch (err) { 40764 if (typeof callback === 'function') { 40765 callback(err); 40766 // eslint-disable-next-line @typescript-eslint/no-explicit-any 40767 return resolve(err); // Resolves pending promise (prevents memory leaks). 40768 } 40769 else { 40770 return reject(err); 40771 } 40772 } 40773 const client = new SocksClient(options); 40774 client.connect(options.existing_socket); 40775 client.once('established', (info) => { 40776 client.removeAllListeners(); 40777 if (typeof callback === 'function') { 40778 callback(null, info); 40779 resolve(info); // Resolves pending promise (prevents memory leaks). 40780 } 40781 else { 40782 resolve(info); 40783 } 40784 }); 40785 // Error occurred, failed to establish connection. 40786 client.once('error', (err) => { 40787 client.removeAllListeners(); 40788 if (typeof callback === 'function') { 40789 callback(err); 40790 // eslint-disable-next-line @typescript-eslint/no-explicit-any 40791 resolve(err); // Resolves pending promise (prevents memory leaks). 40792 } 40793 else { 40794 reject(err); 40795 } 40796 }); 40797 }); 40798 } 40799 /** 40800 * Creates a new SOCKS connection chain to a destination host through 2 or more SOCKS proxies. 40801 * 40802 * Note: Supports callbacks and promises. Only supports the connect method. 40803 * Note: Implemented via createConnection() factory function. 40804 * @param options { SocksClientChainOptions } Options 40805 * @param callback { Function } An optional callback function. 40806 * @returns { Promise } 40807 */ 40808 static createConnectionChain(options, callback) { 40809 // eslint-disable-next-line no-async-promise-executor 40810 return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { 40811 // Validate SocksClientChainOptions 40812 try { 40813 (0, helpers_1.validateSocksClientChainOptions)(options); 40814 } 40815 catch (err) { 40816 if (typeof callback === 'function') { 40817 callback(err); 40818 // eslint-disable-next-line @typescript-eslint/no-explicit-any 40819 return resolve(err); // Resolves pending promise (prevents memory leaks). 40820 } 40821 else { 40822 return reject(err); 40823 } 40824 } 40825 // Shuffle proxies 40826 if (options.randomizeChain) { 40827 (0, util_1.shuffleArray)(options.proxies); 40828 } 40829 try { 40830 let sock; 40831 for (let i = 0; i < options.proxies.length; i++) { 40832 const nextProxy = options.proxies[i]; 40833 // If we've reached the last proxy in the chain, the destination is the actual destination, otherwise it's the next proxy. 40834 const nextDestination = i === options.proxies.length - 1 40835 ? options.destination 40836 : { 40837 host: options.proxies[i + 1].host || 40838 options.proxies[i + 1].ipaddress, 40839 port: options.proxies[i + 1].port, 40840 }; 40841 // Creates the next connection in the chain. 40842 const result = yield SocksClient.createConnection({ 40843 command: 'connect', 40844 proxy: nextProxy, 40845 destination: nextDestination, 40846 existing_socket: sock, 40847 }); 40848 // If sock is undefined, assign it here. 40849 sock = sock || result.socket; 40850 } 40851 if (typeof callback === 'function') { 40852 callback(null, { socket: sock }); 40853 resolve({ socket: sock }); // Resolves pending promise (prevents memory leaks). 40854 } 40855 else { 40856 resolve({ socket: sock }); 40857 } 40858 } 40859 catch (err) { 40860 if (typeof callback === 'function') { 40861 callback(err); 40862 // eslint-disable-next-line @typescript-eslint/no-explicit-any 40863 resolve(err); // Resolves pending promise (prevents memory leaks). 40864 } 40865 else { 40866 reject(err); 40867 } 40868 } 40869 })); 40870 } 40871 /** 40872 * Creates a SOCKS UDP Frame. 40873 * @param options 40874 */ 40875 static createUDPFrame(options) { 40876 const buff = new smart_buffer_1.SmartBuffer(); 40877 buff.writeUInt16BE(0); 40878 buff.writeUInt8(options.frameNumber || 0); 40879 // IPv4/IPv6/Hostname 40880 if (net.isIPv4(options.remoteHost.host)) { 40881 buff.writeUInt8(constants_1.Socks5HostType.IPv4); 40882 buff.writeUInt32BE((0, helpers_1.ipv4ToInt32)(options.remoteHost.host)); 40883 } 40884 else if (net.isIPv6(options.remoteHost.host)) { 40885 buff.writeUInt8(constants_1.Socks5HostType.IPv6); 40886 buff.writeBuffer((0, helpers_1.ipToBuffer)(options.remoteHost.host)); 40887 } 40888 else { 40889 buff.writeUInt8(constants_1.Socks5HostType.Hostname); 40890 buff.writeUInt8(Buffer.byteLength(options.remoteHost.host)); 40891 buff.writeString(options.remoteHost.host); 40892 } 40893 // Port 40894 buff.writeUInt16BE(options.remoteHost.port); 40895 // Data 40896 buff.writeBuffer(options.data); 40897 return buff.toBuffer(); 40898 } 40899 /** 40900 * Parses a SOCKS UDP frame. 40901 * @param data 40902 */ 40903 static parseUDPFrame(data) { 40904 const buff = smart_buffer_1.SmartBuffer.fromBuffer(data); 40905 buff.readOffset = 2; 40906 const frameNumber = buff.readUInt8(); 40907 const hostType = buff.readUInt8(); 40908 let remoteHost; 40909 if (hostType === constants_1.Socks5HostType.IPv4) { 40910 remoteHost = (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()); 40911 } 40912 else if (hostType === constants_1.Socks5HostType.IPv6) { 40913 remoteHost = ip_address_1.Address6.fromByteArray(Array.from(buff.readBuffer(16))).canonicalForm(); 40914 } 40915 else { 40916 remoteHost = buff.readString(buff.readUInt8()); 40917 } 40918 const remotePort = buff.readUInt16BE(); 40919 return { 40920 frameNumber, 40921 remoteHost: { 40922 host: remoteHost, 40923 port: remotePort, 40924 }, 40925 data: buff.readBuffer(), 40926 }; 40927 } 40928 /** 40929 * Internal state setter. If the SocksClient is in an error state, it cannot be changed to a non error state. 40930 */ 40931 setState(newState) { 40932 if (this.state !== constants_1.SocksClientState.Error) { 40933 this.state = newState; 40934 } 40935 } 40936 /** 40937 * Starts the connection establishment to the proxy and destination. 40938 * @param existingSocket Connected socket to use instead of creating a new one (internal use). 40939 */ 40940 connect(existingSocket) { 40941 this.onDataReceived = (data) => this.onDataReceivedHandler(data); 40942 this.onClose = () => this.onCloseHandler(); 40943 this.onError = (err) => this.onErrorHandler(err); 40944 this.onConnect = () => this.onConnectHandler(); 40945 // Start timeout timer (defaults to 30 seconds) 40946 const timer = setTimeout(() => this.onEstablishedTimeout(), this.options.timeout || constants_1.DEFAULT_TIMEOUT); 40947 // check whether unref is available as it differs from browser to NodeJS (#33) 40948 if (timer.unref && typeof timer.unref === 'function') { 40949 timer.unref(); 40950 } 40951 // If an existing socket is provided, use it to negotiate SOCKS handshake. Otherwise create a new Socket. 40952 if (existingSocket) { 40953 this.socket = existingSocket; 40954 } 40955 else { 40956 this.socket = new net.Socket(); 40957 } 40958 // Attach Socket error handlers. 40959 this.socket.once('close', this.onClose); 40960 this.socket.once('error', this.onError); 40961 this.socket.once('connect', this.onConnect); 40962 this.socket.on('data', this.onDataReceived); 40963 this.setState(constants_1.SocksClientState.Connecting); 40964 this.receiveBuffer = new receivebuffer_1.ReceiveBuffer(); 40965 if (existingSocket) { 40966 this.socket.emit('connect'); 40967 } 40968 else { 40969 this.socket.connect(this.getSocketOptions()); 40970 if (this.options.set_tcp_nodelay !== undefined && 40971 this.options.set_tcp_nodelay !== null) { 40972 this.socket.setNoDelay(!!this.options.set_tcp_nodelay); 40973 } 40974 } 40975 // Listen for established event so we can re-emit any excess data received during handshakes. 40976 this.prependOnceListener('established', (info) => { 40977 setImmediate(() => { 40978 if (this.receiveBuffer.length > 0) { 40979 const excessData = this.receiveBuffer.get(this.receiveBuffer.length); 40980 info.socket.emit('data', excessData); 40981 } 40982 info.socket.resume(); 40983 }); 40984 }); 40985 } 40986 // Socket options (defaults host/port to options.proxy.host/options.proxy.port) 40987 getSocketOptions() { 40988 return Object.assign(Object.assign({}, this.options.socket_options), { host: this.options.proxy.host || this.options.proxy.ipaddress, port: this.options.proxy.port }); 40989 } 40990 /** 40991 * Handles internal Socks timeout callback. 40992 * Note: If the Socks client is not BoundWaitingForConnection or Established, the connection will be closed. 40993 */ 40994 onEstablishedTimeout() { 40995 if (this.state !== constants_1.SocksClientState.Established && 40996 this.state !== constants_1.SocksClientState.BoundWaitingForConnection) { 40997 this.closeSocket(constants_1.ERRORS.ProxyConnectionTimedOut); 40998 } 40999 } 41000 /** 41001 * Handles Socket connect event. 41002 */ 41003 onConnectHandler() { 41004 this.setState(constants_1.SocksClientState.Connected); 41005 // Send initial handshake. 41006 if (this.options.proxy.type === 4) { 41007 this.sendSocks4InitialHandshake(); 41008 } 41009 else { 41010 this.sendSocks5InitialHandshake(); 41011 } 41012 this.setState(constants_1.SocksClientState.SentInitialHandshake); 41013 } 41014 /** 41015 * Handles Socket data event. 41016 * @param data 41017 */ 41018 onDataReceivedHandler(data) { 41019 /* 41020 All received data is appended to a ReceiveBuffer. 41021 This makes sure that all the data we need is received before we attempt to process it. 41022 */ 41023 this.receiveBuffer.append(data); 41024 // Process data that we have. 41025 this.processData(); 41026 } 41027 /** 41028 * Handles processing of the data we have received. 41029 */ 41030 processData() { 41031 // If we have enough data to process the next step in the SOCKS handshake, proceed. 41032 while (this.state !== constants_1.SocksClientState.Established && 41033 this.state !== constants_1.SocksClientState.Error && 41034 this.receiveBuffer.length >= this.nextRequiredPacketBufferSize) { 41035 // Sent initial handshake, waiting for response. 41036 if (this.state === constants_1.SocksClientState.SentInitialHandshake) { 41037 if (this.options.proxy.type === 4) { 41038 // Socks v4 only has one handshake response. 41039 this.handleSocks4FinalHandshakeResponse(); 41040 } 41041 else { 41042 // Socks v5 has two handshakes, handle initial one here. 41043 this.handleInitialSocks5HandshakeResponse(); 41044 } 41045 // Sent auth request for Socks v5, waiting for response. 41046 } 41047 else if (this.state === constants_1.SocksClientState.SentAuthentication) { 41048 this.handleInitialSocks5AuthenticationHandshakeResponse(); 41049 // Sent final Socks v5 handshake, waiting for final response. 41050 } 41051 else if (this.state === constants_1.SocksClientState.SentFinalHandshake) { 41052 this.handleSocks5FinalHandshakeResponse(); 41053 // Socks BIND established. Waiting for remote connection via proxy. 41054 } 41055 else if (this.state === constants_1.SocksClientState.BoundWaitingForConnection) { 41056 if (this.options.proxy.type === 4) { 41057 this.handleSocks4IncomingConnectionResponse(); 41058 } 41059 else { 41060 this.handleSocks5IncomingConnectionResponse(); 41061 } 41062 } 41063 else { 41064 this.closeSocket(constants_1.ERRORS.InternalError); 41065 break; 41066 } 41067 } 41068 } 41069 /** 41070 * Handles Socket close event. 41071 * @param had_error 41072 */ 41073 onCloseHandler() { 41074 this.closeSocket(constants_1.ERRORS.SocketClosed); 41075 } 41076 /** 41077 * Handles Socket error event. 41078 * @param err 41079 */ 41080 onErrorHandler(err) { 41081 this.closeSocket(err.message); 41082 } 41083 /** 41084 * Removes internal event listeners on the underlying Socket. 41085 */ 41086 removeInternalSocketHandlers() { 41087 // Pauses data flow of the socket (this is internally resumed after 'established' is emitted) 41088 this.socket.pause(); 41089 this.socket.removeListener('data', this.onDataReceived); 41090 this.socket.removeListener('close', this.onClose); 41091 this.socket.removeListener('error', this.onError); 41092 this.socket.removeListener('connect', this.onConnect); 41093 } 41094 /** 41095 * Closes and destroys the underlying Socket. Emits an error event. 41096 * @param err { String } An error string to include in error event. 41097 */ 41098 closeSocket(err) { 41099 // Make sure only one 'error' event is fired for the lifetime of this SocksClient instance. 41100 if (this.state !== constants_1.SocksClientState.Error) { 41101 // Set internal state to Error. 41102 this.setState(constants_1.SocksClientState.Error); 41103 // Destroy Socket 41104 this.socket.destroy(); 41105 // Remove internal listeners 41106 this.removeInternalSocketHandlers(); 41107 // Fire 'error' event. 41108 this.emit('error', new util_1.SocksClientError(err, this.options)); 41109 } 41110 } 41111 /** 41112 * Sends initial Socks v4 handshake request. 41113 */ 41114 sendSocks4InitialHandshake() { 41115 const userId = this.options.proxy.userId || ''; 41116 const buff = new smart_buffer_1.SmartBuffer(); 41117 buff.writeUInt8(0x04); 41118 buff.writeUInt8(constants_1.SocksCommand[this.options.command]); 41119 buff.writeUInt16BE(this.options.destination.port); 41120 // Socks 4 (IPv4) 41121 if (net.isIPv4(this.options.destination.host)) { 41122 buff.writeBuffer((0, helpers_1.ipToBuffer)(this.options.destination.host)); 41123 buff.writeStringNT(userId); 41124 // Socks 4a (hostname) 41125 } 41126 else { 41127 buff.writeUInt8(0x00); 41128 buff.writeUInt8(0x00); 41129 buff.writeUInt8(0x00); 41130 buff.writeUInt8(0x01); 41131 buff.writeStringNT(userId); 41132 buff.writeStringNT(this.options.destination.host); 41133 } 41134 this.nextRequiredPacketBufferSize = 41135 constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks4Response; 41136 this.socket.write(buff.toBuffer()); 41137 } 41138 /** 41139 * Handles Socks v4 handshake response. 41140 * @param data 41141 */ 41142 handleSocks4FinalHandshakeResponse() { 41143 const data = this.receiveBuffer.get(8); 41144 if (data[1] !== constants_1.Socks4Response.Granted) { 41145 this.closeSocket(`${constants_1.ERRORS.Socks4ProxyRejectedConnection} - (${constants_1.Socks4Response[data[1]]})`); 41146 } 41147 else { 41148 // Bind response 41149 if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.bind) { 41150 const buff = smart_buffer_1.SmartBuffer.fromBuffer(data); 41151 buff.readOffset = 2; 41152 const remoteHost = { 41153 port: buff.readUInt16BE(), 41154 host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()), 41155 }; 41156 // If host is 0.0.0.0, set to proxy host. 41157 if (remoteHost.host === '0.0.0.0') { 41158 remoteHost.host = this.options.proxy.ipaddress; 41159 } 41160 this.setState(constants_1.SocksClientState.BoundWaitingForConnection); 41161 this.emit('bound', { remoteHost, socket: this.socket }); 41162 // Connect response 41163 } 41164 else { 41165 this.setState(constants_1.SocksClientState.Established); 41166 this.removeInternalSocketHandlers(); 41167 this.emit('established', { socket: this.socket }); 41168 } 41169 } 41170 } 41171 /** 41172 * Handles Socks v4 incoming connection request (BIND) 41173 * @param data 41174 */ 41175 handleSocks4IncomingConnectionResponse() { 41176 const data = this.receiveBuffer.get(8); 41177 if (data[1] !== constants_1.Socks4Response.Granted) { 41178 this.closeSocket(`${constants_1.ERRORS.Socks4ProxyRejectedIncomingBoundConnection} - (${constants_1.Socks4Response[data[1]]})`); 41179 } 41180 else { 41181 const buff = smart_buffer_1.SmartBuffer.fromBuffer(data); 41182 buff.readOffset = 2; 41183 const remoteHost = { 41184 port: buff.readUInt16BE(), 41185 host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()), 41186 }; 41187 this.setState(constants_1.SocksClientState.Established); 41188 this.removeInternalSocketHandlers(); 41189 this.emit('established', { remoteHost, socket: this.socket }); 41190 } 41191 } 41192 /** 41193 * Sends initial Socks v5 handshake request. 41194 */ 41195 sendSocks5InitialHandshake() { 41196 const buff = new smart_buffer_1.SmartBuffer(); 41197 // By default we always support no auth. 41198 const supportedAuthMethods = [constants_1.Socks5Auth.NoAuth]; 41199 // We should only tell the proxy we support user/pass auth if auth info is actually provided. 41200 // Note: As of Tor v0.3.5.7+, if user/pass auth is an option from the client, by default it will always take priority. 41201 if (this.options.proxy.userId || this.options.proxy.password) { 41202 supportedAuthMethods.push(constants_1.Socks5Auth.UserPass); 41203 } 41204 // Custom auth method? 41205 if (this.options.proxy.custom_auth_method !== undefined) { 41206 supportedAuthMethods.push(this.options.proxy.custom_auth_method); 41207 } 41208 // Build handshake packet 41209 buff.writeUInt8(0x05); 41210 buff.writeUInt8(supportedAuthMethods.length); 41211 for (const authMethod of supportedAuthMethods) { 41212 buff.writeUInt8(authMethod); 41213 } 41214 this.nextRequiredPacketBufferSize = 41215 constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5InitialHandshakeResponse; 41216 this.socket.write(buff.toBuffer()); 41217 this.setState(constants_1.SocksClientState.SentInitialHandshake); 41218 } 41219 /** 41220 * Handles initial Socks v5 handshake response. 41221 * @param data 41222 */ 41223 handleInitialSocks5HandshakeResponse() { 41224 const data = this.receiveBuffer.get(2); 41225 if (data[0] !== 0x05) { 41226 this.closeSocket(constants_1.ERRORS.InvalidSocks5IntiailHandshakeSocksVersion); 41227 } 41228 else if (data[1] === constants_1.SOCKS5_NO_ACCEPTABLE_AUTH) { 41229 this.closeSocket(constants_1.ERRORS.InvalidSocks5InitialHandshakeNoAcceptedAuthType); 41230 } 41231 else { 41232 // If selected Socks v5 auth method is no auth, send final handshake request. 41233 if (data[1] === constants_1.Socks5Auth.NoAuth) { 41234 this.socks5ChosenAuthType = constants_1.Socks5Auth.NoAuth; 41235 this.sendSocks5CommandRequest(); 41236 // If selected Socks v5 auth method is user/password, send auth handshake. 41237 } 41238 else if (data[1] === constants_1.Socks5Auth.UserPass) { 41239 this.socks5ChosenAuthType = constants_1.Socks5Auth.UserPass; 41240 this.sendSocks5UserPassAuthentication(); 41241 // If selected Socks v5 auth method is the custom_auth_method, send custom handshake. 41242 } 41243 else if (data[1] === this.options.proxy.custom_auth_method) { 41244 this.socks5ChosenAuthType = this.options.proxy.custom_auth_method; 41245 this.sendSocks5CustomAuthentication(); 41246 } 41247 else { 41248 this.closeSocket(constants_1.ERRORS.InvalidSocks5InitialHandshakeUnknownAuthType); 41249 } 41250 } 41251 } 41252 /** 41253 * Sends Socks v5 user & password auth handshake. 41254 * 41255 * Note: No auth and user/pass are currently supported. 41256 */ 41257 sendSocks5UserPassAuthentication() { 41258 const userId = this.options.proxy.userId || ''; 41259 const password = this.options.proxy.password || ''; 41260 const buff = new smart_buffer_1.SmartBuffer(); 41261 buff.writeUInt8(0x01); 41262 buff.writeUInt8(Buffer.byteLength(userId)); 41263 buff.writeString(userId); 41264 buff.writeUInt8(Buffer.byteLength(password)); 41265 buff.writeString(password); 41266 this.nextRequiredPacketBufferSize = 41267 constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5UserPassAuthenticationResponse; 41268 this.socket.write(buff.toBuffer()); 41269 this.setState(constants_1.SocksClientState.SentAuthentication); 41270 } 41271 sendSocks5CustomAuthentication() { 41272 return __awaiter(this, void 0, void 0, function* () { 41273 this.nextRequiredPacketBufferSize = 41274 this.options.proxy.custom_auth_response_size; 41275 this.socket.write(yield this.options.proxy.custom_auth_request_handler()); 41276 this.setState(constants_1.SocksClientState.SentAuthentication); 41277 }); 41278 } 41279 handleSocks5CustomAuthHandshakeResponse(data) { 41280 return __awaiter(this, void 0, void 0, function* () { 41281 return yield this.options.proxy.custom_auth_response_handler(data); 41282 }); 41283 } 41284 handleSocks5AuthenticationNoAuthHandshakeResponse(data) { 41285 return __awaiter(this, void 0, void 0, function* () { 41286 return data[1] === 0x00; 41287 }); 41288 } 41289 handleSocks5AuthenticationUserPassHandshakeResponse(data) { 41290 return __awaiter(this, void 0, void 0, function* () { 41291 return data[1] === 0x00; 41292 }); 41293 } 41294 /** 41295 * Handles Socks v5 auth handshake response. 41296 * @param data 41297 */ 41298 handleInitialSocks5AuthenticationHandshakeResponse() { 41299 return __awaiter(this, void 0, void 0, function* () { 41300 this.setState(constants_1.SocksClientState.ReceivedAuthenticationResponse); 41301 let authResult = false; 41302 if (this.socks5ChosenAuthType === constants_1.Socks5Auth.NoAuth) { 41303 authResult = yield this.handleSocks5AuthenticationNoAuthHandshakeResponse(this.receiveBuffer.get(2)); 41304 } 41305 else if (this.socks5ChosenAuthType === constants_1.Socks5Auth.UserPass) { 41306 authResult = 41307 yield this.handleSocks5AuthenticationUserPassHandshakeResponse(this.receiveBuffer.get(2)); 41308 } 41309 else if (this.socks5ChosenAuthType === this.options.proxy.custom_auth_method) { 41310 authResult = yield this.handleSocks5CustomAuthHandshakeResponse(this.receiveBuffer.get(this.options.proxy.custom_auth_response_size)); 41311 } 41312 if (!authResult) { 41313 this.closeSocket(constants_1.ERRORS.Socks5AuthenticationFailed); 41314 } 41315 else { 41316 this.sendSocks5CommandRequest(); 41317 } 41318 }); 41319 } 41320 /** 41321 * Sends Socks v5 final handshake request. 41322 */ 41323 sendSocks5CommandRequest() { 41324 const buff = new smart_buffer_1.SmartBuffer(); 41325 buff.writeUInt8(0x05); 41326 buff.writeUInt8(constants_1.SocksCommand[this.options.command]); 41327 buff.writeUInt8(0x00); 41328 // ipv4, ipv6, domain? 41329 if (net.isIPv4(this.options.destination.host)) { 41330 buff.writeUInt8(constants_1.Socks5HostType.IPv4); 41331 buff.writeBuffer((0, helpers_1.ipToBuffer)(this.options.destination.host)); 41332 } 41333 else if (net.isIPv6(this.options.destination.host)) { 41334 buff.writeUInt8(constants_1.Socks5HostType.IPv6); 41335 buff.writeBuffer((0, helpers_1.ipToBuffer)(this.options.destination.host)); 41336 } 41337 else { 41338 buff.writeUInt8(constants_1.Socks5HostType.Hostname); 41339 buff.writeUInt8(this.options.destination.host.length); 41340 buff.writeString(this.options.destination.host); 41341 } 41342 buff.writeUInt16BE(this.options.destination.port); 41343 this.nextRequiredPacketBufferSize = 41344 constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHeader; 41345 this.socket.write(buff.toBuffer()); 41346 this.setState(constants_1.SocksClientState.SentFinalHandshake); 41347 } 41348 /** 41349 * Handles Socks v5 final handshake response. 41350 * @param data 41351 */ 41352 handleSocks5FinalHandshakeResponse() { 41353 // Peek at available data (we need at least 5 bytes to get the hostname length) 41354 const header = this.receiveBuffer.peek(5); 41355 if (header[0] !== 0x05 || header[1] !== constants_1.Socks5Response.Granted) { 41356 this.closeSocket(`${constants_1.ERRORS.InvalidSocks5FinalHandshakeRejected} - ${constants_1.Socks5Response[header[1]]}`); 41357 } 41358 else { 41359 // Read address type 41360 const addressType = header[3]; 41361 let remoteHost; 41362 let buff; 41363 // IPv4 41364 if (addressType === constants_1.Socks5HostType.IPv4) { 41365 // Check if data is available. 41366 const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv4; 41367 if (this.receiveBuffer.length < dataNeeded) { 41368 this.nextRequiredPacketBufferSize = dataNeeded; 41369 return; 41370 } 41371 buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4)); 41372 remoteHost = { 41373 host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()), 41374 port: buff.readUInt16BE(), 41375 }; 41376 // If given host is 0.0.0.0, assume remote proxy ip instead. 41377 if (remoteHost.host === '0.0.0.0') { 41378 remoteHost.host = this.options.proxy.ipaddress; 41379 } 41380 // Hostname 41381 } 41382 else if (addressType === constants_1.Socks5HostType.Hostname) { 41383 const hostLength = header[4]; 41384 const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHostname(hostLength); // header + host length + host + port 41385 // Check if data is available. 41386 if (this.receiveBuffer.length < dataNeeded) { 41387 this.nextRequiredPacketBufferSize = dataNeeded; 41388 return; 41389 } 41390 buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(5)); 41391 remoteHost = { 41392 host: buff.readString(hostLength), 41393 port: buff.readUInt16BE(), 41394 }; 41395 // IPv6 41396 } 41397 else if (addressType === constants_1.Socks5HostType.IPv6) { 41398 // Check if data is available. 41399 const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv6; 41400 if (this.receiveBuffer.length < dataNeeded) { 41401 this.nextRequiredPacketBufferSize = dataNeeded; 41402 return; 41403 } 41404 buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4)); 41405 remoteHost = { 41406 host: ip_address_1.Address6.fromByteArray(Array.from(buff.readBuffer(16))).canonicalForm(), 41407 port: buff.readUInt16BE(), 41408 }; 41409 } 41410 // We have everything we need 41411 this.setState(constants_1.SocksClientState.ReceivedFinalResponse); 41412 // If using CONNECT, the client is now in the established state. 41413 if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.connect) { 41414 this.setState(constants_1.SocksClientState.Established); 41415 this.removeInternalSocketHandlers(); 41416 this.emit('established', { remoteHost, socket: this.socket }); 41417 } 41418 else if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.bind) { 41419 /* If using BIND, the Socks client is now in BoundWaitingForConnection state. 41420 This means that the remote proxy server is waiting for a remote connection to the bound port. */ 41421 this.setState(constants_1.SocksClientState.BoundWaitingForConnection); 41422 this.nextRequiredPacketBufferSize = 41423 constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHeader; 41424 this.emit('bound', { remoteHost, socket: this.socket }); 41425 /* 41426 If using Associate, the Socks client is now Established. And the proxy server is now accepting UDP packets at the 41427 given bound port. This initial Socks TCP connection must remain open for the UDP relay to continue to work. 41428 */ 41429 } 41430 else if (constants_1.SocksCommand[this.options.command] === constants_1.SocksCommand.associate) { 41431 this.setState(constants_1.SocksClientState.Established); 41432 this.removeInternalSocketHandlers(); 41433 this.emit('established', { 41434 remoteHost, 41435 socket: this.socket, 41436 }); 41437 } 41438 } 41439 } 41440 /** 41441 * Handles Socks v5 incoming connection request (BIND). 41442 */ 41443 handleSocks5IncomingConnectionResponse() { 41444 // Peek at available data (we need at least 5 bytes to get the hostname length) 41445 const header = this.receiveBuffer.peek(5); 41446 if (header[0] !== 0x05 || header[1] !== constants_1.Socks5Response.Granted) { 41447 this.closeSocket(`${constants_1.ERRORS.Socks5ProxyRejectedIncomingBoundConnection} - ${constants_1.Socks5Response[header[1]]}`); 41448 } 41449 else { 41450 // Read address type 41451 const addressType = header[3]; 41452 let remoteHost; 41453 let buff; 41454 // IPv4 41455 if (addressType === constants_1.Socks5HostType.IPv4) { 41456 // Check if data is available. 41457 const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv4; 41458 if (this.receiveBuffer.length < dataNeeded) { 41459 this.nextRequiredPacketBufferSize = dataNeeded; 41460 return; 41461 } 41462 buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4)); 41463 remoteHost = { 41464 host: (0, helpers_1.int32ToIpv4)(buff.readUInt32BE()), 41465 port: buff.readUInt16BE(), 41466 }; 41467 // If given host is 0.0.0.0, assume remote proxy ip instead. 41468 if (remoteHost.host === '0.0.0.0') { 41469 remoteHost.host = this.options.proxy.ipaddress; 41470 } 41471 // Hostname 41472 } 41473 else if (addressType === constants_1.Socks5HostType.Hostname) { 41474 const hostLength = header[4]; 41475 const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseHostname(hostLength); // header + host length + port 41476 // Check if data is available. 41477 if (this.receiveBuffer.length < dataNeeded) { 41478 this.nextRequiredPacketBufferSize = dataNeeded; 41479 return; 41480 } 41481 buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(5)); 41482 remoteHost = { 41483 host: buff.readString(hostLength), 41484 port: buff.readUInt16BE(), 41485 }; 41486 // IPv6 41487 } 41488 else if (addressType === constants_1.Socks5HostType.IPv6) { 41489 // Check if data is available. 41490 const dataNeeded = constants_1.SOCKS_INCOMING_PACKET_SIZES.Socks5ResponseIPv6; 41491 if (this.receiveBuffer.length < dataNeeded) { 41492 this.nextRequiredPacketBufferSize = dataNeeded; 41493 return; 41494 } 41495 buff = smart_buffer_1.SmartBuffer.fromBuffer(this.receiveBuffer.get(dataNeeded).slice(4)); 41496 remoteHost = { 41497 host: ip_address_1.Address6.fromByteArray(Array.from(buff.readBuffer(16))).canonicalForm(), 41498 port: buff.readUInt16BE(), 41499 }; 41500 } 41501 this.setState(constants_1.SocksClientState.Established); 41502 this.removeInternalSocketHandlers(); 41503 this.emit('established', { remoteHost, socket: this.socket }); 41504 } 41505 } 41506 get socksClientOptions() { 41507 return Object.assign({}, this.options); 41508 } 41509 } 41510 exports.SocksClient = SocksClient; 41511 //# sourceMappingURL=socksclient.js.map 41512 41513 /***/ }), 41514 41515 /***/ 49647: 41516 /***/ ((__unused_webpack_module, exports) => { 41517 41518 "use strict"; 41519 41520 Object.defineProperty(exports, "__esModule", ({ value: true })); 41521 exports.SOCKS5_NO_ACCEPTABLE_AUTH = exports.SOCKS5_CUSTOM_AUTH_END = exports.SOCKS5_CUSTOM_AUTH_START = exports.SOCKS_INCOMING_PACKET_SIZES = exports.SocksClientState = exports.Socks5Response = exports.Socks5HostType = exports.Socks5Auth = exports.Socks4Response = exports.SocksCommand = exports.ERRORS = exports.DEFAULT_TIMEOUT = void 0; 41522 const DEFAULT_TIMEOUT = 30000; 41523 exports.DEFAULT_TIMEOUT = DEFAULT_TIMEOUT; 41524 // prettier-ignore 41525 const ERRORS = { 41526 InvalidSocksCommand: 'An invalid SOCKS command was provided. Valid options are connect, bind, and associate.', 41527 InvalidSocksCommandForOperation: 'An invalid SOCKS command was provided. Only a subset of commands are supported for this operation.', 41528 InvalidSocksCommandChain: 'An invalid SOCKS command was provided. Chaining currently only supports the connect command.', 41529 InvalidSocksClientOptionsDestination: 'An invalid destination host was provided.', 41530 InvalidSocksClientOptionsExistingSocket: 'An invalid existing socket was provided. This should be an instance of stream.Duplex.', 41531 InvalidSocksClientOptionsProxy: 'Invalid SOCKS proxy details were provided.', 41532 InvalidSocksClientOptionsTimeout: 'An invalid timeout value was provided. Please enter a value above 0 (in ms).', 41533 InvalidSocksClientOptionsProxiesLength: 'At least two socks proxies must be provided for chaining.', 41534 InvalidSocksClientOptionsCustomAuthRange: 'Custom auth must be a value between 0x80 and 0xFE.', 41535 InvalidSocksClientOptionsCustomAuthOptions: 'When a custom_auth_method is provided, custom_auth_request_handler, custom_auth_response_size, and custom_auth_response_handler must also be provided and valid.', 41536 NegotiationError: 'Negotiation error', 41537 SocketClosed: 'Socket closed', 41538 ProxyConnectionTimedOut: 'Proxy connection timed out', 41539 InternalError: 'SocksClient internal error (this should not happen)', 41540 InvalidSocks4HandshakeResponse: 'Received invalid Socks4 handshake response', 41541 Socks4ProxyRejectedConnection: 'Socks4 Proxy rejected connection', 41542 InvalidSocks4IncomingConnectionResponse: 'Socks4 invalid incoming connection response', 41543 Socks4ProxyRejectedIncomingBoundConnection: 'Socks4 Proxy rejected incoming bound connection', 41544 InvalidSocks5InitialHandshakeResponse: 'Received invalid Socks5 initial handshake response', 41545 InvalidSocks5IntiailHandshakeSocksVersion: 'Received invalid Socks5 initial handshake (invalid socks version)', 41546 InvalidSocks5InitialHandshakeNoAcceptedAuthType: 'Received invalid Socks5 initial handshake (no accepted authentication type)', 41547 InvalidSocks5InitialHandshakeUnknownAuthType: 'Received invalid Socks5 initial handshake (unknown authentication type)', 41548 Socks5AuthenticationFailed: 'Socks5 Authentication failed', 41549 InvalidSocks5FinalHandshake: 'Received invalid Socks5 final handshake response', 41550 InvalidSocks5FinalHandshakeRejected: 'Socks5 proxy rejected connection', 41551 InvalidSocks5IncomingConnectionResponse: 'Received invalid Socks5 incoming connection response', 41552 Socks5ProxyRejectedIncomingBoundConnection: 'Socks5 Proxy rejected incoming bound connection', 41553 }; 41554 exports.ERRORS = ERRORS; 41555 const SOCKS_INCOMING_PACKET_SIZES = { 41556 Socks5InitialHandshakeResponse: 2, 41557 Socks5UserPassAuthenticationResponse: 2, 41558 // Command response + incoming connection (bind) 41559 Socks5ResponseHeader: 5, // We need at least 5 to read the hostname length, then we wait for the address+port information. 41560 Socks5ResponseIPv4: 10, // 4 header + 4 ip + 2 port 41561 Socks5ResponseIPv6: 22, // 4 header + 16 ip + 2 port 41562 Socks5ResponseHostname: (hostNameLength) => hostNameLength + 7, // 4 header + 1 host length + host + 2 port 41563 // Command response + incoming connection (bind) 41564 Socks4Response: 8, // 2 header + 2 port + 4 ip 41565 }; 41566 exports.SOCKS_INCOMING_PACKET_SIZES = SOCKS_INCOMING_PACKET_SIZES; 41567 var SocksCommand; 41568 (function (SocksCommand) { 41569 SocksCommand[SocksCommand["connect"] = 1] = "connect"; 41570 SocksCommand[SocksCommand["bind"] = 2] = "bind"; 41571 SocksCommand[SocksCommand["associate"] = 3] = "associate"; 41572 })(SocksCommand || (exports.SocksCommand = SocksCommand = {})); 41573 var Socks4Response; 41574 (function (Socks4Response) { 41575 Socks4Response[Socks4Response["Granted"] = 90] = "Granted"; 41576 Socks4Response[Socks4Response["Failed"] = 91] = "Failed"; 41577 Socks4Response[Socks4Response["Rejected"] = 92] = "Rejected"; 41578 Socks4Response[Socks4Response["RejectedIdent"] = 93] = "RejectedIdent"; 41579 })(Socks4Response || (exports.Socks4Response = Socks4Response = {})); 41580 var Socks5Auth; 41581 (function (Socks5Auth) { 41582 Socks5Auth[Socks5Auth["NoAuth"] = 0] = "NoAuth"; 41583 Socks5Auth[Socks5Auth["GSSApi"] = 1] = "GSSApi"; 41584 Socks5Auth[Socks5Auth["UserPass"] = 2] = "UserPass"; 41585 })(Socks5Auth || (exports.Socks5Auth = Socks5Auth = {})); 41586 const SOCKS5_CUSTOM_AUTH_START = 0x80; 41587 exports.SOCKS5_CUSTOM_AUTH_START = SOCKS5_CUSTOM_AUTH_START; 41588 const SOCKS5_CUSTOM_AUTH_END = 0xfe; 41589 exports.SOCKS5_CUSTOM_AUTH_END = SOCKS5_CUSTOM_AUTH_END; 41590 const SOCKS5_NO_ACCEPTABLE_AUTH = 0xff; 41591 exports.SOCKS5_NO_ACCEPTABLE_AUTH = SOCKS5_NO_ACCEPTABLE_AUTH; 41592 var Socks5Response; 41593 (function (Socks5Response) { 41594 Socks5Response[Socks5Response["Granted"] = 0] = "Granted"; 41595 Socks5Response[Socks5Response["Failure"] = 1] = "Failure"; 41596 Socks5Response[Socks5Response["NotAllowed"] = 2] = "NotAllowed"; 41597 Socks5Response[Socks5Response["NetworkUnreachable"] = 3] = "NetworkUnreachable"; 41598 Socks5Response[Socks5Response["HostUnreachable"] = 4] = "HostUnreachable"; 41599 Socks5Response[Socks5Response["ConnectionRefused"] = 5] = "ConnectionRefused"; 41600 Socks5Response[Socks5Response["TTLExpired"] = 6] = "TTLExpired"; 41601 Socks5Response[Socks5Response["CommandNotSupported"] = 7] = "CommandNotSupported"; 41602 Socks5Response[Socks5Response["AddressNotSupported"] = 8] = "AddressNotSupported"; 41603 })(Socks5Response || (exports.Socks5Response = Socks5Response = {})); 41604 var Socks5HostType; 41605 (function (Socks5HostType) { 41606 Socks5HostType[Socks5HostType["IPv4"] = 1] = "IPv4"; 41607 Socks5HostType[Socks5HostType["Hostname"] = 3] = "Hostname"; 41608 Socks5HostType[Socks5HostType["IPv6"] = 4] = "IPv6"; 41609 })(Socks5HostType || (exports.Socks5HostType = Socks5HostType = {})); 41610 var SocksClientState; 41611 (function (SocksClientState) { 41612 SocksClientState[SocksClientState["Created"] = 0] = "Created"; 41613 SocksClientState[SocksClientState["Connecting"] = 1] = "Connecting"; 41614 SocksClientState[SocksClientState["Connected"] = 2] = "Connected"; 41615 SocksClientState[SocksClientState["SentInitialHandshake"] = 3] = "SentInitialHandshake"; 41616 SocksClientState[SocksClientState["ReceivedInitialHandshakeResponse"] = 4] = "ReceivedInitialHandshakeResponse"; 41617 SocksClientState[SocksClientState["SentAuthentication"] = 5] = "SentAuthentication"; 41618 SocksClientState[SocksClientState["ReceivedAuthenticationResponse"] = 6] = "ReceivedAuthenticationResponse"; 41619 SocksClientState[SocksClientState["SentFinalHandshake"] = 7] = "SentFinalHandshake"; 41620 SocksClientState[SocksClientState["ReceivedFinalResponse"] = 8] = "ReceivedFinalResponse"; 41621 SocksClientState[SocksClientState["BoundWaitingForConnection"] = 9] = "BoundWaitingForConnection"; 41622 SocksClientState[SocksClientState["Established"] = 10] = "Established"; 41623 SocksClientState[SocksClientState["Disconnected"] = 11] = "Disconnected"; 41624 SocksClientState[SocksClientState["Error"] = 99] = "Error"; 41625 })(SocksClientState || (exports.SocksClientState = SocksClientState = {})); 41626 //# sourceMappingURL=constants.js.map 41627 41628 /***/ }), 41629 41630 /***/ 74324: 41631 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 41632 41633 "use strict"; 41634 41635 Object.defineProperty(exports, "__esModule", ({ value: true })); 41636 exports.ipToBuffer = exports.int32ToIpv4 = exports.ipv4ToInt32 = exports.validateSocksClientChainOptions = exports.validateSocksClientOptions = void 0; 41637 const util_1 = __nccwpck_require__(75523); 41638 const constants_1 = __nccwpck_require__(49647); 41639 const stream = __nccwpck_require__(12781); 41640 const ip_address_1 = __nccwpck_require__(78953); 41641 const net = __nccwpck_require__(41808); 41642 /** 41643 * Validates the provided SocksClientOptions 41644 * @param options { SocksClientOptions } 41645 * @param acceptedCommands { string[] } A list of accepted SocksProxy commands. 41646 */ 41647 function validateSocksClientOptions(options, acceptedCommands = ['connect', 'bind', 'associate']) { 41648 // Check SOCKs command option. 41649 if (!constants_1.SocksCommand[options.command]) { 41650 throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksCommand, options); 41651 } 41652 // Check SocksCommand for acceptable command. 41653 if (acceptedCommands.indexOf(options.command) === -1) { 41654 throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksCommandForOperation, options); 41655 } 41656 // Check destination 41657 if (!isValidSocksRemoteHost(options.destination)) { 41658 throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsDestination, options); 41659 } 41660 // Check SOCKS proxy to use 41661 if (!isValidSocksProxy(options.proxy)) { 41662 throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsProxy, options); 41663 } 41664 // Validate custom auth (if set) 41665 validateCustomProxyAuth(options.proxy, options); 41666 // Check timeout 41667 if (options.timeout && !isValidTimeoutValue(options.timeout)) { 41668 throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsTimeout, options); 41669 } 41670 // Check existing_socket (if provided) 41671 if (options.existing_socket && 41672 !(options.existing_socket instanceof stream.Duplex)) { 41673 throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsExistingSocket, options); 41674 } 41675 } 41676 exports.validateSocksClientOptions = validateSocksClientOptions; 41677 /** 41678 * Validates the SocksClientChainOptions 41679 * @param options { SocksClientChainOptions } 41680 */ 41681 function validateSocksClientChainOptions(options) { 41682 // Only connect is supported when chaining. 41683 if (options.command !== 'connect') { 41684 throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksCommandChain, options); 41685 } 41686 // Check destination 41687 if (!isValidSocksRemoteHost(options.destination)) { 41688 throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsDestination, options); 41689 } 41690 // Validate proxies (length) 41691 if (!(options.proxies && 41692 Array.isArray(options.proxies) && 41693 options.proxies.length >= 2)) { 41694 throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsProxiesLength, options); 41695 } 41696 // Validate proxies 41697 options.proxies.forEach((proxy) => { 41698 if (!isValidSocksProxy(proxy)) { 41699 throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsProxy, options); 41700 } 41701 // Validate custom auth (if set) 41702 validateCustomProxyAuth(proxy, options); 41703 }); 41704 // Check timeout 41705 if (options.timeout && !isValidTimeoutValue(options.timeout)) { 41706 throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsTimeout, options); 41707 } 41708 } 41709 exports.validateSocksClientChainOptions = validateSocksClientChainOptions; 41710 function validateCustomProxyAuth(proxy, options) { 41711 if (proxy.custom_auth_method !== undefined) { 41712 // Invalid auth method range 41713 if (proxy.custom_auth_method < constants_1.SOCKS5_CUSTOM_AUTH_START || 41714 proxy.custom_auth_method > constants_1.SOCKS5_CUSTOM_AUTH_END) { 41715 throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthRange, options); 41716 } 41717 // Missing custom_auth_request_handler 41718 if (proxy.custom_auth_request_handler === undefined || 41719 typeof proxy.custom_auth_request_handler !== 'function') { 41720 throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthOptions, options); 41721 } 41722 // Missing custom_auth_response_size 41723 if (proxy.custom_auth_response_size === undefined) { 41724 throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthOptions, options); 41725 } 41726 // Missing/invalid custom_auth_response_handler 41727 if (proxy.custom_auth_response_handler === undefined || 41728 typeof proxy.custom_auth_response_handler !== 'function') { 41729 throw new util_1.SocksClientError(constants_1.ERRORS.InvalidSocksClientOptionsCustomAuthOptions, options); 41730 } 41731 } 41732 } 41733 /** 41734 * Validates a SocksRemoteHost 41735 * @param remoteHost { SocksRemoteHost } 41736 */ 41737 function isValidSocksRemoteHost(remoteHost) { 41738 return (remoteHost && 41739 typeof remoteHost.host === 'string' && 41740 typeof remoteHost.port === 'number' && 41741 remoteHost.port >= 0 && 41742 remoteHost.port <= 65535); 41743 } 41744 /** 41745 * Validates a SocksProxy 41746 * @param proxy { SocksProxy } 41747 */ 41748 function isValidSocksProxy(proxy) { 41749 return (proxy && 41750 (typeof proxy.host === 'string' || typeof proxy.ipaddress === 'string') && 41751 typeof proxy.port === 'number' && 41752 proxy.port >= 0 && 41753 proxy.port <= 65535 && 41754 (proxy.type === 4 || proxy.type === 5)); 41755 } 41756 /** 41757 * Validates a timeout value. 41758 * @param value { Number } 41759 */ 41760 function isValidTimeoutValue(value) { 41761 return typeof value === 'number' && value > 0; 41762 } 41763 function ipv4ToInt32(ip) { 41764 const address = new ip_address_1.Address4(ip); 41765 // Convert the IPv4 address parts to an integer 41766 return address.toArray().reduce((acc, part) => (acc << 8) + part, 0); 41767 } 41768 exports.ipv4ToInt32 = ipv4ToInt32; 41769 function int32ToIpv4(int32) { 41770 // Extract each byte (octet) from the 32-bit integer 41771 const octet1 = (int32 >>> 24) & 0xff; 41772 const octet2 = (int32 >>> 16) & 0xff; 41773 const octet3 = (int32 >>> 8) & 0xff; 41774 const octet4 = int32 & 0xff; 41775 // Combine the octets into a string in IPv4 format 41776 return [octet1, octet2, octet3, octet4].join('.'); 41777 } 41778 exports.int32ToIpv4 = int32ToIpv4; 41779 function ipToBuffer(ip) { 41780 if (net.isIPv4(ip)) { 41781 // Handle IPv4 addresses 41782 const address = new ip_address_1.Address4(ip); 41783 return Buffer.from(address.toArray()); 41784 } 41785 else if (net.isIPv6(ip)) { 41786 // Handle IPv6 addresses 41787 const address = new ip_address_1.Address6(ip); 41788 return Buffer.from(address.toByteArray()); 41789 } 41790 else { 41791 throw new Error('Invalid IP address format'); 41792 } 41793 } 41794 exports.ipToBuffer = ipToBuffer; 41795 //# sourceMappingURL=helpers.js.map 41796 41797 /***/ }), 41798 41799 /***/ 39740: 41800 /***/ ((__unused_webpack_module, exports) => { 41801 41802 "use strict"; 41803 41804 Object.defineProperty(exports, "__esModule", ({ value: true })); 41805 exports.ReceiveBuffer = void 0; 41806 class ReceiveBuffer { 41807 constructor(size = 4096) { 41808 this.buffer = Buffer.allocUnsafe(size); 41809 this.offset = 0; 41810 this.originalSize = size; 41811 } 41812 get length() { 41813 return this.offset; 41814 } 41815 append(data) { 41816 if (!Buffer.isBuffer(data)) { 41817 throw new Error('Attempted to append a non-buffer instance to ReceiveBuffer.'); 41818 } 41819 if (this.offset + data.length >= this.buffer.length) { 41820 const tmp = this.buffer; 41821 this.buffer = Buffer.allocUnsafe(Math.max(this.buffer.length + this.originalSize, this.buffer.length + data.length)); 41822 tmp.copy(this.buffer); 41823 } 41824 data.copy(this.buffer, this.offset); 41825 return (this.offset += data.length); 41826 } 41827 peek(length) { 41828 if (length > this.offset) { 41829 throw new Error('Attempted to read beyond the bounds of the managed internal data.'); 41830 } 41831 return this.buffer.slice(0, length); 41832 } 41833 get(length) { 41834 if (length > this.offset) { 41835 throw new Error('Attempted to read beyond the bounds of the managed internal data.'); 41836 } 41837 const value = Buffer.allocUnsafe(length); 41838 this.buffer.slice(0, length).copy(value); 41839 this.buffer.copyWithin(0, length, length + this.offset - length); 41840 this.offset -= length; 41841 return value; 41842 } 41843 } 41844 exports.ReceiveBuffer = ReceiveBuffer; 41845 //# sourceMappingURL=receivebuffer.js.map 41846 41847 /***/ }), 41848 41849 /***/ 75523: 41850 /***/ ((__unused_webpack_module, exports) => { 41851 41852 "use strict"; 41853 41854 Object.defineProperty(exports, "__esModule", ({ value: true })); 41855 exports.shuffleArray = exports.SocksClientError = void 0; 41856 /** 41857 * Error wrapper for SocksClient 41858 */ 41859 class SocksClientError extends Error { 41860 constructor(message, options) { 41861 super(message); 41862 this.options = options; 41863 } 41864 } 41865 exports.SocksClientError = SocksClientError; 41866 /** 41867 * Shuffles a given array. 41868 * @param array The array to shuffle. 41869 */ 41870 function shuffleArray(array) { 41871 for (let i = array.length - 1; i > 0; i--) { 41872 const j = Math.floor(Math.random() * (i + 1)); 41873 [array[i], array[j]] = [array[j], array[i]]; 41874 } 41875 } 41876 exports.shuffleArray = shuffleArray; 41877 //# sourceMappingURL=util.js.map 41878 41879 /***/ }), 41880 41881 /***/ 54754: 41882 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 41883 41884 "use strict"; 41885 41886 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 41887 if (k2 === undefined) k2 = k; 41888 var desc = Object.getOwnPropertyDescriptor(m, k); 41889 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 41890 desc = { enumerable: true, get: function() { return m[k]; } }; 41891 } 41892 Object.defineProperty(o, k2, desc); 41893 }) : (function(o, m, k, k2) { 41894 if (k2 === undefined) k2 = k; 41895 o[k2] = m[k]; 41896 })); 41897 var __exportStar = (this && this.__exportStar) || function(m, exports) { 41898 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 41899 }; 41900 Object.defineProperty(exports, "__esModule", ({ value: true })); 41901 __exportStar(__nccwpck_require__(36127), exports); 41902 //# sourceMappingURL=index.js.map 41903 41904 /***/ }), 41905 41906 /***/ 33988: 41907 /***/ ((__unused_webpack_module, exports) => { 41908 41909 /* global window, exports, define */ 41910 41911 !function() { 41912 'use strict' 41913 41914 var re = { 41915 not_string: /[^s]/, 41916 not_bool: /[^t]/, 41917 not_type: /[^T]/, 41918 not_primitive: /[^v]/, 41919 number: /[diefg]/, 41920 numeric_arg: /[bcdiefguxX]/, 41921 json: /[j]/, 41922 not_json: /[^j]/, 41923 text: /^[^\x25]+/, 41924 modulo: /^\x25{2}/, 41925 placeholder: /^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/, 41926 key: /^([a-z_][a-z_\d]*)/i, 41927 key_access: /^\.([a-z_][a-z_\d]*)/i, 41928 index_access: /^\[(\d+)\]/, 41929 sign: /^[+-]/ 41930 } 41931 41932 function sprintf(key) { 41933 // `arguments` is not an array, but should be fine for this call 41934 return sprintf_format(sprintf_parse(key), arguments) 41935 } 41936 41937 function vsprintf(fmt, argv) { 41938 return sprintf.apply(null, [fmt].concat(argv || [])) 41939 } 41940 41941 function sprintf_format(parse_tree, argv) { 41942 var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, ph, pad, pad_character, pad_length, is_positive, sign 41943 for (i = 0; i < tree_length; i++) { 41944 if (typeof parse_tree[i] === 'string') { 41945 output += parse_tree[i] 41946 } 41947 else if (typeof parse_tree[i] === 'object') { 41948 ph = parse_tree[i] // convenience purposes only 41949 if (ph.keys) { // keyword argument 41950 arg = argv[cursor] 41951 for (k = 0; k < ph.keys.length; k++) { 41952 if (arg == undefined) { 41953 throw new Error(sprintf('[sprintf] Cannot access property "%s" of undefined value "%s"', ph.keys[k], ph.keys[k-1])) 41954 } 41955 arg = arg[ph.keys[k]] 41956 } 41957 } 41958 else if (ph.param_no) { // positional argument (explicit) 41959 arg = argv[ph.param_no] 41960 } 41961 else { // positional argument (implicit) 41962 arg = argv[cursor++] 41963 } 41964 41965 if (re.not_type.test(ph.type) && re.not_primitive.test(ph.type) && arg instanceof Function) { 41966 arg = arg() 41967 } 41968 41969 if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) { 41970 throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg)) 41971 } 41972 41973 if (re.number.test(ph.type)) { 41974 is_positive = arg >= 0 41975 } 41976 41977 switch (ph.type) { 41978 case 'b': 41979 arg = parseInt(arg, 10).toString(2) 41980 break 41981 case 'c': 41982 arg = String.fromCharCode(parseInt(arg, 10)) 41983 break 41984 case 'd': 41985 case 'i': 41986 arg = parseInt(arg, 10) 41987 break 41988 case 'j': 41989 arg = JSON.stringify(arg, null, ph.width ? parseInt(ph.width) : 0) 41990 break 41991 case 'e': 41992 arg = ph.precision ? parseFloat(arg).toExponential(ph.precision) : parseFloat(arg).toExponential() 41993 break 41994 case 'f': 41995 arg = ph.precision ? parseFloat(arg).toFixed(ph.precision) : parseFloat(arg) 41996 break 41997 case 'g': 41998 arg = ph.precision ? String(Number(arg.toPrecision(ph.precision))) : parseFloat(arg) 41999 break 42000 case 'o': 42001 arg = (parseInt(arg, 10) >>> 0).toString(8) 42002 break 42003 case 's': 42004 arg = String(arg) 42005 arg = (ph.precision ? arg.substring(0, ph.precision) : arg) 42006 break 42007 case 't': 42008 arg = String(!!arg) 42009 arg = (ph.precision ? arg.substring(0, ph.precision) : arg) 42010 break 42011 case 'T': 42012 arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase() 42013 arg = (ph.precision ? arg.substring(0, ph.precision) : arg) 42014 break 42015 case 'u': 42016 arg = parseInt(arg, 10) >>> 0 42017 break 42018 case 'v': 42019 arg = arg.valueOf() 42020 arg = (ph.precision ? arg.substring(0, ph.precision) : arg) 42021 break 42022 case 'x': 42023 arg = (parseInt(arg, 10) >>> 0).toString(16) 42024 break 42025 case 'X': 42026 arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase() 42027 break 42028 } 42029 if (re.json.test(ph.type)) { 42030 output += arg 42031 } 42032 else { 42033 if (re.number.test(ph.type) && (!is_positive || ph.sign)) { 42034 sign = is_positive ? '+' : '-' 42035 arg = arg.toString().replace(re.sign, '') 42036 } 42037 else { 42038 sign = '' 42039 } 42040 pad_character = ph.pad_char ? ph.pad_char === '0' ? '0' : ph.pad_char.charAt(1) : ' ' 42041 pad_length = ph.width - (sign + arg).length 42042 pad = ph.width ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : '' 42043 output += ph.align ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg) 42044 } 42045 } 42046 } 42047 return output 42048 } 42049 42050 var sprintf_cache = Object.create(null) 42051 42052 function sprintf_parse(fmt) { 42053 if (sprintf_cache[fmt]) { 42054 return sprintf_cache[fmt] 42055 } 42056 42057 var _fmt = fmt, match, parse_tree = [], arg_names = 0 42058 while (_fmt) { 42059 if ((match = re.text.exec(_fmt)) !== null) { 42060 parse_tree.push(match[0]) 42061 } 42062 else if ((match = re.modulo.exec(_fmt)) !== null) { 42063 parse_tree.push('%') 42064 } 42065 else if ((match = re.placeholder.exec(_fmt)) !== null) { 42066 if (match[2]) { 42067 arg_names |= 1 42068 var field_list = [], replacement_field = match[2], field_match = [] 42069 if ((field_match = re.key.exec(replacement_field)) !== null) { 42070 field_list.push(field_match[1]) 42071 while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') { 42072 if ((field_match = re.key_access.exec(replacement_field)) !== null) { 42073 field_list.push(field_match[1]) 42074 } 42075 else if ((field_match = re.index_access.exec(replacement_field)) !== null) { 42076 field_list.push(field_match[1]) 42077 } 42078 else { 42079 throw new SyntaxError('[sprintf] failed to parse named argument key') 42080 } 42081 } 42082 } 42083 else { 42084 throw new SyntaxError('[sprintf] failed to parse named argument key') 42085 } 42086 match[2] = field_list 42087 } 42088 else { 42089 arg_names |= 2 42090 } 42091 if (arg_names === 3) { 42092 throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported') 42093 } 42094 42095 parse_tree.push( 42096 { 42097 placeholder: match[0], 42098 param_no: match[1], 42099 keys: match[2], 42100 sign: match[3], 42101 pad_char: match[4], 42102 align: match[5], 42103 width: match[6], 42104 precision: match[7], 42105 type: match[8] 42106 } 42107 ) 42108 } 42109 else { 42110 throw new SyntaxError('[sprintf] unexpected placeholder') 42111 } 42112 _fmt = _fmt.substring(match[0].length) 42113 } 42114 return sprintf_cache[fmt] = parse_tree 42115 } 42116 42117 /** 42118 * export to either browser or node.js 42119 */ 42120 /* eslint-disable quote-props */ 42121 if (true) { 42122 exports.sprintf = sprintf 42123 exports.vsprintf = vsprintf 42124 } 42125 if (typeof window !== 'undefined') { 42126 window['sprintf'] = sprintf 42127 window['vsprintf'] = vsprintf 42128 42129 if (typeof define === 'function' && define['amd']) { 42130 define(function() { 42131 return { 42132 'sprintf': sprintf, 42133 'vsprintf': vsprintf 42134 } 42135 }) 42136 } 42137 } 42138 /* eslint-enable quote-props */ 42139 }(); // eslint-disable-line 42140 42141 42142 /***/ }), 42143 42144 /***/ 4406: 42145 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 42146 42147 "use strict"; 42148 42149 42150 const crypto = __nccwpck_require__(6113) 42151 const { Minipass } = __nccwpck_require__(14968) 42152 42153 const SPEC_ALGORITHMS = ['sha512', 'sha384', 'sha256'] 42154 const DEFAULT_ALGORITHMS = ['sha512'] 42155 42156 // TODO: this should really be a hardcoded list of algorithms we support, 42157 // rather than [a-z0-9]. 42158 const BASE64_REGEX = /^[a-z0-9+/]+(?:=?=?)$/i 42159 const SRI_REGEX = /^([a-z0-9]+)-([^?]+)([?\S*]*)$/ 42160 const STRICT_SRI_REGEX = /^([a-z0-9]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)?$/ 42161 const VCHAR_REGEX = /^[\x21-\x7E]+$/ 42162 42163 const getOptString = options => options?.length ? `?${options.join('?')}` : '' 42164 42165 class IntegrityStream extends Minipass { 42166 #emittedIntegrity 42167 #emittedSize 42168 #emittedVerified 42169 42170 constructor (opts) { 42171 super() 42172 this.size = 0 42173 this.opts = opts 42174 42175 // may be overridden later, but set now for class consistency 42176 this.#getOptions() 42177 42178 // options used for calculating stream. can't be changed. 42179 if (opts?.algorithms) { 42180 this.algorithms = [...opts.algorithms] 42181 } else { 42182 this.algorithms = [...DEFAULT_ALGORITHMS] 42183 } 42184 if (this.algorithm !== null && !this.algorithms.includes(this.algorithm)) { 42185 this.algorithms.push(this.algorithm) 42186 } 42187 42188 this.hashes = this.algorithms.map(crypto.createHash) 42189 } 42190 42191 #getOptions () { 42192 // For verification 42193 this.sri = this.opts?.integrity ? parse(this.opts?.integrity, this.opts) : null 42194 this.expectedSize = this.opts?.size 42195 42196 if (!this.sri) { 42197 this.algorithm = null 42198 } else if (this.sri.isHash) { 42199 this.goodSri = true 42200 this.algorithm = this.sri.algorithm 42201 } else { 42202 this.goodSri = !this.sri.isEmpty() 42203 this.algorithm = this.sri.pickAlgorithm(this.opts) 42204 } 42205 42206 this.digests = this.goodSri ? this.sri[this.algorithm] : null 42207 this.optString = getOptString(this.opts?.options) 42208 } 42209 42210 on (ev, handler) { 42211 if (ev === 'size' && this.#emittedSize) { 42212 return handler(this.#emittedSize) 42213 } 42214 42215 if (ev === 'integrity' && this.#emittedIntegrity) { 42216 return handler(this.#emittedIntegrity) 42217 } 42218 42219 if (ev === 'verified' && this.#emittedVerified) { 42220 return handler(this.#emittedVerified) 42221 } 42222 42223 return super.on(ev, handler) 42224 } 42225 42226 emit (ev, data) { 42227 if (ev === 'end') { 42228 this.#onEnd() 42229 } 42230 return super.emit(ev, data) 42231 } 42232 42233 write (data) { 42234 this.size += data.length 42235 this.hashes.forEach(h => h.update(data)) 42236 return super.write(data) 42237 } 42238 42239 #onEnd () { 42240 if (!this.goodSri) { 42241 this.#getOptions() 42242 } 42243 const newSri = parse(this.hashes.map((h, i) => { 42244 return `${this.algorithms[i]}-${h.digest('base64')}${this.optString}` 42245 }).join(' '), this.opts) 42246 // Integrity verification mode 42247 const match = this.goodSri && newSri.match(this.sri, this.opts) 42248 if (typeof this.expectedSize === 'number' && this.size !== this.expectedSize) { 42249 /* eslint-disable-next-line max-len */ 42250 const err = new Error(`stream size mismatch when checking ${this.sri}.\n Wanted: ${this.expectedSize}\n Found: ${this.size}`) 42251 err.code = 'EBADSIZE' 42252 err.found = this.size 42253 err.expected = this.expectedSize 42254 err.sri = this.sri 42255 this.emit('error', err) 42256 } else if (this.sri && !match) { 42257 /* eslint-disable-next-line max-len */ 42258 const err = new Error(`${this.sri} integrity checksum failed when using ${this.algorithm}: wanted ${this.digests} but got ${newSri}. (${this.size} bytes)`) 42259 err.code = 'EINTEGRITY' 42260 err.found = newSri 42261 err.expected = this.digests 42262 err.algorithm = this.algorithm 42263 err.sri = this.sri 42264 this.emit('error', err) 42265 } else { 42266 this.#emittedSize = this.size 42267 this.emit('size', this.size) 42268 this.#emittedIntegrity = newSri 42269 this.emit('integrity', newSri) 42270 if (match) { 42271 this.#emittedVerified = match 42272 this.emit('verified', match) 42273 } 42274 } 42275 } 42276 } 42277 42278 class Hash { 42279 get isHash () { 42280 return true 42281 } 42282 42283 constructor (hash, opts) { 42284 const strict = opts?.strict 42285 this.source = hash.trim() 42286 42287 // set default values so that we make V8 happy to 42288 // always see a familiar object template. 42289 this.digest = '' 42290 this.algorithm = '' 42291 this.options = [] 42292 42293 // 3.1. Integrity metadata (called "Hash" by ssri) 42294 // https://w3c.github.io/webappsec-subresource-integrity/#integrity-metadata-description 42295 const match = this.source.match( 42296 strict 42297 ? STRICT_SRI_REGEX 42298 : SRI_REGEX 42299 ) 42300 if (!match) { 42301 return 42302 } 42303 if (strict && !SPEC_ALGORITHMS.includes(match[1])) { 42304 return 42305 } 42306 this.algorithm = match[1] 42307 this.digest = match[2] 42308 42309 const rawOpts = match[3] 42310 if (rawOpts) { 42311 this.options = rawOpts.slice(1).split('?') 42312 } 42313 } 42314 42315 hexDigest () { 42316 return this.digest && Buffer.from(this.digest, 'base64').toString('hex') 42317 } 42318 42319 toJSON () { 42320 return this.toString() 42321 } 42322 42323 match (integrity, opts) { 42324 const other = parse(integrity, opts) 42325 if (!other) { 42326 return false 42327 } 42328 if (other.isIntegrity) { 42329 const algo = other.pickAlgorithm(opts, [this.algorithm]) 42330 42331 if (!algo) { 42332 return false 42333 } 42334 42335 const foundHash = other[algo].find(hash => hash.digest === this.digest) 42336 42337 if (foundHash) { 42338 return foundHash 42339 } 42340 42341 return false 42342 } 42343 return other.digest === this.digest ? other : false 42344 } 42345 42346 toString (opts) { 42347 if (opts?.strict) { 42348 // Strict mode enforces the standard as close to the foot of the 42349 // letter as it can. 42350 if (!( 42351 // The spec has very restricted productions for algorithms. 42352 // https://www.w3.org/TR/CSP2/#source-list-syntax 42353 SPEC_ALGORITHMS.includes(this.algorithm) && 42354 // Usually, if someone insists on using a "different" base64, we 42355 // leave it as-is, since there's multiple standards, and the 42356 // specified is not a URL-safe variant. 42357 // https://www.w3.org/TR/CSP2/#base64_value 42358 this.digest.match(BASE64_REGEX) && 42359 // Option syntax is strictly visual chars. 42360 // https://w3c.github.io/webappsec-subresource-integrity/#grammardef-option-expression 42361 // https://tools.ietf.org/html/rfc5234#appendix-B.1 42362 this.options.every(opt => opt.match(VCHAR_REGEX)) 42363 )) { 42364 return '' 42365 } 42366 } 42367 return `${this.algorithm}-${this.digest}${getOptString(this.options)}` 42368 } 42369 } 42370 42371 function integrityHashToString (toString, sep, opts, hashes) { 42372 const toStringIsNotEmpty = toString !== '' 42373 42374 let shouldAddFirstSep = false 42375 let complement = '' 42376 42377 const lastIndex = hashes.length - 1 42378 42379 for (let i = 0; i < lastIndex; i++) { 42380 const hashString = Hash.prototype.toString.call(hashes[i], opts) 42381 42382 if (hashString) { 42383 shouldAddFirstSep = true 42384 42385 complement += hashString 42386 complement += sep 42387 } 42388 } 42389 42390 const finalHashString = Hash.prototype.toString.call(hashes[lastIndex], opts) 42391 42392 if (finalHashString) { 42393 shouldAddFirstSep = true 42394 complement += finalHashString 42395 } 42396 42397 if (toStringIsNotEmpty && shouldAddFirstSep) { 42398 return toString + sep + complement 42399 } 42400 42401 return toString + complement 42402 } 42403 42404 class Integrity { 42405 get isIntegrity () { 42406 return true 42407 } 42408 42409 toJSON () { 42410 return this.toString() 42411 } 42412 42413 isEmpty () { 42414 return Object.keys(this).length === 0 42415 } 42416 42417 toString (opts) { 42418 let sep = opts?.sep || ' ' 42419 let toString = '' 42420 42421 if (opts?.strict) { 42422 // Entries must be separated by whitespace, according to spec. 42423 sep = sep.replace(/\S+/g, ' ') 42424 42425 for (const hash of SPEC_ALGORITHMS) { 42426 if (this[hash]) { 42427 toString = integrityHashToString(toString, sep, opts, this[hash]) 42428 } 42429 } 42430 } else { 42431 for (const hash of Object.keys(this)) { 42432 toString = integrityHashToString(toString, sep, opts, this[hash]) 42433 } 42434 } 42435 42436 return toString 42437 } 42438 42439 concat (integrity, opts) { 42440 const other = typeof integrity === 'string' 42441 ? integrity 42442 : stringify(integrity, opts) 42443 return parse(`${this.toString(opts)} ${other}`, opts) 42444 } 42445 42446 hexDigest () { 42447 return parse(this, { single: true }).hexDigest() 42448 } 42449 42450 // add additional hashes to an integrity value, but prevent 42451 // *changing* an existing integrity hash. 42452 merge (integrity, opts) { 42453 const other = parse(integrity, opts) 42454 for (const algo in other) { 42455 if (this[algo]) { 42456 if (!this[algo].find(hash => 42457 other[algo].find(otherhash => 42458 hash.digest === otherhash.digest))) { 42459 throw new Error('hashes do not match, cannot update integrity') 42460 } 42461 } else { 42462 this[algo] = other[algo] 42463 } 42464 } 42465 } 42466 42467 match (integrity, opts) { 42468 const other = parse(integrity, opts) 42469 if (!other) { 42470 return false 42471 } 42472 const algo = other.pickAlgorithm(opts, Object.keys(this)) 42473 return ( 42474 !!algo && 42475 this[algo] && 42476 other[algo] && 42477 this[algo].find(hash => 42478 other[algo].find(otherhash => 42479 hash.digest === otherhash.digest 42480 ) 42481 ) 42482 ) || false 42483 } 42484 42485 // Pick the highest priority algorithm present, optionally also limited to a 42486 // set of hashes found in another integrity. When limiting it may return 42487 // nothing. 42488 pickAlgorithm (opts, hashes) { 42489 const pickAlgorithm = opts?.pickAlgorithm || getPrioritizedHash 42490 const keys = Object.keys(this).filter(k => { 42491 if (hashes?.length) { 42492 return hashes.includes(k) 42493 } 42494 return true 42495 }) 42496 if (keys.length) { 42497 return keys.reduce((acc, algo) => pickAlgorithm(acc, algo) || acc) 42498 } 42499 // no intersection between this and hashes, 42500 return null 42501 } 42502 } 42503 42504 module.exports.parse = parse 42505 function parse (sri, opts) { 42506 if (!sri) { 42507 return null 42508 } 42509 if (typeof sri === 'string') { 42510 return _parse(sri, opts) 42511 } else if (sri.algorithm && sri.digest) { 42512 const fullSri = new Integrity() 42513 fullSri[sri.algorithm] = [sri] 42514 return _parse(stringify(fullSri, opts), opts) 42515 } else { 42516 return _parse(stringify(sri, opts), opts) 42517 } 42518 } 42519 42520 function _parse (integrity, opts) { 42521 // 3.4.3. Parse metadata 42522 // https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata 42523 if (opts?.single) { 42524 return new Hash(integrity, opts) 42525 } 42526 const hashes = integrity.trim().split(/\s+/).reduce((acc, string) => { 42527 const hash = new Hash(string, opts) 42528 if (hash.algorithm && hash.digest) { 42529 const algo = hash.algorithm 42530 if (!acc[algo]) { 42531 acc[algo] = [] 42532 } 42533 acc[algo].push(hash) 42534 } 42535 return acc 42536 }, new Integrity()) 42537 return hashes.isEmpty() ? null : hashes 42538 } 42539 42540 module.exports.stringify = stringify 42541 function stringify (obj, opts) { 42542 if (obj.algorithm && obj.digest) { 42543 return Hash.prototype.toString.call(obj, opts) 42544 } else if (typeof obj === 'string') { 42545 return stringify(parse(obj, opts), opts) 42546 } else { 42547 return Integrity.prototype.toString.call(obj, opts) 42548 } 42549 } 42550 42551 module.exports.fromHex = fromHex 42552 function fromHex (hexDigest, algorithm, opts) { 42553 const optString = getOptString(opts?.options) 42554 return parse( 42555 `${algorithm}-${ 42556 Buffer.from(hexDigest, 'hex').toString('base64') 42557 }${optString}`, opts 42558 ) 42559 } 42560 42561 module.exports.fromData = fromData 42562 function fromData (data, opts) { 42563 const algorithms = opts?.algorithms || [...DEFAULT_ALGORITHMS] 42564 const optString = getOptString(opts?.options) 42565 return algorithms.reduce((acc, algo) => { 42566 const digest = crypto.createHash(algo).update(data).digest('base64') 42567 const hash = new Hash( 42568 `${algo}-${digest}${optString}`, 42569 opts 42570 ) 42571 /* istanbul ignore else - it would be VERY strange if the string we 42572 * just calculated with an algo did not have an algo or digest. 42573 */ 42574 if (hash.algorithm && hash.digest) { 42575 const hashAlgo = hash.algorithm 42576 if (!acc[hashAlgo]) { 42577 acc[hashAlgo] = [] 42578 } 42579 acc[hashAlgo].push(hash) 42580 } 42581 return acc 42582 }, new Integrity()) 42583 } 42584 42585 module.exports.fromStream = fromStream 42586 function fromStream (stream, opts) { 42587 const istream = integrityStream(opts) 42588 return new Promise((resolve, reject) => { 42589 stream.pipe(istream) 42590 stream.on('error', reject) 42591 istream.on('error', reject) 42592 let sri 42593 istream.on('integrity', s => { 42594 sri = s 42595 }) 42596 istream.on('end', () => resolve(sri)) 42597 istream.resume() 42598 }) 42599 } 42600 42601 module.exports.checkData = checkData 42602 function checkData (data, sri, opts) { 42603 sri = parse(sri, opts) 42604 if (!sri || !Object.keys(sri).length) { 42605 if (opts?.error) { 42606 throw Object.assign( 42607 new Error('No valid integrity hashes to check against'), { 42608 code: 'EINTEGRITY', 42609 } 42610 ) 42611 } else { 42612 return false 42613 } 42614 } 42615 const algorithm = sri.pickAlgorithm(opts) 42616 const digest = crypto.createHash(algorithm).update(data).digest('base64') 42617 const newSri = parse({ algorithm, digest }) 42618 const match = newSri.match(sri, opts) 42619 opts = opts || {} 42620 if (match || !(opts.error)) { 42621 return match 42622 } else if (typeof opts.size === 'number' && (data.length !== opts.size)) { 42623 /* eslint-disable-next-line max-len */ 42624 const err = new Error(`data size mismatch when checking ${sri}.\n Wanted: ${opts.size}\n Found: ${data.length}`) 42625 err.code = 'EBADSIZE' 42626 err.found = data.length 42627 err.expected = opts.size 42628 err.sri = sri 42629 throw err 42630 } else { 42631 /* eslint-disable-next-line max-len */ 42632 const err = new Error(`Integrity checksum failed when using ${algorithm}: Wanted ${sri}, but got ${newSri}. (${data.length} bytes)`) 42633 err.code = 'EINTEGRITY' 42634 err.found = newSri 42635 err.expected = sri 42636 err.algorithm = algorithm 42637 err.sri = sri 42638 throw err 42639 } 42640 } 42641 42642 module.exports.checkStream = checkStream 42643 function checkStream (stream, sri, opts) { 42644 opts = opts || Object.create(null) 42645 opts.integrity = sri 42646 sri = parse(sri, opts) 42647 if (!sri || !Object.keys(sri).length) { 42648 return Promise.reject(Object.assign( 42649 new Error('No valid integrity hashes to check against'), { 42650 code: 'EINTEGRITY', 42651 } 42652 )) 42653 } 42654 const checker = integrityStream(opts) 42655 return new Promise((resolve, reject) => { 42656 stream.pipe(checker) 42657 stream.on('error', reject) 42658 checker.on('error', reject) 42659 let verified 42660 checker.on('verified', s => { 42661 verified = s 42662 }) 42663 checker.on('end', () => resolve(verified)) 42664 checker.resume() 42665 }) 42666 } 42667 42668 module.exports.integrityStream = integrityStream 42669 function integrityStream (opts = Object.create(null)) { 42670 return new IntegrityStream(opts) 42671 } 42672 42673 module.exports.create = createIntegrity 42674 function createIntegrity (opts) { 42675 const algorithms = opts?.algorithms || [...DEFAULT_ALGORITHMS] 42676 const optString = getOptString(opts?.options) 42677 42678 const hashes = algorithms.map(crypto.createHash) 42679 42680 return { 42681 update: function (chunk, enc) { 42682 hashes.forEach(h => h.update(chunk, enc)) 42683 return this 42684 }, 42685 digest: function (enc) { 42686 const integrity = algorithms.reduce((acc, algo) => { 42687 const digest = hashes.shift().digest('base64') 42688 const hash = new Hash( 42689 `${algo}-${digest}${optString}`, 42690 opts 42691 ) 42692 /* istanbul ignore else - it would be VERY strange if the hash we 42693 * just calculated with an algo did not have an algo or digest. 42694 */ 42695 if (hash.algorithm && hash.digest) { 42696 const hashAlgo = hash.algorithm 42697 if (!acc[hashAlgo]) { 42698 acc[hashAlgo] = [] 42699 } 42700 acc[hashAlgo].push(hash) 42701 } 42702 return acc 42703 }, new Integrity()) 42704 42705 return integrity 42706 }, 42707 } 42708 } 42709 42710 const NODE_HASHES = crypto.getHashes() 42711 42712 // This is a Best Effort™ at a reasonable priority for hash algos 42713 const DEFAULT_PRIORITY = [ 42714 'md5', 'whirlpool', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', 42715 // TODO - it's unclear _which_ of these Node will actually use as its name 42716 // for the algorithm, so we guesswork it based on the OpenSSL names. 42717 'sha3', 42718 'sha3-256', 'sha3-384', 'sha3-512', 42719 'sha3_256', 'sha3_384', 'sha3_512', 42720 ].filter(algo => NODE_HASHES.includes(algo)) 42721 42722 function getPrioritizedHash (algo1, algo2) { 42723 /* eslint-disable-next-line max-len */ 42724 return DEFAULT_PRIORITY.indexOf(algo1.toLowerCase()) >= DEFAULT_PRIORITY.indexOf(algo2.toLowerCase()) 42725 ? algo1 42726 : algo2 42727 } 42728 42729 42730 /***/ }), 42731 42732 /***/ 59318: 42733 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 42734 42735 "use strict"; 42736 42737 const os = __nccwpck_require__(22037); 42738 const tty = __nccwpck_require__(76224); 42739 const hasFlag = __nccwpck_require__(31621); 42740 42741 const {env} = process; 42742 42743 let forceColor; 42744 if (hasFlag('no-color') || 42745 hasFlag('no-colors') || 42746 hasFlag('color=false') || 42747 hasFlag('color=never')) { 42748 forceColor = 0; 42749 } else if (hasFlag('color') || 42750 hasFlag('colors') || 42751 hasFlag('color=true') || 42752 hasFlag('color=always')) { 42753 forceColor = 1; 42754 } 42755 42756 if ('FORCE_COLOR' in env) { 42757 if (env.FORCE_COLOR === 'true') { 42758 forceColor = 1; 42759 } else if (env.FORCE_COLOR === 'false') { 42760 forceColor = 0; 42761 } else { 42762 forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3); 42763 } 42764 } 42765 42766 function translateLevel(level) { 42767 if (level === 0) { 42768 return false; 42769 } 42770 42771 return { 42772 level, 42773 hasBasic: true, 42774 has256: level >= 2, 42775 has16m: level >= 3 42776 }; 42777 } 42778 42779 function supportsColor(haveStream, streamIsTTY) { 42780 if (forceColor === 0) { 42781 return 0; 42782 } 42783 42784 if (hasFlag('color=16m') || 42785 hasFlag('color=full') || 42786 hasFlag('color=truecolor')) { 42787 return 3; 42788 } 42789 42790 if (hasFlag('color=256')) { 42791 return 2; 42792 } 42793 42794 if (haveStream && !streamIsTTY && forceColor === undefined) { 42795 return 0; 42796 } 42797 42798 const min = forceColor || 0; 42799 42800 if (env.TERM === 'dumb') { 42801 return min; 42802 } 42803 42804 if (process.platform === 'win32') { 42805 // Windows 10 build 10586 is the first Windows release that supports 256 colors. 42806 // Windows 10 build 14931 is the first release that supports 16m/TrueColor. 42807 const osRelease = os.release().split('.'); 42808 if ( 42809 Number(osRelease[0]) >= 10 && 42810 Number(osRelease[2]) >= 10586 42811 ) { 42812 return Number(osRelease[2]) >= 14931 ? 3 : 2; 42813 } 42814 42815 return 1; 42816 } 42817 42818 if ('CI' in env) { 42819 if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') { 42820 return 1; 42821 } 42822 42823 return min; 42824 } 42825 42826 if ('TEAMCITY_VERSION' in env) { 42827 return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; 42828 } 42829 42830 if (env.COLORTERM === 'truecolor') { 42831 return 3; 42832 } 42833 42834 if ('TERM_PROGRAM' in env) { 42835 const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); 42836 42837 switch (env.TERM_PROGRAM) { 42838 case 'iTerm.app': 42839 return version >= 3 ? 3 : 2; 42840 case 'Apple_Terminal': 42841 return 2; 42842 // No default 42843 } 42844 } 42845 42846 if (/-256(color)?$/i.test(env.TERM)) { 42847 return 2; 42848 } 42849 42850 if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { 42851 return 1; 42852 } 42853 42854 if ('COLORTERM' in env) { 42855 return 1; 42856 } 42857 42858 return min; 42859 } 42860 42861 function getSupportLevel(stream) { 42862 const level = supportsColor(stream, stream && stream.isTTY); 42863 return translateLevel(level); 42864 } 42865 42866 module.exports = { 42867 supportsColor: getSupportLevel, 42868 stdout: translateLevel(supportsColor(true, tty.isatty(1))), 42869 stderr: translateLevel(supportsColor(true, tty.isatty(2))) 42870 }; 42871 42872 42873 /***/ }), 42874 42875 /***/ 56484: 42876 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 42877 42878 "use strict"; 42879 42880 // Copyright 2023 SLSA Authors 42881 // 42882 // Licensed under the Apache License, Version 2.0 (the "License"); 42883 // you may not use this file except in compliance with the License. 42884 // You may obtain a copy of the License at 42885 // 42886 // http://www.apache.org/licenses/LICENSE-2.0 42887 // 42888 // Unless required by applicable law or agreed to in writing, software 42889 // distributed under the License is distributed on an "AS IS" BASIS, 42890 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 42891 // See the License for the specific language governing permissions and 42892 // limitations under the License. 42893 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 42894 if (k2 === undefined) k2 = k; 42895 var desc = Object.getOwnPropertyDescriptor(m, k); 42896 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 42897 desc = { enumerable: true, get: function() { return m[k]; } }; 42898 } 42899 Object.defineProperty(o, k2, desc); 42900 }) : (function(o, m, k, k2) { 42901 if (k2 === undefined) k2 = k; 42902 o[k2] = m[k]; 42903 })); 42904 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 42905 Object.defineProperty(o, "default", { enumerable: true, value: v }); 42906 }) : function(o, v) { 42907 o["default"] = v; 42908 }); 42909 var __importStar = (this && this.__importStar) || function (mod) { 42910 if (mod && mod.__esModule) return mod; 42911 var result = {}; 42912 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 42913 __setModuleDefault(result, mod); 42914 return result; 42915 }; 42916 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 42917 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 42918 return new (P || (P = Promise))(function (resolve, reject) { 42919 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 42920 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 42921 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 42922 step((generator = generator.apply(thisArg, _arguments || [])).next()); 42923 }); 42924 }; 42925 var __importDefault = (this && this.__importDefault) || function (mod) { 42926 return (mod && mod.__esModule) ? mod : { "default": mod }; 42927 }; 42928 Object.defineProperty(exports, "__esModule", ({ value: true })); 42929 exports.safePromises_stat = exports.safePromises_readdir = exports.safeExistsSync = exports.safeRmdirSync = exports.safeUnlinkSync = exports.safeReadFileSync = exports.safeMkdirSync = exports.safeWriteFileSync = exports.resolvePathInput = exports.safeFileSha256 = exports.getGitHubWorkspace = void 0; 42930 const crypto = __importStar(__nccwpck_require__(6113)); 42931 const fs_1 = __importDefault(__nccwpck_require__(57147)); 42932 const path_1 = __importDefault(__nccwpck_require__(71017)); 42933 const process_1 = __importDefault(__nccwpck_require__(77282)); 42934 // This function is for unit tests. 42935 // We need to set the working directory to the tscommon/ directory 42936 // instead of the GITHUB_WORKSPACE. 42937 function getGitHubWorkspace() { 42938 const wdt = process_1.default.env.UNIT_TESTS_WD || ""; 42939 if (wdt) { 42940 return wdt; 42941 } 42942 return process_1.default.env.GITHUB_WORKSPACE || ""; 42943 } 42944 exports.getGitHubWorkspace = getGitHubWorkspace; 42945 // safeFileSha256 returns the hex-formatted sha256 sum of the contents of an 42946 // untrusted file path. 42947 function safeFileSha256(untrustedPath) { 42948 const untrustedFile = safeReadFileSync(untrustedPath); 42949 return crypto.createHash("sha256").update(untrustedFile).digest("hex"); 42950 } 42951 exports.safeFileSha256 = safeFileSha256; 42952 // Detect directory traversal for input file. 42953 // This function is exported for unit tests only. 42954 function resolvePathInput(input, write) { 42955 const wd = getGitHubWorkspace(); 42956 const resolvedInput = path_1.default.resolve(input); 42957 // Allowed files for read only. 42958 const allowedReadFiles = [process_1.default.env.GITHUB_EVENT_PATH || ""]; 42959 for (const allowedReadFile of allowedReadFiles) { 42960 if (allowedReadFile === resolvedInput) { 42961 if (write) { 42962 throw Error(`unsafe write path ${resolvedInput}`); 42963 } 42964 return resolvedInput; 42965 } 42966 } 42967 // Allowed directories for read and write. 42968 const allowedDirs = [wd, "/tmp", process_1.default.env.RUNNER_TEMP || ""]; 42969 for (const allowedDir of allowedDirs) { 42970 // NOTE: we call 'resolve' to normalize the directory name. 42971 const resolvedAllowedDir = path_1.default.resolve(allowedDir); 42972 if ((resolvedInput + path_1.default.sep).startsWith(resolvedAllowedDir + path_1.default.sep)) { 42973 return resolvedInput; 42974 } 42975 } 42976 throw Error(`unsafe path ${resolvedInput}`); 42977 } 42978 exports.resolvePathInput = resolvePathInput; 42979 // Safe write function. 42980 function safeWriteFileSync(outputFn, data) { 42981 const safeOutputFn = resolvePathInput(outputFn, true); 42982 // WARNING: if the call fails, the type of the error is not 'Error'. 42983 fs_1.default.writeFileSync(safeOutputFn, data, { 42984 flag: "wx", 42985 mode: 0o600, 42986 }); 42987 } 42988 exports.safeWriteFileSync = safeWriteFileSync; 42989 // Safe mkdir function. 42990 function safeMkdirSync(outputFn, options) { 42991 const safeOutputFn = resolvePathInput(outputFn, true); 42992 fs_1.default.mkdirSync(safeOutputFn, options); 42993 } 42994 exports.safeMkdirSync = safeMkdirSync; 42995 // Safe read file function. 42996 function safeReadFileSync(inputFn) { 42997 const safeInputFn = resolvePathInput(inputFn, false); 42998 return fs_1.default.readFileSync(safeInputFn); 42999 } 43000 exports.safeReadFileSync = safeReadFileSync; 43001 // Safe unlink function. 43002 function safeUnlinkSync(inputFn) { 43003 const safeInputFn = resolvePathInput(inputFn, true); 43004 return fs_1.default.unlinkSync(safeInputFn); 43005 } 43006 exports.safeUnlinkSync = safeUnlinkSync; 43007 // Safe remove directory function. 43008 function safeRmdirSync(dir, options) { 43009 const safeDir = resolvePathInput(dir, true); 43010 return fs_1.default.rmdirSync(safeDir, options); 43011 } 43012 exports.safeRmdirSync = safeRmdirSync; 43013 // Safe exist function. 43014 function safeExistsSync(inputFn) { 43015 const safeInputFn = resolvePathInput(inputFn, false); 43016 return fs_1.default.existsSync(safeInputFn); 43017 } 43018 exports.safeExistsSync = safeExistsSync; 43019 // Safe readdir function. 43020 function safePromises_readdir(inputFn) { 43021 return __awaiter(this, void 0, void 0, function* () { 43022 const safeInputFn = resolvePathInput(inputFn, false); 43023 return fs_1.default.promises.readdir(safeInputFn); 43024 }); 43025 } 43026 exports.safePromises_readdir = safePromises_readdir; 43027 // Safe stat function. 43028 function safePromises_stat(inputFn) { 43029 return __awaiter(this, void 0, void 0, function* () { 43030 const safeInputFn = resolvePathInput(inputFn, true); 43031 return fs_1.default.promises.stat(safeInputFn); 43032 }); 43033 } 43034 exports.safePromises_stat = safePromises_stat; 43035 43036 43037 /***/ }), 43038 43039 /***/ 86634: 43040 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 43041 43042 "use strict"; 43043 43044 // Copyright 2023 SLSA Authors 43045 // 43046 // Licensed under the Apache License, Version 2.0 (the "License"); 43047 // you may not use this file except in compliance with the License. 43048 // You may obtain a copy of the License at 43049 // 43050 // http://www.apache.org/licenses/LICENSE-2.0 43051 // 43052 // Unless required by applicable law or agreed to in writing, software 43053 // distributed under the License is distributed on an "AS IS" BASIS, 43054 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 43055 // See the License for the specific language governing permissions and 43056 // limitations under the License. 43057 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 43058 if (k2 === undefined) k2 = k; 43059 var desc = Object.getOwnPropertyDescriptor(m, k); 43060 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 43061 desc = { enumerable: true, get: function() { return m[k]; } }; 43062 } 43063 Object.defineProperty(o, k2, desc); 43064 }) : (function(o, m, k, k2) { 43065 if (k2 === undefined) k2 = k; 43066 o[k2] = m[k]; 43067 })); 43068 var __exportStar = (this && this.__exportStar) || function(m, exports) { 43069 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 43070 }; 43071 Object.defineProperty(exports, "__esModule", ({ value: true })); 43072 __exportStar(__nccwpck_require__(56484), exports); 43073 43074 43075 /***/ }), 43076 43077 /***/ 29530: 43078 /***/ ((__unused_webpack_module, exports) => { 43079 43080 "use strict"; 43081 43082 Object.defineProperty(exports, "__esModule", ({ value: true })); 43083 exports.defaultConfig = void 0; 43084 exports.defaultConfig = { 43085 maxRootRotations: 32, 43086 maxDelegations: 32, 43087 rootMaxLength: 512000, //bytes 43088 timestampMaxLength: 16384, // bytes 43089 snapshotMaxLength: 2000000, // bytes 43090 targetsMaxLength: 5000000, // bytes 43091 prefixTargetsWithHash: true, 43092 fetchTimeout: 100000, // milliseconds 43093 fetchRetries: undefined, 43094 fetchRetry: 2, 43095 }; 43096 43097 43098 /***/ }), 43099 43100 /***/ 27040: 43101 /***/ ((__unused_webpack_module, exports) => { 43102 43103 "use strict"; 43104 43105 Object.defineProperty(exports, "__esModule", ({ value: true })); 43106 exports.DownloadHTTPError = exports.DownloadLengthMismatchError = exports.DownloadError = exports.ExpiredMetadataError = exports.EqualVersionError = exports.BadVersionError = exports.RepositoryError = exports.PersistError = exports.RuntimeError = exports.ValueError = void 0; 43107 // An error about insufficient values 43108 class ValueError extends Error { 43109 } 43110 exports.ValueError = ValueError; 43111 class RuntimeError extends Error { 43112 } 43113 exports.RuntimeError = RuntimeError; 43114 class PersistError extends Error { 43115 } 43116 exports.PersistError = PersistError; 43117 // An error with a repository's state, such as a missing file. 43118 // It covers all exceptions that come from the repository side when 43119 // looking from the perspective of users of metadata API or ngclient. 43120 class RepositoryError extends Error { 43121 } 43122 exports.RepositoryError = RepositoryError; 43123 // An error for metadata that contains an invalid version number. 43124 class BadVersionError extends RepositoryError { 43125 } 43126 exports.BadVersionError = BadVersionError; 43127 // An error for metadata containing a previously verified version number. 43128 class EqualVersionError extends BadVersionError { 43129 } 43130 exports.EqualVersionError = EqualVersionError; 43131 // Indicate that a TUF Metadata file has expired. 43132 class ExpiredMetadataError extends RepositoryError { 43133 } 43134 exports.ExpiredMetadataError = ExpiredMetadataError; 43135 //----- Download Errors ------------------------------------------------------- 43136 // An error occurred while attempting to download a file. 43137 class DownloadError extends Error { 43138 } 43139 exports.DownloadError = DownloadError; 43140 // Indicate that a mismatch of lengths was seen while downloading a file 43141 class DownloadLengthMismatchError extends DownloadError { 43142 } 43143 exports.DownloadLengthMismatchError = DownloadLengthMismatchError; 43144 // Returned by FetcherInterface implementations for HTTP errors. 43145 class DownloadHTTPError extends DownloadError { 43146 constructor(message, statusCode) { 43147 super(message); 43148 this.statusCode = statusCode; 43149 } 43150 } 43151 exports.DownloadHTTPError = DownloadHTTPError; 43152 43153 43154 /***/ }), 43155 43156 /***/ 5991: 43157 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 43158 43159 "use strict"; 43160 43161 var __importDefault = (this && this.__importDefault) || function (mod) { 43162 return (mod && mod.__esModule) ? mod : { "default": mod }; 43163 }; 43164 Object.defineProperty(exports, "__esModule", ({ value: true })); 43165 exports.DefaultFetcher = exports.BaseFetcher = void 0; 43166 const debug_1 = __importDefault(__nccwpck_require__(38237)); 43167 const fs_1 = __importDefault(__nccwpck_require__(57147)); 43168 const make_fetch_happen_1 = __importDefault(__nccwpck_require__(9525)); 43169 const util_1 = __importDefault(__nccwpck_require__(73837)); 43170 const error_1 = __nccwpck_require__(27040); 43171 const tmpfile_1 = __nccwpck_require__(26400); 43172 const log = (0, debug_1.default)('tuf:fetch'); 43173 class BaseFetcher { 43174 // Download file from given URL. The file is downloaded to a temporary 43175 // location and then passed to the given handler. The handler is responsible 43176 // for moving the file to its final location. The temporary file is deleted 43177 // after the handler returns. 43178 async downloadFile(url, maxLength, handler) { 43179 return (0, tmpfile_1.withTempFile)(async (tmpFile) => { 43180 const reader = await this.fetch(url); 43181 let numberOfBytesReceived = 0; 43182 const fileStream = fs_1.default.createWriteStream(tmpFile); 43183 // Read the stream a chunk at a time so that we can check 43184 // the length of the file as we go 43185 try { 43186 for await (const chunk of reader) { 43187 const bufferChunk = Buffer.from(chunk); 43188 numberOfBytesReceived += bufferChunk.length; 43189 if (numberOfBytesReceived > maxLength) { 43190 throw new error_1.DownloadLengthMismatchError('Max length reached'); 43191 } 43192 await writeBufferToStream(fileStream, bufferChunk); 43193 } 43194 } 43195 finally { 43196 // Make sure we always close the stream 43197 await util_1.default.promisify(fileStream.close).bind(fileStream)(); 43198 } 43199 return handler(tmpFile); 43200 }); 43201 } 43202 // Download bytes from given URL. 43203 async downloadBytes(url, maxLength) { 43204 return this.downloadFile(url, maxLength, async (file) => { 43205 const stream = fs_1.default.createReadStream(file); 43206 const chunks = []; 43207 for await (const chunk of stream) { 43208 chunks.push(chunk); 43209 } 43210 return Buffer.concat(chunks); 43211 }); 43212 } 43213 } 43214 exports.BaseFetcher = BaseFetcher; 43215 class DefaultFetcher extends BaseFetcher { 43216 constructor(options = {}) { 43217 super(); 43218 this.timeout = options.timeout; 43219 this.retry = options.retry; 43220 } 43221 async fetch(url) { 43222 log('GET %s', url); 43223 const response = await (0, make_fetch_happen_1.default)(url, { 43224 timeout: this.timeout, 43225 retry: this.retry, 43226 }); 43227 if (!response.ok || !response?.body) { 43228 throw new error_1.DownloadHTTPError('Failed to download', response.status); 43229 } 43230 return response.body; 43231 } 43232 } 43233 exports.DefaultFetcher = DefaultFetcher; 43234 const writeBufferToStream = async (stream, buffer) => { 43235 return new Promise((resolve, reject) => { 43236 stream.write(buffer, (err) => { 43237 if (err) { 43238 reject(err); 43239 } 43240 resolve(true); 43241 }); 43242 }); 43243 }; 43244 43245 43246 /***/ }), 43247 43248 /***/ 89475: 43249 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 43250 43251 "use strict"; 43252 43253 Object.defineProperty(exports, "__esModule", ({ value: true })); 43254 exports.Updater = exports.BaseFetcher = exports.TargetFile = void 0; 43255 var models_1 = __nccwpck_require__(75833); 43256 Object.defineProperty(exports, "TargetFile", ({ enumerable: true, get: function () { return models_1.TargetFile; } })); 43257 var fetcher_1 = __nccwpck_require__(5991); 43258 Object.defineProperty(exports, "BaseFetcher", ({ enumerable: true, get: function () { return fetcher_1.BaseFetcher; } })); 43259 var updater_1 = __nccwpck_require__(7977); 43260 Object.defineProperty(exports, "Updater", ({ enumerable: true, get: function () { return updater_1.Updater; } })); 43261 43262 43263 /***/ }), 43264 43265 /***/ 77001: 43266 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 43267 43268 "use strict"; 43269 43270 Object.defineProperty(exports, "__esModule", ({ value: true })); 43271 exports.TrustedMetadataStore = void 0; 43272 const models_1 = __nccwpck_require__(75833); 43273 const error_1 = __nccwpck_require__(27040); 43274 class TrustedMetadataStore { 43275 constructor(rootData) { 43276 this.trustedSet = {}; 43277 // Client workflow 5.1: record fixed update start time 43278 this.referenceTime = new Date(); 43279 // Client workflow 5.2: load trusted root metadata 43280 this.loadTrustedRoot(rootData); 43281 } 43282 get root() { 43283 if (!this.trustedSet.root) { 43284 throw new ReferenceError('No trusted root metadata'); 43285 } 43286 return this.trustedSet.root; 43287 } 43288 get timestamp() { 43289 return this.trustedSet.timestamp; 43290 } 43291 get snapshot() { 43292 return this.trustedSet.snapshot; 43293 } 43294 get targets() { 43295 return this.trustedSet.targets; 43296 } 43297 getRole(name) { 43298 return this.trustedSet[name]; 43299 } 43300 updateRoot(bytesBuffer) { 43301 const data = JSON.parse(bytesBuffer.toString('utf8')); 43302 const newRoot = models_1.Metadata.fromJSON(models_1.MetadataKind.Root, data); 43303 if (newRoot.signed.type != models_1.MetadataKind.Root) { 43304 throw new error_1.RepositoryError(`Expected 'root', got ${newRoot.signed.type}`); 43305 } 43306 // Client workflow 5.4: check for arbitrary software attack 43307 this.root.verifyDelegate(models_1.MetadataKind.Root, newRoot); 43308 // Client workflow 5.5: check for rollback attack 43309 if (newRoot.signed.version != this.root.signed.version + 1) { 43310 throw new error_1.BadVersionError(`Expected version ${this.root.signed.version + 1}, got ${newRoot.signed.version}`); 43311 } 43312 // Check that new root is signed by self 43313 newRoot.verifyDelegate(models_1.MetadataKind.Root, newRoot); 43314 // Client workflow 5.7: set new root as trusted root 43315 this.trustedSet.root = newRoot; 43316 return newRoot; 43317 } 43318 updateTimestamp(bytesBuffer) { 43319 if (this.snapshot) { 43320 throw new error_1.RuntimeError('Cannot update timestamp after snapshot'); 43321 } 43322 if (this.root.signed.isExpired(this.referenceTime)) { 43323 throw new error_1.ExpiredMetadataError('Final root.json is expired'); 43324 } 43325 const data = JSON.parse(bytesBuffer.toString('utf8')); 43326 const newTimestamp = models_1.Metadata.fromJSON(models_1.MetadataKind.Timestamp, data); 43327 if (newTimestamp.signed.type != models_1.MetadataKind.Timestamp) { 43328 throw new error_1.RepositoryError(`Expected 'timestamp', got ${newTimestamp.signed.type}`); 43329 } 43330 // Client workflow 5.4.2: check for arbitrary software attack 43331 this.root.verifyDelegate(models_1.MetadataKind.Timestamp, newTimestamp); 43332 if (this.timestamp) { 43333 // Prevent rolling back timestamp version 43334 // Client workflow 5.4.3.1: check for rollback attack 43335 if (newTimestamp.signed.version < this.timestamp.signed.version) { 43336 throw new error_1.BadVersionError(`New timestamp version ${newTimestamp.signed.version} is less than current version ${this.timestamp.signed.version}`); 43337 } 43338 // Keep using old timestamp if versions are equal. 43339 if (newTimestamp.signed.version === this.timestamp.signed.version) { 43340 throw new error_1.EqualVersionError(`New timestamp version ${newTimestamp.signed.version} is equal to current version ${this.timestamp.signed.version}`); 43341 } 43342 // Prevent rolling back snapshot version 43343 // Client workflow 5.4.3.2: check for rollback attack 43344 const snapshotMeta = this.timestamp.signed.snapshotMeta; 43345 const newSnapshotMeta = newTimestamp.signed.snapshotMeta; 43346 if (newSnapshotMeta.version < snapshotMeta.version) { 43347 throw new error_1.BadVersionError(`New snapshot version ${newSnapshotMeta.version} is less than current version ${snapshotMeta.version}`); 43348 } 43349 } 43350 // expiry not checked to allow old timestamp to be used for rollback 43351 // protection of new timestamp: expiry is checked in update_snapshot 43352 this.trustedSet.timestamp = newTimestamp; 43353 // Client workflow 5.4.4: check for freeze attack 43354 this.checkFinalTimestamp(); 43355 return newTimestamp; 43356 } 43357 updateSnapshot(bytesBuffer, trusted = false) { 43358 if (!this.timestamp) { 43359 throw new error_1.RuntimeError('Cannot update snapshot before timestamp'); 43360 } 43361 if (this.targets) { 43362 throw new error_1.RuntimeError('Cannot update snapshot after targets'); 43363 } 43364 // Snapshot cannot be loaded if final timestamp is expired 43365 this.checkFinalTimestamp(); 43366 const snapshotMeta = this.timestamp.signed.snapshotMeta; 43367 // Verify non-trusted data against the hashes in timestamp, if any. 43368 // Trusted snapshot data has already been verified once. 43369 // Client workflow 5.5.2: check against timestamp role's snaphsot hash 43370 if (!trusted) { 43371 snapshotMeta.verify(bytesBuffer); 43372 } 43373 const data = JSON.parse(bytesBuffer.toString('utf8')); 43374 const newSnapshot = models_1.Metadata.fromJSON(models_1.MetadataKind.Snapshot, data); 43375 if (newSnapshot.signed.type != models_1.MetadataKind.Snapshot) { 43376 throw new error_1.RepositoryError(`Expected 'snapshot', got ${newSnapshot.signed.type}`); 43377 } 43378 // Client workflow 5.5.3: check for arbitrary software attack 43379 this.root.verifyDelegate(models_1.MetadataKind.Snapshot, newSnapshot); 43380 // version check against meta version (5.5.4) is deferred to allow old 43381 // snapshot to be used in rollback protection 43382 // Client workflow 5.5.5: check for rollback attack 43383 if (this.snapshot) { 43384 Object.entries(this.snapshot.signed.meta).forEach(([fileName, fileInfo]) => { 43385 const newFileInfo = newSnapshot.signed.meta[fileName]; 43386 if (!newFileInfo) { 43387 throw new error_1.RepositoryError(`Missing file ${fileName} in new snapshot`); 43388 } 43389 if (newFileInfo.version < fileInfo.version) { 43390 throw new error_1.BadVersionError(`New version ${newFileInfo.version} of ${fileName} is less than current version ${fileInfo.version}`); 43391 } 43392 }); 43393 } 43394 this.trustedSet.snapshot = newSnapshot; 43395 // snapshot is loaded, but we raise if it's not valid _final_ snapshot 43396 // Client workflow 5.5.4 & 5.5.6 43397 this.checkFinalSnapsnot(); 43398 return newSnapshot; 43399 } 43400 updateDelegatedTargets(bytesBuffer, roleName, delegatorName) { 43401 if (!this.snapshot) { 43402 throw new error_1.RuntimeError('Cannot update delegated targets before snapshot'); 43403 } 43404 // Targets cannot be loaded if final snapshot is expired or its version 43405 // does not match meta version in timestamp. 43406 this.checkFinalSnapsnot(); 43407 const delegator = this.trustedSet[delegatorName]; 43408 if (!delegator) { 43409 throw new error_1.RuntimeError(`No trusted ${delegatorName} metadata`); 43410 } 43411 // Extract metadata for the delegated role from snapshot 43412 const meta = this.snapshot.signed.meta?.[`${roleName}.json`]; 43413 if (!meta) { 43414 throw new error_1.RepositoryError(`Missing ${roleName}.json in snapshot`); 43415 } 43416 // Client workflow 5.6.2: check against snapshot role's targets hash 43417 meta.verify(bytesBuffer); 43418 const data = JSON.parse(bytesBuffer.toString('utf8')); 43419 const newDelegate = models_1.Metadata.fromJSON(models_1.MetadataKind.Targets, data); 43420 if (newDelegate.signed.type != models_1.MetadataKind.Targets) { 43421 throw new error_1.RepositoryError(`Expected 'targets', got ${newDelegate.signed.type}`); 43422 } 43423 // Client workflow 5.6.3: check for arbitrary software attack 43424 delegator.verifyDelegate(roleName, newDelegate); 43425 // Client workflow 5.6.4: Check against snapshot role’s targets version 43426 const version = newDelegate.signed.version; 43427 if (version != meta.version) { 43428 throw new error_1.BadVersionError(`Version ${version} of ${roleName} does not match snapshot version ${meta.version}`); 43429 } 43430 // Client workflow 5.6.5: check for a freeze attack 43431 if (newDelegate.signed.isExpired(this.referenceTime)) { 43432 throw new error_1.ExpiredMetadataError(`${roleName}.json is expired`); 43433 } 43434 this.trustedSet[roleName] = newDelegate; 43435 } 43436 // Verifies and loads data as trusted root metadata. 43437 // Note that an expired initial root is still considered valid. 43438 loadTrustedRoot(bytesBuffer) { 43439 const data = JSON.parse(bytesBuffer.toString('utf8')); 43440 const root = models_1.Metadata.fromJSON(models_1.MetadataKind.Root, data); 43441 if (root.signed.type != models_1.MetadataKind.Root) { 43442 throw new error_1.RepositoryError(`Expected 'root', got ${root.signed.type}`); 43443 } 43444 root.verifyDelegate(models_1.MetadataKind.Root, root); 43445 this.trustedSet['root'] = root; 43446 } 43447 checkFinalTimestamp() { 43448 // Timestamp MUST be loaded 43449 if (!this.timestamp) { 43450 throw new ReferenceError('No trusted timestamp metadata'); 43451 } 43452 // Client workflow 5.4.4: check for freeze attack 43453 if (this.timestamp.signed.isExpired(this.referenceTime)) { 43454 throw new error_1.ExpiredMetadataError('Final timestamp.json is expired'); 43455 } 43456 } 43457 checkFinalSnapsnot() { 43458 // Snapshot and timestamp MUST be loaded 43459 if (!this.snapshot) { 43460 throw new ReferenceError('No trusted snapshot metadata'); 43461 } 43462 if (!this.timestamp) { 43463 throw new ReferenceError('No trusted timestamp metadata'); 43464 } 43465 // Client workflow 5.5.6: check for freeze attack 43466 if (this.snapshot.signed.isExpired(this.referenceTime)) { 43467 throw new error_1.ExpiredMetadataError('snapshot.json is expired'); 43468 } 43469 // Client workflow 5.5.4: check against timestamp role’s snapshot version 43470 const snapshotMeta = this.timestamp.signed.snapshotMeta; 43471 if (this.snapshot.signed.version !== snapshotMeta.version) { 43472 throw new error_1.BadVersionError("Snapshot version doesn't match timestamp"); 43473 } 43474 } 43475 } 43476 exports.TrustedMetadataStore = TrustedMetadataStore; 43477 43478 43479 /***/ }), 43480 43481 /***/ 7977: 43482 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 43483 43484 "use strict"; 43485 43486 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 43487 if (k2 === undefined) k2 = k; 43488 var desc = Object.getOwnPropertyDescriptor(m, k); 43489 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 43490 desc = { enumerable: true, get: function() { return m[k]; } }; 43491 } 43492 Object.defineProperty(o, k2, desc); 43493 }) : (function(o, m, k, k2) { 43494 if (k2 === undefined) k2 = k; 43495 o[k2] = m[k]; 43496 })); 43497 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 43498 Object.defineProperty(o, "default", { enumerable: true, value: v }); 43499 }) : function(o, v) { 43500 o["default"] = v; 43501 }); 43502 var __importStar = (this && this.__importStar) || function (mod) { 43503 if (mod && mod.__esModule) return mod; 43504 var result = {}; 43505 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 43506 __setModuleDefault(result, mod); 43507 return result; 43508 }; 43509 var __importDefault = (this && this.__importDefault) || function (mod) { 43510 return (mod && mod.__esModule) ? mod : { "default": mod }; 43511 }; 43512 Object.defineProperty(exports, "__esModule", ({ value: true })); 43513 exports.Updater = void 0; 43514 const models_1 = __nccwpck_require__(75833); 43515 const debug_1 = __importDefault(__nccwpck_require__(38237)); 43516 const fs = __importStar(__nccwpck_require__(57147)); 43517 const path = __importStar(__nccwpck_require__(71017)); 43518 const config_1 = __nccwpck_require__(29530); 43519 const error_1 = __nccwpck_require__(27040); 43520 const fetcher_1 = __nccwpck_require__(5991); 43521 const store_1 = __nccwpck_require__(77001); 43522 const url = __importStar(__nccwpck_require__(95961)); 43523 const log = (0, debug_1.default)('tuf:cache'); 43524 class Updater { 43525 constructor(options) { 43526 const { metadataDir, metadataBaseUrl, targetDir, targetBaseUrl, fetcher, config, } = options; 43527 this.dir = metadataDir; 43528 this.metadataBaseUrl = metadataBaseUrl; 43529 this.targetDir = targetDir; 43530 this.targetBaseUrl = targetBaseUrl; 43531 this.forceCache = options.forceCache ?? false; 43532 const data = this.loadLocalMetadata(models_1.MetadataKind.Root); 43533 this.trustedSet = new store_1.TrustedMetadataStore(data); 43534 this.config = { ...config_1.defaultConfig, ...config }; 43535 this.fetcher = 43536 fetcher || 43537 new fetcher_1.DefaultFetcher({ 43538 timeout: this.config.fetchTimeout, 43539 retry: this.config.fetchRetries ?? this.config.fetchRetry, 43540 }); 43541 } 43542 // refresh and load the metadata before downloading the target 43543 // refresh should be called once after the client is initialized 43544 async refresh() { 43545 // If forceCache is true, try to load the timestamp from local storage 43546 // without fetching it from the remote. Otherwise, load the root and 43547 // timestamp from the remote per the TUF spec. 43548 if (this.forceCache) { 43549 // If anything fails, load the root and timestamp from the remote. This 43550 // should cover any situation where the local metadata is corrupted or 43551 // expired. 43552 try { 43553 await this.loadTimestamp({ checkRemote: false }); 43554 } 43555 catch (error) { 43556 await this.loadRoot(); 43557 await this.loadTimestamp(); 43558 } 43559 } 43560 else { 43561 await this.loadRoot(); 43562 await this.loadTimestamp(); 43563 } 43564 await this.loadSnapshot(); 43565 await this.loadTargets(models_1.MetadataKind.Targets, models_1.MetadataKind.Root); 43566 } 43567 // Returns the TargetFile instance with information for the given target path. 43568 // 43569 // Implicitly calls refresh if it hasn't already been called. 43570 async getTargetInfo(targetPath) { 43571 if (!this.trustedSet.targets) { 43572 await this.refresh(); 43573 } 43574 return this.preorderDepthFirstWalk(targetPath); 43575 } 43576 async downloadTarget(targetInfo, filePath, targetBaseUrl) { 43577 const targetPath = filePath || this.generateTargetPath(targetInfo); 43578 if (!targetBaseUrl) { 43579 if (!this.targetBaseUrl) { 43580 throw new error_1.ValueError('Target base URL not set'); 43581 } 43582 targetBaseUrl = this.targetBaseUrl; 43583 } 43584 let targetFilePath = targetInfo.path; 43585 const consistentSnapshot = this.trustedSet.root.signed.consistentSnapshot; 43586 if (consistentSnapshot && this.config.prefixTargetsWithHash) { 43587 const hashes = Object.values(targetInfo.hashes); 43588 const { dir, base } = path.parse(targetFilePath); 43589 const filename = `${hashes[0]}.${base}`; 43590 targetFilePath = dir ? `${dir}/${filename}` : filename; 43591 } 43592 const targetUrl = url.join(targetBaseUrl, targetFilePath); 43593 // Client workflow 5.7.3: download target file 43594 await this.fetcher.downloadFile(targetUrl, targetInfo.length, async (fileName) => { 43595 // Verify hashes and length of downloaded file 43596 await targetInfo.verify(fs.createReadStream(fileName)); 43597 // Copy file to target path 43598 log('WRITE %s', targetPath); 43599 fs.copyFileSync(fileName, targetPath); 43600 }); 43601 return targetPath; 43602 } 43603 async findCachedTarget(targetInfo, filePath) { 43604 if (!filePath) { 43605 filePath = this.generateTargetPath(targetInfo); 43606 } 43607 try { 43608 if (fs.existsSync(filePath)) { 43609 await targetInfo.verify(fs.createReadStream(filePath)); 43610 return filePath; 43611 } 43612 } 43613 catch (error) { 43614 return; // File not found 43615 } 43616 return; // File not found 43617 } 43618 loadLocalMetadata(fileName) { 43619 const filePath = path.join(this.dir, `${fileName}.json`); 43620 log('READ %s', filePath); 43621 return fs.readFileSync(filePath); 43622 } 43623 // Sequentially load and persist on local disk every newer root metadata 43624 // version available on the remote. 43625 // Client workflow 5.3: update root role 43626 async loadRoot() { 43627 // Client workflow 5.3.2: version of trusted root metadata file 43628 const rootVersion = this.trustedSet.root.signed.version; 43629 const lowerBound = rootVersion + 1; 43630 const upperBound = lowerBound + this.config.maxRootRotations; 43631 for (let version = lowerBound; version <= upperBound; version++) { 43632 const rootUrl = url.join(this.metadataBaseUrl, `${version}.root.json`); 43633 try { 43634 // Client workflow 5.3.3: download new root metadata file 43635 const bytesData = await this.fetcher.downloadBytes(rootUrl, this.config.rootMaxLength); 43636 // Client workflow 5.3.4 - 5.4.7 43637 this.trustedSet.updateRoot(bytesData); 43638 // Client workflow 5.3.8: persist root metadata file 43639 this.persistMetadata(models_1.MetadataKind.Root, bytesData); 43640 } 43641 catch (error) { 43642 break; 43643 } 43644 } 43645 } 43646 // Load local and remote timestamp metadata. 43647 // Client workflow 5.4: update timestamp role 43648 async loadTimestamp({ checkRemote } = { checkRemote: true }) { 43649 // Load local and remote timestamp metadata 43650 try { 43651 const data = this.loadLocalMetadata(models_1.MetadataKind.Timestamp); 43652 this.trustedSet.updateTimestamp(data); 43653 // If checkRemote is disabled, return here to avoid fetching the remote 43654 // timestamp metadata. 43655 if (!checkRemote) { 43656 return; 43657 } 43658 } 43659 catch (error) { 43660 // continue 43661 } 43662 //Load from remote (whether local load succeeded or not) 43663 const timestampUrl = url.join(this.metadataBaseUrl, 'timestamp.json'); 43664 // Client workflow 5.4.1: download timestamp metadata file 43665 const bytesData = await this.fetcher.downloadBytes(timestampUrl, this.config.timestampMaxLength); 43666 try { 43667 // Client workflow 5.4.2 - 5.4.4 43668 this.trustedSet.updateTimestamp(bytesData); 43669 } 43670 catch (error) { 43671 // If new timestamp version is same as current, discardd the new one. 43672 // This is normal and should NOT raise an error. 43673 if (error instanceof error_1.EqualVersionError) { 43674 return; 43675 } 43676 // Re-raise any other error 43677 throw error; 43678 } 43679 // Client workflow 5.4.5: persist timestamp metadata 43680 this.persistMetadata(models_1.MetadataKind.Timestamp, bytesData); 43681 } 43682 // Load local and remote snapshot metadata. 43683 // Client workflow 5.5: update snapshot role 43684 async loadSnapshot() { 43685 //Load local (and if needed remote) snapshot metadata 43686 try { 43687 const data = this.loadLocalMetadata(models_1.MetadataKind.Snapshot); 43688 this.trustedSet.updateSnapshot(data, true); 43689 } 43690 catch (error) { 43691 if (!this.trustedSet.timestamp) { 43692 throw new ReferenceError('No timestamp metadata'); 43693 } 43694 const snapshotMeta = this.trustedSet.timestamp.signed.snapshotMeta; 43695 const maxLength = snapshotMeta.length || this.config.snapshotMaxLength; 43696 const version = this.trustedSet.root.signed.consistentSnapshot 43697 ? snapshotMeta.version 43698 : undefined; 43699 const snapshotUrl = url.join(this.metadataBaseUrl, version ? `${version}.snapshot.json` : 'snapshot.json'); 43700 try { 43701 // Client workflow 5.5.1: download snapshot metadata file 43702 const bytesData = await this.fetcher.downloadBytes(snapshotUrl, maxLength); 43703 // Client workflow 5.5.2 - 5.5.6 43704 this.trustedSet.updateSnapshot(bytesData); 43705 // Client workflow 5.5.7: persist snapshot metadata file 43706 this.persistMetadata(models_1.MetadataKind.Snapshot, bytesData); 43707 } 43708 catch (error) { 43709 throw new error_1.RuntimeError(`Unable to load snapshot metadata error ${error}`); 43710 } 43711 } 43712 } 43713 // Load local and remote targets metadata. 43714 // Client workflow 5.6: update targets role 43715 async loadTargets(role, parentRole) { 43716 if (this.trustedSet.getRole(role)) { 43717 return this.trustedSet.getRole(role); 43718 } 43719 try { 43720 const buffer = this.loadLocalMetadata(role); 43721 this.trustedSet.updateDelegatedTargets(buffer, role, parentRole); 43722 } 43723 catch (error) { 43724 // Local 'role' does not exist or is invalid: update from remote 43725 if (!this.trustedSet.snapshot) { 43726 throw new ReferenceError('No snapshot metadata'); 43727 } 43728 const metaInfo = this.trustedSet.snapshot.signed.meta[`${role}.json`]; 43729 // TODO: use length for fetching 43730 const maxLength = metaInfo.length || this.config.targetsMaxLength; 43731 const version = this.trustedSet.root.signed.consistentSnapshot 43732 ? metaInfo.version 43733 : undefined; 43734 const metadataUrl = url.join(this.metadataBaseUrl, version ? `${version}.${role}.json` : `${role}.json`); 43735 try { 43736 // Client workflow 5.6.1: download targets metadata file 43737 const bytesData = await this.fetcher.downloadBytes(metadataUrl, maxLength); 43738 // Client workflow 5.6.2 - 5.6.6 43739 this.trustedSet.updateDelegatedTargets(bytesData, role, parentRole); 43740 // Client workflow 5.6.7: persist targets metadata file 43741 this.persistMetadata(role, bytesData); 43742 } 43743 catch (error) { 43744 throw new error_1.RuntimeError(`Unable to load targets error ${error}`); 43745 } 43746 } 43747 return this.trustedSet.getRole(role); 43748 } 43749 async preorderDepthFirstWalk(targetPath) { 43750 // Interrogates the tree of target delegations in order of appearance 43751 // (which implicitly order trustworthiness), and returns the matching 43752 // target found in the most trusted role. 43753 // List of delegations to be interrogated. A (role, parent role) pair 43754 // is needed to load and verify the delegated targets metadata. 43755 const delegationsToVisit = [ 43756 { 43757 roleName: models_1.MetadataKind.Targets, 43758 parentRoleName: models_1.MetadataKind.Root, 43759 }, 43760 ]; 43761 const visitedRoleNames = new Set(); 43762 // Client workflow 5.6.7: preorder depth-first traversal of the graph of 43763 // target delegations 43764 while (visitedRoleNames.size <= this.config.maxDelegations && 43765 delegationsToVisit.length > 0) { 43766 // Pop the role name from the top of the stack. 43767 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion 43768 const { roleName, parentRoleName } = delegationsToVisit.pop(); 43769 // Skip any visited current role to prevent cycles. 43770 // Client workflow 5.6.7.1: skip already-visited roles 43771 if (visitedRoleNames.has(roleName)) { 43772 continue; 43773 } 43774 // The metadata for 'role_name' must be downloaded/updated before 43775 // its targets, delegations, and child roles can be inspected. 43776 const targets = (await this.loadTargets(roleName, parentRoleName)) 43777 ?.signed; 43778 if (!targets) { 43779 continue; 43780 } 43781 const target = targets.targets?.[targetPath]; 43782 if (target) { 43783 return target; 43784 } 43785 // After preorder check, add current role to set of visited roles. 43786 visitedRoleNames.add(roleName); 43787 if (targets.delegations) { 43788 const childRolesToVisit = []; 43789 // NOTE: This may be a slow operation if there are many delegated roles. 43790 const rolesForTarget = targets.delegations.rolesForTarget(targetPath); 43791 for (const { role: childName, terminating } of rolesForTarget) { 43792 childRolesToVisit.push({ 43793 roleName: childName, 43794 parentRoleName: roleName, 43795 }); 43796 // Client workflow 5.6.7.2.1 43797 if (terminating) { 43798 delegationsToVisit.splice(0); // empty the array 43799 break; 43800 } 43801 } 43802 childRolesToVisit.reverse(); 43803 delegationsToVisit.push(...childRolesToVisit); 43804 } 43805 } 43806 return; // no matching target found 43807 } 43808 generateTargetPath(targetInfo) { 43809 if (!this.targetDir) { 43810 throw new error_1.ValueError('Target directory not set'); 43811 } 43812 // URL encode target path 43813 const filePath = encodeURIComponent(targetInfo.path); 43814 return path.join(this.targetDir, filePath); 43815 } 43816 persistMetadata(metaDataName, bytesData) { 43817 try { 43818 const filePath = path.join(this.dir, `${metaDataName}.json`); 43819 log('WRITE %s', filePath); 43820 fs.writeFileSync(filePath, bytesData.toString('utf8')); 43821 } 43822 catch (error) { 43823 throw new error_1.PersistError(`Failed to persist metadata ${metaDataName} error: ${error}`); 43824 } 43825 } 43826 } 43827 exports.Updater = Updater; 43828 43829 43830 /***/ }), 43831 43832 /***/ 26400: 43833 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 43834 43835 "use strict"; 43836 43837 var __importDefault = (this && this.__importDefault) || function (mod) { 43838 return (mod && mod.__esModule) ? mod : { "default": mod }; 43839 }; 43840 Object.defineProperty(exports, "__esModule", ({ value: true })); 43841 exports.withTempFile = void 0; 43842 const promises_1 = __importDefault(__nccwpck_require__(73292)); 43843 const os_1 = __importDefault(__nccwpck_require__(22037)); 43844 const path_1 = __importDefault(__nccwpck_require__(71017)); 43845 // Invokes the given handler with the path to a temporary file. The file 43846 // is deleted after the handler returns. 43847 const withTempFile = async (handler) => withTempDir(async (dir) => handler(path_1.default.join(dir, 'tempfile'))); 43848 exports.withTempFile = withTempFile; 43849 // Invokes the given handler with a temporary directory. The directory is 43850 // deleted after the handler returns. 43851 const withTempDir = async (handler) => { 43852 const tmpDir = await promises_1.default.realpath(os_1.default.tmpdir()); 43853 const dir = await promises_1.default.mkdtemp(tmpDir + path_1.default.sep); 43854 try { 43855 return await handler(dir); 43856 } 43857 finally { 43858 await promises_1.default.rm(dir, { force: true, recursive: true, maxRetries: 3 }); 43859 } 43860 }; 43861 43862 43863 /***/ }), 43864 43865 /***/ 95961: 43866 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 43867 43868 "use strict"; 43869 43870 Object.defineProperty(exports, "__esModule", ({ value: true })); 43871 exports.join = void 0; 43872 const url_1 = __nccwpck_require__(57310); 43873 function join(base, path) { 43874 return new url_1.URL(ensureTrailingSlash(base) + removeLeadingSlash(path)).toString(); 43875 } 43876 exports.join = join; 43877 function ensureTrailingSlash(path) { 43878 return path.endsWith('/') ? path : path + '/'; 43879 } 43880 function removeLeadingSlash(path) { 43881 return path.startsWith('/') ? path.slice(1) : path; 43882 } 43883 43884 43885 /***/ }), 43886 43887 /***/ 74294: 43888 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 43889 43890 module.exports = __nccwpck_require__(54219); 43891 43892 43893 /***/ }), 43894 43895 /***/ 54219: 43896 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 43897 43898 "use strict"; 43899 43900 43901 var net = __nccwpck_require__(41808); 43902 var tls = __nccwpck_require__(24404); 43903 var http = __nccwpck_require__(13685); 43904 var https = __nccwpck_require__(95687); 43905 var events = __nccwpck_require__(82361); 43906 var assert = __nccwpck_require__(39491); 43907 var util = __nccwpck_require__(73837); 43908 43909 43910 exports.httpOverHttp = httpOverHttp; 43911 exports.httpsOverHttp = httpsOverHttp; 43912 exports.httpOverHttps = httpOverHttps; 43913 exports.httpsOverHttps = httpsOverHttps; 43914 43915 43916 function httpOverHttp(options) { 43917 var agent = new TunnelingAgent(options); 43918 agent.request = http.request; 43919 return agent; 43920 } 43921 43922 function httpsOverHttp(options) { 43923 var agent = new TunnelingAgent(options); 43924 agent.request = http.request; 43925 agent.createSocket = createSecureSocket; 43926 agent.defaultPort = 443; 43927 return agent; 43928 } 43929 43930 function httpOverHttps(options) { 43931 var agent = new TunnelingAgent(options); 43932 agent.request = https.request; 43933 return agent; 43934 } 43935 43936 function httpsOverHttps(options) { 43937 var agent = new TunnelingAgent(options); 43938 agent.request = https.request; 43939 agent.createSocket = createSecureSocket; 43940 agent.defaultPort = 443; 43941 return agent; 43942 } 43943 43944 43945 function TunnelingAgent(options) { 43946 var self = this; 43947 self.options = options || {}; 43948 self.proxyOptions = self.options.proxy || {}; 43949 self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets; 43950 self.requests = []; 43951 self.sockets = []; 43952 43953 self.on('free', function onFree(socket, host, port, localAddress) { 43954 var options = toOptions(host, port, localAddress); 43955 for (var i = 0, len = self.requests.length; i < len; ++i) { 43956 var pending = self.requests[i]; 43957 if (pending.host === options.host && pending.port === options.port) { 43958 // Detect the request to connect same origin server, 43959 // reuse the connection. 43960 self.requests.splice(i, 1); 43961 pending.request.onSocket(socket); 43962 return; 43963 } 43964 } 43965 socket.destroy(); 43966 self.removeSocket(socket); 43967 }); 43968 } 43969 util.inherits(TunnelingAgent, events.EventEmitter); 43970 43971 TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) { 43972 var self = this; 43973 var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress)); 43974 43975 if (self.sockets.length >= this.maxSockets) { 43976 // We are over limit so we'll add it to the queue. 43977 self.requests.push(options); 43978 return; 43979 } 43980 43981 // If we are under maxSockets create a new one. 43982 self.createSocket(options, function(socket) { 43983 socket.on('free', onFree); 43984 socket.on('close', onCloseOrRemove); 43985 socket.on('agentRemove', onCloseOrRemove); 43986 req.onSocket(socket); 43987 43988 function onFree() { 43989 self.emit('free', socket, options); 43990 } 43991 43992 function onCloseOrRemove(err) { 43993 self.removeSocket(socket); 43994 socket.removeListener('free', onFree); 43995 socket.removeListener('close', onCloseOrRemove); 43996 socket.removeListener('agentRemove', onCloseOrRemove); 43997 } 43998 }); 43999 }; 44000 44001 TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { 44002 var self = this; 44003 var placeholder = {}; 44004 self.sockets.push(placeholder); 44005 44006 var connectOptions = mergeOptions({}, self.proxyOptions, { 44007 method: 'CONNECT', 44008 path: options.host + ':' + options.port, 44009 agent: false, 44010 headers: { 44011 host: options.host + ':' + options.port 44012 } 44013 }); 44014 if (options.localAddress) { 44015 connectOptions.localAddress = options.localAddress; 44016 } 44017 if (connectOptions.proxyAuth) { 44018 connectOptions.headers = connectOptions.headers || {}; 44019 connectOptions.headers['Proxy-Authorization'] = 'Basic ' + 44020 new Buffer(connectOptions.proxyAuth).toString('base64'); 44021 } 44022 44023 debug('making CONNECT request'); 44024 var connectReq = self.request(connectOptions); 44025 connectReq.useChunkedEncodingByDefault = false; // for v0.6 44026 connectReq.once('response', onResponse); // for v0.6 44027 connectReq.once('upgrade', onUpgrade); // for v0.6 44028 connectReq.once('connect', onConnect); // for v0.7 or later 44029 connectReq.once('error', onError); 44030 connectReq.end(); 44031 44032 function onResponse(res) { 44033 // Very hacky. This is necessary to avoid http-parser leaks. 44034 res.upgrade = true; 44035 } 44036 44037 function onUpgrade(res, socket, head) { 44038 // Hacky. 44039 process.nextTick(function() { 44040 onConnect(res, socket, head); 44041 }); 44042 } 44043 44044 function onConnect(res, socket, head) { 44045 connectReq.removeAllListeners(); 44046 socket.removeAllListeners(); 44047 44048 if (res.statusCode !== 200) { 44049 debug('tunneling socket could not be established, statusCode=%d', 44050 res.statusCode); 44051 socket.destroy(); 44052 var error = new Error('tunneling socket could not be established, ' + 44053 'statusCode=' + res.statusCode); 44054 error.code = 'ECONNRESET'; 44055 options.request.emit('error', error); 44056 self.removeSocket(placeholder); 44057 return; 44058 } 44059 if (head.length > 0) { 44060 debug('got illegal response body from proxy'); 44061 socket.destroy(); 44062 var error = new Error('got illegal response body from proxy'); 44063 error.code = 'ECONNRESET'; 44064 options.request.emit('error', error); 44065 self.removeSocket(placeholder); 44066 return; 44067 } 44068 debug('tunneling connection has established'); 44069 self.sockets[self.sockets.indexOf(placeholder)] = socket; 44070 return cb(socket); 44071 } 44072 44073 function onError(cause) { 44074 connectReq.removeAllListeners(); 44075 44076 debug('tunneling socket could not be established, cause=%s\n', 44077 cause.message, cause.stack); 44078 var error = new Error('tunneling socket could not be established, ' + 44079 'cause=' + cause.message); 44080 error.code = 'ECONNRESET'; 44081 options.request.emit('error', error); 44082 self.removeSocket(placeholder); 44083 } 44084 }; 44085 44086 TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { 44087 var pos = this.sockets.indexOf(socket) 44088 if (pos === -1) { 44089 return; 44090 } 44091 this.sockets.splice(pos, 1); 44092 44093 var pending = this.requests.shift(); 44094 if (pending) { 44095 // If we have pending requests and a socket gets closed a new one 44096 // needs to be created to take over in the pool for the one that closed. 44097 this.createSocket(pending, function(socket) { 44098 pending.request.onSocket(socket); 44099 }); 44100 } 44101 }; 44102 44103 function createSecureSocket(options, cb) { 44104 var self = this; 44105 TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { 44106 var hostHeader = options.request.getHeader('host'); 44107 var tlsOptions = mergeOptions({}, self.options, { 44108 socket: socket, 44109 servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host 44110 }); 44111 44112 // 0 is dummy port for v0.6 44113 var secureSocket = tls.connect(0, tlsOptions); 44114 self.sockets[self.sockets.indexOf(socket)] = secureSocket; 44115 cb(secureSocket); 44116 }); 44117 } 44118 44119 44120 function toOptions(host, port, localAddress) { 44121 if (typeof host === 'string') { // since v0.10 44122 return { 44123 host: host, 44124 port: port, 44125 localAddress: localAddress 44126 }; 44127 } 44128 return host; // for v0.11 or later 44129 } 44130 44131 function mergeOptions(target) { 44132 for (var i = 1, len = arguments.length; i < len; ++i) { 44133 var overrides = arguments[i]; 44134 if (typeof overrides === 'object') { 44135 var keys = Object.keys(overrides); 44136 for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { 44137 var k = keys[j]; 44138 if (overrides[k] !== undefined) { 44139 target[k] = overrides[k]; 44140 } 44141 } 44142 } 44143 } 44144 return target; 44145 } 44146 44147 44148 var debug; 44149 if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { 44150 debug = function() { 44151 var args = Array.prototype.slice.call(arguments); 44152 if (typeof args[0] === 'string') { 44153 args[0] = 'TUNNEL: ' + args[0]; 44154 } else { 44155 args.unshift('TUNNEL:'); 44156 } 44157 console.error.apply(console, args); 44158 } 44159 } else { 44160 debug = function() {}; 44161 } 44162 exports.debug = debug; // for test 44163 44164 44165 /***/ }), 44166 44167 /***/ 41773: 44168 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 44169 44170 "use strict"; 44171 44172 44173 const Client = __nccwpck_require__(33598) 44174 const Dispatcher = __nccwpck_require__(60412) 44175 const errors = __nccwpck_require__(48045) 44176 const Pool = __nccwpck_require__(4634) 44177 const BalancedPool = __nccwpck_require__(37931) 44178 const Agent = __nccwpck_require__(7890) 44179 const util = __nccwpck_require__(83983) 44180 const { InvalidArgumentError } = errors 44181 const api = __nccwpck_require__(44059) 44182 const buildConnector = __nccwpck_require__(82067) 44183 const MockClient = __nccwpck_require__(58687) 44184 const MockAgent = __nccwpck_require__(66771) 44185 const MockPool = __nccwpck_require__(26193) 44186 const mockErrors = __nccwpck_require__(50888) 44187 const ProxyAgent = __nccwpck_require__(97858) 44188 const RetryHandler = __nccwpck_require__(82286) 44189 const { getGlobalDispatcher, setGlobalDispatcher } = __nccwpck_require__(21892) 44190 const DecoratorHandler = __nccwpck_require__(46930) 44191 const RedirectHandler = __nccwpck_require__(72860) 44192 const createRedirectInterceptor = __nccwpck_require__(38861) 44193 44194 let hasCrypto 44195 try { 44196 __nccwpck_require__(6113) 44197 hasCrypto = true 44198 } catch { 44199 hasCrypto = false 44200 } 44201 44202 Object.assign(Dispatcher.prototype, api) 44203 44204 module.exports.Dispatcher = Dispatcher 44205 module.exports.Client = Client 44206 module.exports.Pool = Pool 44207 module.exports.BalancedPool = BalancedPool 44208 module.exports.Agent = Agent 44209 module.exports.ProxyAgent = ProxyAgent 44210 module.exports.RetryHandler = RetryHandler 44211 44212 module.exports.DecoratorHandler = DecoratorHandler 44213 module.exports.RedirectHandler = RedirectHandler 44214 module.exports.createRedirectInterceptor = createRedirectInterceptor 44215 44216 module.exports.buildConnector = buildConnector 44217 module.exports.errors = errors 44218 44219 function makeDispatcher (fn) { 44220 return (url, opts, handler) => { 44221 if (typeof opts === 'function') { 44222 handler = opts 44223 opts = null 44224 } 44225 44226 if (!url || (typeof url !== 'string' && typeof url !== 'object' && !(url instanceof URL))) { 44227 throw new InvalidArgumentError('invalid url') 44228 } 44229 44230 if (opts != null && typeof opts !== 'object') { 44231 throw new InvalidArgumentError('invalid opts') 44232 } 44233 44234 if (opts && opts.path != null) { 44235 if (typeof opts.path !== 'string') { 44236 throw new InvalidArgumentError('invalid opts.path') 44237 } 44238 44239 let path = opts.path 44240 if (!opts.path.startsWith('/')) { 44241 path = `/${path}` 44242 } 44243 44244 url = new URL(util.parseOrigin(url).origin + path) 44245 } else { 44246 if (!opts) { 44247 opts = typeof url === 'object' ? url : {} 44248 } 44249 44250 url = util.parseURL(url) 44251 } 44252 44253 const { agent, dispatcher = getGlobalDispatcher() } = opts 44254 44255 if (agent) { 44256 throw new InvalidArgumentError('unsupported opts.agent. Did you mean opts.client?') 44257 } 44258 44259 return fn.call(dispatcher, { 44260 ...opts, 44261 origin: url.origin, 44262 path: url.search ? `${url.pathname}${url.search}` : url.pathname, 44263 method: opts.method || (opts.body ? 'PUT' : 'GET') 44264 }, handler) 44265 } 44266 } 44267 44268 module.exports.setGlobalDispatcher = setGlobalDispatcher 44269 module.exports.getGlobalDispatcher = getGlobalDispatcher 44270 44271 if (util.nodeMajor > 16 || (util.nodeMajor === 16 && util.nodeMinor >= 8)) { 44272 let fetchImpl = null 44273 module.exports.fetch = async function fetch (resource) { 44274 if (!fetchImpl) { 44275 fetchImpl = (__nccwpck_require__(74881).fetch) 44276 } 44277 44278 try { 44279 return await fetchImpl(...arguments) 44280 } catch (err) { 44281 if (typeof err === 'object') { 44282 Error.captureStackTrace(err, this) 44283 } 44284 44285 throw err 44286 } 44287 } 44288 module.exports.Headers = __nccwpck_require__(10554).Headers 44289 module.exports.Response = __nccwpck_require__(27823).Response 44290 module.exports.Request = __nccwpck_require__(48359).Request 44291 module.exports.FormData = __nccwpck_require__(72015).FormData 44292 module.exports.File = __nccwpck_require__(78511).File 44293 module.exports.FileReader = __nccwpck_require__(1446).FileReader 44294 44295 const { setGlobalOrigin, getGlobalOrigin } = __nccwpck_require__(71246) 44296 44297 module.exports.setGlobalOrigin = setGlobalOrigin 44298 module.exports.getGlobalOrigin = getGlobalOrigin 44299 44300 const { CacheStorage } = __nccwpck_require__(37907) 44301 const { kConstruct } = __nccwpck_require__(29174) 44302 44303 // Cache & CacheStorage are tightly coupled with fetch. Even if it may run 44304 // in an older version of Node, it doesn't have any use without fetch. 44305 module.exports.caches = new CacheStorage(kConstruct) 44306 } 44307 44308 if (util.nodeMajor >= 16) { 44309 const { deleteCookie, getCookies, getSetCookies, setCookie } = __nccwpck_require__(41724) 44310 44311 module.exports.deleteCookie = deleteCookie 44312 module.exports.getCookies = getCookies 44313 module.exports.getSetCookies = getSetCookies 44314 module.exports.setCookie = setCookie 44315 44316 const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(685) 44317 44318 module.exports.parseMIMEType = parseMIMEType 44319 module.exports.serializeAMimeType = serializeAMimeType 44320 } 44321 44322 if (util.nodeMajor >= 18 && hasCrypto) { 44323 const { WebSocket } = __nccwpck_require__(54284) 44324 44325 module.exports.WebSocket = WebSocket 44326 } 44327 44328 module.exports.request = makeDispatcher(api.request) 44329 module.exports.stream = makeDispatcher(api.stream) 44330 module.exports.pipeline = makeDispatcher(api.pipeline) 44331 module.exports.connect = makeDispatcher(api.connect) 44332 module.exports.upgrade = makeDispatcher(api.upgrade) 44333 44334 module.exports.MockClient = MockClient 44335 module.exports.MockPool = MockPool 44336 module.exports.MockAgent = MockAgent 44337 module.exports.mockErrors = mockErrors 44338 44339 44340 /***/ }), 44341 44342 /***/ 7890: 44343 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 44344 44345 "use strict"; 44346 44347 44348 const { InvalidArgumentError } = __nccwpck_require__(48045) 44349 const { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = __nccwpck_require__(72785) 44350 const DispatcherBase = __nccwpck_require__(74839) 44351 const Pool = __nccwpck_require__(4634) 44352 const Client = __nccwpck_require__(33598) 44353 const util = __nccwpck_require__(83983) 44354 const createRedirectInterceptor = __nccwpck_require__(38861) 44355 const { WeakRef, FinalizationRegistry } = __nccwpck_require__(56436)() 44356 44357 const kOnConnect = Symbol('onConnect') 44358 const kOnDisconnect = Symbol('onDisconnect') 44359 const kOnConnectionError = Symbol('onConnectionError') 44360 const kMaxRedirections = Symbol('maxRedirections') 44361 const kOnDrain = Symbol('onDrain') 44362 const kFactory = Symbol('factory') 44363 const kFinalizer = Symbol('finalizer') 44364 const kOptions = Symbol('options') 44365 44366 function defaultFactory (origin, opts) { 44367 return opts && opts.connections === 1 44368 ? new Client(origin, opts) 44369 : new Pool(origin, opts) 44370 } 44371 44372 class Agent extends DispatcherBase { 44373 constructor ({ factory = defaultFactory, maxRedirections = 0, connect, ...options } = {}) { 44374 super() 44375 44376 if (typeof factory !== 'function') { 44377 throw new InvalidArgumentError('factory must be a function.') 44378 } 44379 44380 if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') { 44381 throw new InvalidArgumentError('connect must be a function or an object') 44382 } 44383 44384 if (!Number.isInteger(maxRedirections) || maxRedirections < 0) { 44385 throw new InvalidArgumentError('maxRedirections must be a positive number') 44386 } 44387 44388 if (connect && typeof connect !== 'function') { 44389 connect = { ...connect } 44390 } 44391 44392 this[kInterceptors] = options.interceptors && options.interceptors.Agent && Array.isArray(options.interceptors.Agent) 44393 ? options.interceptors.Agent 44394 : [createRedirectInterceptor({ maxRedirections })] 44395 44396 this[kOptions] = { ...util.deepClone(options), connect } 44397 this[kOptions].interceptors = options.interceptors 44398 ? { ...options.interceptors } 44399 : undefined 44400 this[kMaxRedirections] = maxRedirections 44401 this[kFactory] = factory 44402 this[kClients] = new Map() 44403 this[kFinalizer] = new FinalizationRegistry(/* istanbul ignore next: gc is undeterministic */ key => { 44404 const ref = this[kClients].get(key) 44405 if (ref !== undefined && ref.deref() === undefined) { 44406 this[kClients].delete(key) 44407 } 44408 }) 44409 44410 const agent = this 44411 44412 this[kOnDrain] = (origin, targets) => { 44413 agent.emit('drain', origin, [agent, ...targets]) 44414 } 44415 44416 this[kOnConnect] = (origin, targets) => { 44417 agent.emit('connect', origin, [agent, ...targets]) 44418 } 44419 44420 this[kOnDisconnect] = (origin, targets, err) => { 44421 agent.emit('disconnect', origin, [agent, ...targets], err) 44422 } 44423 44424 this[kOnConnectionError] = (origin, targets, err) => { 44425 agent.emit('connectionError', origin, [agent, ...targets], err) 44426 } 44427 } 44428 44429 get [kRunning] () { 44430 let ret = 0 44431 for (const ref of this[kClients].values()) { 44432 const client = ref.deref() 44433 /* istanbul ignore next: gc is undeterministic */ 44434 if (client) { 44435 ret += client[kRunning] 44436 } 44437 } 44438 return ret 44439 } 44440 44441 [kDispatch] (opts, handler) { 44442 let key 44443 if (opts.origin && (typeof opts.origin === 'string' || opts.origin instanceof URL)) { 44444 key = String(opts.origin) 44445 } else { 44446 throw new InvalidArgumentError('opts.origin must be a non-empty string or URL.') 44447 } 44448 44449 const ref = this[kClients].get(key) 44450 44451 let dispatcher = ref ? ref.deref() : null 44452 if (!dispatcher) { 44453 dispatcher = this[kFactory](opts.origin, this[kOptions]) 44454 .on('drain', this[kOnDrain]) 44455 .on('connect', this[kOnConnect]) 44456 .on('disconnect', this[kOnDisconnect]) 44457 .on('connectionError', this[kOnConnectionError]) 44458 44459 this[kClients].set(key, new WeakRef(dispatcher)) 44460 this[kFinalizer].register(dispatcher, key) 44461 } 44462 44463 return dispatcher.dispatch(opts, handler) 44464 } 44465 44466 async [kClose] () { 44467 const closePromises = [] 44468 for (const ref of this[kClients].values()) { 44469 const client = ref.deref() 44470 /* istanbul ignore else: gc is undeterministic */ 44471 if (client) { 44472 closePromises.push(client.close()) 44473 } 44474 } 44475 44476 await Promise.all(closePromises) 44477 } 44478 44479 async [kDestroy] (err) { 44480 const destroyPromises = [] 44481 for (const ref of this[kClients].values()) { 44482 const client = ref.deref() 44483 /* istanbul ignore else: gc is undeterministic */ 44484 if (client) { 44485 destroyPromises.push(client.destroy(err)) 44486 } 44487 } 44488 44489 await Promise.all(destroyPromises) 44490 } 44491 } 44492 44493 module.exports = Agent 44494 44495 44496 /***/ }), 44497 44498 /***/ 7032: 44499 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 44500 44501 const { addAbortListener } = __nccwpck_require__(83983) 44502 const { RequestAbortedError } = __nccwpck_require__(48045) 44503 44504 const kListener = Symbol('kListener') 44505 const kSignal = Symbol('kSignal') 44506 44507 function abort (self) { 44508 if (self.abort) { 44509 self.abort() 44510 } else { 44511 self.onError(new RequestAbortedError()) 44512 } 44513 } 44514 44515 function addSignal (self, signal) { 44516 self[kSignal] = null 44517 self[kListener] = null 44518 44519 if (!signal) { 44520 return 44521 } 44522 44523 if (signal.aborted) { 44524 abort(self) 44525 return 44526 } 44527 44528 self[kSignal] = signal 44529 self[kListener] = () => { 44530 abort(self) 44531 } 44532 44533 addAbortListener(self[kSignal], self[kListener]) 44534 } 44535 44536 function removeSignal (self) { 44537 if (!self[kSignal]) { 44538 return 44539 } 44540 44541 if ('removeEventListener' in self[kSignal]) { 44542 self[kSignal].removeEventListener('abort', self[kListener]) 44543 } else { 44544 self[kSignal].removeListener('abort', self[kListener]) 44545 } 44546 44547 self[kSignal] = null 44548 self[kListener] = null 44549 } 44550 44551 module.exports = { 44552 addSignal, 44553 removeSignal 44554 } 44555 44556 44557 /***/ }), 44558 44559 /***/ 29744: 44560 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 44561 44562 "use strict"; 44563 44564 44565 const { AsyncResource } = __nccwpck_require__(50852) 44566 const { InvalidArgumentError, RequestAbortedError, SocketError } = __nccwpck_require__(48045) 44567 const util = __nccwpck_require__(83983) 44568 const { addSignal, removeSignal } = __nccwpck_require__(7032) 44569 44570 class ConnectHandler extends AsyncResource { 44571 constructor (opts, callback) { 44572 if (!opts || typeof opts !== 'object') { 44573 throw new InvalidArgumentError('invalid opts') 44574 } 44575 44576 if (typeof callback !== 'function') { 44577 throw new InvalidArgumentError('invalid callback') 44578 } 44579 44580 const { signal, opaque, responseHeaders } = opts 44581 44582 if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') { 44583 throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget') 44584 } 44585 44586 super('UNDICI_CONNECT') 44587 44588 this.opaque = opaque || null 44589 this.responseHeaders = responseHeaders || null 44590 this.callback = callback 44591 this.abort = null 44592 44593 addSignal(this, signal) 44594 } 44595 44596 onConnect (abort, context) { 44597 if (!this.callback) { 44598 throw new RequestAbortedError() 44599 } 44600 44601 this.abort = abort 44602 this.context = context 44603 } 44604 44605 onHeaders () { 44606 throw new SocketError('bad connect', null) 44607 } 44608 44609 onUpgrade (statusCode, rawHeaders, socket) { 44610 const { callback, opaque, context } = this 44611 44612 removeSignal(this) 44613 44614 this.callback = null 44615 44616 let headers = rawHeaders 44617 // Indicates is an HTTP2Session 44618 if (headers != null) { 44619 headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) 44620 } 44621 44622 this.runInAsyncScope(callback, null, null, { 44623 statusCode, 44624 headers, 44625 socket, 44626 opaque, 44627 context 44628 }) 44629 } 44630 44631 onError (err) { 44632 const { callback, opaque } = this 44633 44634 removeSignal(this) 44635 44636 if (callback) { 44637 this.callback = null 44638 queueMicrotask(() => { 44639 this.runInAsyncScope(callback, null, err, { opaque }) 44640 }) 44641 } 44642 } 44643 } 44644 44645 function connect (opts, callback) { 44646 if (callback === undefined) { 44647 return new Promise((resolve, reject) => { 44648 connect.call(this, opts, (err, data) => { 44649 return err ? reject(err) : resolve(data) 44650 }) 44651 }) 44652 } 44653 44654 try { 44655 const connectHandler = new ConnectHandler(opts, callback) 44656 this.dispatch({ ...opts, method: 'CONNECT' }, connectHandler) 44657 } catch (err) { 44658 if (typeof callback !== 'function') { 44659 throw err 44660 } 44661 const opaque = opts && opts.opaque 44662 queueMicrotask(() => callback(err, { opaque })) 44663 } 44664 } 44665 44666 module.exports = connect 44667 44668 44669 /***/ }), 44670 44671 /***/ 28752: 44672 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 44673 44674 "use strict"; 44675 44676 44677 const { 44678 Readable, 44679 Duplex, 44680 PassThrough 44681 } = __nccwpck_require__(12781) 44682 const { 44683 InvalidArgumentError, 44684 InvalidReturnValueError, 44685 RequestAbortedError 44686 } = __nccwpck_require__(48045) 44687 const util = __nccwpck_require__(83983) 44688 const { AsyncResource } = __nccwpck_require__(50852) 44689 const { addSignal, removeSignal } = __nccwpck_require__(7032) 44690 const assert = __nccwpck_require__(39491) 44691 44692 const kResume = Symbol('resume') 44693 44694 class PipelineRequest extends Readable { 44695 constructor () { 44696 super({ autoDestroy: true }) 44697 44698 this[kResume] = null 44699 } 44700 44701 _read () { 44702 const { [kResume]: resume } = this 44703 44704 if (resume) { 44705 this[kResume] = null 44706 resume() 44707 } 44708 } 44709 44710 _destroy (err, callback) { 44711 this._read() 44712 44713 callback(err) 44714 } 44715 } 44716 44717 class PipelineResponse extends Readable { 44718 constructor (resume) { 44719 super({ autoDestroy: true }) 44720 this[kResume] = resume 44721 } 44722 44723 _read () { 44724 this[kResume]() 44725 } 44726 44727 _destroy (err, callback) { 44728 if (!err && !this._readableState.endEmitted) { 44729 err = new RequestAbortedError() 44730 } 44731 44732 callback(err) 44733 } 44734 } 44735 44736 class PipelineHandler extends AsyncResource { 44737 constructor (opts, handler) { 44738 if (!opts || typeof opts !== 'object') { 44739 throw new InvalidArgumentError('invalid opts') 44740 } 44741 44742 if (typeof handler !== 'function') { 44743 throw new InvalidArgumentError('invalid handler') 44744 } 44745 44746 const { signal, method, opaque, onInfo, responseHeaders } = opts 44747 44748 if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') { 44749 throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget') 44750 } 44751 44752 if (method === 'CONNECT') { 44753 throw new InvalidArgumentError('invalid method') 44754 } 44755 44756 if (onInfo && typeof onInfo !== 'function') { 44757 throw new InvalidArgumentError('invalid onInfo callback') 44758 } 44759 44760 super('UNDICI_PIPELINE') 44761 44762 this.opaque = opaque || null 44763 this.responseHeaders = responseHeaders || null 44764 this.handler = handler 44765 this.abort = null 44766 this.context = null 44767 this.onInfo = onInfo || null 44768 44769 this.req = new PipelineRequest().on('error', util.nop) 44770 44771 this.ret = new Duplex({ 44772 readableObjectMode: opts.objectMode, 44773 autoDestroy: true, 44774 read: () => { 44775 const { body } = this 44776 44777 if (body && body.resume) { 44778 body.resume() 44779 } 44780 }, 44781 write: (chunk, encoding, callback) => { 44782 const { req } = this 44783 44784 if (req.push(chunk, encoding) || req._readableState.destroyed) { 44785 callback() 44786 } else { 44787 req[kResume] = callback 44788 } 44789 }, 44790 destroy: (err, callback) => { 44791 const { body, req, res, ret, abort } = this 44792 44793 if (!err && !ret._readableState.endEmitted) { 44794 err = new RequestAbortedError() 44795 } 44796 44797 if (abort && err) { 44798 abort() 44799 } 44800 44801 util.destroy(body, err) 44802 util.destroy(req, err) 44803 util.destroy(res, err) 44804 44805 removeSignal(this) 44806 44807 callback(err) 44808 } 44809 }).on('prefinish', () => { 44810 const { req } = this 44811 44812 // Node < 15 does not call _final in same tick. 44813 req.push(null) 44814 }) 44815 44816 this.res = null 44817 44818 addSignal(this, signal) 44819 } 44820 44821 onConnect (abort, context) { 44822 const { ret, res } = this 44823 44824 assert(!res, 'pipeline cannot be retried') 44825 44826 if (ret.destroyed) { 44827 throw new RequestAbortedError() 44828 } 44829 44830 this.abort = abort 44831 this.context = context 44832 } 44833 44834 onHeaders (statusCode, rawHeaders, resume) { 44835 const { opaque, handler, context } = this 44836 44837 if (statusCode < 200) { 44838 if (this.onInfo) { 44839 const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) 44840 this.onInfo({ statusCode, headers }) 44841 } 44842 return 44843 } 44844 44845 this.res = new PipelineResponse(resume) 44846 44847 let body 44848 try { 44849 this.handler = null 44850 const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) 44851 body = this.runInAsyncScope(handler, null, { 44852 statusCode, 44853 headers, 44854 opaque, 44855 body: this.res, 44856 context 44857 }) 44858 } catch (err) { 44859 this.res.on('error', util.nop) 44860 throw err 44861 } 44862 44863 if (!body || typeof body.on !== 'function') { 44864 throw new InvalidReturnValueError('expected Readable') 44865 } 44866 44867 body 44868 .on('data', (chunk) => { 44869 const { ret, body } = this 44870 44871 if (!ret.push(chunk) && body.pause) { 44872 body.pause() 44873 } 44874 }) 44875 .on('error', (err) => { 44876 const { ret } = this 44877 44878 util.destroy(ret, err) 44879 }) 44880 .on('end', () => { 44881 const { ret } = this 44882 44883 ret.push(null) 44884 }) 44885 .on('close', () => { 44886 const { ret } = this 44887 44888 if (!ret._readableState.ended) { 44889 util.destroy(ret, new RequestAbortedError()) 44890 } 44891 }) 44892 44893 this.body = body 44894 } 44895 44896 onData (chunk) { 44897 const { res } = this 44898 return res.push(chunk) 44899 } 44900 44901 onComplete (trailers) { 44902 const { res } = this 44903 res.push(null) 44904 } 44905 44906 onError (err) { 44907 const { ret } = this 44908 this.handler = null 44909 util.destroy(ret, err) 44910 } 44911 } 44912 44913 function pipeline (opts, handler) { 44914 try { 44915 const pipelineHandler = new PipelineHandler(opts, handler) 44916 this.dispatch({ ...opts, body: pipelineHandler.req }, pipelineHandler) 44917 return pipelineHandler.ret 44918 } catch (err) { 44919 return new PassThrough().destroy(err) 44920 } 44921 } 44922 44923 module.exports = pipeline 44924 44925 44926 /***/ }), 44927 44928 /***/ 55448: 44929 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 44930 44931 "use strict"; 44932 44933 44934 const Readable = __nccwpck_require__(73858) 44935 const { 44936 InvalidArgumentError, 44937 RequestAbortedError 44938 } = __nccwpck_require__(48045) 44939 const util = __nccwpck_require__(83983) 44940 const { getResolveErrorBodyCallback } = __nccwpck_require__(77474) 44941 const { AsyncResource } = __nccwpck_require__(50852) 44942 const { addSignal, removeSignal } = __nccwpck_require__(7032) 44943 44944 class RequestHandler extends AsyncResource { 44945 constructor (opts, callback) { 44946 if (!opts || typeof opts !== 'object') { 44947 throw new InvalidArgumentError('invalid opts') 44948 } 44949 44950 const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError, highWaterMark } = opts 44951 44952 try { 44953 if (typeof callback !== 'function') { 44954 throw new InvalidArgumentError('invalid callback') 44955 } 44956 44957 if (highWaterMark && (typeof highWaterMark !== 'number' || highWaterMark < 0)) { 44958 throw new InvalidArgumentError('invalid highWaterMark') 44959 } 44960 44961 if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') { 44962 throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget') 44963 } 44964 44965 if (method === 'CONNECT') { 44966 throw new InvalidArgumentError('invalid method') 44967 } 44968 44969 if (onInfo && typeof onInfo !== 'function') { 44970 throw new InvalidArgumentError('invalid onInfo callback') 44971 } 44972 44973 super('UNDICI_REQUEST') 44974 } catch (err) { 44975 if (util.isStream(body)) { 44976 util.destroy(body.on('error', util.nop), err) 44977 } 44978 throw err 44979 } 44980 44981 this.responseHeaders = responseHeaders || null 44982 this.opaque = opaque || null 44983 this.callback = callback 44984 this.res = null 44985 this.abort = null 44986 this.body = body 44987 this.trailers = {} 44988 this.context = null 44989 this.onInfo = onInfo || null 44990 this.throwOnError = throwOnError 44991 this.highWaterMark = highWaterMark 44992 44993 if (util.isStream(body)) { 44994 body.on('error', (err) => { 44995 this.onError(err) 44996 }) 44997 } 44998 44999 addSignal(this, signal) 45000 } 45001 45002 onConnect (abort, context) { 45003 if (!this.callback) { 45004 throw new RequestAbortedError() 45005 } 45006 45007 this.abort = abort 45008 this.context = context 45009 } 45010 45011 onHeaders (statusCode, rawHeaders, resume, statusMessage) { 45012 const { callback, opaque, abort, context, responseHeaders, highWaterMark } = this 45013 45014 const headers = responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) 45015 45016 if (statusCode < 200) { 45017 if (this.onInfo) { 45018 this.onInfo({ statusCode, headers }) 45019 } 45020 return 45021 } 45022 45023 const parsedHeaders = responseHeaders === 'raw' ? util.parseHeaders(rawHeaders) : headers 45024 const contentType = parsedHeaders['content-type'] 45025 const body = new Readable({ resume, abort, contentType, highWaterMark }) 45026 45027 this.callback = null 45028 this.res = body 45029 if (callback !== null) { 45030 if (this.throwOnError && statusCode >= 400) { 45031 this.runInAsyncScope(getResolveErrorBodyCallback, null, 45032 { callback, body, contentType, statusCode, statusMessage, headers } 45033 ) 45034 } else { 45035 this.runInAsyncScope(callback, null, null, { 45036 statusCode, 45037 headers, 45038 trailers: this.trailers, 45039 opaque, 45040 body, 45041 context 45042 }) 45043 } 45044 } 45045 } 45046 45047 onData (chunk) { 45048 const { res } = this 45049 return res.push(chunk) 45050 } 45051 45052 onComplete (trailers) { 45053 const { res } = this 45054 45055 removeSignal(this) 45056 45057 util.parseHeaders(trailers, this.trailers) 45058 45059 res.push(null) 45060 } 45061 45062 onError (err) { 45063 const { res, callback, body, opaque } = this 45064 45065 removeSignal(this) 45066 45067 if (callback) { 45068 // TODO: Does this need queueMicrotask? 45069 this.callback = null 45070 queueMicrotask(() => { 45071 this.runInAsyncScope(callback, null, err, { opaque }) 45072 }) 45073 } 45074 45075 if (res) { 45076 this.res = null 45077 // Ensure all queued handlers are invoked before destroying res. 45078 queueMicrotask(() => { 45079 util.destroy(res, err) 45080 }) 45081 } 45082 45083 if (body) { 45084 this.body = null 45085 util.destroy(body, err) 45086 } 45087 } 45088 } 45089 45090 function request (opts, callback) { 45091 if (callback === undefined) { 45092 return new Promise((resolve, reject) => { 45093 request.call(this, opts, (err, data) => { 45094 return err ? reject(err) : resolve(data) 45095 }) 45096 }) 45097 } 45098 45099 try { 45100 this.dispatch(opts, new RequestHandler(opts, callback)) 45101 } catch (err) { 45102 if (typeof callback !== 'function') { 45103 throw err 45104 } 45105 const opaque = opts && opts.opaque 45106 queueMicrotask(() => callback(err, { opaque })) 45107 } 45108 } 45109 45110 module.exports = request 45111 module.exports.RequestHandler = RequestHandler 45112 45113 45114 /***/ }), 45115 45116 /***/ 75395: 45117 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 45118 45119 "use strict"; 45120 45121 45122 const { finished, PassThrough } = __nccwpck_require__(12781) 45123 const { 45124 InvalidArgumentError, 45125 InvalidReturnValueError, 45126 RequestAbortedError 45127 } = __nccwpck_require__(48045) 45128 const util = __nccwpck_require__(83983) 45129 const { getResolveErrorBodyCallback } = __nccwpck_require__(77474) 45130 const { AsyncResource } = __nccwpck_require__(50852) 45131 const { addSignal, removeSignal } = __nccwpck_require__(7032) 45132 45133 class StreamHandler extends AsyncResource { 45134 constructor (opts, factory, callback) { 45135 if (!opts || typeof opts !== 'object') { 45136 throw new InvalidArgumentError('invalid opts') 45137 } 45138 45139 const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError } = opts 45140 45141 try { 45142 if (typeof callback !== 'function') { 45143 throw new InvalidArgumentError('invalid callback') 45144 } 45145 45146 if (typeof factory !== 'function') { 45147 throw new InvalidArgumentError('invalid factory') 45148 } 45149 45150 if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') { 45151 throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget') 45152 } 45153 45154 if (method === 'CONNECT') { 45155 throw new InvalidArgumentError('invalid method') 45156 } 45157 45158 if (onInfo && typeof onInfo !== 'function') { 45159 throw new InvalidArgumentError('invalid onInfo callback') 45160 } 45161 45162 super('UNDICI_STREAM') 45163 } catch (err) { 45164 if (util.isStream(body)) { 45165 util.destroy(body.on('error', util.nop), err) 45166 } 45167 throw err 45168 } 45169 45170 this.responseHeaders = responseHeaders || null 45171 this.opaque = opaque || null 45172 this.factory = factory 45173 this.callback = callback 45174 this.res = null 45175 this.abort = null 45176 this.context = null 45177 this.trailers = null 45178 this.body = body 45179 this.onInfo = onInfo || null 45180 this.throwOnError = throwOnError || false 45181 45182 if (util.isStream(body)) { 45183 body.on('error', (err) => { 45184 this.onError(err) 45185 }) 45186 } 45187 45188 addSignal(this, signal) 45189 } 45190 45191 onConnect (abort, context) { 45192 if (!this.callback) { 45193 throw new RequestAbortedError() 45194 } 45195 45196 this.abort = abort 45197 this.context = context 45198 } 45199 45200 onHeaders (statusCode, rawHeaders, resume, statusMessage) { 45201 const { factory, opaque, context, callback, responseHeaders } = this 45202 45203 const headers = responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) 45204 45205 if (statusCode < 200) { 45206 if (this.onInfo) { 45207 this.onInfo({ statusCode, headers }) 45208 } 45209 return 45210 } 45211 45212 this.factory = null 45213 45214 let res 45215 45216 if (this.throwOnError && statusCode >= 400) { 45217 const parsedHeaders = responseHeaders === 'raw' ? util.parseHeaders(rawHeaders) : headers 45218 const contentType = parsedHeaders['content-type'] 45219 res = new PassThrough() 45220 45221 this.callback = null 45222 this.runInAsyncScope(getResolveErrorBodyCallback, null, 45223 { callback, body: res, contentType, statusCode, statusMessage, headers } 45224 ) 45225 } else { 45226 if (factory === null) { 45227 return 45228 } 45229 45230 res = this.runInAsyncScope(factory, null, { 45231 statusCode, 45232 headers, 45233 opaque, 45234 context 45235 }) 45236 45237 if ( 45238 !res || 45239 typeof res.write !== 'function' || 45240 typeof res.end !== 'function' || 45241 typeof res.on !== 'function' 45242 ) { 45243 throw new InvalidReturnValueError('expected Writable') 45244 } 45245 45246 // TODO: Avoid finished. It registers an unnecessary amount of listeners. 45247 finished(res, { readable: false }, (err) => { 45248 const { callback, res, opaque, trailers, abort } = this 45249 45250 this.res = null 45251 if (err || !res.readable) { 45252 util.destroy(res, err) 45253 } 45254 45255 this.callback = null 45256 this.runInAsyncScope(callback, null, err || null, { opaque, trailers }) 45257 45258 if (err) { 45259 abort() 45260 } 45261 }) 45262 } 45263 45264 res.on('drain', resume) 45265 45266 this.res = res 45267 45268 const needDrain = res.writableNeedDrain !== undefined 45269 ? res.writableNeedDrain 45270 : res._writableState && res._writableState.needDrain 45271 45272 return needDrain !== true 45273 } 45274 45275 onData (chunk) { 45276 const { res } = this 45277 45278 return res ? res.write(chunk) : true 45279 } 45280 45281 onComplete (trailers) { 45282 const { res } = this 45283 45284 removeSignal(this) 45285 45286 if (!res) { 45287 return 45288 } 45289 45290 this.trailers = util.parseHeaders(trailers) 45291 45292 res.end() 45293 } 45294 45295 onError (err) { 45296 const { res, callback, opaque, body } = this 45297 45298 removeSignal(this) 45299 45300 this.factory = null 45301 45302 if (res) { 45303 this.res = null 45304 util.destroy(res, err) 45305 } else if (callback) { 45306 this.callback = null 45307 queueMicrotask(() => { 45308 this.runInAsyncScope(callback, null, err, { opaque }) 45309 }) 45310 } 45311 45312 if (body) { 45313 this.body = null 45314 util.destroy(body, err) 45315 } 45316 } 45317 } 45318 45319 function stream (opts, factory, callback) { 45320 if (callback === undefined) { 45321 return new Promise((resolve, reject) => { 45322 stream.call(this, opts, factory, (err, data) => { 45323 return err ? reject(err) : resolve(data) 45324 }) 45325 }) 45326 } 45327 45328 try { 45329 this.dispatch(opts, new StreamHandler(opts, factory, callback)) 45330 } catch (err) { 45331 if (typeof callback !== 'function') { 45332 throw err 45333 } 45334 const opaque = opts && opts.opaque 45335 queueMicrotask(() => callback(err, { opaque })) 45336 } 45337 } 45338 45339 module.exports = stream 45340 45341 45342 /***/ }), 45343 45344 /***/ 36923: 45345 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 45346 45347 "use strict"; 45348 45349 45350 const { InvalidArgumentError, RequestAbortedError, SocketError } = __nccwpck_require__(48045) 45351 const { AsyncResource } = __nccwpck_require__(50852) 45352 const util = __nccwpck_require__(83983) 45353 const { addSignal, removeSignal } = __nccwpck_require__(7032) 45354 const assert = __nccwpck_require__(39491) 45355 45356 class UpgradeHandler extends AsyncResource { 45357 constructor (opts, callback) { 45358 if (!opts || typeof opts !== 'object') { 45359 throw new InvalidArgumentError('invalid opts') 45360 } 45361 45362 if (typeof callback !== 'function') { 45363 throw new InvalidArgumentError('invalid callback') 45364 } 45365 45366 const { signal, opaque, responseHeaders } = opts 45367 45368 if (signal && typeof signal.on !== 'function' && typeof signal.addEventListener !== 'function') { 45369 throw new InvalidArgumentError('signal must be an EventEmitter or EventTarget') 45370 } 45371 45372 super('UNDICI_UPGRADE') 45373 45374 this.responseHeaders = responseHeaders || null 45375 this.opaque = opaque || null 45376 this.callback = callback 45377 this.abort = null 45378 this.context = null 45379 45380 addSignal(this, signal) 45381 } 45382 45383 onConnect (abort, context) { 45384 if (!this.callback) { 45385 throw new RequestAbortedError() 45386 } 45387 45388 this.abort = abort 45389 this.context = null 45390 } 45391 45392 onHeaders () { 45393 throw new SocketError('bad upgrade', null) 45394 } 45395 45396 onUpgrade (statusCode, rawHeaders, socket) { 45397 const { callback, opaque, context } = this 45398 45399 assert.strictEqual(statusCode, 101) 45400 45401 removeSignal(this) 45402 45403 this.callback = null 45404 const headers = this.responseHeaders === 'raw' ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders) 45405 this.runInAsyncScope(callback, null, null, { 45406 headers, 45407 socket, 45408 opaque, 45409 context 45410 }) 45411 } 45412 45413 onError (err) { 45414 const { callback, opaque } = this 45415 45416 removeSignal(this) 45417 45418 if (callback) { 45419 this.callback = null 45420 queueMicrotask(() => { 45421 this.runInAsyncScope(callback, null, err, { opaque }) 45422 }) 45423 } 45424 } 45425 } 45426 45427 function upgrade (opts, callback) { 45428 if (callback === undefined) { 45429 return new Promise((resolve, reject) => { 45430 upgrade.call(this, opts, (err, data) => { 45431 return err ? reject(err) : resolve(data) 45432 }) 45433 }) 45434 } 45435 45436 try { 45437 const upgradeHandler = new UpgradeHandler(opts, callback) 45438 this.dispatch({ 45439 ...opts, 45440 method: opts.method || 'GET', 45441 upgrade: opts.protocol || 'Websocket' 45442 }, upgradeHandler) 45443 } catch (err) { 45444 if (typeof callback !== 'function') { 45445 throw err 45446 } 45447 const opaque = opts && opts.opaque 45448 queueMicrotask(() => callback(err, { opaque })) 45449 } 45450 } 45451 45452 module.exports = upgrade 45453 45454 45455 /***/ }), 45456 45457 /***/ 44059: 45458 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 45459 45460 "use strict"; 45461 45462 45463 module.exports.request = __nccwpck_require__(55448) 45464 module.exports.stream = __nccwpck_require__(75395) 45465 module.exports.pipeline = __nccwpck_require__(28752) 45466 module.exports.upgrade = __nccwpck_require__(36923) 45467 module.exports.connect = __nccwpck_require__(29744) 45468 45469 45470 /***/ }), 45471 45472 /***/ 73858: 45473 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 45474 45475 "use strict"; 45476 // Ported from https://github.com/nodejs/undici/pull/907 45477 45478 45479 45480 const assert = __nccwpck_require__(39491) 45481 const { Readable } = __nccwpck_require__(12781) 45482 const { RequestAbortedError, NotSupportedError, InvalidArgumentError } = __nccwpck_require__(48045) 45483 const util = __nccwpck_require__(83983) 45484 const { ReadableStreamFrom, toUSVString } = __nccwpck_require__(83983) 45485 45486 let Blob 45487 45488 const kConsume = Symbol('kConsume') 45489 const kReading = Symbol('kReading') 45490 const kBody = Symbol('kBody') 45491 const kAbort = Symbol('abort') 45492 const kContentType = Symbol('kContentType') 45493 45494 const noop = () => {} 45495 45496 module.exports = class BodyReadable extends Readable { 45497 constructor ({ 45498 resume, 45499 abort, 45500 contentType = '', 45501 highWaterMark = 64 * 1024 // Same as nodejs fs streams. 45502 }) { 45503 super({ 45504 autoDestroy: true, 45505 read: resume, 45506 highWaterMark 45507 }) 45508 45509 this._readableState.dataEmitted = false 45510 45511 this[kAbort] = abort 45512 this[kConsume] = null 45513 this[kBody] = null 45514 this[kContentType] = contentType 45515 45516 // Is stream being consumed through Readable API? 45517 // This is an optimization so that we avoid checking 45518 // for 'data' and 'readable' listeners in the hot path 45519 // inside push(). 45520 this[kReading] = false 45521 } 45522 45523 destroy (err) { 45524 if (this.destroyed) { 45525 // Node < 16 45526 return this 45527 } 45528 45529 if (!err && !this._readableState.endEmitted) { 45530 err = new RequestAbortedError() 45531 } 45532 45533 if (err) { 45534 this[kAbort]() 45535 } 45536 45537 return super.destroy(err) 45538 } 45539 45540 emit (ev, ...args) { 45541 if (ev === 'data') { 45542 // Node < 16.7 45543 this._readableState.dataEmitted = true 45544 } else if (ev === 'error') { 45545 // Node < 16 45546 this._readableState.errorEmitted = true 45547 } 45548 return super.emit(ev, ...args) 45549 } 45550 45551 on (ev, ...args) { 45552 if (ev === 'data' || ev === 'readable') { 45553 this[kReading] = true 45554 } 45555 return super.on(ev, ...args) 45556 } 45557 45558 addListener (ev, ...args) { 45559 return this.on(ev, ...args) 45560 } 45561 45562 off (ev, ...args) { 45563 const ret = super.off(ev, ...args) 45564 if (ev === 'data' || ev === 'readable') { 45565 this[kReading] = ( 45566 this.listenerCount('data') > 0 || 45567 this.listenerCount('readable') > 0 45568 ) 45569 } 45570 return ret 45571 } 45572 45573 removeListener (ev, ...args) { 45574 return this.off(ev, ...args) 45575 } 45576 45577 push (chunk) { 45578 if (this[kConsume] && chunk !== null && this.readableLength === 0) { 45579 consumePush(this[kConsume], chunk) 45580 return this[kReading] ? super.push(chunk) : true 45581 } 45582 return super.push(chunk) 45583 } 45584 45585 // https://fetch.spec.whatwg.org/#dom-body-text 45586 async text () { 45587 return consume(this, 'text') 45588 } 45589 45590 // https://fetch.spec.whatwg.org/#dom-body-json 45591 async json () { 45592 return consume(this, 'json') 45593 } 45594 45595 // https://fetch.spec.whatwg.org/#dom-body-blob 45596 async blob () { 45597 return consume(this, 'blob') 45598 } 45599 45600 // https://fetch.spec.whatwg.org/#dom-body-arraybuffer 45601 async arrayBuffer () { 45602 return consume(this, 'arrayBuffer') 45603 } 45604 45605 // https://fetch.spec.whatwg.org/#dom-body-formdata 45606 async formData () { 45607 // TODO: Implement. 45608 throw new NotSupportedError() 45609 } 45610 45611 // https://fetch.spec.whatwg.org/#dom-body-bodyused 45612 get bodyUsed () { 45613 return util.isDisturbed(this) 45614 } 45615 45616 // https://fetch.spec.whatwg.org/#dom-body-body 45617 get body () { 45618 if (!this[kBody]) { 45619 this[kBody] = ReadableStreamFrom(this) 45620 if (this[kConsume]) { 45621 // TODO: Is this the best way to force a lock? 45622 this[kBody].getReader() // Ensure stream is locked. 45623 assert(this[kBody].locked) 45624 } 45625 } 45626 return this[kBody] 45627 } 45628 45629 dump (opts) { 45630 let limit = opts && Number.isFinite(opts.limit) ? opts.limit : 262144 45631 const signal = opts && opts.signal 45632 45633 if (signal) { 45634 try { 45635 if (typeof signal !== 'object' || !('aborted' in signal)) { 45636 throw new InvalidArgumentError('signal must be an AbortSignal') 45637 } 45638 util.throwIfAborted(signal) 45639 } catch (err) { 45640 return Promise.reject(err) 45641 } 45642 } 45643 45644 if (this.closed) { 45645 return Promise.resolve(null) 45646 } 45647 45648 return new Promise((resolve, reject) => { 45649 const signalListenerCleanup = signal 45650 ? util.addAbortListener(signal, () => { 45651 this.destroy() 45652 }) 45653 : noop 45654 45655 this 45656 .on('close', function () { 45657 signalListenerCleanup() 45658 if (signal && signal.aborted) { 45659 reject(signal.reason || Object.assign(new Error('The operation was aborted'), { name: 'AbortError' })) 45660 } else { 45661 resolve(null) 45662 } 45663 }) 45664 .on('error', noop) 45665 .on('data', function (chunk) { 45666 limit -= chunk.length 45667 if (limit <= 0) { 45668 this.destroy() 45669 } 45670 }) 45671 .resume() 45672 }) 45673 } 45674 } 45675 45676 // https://streams.spec.whatwg.org/#readablestream-locked 45677 function isLocked (self) { 45678 // Consume is an implicit lock. 45679 return (self[kBody] && self[kBody].locked === true) || self[kConsume] 45680 } 45681 45682 // https://fetch.spec.whatwg.org/#body-unusable 45683 function isUnusable (self) { 45684 return util.isDisturbed(self) || isLocked(self) 45685 } 45686 45687 async function consume (stream, type) { 45688 if (isUnusable(stream)) { 45689 throw new TypeError('unusable') 45690 } 45691 45692 assert(!stream[kConsume]) 45693 45694 return new Promise((resolve, reject) => { 45695 stream[kConsume] = { 45696 type, 45697 stream, 45698 resolve, 45699 reject, 45700 length: 0, 45701 body: [] 45702 } 45703 45704 stream 45705 .on('error', function (err) { 45706 consumeFinish(this[kConsume], err) 45707 }) 45708 .on('close', function () { 45709 if (this[kConsume].body !== null) { 45710 consumeFinish(this[kConsume], new RequestAbortedError()) 45711 } 45712 }) 45713 45714 process.nextTick(consumeStart, stream[kConsume]) 45715 }) 45716 } 45717 45718 function consumeStart (consume) { 45719 if (consume.body === null) { 45720 return 45721 } 45722 45723 const { _readableState: state } = consume.stream 45724 45725 for (const chunk of state.buffer) { 45726 consumePush(consume, chunk) 45727 } 45728 45729 if (state.endEmitted) { 45730 consumeEnd(this[kConsume]) 45731 } else { 45732 consume.stream.on('end', function () { 45733 consumeEnd(this[kConsume]) 45734 }) 45735 } 45736 45737 consume.stream.resume() 45738 45739 while (consume.stream.read() != null) { 45740 // Loop 45741 } 45742 } 45743 45744 function consumeEnd (consume) { 45745 const { type, body, resolve, stream, length } = consume 45746 45747 try { 45748 if (type === 'text') { 45749 resolve(toUSVString(Buffer.concat(body))) 45750 } else if (type === 'json') { 45751 resolve(JSON.parse(Buffer.concat(body))) 45752 } else if (type === 'arrayBuffer') { 45753 const dst = new Uint8Array(length) 45754 45755 let pos = 0 45756 for (const buf of body) { 45757 dst.set(buf, pos) 45758 pos += buf.byteLength 45759 } 45760 45761 resolve(dst.buffer) 45762 } else if (type === 'blob') { 45763 if (!Blob) { 45764 Blob = (__nccwpck_require__(14300).Blob) 45765 } 45766 resolve(new Blob(body, { type: stream[kContentType] })) 45767 } 45768 45769 consumeFinish(consume) 45770 } catch (err) { 45771 stream.destroy(err) 45772 } 45773 } 45774 45775 function consumePush (consume, chunk) { 45776 consume.length += chunk.length 45777 consume.body.push(chunk) 45778 } 45779 45780 function consumeFinish (consume, err) { 45781 if (consume.body === null) { 45782 return 45783 } 45784 45785 if (err) { 45786 consume.reject(err) 45787 } else { 45788 consume.resolve() 45789 } 45790 45791 consume.type = null 45792 consume.stream = null 45793 consume.resolve = null 45794 consume.reject = null 45795 consume.length = 0 45796 consume.body = null 45797 } 45798 45799 45800 /***/ }), 45801 45802 /***/ 77474: 45803 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 45804 45805 const assert = __nccwpck_require__(39491) 45806 const { 45807 ResponseStatusCodeError 45808 } = __nccwpck_require__(48045) 45809 const { toUSVString } = __nccwpck_require__(83983) 45810 45811 async function getResolveErrorBodyCallback ({ callback, body, contentType, statusCode, statusMessage, headers }) { 45812 assert(body) 45813 45814 let chunks = [] 45815 let limit = 0 45816 45817 for await (const chunk of body) { 45818 chunks.push(chunk) 45819 limit += chunk.length 45820 if (limit > 128 * 1024) { 45821 chunks = null 45822 break 45823 } 45824 } 45825 45826 if (statusCode === 204 || !contentType || !chunks) { 45827 process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers)) 45828 return 45829 } 45830 45831 try { 45832 if (contentType.startsWith('application/json')) { 45833 const payload = JSON.parse(toUSVString(Buffer.concat(chunks))) 45834 process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers, payload)) 45835 return 45836 } 45837 45838 if (contentType.startsWith('text/')) { 45839 const payload = toUSVString(Buffer.concat(chunks)) 45840 process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers, payload)) 45841 return 45842 } 45843 } catch (err) { 45844 // Process in a fallback if error 45845 } 45846 45847 process.nextTick(callback, new ResponseStatusCodeError(`Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ''}`, statusCode, headers)) 45848 } 45849 45850 module.exports = { getResolveErrorBodyCallback } 45851 45852 45853 /***/ }), 45854 45855 /***/ 37931: 45856 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 45857 45858 "use strict"; 45859 45860 45861 const { 45862 BalancedPoolMissingUpstreamError, 45863 InvalidArgumentError 45864 } = __nccwpck_require__(48045) 45865 const { 45866 PoolBase, 45867 kClients, 45868 kNeedDrain, 45869 kAddClient, 45870 kRemoveClient, 45871 kGetDispatcher 45872 } = __nccwpck_require__(73198) 45873 const Pool = __nccwpck_require__(4634) 45874 const { kUrl, kInterceptors } = __nccwpck_require__(72785) 45875 const { parseOrigin } = __nccwpck_require__(83983) 45876 const kFactory = Symbol('factory') 45877 45878 const kOptions = Symbol('options') 45879 const kGreatestCommonDivisor = Symbol('kGreatestCommonDivisor') 45880 const kCurrentWeight = Symbol('kCurrentWeight') 45881 const kIndex = Symbol('kIndex') 45882 const kWeight = Symbol('kWeight') 45883 const kMaxWeightPerServer = Symbol('kMaxWeightPerServer') 45884 const kErrorPenalty = Symbol('kErrorPenalty') 45885 45886 function getGreatestCommonDivisor (a, b) { 45887 if (b === 0) return a 45888 return getGreatestCommonDivisor(b, a % b) 45889 } 45890 45891 function defaultFactory (origin, opts) { 45892 return new Pool(origin, opts) 45893 } 45894 45895 class BalancedPool extends PoolBase { 45896 constructor (upstreams = [], { factory = defaultFactory, ...opts } = {}) { 45897 super() 45898 45899 this[kOptions] = opts 45900 this[kIndex] = -1 45901 this[kCurrentWeight] = 0 45902 45903 this[kMaxWeightPerServer] = this[kOptions].maxWeightPerServer || 100 45904 this[kErrorPenalty] = this[kOptions].errorPenalty || 15 45905 45906 if (!Array.isArray(upstreams)) { 45907 upstreams = [upstreams] 45908 } 45909 45910 if (typeof factory !== 'function') { 45911 throw new InvalidArgumentError('factory must be a function.') 45912 } 45913 45914 this[kInterceptors] = opts.interceptors && opts.interceptors.BalancedPool && Array.isArray(opts.interceptors.BalancedPool) 45915 ? opts.interceptors.BalancedPool 45916 : [] 45917 this[kFactory] = factory 45918 45919 for (const upstream of upstreams) { 45920 this.addUpstream(upstream) 45921 } 45922 this._updateBalancedPoolStats() 45923 } 45924 45925 addUpstream (upstream) { 45926 const upstreamOrigin = parseOrigin(upstream).origin 45927 45928 if (this[kClients].find((pool) => ( 45929 pool[kUrl].origin === upstreamOrigin && 45930 pool.closed !== true && 45931 pool.destroyed !== true 45932 ))) { 45933 return this 45934 } 45935 const pool = this[kFactory](upstreamOrigin, Object.assign({}, this[kOptions])) 45936 45937 this[kAddClient](pool) 45938 pool.on('connect', () => { 45939 pool[kWeight] = Math.min(this[kMaxWeightPerServer], pool[kWeight] + this[kErrorPenalty]) 45940 }) 45941 45942 pool.on('connectionError', () => { 45943 pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]) 45944 this._updateBalancedPoolStats() 45945 }) 45946 45947 pool.on('disconnect', (...args) => { 45948 const err = args[2] 45949 if (err && err.code === 'UND_ERR_SOCKET') { 45950 // decrease the weight of the pool. 45951 pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]) 45952 this._updateBalancedPoolStats() 45953 } 45954 }) 45955 45956 for (const client of this[kClients]) { 45957 client[kWeight] = this[kMaxWeightPerServer] 45958 } 45959 45960 this._updateBalancedPoolStats() 45961 45962 return this 45963 } 45964 45965 _updateBalancedPoolStats () { 45966 this[kGreatestCommonDivisor] = this[kClients].map(p => p[kWeight]).reduce(getGreatestCommonDivisor, 0) 45967 } 45968 45969 removeUpstream (upstream) { 45970 const upstreamOrigin = parseOrigin(upstream).origin 45971 45972 const pool = this[kClients].find((pool) => ( 45973 pool[kUrl].origin === upstreamOrigin && 45974 pool.closed !== true && 45975 pool.destroyed !== true 45976 )) 45977 45978 if (pool) { 45979 this[kRemoveClient](pool) 45980 } 45981 45982 return this 45983 } 45984 45985 get upstreams () { 45986 return this[kClients] 45987 .filter(dispatcher => dispatcher.closed !== true && dispatcher.destroyed !== true) 45988 .map((p) => p[kUrl].origin) 45989 } 45990 45991 [kGetDispatcher] () { 45992 // We validate that pools is greater than 0, 45993 // otherwise we would have to wait until an upstream 45994 // is added, which might never happen. 45995 if (this[kClients].length === 0) { 45996 throw new BalancedPoolMissingUpstreamError() 45997 } 45998 45999 const dispatcher = this[kClients].find(dispatcher => ( 46000 !dispatcher[kNeedDrain] && 46001 dispatcher.closed !== true && 46002 dispatcher.destroyed !== true 46003 )) 46004 46005 if (!dispatcher) { 46006 return 46007 } 46008 46009 const allClientsBusy = this[kClients].map(pool => pool[kNeedDrain]).reduce((a, b) => a && b, true) 46010 46011 if (allClientsBusy) { 46012 return 46013 } 46014 46015 let counter = 0 46016 46017 let maxWeightIndex = this[kClients].findIndex(pool => !pool[kNeedDrain]) 46018 46019 while (counter++ < this[kClients].length) { 46020 this[kIndex] = (this[kIndex] + 1) % this[kClients].length 46021 const pool = this[kClients][this[kIndex]] 46022 46023 // find pool index with the largest weight 46024 if (pool[kWeight] > this[kClients][maxWeightIndex][kWeight] && !pool[kNeedDrain]) { 46025 maxWeightIndex = this[kIndex] 46026 } 46027 46028 // decrease the current weight every `this[kClients].length`. 46029 if (this[kIndex] === 0) { 46030 // Set the current weight to the next lower weight. 46031 this[kCurrentWeight] = this[kCurrentWeight] - this[kGreatestCommonDivisor] 46032 46033 if (this[kCurrentWeight] <= 0) { 46034 this[kCurrentWeight] = this[kMaxWeightPerServer] 46035 } 46036 } 46037 if (pool[kWeight] >= this[kCurrentWeight] && (!pool[kNeedDrain])) { 46038 return pool 46039 } 46040 } 46041 46042 this[kCurrentWeight] = this[kClients][maxWeightIndex][kWeight] 46043 this[kIndex] = maxWeightIndex 46044 return this[kClients][maxWeightIndex] 46045 } 46046 } 46047 46048 module.exports = BalancedPool 46049 46050 46051 /***/ }), 46052 46053 /***/ 66101: 46054 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 46055 46056 "use strict"; 46057 46058 46059 const { kConstruct } = __nccwpck_require__(29174) 46060 const { urlEquals, fieldValues: getFieldValues } = __nccwpck_require__(82396) 46061 const { kEnumerableProperty, isDisturbed } = __nccwpck_require__(83983) 46062 const { kHeadersList } = __nccwpck_require__(72785) 46063 const { webidl } = __nccwpck_require__(21744) 46064 const { Response, cloneResponse } = __nccwpck_require__(27823) 46065 const { Request } = __nccwpck_require__(48359) 46066 const { kState, kHeaders, kGuard, kRealm } = __nccwpck_require__(15861) 46067 const { fetching } = __nccwpck_require__(74881) 46068 const { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = __nccwpck_require__(52538) 46069 const assert = __nccwpck_require__(39491) 46070 const { getGlobalDispatcher } = __nccwpck_require__(21892) 46071 46072 /** 46073 * @see https://w3c.github.io/ServiceWorker/#dfn-cache-batch-operation 46074 * @typedef {Object} CacheBatchOperation 46075 * @property {'delete' | 'put'} type 46076 * @property {any} request 46077 * @property {any} response 46078 * @property {import('../../types/cache').CacheQueryOptions} options 46079 */ 46080 46081 /** 46082 * @see https://w3c.github.io/ServiceWorker/#dfn-request-response-list 46083 * @typedef {[any, any][]} requestResponseList 46084 */ 46085 46086 class Cache { 46087 /** 46088 * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-request-response-list 46089 * @type {requestResponseList} 46090 */ 46091 #relevantRequestResponseList 46092 46093 constructor () { 46094 if (arguments[0] !== kConstruct) { 46095 webidl.illegalConstructor() 46096 } 46097 46098 this.#relevantRequestResponseList = arguments[1] 46099 } 46100 46101 async match (request, options = {}) { 46102 webidl.brandCheck(this, Cache) 46103 webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.match' }) 46104 46105 request = webidl.converters.RequestInfo(request) 46106 options = webidl.converters.CacheQueryOptions(options) 46107 46108 const p = await this.matchAll(request, options) 46109 46110 if (p.length === 0) { 46111 return 46112 } 46113 46114 return p[0] 46115 } 46116 46117 async matchAll (request = undefined, options = {}) { 46118 webidl.brandCheck(this, Cache) 46119 46120 if (request !== undefined) request = webidl.converters.RequestInfo(request) 46121 options = webidl.converters.CacheQueryOptions(options) 46122 46123 // 1. 46124 let r = null 46125 46126 // 2. 46127 if (request !== undefined) { 46128 if (request instanceof Request) { 46129 // 2.1.1 46130 r = request[kState] 46131 46132 // 2.1.2 46133 if (r.method !== 'GET' && !options.ignoreMethod) { 46134 return [] 46135 } 46136 } else if (typeof request === 'string') { 46137 // 2.2.1 46138 r = new Request(request)[kState] 46139 } 46140 } 46141 46142 // 5. 46143 // 5.1 46144 const responses = [] 46145 46146 // 5.2 46147 if (request === undefined) { 46148 // 5.2.1 46149 for (const requestResponse of this.#relevantRequestResponseList) { 46150 responses.push(requestResponse[1]) 46151 } 46152 } else { // 5.3 46153 // 5.3.1 46154 const requestResponses = this.#queryCache(r, options) 46155 46156 // 5.3.2 46157 for (const requestResponse of requestResponses) { 46158 responses.push(requestResponse[1]) 46159 } 46160 } 46161 46162 // 5.4 46163 // We don't implement CORs so we don't need to loop over the responses, yay! 46164 46165 // 5.5.1 46166 const responseList = [] 46167 46168 // 5.5.2 46169 for (const response of responses) { 46170 // 5.5.2.1 46171 const responseObject = new Response(response.body?.source ?? null) 46172 const body = responseObject[kState].body 46173 responseObject[kState] = response 46174 responseObject[kState].body = body 46175 responseObject[kHeaders][kHeadersList] = response.headersList 46176 responseObject[kHeaders][kGuard] = 'immutable' 46177 46178 responseList.push(responseObject) 46179 } 46180 46181 // 6. 46182 return Object.freeze(responseList) 46183 } 46184 46185 async add (request) { 46186 webidl.brandCheck(this, Cache) 46187 webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.add' }) 46188 46189 request = webidl.converters.RequestInfo(request) 46190 46191 // 1. 46192 const requests = [request] 46193 46194 // 2. 46195 const responseArrayPromise = this.addAll(requests) 46196 46197 // 3. 46198 return await responseArrayPromise 46199 } 46200 46201 async addAll (requests) { 46202 webidl.brandCheck(this, Cache) 46203 webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.addAll' }) 46204 46205 requests = webidl.converters['sequence<RequestInfo>'](requests) 46206 46207 // 1. 46208 const responsePromises = [] 46209 46210 // 2. 46211 const requestList = [] 46212 46213 // 3. 46214 for (const request of requests) { 46215 if (typeof request === 'string') { 46216 continue 46217 } 46218 46219 // 3.1 46220 const r = request[kState] 46221 46222 // 3.2 46223 if (!urlIsHttpHttpsScheme(r.url) || r.method !== 'GET') { 46224 throw webidl.errors.exception({ 46225 header: 'Cache.addAll', 46226 message: 'Expected http/s scheme when method is not GET.' 46227 }) 46228 } 46229 } 46230 46231 // 4. 46232 /** @type {ReturnType<typeof fetching>[]} */ 46233 const fetchControllers = [] 46234 46235 // 5. 46236 for (const request of requests) { 46237 // 5.1 46238 const r = new Request(request)[kState] 46239 46240 // 5.2 46241 if (!urlIsHttpHttpsScheme(r.url)) { 46242 throw webidl.errors.exception({ 46243 header: 'Cache.addAll', 46244 message: 'Expected http/s scheme.' 46245 }) 46246 } 46247 46248 // 5.4 46249 r.initiator = 'fetch' 46250 r.destination = 'subresource' 46251 46252 // 5.5 46253 requestList.push(r) 46254 46255 // 5.6 46256 const responsePromise = createDeferredPromise() 46257 46258 // 5.7 46259 fetchControllers.push(fetching({ 46260 request: r, 46261 dispatcher: getGlobalDispatcher(), 46262 processResponse (response) { 46263 // 1. 46264 if (response.type === 'error' || response.status === 206 || response.status < 200 || response.status > 299) { 46265 responsePromise.reject(webidl.errors.exception({ 46266 header: 'Cache.addAll', 46267 message: 'Received an invalid status code or the request failed.' 46268 })) 46269 } else if (response.headersList.contains('vary')) { // 2. 46270 // 2.1 46271 const fieldValues = getFieldValues(response.headersList.get('vary')) 46272 46273 // 2.2 46274 for (const fieldValue of fieldValues) { 46275 // 2.2.1 46276 if (fieldValue === '*') { 46277 responsePromise.reject(webidl.errors.exception({ 46278 header: 'Cache.addAll', 46279 message: 'invalid vary field value' 46280 })) 46281 46282 for (const controller of fetchControllers) { 46283 controller.abort() 46284 } 46285 46286 return 46287 } 46288 } 46289 } 46290 }, 46291 processResponseEndOfBody (response) { 46292 // 1. 46293 if (response.aborted) { 46294 responsePromise.reject(new DOMException('aborted', 'AbortError')) 46295 return 46296 } 46297 46298 // 2. 46299 responsePromise.resolve(response) 46300 } 46301 })) 46302 46303 // 5.8 46304 responsePromises.push(responsePromise.promise) 46305 } 46306 46307 // 6. 46308 const p = Promise.all(responsePromises) 46309 46310 // 7. 46311 const responses = await p 46312 46313 // 7.1 46314 const operations = [] 46315 46316 // 7.2 46317 let index = 0 46318 46319 // 7.3 46320 for (const response of responses) { 46321 // 7.3.1 46322 /** @type {CacheBatchOperation} */ 46323 const operation = { 46324 type: 'put', // 7.3.2 46325 request: requestList[index], // 7.3.3 46326 response // 7.3.4 46327 } 46328 46329 operations.push(operation) // 7.3.5 46330 46331 index++ // 7.3.6 46332 } 46333 46334 // 7.5 46335 const cacheJobPromise = createDeferredPromise() 46336 46337 // 7.6.1 46338 let errorData = null 46339 46340 // 7.6.2 46341 try { 46342 this.#batchCacheOperations(operations) 46343 } catch (e) { 46344 errorData = e 46345 } 46346 46347 // 7.6.3 46348 queueMicrotask(() => { 46349 // 7.6.3.1 46350 if (errorData === null) { 46351 cacheJobPromise.resolve(undefined) 46352 } else { 46353 // 7.6.3.2 46354 cacheJobPromise.reject(errorData) 46355 } 46356 }) 46357 46358 // 7.7 46359 return cacheJobPromise.promise 46360 } 46361 46362 async put (request, response) { 46363 webidl.brandCheck(this, Cache) 46364 webidl.argumentLengthCheck(arguments, 2, { header: 'Cache.put' }) 46365 46366 request = webidl.converters.RequestInfo(request) 46367 response = webidl.converters.Response(response) 46368 46369 // 1. 46370 let innerRequest = null 46371 46372 // 2. 46373 if (request instanceof Request) { 46374 innerRequest = request[kState] 46375 } else { // 3. 46376 innerRequest = new Request(request)[kState] 46377 } 46378 46379 // 4. 46380 if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== 'GET') { 46381 throw webidl.errors.exception({ 46382 header: 'Cache.put', 46383 message: 'Expected an http/s scheme when method is not GET' 46384 }) 46385 } 46386 46387 // 5. 46388 const innerResponse = response[kState] 46389 46390 // 6. 46391 if (innerResponse.status === 206) { 46392 throw webidl.errors.exception({ 46393 header: 'Cache.put', 46394 message: 'Got 206 status' 46395 }) 46396 } 46397 46398 // 7. 46399 if (innerResponse.headersList.contains('vary')) { 46400 // 7.1. 46401 const fieldValues = getFieldValues(innerResponse.headersList.get('vary')) 46402 46403 // 7.2. 46404 for (const fieldValue of fieldValues) { 46405 // 7.2.1 46406 if (fieldValue === '*') { 46407 throw webidl.errors.exception({ 46408 header: 'Cache.put', 46409 message: 'Got * vary field value' 46410 }) 46411 } 46412 } 46413 } 46414 46415 // 8. 46416 if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) { 46417 throw webidl.errors.exception({ 46418 header: 'Cache.put', 46419 message: 'Response body is locked or disturbed' 46420 }) 46421 } 46422 46423 // 9. 46424 const clonedResponse = cloneResponse(innerResponse) 46425 46426 // 10. 46427 const bodyReadPromise = createDeferredPromise() 46428 46429 // 11. 46430 if (innerResponse.body != null) { 46431 // 11.1 46432 const stream = innerResponse.body.stream 46433 46434 // 11.2 46435 const reader = stream.getReader() 46436 46437 // 11.3 46438 readAllBytes(reader).then(bodyReadPromise.resolve, bodyReadPromise.reject) 46439 } else { 46440 bodyReadPromise.resolve(undefined) 46441 } 46442 46443 // 12. 46444 /** @type {CacheBatchOperation[]} */ 46445 const operations = [] 46446 46447 // 13. 46448 /** @type {CacheBatchOperation} */ 46449 const operation = { 46450 type: 'put', // 14. 46451 request: innerRequest, // 15. 46452 response: clonedResponse // 16. 46453 } 46454 46455 // 17. 46456 operations.push(operation) 46457 46458 // 19. 46459 const bytes = await bodyReadPromise.promise 46460 46461 if (clonedResponse.body != null) { 46462 clonedResponse.body.source = bytes 46463 } 46464 46465 // 19.1 46466 const cacheJobPromise = createDeferredPromise() 46467 46468 // 19.2.1 46469 let errorData = null 46470 46471 // 19.2.2 46472 try { 46473 this.#batchCacheOperations(operations) 46474 } catch (e) { 46475 errorData = e 46476 } 46477 46478 // 19.2.3 46479 queueMicrotask(() => { 46480 // 19.2.3.1 46481 if (errorData === null) { 46482 cacheJobPromise.resolve() 46483 } else { // 19.2.3.2 46484 cacheJobPromise.reject(errorData) 46485 } 46486 }) 46487 46488 return cacheJobPromise.promise 46489 } 46490 46491 async delete (request, options = {}) { 46492 webidl.brandCheck(this, Cache) 46493 webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.delete' }) 46494 46495 request = webidl.converters.RequestInfo(request) 46496 options = webidl.converters.CacheQueryOptions(options) 46497 46498 /** 46499 * @type {Request} 46500 */ 46501 let r = null 46502 46503 if (request instanceof Request) { 46504 r = request[kState] 46505 46506 if (r.method !== 'GET' && !options.ignoreMethod) { 46507 return false 46508 } 46509 } else { 46510 assert(typeof request === 'string') 46511 46512 r = new Request(request)[kState] 46513 } 46514 46515 /** @type {CacheBatchOperation[]} */ 46516 const operations = [] 46517 46518 /** @type {CacheBatchOperation} */ 46519 const operation = { 46520 type: 'delete', 46521 request: r, 46522 options 46523 } 46524 46525 operations.push(operation) 46526 46527 const cacheJobPromise = createDeferredPromise() 46528 46529 let errorData = null 46530 let requestResponses 46531 46532 try { 46533 requestResponses = this.#batchCacheOperations(operations) 46534 } catch (e) { 46535 errorData = e 46536 } 46537 46538 queueMicrotask(() => { 46539 if (errorData === null) { 46540 cacheJobPromise.resolve(!!requestResponses?.length) 46541 } else { 46542 cacheJobPromise.reject(errorData) 46543 } 46544 }) 46545 46546 return cacheJobPromise.promise 46547 } 46548 46549 /** 46550 * @see https://w3c.github.io/ServiceWorker/#dom-cache-keys 46551 * @param {any} request 46552 * @param {import('../../types/cache').CacheQueryOptions} options 46553 * @returns {readonly Request[]} 46554 */ 46555 async keys (request = undefined, options = {}) { 46556 webidl.brandCheck(this, Cache) 46557 46558 if (request !== undefined) request = webidl.converters.RequestInfo(request) 46559 options = webidl.converters.CacheQueryOptions(options) 46560 46561 // 1. 46562 let r = null 46563 46564 // 2. 46565 if (request !== undefined) { 46566 // 2.1 46567 if (request instanceof Request) { 46568 // 2.1.1 46569 r = request[kState] 46570 46571 // 2.1.2 46572 if (r.method !== 'GET' && !options.ignoreMethod) { 46573 return [] 46574 } 46575 } else if (typeof request === 'string') { // 2.2 46576 r = new Request(request)[kState] 46577 } 46578 } 46579 46580 // 4. 46581 const promise = createDeferredPromise() 46582 46583 // 5. 46584 // 5.1 46585 const requests = [] 46586 46587 // 5.2 46588 if (request === undefined) { 46589 // 5.2.1 46590 for (const requestResponse of this.#relevantRequestResponseList) { 46591 // 5.2.1.1 46592 requests.push(requestResponse[0]) 46593 } 46594 } else { // 5.3 46595 // 5.3.1 46596 const requestResponses = this.#queryCache(r, options) 46597 46598 // 5.3.2 46599 for (const requestResponse of requestResponses) { 46600 // 5.3.2.1 46601 requests.push(requestResponse[0]) 46602 } 46603 } 46604 46605 // 5.4 46606 queueMicrotask(() => { 46607 // 5.4.1 46608 const requestList = [] 46609 46610 // 5.4.2 46611 for (const request of requests) { 46612 const requestObject = new Request('https://a') 46613 requestObject[kState] = request 46614 requestObject[kHeaders][kHeadersList] = request.headersList 46615 requestObject[kHeaders][kGuard] = 'immutable' 46616 requestObject[kRealm] = request.client 46617 46618 // 5.4.2.1 46619 requestList.push(requestObject) 46620 } 46621 46622 // 5.4.3 46623 promise.resolve(Object.freeze(requestList)) 46624 }) 46625 46626 return promise.promise 46627 } 46628 46629 /** 46630 * @see https://w3c.github.io/ServiceWorker/#batch-cache-operations-algorithm 46631 * @param {CacheBatchOperation[]} operations 46632 * @returns {requestResponseList} 46633 */ 46634 #batchCacheOperations (operations) { 46635 // 1. 46636 const cache = this.#relevantRequestResponseList 46637 46638 // 2. 46639 const backupCache = [...cache] 46640 46641 // 3. 46642 const addedItems = [] 46643 46644 // 4.1 46645 const resultList = [] 46646 46647 try { 46648 // 4.2 46649 for (const operation of operations) { 46650 // 4.2.1 46651 if (operation.type !== 'delete' && operation.type !== 'put') { 46652 throw webidl.errors.exception({ 46653 header: 'Cache.#batchCacheOperations', 46654 message: 'operation type does not match "delete" or "put"' 46655 }) 46656 } 46657 46658 // 4.2.2 46659 if (operation.type === 'delete' && operation.response != null) { 46660 throw webidl.errors.exception({ 46661 header: 'Cache.#batchCacheOperations', 46662 message: 'delete operation should not have an associated response' 46663 }) 46664 } 46665 46666 // 4.2.3 46667 if (this.#queryCache(operation.request, operation.options, addedItems).length) { 46668 throw new DOMException('???', 'InvalidStateError') 46669 } 46670 46671 // 4.2.4 46672 let requestResponses 46673 46674 // 4.2.5 46675 if (operation.type === 'delete') { 46676 // 4.2.5.1 46677 requestResponses = this.#queryCache(operation.request, operation.options) 46678 46679 // TODO: the spec is wrong, this is needed to pass WPTs 46680 if (requestResponses.length === 0) { 46681 return [] 46682 } 46683 46684 // 4.2.5.2 46685 for (const requestResponse of requestResponses) { 46686 const idx = cache.indexOf(requestResponse) 46687 assert(idx !== -1) 46688 46689 // 4.2.5.2.1 46690 cache.splice(idx, 1) 46691 } 46692 } else if (operation.type === 'put') { // 4.2.6 46693 // 4.2.6.1 46694 if (operation.response == null) { 46695 throw webidl.errors.exception({ 46696 header: 'Cache.#batchCacheOperations', 46697 message: 'put operation should have an associated response' 46698 }) 46699 } 46700 46701 // 4.2.6.2 46702 const r = operation.request 46703 46704 // 4.2.6.3 46705 if (!urlIsHttpHttpsScheme(r.url)) { 46706 throw webidl.errors.exception({ 46707 header: 'Cache.#batchCacheOperations', 46708 message: 'expected http or https scheme' 46709 }) 46710 } 46711 46712 // 4.2.6.4 46713 if (r.method !== 'GET') { 46714 throw webidl.errors.exception({ 46715 header: 'Cache.#batchCacheOperations', 46716 message: 'not get method' 46717 }) 46718 } 46719 46720 // 4.2.6.5 46721 if (operation.options != null) { 46722 throw webidl.errors.exception({ 46723 header: 'Cache.#batchCacheOperations', 46724 message: 'options must not be defined' 46725 }) 46726 } 46727 46728 // 4.2.6.6 46729 requestResponses = this.#queryCache(operation.request) 46730 46731 // 4.2.6.7 46732 for (const requestResponse of requestResponses) { 46733 const idx = cache.indexOf(requestResponse) 46734 assert(idx !== -1) 46735 46736 // 4.2.6.7.1 46737 cache.splice(idx, 1) 46738 } 46739 46740 // 4.2.6.8 46741 cache.push([operation.request, operation.response]) 46742 46743 // 4.2.6.10 46744 addedItems.push([operation.request, operation.response]) 46745 } 46746 46747 // 4.2.7 46748 resultList.push([operation.request, operation.response]) 46749 } 46750 46751 // 4.3 46752 return resultList 46753 } catch (e) { // 5. 46754 // 5.1 46755 this.#relevantRequestResponseList.length = 0 46756 46757 // 5.2 46758 this.#relevantRequestResponseList = backupCache 46759 46760 // 5.3 46761 throw e 46762 } 46763 } 46764 46765 /** 46766 * @see https://w3c.github.io/ServiceWorker/#query-cache 46767 * @param {any} requestQuery 46768 * @param {import('../../types/cache').CacheQueryOptions} options 46769 * @param {requestResponseList} targetStorage 46770 * @returns {requestResponseList} 46771 */ 46772 #queryCache (requestQuery, options, targetStorage) { 46773 /** @type {requestResponseList} */ 46774 const resultList = [] 46775 46776 const storage = targetStorage ?? this.#relevantRequestResponseList 46777 46778 for (const requestResponse of storage) { 46779 const [cachedRequest, cachedResponse] = requestResponse 46780 if (this.#requestMatchesCachedItem(requestQuery, cachedRequest, cachedResponse, options)) { 46781 resultList.push(requestResponse) 46782 } 46783 } 46784 46785 return resultList 46786 } 46787 46788 /** 46789 * @see https://w3c.github.io/ServiceWorker/#request-matches-cached-item-algorithm 46790 * @param {any} requestQuery 46791 * @param {any} request 46792 * @param {any | null} response 46793 * @param {import('../../types/cache').CacheQueryOptions | undefined} options 46794 * @returns {boolean} 46795 */ 46796 #requestMatchesCachedItem (requestQuery, request, response = null, options) { 46797 // if (options?.ignoreMethod === false && request.method === 'GET') { 46798 // return false 46799 // } 46800 46801 const queryURL = new URL(requestQuery.url) 46802 46803 const cachedURL = new URL(request.url) 46804 46805 if (options?.ignoreSearch) { 46806 cachedURL.search = '' 46807 46808 queryURL.search = '' 46809 } 46810 46811 if (!urlEquals(queryURL, cachedURL, true)) { 46812 return false 46813 } 46814 46815 if ( 46816 response == null || 46817 options?.ignoreVary || 46818 !response.headersList.contains('vary') 46819 ) { 46820 return true 46821 } 46822 46823 const fieldValues = getFieldValues(response.headersList.get('vary')) 46824 46825 for (const fieldValue of fieldValues) { 46826 if (fieldValue === '*') { 46827 return false 46828 } 46829 46830 const requestValue = request.headersList.get(fieldValue) 46831 const queryValue = requestQuery.headersList.get(fieldValue) 46832 46833 // If one has the header and the other doesn't, or one has 46834 // a different value than the other, return false 46835 if (requestValue !== queryValue) { 46836 return false 46837 } 46838 } 46839 46840 return true 46841 } 46842 } 46843 46844 Object.defineProperties(Cache.prototype, { 46845 [Symbol.toStringTag]: { 46846 value: 'Cache', 46847 configurable: true 46848 }, 46849 match: kEnumerableProperty, 46850 matchAll: kEnumerableProperty, 46851 add: kEnumerableProperty, 46852 addAll: kEnumerableProperty, 46853 put: kEnumerableProperty, 46854 delete: kEnumerableProperty, 46855 keys: kEnumerableProperty 46856 }) 46857 46858 const cacheQueryOptionConverters = [ 46859 { 46860 key: 'ignoreSearch', 46861 converter: webidl.converters.boolean, 46862 defaultValue: false 46863 }, 46864 { 46865 key: 'ignoreMethod', 46866 converter: webidl.converters.boolean, 46867 defaultValue: false 46868 }, 46869 { 46870 key: 'ignoreVary', 46871 converter: webidl.converters.boolean, 46872 defaultValue: false 46873 } 46874 ] 46875 46876 webidl.converters.CacheQueryOptions = webidl.dictionaryConverter(cacheQueryOptionConverters) 46877 46878 webidl.converters.MultiCacheQueryOptions = webidl.dictionaryConverter([ 46879 ...cacheQueryOptionConverters, 46880 { 46881 key: 'cacheName', 46882 converter: webidl.converters.DOMString 46883 } 46884 ]) 46885 46886 webidl.converters.Response = webidl.interfaceConverter(Response) 46887 46888 webidl.converters['sequence<RequestInfo>'] = webidl.sequenceConverter( 46889 webidl.converters.RequestInfo 46890 ) 46891 46892 module.exports = { 46893 Cache 46894 } 46895 46896 46897 /***/ }), 46898 46899 /***/ 37907: 46900 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 46901 46902 "use strict"; 46903 46904 46905 const { kConstruct } = __nccwpck_require__(29174) 46906 const { Cache } = __nccwpck_require__(66101) 46907 const { webidl } = __nccwpck_require__(21744) 46908 const { kEnumerableProperty } = __nccwpck_require__(83983) 46909 46910 class CacheStorage { 46911 /** 46912 * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map 46913 * @type {Map<string, import('./cache').requestResponseList} 46914 */ 46915 #caches = new Map() 46916 46917 constructor () { 46918 if (arguments[0] !== kConstruct) { 46919 webidl.illegalConstructor() 46920 } 46921 } 46922 46923 async match (request, options = {}) { 46924 webidl.brandCheck(this, CacheStorage) 46925 webidl.argumentLengthCheck(arguments, 1, { header: 'CacheStorage.match' }) 46926 46927 request = webidl.converters.RequestInfo(request) 46928 options = webidl.converters.MultiCacheQueryOptions(options) 46929 46930 // 1. 46931 if (options.cacheName != null) { 46932 // 1.1.1.1 46933 if (this.#caches.has(options.cacheName)) { 46934 // 1.1.1.1.1 46935 const cacheList = this.#caches.get(options.cacheName) 46936 const cache = new Cache(kConstruct, cacheList) 46937 46938 return await cache.match(request, options) 46939 } 46940 } else { // 2. 46941 // 2.2 46942 for (const cacheList of this.#caches.values()) { 46943 const cache = new Cache(kConstruct, cacheList) 46944 46945 // 2.2.1.2 46946 const response = await cache.match(request, options) 46947 46948 if (response !== undefined) { 46949 return response 46950 } 46951 } 46952 } 46953 } 46954 46955 /** 46956 * @see https://w3c.github.io/ServiceWorker/#cache-storage-has 46957 * @param {string} cacheName 46958 * @returns {Promise<boolean>} 46959 */ 46960 async has (cacheName) { 46961 webidl.brandCheck(this, CacheStorage) 46962 webidl.argumentLengthCheck(arguments, 1, { header: 'CacheStorage.has' }) 46963 46964 cacheName = webidl.converters.DOMString(cacheName) 46965 46966 // 2.1.1 46967 // 2.2 46968 return this.#caches.has(cacheName) 46969 } 46970 46971 /** 46972 * @see https://w3c.github.io/ServiceWorker/#dom-cachestorage-open 46973 * @param {string} cacheName 46974 * @returns {Promise<Cache>} 46975 */ 46976 async open (cacheName) { 46977 webidl.brandCheck(this, CacheStorage) 46978 webidl.argumentLengthCheck(arguments, 1, { header: 'CacheStorage.open' }) 46979 46980 cacheName = webidl.converters.DOMString(cacheName) 46981 46982 // 2.1 46983 if (this.#caches.has(cacheName)) { 46984 // await caches.open('v1') !== await caches.open('v1') 46985 46986 // 2.1.1 46987 const cache = this.#caches.get(cacheName) 46988 46989 // 2.1.1.1 46990 return new Cache(kConstruct, cache) 46991 } 46992 46993 // 2.2 46994 const cache = [] 46995 46996 // 2.3 46997 this.#caches.set(cacheName, cache) 46998 46999 // 2.4 47000 return new Cache(kConstruct, cache) 47001 } 47002 47003 /** 47004 * @see https://w3c.github.io/ServiceWorker/#cache-storage-delete 47005 * @param {string} cacheName 47006 * @returns {Promise<boolean>} 47007 */ 47008 async delete (cacheName) { 47009 webidl.brandCheck(this, CacheStorage) 47010 webidl.argumentLengthCheck(arguments, 1, { header: 'CacheStorage.delete' }) 47011 47012 cacheName = webidl.converters.DOMString(cacheName) 47013 47014 return this.#caches.delete(cacheName) 47015 } 47016 47017 /** 47018 * @see https://w3c.github.io/ServiceWorker/#cache-storage-keys 47019 * @returns {string[]} 47020 */ 47021 async keys () { 47022 webidl.brandCheck(this, CacheStorage) 47023 47024 // 2.1 47025 const keys = this.#caches.keys() 47026 47027 // 2.2 47028 return [...keys] 47029 } 47030 } 47031 47032 Object.defineProperties(CacheStorage.prototype, { 47033 [Symbol.toStringTag]: { 47034 value: 'CacheStorage', 47035 configurable: true 47036 }, 47037 match: kEnumerableProperty, 47038 has: kEnumerableProperty, 47039 open: kEnumerableProperty, 47040 delete: kEnumerableProperty, 47041 keys: kEnumerableProperty 47042 }) 47043 47044 module.exports = { 47045 CacheStorage 47046 } 47047 47048 47049 /***/ }), 47050 47051 /***/ 29174: 47052 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 47053 47054 "use strict"; 47055 47056 47057 module.exports = { 47058 kConstruct: (__nccwpck_require__(72785).kConstruct) 47059 } 47060 47061 47062 /***/ }), 47063 47064 /***/ 82396: 47065 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 47066 47067 "use strict"; 47068 47069 47070 const assert = __nccwpck_require__(39491) 47071 const { URLSerializer } = __nccwpck_require__(685) 47072 const { isValidHeaderName } = __nccwpck_require__(52538) 47073 47074 /** 47075 * @see https://url.spec.whatwg.org/#concept-url-equals 47076 * @param {URL} A 47077 * @param {URL} B 47078 * @param {boolean | undefined} excludeFragment 47079 * @returns {boolean} 47080 */ 47081 function urlEquals (A, B, excludeFragment = false) { 47082 const serializedA = URLSerializer(A, excludeFragment) 47083 47084 const serializedB = URLSerializer(B, excludeFragment) 47085 47086 return serializedA === serializedB 47087 } 47088 47089 /** 47090 * @see https://github.com/chromium/chromium/blob/694d20d134cb553d8d89e5500b9148012b1ba299/content/browser/cache_storage/cache_storage_cache.cc#L260-L262 47091 * @param {string} header 47092 */ 47093 function fieldValues (header) { 47094 assert(header !== null) 47095 47096 const values = [] 47097 47098 for (let value of header.split(',')) { 47099 value = value.trim() 47100 47101 if (!value.length) { 47102 continue 47103 } else if (!isValidHeaderName(value)) { 47104 continue 47105 } 47106 47107 values.push(value) 47108 } 47109 47110 return values 47111 } 47112 47113 module.exports = { 47114 urlEquals, 47115 fieldValues 47116 } 47117 47118 47119 /***/ }), 47120 47121 /***/ 33598: 47122 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 47123 47124 "use strict"; 47125 // @ts-check 47126 47127 47128 47129 /* global WebAssembly */ 47130 47131 const assert = __nccwpck_require__(39491) 47132 const net = __nccwpck_require__(41808) 47133 const http = __nccwpck_require__(13685) 47134 const { pipeline } = __nccwpck_require__(12781) 47135 const util = __nccwpck_require__(83983) 47136 const timers = __nccwpck_require__(29459) 47137 const Request = __nccwpck_require__(62905) 47138 const DispatcherBase = __nccwpck_require__(74839) 47139 const { 47140 RequestContentLengthMismatchError, 47141 ResponseContentLengthMismatchError, 47142 InvalidArgumentError, 47143 RequestAbortedError, 47144 HeadersTimeoutError, 47145 HeadersOverflowError, 47146 SocketError, 47147 InformationalError, 47148 BodyTimeoutError, 47149 HTTPParserError, 47150 ResponseExceededMaxSizeError, 47151 ClientDestroyedError 47152 } = __nccwpck_require__(48045) 47153 const buildConnector = __nccwpck_require__(82067) 47154 const { 47155 kUrl, 47156 kReset, 47157 kServerName, 47158 kClient, 47159 kBusy, 47160 kParser, 47161 kConnect, 47162 kBlocking, 47163 kResuming, 47164 kRunning, 47165 kPending, 47166 kSize, 47167 kWriting, 47168 kQueue, 47169 kConnected, 47170 kConnecting, 47171 kNeedDrain, 47172 kNoRef, 47173 kKeepAliveDefaultTimeout, 47174 kHostHeader, 47175 kPendingIdx, 47176 kRunningIdx, 47177 kError, 47178 kPipelining, 47179 kSocket, 47180 kKeepAliveTimeoutValue, 47181 kMaxHeadersSize, 47182 kKeepAliveMaxTimeout, 47183 kKeepAliveTimeoutThreshold, 47184 kHeadersTimeout, 47185 kBodyTimeout, 47186 kStrictContentLength, 47187 kConnector, 47188 kMaxRedirections, 47189 kMaxRequests, 47190 kCounter, 47191 kClose, 47192 kDestroy, 47193 kDispatch, 47194 kInterceptors, 47195 kLocalAddress, 47196 kMaxResponseSize, 47197 kHTTPConnVersion, 47198 // HTTP2 47199 kHost, 47200 kHTTP2Session, 47201 kHTTP2SessionState, 47202 kHTTP2BuildRequest, 47203 kHTTP2CopyHeaders, 47204 kHTTP1BuildRequest 47205 } = __nccwpck_require__(72785) 47206 47207 /** @type {import('http2')} */ 47208 let http2 47209 try { 47210 http2 = __nccwpck_require__(85158) 47211 } catch { 47212 // @ts-ignore 47213 http2 = { constants: {} } 47214 } 47215 47216 const { 47217 constants: { 47218 HTTP2_HEADER_AUTHORITY, 47219 HTTP2_HEADER_METHOD, 47220 HTTP2_HEADER_PATH, 47221 HTTP2_HEADER_SCHEME, 47222 HTTP2_HEADER_CONTENT_LENGTH, 47223 HTTP2_HEADER_EXPECT, 47224 HTTP2_HEADER_STATUS 47225 } 47226 } = http2 47227 47228 // Experimental 47229 let h2ExperimentalWarned = false 47230 47231 const FastBuffer = Buffer[Symbol.species] 47232 47233 const kClosedResolve = Symbol('kClosedResolve') 47234 47235 const channels = {} 47236 47237 try { 47238 const diagnosticsChannel = __nccwpck_require__(67643) 47239 channels.sendHeaders = diagnosticsChannel.channel('undici:client:sendHeaders') 47240 channels.beforeConnect = diagnosticsChannel.channel('undici:client:beforeConnect') 47241 channels.connectError = diagnosticsChannel.channel('undici:client:connectError') 47242 channels.connected = diagnosticsChannel.channel('undici:client:connected') 47243 } catch { 47244 channels.sendHeaders = { hasSubscribers: false } 47245 channels.beforeConnect = { hasSubscribers: false } 47246 channels.connectError = { hasSubscribers: false } 47247 channels.connected = { hasSubscribers: false } 47248 } 47249 47250 /** 47251 * @type {import('../types/client').default} 47252 */ 47253 class Client extends DispatcherBase { 47254 /** 47255 * 47256 * @param {string|URL} url 47257 * @param {import('../types/client').Client.Options} options 47258 */ 47259 constructor (url, { 47260 interceptors, 47261 maxHeaderSize, 47262 headersTimeout, 47263 socketTimeout, 47264 requestTimeout, 47265 connectTimeout, 47266 bodyTimeout, 47267 idleTimeout, 47268 keepAlive, 47269 keepAliveTimeout, 47270 maxKeepAliveTimeout, 47271 keepAliveMaxTimeout, 47272 keepAliveTimeoutThreshold, 47273 socketPath, 47274 pipelining, 47275 tls, 47276 strictContentLength, 47277 maxCachedSessions, 47278 maxRedirections, 47279 connect, 47280 maxRequestsPerClient, 47281 localAddress, 47282 maxResponseSize, 47283 autoSelectFamily, 47284 autoSelectFamilyAttemptTimeout, 47285 // h2 47286 allowH2, 47287 maxConcurrentStreams 47288 } = {}) { 47289 super() 47290 47291 if (keepAlive !== undefined) { 47292 throw new InvalidArgumentError('unsupported keepAlive, use pipelining=0 instead') 47293 } 47294 47295 if (socketTimeout !== undefined) { 47296 throw new InvalidArgumentError('unsupported socketTimeout, use headersTimeout & bodyTimeout instead') 47297 } 47298 47299 if (requestTimeout !== undefined) { 47300 throw new InvalidArgumentError('unsupported requestTimeout, use headersTimeout & bodyTimeout instead') 47301 } 47302 47303 if (idleTimeout !== undefined) { 47304 throw new InvalidArgumentError('unsupported idleTimeout, use keepAliveTimeout instead') 47305 } 47306 47307 if (maxKeepAliveTimeout !== undefined) { 47308 throw new InvalidArgumentError('unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead') 47309 } 47310 47311 if (maxHeaderSize != null && !Number.isFinite(maxHeaderSize)) { 47312 throw new InvalidArgumentError('invalid maxHeaderSize') 47313 } 47314 47315 if (socketPath != null && typeof socketPath !== 'string') { 47316 throw new InvalidArgumentError('invalid socketPath') 47317 } 47318 47319 if (connectTimeout != null && (!Number.isFinite(connectTimeout) || connectTimeout < 0)) { 47320 throw new InvalidArgumentError('invalid connectTimeout') 47321 } 47322 47323 if (keepAliveTimeout != null && (!Number.isFinite(keepAliveTimeout) || keepAliveTimeout <= 0)) { 47324 throw new InvalidArgumentError('invalid keepAliveTimeout') 47325 } 47326 47327 if (keepAliveMaxTimeout != null && (!Number.isFinite(keepAliveMaxTimeout) || keepAliveMaxTimeout <= 0)) { 47328 throw new InvalidArgumentError('invalid keepAliveMaxTimeout') 47329 } 47330 47331 if (keepAliveTimeoutThreshold != null && !Number.isFinite(keepAliveTimeoutThreshold)) { 47332 throw new InvalidArgumentError('invalid keepAliveTimeoutThreshold') 47333 } 47334 47335 if (headersTimeout != null && (!Number.isInteger(headersTimeout) || headersTimeout < 0)) { 47336 throw new InvalidArgumentError('headersTimeout must be a positive integer or zero') 47337 } 47338 47339 if (bodyTimeout != null && (!Number.isInteger(bodyTimeout) || bodyTimeout < 0)) { 47340 throw new InvalidArgumentError('bodyTimeout must be a positive integer or zero') 47341 } 47342 47343 if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') { 47344 throw new InvalidArgumentError('connect must be a function or an object') 47345 } 47346 47347 if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) { 47348 throw new InvalidArgumentError('maxRedirections must be a positive number') 47349 } 47350 47351 if (maxRequestsPerClient != null && (!Number.isInteger(maxRequestsPerClient) || maxRequestsPerClient < 0)) { 47352 throw new InvalidArgumentError('maxRequestsPerClient must be a positive number') 47353 } 47354 47355 if (localAddress != null && (typeof localAddress !== 'string' || net.isIP(localAddress) === 0)) { 47356 throw new InvalidArgumentError('localAddress must be valid string IP address') 47357 } 47358 47359 if (maxResponseSize != null && (!Number.isInteger(maxResponseSize) || maxResponseSize < -1)) { 47360 throw new InvalidArgumentError('maxResponseSize must be a positive number') 47361 } 47362 47363 if ( 47364 autoSelectFamilyAttemptTimeout != null && 47365 (!Number.isInteger(autoSelectFamilyAttemptTimeout) || autoSelectFamilyAttemptTimeout < -1) 47366 ) { 47367 throw new InvalidArgumentError('autoSelectFamilyAttemptTimeout must be a positive number') 47368 } 47369 47370 // h2 47371 if (allowH2 != null && typeof allowH2 !== 'boolean') { 47372 throw new InvalidArgumentError('allowH2 must be a valid boolean value') 47373 } 47374 47375 if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== 'number' || maxConcurrentStreams < 1)) { 47376 throw new InvalidArgumentError('maxConcurrentStreams must be a possitive integer, greater than 0') 47377 } 47378 47379 if (typeof connect !== 'function') { 47380 connect = buildConnector({ 47381 ...tls, 47382 maxCachedSessions, 47383 allowH2, 47384 socketPath, 47385 timeout: connectTimeout, 47386 ...(util.nodeHasAutoSelectFamily && autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined), 47387 ...connect 47388 }) 47389 } 47390 47391 this[kInterceptors] = interceptors && interceptors.Client && Array.isArray(interceptors.Client) 47392 ? interceptors.Client 47393 : [createRedirectInterceptor({ maxRedirections })] 47394 this[kUrl] = util.parseOrigin(url) 47395 this[kConnector] = connect 47396 this[kSocket] = null 47397 this[kPipelining] = pipelining != null ? pipelining : 1 47398 this[kMaxHeadersSize] = maxHeaderSize || http.maxHeaderSize 47399 this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout 47400 this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 600e3 : keepAliveMaxTimeout 47401 this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 1e3 : keepAliveTimeoutThreshold 47402 this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout] 47403 this[kServerName] = null 47404 this[kLocalAddress] = localAddress != null ? localAddress : null 47405 this[kResuming] = 0 // 0, idle, 1, scheduled, 2 resuming 47406 this[kNeedDrain] = 0 // 0, idle, 1, scheduled, 2 resuming 47407 this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ''}\r\n` 47408 this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 300e3 47409 this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 300e3 47410 this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength 47411 this[kMaxRedirections] = maxRedirections 47412 this[kMaxRequests] = maxRequestsPerClient 47413 this[kClosedResolve] = null 47414 this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1 47415 this[kHTTPConnVersion] = 'h1' 47416 47417 // HTTP/2 47418 this[kHTTP2Session] = null 47419 this[kHTTP2SessionState] = !allowH2 47420 ? null 47421 : { 47422 // streams: null, // Fixed queue of streams - For future support of `push` 47423 openStreams: 0, // Keep track of them to decide wether or not unref the session 47424 maxConcurrentStreams: maxConcurrentStreams != null ? maxConcurrentStreams : 100 // Max peerConcurrentStreams for a Node h2 server 47425 } 47426 this[kHost] = `${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ''}` 47427 47428 // kQueue is built up of 3 sections separated by 47429 // the kRunningIdx and kPendingIdx indices. 47430 // | complete | running | pending | 47431 // ^ kRunningIdx ^ kPendingIdx ^ kQueue.length 47432 // kRunningIdx points to the first running element. 47433 // kPendingIdx points to the first pending element. 47434 // This implements a fast queue with an amortized 47435 // time of O(1). 47436 47437 this[kQueue] = [] 47438 this[kRunningIdx] = 0 47439 this[kPendingIdx] = 0 47440 } 47441 47442 get pipelining () { 47443 return this[kPipelining] 47444 } 47445 47446 set pipelining (value) { 47447 this[kPipelining] = value 47448 resume(this, true) 47449 } 47450 47451 get [kPending] () { 47452 return this[kQueue].length - this[kPendingIdx] 47453 } 47454 47455 get [kRunning] () { 47456 return this[kPendingIdx] - this[kRunningIdx] 47457 } 47458 47459 get [kSize] () { 47460 return this[kQueue].length - this[kRunningIdx] 47461 } 47462 47463 get [kConnected] () { 47464 return !!this[kSocket] && !this[kConnecting] && !this[kSocket].destroyed 47465 } 47466 47467 get [kBusy] () { 47468 const socket = this[kSocket] 47469 return ( 47470 (socket && (socket[kReset] || socket[kWriting] || socket[kBlocking])) || 47471 (this[kSize] >= (this[kPipelining] || 1)) || 47472 this[kPending] > 0 47473 ) 47474 } 47475 47476 /* istanbul ignore: only used for test */ 47477 [kConnect] (cb) { 47478 connect(this) 47479 this.once('connect', cb) 47480 } 47481 47482 [kDispatch] (opts, handler) { 47483 const origin = opts.origin || this[kUrl].origin 47484 47485 const request = this[kHTTPConnVersion] === 'h2' 47486 ? Request[kHTTP2BuildRequest](origin, opts, handler) 47487 : Request[kHTTP1BuildRequest](origin, opts, handler) 47488 47489 this[kQueue].push(request) 47490 if (this[kResuming]) { 47491 // Do nothing. 47492 } else if (util.bodyLength(request.body) == null && util.isIterable(request.body)) { 47493 // Wait a tick in case stream/iterator is ended in the same tick. 47494 this[kResuming] = 1 47495 process.nextTick(resume, this) 47496 } else { 47497 resume(this, true) 47498 } 47499 47500 if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) { 47501 this[kNeedDrain] = 2 47502 } 47503 47504 return this[kNeedDrain] < 2 47505 } 47506 47507 async [kClose] () { 47508 // TODO: for H2 we need to gracefully flush the remaining enqueued 47509 // request and close each stream. 47510 return new Promise((resolve) => { 47511 if (!this[kSize]) { 47512 resolve(null) 47513 } else { 47514 this[kClosedResolve] = resolve 47515 } 47516 }) 47517 } 47518 47519 async [kDestroy] (err) { 47520 return new Promise((resolve) => { 47521 const requests = this[kQueue].splice(this[kPendingIdx]) 47522 for (let i = 0; i < requests.length; i++) { 47523 const request = requests[i] 47524 errorRequest(this, request, err) 47525 } 47526 47527 const callback = () => { 47528 if (this[kClosedResolve]) { 47529 // TODO (fix): Should we error here with ClientDestroyedError? 47530 this[kClosedResolve]() 47531 this[kClosedResolve] = null 47532 } 47533 resolve() 47534 } 47535 47536 if (this[kHTTP2Session] != null) { 47537 util.destroy(this[kHTTP2Session], err) 47538 this[kHTTP2Session] = null 47539 this[kHTTP2SessionState] = null 47540 } 47541 47542 if (!this[kSocket]) { 47543 queueMicrotask(callback) 47544 } else { 47545 util.destroy(this[kSocket].on('close', callback), err) 47546 } 47547 47548 resume(this) 47549 }) 47550 } 47551 } 47552 47553 function onHttp2SessionError (err) { 47554 assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID') 47555 47556 this[kSocket][kError] = err 47557 47558 onError(this[kClient], err) 47559 } 47560 47561 function onHttp2FrameError (type, code, id) { 47562 const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`) 47563 47564 if (id === 0) { 47565 this[kSocket][kError] = err 47566 onError(this[kClient], err) 47567 } 47568 } 47569 47570 function onHttp2SessionEnd () { 47571 util.destroy(this, new SocketError('other side closed')) 47572 util.destroy(this[kSocket], new SocketError('other side closed')) 47573 } 47574 47575 function onHTTP2GoAway (code) { 47576 const client = this[kClient] 47577 const err = new InformationalError(`HTTP/2: "GOAWAY" frame received with code ${code}`) 47578 client[kSocket] = null 47579 client[kHTTP2Session] = null 47580 47581 if (client.destroyed) { 47582 assert(this[kPending] === 0) 47583 47584 // Fail entire queue. 47585 const requests = client[kQueue].splice(client[kRunningIdx]) 47586 for (let i = 0; i < requests.length; i++) { 47587 const request = requests[i] 47588 errorRequest(this, request, err) 47589 } 47590 } else if (client[kRunning] > 0) { 47591 // Fail head of pipeline. 47592 const request = client[kQueue][client[kRunningIdx]] 47593 client[kQueue][client[kRunningIdx]++] = null 47594 47595 errorRequest(client, request, err) 47596 } 47597 47598 client[kPendingIdx] = client[kRunningIdx] 47599 47600 assert(client[kRunning] === 0) 47601 47602 client.emit('disconnect', 47603 client[kUrl], 47604 [client], 47605 err 47606 ) 47607 47608 resume(client) 47609 } 47610 47611 const constants = __nccwpck_require__(30953) 47612 const createRedirectInterceptor = __nccwpck_require__(38861) 47613 const EMPTY_BUF = Buffer.alloc(0) 47614 47615 async function lazyllhttp () { 47616 const llhttpWasmData = process.env.JEST_WORKER_ID ? __nccwpck_require__(61145) : undefined 47617 47618 let mod 47619 try { 47620 mod = await WebAssembly.compile(Buffer.from(__nccwpck_require__(95627), 'base64')) 47621 } catch (e) { 47622 /* istanbul ignore next */ 47623 47624 // We could check if the error was caused by the simd option not 47625 // being enabled, but the occurring of this other error 47626 // * https://github.com/emscripten-core/emscripten/issues/11495 47627 // got me to remove that check to avoid breaking Node 12. 47628 mod = await WebAssembly.compile(Buffer.from(llhttpWasmData || __nccwpck_require__(61145), 'base64')) 47629 } 47630 47631 return await WebAssembly.instantiate(mod, { 47632 env: { 47633 /* eslint-disable camelcase */ 47634 47635 wasm_on_url: (p, at, len) => { 47636 /* istanbul ignore next */ 47637 return 0 47638 }, 47639 wasm_on_status: (p, at, len) => { 47640 assert.strictEqual(currentParser.ptr, p) 47641 const start = at - currentBufferPtr + currentBufferRef.byteOffset 47642 return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len)) || 0 47643 }, 47644 wasm_on_message_begin: (p) => { 47645 assert.strictEqual(currentParser.ptr, p) 47646 return currentParser.onMessageBegin() || 0 47647 }, 47648 wasm_on_header_field: (p, at, len) => { 47649 assert.strictEqual(currentParser.ptr, p) 47650 const start = at - currentBufferPtr + currentBufferRef.byteOffset 47651 return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len)) || 0 47652 }, 47653 wasm_on_header_value: (p, at, len) => { 47654 assert.strictEqual(currentParser.ptr, p) 47655 const start = at - currentBufferPtr + currentBufferRef.byteOffset 47656 return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len)) || 0 47657 }, 47658 wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => { 47659 assert.strictEqual(currentParser.ptr, p) 47660 return currentParser.onHeadersComplete(statusCode, Boolean(upgrade), Boolean(shouldKeepAlive)) || 0 47661 }, 47662 wasm_on_body: (p, at, len) => { 47663 assert.strictEqual(currentParser.ptr, p) 47664 const start = at - currentBufferPtr + currentBufferRef.byteOffset 47665 return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len)) || 0 47666 }, 47667 wasm_on_message_complete: (p) => { 47668 assert.strictEqual(currentParser.ptr, p) 47669 return currentParser.onMessageComplete() || 0 47670 } 47671 47672 /* eslint-enable camelcase */ 47673 } 47674 }) 47675 } 47676 47677 let llhttpInstance = null 47678 let llhttpPromise = lazyllhttp() 47679 llhttpPromise.catch() 47680 47681 let currentParser = null 47682 let currentBufferRef = null 47683 let currentBufferSize = 0 47684 let currentBufferPtr = null 47685 47686 const TIMEOUT_HEADERS = 1 47687 const TIMEOUT_BODY = 2 47688 const TIMEOUT_IDLE = 3 47689 47690 class Parser { 47691 constructor (client, socket, { exports }) { 47692 assert(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0) 47693 47694 this.llhttp = exports 47695 this.ptr = this.llhttp.llhttp_alloc(constants.TYPE.RESPONSE) 47696 this.client = client 47697 this.socket = socket 47698 this.timeout = null 47699 this.timeoutValue = null 47700 this.timeoutType = null 47701 this.statusCode = null 47702 this.statusText = '' 47703 this.upgrade = false 47704 this.headers = [] 47705 this.headersSize = 0 47706 this.headersMaxSize = client[kMaxHeadersSize] 47707 this.shouldKeepAlive = false 47708 this.paused = false 47709 this.resume = this.resume.bind(this) 47710 47711 this.bytesRead = 0 47712 47713 this.keepAlive = '' 47714 this.contentLength = '' 47715 this.connection = '' 47716 this.maxResponseSize = client[kMaxResponseSize] 47717 } 47718 47719 setTimeout (value, type) { 47720 this.timeoutType = type 47721 if (value !== this.timeoutValue) { 47722 timers.clearTimeout(this.timeout) 47723 if (value) { 47724 this.timeout = timers.setTimeout(onParserTimeout, value, this) 47725 // istanbul ignore else: only for jest 47726 if (this.timeout.unref) { 47727 this.timeout.unref() 47728 } 47729 } else { 47730 this.timeout = null 47731 } 47732 this.timeoutValue = value 47733 } else if (this.timeout) { 47734 // istanbul ignore else: only for jest 47735 if (this.timeout.refresh) { 47736 this.timeout.refresh() 47737 } 47738 } 47739 } 47740 47741 resume () { 47742 if (this.socket.destroyed || !this.paused) { 47743 return 47744 } 47745 47746 assert(this.ptr != null) 47747 assert(currentParser == null) 47748 47749 this.llhttp.llhttp_resume(this.ptr) 47750 47751 assert(this.timeoutType === TIMEOUT_BODY) 47752 if (this.timeout) { 47753 // istanbul ignore else: only for jest 47754 if (this.timeout.refresh) { 47755 this.timeout.refresh() 47756 } 47757 } 47758 47759 this.paused = false 47760 this.execute(this.socket.read() || EMPTY_BUF) // Flush parser. 47761 this.readMore() 47762 } 47763 47764 readMore () { 47765 while (!this.paused && this.ptr) { 47766 const chunk = this.socket.read() 47767 if (chunk === null) { 47768 break 47769 } 47770 this.execute(chunk) 47771 } 47772 } 47773 47774 execute (data) { 47775 assert(this.ptr != null) 47776 assert(currentParser == null) 47777 assert(!this.paused) 47778 47779 const { socket, llhttp } = this 47780 47781 if (data.length > currentBufferSize) { 47782 if (currentBufferPtr) { 47783 llhttp.free(currentBufferPtr) 47784 } 47785 currentBufferSize = Math.ceil(data.length / 4096) * 4096 47786 currentBufferPtr = llhttp.malloc(currentBufferSize) 47787 } 47788 47789 new Uint8Array(llhttp.memory.buffer, currentBufferPtr, currentBufferSize).set(data) 47790 47791 // Call `execute` on the wasm parser. 47792 // We pass the `llhttp_parser` pointer address, the pointer address of buffer view data, 47793 // and finally the length of bytes to parse. 47794 // The return value is an error code or `constants.ERROR.OK`. 47795 try { 47796 let ret 47797 47798 try { 47799 currentBufferRef = data 47800 currentParser = this 47801 ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, data.length) 47802 /* eslint-disable-next-line no-useless-catch */ 47803 } catch (err) { 47804 /* istanbul ignore next: difficult to make a test case for */ 47805 throw err 47806 } finally { 47807 currentParser = null 47808 currentBufferRef = null 47809 } 47810 47811 const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr 47812 47813 if (ret === constants.ERROR.PAUSED_UPGRADE) { 47814 this.onUpgrade(data.slice(offset)) 47815 } else if (ret === constants.ERROR.PAUSED) { 47816 this.paused = true 47817 socket.unshift(data.slice(offset)) 47818 } else if (ret !== constants.ERROR.OK) { 47819 const ptr = llhttp.llhttp_get_error_reason(this.ptr) 47820 let message = '' 47821 /* istanbul ignore else: difficult to make a test case for */ 47822 if (ptr) { 47823 const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0) 47824 message = 47825 'Response does not match the HTTP/1.1 protocol (' + 47826 Buffer.from(llhttp.memory.buffer, ptr, len).toString() + 47827 ')' 47828 } 47829 throw new HTTPParserError(message, constants.ERROR[ret], data.slice(offset)) 47830 } 47831 } catch (err) { 47832 util.destroy(socket, err) 47833 } 47834 } 47835 47836 destroy () { 47837 assert(this.ptr != null) 47838 assert(currentParser == null) 47839 47840 this.llhttp.llhttp_free(this.ptr) 47841 this.ptr = null 47842 47843 timers.clearTimeout(this.timeout) 47844 this.timeout = null 47845 this.timeoutValue = null 47846 this.timeoutType = null 47847 47848 this.paused = false 47849 } 47850 47851 onStatus (buf) { 47852 this.statusText = buf.toString() 47853 } 47854 47855 onMessageBegin () { 47856 const { socket, client } = this 47857 47858 /* istanbul ignore next: difficult to make a test case for */ 47859 if (socket.destroyed) { 47860 return -1 47861 } 47862 47863 const request = client[kQueue][client[kRunningIdx]] 47864 if (!request) { 47865 return -1 47866 } 47867 } 47868 47869 onHeaderField (buf) { 47870 const len = this.headers.length 47871 47872 if ((len & 1) === 0) { 47873 this.headers.push(buf) 47874 } else { 47875 this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]) 47876 } 47877 47878 this.trackHeader(buf.length) 47879 } 47880 47881 onHeaderValue (buf) { 47882 let len = this.headers.length 47883 47884 if ((len & 1) === 1) { 47885 this.headers.push(buf) 47886 len += 1 47887 } else { 47888 this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]) 47889 } 47890 47891 const key = this.headers[len - 2] 47892 if (key.length === 10 && key.toString().toLowerCase() === 'keep-alive') { 47893 this.keepAlive += buf.toString() 47894 } else if (key.length === 10 && key.toString().toLowerCase() === 'connection') { 47895 this.connection += buf.toString() 47896 } else if (key.length === 14 && key.toString().toLowerCase() === 'content-length') { 47897 this.contentLength += buf.toString() 47898 } 47899 47900 this.trackHeader(buf.length) 47901 } 47902 47903 trackHeader (len) { 47904 this.headersSize += len 47905 if (this.headersSize >= this.headersMaxSize) { 47906 util.destroy(this.socket, new HeadersOverflowError()) 47907 } 47908 } 47909 47910 onUpgrade (head) { 47911 const { upgrade, client, socket, headers, statusCode } = this 47912 47913 assert(upgrade) 47914 47915 const request = client[kQueue][client[kRunningIdx]] 47916 assert(request) 47917 47918 assert(!socket.destroyed) 47919 assert(socket === client[kSocket]) 47920 assert(!this.paused) 47921 assert(request.upgrade || request.method === 'CONNECT') 47922 47923 this.statusCode = null 47924 this.statusText = '' 47925 this.shouldKeepAlive = null 47926 47927 assert(this.headers.length % 2 === 0) 47928 this.headers = [] 47929 this.headersSize = 0 47930 47931 socket.unshift(head) 47932 47933 socket[kParser].destroy() 47934 socket[kParser] = null 47935 47936 socket[kClient] = null 47937 socket[kError] = null 47938 socket 47939 .removeListener('error', onSocketError) 47940 .removeListener('readable', onSocketReadable) 47941 .removeListener('end', onSocketEnd) 47942 .removeListener('close', onSocketClose) 47943 47944 client[kSocket] = null 47945 client[kQueue][client[kRunningIdx]++] = null 47946 client.emit('disconnect', client[kUrl], [client], new InformationalError('upgrade')) 47947 47948 try { 47949 request.onUpgrade(statusCode, headers, socket) 47950 } catch (err) { 47951 util.destroy(socket, err) 47952 } 47953 47954 resume(client) 47955 } 47956 47957 onHeadersComplete (statusCode, upgrade, shouldKeepAlive) { 47958 const { client, socket, headers, statusText } = this 47959 47960 /* istanbul ignore next: difficult to make a test case for */ 47961 if (socket.destroyed) { 47962 return -1 47963 } 47964 47965 const request = client[kQueue][client[kRunningIdx]] 47966 47967 /* istanbul ignore next: difficult to make a test case for */ 47968 if (!request) { 47969 return -1 47970 } 47971 47972 assert(!this.upgrade) 47973 assert(this.statusCode < 200) 47974 47975 if (statusCode === 100) { 47976 util.destroy(socket, new SocketError('bad response', util.getSocketInfo(socket))) 47977 return -1 47978 } 47979 47980 /* this can only happen if server is misbehaving */ 47981 if (upgrade && !request.upgrade) { 47982 util.destroy(socket, new SocketError('bad upgrade', util.getSocketInfo(socket))) 47983 return -1 47984 } 47985 47986 assert.strictEqual(this.timeoutType, TIMEOUT_HEADERS) 47987 47988 this.statusCode = statusCode 47989 this.shouldKeepAlive = ( 47990 shouldKeepAlive || 47991 // Override llhttp value which does not allow keepAlive for HEAD. 47992 (request.method === 'HEAD' && !socket[kReset] && this.connection.toLowerCase() === 'keep-alive') 47993 ) 47994 47995 if (this.statusCode >= 200) { 47996 const bodyTimeout = request.bodyTimeout != null 47997 ? request.bodyTimeout 47998 : client[kBodyTimeout] 47999 this.setTimeout(bodyTimeout, TIMEOUT_BODY) 48000 } else if (this.timeout) { 48001 // istanbul ignore else: only for jest 48002 if (this.timeout.refresh) { 48003 this.timeout.refresh() 48004 } 48005 } 48006 48007 if (request.method === 'CONNECT') { 48008 assert(client[kRunning] === 1) 48009 this.upgrade = true 48010 return 2 48011 } 48012 48013 if (upgrade) { 48014 assert(client[kRunning] === 1) 48015 this.upgrade = true 48016 return 2 48017 } 48018 48019 assert(this.headers.length % 2 === 0) 48020 this.headers = [] 48021 this.headersSize = 0 48022 48023 if (this.shouldKeepAlive && client[kPipelining]) { 48024 const keepAliveTimeout = this.keepAlive ? util.parseKeepAliveTimeout(this.keepAlive) : null 48025 48026 if (keepAliveTimeout != null) { 48027 const timeout = Math.min( 48028 keepAliveTimeout - client[kKeepAliveTimeoutThreshold], 48029 client[kKeepAliveMaxTimeout] 48030 ) 48031 if (timeout <= 0) { 48032 socket[kReset] = true 48033 } else { 48034 client[kKeepAliveTimeoutValue] = timeout 48035 } 48036 } else { 48037 client[kKeepAliveTimeoutValue] = client[kKeepAliveDefaultTimeout] 48038 } 48039 } else { 48040 // Stop more requests from being dispatched. 48041 socket[kReset] = true 48042 } 48043 48044 const pause = request.onHeaders(statusCode, headers, this.resume, statusText) === false 48045 48046 if (request.aborted) { 48047 return -1 48048 } 48049 48050 if (request.method === 'HEAD') { 48051 return 1 48052 } 48053 48054 if (statusCode < 200) { 48055 return 1 48056 } 48057 48058 if (socket[kBlocking]) { 48059 socket[kBlocking] = false 48060 resume(client) 48061 } 48062 48063 return pause ? constants.ERROR.PAUSED : 0 48064 } 48065 48066 onBody (buf) { 48067 const { client, socket, statusCode, maxResponseSize } = this 48068 48069 if (socket.destroyed) { 48070 return -1 48071 } 48072 48073 const request = client[kQueue][client[kRunningIdx]] 48074 assert(request) 48075 48076 assert.strictEqual(this.timeoutType, TIMEOUT_BODY) 48077 if (this.timeout) { 48078 // istanbul ignore else: only for jest 48079 if (this.timeout.refresh) { 48080 this.timeout.refresh() 48081 } 48082 } 48083 48084 assert(statusCode >= 200) 48085 48086 if (maxResponseSize > -1 && this.bytesRead + buf.length > maxResponseSize) { 48087 util.destroy(socket, new ResponseExceededMaxSizeError()) 48088 return -1 48089 } 48090 48091 this.bytesRead += buf.length 48092 48093 if (request.onData(buf) === false) { 48094 return constants.ERROR.PAUSED 48095 } 48096 } 48097 48098 onMessageComplete () { 48099 const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this 48100 48101 if (socket.destroyed && (!statusCode || shouldKeepAlive)) { 48102 return -1 48103 } 48104 48105 if (upgrade) { 48106 return 48107 } 48108 48109 const request = client[kQueue][client[kRunningIdx]] 48110 assert(request) 48111 48112 assert(statusCode >= 100) 48113 48114 this.statusCode = null 48115 this.statusText = '' 48116 this.bytesRead = 0 48117 this.contentLength = '' 48118 this.keepAlive = '' 48119 this.connection = '' 48120 48121 assert(this.headers.length % 2 === 0) 48122 this.headers = [] 48123 this.headersSize = 0 48124 48125 if (statusCode < 200) { 48126 return 48127 } 48128 48129 /* istanbul ignore next: should be handled by llhttp? */ 48130 if (request.method !== 'HEAD' && contentLength && bytesRead !== parseInt(contentLength, 10)) { 48131 util.destroy(socket, new ResponseContentLengthMismatchError()) 48132 return -1 48133 } 48134 48135 request.onComplete(headers) 48136 48137 client[kQueue][client[kRunningIdx]++] = null 48138 48139 if (socket[kWriting]) { 48140 assert.strictEqual(client[kRunning], 0) 48141 // Response completed before request. 48142 util.destroy(socket, new InformationalError('reset')) 48143 return constants.ERROR.PAUSED 48144 } else if (!shouldKeepAlive) { 48145 util.destroy(socket, new InformationalError('reset')) 48146 return constants.ERROR.PAUSED 48147 } else if (socket[kReset] && client[kRunning] === 0) { 48148 // Destroy socket once all requests have completed. 48149 // The request at the tail of the pipeline is the one 48150 // that requested reset and no further requests should 48151 // have been queued since then. 48152 util.destroy(socket, new InformationalError('reset')) 48153 return constants.ERROR.PAUSED 48154 } else if (client[kPipelining] === 1) { 48155 // We must wait a full event loop cycle to reuse this socket to make sure 48156 // that non-spec compliant servers are not closing the connection even if they 48157 // said they won't. 48158 setImmediate(resume, client) 48159 } else { 48160 resume(client) 48161 } 48162 } 48163 } 48164 48165 function onParserTimeout (parser) { 48166 const { socket, timeoutType, client } = parser 48167 48168 /* istanbul ignore else */ 48169 if (timeoutType === TIMEOUT_HEADERS) { 48170 if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) { 48171 assert(!parser.paused, 'cannot be paused while waiting for headers') 48172 util.destroy(socket, new HeadersTimeoutError()) 48173 } 48174 } else if (timeoutType === TIMEOUT_BODY) { 48175 if (!parser.paused) { 48176 util.destroy(socket, new BodyTimeoutError()) 48177 } 48178 } else if (timeoutType === TIMEOUT_IDLE) { 48179 assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue]) 48180 util.destroy(socket, new InformationalError('socket idle timeout')) 48181 } 48182 } 48183 48184 function onSocketReadable () { 48185 const { [kParser]: parser } = this 48186 if (parser) { 48187 parser.readMore() 48188 } 48189 } 48190 48191 function onSocketError (err) { 48192 const { [kClient]: client, [kParser]: parser } = this 48193 48194 assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID') 48195 48196 if (client[kHTTPConnVersion] !== 'h2') { 48197 // On Mac OS, we get an ECONNRESET even if there is a full body to be forwarded 48198 // to the user. 48199 if (err.code === 'ECONNRESET' && parser.statusCode && !parser.shouldKeepAlive) { 48200 // We treat all incoming data so for as a valid response. 48201 parser.onMessageComplete() 48202 return 48203 } 48204 } 48205 48206 this[kError] = err 48207 48208 onError(this[kClient], err) 48209 } 48210 48211 function onError (client, err) { 48212 if ( 48213 client[kRunning] === 0 && 48214 err.code !== 'UND_ERR_INFO' && 48215 err.code !== 'UND_ERR_SOCKET' 48216 ) { 48217 // Error is not caused by running request and not a recoverable 48218 // socket error. 48219 48220 assert(client[kPendingIdx] === client[kRunningIdx]) 48221 48222 const requests = client[kQueue].splice(client[kRunningIdx]) 48223 for (let i = 0; i < requests.length; i++) { 48224 const request = requests[i] 48225 errorRequest(client, request, err) 48226 } 48227 assert(client[kSize] === 0) 48228 } 48229 } 48230 48231 function onSocketEnd () { 48232 const { [kParser]: parser, [kClient]: client } = this 48233 48234 if (client[kHTTPConnVersion] !== 'h2') { 48235 if (parser.statusCode && !parser.shouldKeepAlive) { 48236 // We treat all incoming data so far as a valid response. 48237 parser.onMessageComplete() 48238 return 48239 } 48240 } 48241 48242 util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this))) 48243 } 48244 48245 function onSocketClose () { 48246 const { [kClient]: client, [kParser]: parser } = this 48247 48248 if (client[kHTTPConnVersion] === 'h1' && parser) { 48249 if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) { 48250 // We treat all incoming data so far as a valid response. 48251 parser.onMessageComplete() 48252 } 48253 48254 this[kParser].destroy() 48255 this[kParser] = null 48256 } 48257 48258 const err = this[kError] || new SocketError('closed', util.getSocketInfo(this)) 48259 48260 client[kSocket] = null 48261 48262 if (client.destroyed) { 48263 assert(client[kPending] === 0) 48264 48265 // Fail entire queue. 48266 const requests = client[kQueue].splice(client[kRunningIdx]) 48267 for (let i = 0; i < requests.length; i++) { 48268 const request = requests[i] 48269 errorRequest(client, request, err) 48270 } 48271 } else if (client[kRunning] > 0 && err.code !== 'UND_ERR_INFO') { 48272 // Fail head of pipeline. 48273 const request = client[kQueue][client[kRunningIdx]] 48274 client[kQueue][client[kRunningIdx]++] = null 48275 48276 errorRequest(client, request, err) 48277 } 48278 48279 client[kPendingIdx] = client[kRunningIdx] 48280 48281 assert(client[kRunning] === 0) 48282 48283 client.emit('disconnect', client[kUrl], [client], err) 48284 48285 resume(client) 48286 } 48287 48288 async function connect (client) { 48289 assert(!client[kConnecting]) 48290 assert(!client[kSocket]) 48291 48292 let { host, hostname, protocol, port } = client[kUrl] 48293 48294 // Resolve ipv6 48295 if (hostname[0] === '[') { 48296 const idx = hostname.indexOf(']') 48297 48298 assert(idx !== -1) 48299 const ip = hostname.substring(1, idx) 48300 48301 assert(net.isIP(ip)) 48302 hostname = ip 48303 } 48304 48305 client[kConnecting] = true 48306 48307 if (channels.beforeConnect.hasSubscribers) { 48308 channels.beforeConnect.publish({ 48309 connectParams: { 48310 host, 48311 hostname, 48312 protocol, 48313 port, 48314 servername: client[kServerName], 48315 localAddress: client[kLocalAddress] 48316 }, 48317 connector: client[kConnector] 48318 }) 48319 } 48320 48321 try { 48322 const socket = await new Promise((resolve, reject) => { 48323 client[kConnector]({ 48324 host, 48325 hostname, 48326 protocol, 48327 port, 48328 servername: client[kServerName], 48329 localAddress: client[kLocalAddress] 48330 }, (err, socket) => { 48331 if (err) { 48332 reject(err) 48333 } else { 48334 resolve(socket) 48335 } 48336 }) 48337 }) 48338 48339 if (client.destroyed) { 48340 util.destroy(socket.on('error', () => {}), new ClientDestroyedError()) 48341 return 48342 } 48343 48344 client[kConnecting] = false 48345 48346 assert(socket) 48347 48348 const isH2 = socket.alpnProtocol === 'h2' 48349 if (isH2) { 48350 if (!h2ExperimentalWarned) { 48351 h2ExperimentalWarned = true 48352 process.emitWarning('H2 support is experimental, expect them to change at any time.', { 48353 code: 'UNDICI-H2' 48354 }) 48355 } 48356 48357 const session = http2.connect(client[kUrl], { 48358 createConnection: () => socket, 48359 peerMaxConcurrentStreams: client[kHTTP2SessionState].maxConcurrentStreams 48360 }) 48361 48362 client[kHTTPConnVersion] = 'h2' 48363 session[kClient] = client 48364 session[kSocket] = socket 48365 session.on('error', onHttp2SessionError) 48366 session.on('frameError', onHttp2FrameError) 48367 session.on('end', onHttp2SessionEnd) 48368 session.on('goaway', onHTTP2GoAway) 48369 session.on('close', onSocketClose) 48370 session.unref() 48371 48372 client[kHTTP2Session] = session 48373 socket[kHTTP2Session] = session 48374 } else { 48375 if (!llhttpInstance) { 48376 llhttpInstance = await llhttpPromise 48377 llhttpPromise = null 48378 } 48379 48380 socket[kNoRef] = false 48381 socket[kWriting] = false 48382 socket[kReset] = false 48383 socket[kBlocking] = false 48384 socket[kParser] = new Parser(client, socket, llhttpInstance) 48385 } 48386 48387 socket[kCounter] = 0 48388 socket[kMaxRequests] = client[kMaxRequests] 48389 socket[kClient] = client 48390 socket[kError] = null 48391 48392 socket 48393 .on('error', onSocketError) 48394 .on('readable', onSocketReadable) 48395 .on('end', onSocketEnd) 48396 .on('close', onSocketClose) 48397 48398 client[kSocket] = socket 48399 48400 if (channels.connected.hasSubscribers) { 48401 channels.connected.publish({ 48402 connectParams: { 48403 host, 48404 hostname, 48405 protocol, 48406 port, 48407 servername: client[kServerName], 48408 localAddress: client[kLocalAddress] 48409 }, 48410 connector: client[kConnector], 48411 socket 48412 }) 48413 } 48414 client.emit('connect', client[kUrl], [client]) 48415 } catch (err) { 48416 if (client.destroyed) { 48417 return 48418 } 48419 48420 client[kConnecting] = false 48421 48422 if (channels.connectError.hasSubscribers) { 48423 channels.connectError.publish({ 48424 connectParams: { 48425 host, 48426 hostname, 48427 protocol, 48428 port, 48429 servername: client[kServerName], 48430 localAddress: client[kLocalAddress] 48431 }, 48432 connector: client[kConnector], 48433 error: err 48434 }) 48435 } 48436 48437 if (err.code === 'ERR_TLS_CERT_ALTNAME_INVALID') { 48438 assert(client[kRunning] === 0) 48439 while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) { 48440 const request = client[kQueue][client[kPendingIdx]++] 48441 errorRequest(client, request, err) 48442 } 48443 } else { 48444 onError(client, err) 48445 } 48446 48447 client.emit('connectionError', client[kUrl], [client], err) 48448 } 48449 48450 resume(client) 48451 } 48452 48453 function emitDrain (client) { 48454 client[kNeedDrain] = 0 48455 client.emit('drain', client[kUrl], [client]) 48456 } 48457 48458 function resume (client, sync) { 48459 if (client[kResuming] === 2) { 48460 return 48461 } 48462 48463 client[kResuming] = 2 48464 48465 _resume(client, sync) 48466 client[kResuming] = 0 48467 48468 if (client[kRunningIdx] > 256) { 48469 client[kQueue].splice(0, client[kRunningIdx]) 48470 client[kPendingIdx] -= client[kRunningIdx] 48471 client[kRunningIdx] = 0 48472 } 48473 } 48474 48475 function _resume (client, sync) { 48476 while (true) { 48477 if (client.destroyed) { 48478 assert(client[kPending] === 0) 48479 return 48480 } 48481 48482 if (client[kClosedResolve] && !client[kSize]) { 48483 client[kClosedResolve]() 48484 client[kClosedResolve] = null 48485 return 48486 } 48487 48488 const socket = client[kSocket] 48489 48490 if (socket && !socket.destroyed && socket.alpnProtocol !== 'h2') { 48491 if (client[kSize] === 0) { 48492 if (!socket[kNoRef] && socket.unref) { 48493 socket.unref() 48494 socket[kNoRef] = true 48495 } 48496 } else if (socket[kNoRef] && socket.ref) { 48497 socket.ref() 48498 socket[kNoRef] = false 48499 } 48500 48501 if (client[kSize] === 0) { 48502 if (socket[kParser].timeoutType !== TIMEOUT_IDLE) { 48503 socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_IDLE) 48504 } 48505 } else if (client[kRunning] > 0 && socket[kParser].statusCode < 200) { 48506 if (socket[kParser].timeoutType !== TIMEOUT_HEADERS) { 48507 const request = client[kQueue][client[kRunningIdx]] 48508 const headersTimeout = request.headersTimeout != null 48509 ? request.headersTimeout 48510 : client[kHeadersTimeout] 48511 socket[kParser].setTimeout(headersTimeout, TIMEOUT_HEADERS) 48512 } 48513 } 48514 } 48515 48516 if (client[kBusy]) { 48517 client[kNeedDrain] = 2 48518 } else if (client[kNeedDrain] === 2) { 48519 if (sync) { 48520 client[kNeedDrain] = 1 48521 process.nextTick(emitDrain, client) 48522 } else { 48523 emitDrain(client) 48524 } 48525 continue 48526 } 48527 48528 if (client[kPending] === 0) { 48529 return 48530 } 48531 48532 if (client[kRunning] >= (client[kPipelining] || 1)) { 48533 return 48534 } 48535 48536 const request = client[kQueue][client[kPendingIdx]] 48537 48538 if (client[kUrl].protocol === 'https:' && client[kServerName] !== request.servername) { 48539 if (client[kRunning] > 0) { 48540 return 48541 } 48542 48543 client[kServerName] = request.servername 48544 48545 if (socket && socket.servername !== request.servername) { 48546 util.destroy(socket, new InformationalError('servername changed')) 48547 return 48548 } 48549 } 48550 48551 if (client[kConnecting]) { 48552 return 48553 } 48554 48555 if (!socket && !client[kHTTP2Session]) { 48556 connect(client) 48557 return 48558 } 48559 48560 if (socket.destroyed || socket[kWriting] || socket[kReset] || socket[kBlocking]) { 48561 return 48562 } 48563 48564 if (client[kRunning] > 0 && !request.idempotent) { 48565 // Non-idempotent request cannot be retried. 48566 // Ensure that no other requests are inflight and 48567 // could cause failure. 48568 return 48569 } 48570 48571 if (client[kRunning] > 0 && (request.upgrade || request.method === 'CONNECT')) { 48572 // Don't dispatch an upgrade until all preceding requests have completed. 48573 // A misbehaving server might upgrade the connection before all pipelined 48574 // request has completed. 48575 return 48576 } 48577 48578 if (client[kRunning] > 0 && util.bodyLength(request.body) !== 0 && 48579 (util.isStream(request.body) || util.isAsyncIterable(request.body))) { 48580 // Request with stream or iterator body can error while other requests 48581 // are inflight and indirectly error those as well. 48582 // Ensure this doesn't happen by waiting for inflight 48583 // to complete before dispatching. 48584 48585 // Request with stream or iterator body cannot be retried. 48586 // Ensure that no other requests are inflight and 48587 // could cause failure. 48588 return 48589 } 48590 48591 if (!request.aborted && write(client, request)) { 48592 client[kPendingIdx]++ 48593 } else { 48594 client[kQueue].splice(client[kPendingIdx], 1) 48595 } 48596 } 48597 } 48598 48599 // https://www.rfc-editor.org/rfc/rfc7230#section-3.3.2 48600 function shouldSendContentLength (method) { 48601 return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS' && method !== 'TRACE' && method !== 'CONNECT' 48602 } 48603 48604 function write (client, request) { 48605 if (client[kHTTPConnVersion] === 'h2') { 48606 writeH2(client, client[kHTTP2Session], request) 48607 return 48608 } 48609 48610 const { body, method, path, host, upgrade, headers, blocking, reset } = request 48611 48612 // https://tools.ietf.org/html/rfc7231#section-4.3.1 48613 // https://tools.ietf.org/html/rfc7231#section-4.3.2 48614 // https://tools.ietf.org/html/rfc7231#section-4.3.5 48615 48616 // Sending a payload body on a request that does not 48617 // expect it can cause undefined behavior on some 48618 // servers and corrupt connection state. Do not 48619 // re-use the connection for further requests. 48620 48621 const expectsPayload = ( 48622 method === 'PUT' || 48623 method === 'POST' || 48624 method === 'PATCH' 48625 ) 48626 48627 if (body && typeof body.read === 'function') { 48628 // Try to read EOF in order to get length. 48629 body.read(0) 48630 } 48631 48632 const bodyLength = util.bodyLength(body) 48633 48634 let contentLength = bodyLength 48635 48636 if (contentLength === null) { 48637 contentLength = request.contentLength 48638 } 48639 48640 if (contentLength === 0 && !expectsPayload) { 48641 // https://tools.ietf.org/html/rfc7230#section-3.3.2 48642 // A user agent SHOULD NOT send a Content-Length header field when 48643 // the request message does not contain a payload body and the method 48644 // semantics do not anticipate such a body. 48645 48646 contentLength = null 48647 } 48648 48649 // https://github.com/nodejs/undici/issues/2046 48650 // A user agent may send a Content-Length header with 0 value, this should be allowed. 48651 if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength !== null && request.contentLength !== contentLength) { 48652 if (client[kStrictContentLength]) { 48653 errorRequest(client, request, new RequestContentLengthMismatchError()) 48654 return false 48655 } 48656 48657 process.emitWarning(new RequestContentLengthMismatchError()) 48658 } 48659 48660 const socket = client[kSocket] 48661 48662 try { 48663 request.onConnect((err) => { 48664 if (request.aborted || request.completed) { 48665 return 48666 } 48667 48668 errorRequest(client, request, err || new RequestAbortedError()) 48669 48670 util.destroy(socket, new InformationalError('aborted')) 48671 }) 48672 } catch (err) { 48673 errorRequest(client, request, err) 48674 } 48675 48676 if (request.aborted) { 48677 return false 48678 } 48679 48680 if (method === 'HEAD') { 48681 // https://github.com/mcollina/undici/issues/258 48682 // Close after a HEAD request to interop with misbehaving servers 48683 // that may send a body in the response. 48684 48685 socket[kReset] = true 48686 } 48687 48688 if (upgrade || method === 'CONNECT') { 48689 // On CONNECT or upgrade, block pipeline from dispatching further 48690 // requests on this connection. 48691 48692 socket[kReset] = true 48693 } 48694 48695 if (reset != null) { 48696 socket[kReset] = reset 48697 } 48698 48699 if (client[kMaxRequests] && socket[kCounter]++ >= client[kMaxRequests]) { 48700 socket[kReset] = true 48701 } 48702 48703 if (blocking) { 48704 socket[kBlocking] = true 48705 } 48706 48707 let header = `${method} ${path} HTTP/1.1\r\n` 48708 48709 if (typeof host === 'string') { 48710 header += `host: ${host}\r\n` 48711 } else { 48712 header += client[kHostHeader] 48713 } 48714 48715 if (upgrade) { 48716 header += `connection: upgrade\r\nupgrade: ${upgrade}\r\n` 48717 } else if (client[kPipelining] && !socket[kReset]) { 48718 header += 'connection: keep-alive\r\n' 48719 } else { 48720 header += 'connection: close\r\n' 48721 } 48722 48723 if (headers) { 48724 header += headers 48725 } 48726 48727 if (channels.sendHeaders.hasSubscribers) { 48728 channels.sendHeaders.publish({ request, headers: header, socket }) 48729 } 48730 48731 /* istanbul ignore else: assertion */ 48732 if (!body || bodyLength === 0) { 48733 if (contentLength === 0) { 48734 socket.write(`${header}content-length: 0\r\n\r\n`, 'latin1') 48735 } else { 48736 assert(contentLength === null, 'no body must not have content length') 48737 socket.write(`${header}\r\n`, 'latin1') 48738 } 48739 request.onRequestSent() 48740 } else if (util.isBuffer(body)) { 48741 assert(contentLength === body.byteLength, 'buffer body must have content length') 48742 48743 socket.cork() 48744 socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, 'latin1') 48745 socket.write(body) 48746 socket.uncork() 48747 request.onBodySent(body) 48748 request.onRequestSent() 48749 if (!expectsPayload) { 48750 socket[kReset] = true 48751 } 48752 } else if (util.isBlobLike(body)) { 48753 if (typeof body.stream === 'function') { 48754 writeIterable({ body: body.stream(), client, request, socket, contentLength, header, expectsPayload }) 48755 } else { 48756 writeBlob({ body, client, request, socket, contentLength, header, expectsPayload }) 48757 } 48758 } else if (util.isStream(body)) { 48759 writeStream({ body, client, request, socket, contentLength, header, expectsPayload }) 48760 } else if (util.isIterable(body)) { 48761 writeIterable({ body, client, request, socket, contentLength, header, expectsPayload }) 48762 } else { 48763 assert(false) 48764 } 48765 48766 return true 48767 } 48768 48769 function writeH2 (client, session, request) { 48770 const { body, method, path, host, upgrade, expectContinue, signal, headers: reqHeaders } = request 48771 48772 let headers 48773 if (typeof reqHeaders === 'string') headers = Request[kHTTP2CopyHeaders](reqHeaders.trim()) 48774 else headers = reqHeaders 48775 48776 if (upgrade) { 48777 errorRequest(client, request, new Error('Upgrade not supported for H2')) 48778 return false 48779 } 48780 48781 try { 48782 // TODO(HTTP/2): Should we call onConnect immediately or on stream ready event? 48783 request.onConnect((err) => { 48784 if (request.aborted || request.completed) { 48785 return 48786 } 48787 48788 errorRequest(client, request, err || new RequestAbortedError()) 48789 }) 48790 } catch (err) { 48791 errorRequest(client, request, err) 48792 } 48793 48794 if (request.aborted) { 48795 return false 48796 } 48797 48798 /** @type {import('node:http2').ClientHttp2Stream} */ 48799 let stream 48800 const h2State = client[kHTTP2SessionState] 48801 48802 headers[HTTP2_HEADER_AUTHORITY] = host || client[kHost] 48803 headers[HTTP2_HEADER_METHOD] = method 48804 48805 if (method === 'CONNECT') { 48806 session.ref() 48807 // we are already connected, streams are pending, first request 48808 // will create a new stream. We trigger a request to create the stream and wait until 48809 // `ready` event is triggered 48810 // We disabled endStream to allow the user to write to the stream 48811 stream = session.request(headers, { endStream: false, signal }) 48812 48813 if (stream.id && !stream.pending) { 48814 request.onUpgrade(null, null, stream) 48815 ++h2State.openStreams 48816 } else { 48817 stream.once('ready', () => { 48818 request.onUpgrade(null, null, stream) 48819 ++h2State.openStreams 48820 }) 48821 } 48822 48823 stream.once('close', () => { 48824 h2State.openStreams -= 1 48825 // TODO(HTTP/2): unref only if current streams count is 0 48826 if (h2State.openStreams === 0) session.unref() 48827 }) 48828 48829 return true 48830 } 48831 48832 // https://tools.ietf.org/html/rfc7540#section-8.3 48833 // :path and :scheme headers must be omited when sending CONNECT 48834 48835 headers[HTTP2_HEADER_PATH] = path 48836 headers[HTTP2_HEADER_SCHEME] = 'https' 48837 48838 // https://tools.ietf.org/html/rfc7231#section-4.3.1 48839 // https://tools.ietf.org/html/rfc7231#section-4.3.2 48840 // https://tools.ietf.org/html/rfc7231#section-4.3.5 48841 48842 // Sending a payload body on a request that does not 48843 // expect it can cause undefined behavior on some 48844 // servers and corrupt connection state. Do not 48845 // re-use the connection for further requests. 48846 48847 const expectsPayload = ( 48848 method === 'PUT' || 48849 method === 'POST' || 48850 method === 'PATCH' 48851 ) 48852 48853 if (body && typeof body.read === 'function') { 48854 // Try to read EOF in order to get length. 48855 body.read(0) 48856 } 48857 48858 let contentLength = util.bodyLength(body) 48859 48860 if (contentLength == null) { 48861 contentLength = request.contentLength 48862 } 48863 48864 if (contentLength === 0 || !expectsPayload) { 48865 // https://tools.ietf.org/html/rfc7230#section-3.3.2 48866 // A user agent SHOULD NOT send a Content-Length header field when 48867 // the request message does not contain a payload body and the method 48868 // semantics do not anticipate such a body. 48869 48870 contentLength = null 48871 } 48872 48873 // https://github.com/nodejs/undici/issues/2046 48874 // A user agent may send a Content-Length header with 0 value, this should be allowed. 48875 if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) { 48876 if (client[kStrictContentLength]) { 48877 errorRequest(client, request, new RequestContentLengthMismatchError()) 48878 return false 48879 } 48880 48881 process.emitWarning(new RequestContentLengthMismatchError()) 48882 } 48883 48884 if (contentLength != null) { 48885 assert(body, 'no body must not have content length') 48886 headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}` 48887 } 48888 48889 session.ref() 48890 48891 const shouldEndStream = method === 'GET' || method === 'HEAD' 48892 if (expectContinue) { 48893 headers[HTTP2_HEADER_EXPECT] = '100-continue' 48894 stream = session.request(headers, { endStream: shouldEndStream, signal }) 48895 48896 stream.once('continue', writeBodyH2) 48897 } else { 48898 stream = session.request(headers, { 48899 endStream: shouldEndStream, 48900 signal 48901 }) 48902 writeBodyH2() 48903 } 48904 48905 // Increment counter as we have new several streams open 48906 ++h2State.openStreams 48907 48908 stream.once('response', headers => { 48909 const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers 48910 48911 if (request.onHeaders(Number(statusCode), realHeaders, stream.resume.bind(stream), '') === false) { 48912 stream.pause() 48913 } 48914 }) 48915 48916 stream.once('end', () => { 48917 request.onComplete([]) 48918 }) 48919 48920 stream.on('data', (chunk) => { 48921 if (request.onData(chunk) === false) { 48922 stream.pause() 48923 } 48924 }) 48925 48926 stream.once('close', () => { 48927 h2State.openStreams -= 1 48928 // TODO(HTTP/2): unref only if current streams count is 0 48929 if (h2State.openStreams === 0) { 48930 session.unref() 48931 } 48932 }) 48933 48934 stream.once('error', function (err) { 48935 if (client[kHTTP2Session] && !client[kHTTP2Session].destroyed && !this.closed && !this.destroyed) { 48936 h2State.streams -= 1 48937 util.destroy(stream, err) 48938 } 48939 }) 48940 48941 stream.once('frameError', (type, code) => { 48942 const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`) 48943 errorRequest(client, request, err) 48944 48945 if (client[kHTTP2Session] && !client[kHTTP2Session].destroyed && !this.closed && !this.destroyed) { 48946 h2State.streams -= 1 48947 util.destroy(stream, err) 48948 } 48949 }) 48950 48951 // stream.on('aborted', () => { 48952 // // TODO(HTTP/2): Support aborted 48953 // }) 48954 48955 // stream.on('timeout', () => { 48956 // // TODO(HTTP/2): Support timeout 48957 // }) 48958 48959 // stream.on('push', headers => { 48960 // // TODO(HTTP/2): Suppor push 48961 // }) 48962 48963 // stream.on('trailers', headers => { 48964 // // TODO(HTTP/2): Support trailers 48965 // }) 48966 48967 return true 48968 48969 function writeBodyH2 () { 48970 /* istanbul ignore else: assertion */ 48971 if (!body) { 48972 request.onRequestSent() 48973 } else if (util.isBuffer(body)) { 48974 assert(contentLength === body.byteLength, 'buffer body must have content length') 48975 stream.cork() 48976 stream.write(body) 48977 stream.uncork() 48978 stream.end() 48979 request.onBodySent(body) 48980 request.onRequestSent() 48981 } else if (util.isBlobLike(body)) { 48982 if (typeof body.stream === 'function') { 48983 writeIterable({ 48984 client, 48985 request, 48986 contentLength, 48987 h2stream: stream, 48988 expectsPayload, 48989 body: body.stream(), 48990 socket: client[kSocket], 48991 header: '' 48992 }) 48993 } else { 48994 writeBlob({ 48995 body, 48996 client, 48997 request, 48998 contentLength, 48999 expectsPayload, 49000 h2stream: stream, 49001 header: '', 49002 socket: client[kSocket] 49003 }) 49004 } 49005 } else if (util.isStream(body)) { 49006 writeStream({ 49007 body, 49008 client, 49009 request, 49010 contentLength, 49011 expectsPayload, 49012 socket: client[kSocket], 49013 h2stream: stream, 49014 header: '' 49015 }) 49016 } else if (util.isIterable(body)) { 49017 writeIterable({ 49018 body, 49019 client, 49020 request, 49021 contentLength, 49022 expectsPayload, 49023 header: '', 49024 h2stream: stream, 49025 socket: client[kSocket] 49026 }) 49027 } else { 49028 assert(false) 49029 } 49030 } 49031 } 49032 49033 function writeStream ({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) { 49034 assert(contentLength !== 0 || client[kRunning] === 0, 'stream body cannot be pipelined') 49035 49036 if (client[kHTTPConnVersion] === 'h2') { 49037 // For HTTP/2, is enough to pipe the stream 49038 const pipe = pipeline( 49039 body, 49040 h2stream, 49041 (err) => { 49042 if (err) { 49043 util.destroy(body, err) 49044 util.destroy(h2stream, err) 49045 } else { 49046 request.onRequestSent() 49047 } 49048 } 49049 ) 49050 49051 pipe.on('data', onPipeData) 49052 pipe.once('end', () => { 49053 pipe.removeListener('data', onPipeData) 49054 util.destroy(pipe) 49055 }) 49056 49057 function onPipeData (chunk) { 49058 request.onBodySent(chunk) 49059 } 49060 49061 return 49062 } 49063 49064 let finished = false 49065 49066 const writer = new AsyncWriter({ socket, request, contentLength, client, expectsPayload, header }) 49067 49068 const onData = function (chunk) { 49069 if (finished) { 49070 return 49071 } 49072 49073 try { 49074 if (!writer.write(chunk) && this.pause) { 49075 this.pause() 49076 } 49077 } catch (err) { 49078 util.destroy(this, err) 49079 } 49080 } 49081 const onDrain = function () { 49082 if (finished) { 49083 return 49084 } 49085 49086 if (body.resume) { 49087 body.resume() 49088 } 49089 } 49090 const onAbort = function () { 49091 if (finished) { 49092 return 49093 } 49094 const err = new RequestAbortedError() 49095 queueMicrotask(() => onFinished(err)) 49096 } 49097 const onFinished = function (err) { 49098 if (finished) { 49099 return 49100 } 49101 49102 finished = true 49103 49104 assert(socket.destroyed || (socket[kWriting] && client[kRunning] <= 1)) 49105 49106 socket 49107 .off('drain', onDrain) 49108 .off('error', onFinished) 49109 49110 body 49111 .removeListener('data', onData) 49112 .removeListener('end', onFinished) 49113 .removeListener('error', onFinished) 49114 .removeListener('close', onAbort) 49115 49116 if (!err) { 49117 try { 49118 writer.end() 49119 } catch (er) { 49120 err = er 49121 } 49122 } 49123 49124 writer.destroy(err) 49125 49126 if (err && (err.code !== 'UND_ERR_INFO' || err.message !== 'reset')) { 49127 util.destroy(body, err) 49128 } else { 49129 util.destroy(body) 49130 } 49131 } 49132 49133 body 49134 .on('data', onData) 49135 .on('end', onFinished) 49136 .on('error', onFinished) 49137 .on('close', onAbort) 49138 49139 if (body.resume) { 49140 body.resume() 49141 } 49142 49143 socket 49144 .on('drain', onDrain) 49145 .on('error', onFinished) 49146 } 49147 49148 async function writeBlob ({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) { 49149 assert(contentLength === body.size, 'blob body must have content length') 49150 49151 const isH2 = client[kHTTPConnVersion] === 'h2' 49152 try { 49153 if (contentLength != null && contentLength !== body.size) { 49154 throw new RequestContentLengthMismatchError() 49155 } 49156 49157 const buffer = Buffer.from(await body.arrayBuffer()) 49158 49159 if (isH2) { 49160 h2stream.cork() 49161 h2stream.write(buffer) 49162 h2stream.uncork() 49163 } else { 49164 socket.cork() 49165 socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, 'latin1') 49166 socket.write(buffer) 49167 socket.uncork() 49168 } 49169 49170 request.onBodySent(buffer) 49171 request.onRequestSent() 49172 49173 if (!expectsPayload) { 49174 socket[kReset] = true 49175 } 49176 49177 resume(client) 49178 } catch (err) { 49179 util.destroy(isH2 ? h2stream : socket, err) 49180 } 49181 } 49182 49183 async function writeIterable ({ h2stream, body, client, request, socket, contentLength, header, expectsPayload }) { 49184 assert(contentLength !== 0 || client[kRunning] === 0, 'iterator body cannot be pipelined') 49185 49186 let callback = null 49187 function onDrain () { 49188 if (callback) { 49189 const cb = callback 49190 callback = null 49191 cb() 49192 } 49193 } 49194 49195 const waitForDrain = () => new Promise((resolve, reject) => { 49196 assert(callback === null) 49197 49198 if (socket[kError]) { 49199 reject(socket[kError]) 49200 } else { 49201 callback = resolve 49202 } 49203 }) 49204 49205 if (client[kHTTPConnVersion] === 'h2') { 49206 h2stream 49207 .on('close', onDrain) 49208 .on('drain', onDrain) 49209 49210 try { 49211 // It's up to the user to somehow abort the async iterable. 49212 for await (const chunk of body) { 49213 if (socket[kError]) { 49214 throw socket[kError] 49215 } 49216 49217 const res = h2stream.write(chunk) 49218 request.onBodySent(chunk) 49219 if (!res) { 49220 await waitForDrain() 49221 } 49222 } 49223 } catch (err) { 49224 h2stream.destroy(err) 49225 } finally { 49226 request.onRequestSent() 49227 h2stream.end() 49228 h2stream 49229 .off('close', onDrain) 49230 .off('drain', onDrain) 49231 } 49232 49233 return 49234 } 49235 49236 socket 49237 .on('close', onDrain) 49238 .on('drain', onDrain) 49239 49240 const writer = new AsyncWriter({ socket, request, contentLength, client, expectsPayload, header }) 49241 try { 49242 // It's up to the user to somehow abort the async iterable. 49243 for await (const chunk of body) { 49244 if (socket[kError]) { 49245 throw socket[kError] 49246 } 49247 49248 if (!writer.write(chunk)) { 49249 await waitForDrain() 49250 } 49251 } 49252 49253 writer.end() 49254 } catch (err) { 49255 writer.destroy(err) 49256 } finally { 49257 socket 49258 .off('close', onDrain) 49259 .off('drain', onDrain) 49260 } 49261 } 49262 49263 class AsyncWriter { 49264 constructor ({ socket, request, contentLength, client, expectsPayload, header }) { 49265 this.socket = socket 49266 this.request = request 49267 this.contentLength = contentLength 49268 this.client = client 49269 this.bytesWritten = 0 49270 this.expectsPayload = expectsPayload 49271 this.header = header 49272 49273 socket[kWriting] = true 49274 } 49275 49276 write (chunk) { 49277 const { socket, request, contentLength, client, bytesWritten, expectsPayload, header } = this 49278 49279 if (socket[kError]) { 49280 throw socket[kError] 49281 } 49282 49283 if (socket.destroyed) { 49284 return false 49285 } 49286 49287 const len = Buffer.byteLength(chunk) 49288 if (!len) { 49289 return true 49290 } 49291 49292 // We should defer writing chunks. 49293 if (contentLength !== null && bytesWritten + len > contentLength) { 49294 if (client[kStrictContentLength]) { 49295 throw new RequestContentLengthMismatchError() 49296 } 49297 49298 process.emitWarning(new RequestContentLengthMismatchError()) 49299 } 49300 49301 socket.cork() 49302 49303 if (bytesWritten === 0) { 49304 if (!expectsPayload) { 49305 socket[kReset] = true 49306 } 49307 49308 if (contentLength === null) { 49309 socket.write(`${header}transfer-encoding: chunked\r\n`, 'latin1') 49310 } else { 49311 socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, 'latin1') 49312 } 49313 } 49314 49315 if (contentLength === null) { 49316 socket.write(`\r\n${len.toString(16)}\r\n`, 'latin1') 49317 } 49318 49319 this.bytesWritten += len 49320 49321 const ret = socket.write(chunk) 49322 49323 socket.uncork() 49324 49325 request.onBodySent(chunk) 49326 49327 if (!ret) { 49328 if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) { 49329 // istanbul ignore else: only for jest 49330 if (socket[kParser].timeout.refresh) { 49331 socket[kParser].timeout.refresh() 49332 } 49333 } 49334 } 49335 49336 return ret 49337 } 49338 49339 end () { 49340 const { socket, contentLength, client, bytesWritten, expectsPayload, header, request } = this 49341 request.onRequestSent() 49342 49343 socket[kWriting] = false 49344 49345 if (socket[kError]) { 49346 throw socket[kError] 49347 } 49348 49349 if (socket.destroyed) { 49350 return 49351 } 49352 49353 if (bytesWritten === 0) { 49354 if (expectsPayload) { 49355 // https://tools.ietf.org/html/rfc7230#section-3.3.2 49356 // A user agent SHOULD send a Content-Length in a request message when 49357 // no Transfer-Encoding is sent and the request method defines a meaning 49358 // for an enclosed payload body. 49359 49360 socket.write(`${header}content-length: 0\r\n\r\n`, 'latin1') 49361 } else { 49362 socket.write(`${header}\r\n`, 'latin1') 49363 } 49364 } else if (contentLength === null) { 49365 socket.write('\r\n0\r\n\r\n', 'latin1') 49366 } 49367 49368 if (contentLength !== null && bytesWritten !== contentLength) { 49369 if (client[kStrictContentLength]) { 49370 throw new RequestContentLengthMismatchError() 49371 } else { 49372 process.emitWarning(new RequestContentLengthMismatchError()) 49373 } 49374 } 49375 49376 if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) { 49377 // istanbul ignore else: only for jest 49378 if (socket[kParser].timeout.refresh) { 49379 socket[kParser].timeout.refresh() 49380 } 49381 } 49382 49383 resume(client) 49384 } 49385 49386 destroy (err) { 49387 const { socket, client } = this 49388 49389 socket[kWriting] = false 49390 49391 if (err) { 49392 assert(client[kRunning] <= 1, 'pipeline should only contain this request') 49393 util.destroy(socket, err) 49394 } 49395 } 49396 } 49397 49398 function errorRequest (client, request, err) { 49399 try { 49400 request.onError(err) 49401 assert(request.aborted) 49402 } catch (err) { 49403 client.emit('error', err) 49404 } 49405 } 49406 49407 module.exports = Client 49408 49409 49410 /***/ }), 49411 49412 /***/ 56436: 49413 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 49414 49415 "use strict"; 49416 49417 49418 /* istanbul ignore file: only for Node 12 */ 49419 49420 const { kConnected, kSize } = __nccwpck_require__(72785) 49421 49422 class CompatWeakRef { 49423 constructor (value) { 49424 this.value = value 49425 } 49426 49427 deref () { 49428 return this.value[kConnected] === 0 && this.value[kSize] === 0 49429 ? undefined 49430 : this.value 49431 } 49432 } 49433 49434 class CompatFinalizer { 49435 constructor (finalizer) { 49436 this.finalizer = finalizer 49437 } 49438 49439 register (dispatcher, key) { 49440 if (dispatcher.on) { 49441 dispatcher.on('disconnect', () => { 49442 if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) { 49443 this.finalizer(key) 49444 } 49445 }) 49446 } 49447 } 49448 } 49449 49450 module.exports = function () { 49451 // FIXME: remove workaround when the Node bug is fixed 49452 // https://github.com/nodejs/node/issues/49344#issuecomment-1741776308 49453 if (process.env.NODE_V8_COVERAGE) { 49454 return { 49455 WeakRef: CompatWeakRef, 49456 FinalizationRegistry: CompatFinalizer 49457 } 49458 } 49459 return { 49460 WeakRef: global.WeakRef || CompatWeakRef, 49461 FinalizationRegistry: global.FinalizationRegistry || CompatFinalizer 49462 } 49463 } 49464 49465 49466 /***/ }), 49467 49468 /***/ 20663: 49469 /***/ ((module) => { 49470 49471 "use strict"; 49472 49473 49474 // https://wicg.github.io/cookie-store/#cookie-maximum-attribute-value-size 49475 const maxAttributeValueSize = 1024 49476 49477 // https://wicg.github.io/cookie-store/#cookie-maximum-name-value-pair-size 49478 const maxNameValuePairSize = 4096 49479 49480 module.exports = { 49481 maxAttributeValueSize, 49482 maxNameValuePairSize 49483 } 49484 49485 49486 /***/ }), 49487 49488 /***/ 41724: 49489 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 49490 49491 "use strict"; 49492 49493 49494 const { parseSetCookie } = __nccwpck_require__(24408) 49495 const { stringify, getHeadersList } = __nccwpck_require__(43121) 49496 const { webidl } = __nccwpck_require__(21744) 49497 const { Headers } = __nccwpck_require__(10554) 49498 49499 /** 49500 * @typedef {Object} Cookie 49501 * @property {string} name 49502 * @property {string} value 49503 * @property {Date|number|undefined} expires 49504 * @property {number|undefined} maxAge 49505 * @property {string|undefined} domain 49506 * @property {string|undefined} path 49507 * @property {boolean|undefined} secure 49508 * @property {boolean|undefined} httpOnly 49509 * @property {'Strict'|'Lax'|'None'} sameSite 49510 * @property {string[]} unparsed 49511 */ 49512 49513 /** 49514 * @param {Headers} headers 49515 * @returns {Record<string, string>} 49516 */ 49517 function getCookies (headers) { 49518 webidl.argumentLengthCheck(arguments, 1, { header: 'getCookies' }) 49519 49520 webidl.brandCheck(headers, Headers, { strict: false }) 49521 49522 const cookie = headers.get('cookie') 49523 const out = {} 49524 49525 if (!cookie) { 49526 return out 49527 } 49528 49529 for (const piece of cookie.split(';')) { 49530 const [name, ...value] = piece.split('=') 49531 49532 out[name.trim()] = value.join('=') 49533 } 49534 49535 return out 49536 } 49537 49538 /** 49539 * @param {Headers} headers 49540 * @param {string} name 49541 * @param {{ path?: string, domain?: string }|undefined} attributes 49542 * @returns {void} 49543 */ 49544 function deleteCookie (headers, name, attributes) { 49545 webidl.argumentLengthCheck(arguments, 2, { header: 'deleteCookie' }) 49546 49547 webidl.brandCheck(headers, Headers, { strict: false }) 49548 49549 name = webidl.converters.DOMString(name) 49550 attributes = webidl.converters.DeleteCookieAttributes(attributes) 49551 49552 // Matches behavior of 49553 // https://github.com/denoland/deno_std/blob/63827b16330b82489a04614027c33b7904e08be5/http/cookie.ts#L278 49554 setCookie(headers, { 49555 name, 49556 value: '', 49557 expires: new Date(0), 49558 ...attributes 49559 }) 49560 } 49561 49562 /** 49563 * @param {Headers} headers 49564 * @returns {Cookie[]} 49565 */ 49566 function getSetCookies (headers) { 49567 webidl.argumentLengthCheck(arguments, 1, { header: 'getSetCookies' }) 49568 49569 webidl.brandCheck(headers, Headers, { strict: false }) 49570 49571 const cookies = getHeadersList(headers).cookies 49572 49573 if (!cookies) { 49574 return [] 49575 } 49576 49577 // In older versions of undici, cookies is a list of name:value. 49578 return cookies.map((pair) => parseSetCookie(Array.isArray(pair) ? pair[1] : pair)) 49579 } 49580 49581 /** 49582 * @param {Headers} headers 49583 * @param {Cookie} cookie 49584 * @returns {void} 49585 */ 49586 function setCookie (headers, cookie) { 49587 webidl.argumentLengthCheck(arguments, 2, { header: 'setCookie' }) 49588 49589 webidl.brandCheck(headers, Headers, { strict: false }) 49590 49591 cookie = webidl.converters.Cookie(cookie) 49592 49593 const str = stringify(cookie) 49594 49595 if (str) { 49596 headers.append('Set-Cookie', stringify(cookie)) 49597 } 49598 } 49599 49600 webidl.converters.DeleteCookieAttributes = webidl.dictionaryConverter([ 49601 { 49602 converter: webidl.nullableConverter(webidl.converters.DOMString), 49603 key: 'path', 49604 defaultValue: null 49605 }, 49606 { 49607 converter: webidl.nullableConverter(webidl.converters.DOMString), 49608 key: 'domain', 49609 defaultValue: null 49610 } 49611 ]) 49612 49613 webidl.converters.Cookie = webidl.dictionaryConverter([ 49614 { 49615 converter: webidl.converters.DOMString, 49616 key: 'name' 49617 }, 49618 { 49619 converter: webidl.converters.DOMString, 49620 key: 'value' 49621 }, 49622 { 49623 converter: webidl.nullableConverter((value) => { 49624 if (typeof value === 'number') { 49625 return webidl.converters['unsigned long long'](value) 49626 } 49627 49628 return new Date(value) 49629 }), 49630 key: 'expires', 49631 defaultValue: null 49632 }, 49633 { 49634 converter: webidl.nullableConverter(webidl.converters['long long']), 49635 key: 'maxAge', 49636 defaultValue: null 49637 }, 49638 { 49639 converter: webidl.nullableConverter(webidl.converters.DOMString), 49640 key: 'domain', 49641 defaultValue: null 49642 }, 49643 { 49644 converter: webidl.nullableConverter(webidl.converters.DOMString), 49645 key: 'path', 49646 defaultValue: null 49647 }, 49648 { 49649 converter: webidl.nullableConverter(webidl.converters.boolean), 49650 key: 'secure', 49651 defaultValue: null 49652 }, 49653 { 49654 converter: webidl.nullableConverter(webidl.converters.boolean), 49655 key: 'httpOnly', 49656 defaultValue: null 49657 }, 49658 { 49659 converter: webidl.converters.USVString, 49660 key: 'sameSite', 49661 allowedValues: ['Strict', 'Lax', 'None'] 49662 }, 49663 { 49664 converter: webidl.sequenceConverter(webidl.converters.DOMString), 49665 key: 'unparsed', 49666 defaultValue: [] 49667 } 49668 ]) 49669 49670 module.exports = { 49671 getCookies, 49672 deleteCookie, 49673 getSetCookies, 49674 setCookie 49675 } 49676 49677 49678 /***/ }), 49679 49680 /***/ 24408: 49681 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 49682 49683 "use strict"; 49684 49685 49686 const { maxNameValuePairSize, maxAttributeValueSize } = __nccwpck_require__(20663) 49687 const { isCTLExcludingHtab } = __nccwpck_require__(43121) 49688 const { collectASequenceOfCodePointsFast } = __nccwpck_require__(685) 49689 const assert = __nccwpck_require__(39491) 49690 49691 /** 49692 * @description Parses the field-value attributes of a set-cookie header string. 49693 * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4 49694 * @param {string} header 49695 * @returns if the header is invalid, null will be returned 49696 */ 49697 function parseSetCookie (header) { 49698 // 1. If the set-cookie-string contains a %x00-08 / %x0A-1F / %x7F 49699 // character (CTL characters excluding HTAB): Abort these steps and 49700 // ignore the set-cookie-string entirely. 49701 if (isCTLExcludingHtab(header)) { 49702 return null 49703 } 49704 49705 let nameValuePair = '' 49706 let unparsedAttributes = '' 49707 let name = '' 49708 let value = '' 49709 49710 // 2. If the set-cookie-string contains a %x3B (";") character: 49711 if (header.includes(';')) { 49712 // 1. The name-value-pair string consists of the characters up to, 49713 // but not including, the first %x3B (";"), and the unparsed- 49714 // attributes consist of the remainder of the set-cookie-string 49715 // (including the %x3B (";") in question). 49716 const position = { position: 0 } 49717 49718 nameValuePair = collectASequenceOfCodePointsFast(';', header, position) 49719 unparsedAttributes = header.slice(position.position) 49720 } else { 49721 // Otherwise: 49722 49723 // 1. The name-value-pair string consists of all the characters 49724 // contained in the set-cookie-string, and the unparsed- 49725 // attributes is the empty string. 49726 nameValuePair = header 49727 } 49728 49729 // 3. If the name-value-pair string lacks a %x3D ("=") character, then 49730 // the name string is empty, and the value string is the value of 49731 // name-value-pair. 49732 if (!nameValuePair.includes('=')) { 49733 value = nameValuePair 49734 } else { 49735 // Otherwise, the name string consists of the characters up to, but 49736 // not including, the first %x3D ("=") character, and the (possibly 49737 // empty) value string consists of the characters after the first 49738 // %x3D ("=") character. 49739 const position = { position: 0 } 49740 name = collectASequenceOfCodePointsFast( 49741 '=', 49742 nameValuePair, 49743 position 49744 ) 49745 value = nameValuePair.slice(position.position + 1) 49746 } 49747 49748 // 4. Remove any leading or trailing WSP characters from the name 49749 // string and the value string. 49750 name = name.trim() 49751 value = value.trim() 49752 49753 // 5. If the sum of the lengths of the name string and the value string 49754 // is more than 4096 octets, abort these steps and ignore the set- 49755 // cookie-string entirely. 49756 if (name.length + value.length > maxNameValuePairSize) { 49757 return null 49758 } 49759 49760 // 6. The cookie-name is the name string, and the cookie-value is the 49761 // value string. 49762 return { 49763 name, value, ...parseUnparsedAttributes(unparsedAttributes) 49764 } 49765 } 49766 49767 /** 49768 * Parses the remaining attributes of a set-cookie header 49769 * @see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4 49770 * @param {string} unparsedAttributes 49771 * @param {[Object.<string, unknown>]={}} cookieAttributeList 49772 */ 49773 function parseUnparsedAttributes (unparsedAttributes, cookieAttributeList = {}) { 49774 // 1. If the unparsed-attributes string is empty, skip the rest of 49775 // these steps. 49776 if (unparsedAttributes.length === 0) { 49777 return cookieAttributeList 49778 } 49779 49780 // 2. Discard the first character of the unparsed-attributes (which 49781 // will be a %x3B (";") character). 49782 assert(unparsedAttributes[0] === ';') 49783 unparsedAttributes = unparsedAttributes.slice(1) 49784 49785 let cookieAv = '' 49786 49787 // 3. If the remaining unparsed-attributes contains a %x3B (";") 49788 // character: 49789 if (unparsedAttributes.includes(';')) { 49790 // 1. Consume the characters of the unparsed-attributes up to, but 49791 // not including, the first %x3B (";") character. 49792 cookieAv = collectASequenceOfCodePointsFast( 49793 ';', 49794 unparsedAttributes, 49795 { position: 0 } 49796 ) 49797 unparsedAttributes = unparsedAttributes.slice(cookieAv.length) 49798 } else { 49799 // Otherwise: 49800 49801 // 1. Consume the remainder of the unparsed-attributes. 49802 cookieAv = unparsedAttributes 49803 unparsedAttributes = '' 49804 } 49805 49806 // Let the cookie-av string be the characters consumed in this step. 49807 49808 let attributeName = '' 49809 let attributeValue = '' 49810 49811 // 4. If the cookie-av string contains a %x3D ("=") character: 49812 if (cookieAv.includes('=')) { 49813 // 1. The (possibly empty) attribute-name string consists of the 49814 // characters up to, but not including, the first %x3D ("=") 49815 // character, and the (possibly empty) attribute-value string 49816 // consists of the characters after the first %x3D ("=") 49817 // character. 49818 const position = { position: 0 } 49819 49820 attributeName = collectASequenceOfCodePointsFast( 49821 '=', 49822 cookieAv, 49823 position 49824 ) 49825 attributeValue = cookieAv.slice(position.position + 1) 49826 } else { 49827 // Otherwise: 49828 49829 // 1. The attribute-name string consists of the entire cookie-av 49830 // string, and the attribute-value string is empty. 49831 attributeName = cookieAv 49832 } 49833 49834 // 5. Remove any leading or trailing WSP characters from the attribute- 49835 // name string and the attribute-value string. 49836 attributeName = attributeName.trim() 49837 attributeValue = attributeValue.trim() 49838 49839 // 6. If the attribute-value is longer than 1024 octets, ignore the 49840 // cookie-av string and return to Step 1 of this algorithm. 49841 if (attributeValue.length > maxAttributeValueSize) { 49842 return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList) 49843 } 49844 49845 // 7. Process the attribute-name and attribute-value according to the 49846 // requirements in the following subsections. (Notice that 49847 // attributes with unrecognized attribute-names are ignored.) 49848 const attributeNameLowercase = attributeName.toLowerCase() 49849 49850 // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.1 49851 // If the attribute-name case-insensitively matches the string 49852 // "Expires", the user agent MUST process the cookie-av as follows. 49853 if (attributeNameLowercase === 'expires') { 49854 // 1. Let the expiry-time be the result of parsing the attribute-value 49855 // as cookie-date (see Section 5.1.1). 49856 const expiryTime = new Date(attributeValue) 49857 49858 // 2. If the attribute-value failed to parse as a cookie date, ignore 49859 // the cookie-av. 49860 49861 cookieAttributeList.expires = expiryTime 49862 } else if (attributeNameLowercase === 'max-age') { 49863 // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.2 49864 // If the attribute-name case-insensitively matches the string "Max- 49865 // Age", the user agent MUST process the cookie-av as follows. 49866 49867 // 1. If the first character of the attribute-value is not a DIGIT or a 49868 // "-" character, ignore the cookie-av. 49869 const charCode = attributeValue.charCodeAt(0) 49870 49871 if ((charCode < 48 || charCode > 57) && attributeValue[0] !== '-') { 49872 return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList) 49873 } 49874 49875 // 2. If the remainder of attribute-value contains a non-DIGIT 49876 // character, ignore the cookie-av. 49877 if (!/^\d+$/.test(attributeValue)) { 49878 return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList) 49879 } 49880 49881 // 3. Let delta-seconds be the attribute-value converted to an integer. 49882 const deltaSeconds = Number(attributeValue) 49883 49884 // 4. Let cookie-age-limit be the maximum age of the cookie (which 49885 // SHOULD be 400 days or less, see Section 4.1.2.2). 49886 49887 // 5. Set delta-seconds to the smaller of its present value and cookie- 49888 // age-limit. 49889 // deltaSeconds = Math.min(deltaSeconds * 1000, maxExpiresMs) 49890 49891 // 6. If delta-seconds is less than or equal to zero (0), let expiry- 49892 // time be the earliest representable date and time. Otherwise, let 49893 // the expiry-time be the current date and time plus delta-seconds 49894 // seconds. 49895 // const expiryTime = deltaSeconds <= 0 ? Date.now() : Date.now() + deltaSeconds 49896 49897 // 7. Append an attribute to the cookie-attribute-list with an 49898 // attribute-name of Max-Age and an attribute-value of expiry-time. 49899 cookieAttributeList.maxAge = deltaSeconds 49900 } else if (attributeNameLowercase === 'domain') { 49901 // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.3 49902 // If the attribute-name case-insensitively matches the string "Domain", 49903 // the user agent MUST process the cookie-av as follows. 49904 49905 // 1. Let cookie-domain be the attribute-value. 49906 let cookieDomain = attributeValue 49907 49908 // 2. If cookie-domain starts with %x2E ("."), let cookie-domain be 49909 // cookie-domain without its leading %x2E ("."). 49910 if (cookieDomain[0] === '.') { 49911 cookieDomain = cookieDomain.slice(1) 49912 } 49913 49914 // 3. Convert the cookie-domain to lower case. 49915 cookieDomain = cookieDomain.toLowerCase() 49916 49917 // 4. Append an attribute to the cookie-attribute-list with an 49918 // attribute-name of Domain and an attribute-value of cookie-domain. 49919 cookieAttributeList.domain = cookieDomain 49920 } else if (attributeNameLowercase === 'path') { 49921 // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.4 49922 // If the attribute-name case-insensitively matches the string "Path", 49923 // the user agent MUST process the cookie-av as follows. 49924 49925 // 1. If the attribute-value is empty or if the first character of the 49926 // attribute-value is not %x2F ("/"): 49927 let cookiePath = '' 49928 if (attributeValue.length === 0 || attributeValue[0] !== '/') { 49929 // 1. Let cookie-path be the default-path. 49930 cookiePath = '/' 49931 } else { 49932 // Otherwise: 49933 49934 // 1. Let cookie-path be the attribute-value. 49935 cookiePath = attributeValue 49936 } 49937 49938 // 2. Append an attribute to the cookie-attribute-list with an 49939 // attribute-name of Path and an attribute-value of cookie-path. 49940 cookieAttributeList.path = cookiePath 49941 } else if (attributeNameLowercase === 'secure') { 49942 // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.5 49943 // If the attribute-name case-insensitively matches the string "Secure", 49944 // the user agent MUST append an attribute to the cookie-attribute-list 49945 // with an attribute-name of Secure and an empty attribute-value. 49946 49947 cookieAttributeList.secure = true 49948 } else if (attributeNameLowercase === 'httponly') { 49949 // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.6 49950 // If the attribute-name case-insensitively matches the string 49951 // "HttpOnly", the user agent MUST append an attribute to the cookie- 49952 // attribute-list with an attribute-name of HttpOnly and an empty 49953 // attribute-value. 49954 49955 cookieAttributeList.httpOnly = true 49956 } else if (attributeNameLowercase === 'samesite') { 49957 // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis#section-5.4.7 49958 // If the attribute-name case-insensitively matches the string 49959 // "SameSite", the user agent MUST process the cookie-av as follows: 49960 49961 // 1. Let enforcement be "Default". 49962 let enforcement = 'Default' 49963 49964 const attributeValueLowercase = attributeValue.toLowerCase() 49965 // 2. If cookie-av's attribute-value is a case-insensitive match for 49966 // "None", set enforcement to "None". 49967 if (attributeValueLowercase.includes('none')) { 49968 enforcement = 'None' 49969 } 49970 49971 // 3. If cookie-av's attribute-value is a case-insensitive match for 49972 // "Strict", set enforcement to "Strict". 49973 if (attributeValueLowercase.includes('strict')) { 49974 enforcement = 'Strict' 49975 } 49976 49977 // 4. If cookie-av's attribute-value is a case-insensitive match for 49978 // "Lax", set enforcement to "Lax". 49979 if (attributeValueLowercase.includes('lax')) { 49980 enforcement = 'Lax' 49981 } 49982 49983 // 5. Append an attribute to the cookie-attribute-list with an 49984 // attribute-name of "SameSite" and an attribute-value of 49985 // enforcement. 49986 cookieAttributeList.sameSite = enforcement 49987 } else { 49988 cookieAttributeList.unparsed ??= [] 49989 49990 cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`) 49991 } 49992 49993 // 8. Return to Step 1 of this algorithm. 49994 return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList) 49995 } 49996 49997 module.exports = { 49998 parseSetCookie, 49999 parseUnparsedAttributes 50000 } 50001 50002 50003 /***/ }), 50004 50005 /***/ 43121: 50006 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 50007 50008 "use strict"; 50009 50010 50011 const assert = __nccwpck_require__(39491) 50012 const { kHeadersList } = __nccwpck_require__(72785) 50013 50014 function isCTLExcludingHtab (value) { 50015 if (value.length === 0) { 50016 return false 50017 } 50018 50019 for (const char of value) { 50020 const code = char.charCodeAt(0) 50021 50022 if ( 50023 (code >= 0x00 || code <= 0x08) || 50024 (code >= 0x0A || code <= 0x1F) || 50025 code === 0x7F 50026 ) { 50027 return false 50028 } 50029 } 50030 } 50031 50032 /** 50033 CHAR = <any US-ASCII character (octets 0 - 127)> 50034 token = 1*<any CHAR except CTLs or separators> 50035 separators = "(" | ")" | "<" | ">" | "@" 50036 | "," | ";" | ":" | "\" | <"> 50037 | "/" | "[" | "]" | "?" | "=" 50038 | "{" | "}" | SP | HT 50039 * @param {string} name 50040 */ 50041 function validateCookieName (name) { 50042 for (const char of name) { 50043 const code = char.charCodeAt(0) 50044 50045 if ( 50046 (code <= 0x20 || code > 0x7F) || 50047 char === '(' || 50048 char === ')' || 50049 char === '>' || 50050 char === '<' || 50051 char === '@' || 50052 char === ',' || 50053 char === ';' || 50054 char === ':' || 50055 char === '\\' || 50056 char === '"' || 50057 char === '/' || 50058 char === '[' || 50059 char === ']' || 50060 char === '?' || 50061 char === '=' || 50062 char === '{' || 50063 char === '}' 50064 ) { 50065 throw new Error('Invalid cookie name') 50066 } 50067 } 50068 } 50069 50070 /** 50071 cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE ) 50072 cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E 50073 ; US-ASCII characters excluding CTLs, 50074 ; whitespace DQUOTE, comma, semicolon, 50075 ; and backslash 50076 * @param {string} value 50077 */ 50078 function validateCookieValue (value) { 50079 for (const char of value) { 50080 const code = char.charCodeAt(0) 50081 50082 if ( 50083 code < 0x21 || // exclude CTLs (0-31) 50084 code === 0x22 || 50085 code === 0x2C || 50086 code === 0x3B || 50087 code === 0x5C || 50088 code > 0x7E // non-ascii 50089 ) { 50090 throw new Error('Invalid header value') 50091 } 50092 } 50093 } 50094 50095 /** 50096 * path-value = <any CHAR except CTLs or ";"> 50097 * @param {string} path 50098 */ 50099 function validateCookiePath (path) { 50100 for (const char of path) { 50101 const code = char.charCodeAt(0) 50102 50103 if (code < 0x21 || char === ';') { 50104 throw new Error('Invalid cookie path') 50105 } 50106 } 50107 } 50108 50109 /** 50110 * I have no idea why these values aren't allowed to be honest, 50111 * but Deno tests these. - Khafra 50112 * @param {string} domain 50113 */ 50114 function validateCookieDomain (domain) { 50115 if ( 50116 domain.startsWith('-') || 50117 domain.endsWith('.') || 50118 domain.endsWith('-') 50119 ) { 50120 throw new Error('Invalid cookie domain') 50121 } 50122 } 50123 50124 /** 50125 * @see https://www.rfc-editor.org/rfc/rfc7231#section-7.1.1.1 50126 * @param {number|Date} date 50127 IMF-fixdate = day-name "," SP date1 SP time-of-day SP GMT 50128 ; fixed length/zone/capitalization subset of the format 50129 ; see Section 3.3 of [RFC5322] 50130 50131 day-name = %x4D.6F.6E ; "Mon", case-sensitive 50132 / %x54.75.65 ; "Tue", case-sensitive 50133 / %x57.65.64 ; "Wed", case-sensitive 50134 / %x54.68.75 ; "Thu", case-sensitive 50135 / %x46.72.69 ; "Fri", case-sensitive 50136 / %x53.61.74 ; "Sat", case-sensitive 50137 / %x53.75.6E ; "Sun", case-sensitive 50138 date1 = day SP month SP year 50139 ; e.g., 02 Jun 1982 50140 50141 day = 2DIGIT 50142 month = %x4A.61.6E ; "Jan", case-sensitive 50143 / %x46.65.62 ; "Feb", case-sensitive 50144 / %x4D.61.72 ; "Mar", case-sensitive 50145 / %x41.70.72 ; "Apr", case-sensitive 50146 / %x4D.61.79 ; "May", case-sensitive 50147 / %x4A.75.6E ; "Jun", case-sensitive 50148 / %x4A.75.6C ; "Jul", case-sensitive 50149 / %x41.75.67 ; "Aug", case-sensitive 50150 / %x53.65.70 ; "Sep", case-sensitive 50151 / %x4F.63.74 ; "Oct", case-sensitive 50152 / %x4E.6F.76 ; "Nov", case-sensitive 50153 / %x44.65.63 ; "Dec", case-sensitive 50154 year = 4DIGIT 50155 50156 GMT = %x47.4D.54 ; "GMT", case-sensitive 50157 50158 time-of-day = hour ":" minute ":" second 50159 ; 00:00:00 - 23:59:60 (leap second) 50160 50161 hour = 2DIGIT 50162 minute = 2DIGIT 50163 second = 2DIGIT 50164 */ 50165 function toIMFDate (date) { 50166 if (typeof date === 'number') { 50167 date = new Date(date) 50168 } 50169 50170 const days = [ 50171 'Sun', 'Mon', 'Tue', 'Wed', 50172 'Thu', 'Fri', 'Sat' 50173 ] 50174 50175 const months = [ 50176 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 50177 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' 50178 ] 50179 50180 const dayName = days[date.getUTCDay()] 50181 const day = date.getUTCDate().toString().padStart(2, '0') 50182 const month = months[date.getUTCMonth()] 50183 const year = date.getUTCFullYear() 50184 const hour = date.getUTCHours().toString().padStart(2, '0') 50185 const minute = date.getUTCMinutes().toString().padStart(2, '0') 50186 const second = date.getUTCSeconds().toString().padStart(2, '0') 50187 50188 return `${dayName}, ${day} ${month} ${year} ${hour}:${minute}:${second} GMT` 50189 } 50190 50191 /** 50192 max-age-av = "Max-Age=" non-zero-digit *DIGIT 50193 ; In practice, both expires-av and max-age-av 50194 ; are limited to dates representable by the 50195 ; user agent. 50196 * @param {number} maxAge 50197 */ 50198 function validateCookieMaxAge (maxAge) { 50199 if (maxAge < 0) { 50200 throw new Error('Invalid cookie max-age') 50201 } 50202 } 50203 50204 /** 50205 * @see https://www.rfc-editor.org/rfc/rfc6265#section-4.1.1 50206 * @param {import('./index').Cookie} cookie 50207 */ 50208 function stringify (cookie) { 50209 if (cookie.name.length === 0) { 50210 return null 50211 } 50212 50213 validateCookieName(cookie.name) 50214 validateCookieValue(cookie.value) 50215 50216 const out = [`${cookie.name}=${cookie.value}`] 50217 50218 // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.1 50219 // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00#section-3.2 50220 if (cookie.name.startsWith('__Secure-')) { 50221 cookie.secure = true 50222 } 50223 50224 if (cookie.name.startsWith('__Host-')) { 50225 cookie.secure = true 50226 cookie.domain = null 50227 cookie.path = '/' 50228 } 50229 50230 if (cookie.secure) { 50231 out.push('Secure') 50232 } 50233 50234 if (cookie.httpOnly) { 50235 out.push('HttpOnly') 50236 } 50237 50238 if (typeof cookie.maxAge === 'number') { 50239 validateCookieMaxAge(cookie.maxAge) 50240 out.push(`Max-Age=${cookie.maxAge}`) 50241 } 50242 50243 if (cookie.domain) { 50244 validateCookieDomain(cookie.domain) 50245 out.push(`Domain=${cookie.domain}`) 50246 } 50247 50248 if (cookie.path) { 50249 validateCookiePath(cookie.path) 50250 out.push(`Path=${cookie.path}`) 50251 } 50252 50253 if (cookie.expires && cookie.expires.toString() !== 'Invalid Date') { 50254 out.push(`Expires=${toIMFDate(cookie.expires)}`) 50255 } 50256 50257 if (cookie.sameSite) { 50258 out.push(`SameSite=${cookie.sameSite}`) 50259 } 50260 50261 for (const part of cookie.unparsed) { 50262 if (!part.includes('=')) { 50263 throw new Error('Invalid unparsed') 50264 } 50265 50266 const [key, ...value] = part.split('=') 50267 50268 out.push(`${key.trim()}=${value.join('=')}`) 50269 } 50270 50271 return out.join('; ') 50272 } 50273 50274 let kHeadersListNode 50275 50276 function getHeadersList (headers) { 50277 if (headers[kHeadersList]) { 50278 return headers[kHeadersList] 50279 } 50280 50281 if (!kHeadersListNode) { 50282 kHeadersListNode = Object.getOwnPropertySymbols(headers).find( 50283 (symbol) => symbol.description === 'headers list' 50284 ) 50285 50286 assert(kHeadersListNode, 'Headers cannot be parsed') 50287 } 50288 50289 const headersList = headers[kHeadersListNode] 50290 assert(headersList) 50291 50292 return headersList 50293 } 50294 50295 module.exports = { 50296 isCTLExcludingHtab, 50297 stringify, 50298 getHeadersList 50299 } 50300 50301 50302 /***/ }), 50303 50304 /***/ 82067: 50305 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 50306 50307 "use strict"; 50308 50309 50310 const net = __nccwpck_require__(41808) 50311 const assert = __nccwpck_require__(39491) 50312 const util = __nccwpck_require__(83983) 50313 const { InvalidArgumentError, ConnectTimeoutError } = __nccwpck_require__(48045) 50314 50315 let tls // include tls conditionally since it is not always available 50316 50317 // TODO: session re-use does not wait for the first 50318 // connection to resolve the session and might therefore 50319 // resolve the same servername multiple times even when 50320 // re-use is enabled. 50321 50322 let SessionCache 50323 // FIXME: remove workaround when the Node bug is fixed 50324 // https://github.com/nodejs/node/issues/49344#issuecomment-1741776308 50325 if (global.FinalizationRegistry && !process.env.NODE_V8_COVERAGE) { 50326 SessionCache = class WeakSessionCache { 50327 constructor (maxCachedSessions) { 50328 this._maxCachedSessions = maxCachedSessions 50329 this._sessionCache = new Map() 50330 this._sessionRegistry = new global.FinalizationRegistry((key) => { 50331 if (this._sessionCache.size < this._maxCachedSessions) { 50332 return 50333 } 50334 50335 const ref = this._sessionCache.get(key) 50336 if (ref !== undefined && ref.deref() === undefined) { 50337 this._sessionCache.delete(key) 50338 } 50339 }) 50340 } 50341 50342 get (sessionKey) { 50343 const ref = this._sessionCache.get(sessionKey) 50344 return ref ? ref.deref() : null 50345 } 50346 50347 set (sessionKey, session) { 50348 if (this._maxCachedSessions === 0) { 50349 return 50350 } 50351 50352 this._sessionCache.set(sessionKey, new WeakRef(session)) 50353 this._sessionRegistry.register(session, sessionKey) 50354 } 50355 } 50356 } else { 50357 SessionCache = class SimpleSessionCache { 50358 constructor (maxCachedSessions) { 50359 this._maxCachedSessions = maxCachedSessions 50360 this._sessionCache = new Map() 50361 } 50362 50363 get (sessionKey) { 50364 return this._sessionCache.get(sessionKey) 50365 } 50366 50367 set (sessionKey, session) { 50368 if (this._maxCachedSessions === 0) { 50369 return 50370 } 50371 50372 if (this._sessionCache.size >= this._maxCachedSessions) { 50373 // remove the oldest session 50374 const { value: oldestKey } = this._sessionCache.keys().next() 50375 this._sessionCache.delete(oldestKey) 50376 } 50377 50378 this._sessionCache.set(sessionKey, session) 50379 } 50380 } 50381 } 50382 50383 function buildConnector ({ allowH2, maxCachedSessions, socketPath, timeout, ...opts }) { 50384 if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) { 50385 throw new InvalidArgumentError('maxCachedSessions must be a positive integer or zero') 50386 } 50387 50388 const options = { path: socketPath, ...opts } 50389 const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions) 50390 timeout = timeout == null ? 10e3 : timeout 50391 allowH2 = allowH2 != null ? allowH2 : false 50392 return function connect ({ hostname, host, protocol, port, servername, localAddress, httpSocket }, callback) { 50393 let socket 50394 if (protocol === 'https:') { 50395 if (!tls) { 50396 tls = __nccwpck_require__(24404) 50397 } 50398 servername = servername || options.servername || util.getServerName(host) || null 50399 50400 const sessionKey = servername || hostname 50401 const session = sessionCache.get(sessionKey) || null 50402 50403 assert(sessionKey) 50404 50405 socket = tls.connect({ 50406 highWaterMark: 16384, // TLS in node can't have bigger HWM anyway... 50407 ...options, 50408 servername, 50409 session, 50410 localAddress, 50411 // TODO(HTTP/2): Add support for h2c 50412 ALPNProtocols: allowH2 ? ['http/1.1', 'h2'] : ['http/1.1'], 50413 socket: httpSocket, // upgrade socket connection 50414 port: port || 443, 50415 host: hostname 50416 }) 50417 50418 socket 50419 .on('session', function (session) { 50420 // TODO (fix): Can a session become invalid once established? Don't think so? 50421 sessionCache.set(sessionKey, session) 50422 }) 50423 } else { 50424 assert(!httpSocket, 'httpSocket can only be sent on TLS update') 50425 socket = net.connect({ 50426 highWaterMark: 64 * 1024, // Same as nodejs fs streams. 50427 ...options, 50428 localAddress, 50429 port: port || 80, 50430 host: hostname 50431 }) 50432 } 50433 50434 // Set TCP keep alive options on the socket here instead of in connect() for the case of assigning the socket 50435 if (options.keepAlive == null || options.keepAlive) { 50436 const keepAliveInitialDelay = options.keepAliveInitialDelay === undefined ? 60e3 : options.keepAliveInitialDelay 50437 socket.setKeepAlive(true, keepAliveInitialDelay) 50438 } 50439 50440 const cancelTimeout = setupTimeout(() => onConnectTimeout(socket), timeout) 50441 50442 socket 50443 .setNoDelay(true) 50444 .once(protocol === 'https:' ? 'secureConnect' : 'connect', function () { 50445 cancelTimeout() 50446 50447 if (callback) { 50448 const cb = callback 50449 callback = null 50450 cb(null, this) 50451 } 50452 }) 50453 .on('error', function (err) { 50454 cancelTimeout() 50455 50456 if (callback) { 50457 const cb = callback 50458 callback = null 50459 cb(err) 50460 } 50461 }) 50462 50463 return socket 50464 } 50465 } 50466 50467 function setupTimeout (onConnectTimeout, timeout) { 50468 if (!timeout) { 50469 return () => {} 50470 } 50471 50472 let s1 = null 50473 let s2 = null 50474 const timeoutId = setTimeout(() => { 50475 // setImmediate is added to make sure that we priotorise socket error events over timeouts 50476 s1 = setImmediate(() => { 50477 if (process.platform === 'win32') { 50478 // Windows needs an extra setImmediate probably due to implementation differences in the socket logic 50479 s2 = setImmediate(() => onConnectTimeout()) 50480 } else { 50481 onConnectTimeout() 50482 } 50483 }) 50484 }, timeout) 50485 return () => { 50486 clearTimeout(timeoutId) 50487 clearImmediate(s1) 50488 clearImmediate(s2) 50489 } 50490 } 50491 50492 function onConnectTimeout (socket) { 50493 util.destroy(socket, new ConnectTimeoutError()) 50494 } 50495 50496 module.exports = buildConnector 50497 50498 50499 /***/ }), 50500 50501 /***/ 14462: 50502 /***/ ((module) => { 50503 50504 "use strict"; 50505 50506 50507 /** @type {Record<string, string | undefined>} */ 50508 const headerNameLowerCasedRecord = {} 50509 50510 // https://developer.mozilla.org/docs/Web/HTTP/Headers 50511 const wellknownHeaderNames = [ 50512 'Accept', 50513 'Accept-Encoding', 50514 'Accept-Language', 50515 'Accept-Ranges', 50516 'Access-Control-Allow-Credentials', 50517 'Access-Control-Allow-Headers', 50518 'Access-Control-Allow-Methods', 50519 'Access-Control-Allow-Origin', 50520 'Access-Control-Expose-Headers', 50521 'Access-Control-Max-Age', 50522 'Access-Control-Request-Headers', 50523 'Access-Control-Request-Method', 50524 'Age', 50525 'Allow', 50526 'Alt-Svc', 50527 'Alt-Used', 50528 'Authorization', 50529 'Cache-Control', 50530 'Clear-Site-Data', 50531 'Connection', 50532 'Content-Disposition', 50533 'Content-Encoding', 50534 'Content-Language', 50535 'Content-Length', 50536 'Content-Location', 50537 'Content-Range', 50538 'Content-Security-Policy', 50539 'Content-Security-Policy-Report-Only', 50540 'Content-Type', 50541 'Cookie', 50542 'Cross-Origin-Embedder-Policy', 50543 'Cross-Origin-Opener-Policy', 50544 'Cross-Origin-Resource-Policy', 50545 'Date', 50546 'Device-Memory', 50547 'Downlink', 50548 'ECT', 50549 'ETag', 50550 'Expect', 50551 'Expect-CT', 50552 'Expires', 50553 'Forwarded', 50554 'From', 50555 'Host', 50556 'If-Match', 50557 'If-Modified-Since', 50558 'If-None-Match', 50559 'If-Range', 50560 'If-Unmodified-Since', 50561 'Keep-Alive', 50562 'Last-Modified', 50563 'Link', 50564 'Location', 50565 'Max-Forwards', 50566 'Origin', 50567 'Permissions-Policy', 50568 'Pragma', 50569 'Proxy-Authenticate', 50570 'Proxy-Authorization', 50571 'RTT', 50572 'Range', 50573 'Referer', 50574 'Referrer-Policy', 50575 'Refresh', 50576 'Retry-After', 50577 'Sec-WebSocket-Accept', 50578 'Sec-WebSocket-Extensions', 50579 'Sec-WebSocket-Key', 50580 'Sec-WebSocket-Protocol', 50581 'Sec-WebSocket-Version', 50582 'Server', 50583 'Server-Timing', 50584 'Service-Worker-Allowed', 50585 'Service-Worker-Navigation-Preload', 50586 'Set-Cookie', 50587 'SourceMap', 50588 'Strict-Transport-Security', 50589 'Supports-Loading-Mode', 50590 'TE', 50591 'Timing-Allow-Origin', 50592 'Trailer', 50593 'Transfer-Encoding', 50594 'Upgrade', 50595 'Upgrade-Insecure-Requests', 50596 'User-Agent', 50597 'Vary', 50598 'Via', 50599 'WWW-Authenticate', 50600 'X-Content-Type-Options', 50601 'X-DNS-Prefetch-Control', 50602 'X-Frame-Options', 50603 'X-Permitted-Cross-Domain-Policies', 50604 'X-Powered-By', 50605 'X-Requested-With', 50606 'X-XSS-Protection' 50607 ] 50608 50609 for (let i = 0; i < wellknownHeaderNames.length; ++i) { 50610 const key = wellknownHeaderNames[i] 50611 const lowerCasedKey = key.toLowerCase() 50612 headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] = 50613 lowerCasedKey 50614 } 50615 50616 // Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`. 50617 Object.setPrototypeOf(headerNameLowerCasedRecord, null) 50618 50619 module.exports = { 50620 wellknownHeaderNames, 50621 headerNameLowerCasedRecord 50622 } 50623 50624 50625 /***/ }), 50626 50627 /***/ 48045: 50628 /***/ ((module) => { 50629 50630 "use strict"; 50631 50632 50633 class UndiciError extends Error { 50634 constructor (message) { 50635 super(message) 50636 this.name = 'UndiciError' 50637 this.code = 'UND_ERR' 50638 } 50639 } 50640 50641 class ConnectTimeoutError extends UndiciError { 50642 constructor (message) { 50643 super(message) 50644 Error.captureStackTrace(this, ConnectTimeoutError) 50645 this.name = 'ConnectTimeoutError' 50646 this.message = message || 'Connect Timeout Error' 50647 this.code = 'UND_ERR_CONNECT_TIMEOUT' 50648 } 50649 } 50650 50651 class HeadersTimeoutError extends UndiciError { 50652 constructor (message) { 50653 super(message) 50654 Error.captureStackTrace(this, HeadersTimeoutError) 50655 this.name = 'HeadersTimeoutError' 50656 this.message = message || 'Headers Timeout Error' 50657 this.code = 'UND_ERR_HEADERS_TIMEOUT' 50658 } 50659 } 50660 50661 class HeadersOverflowError extends UndiciError { 50662 constructor (message) { 50663 super(message) 50664 Error.captureStackTrace(this, HeadersOverflowError) 50665 this.name = 'HeadersOverflowError' 50666 this.message = message || 'Headers Overflow Error' 50667 this.code = 'UND_ERR_HEADERS_OVERFLOW' 50668 } 50669 } 50670 50671 class BodyTimeoutError extends UndiciError { 50672 constructor (message) { 50673 super(message) 50674 Error.captureStackTrace(this, BodyTimeoutError) 50675 this.name = 'BodyTimeoutError' 50676 this.message = message || 'Body Timeout Error' 50677 this.code = 'UND_ERR_BODY_TIMEOUT' 50678 } 50679 } 50680 50681 class ResponseStatusCodeError extends UndiciError { 50682 constructor (message, statusCode, headers, body) { 50683 super(message) 50684 Error.captureStackTrace(this, ResponseStatusCodeError) 50685 this.name = 'ResponseStatusCodeError' 50686 this.message = message || 'Response Status Code Error' 50687 this.code = 'UND_ERR_RESPONSE_STATUS_CODE' 50688 this.body = body 50689 this.status = statusCode 50690 this.statusCode = statusCode 50691 this.headers = headers 50692 } 50693 } 50694 50695 class InvalidArgumentError extends UndiciError { 50696 constructor (message) { 50697 super(message) 50698 Error.captureStackTrace(this, InvalidArgumentError) 50699 this.name = 'InvalidArgumentError' 50700 this.message = message || 'Invalid Argument Error' 50701 this.code = 'UND_ERR_INVALID_ARG' 50702 } 50703 } 50704 50705 class InvalidReturnValueError extends UndiciError { 50706 constructor (message) { 50707 super(message) 50708 Error.captureStackTrace(this, InvalidReturnValueError) 50709 this.name = 'InvalidReturnValueError' 50710 this.message = message || 'Invalid Return Value Error' 50711 this.code = 'UND_ERR_INVALID_RETURN_VALUE' 50712 } 50713 } 50714 50715 class RequestAbortedError extends UndiciError { 50716 constructor (message) { 50717 super(message) 50718 Error.captureStackTrace(this, RequestAbortedError) 50719 this.name = 'AbortError' 50720 this.message = message || 'Request aborted' 50721 this.code = 'UND_ERR_ABORTED' 50722 } 50723 } 50724 50725 class InformationalError extends UndiciError { 50726 constructor (message) { 50727 super(message) 50728 Error.captureStackTrace(this, InformationalError) 50729 this.name = 'InformationalError' 50730 this.message = message || 'Request information' 50731 this.code = 'UND_ERR_INFO' 50732 } 50733 } 50734 50735 class RequestContentLengthMismatchError extends UndiciError { 50736 constructor (message) { 50737 super(message) 50738 Error.captureStackTrace(this, RequestContentLengthMismatchError) 50739 this.name = 'RequestContentLengthMismatchError' 50740 this.message = message || 'Request body length does not match content-length header' 50741 this.code = 'UND_ERR_REQ_CONTENT_LENGTH_MISMATCH' 50742 } 50743 } 50744 50745 class ResponseContentLengthMismatchError extends UndiciError { 50746 constructor (message) { 50747 super(message) 50748 Error.captureStackTrace(this, ResponseContentLengthMismatchError) 50749 this.name = 'ResponseContentLengthMismatchError' 50750 this.message = message || 'Response body length does not match content-length header' 50751 this.code = 'UND_ERR_RES_CONTENT_LENGTH_MISMATCH' 50752 } 50753 } 50754 50755 class ClientDestroyedError extends UndiciError { 50756 constructor (message) { 50757 super(message) 50758 Error.captureStackTrace(this, ClientDestroyedError) 50759 this.name = 'ClientDestroyedError' 50760 this.message = message || 'The client is destroyed' 50761 this.code = 'UND_ERR_DESTROYED' 50762 } 50763 } 50764 50765 class ClientClosedError extends UndiciError { 50766 constructor (message) { 50767 super(message) 50768 Error.captureStackTrace(this, ClientClosedError) 50769 this.name = 'ClientClosedError' 50770 this.message = message || 'The client is closed' 50771 this.code = 'UND_ERR_CLOSED' 50772 } 50773 } 50774 50775 class SocketError extends UndiciError { 50776 constructor (message, socket) { 50777 super(message) 50778 Error.captureStackTrace(this, SocketError) 50779 this.name = 'SocketError' 50780 this.message = message || 'Socket error' 50781 this.code = 'UND_ERR_SOCKET' 50782 this.socket = socket 50783 } 50784 } 50785 50786 class NotSupportedError extends UndiciError { 50787 constructor (message) { 50788 super(message) 50789 Error.captureStackTrace(this, NotSupportedError) 50790 this.name = 'NotSupportedError' 50791 this.message = message || 'Not supported error' 50792 this.code = 'UND_ERR_NOT_SUPPORTED' 50793 } 50794 } 50795 50796 class BalancedPoolMissingUpstreamError extends UndiciError { 50797 constructor (message) { 50798 super(message) 50799 Error.captureStackTrace(this, NotSupportedError) 50800 this.name = 'MissingUpstreamError' 50801 this.message = message || 'No upstream has been added to the BalancedPool' 50802 this.code = 'UND_ERR_BPL_MISSING_UPSTREAM' 50803 } 50804 } 50805 50806 class HTTPParserError extends Error { 50807 constructor (message, code, data) { 50808 super(message) 50809 Error.captureStackTrace(this, HTTPParserError) 50810 this.name = 'HTTPParserError' 50811 this.code = code ? `HPE_${code}` : undefined 50812 this.data = data ? data.toString() : undefined 50813 } 50814 } 50815 50816 class ResponseExceededMaxSizeError extends UndiciError { 50817 constructor (message) { 50818 super(message) 50819 Error.captureStackTrace(this, ResponseExceededMaxSizeError) 50820 this.name = 'ResponseExceededMaxSizeError' 50821 this.message = message || 'Response content exceeded max size' 50822 this.code = 'UND_ERR_RES_EXCEEDED_MAX_SIZE' 50823 } 50824 } 50825 50826 class RequestRetryError extends UndiciError { 50827 constructor (message, code, { headers, data }) { 50828 super(message) 50829 Error.captureStackTrace(this, RequestRetryError) 50830 this.name = 'RequestRetryError' 50831 this.message = message || 'Request retry error' 50832 this.code = 'UND_ERR_REQ_RETRY' 50833 this.statusCode = code 50834 this.data = data 50835 this.headers = headers 50836 } 50837 } 50838 50839 module.exports = { 50840 HTTPParserError, 50841 UndiciError, 50842 HeadersTimeoutError, 50843 HeadersOverflowError, 50844 BodyTimeoutError, 50845 RequestContentLengthMismatchError, 50846 ConnectTimeoutError, 50847 ResponseStatusCodeError, 50848 InvalidArgumentError, 50849 InvalidReturnValueError, 50850 RequestAbortedError, 50851 ClientDestroyedError, 50852 ClientClosedError, 50853 InformationalError, 50854 SocketError, 50855 NotSupportedError, 50856 ResponseContentLengthMismatchError, 50857 BalancedPoolMissingUpstreamError, 50858 ResponseExceededMaxSizeError, 50859 RequestRetryError 50860 } 50861 50862 50863 /***/ }), 50864 50865 /***/ 62905: 50866 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 50867 50868 "use strict"; 50869 50870 50871 const { 50872 InvalidArgumentError, 50873 NotSupportedError 50874 } = __nccwpck_require__(48045) 50875 const assert = __nccwpck_require__(39491) 50876 const { kHTTP2BuildRequest, kHTTP2CopyHeaders, kHTTP1BuildRequest } = __nccwpck_require__(72785) 50877 const util = __nccwpck_require__(83983) 50878 50879 // tokenRegExp and headerCharRegex have been lifted from 50880 // https://github.com/nodejs/node/blob/main/lib/_http_common.js 50881 50882 /** 50883 * Verifies that the given val is a valid HTTP token 50884 * per the rules defined in RFC 7230 50885 * See https://tools.ietf.org/html/rfc7230#section-3.2.6 50886 */ 50887 const tokenRegExp = /^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/ 50888 50889 /** 50890 * Matches if val contains an invalid field-vchar 50891 * field-value = *( field-content / obs-fold ) 50892 * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] 50893 * field-vchar = VCHAR / obs-text 50894 */ 50895 const headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/ 50896 50897 // Verifies that a given path is valid does not contain control chars \x00 to \x20 50898 const invalidPathRegex = /[^\u0021-\u00ff]/ 50899 50900 const kHandler = Symbol('handler') 50901 50902 const channels = {} 50903 50904 let extractBody 50905 50906 try { 50907 const diagnosticsChannel = __nccwpck_require__(67643) 50908 channels.create = diagnosticsChannel.channel('undici:request:create') 50909 channels.bodySent = diagnosticsChannel.channel('undici:request:bodySent') 50910 channels.headers = diagnosticsChannel.channel('undici:request:headers') 50911 channels.trailers = diagnosticsChannel.channel('undici:request:trailers') 50912 channels.error = diagnosticsChannel.channel('undici:request:error') 50913 } catch { 50914 channels.create = { hasSubscribers: false } 50915 channels.bodySent = { hasSubscribers: false } 50916 channels.headers = { hasSubscribers: false } 50917 channels.trailers = { hasSubscribers: false } 50918 channels.error = { hasSubscribers: false } 50919 } 50920 50921 class Request { 50922 constructor (origin, { 50923 path, 50924 method, 50925 body, 50926 headers, 50927 query, 50928 idempotent, 50929 blocking, 50930 upgrade, 50931 headersTimeout, 50932 bodyTimeout, 50933 reset, 50934 throwOnError, 50935 expectContinue 50936 }, handler) { 50937 if (typeof path !== 'string') { 50938 throw new InvalidArgumentError('path must be a string') 50939 } else if ( 50940 path[0] !== '/' && 50941 !(path.startsWith('http://') || path.startsWith('https://')) && 50942 method !== 'CONNECT' 50943 ) { 50944 throw new InvalidArgumentError('path must be an absolute URL or start with a slash') 50945 } else if (invalidPathRegex.exec(path) !== null) { 50946 throw new InvalidArgumentError('invalid request path') 50947 } 50948 50949 if (typeof method !== 'string') { 50950 throw new InvalidArgumentError('method must be a string') 50951 } else if (tokenRegExp.exec(method) === null) { 50952 throw new InvalidArgumentError('invalid request method') 50953 } 50954 50955 if (upgrade && typeof upgrade !== 'string') { 50956 throw new InvalidArgumentError('upgrade must be a string') 50957 } 50958 50959 if (headersTimeout != null && (!Number.isFinite(headersTimeout) || headersTimeout < 0)) { 50960 throw new InvalidArgumentError('invalid headersTimeout') 50961 } 50962 50963 if (bodyTimeout != null && (!Number.isFinite(bodyTimeout) || bodyTimeout < 0)) { 50964 throw new InvalidArgumentError('invalid bodyTimeout') 50965 } 50966 50967 if (reset != null && typeof reset !== 'boolean') { 50968 throw new InvalidArgumentError('invalid reset') 50969 } 50970 50971 if (expectContinue != null && typeof expectContinue !== 'boolean') { 50972 throw new InvalidArgumentError('invalid expectContinue') 50973 } 50974 50975 this.headersTimeout = headersTimeout 50976 50977 this.bodyTimeout = bodyTimeout 50978 50979 this.throwOnError = throwOnError === true 50980 50981 this.method = method 50982 50983 this.abort = null 50984 50985 if (body == null) { 50986 this.body = null 50987 } else if (util.isStream(body)) { 50988 this.body = body 50989 50990 const rState = this.body._readableState 50991 if (!rState || !rState.autoDestroy) { 50992 this.endHandler = function autoDestroy () { 50993 util.destroy(this) 50994 } 50995 this.body.on('end', this.endHandler) 50996 } 50997 50998 this.errorHandler = err => { 50999 if (this.abort) { 51000 this.abort(err) 51001 } else { 51002 this.error = err 51003 } 51004 } 51005 this.body.on('error', this.errorHandler) 51006 } else if (util.isBuffer(body)) { 51007 this.body = body.byteLength ? body : null 51008 } else if (ArrayBuffer.isView(body)) { 51009 this.body = body.buffer.byteLength ? Buffer.from(body.buffer, body.byteOffset, body.byteLength) : null 51010 } else if (body instanceof ArrayBuffer) { 51011 this.body = body.byteLength ? Buffer.from(body) : null 51012 } else if (typeof body === 'string') { 51013 this.body = body.length ? Buffer.from(body) : null 51014 } else if (util.isFormDataLike(body) || util.isIterable(body) || util.isBlobLike(body)) { 51015 this.body = body 51016 } else { 51017 throw new InvalidArgumentError('body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable') 51018 } 51019 51020 this.completed = false 51021 51022 this.aborted = false 51023 51024 this.upgrade = upgrade || null 51025 51026 this.path = query ? util.buildURL(path, query) : path 51027 51028 this.origin = origin 51029 51030 this.idempotent = idempotent == null 51031 ? method === 'HEAD' || method === 'GET' 51032 : idempotent 51033 51034 this.blocking = blocking == null ? false : blocking 51035 51036 this.reset = reset == null ? null : reset 51037 51038 this.host = null 51039 51040 this.contentLength = null 51041 51042 this.contentType = null 51043 51044 this.headers = '' 51045 51046 // Only for H2 51047 this.expectContinue = expectContinue != null ? expectContinue : false 51048 51049 if (Array.isArray(headers)) { 51050 if (headers.length % 2 !== 0) { 51051 throw new InvalidArgumentError('headers array must be even') 51052 } 51053 for (let i = 0; i < headers.length; i += 2) { 51054 processHeader(this, headers[i], headers[i + 1]) 51055 } 51056 } else if (headers && typeof headers === 'object') { 51057 const keys = Object.keys(headers) 51058 for (let i = 0; i < keys.length; i++) { 51059 const key = keys[i] 51060 processHeader(this, key, headers[key]) 51061 } 51062 } else if (headers != null) { 51063 throw new InvalidArgumentError('headers must be an object or an array') 51064 } 51065 51066 if (util.isFormDataLike(this.body)) { 51067 if (util.nodeMajor < 16 || (util.nodeMajor === 16 && util.nodeMinor < 8)) { 51068 throw new InvalidArgumentError('Form-Data bodies are only supported in node v16.8 and newer.') 51069 } 51070 51071 if (!extractBody) { 51072 extractBody = (__nccwpck_require__(41472).extractBody) 51073 } 51074 51075 const [bodyStream, contentType] = extractBody(body) 51076 if (this.contentType == null) { 51077 this.contentType = contentType 51078 this.headers += `content-type: ${contentType}\r\n` 51079 } 51080 this.body = bodyStream.stream 51081 this.contentLength = bodyStream.length 51082 } else if (util.isBlobLike(body) && this.contentType == null && body.type) { 51083 this.contentType = body.type 51084 this.headers += `content-type: ${body.type}\r\n` 51085 } 51086 51087 util.validateHandler(handler, method, upgrade) 51088 51089 this.servername = util.getServerName(this.host) 51090 51091 this[kHandler] = handler 51092 51093 if (channels.create.hasSubscribers) { 51094 channels.create.publish({ request: this }) 51095 } 51096 } 51097 51098 onBodySent (chunk) { 51099 if (this[kHandler].onBodySent) { 51100 try { 51101 return this[kHandler].onBodySent(chunk) 51102 } catch (err) { 51103 this.abort(err) 51104 } 51105 } 51106 } 51107 51108 onRequestSent () { 51109 if (channels.bodySent.hasSubscribers) { 51110 channels.bodySent.publish({ request: this }) 51111 } 51112 51113 if (this[kHandler].onRequestSent) { 51114 try { 51115 return this[kHandler].onRequestSent() 51116 } catch (err) { 51117 this.abort(err) 51118 } 51119 } 51120 } 51121 51122 onConnect (abort) { 51123 assert(!this.aborted) 51124 assert(!this.completed) 51125 51126 if (this.error) { 51127 abort(this.error) 51128 } else { 51129 this.abort = abort 51130 return this[kHandler].onConnect(abort) 51131 } 51132 } 51133 51134 onHeaders (statusCode, headers, resume, statusText) { 51135 assert(!this.aborted) 51136 assert(!this.completed) 51137 51138 if (channels.headers.hasSubscribers) { 51139 channels.headers.publish({ request: this, response: { statusCode, headers, statusText } }) 51140 } 51141 51142 try { 51143 return this[kHandler].onHeaders(statusCode, headers, resume, statusText) 51144 } catch (err) { 51145 this.abort(err) 51146 } 51147 } 51148 51149 onData (chunk) { 51150 assert(!this.aborted) 51151 assert(!this.completed) 51152 51153 try { 51154 return this[kHandler].onData(chunk) 51155 } catch (err) { 51156 this.abort(err) 51157 return false 51158 } 51159 } 51160 51161 onUpgrade (statusCode, headers, socket) { 51162 assert(!this.aborted) 51163 assert(!this.completed) 51164 51165 return this[kHandler].onUpgrade(statusCode, headers, socket) 51166 } 51167 51168 onComplete (trailers) { 51169 this.onFinally() 51170 51171 assert(!this.aborted) 51172 51173 this.completed = true 51174 if (channels.trailers.hasSubscribers) { 51175 channels.trailers.publish({ request: this, trailers }) 51176 } 51177 51178 try { 51179 return this[kHandler].onComplete(trailers) 51180 } catch (err) { 51181 // TODO (fix): This might be a bad idea? 51182 this.onError(err) 51183 } 51184 } 51185 51186 onError (error) { 51187 this.onFinally() 51188 51189 if (channels.error.hasSubscribers) { 51190 channels.error.publish({ request: this, error }) 51191 } 51192 51193 if (this.aborted) { 51194 return 51195 } 51196 this.aborted = true 51197 51198 return this[kHandler].onError(error) 51199 } 51200 51201 onFinally () { 51202 if (this.errorHandler) { 51203 this.body.off('error', this.errorHandler) 51204 this.errorHandler = null 51205 } 51206 51207 if (this.endHandler) { 51208 this.body.off('end', this.endHandler) 51209 this.endHandler = null 51210 } 51211 } 51212 51213 // TODO: adjust to support H2 51214 addHeader (key, value) { 51215 processHeader(this, key, value) 51216 return this 51217 } 51218 51219 static [kHTTP1BuildRequest] (origin, opts, handler) { 51220 // TODO: Migrate header parsing here, to make Requests 51221 // HTTP agnostic 51222 return new Request(origin, opts, handler) 51223 } 51224 51225 static [kHTTP2BuildRequest] (origin, opts, handler) { 51226 const headers = opts.headers 51227 opts = { ...opts, headers: null } 51228 51229 const request = new Request(origin, opts, handler) 51230 51231 request.headers = {} 51232 51233 if (Array.isArray(headers)) { 51234 if (headers.length % 2 !== 0) { 51235 throw new InvalidArgumentError('headers array must be even') 51236 } 51237 for (let i = 0; i < headers.length; i += 2) { 51238 processHeader(request, headers[i], headers[i + 1], true) 51239 } 51240 } else if (headers && typeof headers === 'object') { 51241 const keys = Object.keys(headers) 51242 for (let i = 0; i < keys.length; i++) { 51243 const key = keys[i] 51244 processHeader(request, key, headers[key], true) 51245 } 51246 } else if (headers != null) { 51247 throw new InvalidArgumentError('headers must be an object or an array') 51248 } 51249 51250 return request 51251 } 51252 51253 static [kHTTP2CopyHeaders] (raw) { 51254 const rawHeaders = raw.split('\r\n') 51255 const headers = {} 51256 51257 for (const header of rawHeaders) { 51258 const [key, value] = header.split(': ') 51259 51260 if (value == null || value.length === 0) continue 51261 51262 if (headers[key]) headers[key] += `,${value}` 51263 else headers[key] = value 51264 } 51265 51266 return headers 51267 } 51268 } 51269 51270 function processHeaderValue (key, val, skipAppend) { 51271 if (val && typeof val === 'object') { 51272 throw new InvalidArgumentError(`invalid ${key} header`) 51273 } 51274 51275 val = val != null ? `${val}` : '' 51276 51277 if (headerCharRegex.exec(val) !== null) { 51278 throw new InvalidArgumentError(`invalid ${key} header`) 51279 } 51280 51281 return skipAppend ? val : `${key}: ${val}\r\n` 51282 } 51283 51284 function processHeader (request, key, val, skipAppend = false) { 51285 if (val && (typeof val === 'object' && !Array.isArray(val))) { 51286 throw new InvalidArgumentError(`invalid ${key} header`) 51287 } else if (val === undefined) { 51288 return 51289 } 51290 51291 if ( 51292 request.host === null && 51293 key.length === 4 && 51294 key.toLowerCase() === 'host' 51295 ) { 51296 if (headerCharRegex.exec(val) !== null) { 51297 throw new InvalidArgumentError(`invalid ${key} header`) 51298 } 51299 // Consumed by Client 51300 request.host = val 51301 } else if ( 51302 request.contentLength === null && 51303 key.length === 14 && 51304 key.toLowerCase() === 'content-length' 51305 ) { 51306 request.contentLength = parseInt(val, 10) 51307 if (!Number.isFinite(request.contentLength)) { 51308 throw new InvalidArgumentError('invalid content-length header') 51309 } 51310 } else if ( 51311 request.contentType === null && 51312 key.length === 12 && 51313 key.toLowerCase() === 'content-type' 51314 ) { 51315 request.contentType = val 51316 if (skipAppend) request.headers[key] = processHeaderValue(key, val, skipAppend) 51317 else request.headers += processHeaderValue(key, val) 51318 } else if ( 51319 key.length === 17 && 51320 key.toLowerCase() === 'transfer-encoding' 51321 ) { 51322 throw new InvalidArgumentError('invalid transfer-encoding header') 51323 } else if ( 51324 key.length === 10 && 51325 key.toLowerCase() === 'connection' 51326 ) { 51327 const value = typeof val === 'string' ? val.toLowerCase() : null 51328 if (value !== 'close' && value !== 'keep-alive') { 51329 throw new InvalidArgumentError('invalid connection header') 51330 } else if (value === 'close') { 51331 request.reset = true 51332 } 51333 } else if ( 51334 key.length === 10 && 51335 key.toLowerCase() === 'keep-alive' 51336 ) { 51337 throw new InvalidArgumentError('invalid keep-alive header') 51338 } else if ( 51339 key.length === 7 && 51340 key.toLowerCase() === 'upgrade' 51341 ) { 51342 throw new InvalidArgumentError('invalid upgrade header') 51343 } else if ( 51344 key.length === 6 && 51345 key.toLowerCase() === 'expect' 51346 ) { 51347 throw new NotSupportedError('expect header not supported') 51348 } else if (tokenRegExp.exec(key) === null) { 51349 throw new InvalidArgumentError('invalid header key') 51350 } else { 51351 if (Array.isArray(val)) { 51352 for (let i = 0; i < val.length; i++) { 51353 if (skipAppend) { 51354 if (request.headers[key]) request.headers[key] += `,${processHeaderValue(key, val[i], skipAppend)}` 51355 else request.headers[key] = processHeaderValue(key, val[i], skipAppend) 51356 } else { 51357 request.headers += processHeaderValue(key, val[i]) 51358 } 51359 } 51360 } else { 51361 if (skipAppend) request.headers[key] = processHeaderValue(key, val, skipAppend) 51362 else request.headers += processHeaderValue(key, val) 51363 } 51364 } 51365 } 51366 51367 module.exports = Request 51368 51369 51370 /***/ }), 51371 51372 /***/ 72785: 51373 /***/ ((module) => { 51374 51375 module.exports = { 51376 kClose: Symbol('close'), 51377 kDestroy: Symbol('destroy'), 51378 kDispatch: Symbol('dispatch'), 51379 kUrl: Symbol('url'), 51380 kWriting: Symbol('writing'), 51381 kResuming: Symbol('resuming'), 51382 kQueue: Symbol('queue'), 51383 kConnect: Symbol('connect'), 51384 kConnecting: Symbol('connecting'), 51385 kHeadersList: Symbol('headers list'), 51386 kKeepAliveDefaultTimeout: Symbol('default keep alive timeout'), 51387 kKeepAliveMaxTimeout: Symbol('max keep alive timeout'), 51388 kKeepAliveTimeoutThreshold: Symbol('keep alive timeout threshold'), 51389 kKeepAliveTimeoutValue: Symbol('keep alive timeout'), 51390 kKeepAlive: Symbol('keep alive'), 51391 kHeadersTimeout: Symbol('headers timeout'), 51392 kBodyTimeout: Symbol('body timeout'), 51393 kServerName: Symbol('server name'), 51394 kLocalAddress: Symbol('local address'), 51395 kHost: Symbol('host'), 51396 kNoRef: Symbol('no ref'), 51397 kBodyUsed: Symbol('used'), 51398 kRunning: Symbol('running'), 51399 kBlocking: Symbol('blocking'), 51400 kPending: Symbol('pending'), 51401 kSize: Symbol('size'), 51402 kBusy: Symbol('busy'), 51403 kQueued: Symbol('queued'), 51404 kFree: Symbol('free'), 51405 kConnected: Symbol('connected'), 51406 kClosed: Symbol('closed'), 51407 kNeedDrain: Symbol('need drain'), 51408 kReset: Symbol('reset'), 51409 kDestroyed: Symbol.for('nodejs.stream.destroyed'), 51410 kMaxHeadersSize: Symbol('max headers size'), 51411 kRunningIdx: Symbol('running index'), 51412 kPendingIdx: Symbol('pending index'), 51413 kError: Symbol('error'), 51414 kClients: Symbol('clients'), 51415 kClient: Symbol('client'), 51416 kParser: Symbol('parser'), 51417 kOnDestroyed: Symbol('destroy callbacks'), 51418 kPipelining: Symbol('pipelining'), 51419 kSocket: Symbol('socket'), 51420 kHostHeader: Symbol('host header'), 51421 kConnector: Symbol('connector'), 51422 kStrictContentLength: Symbol('strict content length'), 51423 kMaxRedirections: Symbol('maxRedirections'), 51424 kMaxRequests: Symbol('maxRequestsPerClient'), 51425 kProxy: Symbol('proxy agent options'), 51426 kCounter: Symbol('socket request counter'), 51427 kInterceptors: Symbol('dispatch interceptors'), 51428 kMaxResponseSize: Symbol('max response size'), 51429 kHTTP2Session: Symbol('http2Session'), 51430 kHTTP2SessionState: Symbol('http2Session state'), 51431 kHTTP2BuildRequest: Symbol('http2 build request'), 51432 kHTTP1BuildRequest: Symbol('http1 build request'), 51433 kHTTP2CopyHeaders: Symbol('http2 copy headers'), 51434 kHTTPConnVersion: Symbol('http connection version'), 51435 kRetryHandlerDefaultRetry: Symbol('retry agent default retry'), 51436 kConstruct: Symbol('constructable') 51437 } 51438 51439 51440 /***/ }), 51441 51442 /***/ 83983: 51443 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 51444 51445 "use strict"; 51446 51447 51448 const assert = __nccwpck_require__(39491) 51449 const { kDestroyed, kBodyUsed } = __nccwpck_require__(72785) 51450 const { IncomingMessage } = __nccwpck_require__(13685) 51451 const stream = __nccwpck_require__(12781) 51452 const net = __nccwpck_require__(41808) 51453 const { InvalidArgumentError } = __nccwpck_require__(48045) 51454 const { Blob } = __nccwpck_require__(14300) 51455 const nodeUtil = __nccwpck_require__(73837) 51456 const { stringify } = __nccwpck_require__(63477) 51457 const { headerNameLowerCasedRecord } = __nccwpck_require__(14462) 51458 51459 const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(v => Number(v)) 51460 51461 function nop () {} 51462 51463 function isStream (obj) { 51464 return obj && typeof obj === 'object' && typeof obj.pipe === 'function' && typeof obj.on === 'function' 51465 } 51466 51467 // based on https://github.com/node-fetch/fetch-blob/blob/8ab587d34080de94140b54f07168451e7d0b655e/index.js#L229-L241 (MIT License) 51468 function isBlobLike (object) { 51469 return (Blob && object instanceof Blob) || ( 51470 object && 51471 typeof object === 'object' && 51472 (typeof object.stream === 'function' || 51473 typeof object.arrayBuffer === 'function') && 51474 /^(Blob|File)$/.test(object[Symbol.toStringTag]) 51475 ) 51476 } 51477 51478 function buildURL (url, queryParams) { 51479 if (url.includes('?') || url.includes('#')) { 51480 throw new Error('Query params cannot be passed when url already contains "?" or "#".') 51481 } 51482 51483 const stringified = stringify(queryParams) 51484 51485 if (stringified) { 51486 url += '?' + stringified 51487 } 51488 51489 return url 51490 } 51491 51492 function parseURL (url) { 51493 if (typeof url === 'string') { 51494 url = new URL(url) 51495 51496 if (!/^https?:/.test(url.origin || url.protocol)) { 51497 throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.') 51498 } 51499 51500 return url 51501 } 51502 51503 if (!url || typeof url !== 'object') { 51504 throw new InvalidArgumentError('Invalid URL: The URL argument must be a non-null object.') 51505 } 51506 51507 if (!/^https?:/.test(url.origin || url.protocol)) { 51508 throw new InvalidArgumentError('Invalid URL protocol: the URL must start with `http:` or `https:`.') 51509 } 51510 51511 if (!(url instanceof URL)) { 51512 if (url.port != null && url.port !== '' && !Number.isFinite(parseInt(url.port))) { 51513 throw new InvalidArgumentError('Invalid URL: port must be a valid integer or a string representation of an integer.') 51514 } 51515 51516 if (url.path != null && typeof url.path !== 'string') { 51517 throw new InvalidArgumentError('Invalid URL path: the path must be a string or null/undefined.') 51518 } 51519 51520 if (url.pathname != null && typeof url.pathname !== 'string') { 51521 throw new InvalidArgumentError('Invalid URL pathname: the pathname must be a string or null/undefined.') 51522 } 51523 51524 if (url.hostname != null && typeof url.hostname !== 'string') { 51525 throw new InvalidArgumentError('Invalid URL hostname: the hostname must be a string or null/undefined.') 51526 } 51527 51528 if (url.origin != null && typeof url.origin !== 'string') { 51529 throw new InvalidArgumentError('Invalid URL origin: the origin must be a string or null/undefined.') 51530 } 51531 51532 const port = url.port != null 51533 ? url.port 51534 : (url.protocol === 'https:' ? 443 : 80) 51535 let origin = url.origin != null 51536 ? url.origin 51537 : `${url.protocol}//${url.hostname}:${port}` 51538 let path = url.path != null 51539 ? url.path 51540 : `${url.pathname || ''}${url.search || ''}` 51541 51542 if (origin.endsWith('/')) { 51543 origin = origin.substring(0, origin.length - 1) 51544 } 51545 51546 if (path && !path.startsWith('/')) { 51547 path = `/${path}` 51548 } 51549 // new URL(path, origin) is unsafe when `path` contains an absolute URL 51550 // From https://developer.mozilla.org/en-US/docs/Web/API/URL/URL: 51551 // If first parameter is a relative URL, second param is required, and will be used as the base URL. 51552 // If first parameter is an absolute URL, a given second param will be ignored. 51553 url = new URL(origin + path) 51554 } 51555 51556 return url 51557 } 51558 51559 function parseOrigin (url) { 51560 url = parseURL(url) 51561 51562 if (url.pathname !== '/' || url.search || url.hash) { 51563 throw new InvalidArgumentError('invalid url') 51564 } 51565 51566 return url 51567 } 51568 51569 function getHostname (host) { 51570 if (host[0] === '[') { 51571 const idx = host.indexOf(']') 51572 51573 assert(idx !== -1) 51574 return host.substring(1, idx) 51575 } 51576 51577 const idx = host.indexOf(':') 51578 if (idx === -1) return host 51579 51580 return host.substring(0, idx) 51581 } 51582 51583 // IP addresses are not valid server names per RFC6066 51584 // > Currently, the only server names supported are DNS hostnames 51585 function getServerName (host) { 51586 if (!host) { 51587 return null 51588 } 51589 51590 assert.strictEqual(typeof host, 'string') 51591 51592 const servername = getHostname(host) 51593 if (net.isIP(servername)) { 51594 return '' 51595 } 51596 51597 return servername 51598 } 51599 51600 function deepClone (obj) { 51601 return JSON.parse(JSON.stringify(obj)) 51602 } 51603 51604 function isAsyncIterable (obj) { 51605 return !!(obj != null && typeof obj[Symbol.asyncIterator] === 'function') 51606 } 51607 51608 function isIterable (obj) { 51609 return !!(obj != null && (typeof obj[Symbol.iterator] === 'function' || typeof obj[Symbol.asyncIterator] === 'function')) 51610 } 51611 51612 function bodyLength (body) { 51613 if (body == null) { 51614 return 0 51615 } else if (isStream(body)) { 51616 const state = body._readableState 51617 return state && state.objectMode === false && state.ended === true && Number.isFinite(state.length) 51618 ? state.length 51619 : null 51620 } else if (isBlobLike(body)) { 51621 return body.size != null ? body.size : null 51622 } else if (isBuffer(body)) { 51623 return body.byteLength 51624 } 51625 51626 return null 51627 } 51628 51629 function isDestroyed (stream) { 51630 return !stream || !!(stream.destroyed || stream[kDestroyed]) 51631 } 51632 51633 function isReadableAborted (stream) { 51634 const state = stream && stream._readableState 51635 return isDestroyed(stream) && state && !state.endEmitted 51636 } 51637 51638 function destroy (stream, err) { 51639 if (stream == null || !isStream(stream) || isDestroyed(stream)) { 51640 return 51641 } 51642 51643 if (typeof stream.destroy === 'function') { 51644 if (Object.getPrototypeOf(stream).constructor === IncomingMessage) { 51645 // See: https://github.com/nodejs/node/pull/38505/files 51646 stream.socket = null 51647 } 51648 51649 stream.destroy(err) 51650 } else if (err) { 51651 process.nextTick((stream, err) => { 51652 stream.emit('error', err) 51653 }, stream, err) 51654 } 51655 51656 if (stream.destroyed !== true) { 51657 stream[kDestroyed] = true 51658 } 51659 } 51660 51661 const KEEPALIVE_TIMEOUT_EXPR = /timeout=(\d+)/ 51662 function parseKeepAliveTimeout (val) { 51663 const m = val.toString().match(KEEPALIVE_TIMEOUT_EXPR) 51664 return m ? parseInt(m[1], 10) * 1000 : null 51665 } 51666 51667 /** 51668 * Retrieves a header name and returns its lowercase value. 51669 * @param {string | Buffer} value Header name 51670 * @returns {string} 51671 */ 51672 function headerNameToString (value) { 51673 return headerNameLowerCasedRecord[value] || value.toLowerCase() 51674 } 51675 51676 function parseHeaders (headers, obj = {}) { 51677 // For H2 support 51678 if (!Array.isArray(headers)) return headers 51679 51680 for (let i = 0; i < headers.length; i += 2) { 51681 const key = headers[i].toString().toLowerCase() 51682 let val = obj[key] 51683 51684 if (!val) { 51685 if (Array.isArray(headers[i + 1])) { 51686 obj[key] = headers[i + 1].map(x => x.toString('utf8')) 51687 } else { 51688 obj[key] = headers[i + 1].toString('utf8') 51689 } 51690 } else { 51691 if (!Array.isArray(val)) { 51692 val = [val] 51693 obj[key] = val 51694 } 51695 val.push(headers[i + 1].toString('utf8')) 51696 } 51697 } 51698 51699 // See https://github.com/nodejs/node/pull/46528 51700 if ('content-length' in obj && 'content-disposition' in obj) { 51701 obj['content-disposition'] = Buffer.from(obj['content-disposition']).toString('latin1') 51702 } 51703 51704 return obj 51705 } 51706 51707 function parseRawHeaders (headers) { 51708 const ret = [] 51709 let hasContentLength = false 51710 let contentDispositionIdx = -1 51711 51712 for (let n = 0; n < headers.length; n += 2) { 51713 const key = headers[n + 0].toString() 51714 const val = headers[n + 1].toString('utf8') 51715 51716 if (key.length === 14 && (key === 'content-length' || key.toLowerCase() === 'content-length')) { 51717 ret.push(key, val) 51718 hasContentLength = true 51719 } else if (key.length === 19 && (key === 'content-disposition' || key.toLowerCase() === 'content-disposition')) { 51720 contentDispositionIdx = ret.push(key, val) - 1 51721 } else { 51722 ret.push(key, val) 51723 } 51724 } 51725 51726 // See https://github.com/nodejs/node/pull/46528 51727 if (hasContentLength && contentDispositionIdx !== -1) { 51728 ret[contentDispositionIdx] = Buffer.from(ret[contentDispositionIdx]).toString('latin1') 51729 } 51730 51731 return ret 51732 } 51733 51734 function isBuffer (buffer) { 51735 // See, https://github.com/mcollina/undici/pull/319 51736 return buffer instanceof Uint8Array || Buffer.isBuffer(buffer) 51737 } 51738 51739 function validateHandler (handler, method, upgrade) { 51740 if (!handler || typeof handler !== 'object') { 51741 throw new InvalidArgumentError('handler must be an object') 51742 } 51743 51744 if (typeof handler.onConnect !== 'function') { 51745 throw new InvalidArgumentError('invalid onConnect method') 51746 } 51747 51748 if (typeof handler.onError !== 'function') { 51749 throw new InvalidArgumentError('invalid onError method') 51750 } 51751 51752 if (typeof handler.onBodySent !== 'function' && handler.onBodySent !== undefined) { 51753 throw new InvalidArgumentError('invalid onBodySent method') 51754 } 51755 51756 if (upgrade || method === 'CONNECT') { 51757 if (typeof handler.onUpgrade !== 'function') { 51758 throw new InvalidArgumentError('invalid onUpgrade method') 51759 } 51760 } else { 51761 if (typeof handler.onHeaders !== 'function') { 51762 throw new InvalidArgumentError('invalid onHeaders method') 51763 } 51764 51765 if (typeof handler.onData !== 'function') { 51766 throw new InvalidArgumentError('invalid onData method') 51767 } 51768 51769 if (typeof handler.onComplete !== 'function') { 51770 throw new InvalidArgumentError('invalid onComplete method') 51771 } 51772 } 51773 } 51774 51775 // A body is disturbed if it has been read from and it cannot 51776 // be re-used without losing state or data. 51777 function isDisturbed (body) { 51778 return !!(body && ( 51779 stream.isDisturbed 51780 ? stream.isDisturbed(body) || body[kBodyUsed] // TODO (fix): Why is body[kBodyUsed] needed? 51781 : body[kBodyUsed] || 51782 body.readableDidRead || 51783 (body._readableState && body._readableState.dataEmitted) || 51784 isReadableAborted(body) 51785 )) 51786 } 51787 51788 function isErrored (body) { 51789 return !!(body && ( 51790 stream.isErrored 51791 ? stream.isErrored(body) 51792 : /state: 'errored'/.test(nodeUtil.inspect(body) 51793 ))) 51794 } 51795 51796 function isReadable (body) { 51797 return !!(body && ( 51798 stream.isReadable 51799 ? stream.isReadable(body) 51800 : /state: 'readable'/.test(nodeUtil.inspect(body) 51801 ))) 51802 } 51803 51804 function getSocketInfo (socket) { 51805 return { 51806 localAddress: socket.localAddress, 51807 localPort: socket.localPort, 51808 remoteAddress: socket.remoteAddress, 51809 remotePort: socket.remotePort, 51810 remoteFamily: socket.remoteFamily, 51811 timeout: socket.timeout, 51812 bytesWritten: socket.bytesWritten, 51813 bytesRead: socket.bytesRead 51814 } 51815 } 51816 51817 async function * convertIterableToBuffer (iterable) { 51818 for await (const chunk of iterable) { 51819 yield Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk) 51820 } 51821 } 51822 51823 let ReadableStream 51824 function ReadableStreamFrom (iterable) { 51825 if (!ReadableStream) { 51826 ReadableStream = (__nccwpck_require__(35356).ReadableStream) 51827 } 51828 51829 if (ReadableStream.from) { 51830 return ReadableStream.from(convertIterableToBuffer(iterable)) 51831 } 51832 51833 let iterator 51834 return new ReadableStream( 51835 { 51836 async start () { 51837 iterator = iterable[Symbol.asyncIterator]() 51838 }, 51839 async pull (controller) { 51840 const { done, value } = await iterator.next() 51841 if (done) { 51842 queueMicrotask(() => { 51843 controller.close() 51844 }) 51845 } else { 51846 const buf = Buffer.isBuffer(value) ? value : Buffer.from(value) 51847 controller.enqueue(new Uint8Array(buf)) 51848 } 51849 return controller.desiredSize > 0 51850 }, 51851 async cancel (reason) { 51852 await iterator.return() 51853 } 51854 }, 51855 0 51856 ) 51857 } 51858 51859 // The chunk should be a FormData instance and contains 51860 // all the required methods. 51861 function isFormDataLike (object) { 51862 return ( 51863 object && 51864 typeof object === 'object' && 51865 typeof object.append === 'function' && 51866 typeof object.delete === 'function' && 51867 typeof object.get === 'function' && 51868 typeof object.getAll === 'function' && 51869 typeof object.has === 'function' && 51870 typeof object.set === 'function' && 51871 object[Symbol.toStringTag] === 'FormData' 51872 ) 51873 } 51874 51875 function throwIfAborted (signal) { 51876 if (!signal) { return } 51877 if (typeof signal.throwIfAborted === 'function') { 51878 signal.throwIfAborted() 51879 } else { 51880 if (signal.aborted) { 51881 // DOMException not available < v17.0.0 51882 const err = new Error('The operation was aborted') 51883 err.name = 'AbortError' 51884 throw err 51885 } 51886 } 51887 } 51888 51889 function addAbortListener (signal, listener) { 51890 if ('addEventListener' in signal) { 51891 signal.addEventListener('abort', listener, { once: true }) 51892 return () => signal.removeEventListener('abort', listener) 51893 } 51894 signal.addListener('abort', listener) 51895 return () => signal.removeListener('abort', listener) 51896 } 51897 51898 const hasToWellFormed = !!String.prototype.toWellFormed 51899 51900 /** 51901 * @param {string} val 51902 */ 51903 function toUSVString (val) { 51904 if (hasToWellFormed) { 51905 return `${val}`.toWellFormed() 51906 } else if (nodeUtil.toUSVString) { 51907 return nodeUtil.toUSVString(val) 51908 } 51909 51910 return `${val}` 51911 } 51912 51913 // Parsed accordingly to RFC 9110 51914 // https://www.rfc-editor.org/rfc/rfc9110#field.content-range 51915 function parseRangeHeader (range) { 51916 if (range == null || range === '') return { start: 0, end: null, size: null } 51917 51918 const m = range ? range.match(/^bytes (\d+)-(\d+)\/(\d+)?$/) : null 51919 return m 51920 ? { 51921 start: parseInt(m[1]), 51922 end: m[2] ? parseInt(m[2]) : null, 51923 size: m[3] ? parseInt(m[3]) : null 51924 } 51925 : null 51926 } 51927 51928 const kEnumerableProperty = Object.create(null) 51929 kEnumerableProperty.enumerable = true 51930 51931 module.exports = { 51932 kEnumerableProperty, 51933 nop, 51934 isDisturbed, 51935 isErrored, 51936 isReadable, 51937 toUSVString, 51938 isReadableAborted, 51939 isBlobLike, 51940 parseOrigin, 51941 parseURL, 51942 getServerName, 51943 isStream, 51944 isIterable, 51945 isAsyncIterable, 51946 isDestroyed, 51947 headerNameToString, 51948 parseRawHeaders, 51949 parseHeaders, 51950 parseKeepAliveTimeout, 51951 destroy, 51952 bodyLength, 51953 deepClone, 51954 ReadableStreamFrom, 51955 isBuffer, 51956 validateHandler, 51957 getSocketInfo, 51958 isFormDataLike, 51959 buildURL, 51960 throwIfAborted, 51961 addAbortListener, 51962 parseRangeHeader, 51963 nodeMajor, 51964 nodeMinor, 51965 nodeHasAutoSelectFamily: nodeMajor > 18 || (nodeMajor === 18 && nodeMinor >= 13), 51966 safeHTTPMethods: ['GET', 'HEAD', 'OPTIONS', 'TRACE'] 51967 } 51968 51969 51970 /***/ }), 51971 51972 /***/ 74839: 51973 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 51974 51975 "use strict"; 51976 51977 51978 const Dispatcher = __nccwpck_require__(60412) 51979 const { 51980 ClientDestroyedError, 51981 ClientClosedError, 51982 InvalidArgumentError 51983 } = __nccwpck_require__(48045) 51984 const { kDestroy, kClose, kDispatch, kInterceptors } = __nccwpck_require__(72785) 51985 51986 const kDestroyed = Symbol('destroyed') 51987 const kClosed = Symbol('closed') 51988 const kOnDestroyed = Symbol('onDestroyed') 51989 const kOnClosed = Symbol('onClosed') 51990 const kInterceptedDispatch = Symbol('Intercepted Dispatch') 51991 51992 class DispatcherBase extends Dispatcher { 51993 constructor () { 51994 super() 51995 51996 this[kDestroyed] = false 51997 this[kOnDestroyed] = null 51998 this[kClosed] = false 51999 this[kOnClosed] = [] 52000 } 52001 52002 get destroyed () { 52003 return this[kDestroyed] 52004 } 52005 52006 get closed () { 52007 return this[kClosed] 52008 } 52009 52010 get interceptors () { 52011 return this[kInterceptors] 52012 } 52013 52014 set interceptors (newInterceptors) { 52015 if (newInterceptors) { 52016 for (let i = newInterceptors.length - 1; i >= 0; i--) { 52017 const interceptor = this[kInterceptors][i] 52018 if (typeof interceptor !== 'function') { 52019 throw new InvalidArgumentError('interceptor must be an function') 52020 } 52021 } 52022 } 52023 52024 this[kInterceptors] = newInterceptors 52025 } 52026 52027 close (callback) { 52028 if (callback === undefined) { 52029 return new Promise((resolve, reject) => { 52030 this.close((err, data) => { 52031 return err ? reject(err) : resolve(data) 52032 }) 52033 }) 52034 } 52035 52036 if (typeof callback !== 'function') { 52037 throw new InvalidArgumentError('invalid callback') 52038 } 52039 52040 if (this[kDestroyed]) { 52041 queueMicrotask(() => callback(new ClientDestroyedError(), null)) 52042 return 52043 } 52044 52045 if (this[kClosed]) { 52046 if (this[kOnClosed]) { 52047 this[kOnClosed].push(callback) 52048 } else { 52049 queueMicrotask(() => callback(null, null)) 52050 } 52051 return 52052 } 52053 52054 this[kClosed] = true 52055 this[kOnClosed].push(callback) 52056 52057 const onClosed = () => { 52058 const callbacks = this[kOnClosed] 52059 this[kOnClosed] = null 52060 for (let i = 0; i < callbacks.length; i++) { 52061 callbacks[i](null, null) 52062 } 52063 } 52064 52065 // Should not error. 52066 this[kClose]() 52067 .then(() => this.destroy()) 52068 .then(() => { 52069 queueMicrotask(onClosed) 52070 }) 52071 } 52072 52073 destroy (err, callback) { 52074 if (typeof err === 'function') { 52075 callback = err 52076 err = null 52077 } 52078 52079 if (callback === undefined) { 52080 return new Promise((resolve, reject) => { 52081 this.destroy(err, (err, data) => { 52082 return err ? /* istanbul ignore next: should never error */ reject(err) : resolve(data) 52083 }) 52084 }) 52085 } 52086 52087 if (typeof callback !== 'function') { 52088 throw new InvalidArgumentError('invalid callback') 52089 } 52090 52091 if (this[kDestroyed]) { 52092 if (this[kOnDestroyed]) { 52093 this[kOnDestroyed].push(callback) 52094 } else { 52095 queueMicrotask(() => callback(null, null)) 52096 } 52097 return 52098 } 52099 52100 if (!err) { 52101 err = new ClientDestroyedError() 52102 } 52103 52104 this[kDestroyed] = true 52105 this[kOnDestroyed] = this[kOnDestroyed] || [] 52106 this[kOnDestroyed].push(callback) 52107 52108 const onDestroyed = () => { 52109 const callbacks = this[kOnDestroyed] 52110 this[kOnDestroyed] = null 52111 for (let i = 0; i < callbacks.length; i++) { 52112 callbacks[i](null, null) 52113 } 52114 } 52115 52116 // Should not error. 52117 this[kDestroy](err).then(() => { 52118 queueMicrotask(onDestroyed) 52119 }) 52120 } 52121 52122 [kInterceptedDispatch] (opts, handler) { 52123 if (!this[kInterceptors] || this[kInterceptors].length === 0) { 52124 this[kInterceptedDispatch] = this[kDispatch] 52125 return this[kDispatch](opts, handler) 52126 } 52127 52128 let dispatch = this[kDispatch].bind(this) 52129 for (let i = this[kInterceptors].length - 1; i >= 0; i--) { 52130 dispatch = this[kInterceptors][i](dispatch) 52131 } 52132 this[kInterceptedDispatch] = dispatch 52133 return dispatch(opts, handler) 52134 } 52135 52136 dispatch (opts, handler) { 52137 if (!handler || typeof handler !== 'object') { 52138 throw new InvalidArgumentError('handler must be an object') 52139 } 52140 52141 try { 52142 if (!opts || typeof opts !== 'object') { 52143 throw new InvalidArgumentError('opts must be an object.') 52144 } 52145 52146 if (this[kDestroyed] || this[kOnDestroyed]) { 52147 throw new ClientDestroyedError() 52148 } 52149 52150 if (this[kClosed]) { 52151 throw new ClientClosedError() 52152 } 52153 52154 return this[kInterceptedDispatch](opts, handler) 52155 } catch (err) { 52156 if (typeof handler.onError !== 'function') { 52157 throw new InvalidArgumentError('invalid onError method') 52158 } 52159 52160 handler.onError(err) 52161 52162 return false 52163 } 52164 } 52165 } 52166 52167 module.exports = DispatcherBase 52168 52169 52170 /***/ }), 52171 52172 /***/ 60412: 52173 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 52174 52175 "use strict"; 52176 52177 52178 const EventEmitter = __nccwpck_require__(82361) 52179 52180 class Dispatcher extends EventEmitter { 52181 dispatch () { 52182 throw new Error('not implemented') 52183 } 52184 52185 close () { 52186 throw new Error('not implemented') 52187 } 52188 52189 destroy () { 52190 throw new Error('not implemented') 52191 } 52192 } 52193 52194 module.exports = Dispatcher 52195 52196 52197 /***/ }), 52198 52199 /***/ 41472: 52200 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 52201 52202 "use strict"; 52203 52204 52205 const Busboy = __nccwpck_require__(50727) 52206 const util = __nccwpck_require__(83983) 52207 const { 52208 ReadableStreamFrom, 52209 isBlobLike, 52210 isReadableStreamLike, 52211 readableStreamClose, 52212 createDeferredPromise, 52213 fullyReadBody 52214 } = __nccwpck_require__(52538) 52215 const { FormData } = __nccwpck_require__(72015) 52216 const { kState } = __nccwpck_require__(15861) 52217 const { webidl } = __nccwpck_require__(21744) 52218 const { DOMException, structuredClone } = __nccwpck_require__(41037) 52219 const { Blob, File: NativeFile } = __nccwpck_require__(14300) 52220 const { kBodyUsed } = __nccwpck_require__(72785) 52221 const assert = __nccwpck_require__(39491) 52222 const { isErrored } = __nccwpck_require__(83983) 52223 const { isUint8Array, isArrayBuffer } = __nccwpck_require__(29830) 52224 const { File: UndiciFile } = __nccwpck_require__(78511) 52225 const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(685) 52226 52227 let ReadableStream = globalThis.ReadableStream 52228 52229 /** @type {globalThis['File']} */ 52230 const File = NativeFile ?? UndiciFile 52231 const textEncoder = new TextEncoder() 52232 const textDecoder = new TextDecoder() 52233 52234 // https://fetch.spec.whatwg.org/#concept-bodyinit-extract 52235 function extractBody (object, keepalive = false) { 52236 if (!ReadableStream) { 52237 ReadableStream = (__nccwpck_require__(35356).ReadableStream) 52238 } 52239 52240 // 1. Let stream be null. 52241 let stream = null 52242 52243 // 2. If object is a ReadableStream object, then set stream to object. 52244 if (object instanceof ReadableStream) { 52245 stream = object 52246 } else if (isBlobLike(object)) { 52247 // 3. Otherwise, if object is a Blob object, set stream to the 52248 // result of running object’s get stream. 52249 stream = object.stream() 52250 } else { 52251 // 4. Otherwise, set stream to a new ReadableStream object, and set 52252 // up stream. 52253 stream = new ReadableStream({ 52254 async pull (controller) { 52255 controller.enqueue( 52256 typeof source === 'string' ? textEncoder.encode(source) : source 52257 ) 52258 queueMicrotask(() => readableStreamClose(controller)) 52259 }, 52260 start () {}, 52261 type: undefined 52262 }) 52263 } 52264 52265 // 5. Assert: stream is a ReadableStream object. 52266 assert(isReadableStreamLike(stream)) 52267 52268 // 6. Let action be null. 52269 let action = null 52270 52271 // 7. Let source be null. 52272 let source = null 52273 52274 // 8. Let length be null. 52275 let length = null 52276 52277 // 9. Let type be null. 52278 let type = null 52279 52280 // 10. Switch on object: 52281 if (typeof object === 'string') { 52282 // Set source to the UTF-8 encoding of object. 52283 // Note: setting source to a Uint8Array here breaks some mocking assumptions. 52284 source = object 52285 52286 // Set type to `text/plain;charset=UTF-8`. 52287 type = 'text/plain;charset=UTF-8' 52288 } else if (object instanceof URLSearchParams) { 52289 // URLSearchParams 52290 52291 // spec says to run application/x-www-form-urlencoded on body.list 52292 // this is implemented in Node.js as apart of an URLSearchParams instance toString method 52293 // See: https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/lib/internal/url.js#L490 52294 // and https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/lib/internal/url.js#L1100 52295 52296 // Set source to the result of running the application/x-www-form-urlencoded serializer with object’s list. 52297 source = object.toString() 52298 52299 // Set type to `application/x-www-form-urlencoded;charset=UTF-8`. 52300 type = 'application/x-www-form-urlencoded;charset=UTF-8' 52301 } else if (isArrayBuffer(object)) { 52302 // BufferSource/ArrayBuffer 52303 52304 // Set source to a copy of the bytes held by object. 52305 source = new Uint8Array(object.slice()) 52306 } else if (ArrayBuffer.isView(object)) { 52307 // BufferSource/ArrayBufferView 52308 52309 // Set source to a copy of the bytes held by object. 52310 source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)) 52311 } else if (util.isFormDataLike(object)) { 52312 const boundary = `----formdata-undici-0${`${Math.floor(Math.random() * 1e11)}`.padStart(11, '0')}` 52313 const prefix = `--${boundary}\r\nContent-Disposition: form-data` 52314 52315 /*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */ 52316 const escape = (str) => 52317 str.replace(/\n/g, '%0A').replace(/\r/g, '%0D').replace(/"/g, '%22') 52318 const normalizeLinefeeds = (value) => value.replace(/\r?\n|\r/g, '\r\n') 52319 52320 // Set action to this step: run the multipart/form-data 52321 // encoding algorithm, with object’s entry list and UTF-8. 52322 // - This ensures that the body is immutable and can't be changed afterwords 52323 // - That the content-length is calculated in advance. 52324 // - And that all parts are pre-encoded and ready to be sent. 52325 52326 const blobParts = [] 52327 const rn = new Uint8Array([13, 10]) // '\r\n' 52328 length = 0 52329 let hasUnknownSizeValue = false 52330 52331 for (const [name, value] of object) { 52332 if (typeof value === 'string') { 52333 const chunk = textEncoder.encode(prefix + 52334 `; name="${escape(normalizeLinefeeds(name))}"` + 52335 `\r\n\r\n${normalizeLinefeeds(value)}\r\n`) 52336 blobParts.push(chunk) 52337 length += chunk.byteLength 52338 } else { 52339 const chunk = textEncoder.encode(`${prefix}; name="${escape(normalizeLinefeeds(name))}"` + 52340 (value.name ? `; filename="${escape(value.name)}"` : '') + '\r\n' + 52341 `Content-Type: ${ 52342 value.type || 'application/octet-stream' 52343 }\r\n\r\n`) 52344 blobParts.push(chunk, value, rn) 52345 if (typeof value.size === 'number') { 52346 length += chunk.byteLength + value.size + rn.byteLength 52347 } else { 52348 hasUnknownSizeValue = true 52349 } 52350 } 52351 } 52352 52353 const chunk = textEncoder.encode(`--${boundary}--`) 52354 blobParts.push(chunk) 52355 length += chunk.byteLength 52356 if (hasUnknownSizeValue) { 52357 length = null 52358 } 52359 52360 // Set source to object. 52361 source = object 52362 52363 action = async function * () { 52364 for (const part of blobParts) { 52365 if (part.stream) { 52366 yield * part.stream() 52367 } else { 52368 yield part 52369 } 52370 } 52371 } 52372 52373 // Set type to `multipart/form-data; boundary=`, 52374 // followed by the multipart/form-data boundary string generated 52375 // by the multipart/form-data encoding algorithm. 52376 type = 'multipart/form-data; boundary=' + boundary 52377 } else if (isBlobLike(object)) { 52378 // Blob 52379 52380 // Set source to object. 52381 source = object 52382 52383 // Set length to object’s size. 52384 length = object.size 52385 52386 // If object’s type attribute is not the empty byte sequence, set 52387 // type to its value. 52388 if (object.type) { 52389 type = object.type 52390 } 52391 } else if (typeof object[Symbol.asyncIterator] === 'function') { 52392 // If keepalive is true, then throw a TypeError. 52393 if (keepalive) { 52394 throw new TypeError('keepalive') 52395 } 52396 52397 // If object is disturbed or locked, then throw a TypeError. 52398 if (util.isDisturbed(object) || object.locked) { 52399 throw new TypeError( 52400 'Response body object should not be disturbed or locked' 52401 ) 52402 } 52403 52404 stream = 52405 object instanceof ReadableStream ? object : ReadableStreamFrom(object) 52406 } 52407 52408 // 11. If source is a byte sequence, then set action to a 52409 // step that returns source and length to source’s length. 52410 if (typeof source === 'string' || util.isBuffer(source)) { 52411 length = Buffer.byteLength(source) 52412 } 52413 52414 // 12. If action is non-null, then run these steps in in parallel: 52415 if (action != null) { 52416 // Run action. 52417 let iterator 52418 stream = new ReadableStream({ 52419 async start () { 52420 iterator = action(object)[Symbol.asyncIterator]() 52421 }, 52422 async pull (controller) { 52423 const { value, done } = await iterator.next() 52424 if (done) { 52425 // When running action is done, close stream. 52426 queueMicrotask(() => { 52427 controller.close() 52428 }) 52429 } else { 52430 // Whenever one or more bytes are available and stream is not errored, 52431 // enqueue a Uint8Array wrapping an ArrayBuffer containing the available 52432 // bytes into stream. 52433 if (!isErrored(stream)) { 52434 controller.enqueue(new Uint8Array(value)) 52435 } 52436 } 52437 return controller.desiredSize > 0 52438 }, 52439 async cancel (reason) { 52440 await iterator.return() 52441 }, 52442 type: undefined 52443 }) 52444 } 52445 52446 // 13. Let body be a body whose stream is stream, source is source, 52447 // and length is length. 52448 const body = { stream, source, length } 52449 52450 // 14. Return (body, type). 52451 return [body, type] 52452 } 52453 52454 // https://fetch.spec.whatwg.org/#bodyinit-safely-extract 52455 function safelyExtractBody (object, keepalive = false) { 52456 if (!ReadableStream) { 52457 // istanbul ignore next 52458 ReadableStream = (__nccwpck_require__(35356).ReadableStream) 52459 } 52460 52461 // To safely extract a body and a `Content-Type` value from 52462 // a byte sequence or BodyInit object object, run these steps: 52463 52464 // 1. If object is a ReadableStream object, then: 52465 if (object instanceof ReadableStream) { 52466 // Assert: object is neither disturbed nor locked. 52467 // istanbul ignore next 52468 assert(!util.isDisturbed(object), 'The body has already been consumed.') 52469 // istanbul ignore next 52470 assert(!object.locked, 'The stream is locked.') 52471 } 52472 52473 // 2. Return the results of extracting object. 52474 return extractBody(object, keepalive) 52475 } 52476 52477 function cloneBody (body) { 52478 // To clone a body body, run these steps: 52479 52480 // https://fetch.spec.whatwg.org/#concept-body-clone 52481 52482 // 1. Let « out1, out2 » be the result of teeing body’s stream. 52483 const [out1, out2] = body.stream.tee() 52484 const out2Clone = structuredClone(out2, { transfer: [out2] }) 52485 // This, for whatever reasons, unrefs out2Clone which allows 52486 // the process to exit by itself. 52487 const [, finalClone] = out2Clone.tee() 52488 52489 // 2. Set body’s stream to out1. 52490 body.stream = out1 52491 52492 // 3. Return a body whose stream is out2 and other members are copied from body. 52493 return { 52494 stream: finalClone, 52495 length: body.length, 52496 source: body.source 52497 } 52498 } 52499 52500 async function * consumeBody (body) { 52501 if (body) { 52502 if (isUint8Array(body)) { 52503 yield body 52504 } else { 52505 const stream = body.stream 52506 52507 if (util.isDisturbed(stream)) { 52508 throw new TypeError('The body has already been consumed.') 52509 } 52510 52511 if (stream.locked) { 52512 throw new TypeError('The stream is locked.') 52513 } 52514 52515 // Compat. 52516 stream[kBodyUsed] = true 52517 52518 yield * stream 52519 } 52520 } 52521 } 52522 52523 function throwIfAborted (state) { 52524 if (state.aborted) { 52525 throw new DOMException('The operation was aborted.', 'AbortError') 52526 } 52527 } 52528 52529 function bodyMixinMethods (instance) { 52530 const methods = { 52531 blob () { 52532 // The blob() method steps are to return the result of 52533 // running consume body with this and the following step 52534 // given a byte sequence bytes: return a Blob whose 52535 // contents are bytes and whose type attribute is this’s 52536 // MIME type. 52537 return specConsumeBody(this, (bytes) => { 52538 let mimeType = bodyMimeType(this) 52539 52540 if (mimeType === 'failure') { 52541 mimeType = '' 52542 } else if (mimeType) { 52543 mimeType = serializeAMimeType(mimeType) 52544 } 52545 52546 // Return a Blob whose contents are bytes and type attribute 52547 // is mimeType. 52548 return new Blob([bytes], { type: mimeType }) 52549 }, instance) 52550 }, 52551 52552 arrayBuffer () { 52553 // The arrayBuffer() method steps are to return the result 52554 // of running consume body with this and the following step 52555 // given a byte sequence bytes: return a new ArrayBuffer 52556 // whose contents are bytes. 52557 return specConsumeBody(this, (bytes) => { 52558 return new Uint8Array(bytes).buffer 52559 }, instance) 52560 }, 52561 52562 text () { 52563 // The text() method steps are to return the result of running 52564 // consume body with this and UTF-8 decode. 52565 return specConsumeBody(this, utf8DecodeBytes, instance) 52566 }, 52567 52568 json () { 52569 // The json() method steps are to return the result of running 52570 // consume body with this and parse JSON from bytes. 52571 return specConsumeBody(this, parseJSONFromBytes, instance) 52572 }, 52573 52574 async formData () { 52575 webidl.brandCheck(this, instance) 52576 52577 throwIfAborted(this[kState]) 52578 52579 const contentType = this.headers.get('Content-Type') 52580 52581 // If mimeType’s essence is "multipart/form-data", then: 52582 if (/multipart\/form-data/.test(contentType)) { 52583 const headers = {} 52584 for (const [key, value] of this.headers) headers[key.toLowerCase()] = value 52585 52586 const responseFormData = new FormData() 52587 52588 let busboy 52589 52590 try { 52591 busboy = new Busboy({ 52592 headers, 52593 preservePath: true 52594 }) 52595 } catch (err) { 52596 throw new DOMException(`${err}`, 'AbortError') 52597 } 52598 52599 busboy.on('field', (name, value) => { 52600 responseFormData.append(name, value) 52601 }) 52602 busboy.on('file', (name, value, filename, encoding, mimeType) => { 52603 const chunks = [] 52604 52605 if (encoding === 'base64' || encoding.toLowerCase() === 'base64') { 52606 let base64chunk = '' 52607 52608 value.on('data', (chunk) => { 52609 base64chunk += chunk.toString().replace(/[\r\n]/gm, '') 52610 52611 const end = base64chunk.length - base64chunk.length % 4 52612 chunks.push(Buffer.from(base64chunk.slice(0, end), 'base64')) 52613 52614 base64chunk = base64chunk.slice(end) 52615 }) 52616 value.on('end', () => { 52617 chunks.push(Buffer.from(base64chunk, 'base64')) 52618 responseFormData.append(name, new File(chunks, filename, { type: mimeType })) 52619 }) 52620 } else { 52621 value.on('data', (chunk) => { 52622 chunks.push(chunk) 52623 }) 52624 value.on('end', () => { 52625 responseFormData.append(name, new File(chunks, filename, { type: mimeType })) 52626 }) 52627 } 52628 }) 52629 52630 const busboyResolve = new Promise((resolve, reject) => { 52631 busboy.on('finish', resolve) 52632 busboy.on('error', (err) => reject(new TypeError(err))) 52633 }) 52634 52635 if (this.body !== null) for await (const chunk of consumeBody(this[kState].body)) busboy.write(chunk) 52636 busboy.end() 52637 await busboyResolve 52638 52639 return responseFormData 52640 } else if (/application\/x-www-form-urlencoded/.test(contentType)) { 52641 // Otherwise, if mimeType’s essence is "application/x-www-form-urlencoded", then: 52642 52643 // 1. Let entries be the result of parsing bytes. 52644 let entries 52645 try { 52646 let text = '' 52647 // application/x-www-form-urlencoded parser will keep the BOM. 52648 // https://url.spec.whatwg.org/#concept-urlencoded-parser 52649 // Note that streaming decoder is stateful and cannot be reused 52650 const streamingDecoder = new TextDecoder('utf-8', { ignoreBOM: true }) 52651 52652 for await (const chunk of consumeBody(this[kState].body)) { 52653 if (!isUint8Array(chunk)) { 52654 throw new TypeError('Expected Uint8Array chunk') 52655 } 52656 text += streamingDecoder.decode(chunk, { stream: true }) 52657 } 52658 text += streamingDecoder.decode() 52659 entries = new URLSearchParams(text) 52660 } catch (err) { 52661 // istanbul ignore next: Unclear when new URLSearchParams can fail on a string. 52662 // 2. If entries is failure, then throw a TypeError. 52663 throw Object.assign(new TypeError(), { cause: err }) 52664 } 52665 52666 // 3. Return a new FormData object whose entries are entries. 52667 const formData = new FormData() 52668 for (const [name, value] of entries) { 52669 formData.append(name, value) 52670 } 52671 return formData 52672 } else { 52673 // Wait a tick before checking if the request has been aborted. 52674 // Otherwise, a TypeError can be thrown when an AbortError should. 52675 await Promise.resolve() 52676 52677 throwIfAborted(this[kState]) 52678 52679 // Otherwise, throw a TypeError. 52680 throw webidl.errors.exception({ 52681 header: `${instance.name}.formData`, 52682 message: 'Could not parse content as FormData.' 52683 }) 52684 } 52685 } 52686 } 52687 52688 return methods 52689 } 52690 52691 function mixinBody (prototype) { 52692 Object.assign(prototype.prototype, bodyMixinMethods(prototype)) 52693 } 52694 52695 /** 52696 * @see https://fetch.spec.whatwg.org/#concept-body-consume-body 52697 * @param {Response|Request} object 52698 * @param {(value: unknown) => unknown} convertBytesToJSValue 52699 * @param {Response|Request} instance 52700 */ 52701 async function specConsumeBody (object, convertBytesToJSValue, instance) { 52702 webidl.brandCheck(object, instance) 52703 52704 throwIfAborted(object[kState]) 52705 52706 // 1. If object is unusable, then return a promise rejected 52707 // with a TypeError. 52708 if (bodyUnusable(object[kState].body)) { 52709 throw new TypeError('Body is unusable') 52710 } 52711 52712 // 2. Let promise be a new promise. 52713 const promise = createDeferredPromise() 52714 52715 // 3. Let errorSteps given error be to reject promise with error. 52716 const errorSteps = (error) => promise.reject(error) 52717 52718 // 4. Let successSteps given a byte sequence data be to resolve 52719 // promise with the result of running convertBytesToJSValue 52720 // with data. If that threw an exception, then run errorSteps 52721 // with that exception. 52722 const successSteps = (data) => { 52723 try { 52724 promise.resolve(convertBytesToJSValue(data)) 52725 } catch (e) { 52726 errorSteps(e) 52727 } 52728 } 52729 52730 // 5. If object’s body is null, then run successSteps with an 52731 // empty byte sequence. 52732 if (object[kState].body == null) { 52733 successSteps(new Uint8Array()) 52734 return promise.promise 52735 } 52736 52737 // 6. Otherwise, fully read object’s body given successSteps, 52738 // errorSteps, and object’s relevant global object. 52739 await fullyReadBody(object[kState].body, successSteps, errorSteps) 52740 52741 // 7. Return promise. 52742 return promise.promise 52743 } 52744 52745 // https://fetch.spec.whatwg.org/#body-unusable 52746 function bodyUnusable (body) { 52747 // An object including the Body interface mixin is 52748 // said to be unusable if its body is non-null and 52749 // its body’s stream is disturbed or locked. 52750 return body != null && (body.stream.locked || util.isDisturbed(body.stream)) 52751 } 52752 52753 /** 52754 * @see https://encoding.spec.whatwg.org/#utf-8-decode 52755 * @param {Buffer} buffer 52756 */ 52757 function utf8DecodeBytes (buffer) { 52758 if (buffer.length === 0) { 52759 return '' 52760 } 52761 52762 // 1. Let buffer be the result of peeking three bytes from 52763 // ioQueue, converted to a byte sequence. 52764 52765 // 2. If buffer is 0xEF 0xBB 0xBF, then read three 52766 // bytes from ioQueue. (Do nothing with those bytes.) 52767 if (buffer[0] === 0xEF && buffer[1] === 0xBB && buffer[2] === 0xBF) { 52768 buffer = buffer.subarray(3) 52769 } 52770 52771 // 3. Process a queue with an instance of UTF-8’s 52772 // decoder, ioQueue, output, and "replacement". 52773 const output = textDecoder.decode(buffer) 52774 52775 // 4. Return output. 52776 return output 52777 } 52778 52779 /** 52780 * @see https://infra.spec.whatwg.org/#parse-json-bytes-to-a-javascript-value 52781 * @param {Uint8Array} bytes 52782 */ 52783 function parseJSONFromBytes (bytes) { 52784 return JSON.parse(utf8DecodeBytes(bytes)) 52785 } 52786 52787 /** 52788 * @see https://fetch.spec.whatwg.org/#concept-body-mime-type 52789 * @param {import('./response').Response|import('./request').Request} object 52790 */ 52791 function bodyMimeType (object) { 52792 const { headersList } = object[kState] 52793 const contentType = headersList.get('content-type') 52794 52795 if (contentType === null) { 52796 return 'failure' 52797 } 52798 52799 return parseMIMEType(contentType) 52800 } 52801 52802 module.exports = { 52803 extractBody, 52804 safelyExtractBody, 52805 cloneBody, 52806 mixinBody 52807 } 52808 52809 52810 /***/ }), 52811 52812 /***/ 41037: 52813 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 52814 52815 "use strict"; 52816 52817 52818 const { MessageChannel, receiveMessageOnPort } = __nccwpck_require__(71267) 52819 52820 const corsSafeListedMethods = ['GET', 'HEAD', 'POST'] 52821 const corsSafeListedMethodsSet = new Set(corsSafeListedMethods) 52822 52823 const nullBodyStatus = [101, 204, 205, 304] 52824 52825 const redirectStatus = [301, 302, 303, 307, 308] 52826 const redirectStatusSet = new Set(redirectStatus) 52827 52828 // https://fetch.spec.whatwg.org/#block-bad-port 52829 const badPorts = [ 52830 '1', '7', '9', '11', '13', '15', '17', '19', '20', '21', '22', '23', '25', '37', '42', '43', '53', '69', '77', '79', 52831 '87', '95', '101', '102', '103', '104', '109', '110', '111', '113', '115', '117', '119', '123', '135', '137', 52832 '139', '143', '161', '179', '389', '427', '465', '512', '513', '514', '515', '526', '530', '531', '532', 52833 '540', '548', '554', '556', '563', '587', '601', '636', '989', '990', '993', '995', '1719', '1720', '1723', 52834 '2049', '3659', '4045', '5060', '5061', '6000', '6566', '6665', '6666', '6667', '6668', '6669', '6697', 52835 '10080' 52836 ] 52837 52838 const badPortsSet = new Set(badPorts) 52839 52840 // https://w3c.github.io/webappsec-referrer-policy/#referrer-policies 52841 const referrerPolicy = [ 52842 '', 52843 'no-referrer', 52844 'no-referrer-when-downgrade', 52845 'same-origin', 52846 'origin', 52847 'strict-origin', 52848 'origin-when-cross-origin', 52849 'strict-origin-when-cross-origin', 52850 'unsafe-url' 52851 ] 52852 const referrerPolicySet = new Set(referrerPolicy) 52853 52854 const requestRedirect = ['follow', 'manual', 'error'] 52855 52856 const safeMethods = ['GET', 'HEAD', 'OPTIONS', 'TRACE'] 52857 const safeMethodsSet = new Set(safeMethods) 52858 52859 const requestMode = ['navigate', 'same-origin', 'no-cors', 'cors'] 52860 52861 const requestCredentials = ['omit', 'same-origin', 'include'] 52862 52863 const requestCache = [ 52864 'default', 52865 'no-store', 52866 'reload', 52867 'no-cache', 52868 'force-cache', 52869 'only-if-cached' 52870 ] 52871 52872 // https://fetch.spec.whatwg.org/#request-body-header-name 52873 const requestBodyHeader = [ 52874 'content-encoding', 52875 'content-language', 52876 'content-location', 52877 'content-type', 52878 // See https://github.com/nodejs/undici/issues/2021 52879 // 'Content-Length' is a forbidden header name, which is typically 52880 // removed in the Headers implementation. However, undici doesn't 52881 // filter out headers, so we add it here. 52882 'content-length' 52883 ] 52884 52885 // https://fetch.spec.whatwg.org/#enumdef-requestduplex 52886 const requestDuplex = [ 52887 'half' 52888 ] 52889 52890 // http://fetch.spec.whatwg.org/#forbidden-method 52891 const forbiddenMethods = ['CONNECT', 'TRACE', 'TRACK'] 52892 const forbiddenMethodsSet = new Set(forbiddenMethods) 52893 52894 const subresource = [ 52895 'audio', 52896 'audioworklet', 52897 'font', 52898 'image', 52899 'manifest', 52900 'paintworklet', 52901 'script', 52902 'style', 52903 'track', 52904 'video', 52905 'xslt', 52906 '' 52907 ] 52908 const subresourceSet = new Set(subresource) 52909 52910 /** @type {globalThis['DOMException']} */ 52911 const DOMException = globalThis.DOMException ?? (() => { 52912 // DOMException was only made a global in Node v17.0.0, 52913 // but fetch supports >= v16.8. 52914 try { 52915 atob('~') 52916 } catch (err) { 52917 return Object.getPrototypeOf(err).constructor 52918 } 52919 })() 52920 52921 let channel 52922 52923 /** @type {globalThis['structuredClone']} */ 52924 const structuredClone = 52925 globalThis.structuredClone ?? 52926 // https://github.com/nodejs/node/blob/b27ae24dcc4251bad726d9d84baf678d1f707fed/lib/internal/structured_clone.js 52927 // structuredClone was added in v17.0.0, but fetch supports v16.8 52928 function structuredClone (value, options = undefined) { 52929 if (arguments.length === 0) { 52930 throw new TypeError('missing argument') 52931 } 52932 52933 if (!channel) { 52934 channel = new MessageChannel() 52935 } 52936 channel.port1.unref() 52937 channel.port2.unref() 52938 channel.port1.postMessage(value, options?.transfer) 52939 return receiveMessageOnPort(channel.port2).message 52940 } 52941 52942 module.exports = { 52943 DOMException, 52944 structuredClone, 52945 subresource, 52946 forbiddenMethods, 52947 requestBodyHeader, 52948 referrerPolicy, 52949 requestRedirect, 52950 requestMode, 52951 requestCredentials, 52952 requestCache, 52953 redirectStatus, 52954 corsSafeListedMethods, 52955 nullBodyStatus, 52956 safeMethods, 52957 badPorts, 52958 requestDuplex, 52959 subresourceSet, 52960 badPortsSet, 52961 redirectStatusSet, 52962 corsSafeListedMethodsSet, 52963 safeMethodsSet, 52964 forbiddenMethodsSet, 52965 referrerPolicySet 52966 } 52967 52968 52969 /***/ }), 52970 52971 /***/ 685: 52972 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 52973 52974 const assert = __nccwpck_require__(39491) 52975 const { atob } = __nccwpck_require__(14300) 52976 const { isomorphicDecode } = __nccwpck_require__(52538) 52977 52978 const encoder = new TextEncoder() 52979 52980 /** 52981 * @see https://mimesniff.spec.whatwg.org/#http-token-code-point 52982 */ 52983 const HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+-.^_|~A-Za-z0-9]+$/ 52984 const HTTP_WHITESPACE_REGEX = /(\u000A|\u000D|\u0009|\u0020)/ // eslint-disable-line 52985 /** 52986 * @see https://mimesniff.spec.whatwg.org/#http-quoted-string-token-code-point 52987 */ 52988 const HTTP_QUOTED_STRING_TOKENS = /[\u0009|\u0020-\u007E|\u0080-\u00FF]/ // eslint-disable-line 52989 52990 // https://fetch.spec.whatwg.org/#data-url-processor 52991 /** @param {URL} dataURL */ 52992 function dataURLProcessor (dataURL) { 52993 // 1. Assert: dataURL’s scheme is "data". 52994 assert(dataURL.protocol === 'data:') 52995 52996 // 2. Let input be the result of running the URL 52997 // serializer on dataURL with exclude fragment 52998 // set to true. 52999 let input = URLSerializer(dataURL, true) 53000 53001 // 3. Remove the leading "data:" string from input. 53002 input = input.slice(5) 53003 53004 // 4. Let position point at the start of input. 53005 const position = { position: 0 } 53006 53007 // 5. Let mimeType be the result of collecting a 53008 // sequence of code points that are not equal 53009 // to U+002C (,), given position. 53010 let mimeType = collectASequenceOfCodePointsFast( 53011 ',', 53012 input, 53013 position 53014 ) 53015 53016 // 6. Strip leading and trailing ASCII whitespace 53017 // from mimeType. 53018 // Undici implementation note: we need to store the 53019 // length because if the mimetype has spaces removed, 53020 // the wrong amount will be sliced from the input in 53021 // step #9 53022 const mimeTypeLength = mimeType.length 53023 mimeType = removeASCIIWhitespace(mimeType, true, true) 53024 53025 // 7. If position is past the end of input, then 53026 // return failure 53027 if (position.position >= input.length) { 53028 return 'failure' 53029 } 53030 53031 // 8. Advance position by 1. 53032 position.position++ 53033 53034 // 9. Let encodedBody be the remainder of input. 53035 const encodedBody = input.slice(mimeTypeLength + 1) 53036 53037 // 10. Let body be the percent-decoding of encodedBody. 53038 let body = stringPercentDecode(encodedBody) 53039 53040 // 11. If mimeType ends with U+003B (;), followed by 53041 // zero or more U+0020 SPACE, followed by an ASCII 53042 // case-insensitive match for "base64", then: 53043 if (/;(\u0020){0,}base64$/i.test(mimeType)) { 53044 // 1. Let stringBody be the isomorphic decode of body. 53045 const stringBody = isomorphicDecode(body) 53046 53047 // 2. Set body to the forgiving-base64 decode of 53048 // stringBody. 53049 body = forgivingBase64(stringBody) 53050 53051 // 3. If body is failure, then return failure. 53052 if (body === 'failure') { 53053 return 'failure' 53054 } 53055 53056 // 4. Remove the last 6 code points from mimeType. 53057 mimeType = mimeType.slice(0, -6) 53058 53059 // 5. Remove trailing U+0020 SPACE code points from mimeType, 53060 // if any. 53061 mimeType = mimeType.replace(/(\u0020)+$/, '') 53062 53063 // 6. Remove the last U+003B (;) code point from mimeType. 53064 mimeType = mimeType.slice(0, -1) 53065 } 53066 53067 // 12. If mimeType starts with U+003B (;), then prepend 53068 // "text/plain" to mimeType. 53069 if (mimeType.startsWith(';')) { 53070 mimeType = 'text/plain' + mimeType 53071 } 53072 53073 // 13. Let mimeTypeRecord be the result of parsing 53074 // mimeType. 53075 let mimeTypeRecord = parseMIMEType(mimeType) 53076 53077 // 14. If mimeTypeRecord is failure, then set 53078 // mimeTypeRecord to text/plain;charset=US-ASCII. 53079 if (mimeTypeRecord === 'failure') { 53080 mimeTypeRecord = parseMIMEType('text/plain;charset=US-ASCII') 53081 } 53082 53083 // 15. Return a new data: URL struct whose MIME 53084 // type is mimeTypeRecord and body is body. 53085 // https://fetch.spec.whatwg.org/#data-url-struct 53086 return { mimeType: mimeTypeRecord, body } 53087 } 53088 53089 // https://url.spec.whatwg.org/#concept-url-serializer 53090 /** 53091 * @param {URL} url 53092 * @param {boolean} excludeFragment 53093 */ 53094 function URLSerializer (url, excludeFragment = false) { 53095 if (!excludeFragment) { 53096 return url.href 53097 } 53098 53099 const href = url.href 53100 const hashLength = url.hash.length 53101 53102 return hashLength === 0 ? href : href.substring(0, href.length - hashLength) 53103 } 53104 53105 // https://infra.spec.whatwg.org/#collect-a-sequence-of-code-points 53106 /** 53107 * @param {(char: string) => boolean} condition 53108 * @param {string} input 53109 * @param {{ position: number }} position 53110 */ 53111 function collectASequenceOfCodePoints (condition, input, position) { 53112 // 1. Let result be the empty string. 53113 let result = '' 53114 53115 // 2. While position doesn’t point past the end of input and the 53116 // code point at position within input meets the condition condition: 53117 while (position.position < input.length && condition(input[position.position])) { 53118 // 1. Append that code point to the end of result. 53119 result += input[position.position] 53120 53121 // 2. Advance position by 1. 53122 position.position++ 53123 } 53124 53125 // 3. Return result. 53126 return result 53127 } 53128 53129 /** 53130 * A faster collectASequenceOfCodePoints that only works when comparing a single character. 53131 * @param {string} char 53132 * @param {string} input 53133 * @param {{ position: number }} position 53134 */ 53135 function collectASequenceOfCodePointsFast (char, input, position) { 53136 const idx = input.indexOf(char, position.position) 53137 const start = position.position 53138 53139 if (idx === -1) { 53140 position.position = input.length 53141 return input.slice(start) 53142 } 53143 53144 position.position = idx 53145 return input.slice(start, position.position) 53146 } 53147 53148 // https://url.spec.whatwg.org/#string-percent-decode 53149 /** @param {string} input */ 53150 function stringPercentDecode (input) { 53151 // 1. Let bytes be the UTF-8 encoding of input. 53152 const bytes = encoder.encode(input) 53153 53154 // 2. Return the percent-decoding of bytes. 53155 return percentDecode(bytes) 53156 } 53157 53158 // https://url.spec.whatwg.org/#percent-decode 53159 /** @param {Uint8Array} input */ 53160 function percentDecode (input) { 53161 // 1. Let output be an empty byte sequence. 53162 /** @type {number[]} */ 53163 const output = [] 53164 53165 // 2. For each byte byte in input: 53166 for (let i = 0; i < input.length; i++) { 53167 const byte = input[i] 53168 53169 // 1. If byte is not 0x25 (%), then append byte to output. 53170 if (byte !== 0x25) { 53171 output.push(byte) 53172 53173 // 2. Otherwise, if byte is 0x25 (%) and the next two bytes 53174 // after byte in input are not in the ranges 53175 // 0x30 (0) to 0x39 (9), 0x41 (A) to 0x46 (F), 53176 // and 0x61 (a) to 0x66 (f), all inclusive, append byte 53177 // to output. 53178 } else if ( 53179 byte === 0x25 && 53180 !/^[0-9A-Fa-f]{2}$/i.test(String.fromCharCode(input[i + 1], input[i + 2])) 53181 ) { 53182 output.push(0x25) 53183 53184 // 3. Otherwise: 53185 } else { 53186 // 1. Let bytePoint be the two bytes after byte in input, 53187 // decoded, and then interpreted as hexadecimal number. 53188 const nextTwoBytes = String.fromCharCode(input[i + 1], input[i + 2]) 53189 const bytePoint = Number.parseInt(nextTwoBytes, 16) 53190 53191 // 2. Append a byte whose value is bytePoint to output. 53192 output.push(bytePoint) 53193 53194 // 3. Skip the next two bytes in input. 53195 i += 2 53196 } 53197 } 53198 53199 // 3. Return output. 53200 return Uint8Array.from(output) 53201 } 53202 53203 // https://mimesniff.spec.whatwg.org/#parse-a-mime-type 53204 /** @param {string} input */ 53205 function parseMIMEType (input) { 53206 // 1. Remove any leading and trailing HTTP whitespace 53207 // from input. 53208 input = removeHTTPWhitespace(input, true, true) 53209 53210 // 2. Let position be a position variable for input, 53211 // initially pointing at the start of input. 53212 const position = { position: 0 } 53213 53214 // 3. Let type be the result of collecting a sequence 53215 // of code points that are not U+002F (/) from 53216 // input, given position. 53217 const type = collectASequenceOfCodePointsFast( 53218 '/', 53219 input, 53220 position 53221 ) 53222 53223 // 4. If type is the empty string or does not solely 53224 // contain HTTP token code points, then return failure. 53225 // https://mimesniff.spec.whatwg.org/#http-token-code-point 53226 if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) { 53227 return 'failure' 53228 } 53229 53230 // 5. If position is past the end of input, then return 53231 // failure 53232 if (position.position > input.length) { 53233 return 'failure' 53234 } 53235 53236 // 6. Advance position by 1. (This skips past U+002F (/).) 53237 position.position++ 53238 53239 // 7. Let subtype be the result of collecting a sequence of 53240 // code points that are not U+003B (;) from input, given 53241 // position. 53242 let subtype = collectASequenceOfCodePointsFast( 53243 ';', 53244 input, 53245 position 53246 ) 53247 53248 // 8. Remove any trailing HTTP whitespace from subtype. 53249 subtype = removeHTTPWhitespace(subtype, false, true) 53250 53251 // 9. If subtype is the empty string or does not solely 53252 // contain HTTP token code points, then return failure. 53253 if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) { 53254 return 'failure' 53255 } 53256 53257 const typeLowercase = type.toLowerCase() 53258 const subtypeLowercase = subtype.toLowerCase() 53259 53260 // 10. Let mimeType be a new MIME type record whose type 53261 // is type, in ASCII lowercase, and subtype is subtype, 53262 // in ASCII lowercase. 53263 // https://mimesniff.spec.whatwg.org/#mime-type 53264 const mimeType = { 53265 type: typeLowercase, 53266 subtype: subtypeLowercase, 53267 /** @type {Map<string, string>} */ 53268 parameters: new Map(), 53269 // https://mimesniff.spec.whatwg.org/#mime-type-essence 53270 essence: `${typeLowercase}/${subtypeLowercase}` 53271 } 53272 53273 // 11. While position is not past the end of input: 53274 while (position.position < input.length) { 53275 // 1. Advance position by 1. (This skips past U+003B (;).) 53276 position.position++ 53277 53278 // 2. Collect a sequence of code points that are HTTP 53279 // whitespace from input given position. 53280 collectASequenceOfCodePoints( 53281 // https://fetch.spec.whatwg.org/#http-whitespace 53282 char => HTTP_WHITESPACE_REGEX.test(char), 53283 input, 53284 position 53285 ) 53286 53287 // 3. Let parameterName be the result of collecting a 53288 // sequence of code points that are not U+003B (;) 53289 // or U+003D (=) from input, given position. 53290 let parameterName = collectASequenceOfCodePoints( 53291 (char) => char !== ';' && char !== '=', 53292 input, 53293 position 53294 ) 53295 53296 // 4. Set parameterName to parameterName, in ASCII 53297 // lowercase. 53298 parameterName = parameterName.toLowerCase() 53299 53300 // 5. If position is not past the end of input, then: 53301 if (position.position < input.length) { 53302 // 1. If the code point at position within input is 53303 // U+003B (;), then continue. 53304 if (input[position.position] === ';') { 53305 continue 53306 } 53307 53308 // 2. Advance position by 1. (This skips past U+003D (=).) 53309 position.position++ 53310 } 53311 53312 // 6. If position is past the end of input, then break. 53313 if (position.position > input.length) { 53314 break 53315 } 53316 53317 // 7. Let parameterValue be null. 53318 let parameterValue = null 53319 53320 // 8. If the code point at position within input is 53321 // U+0022 ("), then: 53322 if (input[position.position] === '"') { 53323 // 1. Set parameterValue to the result of collecting 53324 // an HTTP quoted string from input, given position 53325 // and the extract-value flag. 53326 parameterValue = collectAnHTTPQuotedString(input, position, true) 53327 53328 // 2. Collect a sequence of code points that are not 53329 // U+003B (;) from input, given position. 53330 collectASequenceOfCodePointsFast( 53331 ';', 53332 input, 53333 position 53334 ) 53335 53336 // 9. Otherwise: 53337 } else { 53338 // 1. Set parameterValue to the result of collecting 53339 // a sequence of code points that are not U+003B (;) 53340 // from input, given position. 53341 parameterValue = collectASequenceOfCodePointsFast( 53342 ';', 53343 input, 53344 position 53345 ) 53346 53347 // 2. Remove any trailing HTTP whitespace from parameterValue. 53348 parameterValue = removeHTTPWhitespace(parameterValue, false, true) 53349 53350 // 3. If parameterValue is the empty string, then continue. 53351 if (parameterValue.length === 0) { 53352 continue 53353 } 53354 } 53355 53356 // 10. If all of the following are true 53357 // - parameterName is not the empty string 53358 // - parameterName solely contains HTTP token code points 53359 // - parameterValue solely contains HTTP quoted-string token code points 53360 // - mimeType’s parameters[parameterName] does not exist 53361 // then set mimeType’s parameters[parameterName] to parameterValue. 53362 if ( 53363 parameterName.length !== 0 && 53364 HTTP_TOKEN_CODEPOINTS.test(parameterName) && 53365 (parameterValue.length === 0 || HTTP_QUOTED_STRING_TOKENS.test(parameterValue)) && 53366 !mimeType.parameters.has(parameterName) 53367 ) { 53368 mimeType.parameters.set(parameterName, parameterValue) 53369 } 53370 } 53371 53372 // 12. Return mimeType. 53373 return mimeType 53374 } 53375 53376 // https://infra.spec.whatwg.org/#forgiving-base64-decode 53377 /** @param {string} data */ 53378 function forgivingBase64 (data) { 53379 // 1. Remove all ASCII whitespace from data. 53380 data = data.replace(/[\u0009\u000A\u000C\u000D\u0020]/g, '') // eslint-disable-line 53381 53382 // 2. If data’s code point length divides by 4 leaving 53383 // no remainder, then: 53384 if (data.length % 4 === 0) { 53385 // 1. If data ends with one or two U+003D (=) code points, 53386 // then remove them from data. 53387 data = data.replace(/=?=$/, '') 53388 } 53389 53390 // 3. If data’s code point length divides by 4 leaving 53391 // a remainder of 1, then return failure. 53392 if (data.length % 4 === 1) { 53393 return 'failure' 53394 } 53395 53396 // 4. If data contains a code point that is not one of 53397 // U+002B (+) 53398 // U+002F (/) 53399 // ASCII alphanumeric 53400 // then return failure. 53401 if (/[^+/0-9A-Za-z]/.test(data)) { 53402 return 'failure' 53403 } 53404 53405 const binary = atob(data) 53406 const bytes = new Uint8Array(binary.length) 53407 53408 for (let byte = 0; byte < binary.length; byte++) { 53409 bytes[byte] = binary.charCodeAt(byte) 53410 } 53411 53412 return bytes 53413 } 53414 53415 // https://fetch.spec.whatwg.org/#collect-an-http-quoted-string 53416 // tests: https://fetch.spec.whatwg.org/#example-http-quoted-string 53417 /** 53418 * @param {string} input 53419 * @param {{ position: number }} position 53420 * @param {boolean?} extractValue 53421 */ 53422 function collectAnHTTPQuotedString (input, position, extractValue) { 53423 // 1. Let positionStart be position. 53424 const positionStart = position.position 53425 53426 // 2. Let value be the empty string. 53427 let value = '' 53428 53429 // 3. Assert: the code point at position within input 53430 // is U+0022 ("). 53431 assert(input[position.position] === '"') 53432 53433 // 4. Advance position by 1. 53434 position.position++ 53435 53436 // 5. While true: 53437 while (true) { 53438 // 1. Append the result of collecting a sequence of code points 53439 // that are not U+0022 (") or U+005C (\) from input, given 53440 // position, to value. 53441 value += collectASequenceOfCodePoints( 53442 (char) => char !== '"' && char !== '\\', 53443 input, 53444 position 53445 ) 53446 53447 // 2. If position is past the end of input, then break. 53448 if (position.position >= input.length) { 53449 break 53450 } 53451 53452 // 3. Let quoteOrBackslash be the code point at position within 53453 // input. 53454 const quoteOrBackslash = input[position.position] 53455 53456 // 4. Advance position by 1. 53457 position.position++ 53458 53459 // 5. If quoteOrBackslash is U+005C (\), then: 53460 if (quoteOrBackslash === '\\') { 53461 // 1. If position is past the end of input, then append 53462 // U+005C (\) to value and break. 53463 if (position.position >= input.length) { 53464 value += '\\' 53465 break 53466 } 53467 53468 // 2. Append the code point at position within input to value. 53469 value += input[position.position] 53470 53471 // 3. Advance position by 1. 53472 position.position++ 53473 53474 // 6. Otherwise: 53475 } else { 53476 // 1. Assert: quoteOrBackslash is U+0022 ("). 53477 assert(quoteOrBackslash === '"') 53478 53479 // 2. Break. 53480 break 53481 } 53482 } 53483 53484 // 6. If the extract-value flag is set, then return value. 53485 if (extractValue) { 53486 return value 53487 } 53488 53489 // 7. Return the code points from positionStart to position, 53490 // inclusive, within input. 53491 return input.slice(positionStart, position.position) 53492 } 53493 53494 /** 53495 * @see https://mimesniff.spec.whatwg.org/#serialize-a-mime-type 53496 */ 53497 function serializeAMimeType (mimeType) { 53498 assert(mimeType !== 'failure') 53499 const { parameters, essence } = mimeType 53500 53501 // 1. Let serialization be the concatenation of mimeType’s 53502 // type, U+002F (/), and mimeType’s subtype. 53503 let serialization = essence 53504 53505 // 2. For each name → value of mimeType’s parameters: 53506 for (let [name, value] of parameters.entries()) { 53507 // 1. Append U+003B (;) to serialization. 53508 serialization += ';' 53509 53510 // 2. Append name to serialization. 53511 serialization += name 53512 53513 // 3. Append U+003D (=) to serialization. 53514 serialization += '=' 53515 53516 // 4. If value does not solely contain HTTP token code 53517 // points or value is the empty string, then: 53518 if (!HTTP_TOKEN_CODEPOINTS.test(value)) { 53519 // 1. Precede each occurence of U+0022 (") or 53520 // U+005C (\) in value with U+005C (\). 53521 value = value.replace(/(\\|")/g, '\\$1') 53522 53523 // 2. Prepend U+0022 (") to value. 53524 value = '"' + value 53525 53526 // 3. Append U+0022 (") to value. 53527 value += '"' 53528 } 53529 53530 // 5. Append value to serialization. 53531 serialization += value 53532 } 53533 53534 // 3. Return serialization. 53535 return serialization 53536 } 53537 53538 /** 53539 * @see https://fetch.spec.whatwg.org/#http-whitespace 53540 * @param {string} char 53541 */ 53542 function isHTTPWhiteSpace (char) { 53543 return char === '\r' || char === '\n' || char === '\t' || char === ' ' 53544 } 53545 53546 /** 53547 * @see https://fetch.spec.whatwg.org/#http-whitespace 53548 * @param {string} str 53549 */ 53550 function removeHTTPWhitespace (str, leading = true, trailing = true) { 53551 let lead = 0 53552 let trail = str.length - 1 53553 53554 if (leading) { 53555 for (; lead < str.length && isHTTPWhiteSpace(str[lead]); lead++); 53556 } 53557 53558 if (trailing) { 53559 for (; trail > 0 && isHTTPWhiteSpace(str[trail]); trail--); 53560 } 53561 53562 return str.slice(lead, trail + 1) 53563 } 53564 53565 /** 53566 * @see https://infra.spec.whatwg.org/#ascii-whitespace 53567 * @param {string} char 53568 */ 53569 function isASCIIWhitespace (char) { 53570 return char === '\r' || char === '\n' || char === '\t' || char === '\f' || char === ' ' 53571 } 53572 53573 /** 53574 * @see https://infra.spec.whatwg.org/#strip-leading-and-trailing-ascii-whitespace 53575 */ 53576 function removeASCIIWhitespace (str, leading = true, trailing = true) { 53577 let lead = 0 53578 let trail = str.length - 1 53579 53580 if (leading) { 53581 for (; lead < str.length && isASCIIWhitespace(str[lead]); lead++); 53582 } 53583 53584 if (trailing) { 53585 for (; trail > 0 && isASCIIWhitespace(str[trail]); trail--); 53586 } 53587 53588 return str.slice(lead, trail + 1) 53589 } 53590 53591 module.exports = { 53592 dataURLProcessor, 53593 URLSerializer, 53594 collectASequenceOfCodePoints, 53595 collectASequenceOfCodePointsFast, 53596 stringPercentDecode, 53597 parseMIMEType, 53598 collectAnHTTPQuotedString, 53599 serializeAMimeType 53600 } 53601 53602 53603 /***/ }), 53604 53605 /***/ 78511: 53606 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 53607 53608 "use strict"; 53609 53610 53611 const { Blob, File: NativeFile } = __nccwpck_require__(14300) 53612 const { types } = __nccwpck_require__(73837) 53613 const { kState } = __nccwpck_require__(15861) 53614 const { isBlobLike } = __nccwpck_require__(52538) 53615 const { webidl } = __nccwpck_require__(21744) 53616 const { parseMIMEType, serializeAMimeType } = __nccwpck_require__(685) 53617 const { kEnumerableProperty } = __nccwpck_require__(83983) 53618 const encoder = new TextEncoder() 53619 53620 class File extends Blob { 53621 constructor (fileBits, fileName, options = {}) { 53622 // The File constructor is invoked with two or three parameters, depending 53623 // on whether the optional dictionary parameter is used. When the File() 53624 // constructor is invoked, user agents must run the following steps: 53625 webidl.argumentLengthCheck(arguments, 2, { header: 'File constructor' }) 53626 53627 fileBits = webidl.converters['sequence<BlobPart>'](fileBits) 53628 fileName = webidl.converters.USVString(fileName) 53629 options = webidl.converters.FilePropertyBag(options) 53630 53631 // 1. Let bytes be the result of processing blob parts given fileBits and 53632 // options. 53633 // Note: Blob handles this for us 53634 53635 // 2. Let n be the fileName argument to the constructor. 53636 const n = fileName 53637 53638 // 3. Process FilePropertyBag dictionary argument by running the following 53639 // substeps: 53640 53641 // 1. If the type member is provided and is not the empty string, let t 53642 // be set to the type dictionary member. If t contains any characters 53643 // outside the range U+0020 to U+007E, then set t to the empty string 53644 // and return from these substeps. 53645 // 2. Convert every character in t to ASCII lowercase. 53646 let t = options.type 53647 let d 53648 53649 // eslint-disable-next-line no-labels 53650 substep: { 53651 if (t) { 53652 t = parseMIMEType(t) 53653 53654 if (t === 'failure') { 53655 t = '' 53656 // eslint-disable-next-line no-labels 53657 break substep 53658 } 53659 53660 t = serializeAMimeType(t).toLowerCase() 53661 } 53662 53663 // 3. If the lastModified member is provided, let d be set to the 53664 // lastModified dictionary member. If it is not provided, set d to the 53665 // current date and time represented as the number of milliseconds since 53666 // the Unix Epoch (which is the equivalent of Date.now() [ECMA-262]). 53667 d = options.lastModified 53668 } 53669 53670 // 4. Return a new File object F such that: 53671 // F refers to the bytes byte sequence. 53672 // F.size is set to the number of total bytes in bytes. 53673 // F.name is set to n. 53674 // F.type is set to t. 53675 // F.lastModified is set to d. 53676 53677 super(processBlobParts(fileBits, options), { type: t }) 53678 this[kState] = { 53679 name: n, 53680 lastModified: d, 53681 type: t 53682 } 53683 } 53684 53685 get name () { 53686 webidl.brandCheck(this, File) 53687 53688 return this[kState].name 53689 } 53690 53691 get lastModified () { 53692 webidl.brandCheck(this, File) 53693 53694 return this[kState].lastModified 53695 } 53696 53697 get type () { 53698 webidl.brandCheck(this, File) 53699 53700 return this[kState].type 53701 } 53702 } 53703 53704 class FileLike { 53705 constructor (blobLike, fileName, options = {}) { 53706 // TODO: argument idl type check 53707 53708 // The File constructor is invoked with two or three parameters, depending 53709 // on whether the optional dictionary parameter is used. When the File() 53710 // constructor is invoked, user agents must run the following steps: 53711 53712 // 1. Let bytes be the result of processing blob parts given fileBits and 53713 // options. 53714 53715 // 2. Let n be the fileName argument to the constructor. 53716 const n = fileName 53717 53718 // 3. Process FilePropertyBag dictionary argument by running the following 53719 // substeps: 53720 53721 // 1. If the type member is provided and is not the empty string, let t 53722 // be set to the type dictionary member. If t contains any characters 53723 // outside the range U+0020 to U+007E, then set t to the empty string 53724 // and return from these substeps. 53725 // TODO 53726 const t = options.type 53727 53728 // 2. Convert every character in t to ASCII lowercase. 53729 // TODO 53730 53731 // 3. If the lastModified member is provided, let d be set to the 53732 // lastModified dictionary member. If it is not provided, set d to the 53733 // current date and time represented as the number of milliseconds since 53734 // the Unix Epoch (which is the equivalent of Date.now() [ECMA-262]). 53735 const d = options.lastModified ?? Date.now() 53736 53737 // 4. Return a new File object F such that: 53738 // F refers to the bytes byte sequence. 53739 // F.size is set to the number of total bytes in bytes. 53740 // F.name is set to n. 53741 // F.type is set to t. 53742 // F.lastModified is set to d. 53743 53744 this[kState] = { 53745 blobLike, 53746 name: n, 53747 type: t, 53748 lastModified: d 53749 } 53750 } 53751 53752 stream (...args) { 53753 webidl.brandCheck(this, FileLike) 53754 53755 return this[kState].blobLike.stream(...args) 53756 } 53757 53758 arrayBuffer (...args) { 53759 webidl.brandCheck(this, FileLike) 53760 53761 return this[kState].blobLike.arrayBuffer(...args) 53762 } 53763 53764 slice (...args) { 53765 webidl.brandCheck(this, FileLike) 53766 53767 return this[kState].blobLike.slice(...args) 53768 } 53769 53770 text (...args) { 53771 webidl.brandCheck(this, FileLike) 53772 53773 return this[kState].blobLike.text(...args) 53774 } 53775 53776 get size () { 53777 webidl.brandCheck(this, FileLike) 53778 53779 return this[kState].blobLike.size 53780 } 53781 53782 get type () { 53783 webidl.brandCheck(this, FileLike) 53784 53785 return this[kState].blobLike.type 53786 } 53787 53788 get name () { 53789 webidl.brandCheck(this, FileLike) 53790 53791 return this[kState].name 53792 } 53793 53794 get lastModified () { 53795 webidl.brandCheck(this, FileLike) 53796 53797 return this[kState].lastModified 53798 } 53799 53800 get [Symbol.toStringTag] () { 53801 return 'File' 53802 } 53803 } 53804 53805 Object.defineProperties(File.prototype, { 53806 [Symbol.toStringTag]: { 53807 value: 'File', 53808 configurable: true 53809 }, 53810 name: kEnumerableProperty, 53811 lastModified: kEnumerableProperty 53812 }) 53813 53814 webidl.converters.Blob = webidl.interfaceConverter(Blob) 53815 53816 webidl.converters.BlobPart = function (V, opts) { 53817 if (webidl.util.Type(V) === 'Object') { 53818 if (isBlobLike(V)) { 53819 return webidl.converters.Blob(V, { strict: false }) 53820 } 53821 53822 if ( 53823 ArrayBuffer.isView(V) || 53824 types.isAnyArrayBuffer(V) 53825 ) { 53826 return webidl.converters.BufferSource(V, opts) 53827 } 53828 } 53829 53830 return webidl.converters.USVString(V, opts) 53831 } 53832 53833 webidl.converters['sequence<BlobPart>'] = webidl.sequenceConverter( 53834 webidl.converters.BlobPart 53835 ) 53836 53837 // https://www.w3.org/TR/FileAPI/#dfn-FilePropertyBag 53838 webidl.converters.FilePropertyBag = webidl.dictionaryConverter([ 53839 { 53840 key: 'lastModified', 53841 converter: webidl.converters['long long'], 53842 get defaultValue () { 53843 return Date.now() 53844 } 53845 }, 53846 { 53847 key: 'type', 53848 converter: webidl.converters.DOMString, 53849 defaultValue: '' 53850 }, 53851 { 53852 key: 'endings', 53853 converter: (value) => { 53854 value = webidl.converters.DOMString(value) 53855 value = value.toLowerCase() 53856 53857 if (value !== 'native') { 53858 value = 'transparent' 53859 } 53860 53861 return value 53862 }, 53863 defaultValue: 'transparent' 53864 } 53865 ]) 53866 53867 /** 53868 * @see https://www.w3.org/TR/FileAPI/#process-blob-parts 53869 * @param {(NodeJS.TypedArray|Blob|string)[]} parts 53870 * @param {{ type: string, endings: string }} options 53871 */ 53872 function processBlobParts (parts, options) { 53873 // 1. Let bytes be an empty sequence of bytes. 53874 /** @type {NodeJS.TypedArray[]} */ 53875 const bytes = [] 53876 53877 // 2. For each element in parts: 53878 for (const element of parts) { 53879 // 1. If element is a USVString, run the following substeps: 53880 if (typeof element === 'string') { 53881 // 1. Let s be element. 53882 let s = element 53883 53884 // 2. If the endings member of options is "native", set s 53885 // to the result of converting line endings to native 53886 // of element. 53887 if (options.endings === 'native') { 53888 s = convertLineEndingsNative(s) 53889 } 53890 53891 // 3. Append the result of UTF-8 encoding s to bytes. 53892 bytes.push(encoder.encode(s)) 53893 } else if ( 53894 types.isAnyArrayBuffer(element) || 53895 types.isTypedArray(element) 53896 ) { 53897 // 2. If element is a BufferSource, get a copy of the 53898 // bytes held by the buffer source, and append those 53899 // bytes to bytes. 53900 if (!element.buffer) { // ArrayBuffer 53901 bytes.push(new Uint8Array(element)) 53902 } else { 53903 bytes.push( 53904 new Uint8Array(element.buffer, element.byteOffset, element.byteLength) 53905 ) 53906 } 53907 } else if (isBlobLike(element)) { 53908 // 3. If element is a Blob, append the bytes it represents 53909 // to bytes. 53910 bytes.push(element) 53911 } 53912 } 53913 53914 // 3. Return bytes. 53915 return bytes 53916 } 53917 53918 /** 53919 * @see https://www.w3.org/TR/FileAPI/#convert-line-endings-to-native 53920 * @param {string} s 53921 */ 53922 function convertLineEndingsNative (s) { 53923 // 1. Let native line ending be be the code point U+000A LF. 53924 let nativeLineEnding = '\n' 53925 53926 // 2. If the underlying platform’s conventions are to 53927 // represent newlines as a carriage return and line feed 53928 // sequence, set native line ending to the code point 53929 // U+000D CR followed by the code point U+000A LF. 53930 if (process.platform === 'win32') { 53931 nativeLineEnding = '\r\n' 53932 } 53933 53934 return s.replace(/\r?\n/g, nativeLineEnding) 53935 } 53936 53937 // If this function is moved to ./util.js, some tools (such as 53938 // rollup) will warn about circular dependencies. See: 53939 // https://github.com/nodejs/undici/issues/1629 53940 function isFileLike (object) { 53941 return ( 53942 (NativeFile && object instanceof NativeFile) || 53943 object instanceof File || ( 53944 object && 53945 (typeof object.stream === 'function' || 53946 typeof object.arrayBuffer === 'function') && 53947 object[Symbol.toStringTag] === 'File' 53948 ) 53949 ) 53950 } 53951 53952 module.exports = { File, FileLike, isFileLike } 53953 53954 53955 /***/ }), 53956 53957 /***/ 72015: 53958 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 53959 53960 "use strict"; 53961 53962 53963 const { isBlobLike, toUSVString, makeIterator } = __nccwpck_require__(52538) 53964 const { kState } = __nccwpck_require__(15861) 53965 const { File: UndiciFile, FileLike, isFileLike } = __nccwpck_require__(78511) 53966 const { webidl } = __nccwpck_require__(21744) 53967 const { Blob, File: NativeFile } = __nccwpck_require__(14300) 53968 53969 /** @type {globalThis['File']} */ 53970 const File = NativeFile ?? UndiciFile 53971 53972 // https://xhr.spec.whatwg.org/#formdata 53973 class FormData { 53974 constructor (form) { 53975 if (form !== undefined) { 53976 throw webidl.errors.conversionFailed({ 53977 prefix: 'FormData constructor', 53978 argument: 'Argument 1', 53979 types: ['undefined'] 53980 }) 53981 } 53982 53983 this[kState] = [] 53984 } 53985 53986 append (name, value, filename = undefined) { 53987 webidl.brandCheck(this, FormData) 53988 53989 webidl.argumentLengthCheck(arguments, 2, { header: 'FormData.append' }) 53990 53991 if (arguments.length === 3 && !isBlobLike(value)) { 53992 throw new TypeError( 53993 "Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'" 53994 ) 53995 } 53996 53997 // 1. Let value be value if given; otherwise blobValue. 53998 53999 name = webidl.converters.USVString(name) 54000 value = isBlobLike(value) 54001 ? webidl.converters.Blob(value, { strict: false }) 54002 : webidl.converters.USVString(value) 54003 filename = arguments.length === 3 54004 ? webidl.converters.USVString(filename) 54005 : undefined 54006 54007 // 2. Let entry be the result of creating an entry with 54008 // name, value, and filename if given. 54009 const entry = makeEntry(name, value, filename) 54010 54011 // 3. Append entry to this’s entry list. 54012 this[kState].push(entry) 54013 } 54014 54015 delete (name) { 54016 webidl.brandCheck(this, FormData) 54017 54018 webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.delete' }) 54019 54020 name = webidl.converters.USVString(name) 54021 54022 // The delete(name) method steps are to remove all entries whose name 54023 // is name from this’s entry list. 54024 this[kState] = this[kState].filter(entry => entry.name !== name) 54025 } 54026 54027 get (name) { 54028 webidl.brandCheck(this, FormData) 54029 54030 webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.get' }) 54031 54032 name = webidl.converters.USVString(name) 54033 54034 // 1. If there is no entry whose name is name in this’s entry list, 54035 // then return null. 54036 const idx = this[kState].findIndex((entry) => entry.name === name) 54037 if (idx === -1) { 54038 return null 54039 } 54040 54041 // 2. Return the value of the first entry whose name is name from 54042 // this’s entry list. 54043 return this[kState][idx].value 54044 } 54045 54046 getAll (name) { 54047 webidl.brandCheck(this, FormData) 54048 54049 webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.getAll' }) 54050 54051 name = webidl.converters.USVString(name) 54052 54053 // 1. If there is no entry whose name is name in this’s entry list, 54054 // then return the empty list. 54055 // 2. Return the values of all entries whose name is name, in order, 54056 // from this’s entry list. 54057 return this[kState] 54058 .filter((entry) => entry.name === name) 54059 .map((entry) => entry.value) 54060 } 54061 54062 has (name) { 54063 webidl.brandCheck(this, FormData) 54064 54065 webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.has' }) 54066 54067 name = webidl.converters.USVString(name) 54068 54069 // The has(name) method steps are to return true if there is an entry 54070 // whose name is name in this’s entry list; otherwise false. 54071 return this[kState].findIndex((entry) => entry.name === name) !== -1 54072 } 54073 54074 set (name, value, filename = undefined) { 54075 webidl.brandCheck(this, FormData) 54076 54077 webidl.argumentLengthCheck(arguments, 2, { header: 'FormData.set' }) 54078 54079 if (arguments.length === 3 && !isBlobLike(value)) { 54080 throw new TypeError( 54081 "Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'" 54082 ) 54083 } 54084 54085 // The set(name, value) and set(name, blobValue, filename) method steps 54086 // are: 54087 54088 // 1. Let value be value if given; otherwise blobValue. 54089 54090 name = webidl.converters.USVString(name) 54091 value = isBlobLike(value) 54092 ? webidl.converters.Blob(value, { strict: false }) 54093 : webidl.converters.USVString(value) 54094 filename = arguments.length === 3 54095 ? toUSVString(filename) 54096 : undefined 54097 54098 // 2. Let entry be the result of creating an entry with name, value, and 54099 // filename if given. 54100 const entry = makeEntry(name, value, filename) 54101 54102 // 3. If there are entries in this’s entry list whose name is name, then 54103 // replace the first such entry with entry and remove the others. 54104 const idx = this[kState].findIndex((entry) => entry.name === name) 54105 if (idx !== -1) { 54106 this[kState] = [ 54107 ...this[kState].slice(0, idx), 54108 entry, 54109 ...this[kState].slice(idx + 1).filter((entry) => entry.name !== name) 54110 ] 54111 } else { 54112 // 4. Otherwise, append entry to this’s entry list. 54113 this[kState].push(entry) 54114 } 54115 } 54116 54117 entries () { 54118 webidl.brandCheck(this, FormData) 54119 54120 return makeIterator( 54121 () => this[kState].map(pair => [pair.name, pair.value]), 54122 'FormData', 54123 'key+value' 54124 ) 54125 } 54126 54127 keys () { 54128 webidl.brandCheck(this, FormData) 54129 54130 return makeIterator( 54131 () => this[kState].map(pair => [pair.name, pair.value]), 54132 'FormData', 54133 'key' 54134 ) 54135 } 54136 54137 values () { 54138 webidl.brandCheck(this, FormData) 54139 54140 return makeIterator( 54141 () => this[kState].map(pair => [pair.name, pair.value]), 54142 'FormData', 54143 'value' 54144 ) 54145 } 54146 54147 /** 54148 * @param {(value: string, key: string, self: FormData) => void} callbackFn 54149 * @param {unknown} thisArg 54150 */ 54151 forEach (callbackFn, thisArg = globalThis) { 54152 webidl.brandCheck(this, FormData) 54153 54154 webidl.argumentLengthCheck(arguments, 1, { header: 'FormData.forEach' }) 54155 54156 if (typeof callbackFn !== 'function') { 54157 throw new TypeError( 54158 "Failed to execute 'forEach' on 'FormData': parameter 1 is not of type 'Function'." 54159 ) 54160 } 54161 54162 for (const [key, value] of this) { 54163 callbackFn.apply(thisArg, [value, key, this]) 54164 } 54165 } 54166 } 54167 54168 FormData.prototype[Symbol.iterator] = FormData.prototype.entries 54169 54170 Object.defineProperties(FormData.prototype, { 54171 [Symbol.toStringTag]: { 54172 value: 'FormData', 54173 configurable: true 54174 } 54175 }) 54176 54177 /** 54178 * @see https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#create-an-entry 54179 * @param {string} name 54180 * @param {string|Blob} value 54181 * @param {?string} filename 54182 * @returns 54183 */ 54184 function makeEntry (name, value, filename) { 54185 // 1. Set name to the result of converting name into a scalar value string. 54186 // "To convert a string into a scalar value string, replace any surrogates 54187 // with U+FFFD." 54188 // see: https://nodejs.org/dist/latest-v18.x/docs/api/buffer.html#buftostringencoding-start-end 54189 name = Buffer.from(name).toString('utf8') 54190 54191 // 2. If value is a string, then set value to the result of converting 54192 // value into a scalar value string. 54193 if (typeof value === 'string') { 54194 value = Buffer.from(value).toString('utf8') 54195 } else { 54196 // 3. Otherwise: 54197 54198 // 1. If value is not a File object, then set value to a new File object, 54199 // representing the same bytes, whose name attribute value is "blob" 54200 if (!isFileLike(value)) { 54201 value = value instanceof Blob 54202 ? new File([value], 'blob', { type: value.type }) 54203 : new FileLike(value, 'blob', { type: value.type }) 54204 } 54205 54206 // 2. If filename is given, then set value to a new File object, 54207 // representing the same bytes, whose name attribute is filename. 54208 if (filename !== undefined) { 54209 /** @type {FilePropertyBag} */ 54210 const options = { 54211 type: value.type, 54212 lastModified: value.lastModified 54213 } 54214 54215 value = (NativeFile && value instanceof NativeFile) || value instanceof UndiciFile 54216 ? new File([value], filename, options) 54217 : new FileLike(value, filename, options) 54218 } 54219 } 54220 54221 // 4. Return an entry whose name is name and whose value is value. 54222 return { name, value } 54223 } 54224 54225 module.exports = { FormData } 54226 54227 54228 /***/ }), 54229 54230 /***/ 71246: 54231 /***/ ((module) => { 54232 54233 "use strict"; 54234 54235 54236 // In case of breaking changes, increase the version 54237 // number to avoid conflicts. 54238 const globalOrigin = Symbol.for('undici.globalOrigin.1') 54239 54240 function getGlobalOrigin () { 54241 return globalThis[globalOrigin] 54242 } 54243 54244 function setGlobalOrigin (newOrigin) { 54245 if (newOrigin === undefined) { 54246 Object.defineProperty(globalThis, globalOrigin, { 54247 value: undefined, 54248 writable: true, 54249 enumerable: false, 54250 configurable: false 54251 }) 54252 54253 return 54254 } 54255 54256 const parsedURL = new URL(newOrigin) 54257 54258 if (parsedURL.protocol !== 'http:' && parsedURL.protocol !== 'https:') { 54259 throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`) 54260 } 54261 54262 Object.defineProperty(globalThis, globalOrigin, { 54263 value: parsedURL, 54264 writable: true, 54265 enumerable: false, 54266 configurable: false 54267 }) 54268 } 54269 54270 module.exports = { 54271 getGlobalOrigin, 54272 setGlobalOrigin 54273 } 54274 54275 54276 /***/ }), 54277 54278 /***/ 10554: 54279 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 54280 54281 "use strict"; 54282 // https://github.com/Ethan-Arrowood/undici-fetch 54283 54284 54285 54286 const { kHeadersList, kConstruct } = __nccwpck_require__(72785) 54287 const { kGuard } = __nccwpck_require__(15861) 54288 const { kEnumerableProperty } = __nccwpck_require__(83983) 54289 const { 54290 makeIterator, 54291 isValidHeaderName, 54292 isValidHeaderValue 54293 } = __nccwpck_require__(52538) 54294 const { webidl } = __nccwpck_require__(21744) 54295 const assert = __nccwpck_require__(39491) 54296 54297 const kHeadersMap = Symbol('headers map') 54298 const kHeadersSortedMap = Symbol('headers map sorted') 54299 54300 /** 54301 * @param {number} code 54302 */ 54303 function isHTTPWhiteSpaceCharCode (code) { 54304 return code === 0x00a || code === 0x00d || code === 0x009 || code === 0x020 54305 } 54306 54307 /** 54308 * @see https://fetch.spec.whatwg.org/#concept-header-value-normalize 54309 * @param {string} potentialValue 54310 */ 54311 function headerValueNormalize (potentialValue) { 54312 // To normalize a byte sequence potentialValue, remove 54313 // any leading and trailing HTTP whitespace bytes from 54314 // potentialValue. 54315 let i = 0; let j = potentialValue.length 54316 54317 while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(j - 1))) --j 54318 while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(i))) ++i 54319 54320 return i === 0 && j === potentialValue.length ? potentialValue : potentialValue.substring(i, j) 54321 } 54322 54323 function fill (headers, object) { 54324 // To fill a Headers object headers with a given object object, run these steps: 54325 54326 // 1. If object is a sequence, then for each header in object: 54327 // Note: webidl conversion to array has already been done. 54328 if (Array.isArray(object)) { 54329 for (let i = 0; i < object.length; ++i) { 54330 const header = object[i] 54331 // 1. If header does not contain exactly two items, then throw a TypeError. 54332 if (header.length !== 2) { 54333 throw webidl.errors.exception({ 54334 header: 'Headers constructor', 54335 message: `expected name/value pair to be length 2, found ${header.length}.` 54336 }) 54337 } 54338 54339 // 2. Append (header’s first item, header’s second item) to headers. 54340 appendHeader(headers, header[0], header[1]) 54341 } 54342 } else if (typeof object === 'object' && object !== null) { 54343 // Note: null should throw 54344 54345 // 2. Otherwise, object is a record, then for each key → value in object, 54346 // append (key, value) to headers 54347 const keys = Object.keys(object) 54348 for (let i = 0; i < keys.length; ++i) { 54349 appendHeader(headers, keys[i], object[keys[i]]) 54350 } 54351 } else { 54352 throw webidl.errors.conversionFailed({ 54353 prefix: 'Headers constructor', 54354 argument: 'Argument 1', 54355 types: ['sequence<sequence<ByteString>>', 'record<ByteString, ByteString>'] 54356 }) 54357 } 54358 } 54359 54360 /** 54361 * @see https://fetch.spec.whatwg.org/#concept-headers-append 54362 */ 54363 function appendHeader (headers, name, value) { 54364 // 1. Normalize value. 54365 value = headerValueNormalize(value) 54366 54367 // 2. If name is not a header name or value is not a 54368 // header value, then throw a TypeError. 54369 if (!isValidHeaderName(name)) { 54370 throw webidl.errors.invalidArgument({ 54371 prefix: 'Headers.append', 54372 value: name, 54373 type: 'header name' 54374 }) 54375 } else if (!isValidHeaderValue(value)) { 54376 throw webidl.errors.invalidArgument({ 54377 prefix: 'Headers.append', 54378 value, 54379 type: 'header value' 54380 }) 54381 } 54382 54383 // 3. If headers’s guard is "immutable", then throw a TypeError. 54384 // 4. Otherwise, if headers’s guard is "request" and name is a 54385 // forbidden header name, return. 54386 // Note: undici does not implement forbidden header names 54387 if (headers[kGuard] === 'immutable') { 54388 throw new TypeError('immutable') 54389 } else if (headers[kGuard] === 'request-no-cors') { 54390 // 5. Otherwise, if headers’s guard is "request-no-cors": 54391 // TODO 54392 } 54393 54394 // 6. Otherwise, if headers’s guard is "response" and name is a 54395 // forbidden response-header name, return. 54396 54397 // 7. Append (name, value) to headers’s header list. 54398 return headers[kHeadersList].append(name, value) 54399 54400 // 8. If headers’s guard is "request-no-cors", then remove 54401 // privileged no-CORS request headers from headers 54402 } 54403 54404 class HeadersList { 54405 /** @type {[string, string][]|null} */ 54406 cookies = null 54407 54408 constructor (init) { 54409 if (init instanceof HeadersList) { 54410 this[kHeadersMap] = new Map(init[kHeadersMap]) 54411 this[kHeadersSortedMap] = init[kHeadersSortedMap] 54412 this.cookies = init.cookies === null ? null : [...init.cookies] 54413 } else { 54414 this[kHeadersMap] = new Map(init) 54415 this[kHeadersSortedMap] = null 54416 } 54417 } 54418 54419 // https://fetch.spec.whatwg.org/#header-list-contains 54420 contains (name) { 54421 // A header list list contains a header name name if list 54422 // contains a header whose name is a byte-case-insensitive 54423 // match for name. 54424 name = name.toLowerCase() 54425 54426 return this[kHeadersMap].has(name) 54427 } 54428 54429 clear () { 54430 this[kHeadersMap].clear() 54431 this[kHeadersSortedMap] = null 54432 this.cookies = null 54433 } 54434 54435 // https://fetch.spec.whatwg.org/#concept-header-list-append 54436 append (name, value) { 54437 this[kHeadersSortedMap] = null 54438 54439 // 1. If list contains name, then set name to the first such 54440 // header’s name. 54441 const lowercaseName = name.toLowerCase() 54442 const exists = this[kHeadersMap].get(lowercaseName) 54443 54444 // 2. Append (name, value) to list. 54445 if (exists) { 54446 const delimiter = lowercaseName === 'cookie' ? '; ' : ', ' 54447 this[kHeadersMap].set(lowercaseName, { 54448 name: exists.name, 54449 value: `${exists.value}${delimiter}${value}` 54450 }) 54451 } else { 54452 this[kHeadersMap].set(lowercaseName, { name, value }) 54453 } 54454 54455 if (lowercaseName === 'set-cookie') { 54456 this.cookies ??= [] 54457 this.cookies.push(value) 54458 } 54459 } 54460 54461 // https://fetch.spec.whatwg.org/#concept-header-list-set 54462 set (name, value) { 54463 this[kHeadersSortedMap] = null 54464 const lowercaseName = name.toLowerCase() 54465 54466 if (lowercaseName === 'set-cookie') { 54467 this.cookies = [value] 54468 } 54469 54470 // 1. If list contains name, then set the value of 54471 // the first such header to value and remove the 54472 // others. 54473 // 2. Otherwise, append header (name, value) to list. 54474 this[kHeadersMap].set(lowercaseName, { name, value }) 54475 } 54476 54477 // https://fetch.spec.whatwg.org/#concept-header-list-delete 54478 delete (name) { 54479 this[kHeadersSortedMap] = null 54480 54481 name = name.toLowerCase() 54482 54483 if (name === 'set-cookie') { 54484 this.cookies = null 54485 } 54486 54487 this[kHeadersMap].delete(name) 54488 } 54489 54490 // https://fetch.spec.whatwg.org/#concept-header-list-get 54491 get (name) { 54492 const value = this[kHeadersMap].get(name.toLowerCase()) 54493 54494 // 1. If list does not contain name, then return null. 54495 // 2. Return the values of all headers in list whose name 54496 // is a byte-case-insensitive match for name, 54497 // separated from each other by 0x2C 0x20, in order. 54498 return value === undefined ? null : value.value 54499 } 54500 54501 * [Symbol.iterator] () { 54502 // use the lowercased name 54503 for (const [name, { value }] of this[kHeadersMap]) { 54504 yield [name, value] 54505 } 54506 } 54507 54508 get entries () { 54509 const headers = {} 54510 54511 if (this[kHeadersMap].size) { 54512 for (const { name, value } of this[kHeadersMap].values()) { 54513 headers[name] = value 54514 } 54515 } 54516 54517 return headers 54518 } 54519 } 54520 54521 // https://fetch.spec.whatwg.org/#headers-class 54522 class Headers { 54523 constructor (init = undefined) { 54524 if (init === kConstruct) { 54525 return 54526 } 54527 this[kHeadersList] = new HeadersList() 54528 54529 // The new Headers(init) constructor steps are: 54530 54531 // 1. Set this’s guard to "none". 54532 this[kGuard] = 'none' 54533 54534 // 2. If init is given, then fill this with init. 54535 if (init !== undefined) { 54536 init = webidl.converters.HeadersInit(init) 54537 fill(this, init) 54538 } 54539 } 54540 54541 // https://fetch.spec.whatwg.org/#dom-headers-append 54542 append (name, value) { 54543 webidl.brandCheck(this, Headers) 54544 54545 webidl.argumentLengthCheck(arguments, 2, { header: 'Headers.append' }) 54546 54547 name = webidl.converters.ByteString(name) 54548 value = webidl.converters.ByteString(value) 54549 54550 return appendHeader(this, name, value) 54551 } 54552 54553 // https://fetch.spec.whatwg.org/#dom-headers-delete 54554 delete (name) { 54555 webidl.brandCheck(this, Headers) 54556 54557 webidl.argumentLengthCheck(arguments, 1, { header: 'Headers.delete' }) 54558 54559 name = webidl.converters.ByteString(name) 54560 54561 // 1. If name is not a header name, then throw a TypeError. 54562 if (!isValidHeaderName(name)) { 54563 throw webidl.errors.invalidArgument({ 54564 prefix: 'Headers.delete', 54565 value: name, 54566 type: 'header name' 54567 }) 54568 } 54569 54570 // 2. If this’s guard is "immutable", then throw a TypeError. 54571 // 3. Otherwise, if this’s guard is "request" and name is a 54572 // forbidden header name, return. 54573 // 4. Otherwise, if this’s guard is "request-no-cors", name 54574 // is not a no-CORS-safelisted request-header name, and 54575 // name is not a privileged no-CORS request-header name, 54576 // return. 54577 // 5. Otherwise, if this’s guard is "response" and name is 54578 // a forbidden response-header name, return. 54579 // Note: undici does not implement forbidden header names 54580 if (this[kGuard] === 'immutable') { 54581 throw new TypeError('immutable') 54582 } else if (this[kGuard] === 'request-no-cors') { 54583 // TODO 54584 } 54585 54586 // 6. If this’s header list does not contain name, then 54587 // return. 54588 if (!this[kHeadersList].contains(name)) { 54589 return 54590 } 54591 54592 // 7. Delete name from this’s header list. 54593 // 8. If this’s guard is "request-no-cors", then remove 54594 // privileged no-CORS request headers from this. 54595 this[kHeadersList].delete(name) 54596 } 54597 54598 // https://fetch.spec.whatwg.org/#dom-headers-get 54599 get (name) { 54600 webidl.brandCheck(this, Headers) 54601 54602 webidl.argumentLengthCheck(arguments, 1, { header: 'Headers.get' }) 54603 54604 name = webidl.converters.ByteString(name) 54605 54606 // 1. If name is not a header name, then throw a TypeError. 54607 if (!isValidHeaderName(name)) { 54608 throw webidl.errors.invalidArgument({ 54609 prefix: 'Headers.get', 54610 value: name, 54611 type: 'header name' 54612 }) 54613 } 54614 54615 // 2. Return the result of getting name from this’s header 54616 // list. 54617 return this[kHeadersList].get(name) 54618 } 54619 54620 // https://fetch.spec.whatwg.org/#dom-headers-has 54621 has (name) { 54622 webidl.brandCheck(this, Headers) 54623 54624 webidl.argumentLengthCheck(arguments, 1, { header: 'Headers.has' }) 54625 54626 name = webidl.converters.ByteString(name) 54627 54628 // 1. If name is not a header name, then throw a TypeError. 54629 if (!isValidHeaderName(name)) { 54630 throw webidl.errors.invalidArgument({ 54631 prefix: 'Headers.has', 54632 value: name, 54633 type: 'header name' 54634 }) 54635 } 54636 54637 // 2. Return true if this’s header list contains name; 54638 // otherwise false. 54639 return this[kHeadersList].contains(name) 54640 } 54641 54642 // https://fetch.spec.whatwg.org/#dom-headers-set 54643 set (name, value) { 54644 webidl.brandCheck(this, Headers) 54645 54646 webidl.argumentLengthCheck(arguments, 2, { header: 'Headers.set' }) 54647 54648 name = webidl.converters.ByteString(name) 54649 value = webidl.converters.ByteString(value) 54650 54651 // 1. Normalize value. 54652 value = headerValueNormalize(value) 54653 54654 // 2. If name is not a header name or value is not a 54655 // header value, then throw a TypeError. 54656 if (!isValidHeaderName(name)) { 54657 throw webidl.errors.invalidArgument({ 54658 prefix: 'Headers.set', 54659 value: name, 54660 type: 'header name' 54661 }) 54662 } else if (!isValidHeaderValue(value)) { 54663 throw webidl.errors.invalidArgument({ 54664 prefix: 'Headers.set', 54665 value, 54666 type: 'header value' 54667 }) 54668 } 54669 54670 // 3. If this’s guard is "immutable", then throw a TypeError. 54671 // 4. Otherwise, if this’s guard is "request" and name is a 54672 // forbidden header name, return. 54673 // 5. Otherwise, if this’s guard is "request-no-cors" and 54674 // name/value is not a no-CORS-safelisted request-header, 54675 // return. 54676 // 6. Otherwise, if this’s guard is "response" and name is a 54677 // forbidden response-header name, return. 54678 // Note: undici does not implement forbidden header names 54679 if (this[kGuard] === 'immutable') { 54680 throw new TypeError('immutable') 54681 } else if (this[kGuard] === 'request-no-cors') { 54682 // TODO 54683 } 54684 54685 // 7. Set (name, value) in this’s header list. 54686 // 8. If this’s guard is "request-no-cors", then remove 54687 // privileged no-CORS request headers from this 54688 this[kHeadersList].set(name, value) 54689 } 54690 54691 // https://fetch.spec.whatwg.org/#dom-headers-getsetcookie 54692 getSetCookie () { 54693 webidl.brandCheck(this, Headers) 54694 54695 // 1. If this’s header list does not contain `Set-Cookie`, then return « ». 54696 // 2. Return the values of all headers in this’s header list whose name is 54697 // a byte-case-insensitive match for `Set-Cookie`, in order. 54698 54699 const list = this[kHeadersList].cookies 54700 54701 if (list) { 54702 return [...list] 54703 } 54704 54705 return [] 54706 } 54707 54708 // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine 54709 get [kHeadersSortedMap] () { 54710 if (this[kHeadersList][kHeadersSortedMap]) { 54711 return this[kHeadersList][kHeadersSortedMap] 54712 } 54713 54714 // 1. Let headers be an empty list of headers with the key being the name 54715 // and value the value. 54716 const headers = [] 54717 54718 // 2. Let names be the result of convert header names to a sorted-lowercase 54719 // set with all the names of the headers in list. 54720 const names = [...this[kHeadersList]].sort((a, b) => a[0] < b[0] ? -1 : 1) 54721 const cookies = this[kHeadersList].cookies 54722 54723 // 3. For each name of names: 54724 for (let i = 0; i < names.length; ++i) { 54725 const [name, value] = names[i] 54726 // 1. If name is `set-cookie`, then: 54727 if (name === 'set-cookie') { 54728 // 1. Let values be a list of all values of headers in list whose name 54729 // is a byte-case-insensitive match for name, in order. 54730 54731 // 2. For each value of values: 54732 // 1. Append (name, value) to headers. 54733 for (let j = 0; j < cookies.length; ++j) { 54734 headers.push([name, cookies[j]]) 54735 } 54736 } else { 54737 // 2. Otherwise: 54738 54739 // 1. Let value be the result of getting name from list. 54740 54741 // 2. Assert: value is non-null. 54742 assert(value !== null) 54743 54744 // 3. Append (name, value) to headers. 54745 headers.push([name, value]) 54746 } 54747 } 54748 54749 this[kHeadersList][kHeadersSortedMap] = headers 54750 54751 // 4. Return headers. 54752 return headers 54753 } 54754 54755 keys () { 54756 webidl.brandCheck(this, Headers) 54757 54758 if (this[kGuard] === 'immutable') { 54759 const value = this[kHeadersSortedMap] 54760 return makeIterator(() => value, 'Headers', 54761 'key') 54762 } 54763 54764 return makeIterator( 54765 () => [...this[kHeadersSortedMap].values()], 54766 'Headers', 54767 'key' 54768 ) 54769 } 54770 54771 values () { 54772 webidl.brandCheck(this, Headers) 54773 54774 if (this[kGuard] === 'immutable') { 54775 const value = this[kHeadersSortedMap] 54776 return makeIterator(() => value, 'Headers', 54777 'value') 54778 } 54779 54780 return makeIterator( 54781 () => [...this[kHeadersSortedMap].values()], 54782 'Headers', 54783 'value' 54784 ) 54785 } 54786 54787 entries () { 54788 webidl.brandCheck(this, Headers) 54789 54790 if (this[kGuard] === 'immutable') { 54791 const value = this[kHeadersSortedMap] 54792 return makeIterator(() => value, 'Headers', 54793 'key+value') 54794 } 54795 54796 return makeIterator( 54797 () => [...this[kHeadersSortedMap].values()], 54798 'Headers', 54799 'key+value' 54800 ) 54801 } 54802 54803 /** 54804 * @param {(value: string, key: string, self: Headers) => void} callbackFn 54805 * @param {unknown} thisArg 54806 */ 54807 forEach (callbackFn, thisArg = globalThis) { 54808 webidl.brandCheck(this, Headers) 54809 54810 webidl.argumentLengthCheck(arguments, 1, { header: 'Headers.forEach' }) 54811 54812 if (typeof callbackFn !== 'function') { 54813 throw new TypeError( 54814 "Failed to execute 'forEach' on 'Headers': parameter 1 is not of type 'Function'." 54815 ) 54816 } 54817 54818 for (const [key, value] of this) { 54819 callbackFn.apply(thisArg, [value, key, this]) 54820 } 54821 } 54822 54823 [Symbol.for('nodejs.util.inspect.custom')] () { 54824 webidl.brandCheck(this, Headers) 54825 54826 return this[kHeadersList] 54827 } 54828 } 54829 54830 Headers.prototype[Symbol.iterator] = Headers.prototype.entries 54831 54832 Object.defineProperties(Headers.prototype, { 54833 append: kEnumerableProperty, 54834 delete: kEnumerableProperty, 54835 get: kEnumerableProperty, 54836 has: kEnumerableProperty, 54837 set: kEnumerableProperty, 54838 getSetCookie: kEnumerableProperty, 54839 keys: kEnumerableProperty, 54840 values: kEnumerableProperty, 54841 entries: kEnumerableProperty, 54842 forEach: kEnumerableProperty, 54843 [Symbol.iterator]: { enumerable: false }, 54844 [Symbol.toStringTag]: { 54845 value: 'Headers', 54846 configurable: true 54847 } 54848 }) 54849 54850 webidl.converters.HeadersInit = function (V) { 54851 if (webidl.util.Type(V) === 'Object') { 54852 if (V[Symbol.iterator]) { 54853 return webidl.converters['sequence<sequence<ByteString>>'](V) 54854 } 54855 54856 return webidl.converters['record<ByteString, ByteString>'](V) 54857 } 54858 54859 throw webidl.errors.conversionFailed({ 54860 prefix: 'Headers constructor', 54861 argument: 'Argument 1', 54862 types: ['sequence<sequence<ByteString>>', 'record<ByteString, ByteString>'] 54863 }) 54864 } 54865 54866 module.exports = { 54867 fill, 54868 Headers, 54869 HeadersList 54870 } 54871 54872 54873 /***/ }), 54874 54875 /***/ 74881: 54876 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 54877 54878 "use strict"; 54879 // https://github.com/Ethan-Arrowood/undici-fetch 54880 54881 54882 54883 const { 54884 Response, 54885 makeNetworkError, 54886 makeAppropriateNetworkError, 54887 filterResponse, 54888 makeResponse 54889 } = __nccwpck_require__(27823) 54890 const { Headers } = __nccwpck_require__(10554) 54891 const { Request, makeRequest } = __nccwpck_require__(48359) 54892 const zlib = __nccwpck_require__(59796) 54893 const { 54894 bytesMatch, 54895 makePolicyContainer, 54896 clonePolicyContainer, 54897 requestBadPort, 54898 TAOCheck, 54899 appendRequestOriginHeader, 54900 responseLocationURL, 54901 requestCurrentURL, 54902 setRequestReferrerPolicyOnRedirect, 54903 tryUpgradeRequestToAPotentiallyTrustworthyURL, 54904 createOpaqueTimingInfo, 54905 appendFetchMetadata, 54906 corsCheck, 54907 crossOriginResourcePolicyCheck, 54908 determineRequestsReferrer, 54909 coarsenedSharedCurrentTime, 54910 createDeferredPromise, 54911 isBlobLike, 54912 sameOrigin, 54913 isCancelled, 54914 isAborted, 54915 isErrorLike, 54916 fullyReadBody, 54917 readableStreamClose, 54918 isomorphicEncode, 54919 urlIsLocal, 54920 urlIsHttpHttpsScheme, 54921 urlHasHttpsScheme 54922 } = __nccwpck_require__(52538) 54923 const { kState, kHeaders, kGuard, kRealm } = __nccwpck_require__(15861) 54924 const assert = __nccwpck_require__(39491) 54925 const { safelyExtractBody } = __nccwpck_require__(41472) 54926 const { 54927 redirectStatusSet, 54928 nullBodyStatus, 54929 safeMethodsSet, 54930 requestBodyHeader, 54931 subresourceSet, 54932 DOMException 54933 } = __nccwpck_require__(41037) 54934 const { kHeadersList } = __nccwpck_require__(72785) 54935 const EE = __nccwpck_require__(82361) 54936 const { Readable, pipeline } = __nccwpck_require__(12781) 54937 const { addAbortListener, isErrored, isReadable, nodeMajor, nodeMinor } = __nccwpck_require__(83983) 54938 const { dataURLProcessor, serializeAMimeType } = __nccwpck_require__(685) 54939 const { TransformStream } = __nccwpck_require__(35356) 54940 const { getGlobalDispatcher } = __nccwpck_require__(21892) 54941 const { webidl } = __nccwpck_require__(21744) 54942 const { STATUS_CODES } = __nccwpck_require__(13685) 54943 const GET_OR_HEAD = ['GET', 'HEAD'] 54944 54945 /** @type {import('buffer').resolveObjectURL} */ 54946 let resolveObjectURL 54947 let ReadableStream = globalThis.ReadableStream 54948 54949 class Fetch extends EE { 54950 constructor (dispatcher) { 54951 super() 54952 54953 this.dispatcher = dispatcher 54954 this.connection = null 54955 this.dump = false 54956 this.state = 'ongoing' 54957 // 2 terminated listeners get added per request, 54958 // but only 1 gets removed. If there are 20 redirects, 54959 // 21 listeners will be added. 54960 // See https://github.com/nodejs/undici/issues/1711 54961 // TODO (fix): Find and fix root cause for leaked listener. 54962 this.setMaxListeners(21) 54963 } 54964 54965 terminate (reason) { 54966 if (this.state !== 'ongoing') { 54967 return 54968 } 54969 54970 this.state = 'terminated' 54971 this.connection?.destroy(reason) 54972 this.emit('terminated', reason) 54973 } 54974 54975 // https://fetch.spec.whatwg.org/#fetch-controller-abort 54976 abort (error) { 54977 if (this.state !== 'ongoing') { 54978 return 54979 } 54980 54981 // 1. Set controller’s state to "aborted". 54982 this.state = 'aborted' 54983 54984 // 2. Let fallbackError be an "AbortError" DOMException. 54985 // 3. Set error to fallbackError if it is not given. 54986 if (!error) { 54987 error = new DOMException('The operation was aborted.', 'AbortError') 54988 } 54989 54990 // 4. Let serializedError be StructuredSerialize(error). 54991 // If that threw an exception, catch it, and let 54992 // serializedError be StructuredSerialize(fallbackError). 54993 54994 // 5. Set controller’s serialized abort reason to serializedError. 54995 this.serializedAbortReason = error 54996 54997 this.connection?.destroy(error) 54998 this.emit('terminated', error) 54999 } 55000 } 55001 55002 // https://fetch.spec.whatwg.org/#fetch-method 55003 function fetch (input, init = {}) { 55004 webidl.argumentLengthCheck(arguments, 1, { header: 'globalThis.fetch' }) 55005 55006 // 1. Let p be a new promise. 55007 const p = createDeferredPromise() 55008 55009 // 2. Let requestObject be the result of invoking the initial value of 55010 // Request as constructor with input and init as arguments. If this throws 55011 // an exception, reject p with it and return p. 55012 let requestObject 55013 55014 try { 55015 requestObject = new Request(input, init) 55016 } catch (e) { 55017 p.reject(e) 55018 return p.promise 55019 } 55020 55021 // 3. Let request be requestObject’s request. 55022 const request = requestObject[kState] 55023 55024 // 4. If requestObject’s signal’s aborted flag is set, then: 55025 if (requestObject.signal.aborted) { 55026 // 1. Abort the fetch() call with p, request, null, and 55027 // requestObject’s signal’s abort reason. 55028 abortFetch(p, request, null, requestObject.signal.reason) 55029 55030 // 2. Return p. 55031 return p.promise 55032 } 55033 55034 // 5. Let globalObject be request’s client’s global object. 55035 const globalObject = request.client.globalObject 55036 55037 // 6. If globalObject is a ServiceWorkerGlobalScope object, then set 55038 // request’s service-workers mode to "none". 55039 if (globalObject?.constructor?.name === 'ServiceWorkerGlobalScope') { 55040 request.serviceWorkers = 'none' 55041 } 55042 55043 // 7. Let responseObject be null. 55044 let responseObject = null 55045 55046 // 8. Let relevantRealm be this’s relevant Realm. 55047 const relevantRealm = null 55048 55049 // 9. Let locallyAborted be false. 55050 let locallyAborted = false 55051 55052 // 10. Let controller be null. 55053 let controller = null 55054 55055 // 11. Add the following abort steps to requestObject’s signal: 55056 addAbortListener( 55057 requestObject.signal, 55058 () => { 55059 // 1. Set locallyAborted to true. 55060 locallyAborted = true 55061 55062 // 2. Assert: controller is non-null. 55063 assert(controller != null) 55064 55065 // 3. Abort controller with requestObject’s signal’s abort reason. 55066 controller.abort(requestObject.signal.reason) 55067 55068 // 4. Abort the fetch() call with p, request, responseObject, 55069 // and requestObject’s signal’s abort reason. 55070 abortFetch(p, request, responseObject, requestObject.signal.reason) 55071 } 55072 ) 55073 55074 // 12. Let handleFetchDone given response response be to finalize and 55075 // report timing with response, globalObject, and "fetch". 55076 const handleFetchDone = (response) => 55077 finalizeAndReportTiming(response, 'fetch') 55078 55079 // 13. Set controller to the result of calling fetch given request, 55080 // with processResponseEndOfBody set to handleFetchDone, and processResponse 55081 // given response being these substeps: 55082 55083 const processResponse = (response) => { 55084 // 1. If locallyAborted is true, terminate these substeps. 55085 if (locallyAborted) { 55086 return Promise.resolve() 55087 } 55088 55089 // 2. If response’s aborted flag is set, then: 55090 if (response.aborted) { 55091 // 1. Let deserializedError be the result of deserialize a serialized 55092 // abort reason given controller’s serialized abort reason and 55093 // relevantRealm. 55094 55095 // 2. Abort the fetch() call with p, request, responseObject, and 55096 // deserializedError. 55097 55098 abortFetch(p, request, responseObject, controller.serializedAbortReason) 55099 return Promise.resolve() 55100 } 55101 55102 // 3. If response is a network error, then reject p with a TypeError 55103 // and terminate these substeps. 55104 if (response.type === 'error') { 55105 p.reject( 55106 Object.assign(new TypeError('fetch failed'), { cause: response.error }) 55107 ) 55108 return Promise.resolve() 55109 } 55110 55111 // 4. Set responseObject to the result of creating a Response object, 55112 // given response, "immutable", and relevantRealm. 55113 responseObject = new Response() 55114 responseObject[kState] = response 55115 responseObject[kRealm] = relevantRealm 55116 responseObject[kHeaders][kHeadersList] = response.headersList 55117 responseObject[kHeaders][kGuard] = 'immutable' 55118 responseObject[kHeaders][kRealm] = relevantRealm 55119 55120 // 5. Resolve p with responseObject. 55121 p.resolve(responseObject) 55122 } 55123 55124 controller = fetching({ 55125 request, 55126 processResponseEndOfBody: handleFetchDone, 55127 processResponse, 55128 dispatcher: init.dispatcher ?? getGlobalDispatcher() // undici 55129 }) 55130 55131 // 14. Return p. 55132 return p.promise 55133 } 55134 55135 // https://fetch.spec.whatwg.org/#finalize-and-report-timing 55136 function finalizeAndReportTiming (response, initiatorType = 'other') { 55137 // 1. If response is an aborted network error, then return. 55138 if (response.type === 'error' && response.aborted) { 55139 return 55140 } 55141 55142 // 2. If response’s URL list is null or empty, then return. 55143 if (!response.urlList?.length) { 55144 return 55145 } 55146 55147 // 3. Let originalURL be response’s URL list[0]. 55148 const originalURL = response.urlList[0] 55149 55150 // 4. Let timingInfo be response’s timing info. 55151 let timingInfo = response.timingInfo 55152 55153 // 5. Let cacheState be response’s cache state. 55154 let cacheState = response.cacheState 55155 55156 // 6. If originalURL’s scheme is not an HTTP(S) scheme, then return. 55157 if (!urlIsHttpHttpsScheme(originalURL)) { 55158 return 55159 } 55160 55161 // 7. If timingInfo is null, then return. 55162 if (timingInfo === null) { 55163 return 55164 } 55165 55166 // 8. If response’s timing allow passed flag is not set, then: 55167 if (!response.timingAllowPassed) { 55168 // 1. Set timingInfo to a the result of creating an opaque timing info for timingInfo. 55169 timingInfo = createOpaqueTimingInfo({ 55170 startTime: timingInfo.startTime 55171 }) 55172 55173 // 2. Set cacheState to the empty string. 55174 cacheState = '' 55175 } 55176 55177 // 9. Set timingInfo’s end time to the coarsened shared current time 55178 // given global’s relevant settings object’s cross-origin isolated 55179 // capability. 55180 // TODO: given global’s relevant settings object’s cross-origin isolated 55181 // capability? 55182 timingInfo.endTime = coarsenedSharedCurrentTime() 55183 55184 // 10. Set response’s timing info to timingInfo. 55185 response.timingInfo = timingInfo 55186 55187 // 11. Mark resource timing for timingInfo, originalURL, initiatorType, 55188 // global, and cacheState. 55189 markResourceTiming( 55190 timingInfo, 55191 originalURL, 55192 initiatorType, 55193 globalThis, 55194 cacheState 55195 ) 55196 } 55197 55198 // https://w3c.github.io/resource-timing/#dfn-mark-resource-timing 55199 function markResourceTiming (timingInfo, originalURL, initiatorType, globalThis, cacheState) { 55200 if (nodeMajor > 18 || (nodeMajor === 18 && nodeMinor >= 2)) { 55201 performance.markResourceTiming(timingInfo, originalURL.href, initiatorType, globalThis, cacheState) 55202 } 55203 } 55204 55205 // https://fetch.spec.whatwg.org/#abort-fetch 55206 function abortFetch (p, request, responseObject, error) { 55207 // Note: AbortSignal.reason was added in node v17.2.0 55208 // which would give us an undefined error to reject with. 55209 // Remove this once node v16 is no longer supported. 55210 if (!error) { 55211 error = new DOMException('The operation was aborted.', 'AbortError') 55212 } 55213 55214 // 1. Reject promise with error. 55215 p.reject(error) 55216 55217 // 2. If request’s body is not null and is readable, then cancel request’s 55218 // body with error. 55219 if (request.body != null && isReadable(request.body?.stream)) { 55220 request.body.stream.cancel(error).catch((err) => { 55221 if (err.code === 'ERR_INVALID_STATE') { 55222 // Node bug? 55223 return 55224 } 55225 throw err 55226 }) 55227 } 55228 55229 // 3. If responseObject is null, then return. 55230 if (responseObject == null) { 55231 return 55232 } 55233 55234 // 4. Let response be responseObject’s response. 55235 const response = responseObject[kState] 55236 55237 // 5. If response’s body is not null and is readable, then error response’s 55238 // body with error. 55239 if (response.body != null && isReadable(response.body?.stream)) { 55240 response.body.stream.cancel(error).catch((err) => { 55241 if (err.code === 'ERR_INVALID_STATE') { 55242 // Node bug? 55243 return 55244 } 55245 throw err 55246 }) 55247 } 55248 } 55249 55250 // https://fetch.spec.whatwg.org/#fetching 55251 function fetching ({ 55252 request, 55253 processRequestBodyChunkLength, 55254 processRequestEndOfBody, 55255 processResponse, 55256 processResponseEndOfBody, 55257 processResponseConsumeBody, 55258 useParallelQueue = false, 55259 dispatcher // undici 55260 }) { 55261 // 1. Let taskDestination be null. 55262 let taskDestination = null 55263 55264 // 2. Let crossOriginIsolatedCapability be false. 55265 let crossOriginIsolatedCapability = false 55266 55267 // 3. If request’s client is non-null, then: 55268 if (request.client != null) { 55269 // 1. Set taskDestination to request’s client’s global object. 55270 taskDestination = request.client.globalObject 55271 55272 // 2. Set crossOriginIsolatedCapability to request’s client’s cross-origin 55273 // isolated capability. 55274 crossOriginIsolatedCapability = 55275 request.client.crossOriginIsolatedCapability 55276 } 55277 55278 // 4. If useParallelQueue is true, then set taskDestination to the result of 55279 // starting a new parallel queue. 55280 // TODO 55281 55282 // 5. Let timingInfo be a new fetch timing info whose start time and 55283 // post-redirect start time are the coarsened shared current time given 55284 // crossOriginIsolatedCapability. 55285 const currenTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability) 55286 const timingInfo = createOpaqueTimingInfo({ 55287 startTime: currenTime 55288 }) 55289 55290 // 6. Let fetchParams be a new fetch params whose 55291 // request is request, 55292 // timing info is timingInfo, 55293 // process request body chunk length is processRequestBodyChunkLength, 55294 // process request end-of-body is processRequestEndOfBody, 55295 // process response is processResponse, 55296 // process response consume body is processResponseConsumeBody, 55297 // process response end-of-body is processResponseEndOfBody, 55298 // task destination is taskDestination, 55299 // and cross-origin isolated capability is crossOriginIsolatedCapability. 55300 const fetchParams = { 55301 controller: new Fetch(dispatcher), 55302 request, 55303 timingInfo, 55304 processRequestBodyChunkLength, 55305 processRequestEndOfBody, 55306 processResponse, 55307 processResponseConsumeBody, 55308 processResponseEndOfBody, 55309 taskDestination, 55310 crossOriginIsolatedCapability 55311 } 55312 55313 // 7. If request’s body is a byte sequence, then set request’s body to 55314 // request’s body as a body. 55315 // NOTE: Since fetching is only called from fetch, body should already be 55316 // extracted. 55317 assert(!request.body || request.body.stream) 55318 55319 // 8. If request’s window is "client", then set request’s window to request’s 55320 // client, if request’s client’s global object is a Window object; otherwise 55321 // "no-window". 55322 if (request.window === 'client') { 55323 // TODO: What if request.client is null? 55324 request.window = 55325 request.client?.globalObject?.constructor?.name === 'Window' 55326 ? request.client 55327 : 'no-window' 55328 } 55329 55330 // 9. If request’s origin is "client", then set request’s origin to request’s 55331 // client’s origin. 55332 if (request.origin === 'client') { 55333 // TODO: What if request.client is null? 55334 request.origin = request.client?.origin 55335 } 55336 55337 // 10. If all of the following conditions are true: 55338 // TODO 55339 55340 // 11. If request’s policy container is "client", then: 55341 if (request.policyContainer === 'client') { 55342 // 1. If request’s client is non-null, then set request’s policy 55343 // container to a clone of request’s client’s policy container. [HTML] 55344 if (request.client != null) { 55345 request.policyContainer = clonePolicyContainer( 55346 request.client.policyContainer 55347 ) 55348 } else { 55349 // 2. Otherwise, set request’s policy container to a new policy 55350 // container. 55351 request.policyContainer = makePolicyContainer() 55352 } 55353 } 55354 55355 // 12. If request’s header list does not contain `Accept`, then: 55356 if (!request.headersList.contains('accept')) { 55357 // 1. Let value be `*/*`. 55358 const value = '*/*' 55359 55360 // 2. A user agent should set value to the first matching statement, if 55361 // any, switching on request’s destination: 55362 // "document" 55363 // "frame" 55364 // "iframe" 55365 // `text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8` 55366 // "image" 55367 // `image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5` 55368 // "style" 55369 // `text/css,*/*;q=0.1` 55370 // TODO 55371 55372 // 3. Append `Accept`/value to request’s header list. 55373 request.headersList.append('accept', value) 55374 } 55375 55376 // 13. If request’s header list does not contain `Accept-Language`, then 55377 // user agents should append `Accept-Language`/an appropriate value to 55378 // request’s header list. 55379 if (!request.headersList.contains('accept-language')) { 55380 request.headersList.append('accept-language', '*') 55381 } 55382 55383 // 14. If request’s priority is null, then use request’s initiator and 55384 // destination appropriately in setting request’s priority to a 55385 // user-agent-defined object. 55386 if (request.priority === null) { 55387 // TODO 55388 } 55389 55390 // 15. If request is a subresource request, then: 55391 if (subresourceSet.has(request.destination)) { 55392 // TODO 55393 } 55394 55395 // 16. Run main fetch given fetchParams. 55396 mainFetch(fetchParams) 55397 .catch(err => { 55398 fetchParams.controller.terminate(err) 55399 }) 55400 55401 // 17. Return fetchParam's controller 55402 return fetchParams.controller 55403 } 55404 55405 // https://fetch.spec.whatwg.org/#concept-main-fetch 55406 async function mainFetch (fetchParams, recursive = false) { 55407 // 1. Let request be fetchParams’s request. 55408 const request = fetchParams.request 55409 55410 // 2. Let response be null. 55411 let response = null 55412 55413 // 3. If request’s local-URLs-only flag is set and request’s current URL is 55414 // not local, then set response to a network error. 55415 if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) { 55416 response = makeNetworkError('local URLs only') 55417 } 55418 55419 // 4. Run report Content Security Policy violations for request. 55420 // TODO 55421 55422 // 5. Upgrade request to a potentially trustworthy URL, if appropriate. 55423 tryUpgradeRequestToAPotentiallyTrustworthyURL(request) 55424 55425 // 6. If should request be blocked due to a bad port, should fetching request 55426 // be blocked as mixed content, or should request be blocked by Content 55427 // Security Policy returns blocked, then set response to a network error. 55428 if (requestBadPort(request) === 'blocked') { 55429 response = makeNetworkError('bad port') 55430 } 55431 // TODO: should fetching request be blocked as mixed content? 55432 // TODO: should request be blocked by Content Security Policy? 55433 55434 // 7. If request’s referrer policy is the empty string, then set request’s 55435 // referrer policy to request’s policy container’s referrer policy. 55436 if (request.referrerPolicy === '') { 55437 request.referrerPolicy = request.policyContainer.referrerPolicy 55438 } 55439 55440 // 8. If request’s referrer is not "no-referrer", then set request’s 55441 // referrer to the result of invoking determine request’s referrer. 55442 if (request.referrer !== 'no-referrer') { 55443 request.referrer = determineRequestsReferrer(request) 55444 } 55445 55446 // 9. Set request’s current URL’s scheme to "https" if all of the following 55447 // conditions are true: 55448 // - request’s current URL’s scheme is "http" 55449 // - request’s current URL’s host is a domain 55450 // - Matching request’s current URL’s host per Known HSTS Host Domain Name 55451 // Matching results in either a superdomain match with an asserted 55452 // includeSubDomains directive or a congruent match (with or without an 55453 // asserted includeSubDomains directive). [HSTS] 55454 // TODO 55455 55456 // 10. If recursive is false, then run the remaining steps in parallel. 55457 // TODO 55458 55459 // 11. If response is null, then set response to the result of running 55460 // the steps corresponding to the first matching statement: 55461 if (response === null) { 55462 response = await (async () => { 55463 const currentURL = requestCurrentURL(request) 55464 55465 if ( 55466 // - request’s current URL’s origin is same origin with request’s origin, 55467 // and request’s response tainting is "basic" 55468 (sameOrigin(currentURL, request.url) && request.responseTainting === 'basic') || 55469 // request’s current URL’s scheme is "data" 55470 (currentURL.protocol === 'data:') || 55471 // - request’s mode is "navigate" or "websocket" 55472 (request.mode === 'navigate' || request.mode === 'websocket') 55473 ) { 55474 // 1. Set request’s response tainting to "basic". 55475 request.responseTainting = 'basic' 55476 55477 // 2. Return the result of running scheme fetch given fetchParams. 55478 return await schemeFetch(fetchParams) 55479 } 55480 55481 // request’s mode is "same-origin" 55482 if (request.mode === 'same-origin') { 55483 // 1. Return a network error. 55484 return makeNetworkError('request mode cannot be "same-origin"') 55485 } 55486 55487 // request’s mode is "no-cors" 55488 if (request.mode === 'no-cors') { 55489 // 1. If request’s redirect mode is not "follow", then return a network 55490 // error. 55491 if (request.redirect !== 'follow') { 55492 return makeNetworkError( 55493 'redirect mode cannot be "follow" for "no-cors" request' 55494 ) 55495 } 55496 55497 // 2. Set request’s response tainting to "opaque". 55498 request.responseTainting = 'opaque' 55499 55500 // 3. Return the result of running scheme fetch given fetchParams. 55501 return await schemeFetch(fetchParams) 55502 } 55503 55504 // request’s current URL’s scheme is not an HTTP(S) scheme 55505 if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) { 55506 // Return a network error. 55507 return makeNetworkError('URL scheme must be a HTTP(S) scheme') 55508 } 55509 55510 // - request’s use-CORS-preflight flag is set 55511 // - request’s unsafe-request flag is set and either request’s method is 55512 // not a CORS-safelisted method or CORS-unsafe request-header names with 55513 // request’s header list is not empty 55514 // 1. Set request’s response tainting to "cors". 55515 // 2. Let corsWithPreflightResponse be the result of running HTTP fetch 55516 // given fetchParams and true. 55517 // 3. If corsWithPreflightResponse is a network error, then clear cache 55518 // entries using request. 55519 // 4. Return corsWithPreflightResponse. 55520 // TODO 55521 55522 // Otherwise 55523 // 1. Set request’s response tainting to "cors". 55524 request.responseTainting = 'cors' 55525 55526 // 2. Return the result of running HTTP fetch given fetchParams. 55527 return await httpFetch(fetchParams) 55528 })() 55529 } 55530 55531 // 12. If recursive is true, then return response. 55532 if (recursive) { 55533 return response 55534 } 55535 55536 // 13. If response is not a network error and response is not a filtered 55537 // response, then: 55538 if (response.status !== 0 && !response.internalResponse) { 55539 // If request’s response tainting is "cors", then: 55540 if (request.responseTainting === 'cors') { 55541 // 1. Let headerNames be the result of extracting header list values 55542 // given `Access-Control-Expose-Headers` and response’s header list. 55543 // TODO 55544 // 2. If request’s credentials mode is not "include" and headerNames 55545 // contains `*`, then set response’s CORS-exposed header-name list to 55546 // all unique header names in response’s header list. 55547 // TODO 55548 // 3. Otherwise, if headerNames is not null or failure, then set 55549 // response’s CORS-exposed header-name list to headerNames. 55550 // TODO 55551 } 55552 55553 // Set response to the following filtered response with response as its 55554 // internal response, depending on request’s response tainting: 55555 if (request.responseTainting === 'basic') { 55556 response = filterResponse(response, 'basic') 55557 } else if (request.responseTainting === 'cors') { 55558 response = filterResponse(response, 'cors') 55559 } else if (request.responseTainting === 'opaque') { 55560 response = filterResponse(response, 'opaque') 55561 } else { 55562 assert(false) 55563 } 55564 } 55565 55566 // 14. Let internalResponse be response, if response is a network error, 55567 // and response’s internal response otherwise. 55568 let internalResponse = 55569 response.status === 0 ? response : response.internalResponse 55570 55571 // 15. If internalResponse’s URL list is empty, then set it to a clone of 55572 // request’s URL list. 55573 if (internalResponse.urlList.length === 0) { 55574 internalResponse.urlList.push(...request.urlList) 55575 } 55576 55577 // 16. If request’s timing allow failed flag is unset, then set 55578 // internalResponse’s timing allow passed flag. 55579 if (!request.timingAllowFailed) { 55580 response.timingAllowPassed = true 55581 } 55582 55583 // 17. If response is not a network error and any of the following returns 55584 // blocked 55585 // - should internalResponse to request be blocked as mixed content 55586 // - should internalResponse to request be blocked by Content Security Policy 55587 // - should internalResponse to request be blocked due to its MIME type 55588 // - should internalResponse to request be blocked due to nosniff 55589 // TODO 55590 55591 // 18. If response’s type is "opaque", internalResponse’s status is 206, 55592 // internalResponse’s range-requested flag is set, and request’s header 55593 // list does not contain `Range`, then set response and internalResponse 55594 // to a network error. 55595 if ( 55596 response.type === 'opaque' && 55597 internalResponse.status === 206 && 55598 internalResponse.rangeRequested && 55599 !request.headers.contains('range') 55600 ) { 55601 response = internalResponse = makeNetworkError() 55602 } 55603 55604 // 19. If response is not a network error and either request’s method is 55605 // `HEAD` or `CONNECT`, or internalResponse’s status is a null body status, 55606 // set internalResponse’s body to null and disregard any enqueuing toward 55607 // it (if any). 55608 if ( 55609 response.status !== 0 && 55610 (request.method === 'HEAD' || 55611 request.method === 'CONNECT' || 55612 nullBodyStatus.includes(internalResponse.status)) 55613 ) { 55614 internalResponse.body = null 55615 fetchParams.controller.dump = true 55616 } 55617 55618 // 20. If request’s integrity metadata is not the empty string, then: 55619 if (request.integrity) { 55620 // 1. Let processBodyError be this step: run fetch finale given fetchParams 55621 // and a network error. 55622 const processBodyError = (reason) => 55623 fetchFinale(fetchParams, makeNetworkError(reason)) 55624 55625 // 2. If request’s response tainting is "opaque", or response’s body is null, 55626 // then run processBodyError and abort these steps. 55627 if (request.responseTainting === 'opaque' || response.body == null) { 55628 processBodyError(response.error) 55629 return 55630 } 55631 55632 // 3. Let processBody given bytes be these steps: 55633 const processBody = (bytes) => { 55634 // 1. If bytes do not match request’s integrity metadata, 55635 // then run processBodyError and abort these steps. [SRI] 55636 if (!bytesMatch(bytes, request.integrity)) { 55637 processBodyError('integrity mismatch') 55638 return 55639 } 55640 55641 // 2. Set response’s body to bytes as a body. 55642 response.body = safelyExtractBody(bytes)[0] 55643 55644 // 3. Run fetch finale given fetchParams and response. 55645 fetchFinale(fetchParams, response) 55646 } 55647 55648 // 4. Fully read response’s body given processBody and processBodyError. 55649 await fullyReadBody(response.body, processBody, processBodyError) 55650 } else { 55651 // 21. Otherwise, run fetch finale given fetchParams and response. 55652 fetchFinale(fetchParams, response) 55653 } 55654 } 55655 55656 // https://fetch.spec.whatwg.org/#concept-scheme-fetch 55657 // given a fetch params fetchParams 55658 function schemeFetch (fetchParams) { 55659 // Note: since the connection is destroyed on redirect, which sets fetchParams to a 55660 // cancelled state, we do not want this condition to trigger *unless* there have been 55661 // no redirects. See https://github.com/nodejs/undici/issues/1776 55662 // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams. 55663 if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) { 55664 return Promise.resolve(makeAppropriateNetworkError(fetchParams)) 55665 } 55666 55667 // 2. Let request be fetchParams’s request. 55668 const { request } = fetchParams 55669 55670 const { protocol: scheme } = requestCurrentURL(request) 55671 55672 // 3. Switch on request’s current URL’s scheme and run the associated steps: 55673 switch (scheme) { 55674 case 'about:': { 55675 // If request’s current URL’s path is the string "blank", then return a new response 55676 // whose status message is `OK`, header list is « (`Content-Type`, `text/html;charset=utf-8`) », 55677 // and body is the empty byte sequence as a body. 55678 55679 // Otherwise, return a network error. 55680 return Promise.resolve(makeNetworkError('about scheme is not supported')) 55681 } 55682 case 'blob:': { 55683 if (!resolveObjectURL) { 55684 resolveObjectURL = (__nccwpck_require__(14300).resolveObjectURL) 55685 } 55686 55687 // 1. Let blobURLEntry be request’s current URL’s blob URL entry. 55688 const blobURLEntry = requestCurrentURL(request) 55689 55690 // https://github.com/web-platform-tests/wpt/blob/7b0ebaccc62b566a1965396e5be7bb2bc06f841f/FileAPI/url/resources/fetch-tests.js#L52-L56 55691 // Buffer.resolveObjectURL does not ignore URL queries. 55692 if (blobURLEntry.search.length !== 0) { 55693 return Promise.resolve(makeNetworkError('NetworkError when attempting to fetch resource.')) 55694 } 55695 55696 const blobURLEntryObject = resolveObjectURL(blobURLEntry.toString()) 55697 55698 // 2. If request’s method is not `GET`, blobURLEntry is null, or blobURLEntry’s 55699 // object is not a Blob object, then return a network error. 55700 if (request.method !== 'GET' || !isBlobLike(blobURLEntryObject)) { 55701 return Promise.resolve(makeNetworkError('invalid method')) 55702 } 55703 55704 // 3. Let bodyWithType be the result of safely extracting blobURLEntry’s object. 55705 const bodyWithType = safelyExtractBody(blobURLEntryObject) 55706 55707 // 4. Let body be bodyWithType’s body. 55708 const body = bodyWithType[0] 55709 55710 // 5. Let length be body’s length, serialized and isomorphic encoded. 55711 const length = isomorphicEncode(`${body.length}`) 55712 55713 // 6. Let type be bodyWithType’s type if it is non-null; otherwise the empty byte sequence. 55714 const type = bodyWithType[1] ?? '' 55715 55716 // 7. Return a new response whose status message is `OK`, header list is 55717 // « (`Content-Length`, length), (`Content-Type`, type) », and body is body. 55718 const response = makeResponse({ 55719 statusText: 'OK', 55720 headersList: [ 55721 ['content-length', { name: 'Content-Length', value: length }], 55722 ['content-type', { name: 'Content-Type', value: type }] 55723 ] 55724 }) 55725 55726 response.body = body 55727 55728 return Promise.resolve(response) 55729 } 55730 case 'data:': { 55731 // 1. Let dataURLStruct be the result of running the 55732 // data: URL processor on request’s current URL. 55733 const currentURL = requestCurrentURL(request) 55734 const dataURLStruct = dataURLProcessor(currentURL) 55735 55736 // 2. If dataURLStruct is failure, then return a 55737 // network error. 55738 if (dataURLStruct === 'failure') { 55739 return Promise.resolve(makeNetworkError('failed to fetch the data URL')) 55740 } 55741 55742 // 3. Let mimeType be dataURLStruct’s MIME type, serialized. 55743 const mimeType = serializeAMimeType(dataURLStruct.mimeType) 55744 55745 // 4. Return a response whose status message is `OK`, 55746 // header list is « (`Content-Type`, mimeType) », 55747 // and body is dataURLStruct’s body as a body. 55748 return Promise.resolve(makeResponse({ 55749 statusText: 'OK', 55750 headersList: [ 55751 ['content-type', { name: 'Content-Type', value: mimeType }] 55752 ], 55753 body: safelyExtractBody(dataURLStruct.body)[0] 55754 })) 55755 } 55756 case 'file:': { 55757 // For now, unfortunate as it is, file URLs are left as an exercise for the reader. 55758 // When in doubt, return a network error. 55759 return Promise.resolve(makeNetworkError('not implemented... yet...')) 55760 } 55761 case 'http:': 55762 case 'https:': { 55763 // Return the result of running HTTP fetch given fetchParams. 55764 55765 return httpFetch(fetchParams) 55766 .catch((err) => makeNetworkError(err)) 55767 } 55768 default: { 55769 return Promise.resolve(makeNetworkError('unknown scheme')) 55770 } 55771 } 55772 } 55773 55774 // https://fetch.spec.whatwg.org/#finalize-response 55775 function finalizeResponse (fetchParams, response) { 55776 // 1. Set fetchParams’s request’s done flag. 55777 fetchParams.request.done = true 55778 55779 // 2, If fetchParams’s process response done is not null, then queue a fetch 55780 // task to run fetchParams’s process response done given response, with 55781 // fetchParams’s task destination. 55782 if (fetchParams.processResponseDone != null) { 55783 queueMicrotask(() => fetchParams.processResponseDone(response)) 55784 } 55785 } 55786 55787 // https://fetch.spec.whatwg.org/#fetch-finale 55788 function fetchFinale (fetchParams, response) { 55789 // 1. If response is a network error, then: 55790 if (response.type === 'error') { 55791 // 1. Set response’s URL list to « fetchParams’s request’s URL list[0] ». 55792 response.urlList = [fetchParams.request.urlList[0]] 55793 55794 // 2. Set response’s timing info to the result of creating an opaque timing 55795 // info for fetchParams’s timing info. 55796 response.timingInfo = createOpaqueTimingInfo({ 55797 startTime: fetchParams.timingInfo.startTime 55798 }) 55799 } 55800 55801 // 2. Let processResponseEndOfBody be the following steps: 55802 const processResponseEndOfBody = () => { 55803 // 1. Set fetchParams’s request’s done flag. 55804 fetchParams.request.done = true 55805 55806 // If fetchParams’s process response end-of-body is not null, 55807 // then queue a fetch task to run fetchParams’s process response 55808 // end-of-body given response with fetchParams’s task destination. 55809 if (fetchParams.processResponseEndOfBody != null) { 55810 queueMicrotask(() => fetchParams.processResponseEndOfBody(response)) 55811 } 55812 } 55813 55814 // 3. If fetchParams’s process response is non-null, then queue a fetch task 55815 // to run fetchParams’s process response given response, with fetchParams’s 55816 // task destination. 55817 if (fetchParams.processResponse != null) { 55818 queueMicrotask(() => fetchParams.processResponse(response)) 55819 } 55820 55821 // 4. If response’s body is null, then run processResponseEndOfBody. 55822 if (response.body == null) { 55823 processResponseEndOfBody() 55824 } else { 55825 // 5. Otherwise: 55826 55827 // 1. Let transformStream be a new a TransformStream. 55828 55829 // 2. Let identityTransformAlgorithm be an algorithm which, given chunk, 55830 // enqueues chunk in transformStream. 55831 const identityTransformAlgorithm = (chunk, controller) => { 55832 controller.enqueue(chunk) 55833 } 55834 55835 // 3. Set up transformStream with transformAlgorithm set to identityTransformAlgorithm 55836 // and flushAlgorithm set to processResponseEndOfBody. 55837 const transformStream = new TransformStream({ 55838 start () {}, 55839 transform: identityTransformAlgorithm, 55840 flush: processResponseEndOfBody 55841 }, { 55842 size () { 55843 return 1 55844 } 55845 }, { 55846 size () { 55847 return 1 55848 } 55849 }) 55850 55851 // 4. Set response’s body to the result of piping response’s body through transformStream. 55852 response.body = { stream: response.body.stream.pipeThrough(transformStream) } 55853 } 55854 55855 // 6. If fetchParams’s process response consume body is non-null, then: 55856 if (fetchParams.processResponseConsumeBody != null) { 55857 // 1. Let processBody given nullOrBytes be this step: run fetchParams’s 55858 // process response consume body given response and nullOrBytes. 55859 const processBody = (nullOrBytes) => fetchParams.processResponseConsumeBody(response, nullOrBytes) 55860 55861 // 2. Let processBodyError be this step: run fetchParams’s process 55862 // response consume body given response and failure. 55863 const processBodyError = (failure) => fetchParams.processResponseConsumeBody(response, failure) 55864 55865 // 3. If response’s body is null, then queue a fetch task to run processBody 55866 // given null, with fetchParams’s task destination. 55867 if (response.body == null) { 55868 queueMicrotask(() => processBody(null)) 55869 } else { 55870 // 4. Otherwise, fully read response’s body given processBody, processBodyError, 55871 // and fetchParams’s task destination. 55872 return fullyReadBody(response.body, processBody, processBodyError) 55873 } 55874 return Promise.resolve() 55875 } 55876 } 55877 55878 // https://fetch.spec.whatwg.org/#http-fetch 55879 async function httpFetch (fetchParams) { 55880 // 1. Let request be fetchParams’s request. 55881 const request = fetchParams.request 55882 55883 // 2. Let response be null. 55884 let response = null 55885 55886 // 3. Let actualResponse be null. 55887 let actualResponse = null 55888 55889 // 4. Let timingInfo be fetchParams’s timing info. 55890 const timingInfo = fetchParams.timingInfo 55891 55892 // 5. If request’s service-workers mode is "all", then: 55893 if (request.serviceWorkers === 'all') { 55894 // TODO 55895 } 55896 55897 // 6. If response is null, then: 55898 if (response === null) { 55899 // 1. If makeCORSPreflight is true and one of these conditions is true: 55900 // TODO 55901 55902 // 2. If request’s redirect mode is "follow", then set request’s 55903 // service-workers mode to "none". 55904 if (request.redirect === 'follow') { 55905 request.serviceWorkers = 'none' 55906 } 55907 55908 // 3. Set response and actualResponse to the result of running 55909 // HTTP-network-or-cache fetch given fetchParams. 55910 actualResponse = response = await httpNetworkOrCacheFetch(fetchParams) 55911 55912 // 4. If request’s response tainting is "cors" and a CORS check 55913 // for request and response returns failure, then return a network error. 55914 if ( 55915 request.responseTainting === 'cors' && 55916 corsCheck(request, response) === 'failure' 55917 ) { 55918 return makeNetworkError('cors failure') 55919 } 55920 55921 // 5. If the TAO check for request and response returns failure, then set 55922 // request’s timing allow failed flag. 55923 if (TAOCheck(request, response) === 'failure') { 55924 request.timingAllowFailed = true 55925 } 55926 } 55927 55928 // 7. If either request’s response tainting or response’s type 55929 // is "opaque", and the cross-origin resource policy check with 55930 // request’s origin, request’s client, request’s destination, 55931 // and actualResponse returns blocked, then return a network error. 55932 if ( 55933 (request.responseTainting === 'opaque' || response.type === 'opaque') && 55934 crossOriginResourcePolicyCheck( 55935 request.origin, 55936 request.client, 55937 request.destination, 55938 actualResponse 55939 ) === 'blocked' 55940 ) { 55941 return makeNetworkError('blocked') 55942 } 55943 55944 // 8. If actualResponse’s status is a redirect status, then: 55945 if (redirectStatusSet.has(actualResponse.status)) { 55946 // 1. If actualResponse’s status is not 303, request’s body is not null, 55947 // and the connection uses HTTP/2, then user agents may, and are even 55948 // encouraged to, transmit an RST_STREAM frame. 55949 // See, https://github.com/whatwg/fetch/issues/1288 55950 if (request.redirect !== 'manual') { 55951 fetchParams.controller.connection.destroy() 55952 } 55953 55954 // 2. Switch on request’s redirect mode: 55955 if (request.redirect === 'error') { 55956 // Set response to a network error. 55957 response = makeNetworkError('unexpected redirect') 55958 } else if (request.redirect === 'manual') { 55959 // Set response to an opaque-redirect filtered response whose internal 55960 // response is actualResponse. 55961 // NOTE(spec): On the web this would return an `opaqueredirect` response, 55962 // but that doesn't make sense server side. 55963 // See https://github.com/nodejs/undici/issues/1193. 55964 response = actualResponse 55965 } else if (request.redirect === 'follow') { 55966 // Set response to the result of running HTTP-redirect fetch given 55967 // fetchParams and response. 55968 response = await httpRedirectFetch(fetchParams, response) 55969 } else { 55970 assert(false) 55971 } 55972 } 55973 55974 // 9. Set response’s timing info to timingInfo. 55975 response.timingInfo = timingInfo 55976 55977 // 10. Return response. 55978 return response 55979 } 55980 55981 // https://fetch.spec.whatwg.org/#http-redirect-fetch 55982 function httpRedirectFetch (fetchParams, response) { 55983 // 1. Let request be fetchParams’s request. 55984 const request = fetchParams.request 55985 55986 // 2. Let actualResponse be response, if response is not a filtered response, 55987 // and response’s internal response otherwise. 55988 const actualResponse = response.internalResponse 55989 ? response.internalResponse 55990 : response 55991 55992 // 3. Let locationURL be actualResponse’s location URL given request’s current 55993 // URL’s fragment. 55994 let locationURL 55995 55996 try { 55997 locationURL = responseLocationURL( 55998 actualResponse, 55999 requestCurrentURL(request).hash 56000 ) 56001 56002 // 4. If locationURL is null, then return response. 56003 if (locationURL == null) { 56004 return response 56005 } 56006 } catch (err) { 56007 // 5. If locationURL is failure, then return a network error. 56008 return Promise.resolve(makeNetworkError(err)) 56009 } 56010 56011 // 6. If locationURL’s scheme is not an HTTP(S) scheme, then return a network 56012 // error. 56013 if (!urlIsHttpHttpsScheme(locationURL)) { 56014 return Promise.resolve(makeNetworkError('URL scheme must be a HTTP(S) scheme')) 56015 } 56016 56017 // 7. If request’s redirect count is 20, then return a network error. 56018 if (request.redirectCount === 20) { 56019 return Promise.resolve(makeNetworkError('redirect count exceeded')) 56020 } 56021 56022 // 8. Increase request’s redirect count by 1. 56023 request.redirectCount += 1 56024 56025 // 9. If request’s mode is "cors", locationURL includes credentials, and 56026 // request’s origin is not same origin with locationURL’s origin, then return 56027 // a network error. 56028 if ( 56029 request.mode === 'cors' && 56030 (locationURL.username || locationURL.password) && 56031 !sameOrigin(request, locationURL) 56032 ) { 56033 return Promise.resolve(makeNetworkError('cross origin not allowed for request mode "cors"')) 56034 } 56035 56036 // 10. If request’s response tainting is "cors" and locationURL includes 56037 // credentials, then return a network error. 56038 if ( 56039 request.responseTainting === 'cors' && 56040 (locationURL.username || locationURL.password) 56041 ) { 56042 return Promise.resolve(makeNetworkError( 56043 'URL cannot contain credentials for request mode "cors"' 56044 )) 56045 } 56046 56047 // 11. If actualResponse’s status is not 303, request’s body is non-null, 56048 // and request’s body’s source is null, then return a network error. 56049 if ( 56050 actualResponse.status !== 303 && 56051 request.body != null && 56052 request.body.source == null 56053 ) { 56054 return Promise.resolve(makeNetworkError()) 56055 } 56056 56057 // 12. If one of the following is true 56058 // - actualResponse’s status is 301 or 302 and request’s method is `POST` 56059 // - actualResponse’s status is 303 and request’s method is not `GET` or `HEAD` 56060 if ( 56061 ([301, 302].includes(actualResponse.status) && request.method === 'POST') || 56062 (actualResponse.status === 303 && 56063 !GET_OR_HEAD.includes(request.method)) 56064 ) { 56065 // then: 56066 // 1. Set request’s method to `GET` and request’s body to null. 56067 request.method = 'GET' 56068 request.body = null 56069 56070 // 2. For each headerName of request-body-header name, delete headerName from 56071 // request’s header list. 56072 for (const headerName of requestBodyHeader) { 56073 request.headersList.delete(headerName) 56074 } 56075 } 56076 56077 // 13. If request’s current URL’s origin is not same origin with locationURL’s 56078 // origin, then for each headerName of CORS non-wildcard request-header name, 56079 // delete headerName from request’s header list. 56080 if (!sameOrigin(requestCurrentURL(request), locationURL)) { 56081 // https://fetch.spec.whatwg.org/#cors-non-wildcard-request-header-name 56082 request.headersList.delete('authorization') 56083 56084 // https://fetch.spec.whatwg.org/#authentication-entries 56085 request.headersList.delete('proxy-authorization', true) 56086 56087 // "Cookie" and "Host" are forbidden request-headers, which undici doesn't implement. 56088 request.headersList.delete('cookie') 56089 request.headersList.delete('host') 56090 } 56091 56092 // 14. If request’s body is non-null, then set request’s body to the first return 56093 // value of safely extracting request’s body’s source. 56094 if (request.body != null) { 56095 assert(request.body.source != null) 56096 request.body = safelyExtractBody(request.body.source)[0] 56097 } 56098 56099 // 15. Let timingInfo be fetchParams’s timing info. 56100 const timingInfo = fetchParams.timingInfo 56101 56102 // 16. Set timingInfo’s redirect end time and post-redirect start time to the 56103 // coarsened shared current time given fetchParams’s cross-origin isolated 56104 // capability. 56105 timingInfo.redirectEndTime = timingInfo.postRedirectStartTime = 56106 coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability) 56107 56108 // 17. If timingInfo’s redirect start time is 0, then set timingInfo’s 56109 // redirect start time to timingInfo’s start time. 56110 if (timingInfo.redirectStartTime === 0) { 56111 timingInfo.redirectStartTime = timingInfo.startTime 56112 } 56113 56114 // 18. Append locationURL to request’s URL list. 56115 request.urlList.push(locationURL) 56116 56117 // 19. Invoke set request’s referrer policy on redirect on request and 56118 // actualResponse. 56119 setRequestReferrerPolicyOnRedirect(request, actualResponse) 56120 56121 // 20. Return the result of running main fetch given fetchParams and true. 56122 return mainFetch(fetchParams, true) 56123 } 56124 56125 // https://fetch.spec.whatwg.org/#http-network-or-cache-fetch 56126 async function httpNetworkOrCacheFetch ( 56127 fetchParams, 56128 isAuthenticationFetch = false, 56129 isNewConnectionFetch = false 56130 ) { 56131 // 1. Let request be fetchParams’s request. 56132 const request = fetchParams.request 56133 56134 // 2. Let httpFetchParams be null. 56135 let httpFetchParams = null 56136 56137 // 3. Let httpRequest be null. 56138 let httpRequest = null 56139 56140 // 4. Let response be null. 56141 let response = null 56142 56143 // 5. Let storedResponse be null. 56144 // TODO: cache 56145 56146 // 6. Let httpCache be null. 56147 const httpCache = null 56148 56149 // 7. Let the revalidatingFlag be unset. 56150 const revalidatingFlag = false 56151 56152 // 8. Run these steps, but abort when the ongoing fetch is terminated: 56153 56154 // 1. If request’s window is "no-window" and request’s redirect mode is 56155 // "error", then set httpFetchParams to fetchParams and httpRequest to 56156 // request. 56157 if (request.window === 'no-window' && request.redirect === 'error') { 56158 httpFetchParams = fetchParams 56159 httpRequest = request 56160 } else { 56161 // Otherwise: 56162 56163 // 1. Set httpRequest to a clone of request. 56164 httpRequest = makeRequest(request) 56165 56166 // 2. Set httpFetchParams to a copy of fetchParams. 56167 httpFetchParams = { ...fetchParams } 56168 56169 // 3. Set httpFetchParams’s request to httpRequest. 56170 httpFetchParams.request = httpRequest 56171 } 56172 56173 // 3. Let includeCredentials be true if one of 56174 const includeCredentials = 56175 request.credentials === 'include' || 56176 (request.credentials === 'same-origin' && 56177 request.responseTainting === 'basic') 56178 56179 // 4. Let contentLength be httpRequest’s body’s length, if httpRequest’s 56180 // body is non-null; otherwise null. 56181 const contentLength = httpRequest.body ? httpRequest.body.length : null 56182 56183 // 5. Let contentLengthHeaderValue be null. 56184 let contentLengthHeaderValue = null 56185 56186 // 6. If httpRequest’s body is null and httpRequest’s method is `POST` or 56187 // `PUT`, then set contentLengthHeaderValue to `0`. 56188 if ( 56189 httpRequest.body == null && 56190 ['POST', 'PUT'].includes(httpRequest.method) 56191 ) { 56192 contentLengthHeaderValue = '0' 56193 } 56194 56195 // 7. If contentLength is non-null, then set contentLengthHeaderValue to 56196 // contentLength, serialized and isomorphic encoded. 56197 if (contentLength != null) { 56198 contentLengthHeaderValue = isomorphicEncode(`${contentLength}`) 56199 } 56200 56201 // 8. If contentLengthHeaderValue is non-null, then append 56202 // `Content-Length`/contentLengthHeaderValue to httpRequest’s header 56203 // list. 56204 if (contentLengthHeaderValue != null) { 56205 httpRequest.headersList.append('content-length', contentLengthHeaderValue) 56206 } 56207 56208 // 9. If contentLengthHeaderValue is non-null, then append (`Content-Length`, 56209 // contentLengthHeaderValue) to httpRequest’s header list. 56210 56211 // 10. If contentLength is non-null and httpRequest’s keepalive is true, 56212 // then: 56213 if (contentLength != null && httpRequest.keepalive) { 56214 // NOTE: keepalive is a noop outside of browser context. 56215 } 56216 56217 // 11. If httpRequest’s referrer is a URL, then append 56218 // `Referer`/httpRequest’s referrer, serialized and isomorphic encoded, 56219 // to httpRequest’s header list. 56220 if (httpRequest.referrer instanceof URL) { 56221 httpRequest.headersList.append('referer', isomorphicEncode(httpRequest.referrer.href)) 56222 } 56223 56224 // 12. Append a request `Origin` header for httpRequest. 56225 appendRequestOriginHeader(httpRequest) 56226 56227 // 13. Append the Fetch metadata headers for httpRequest. [FETCH-METADATA] 56228 appendFetchMetadata(httpRequest) 56229 56230 // 14. If httpRequest’s header list does not contain `User-Agent`, then 56231 // user agents should append `User-Agent`/default `User-Agent` value to 56232 // httpRequest’s header list. 56233 if (!httpRequest.headersList.contains('user-agent')) { 56234 httpRequest.headersList.append('user-agent', typeof esbuildDetection === 'undefined' ? 'undici' : 'node') 56235 } 56236 56237 // 15. If httpRequest’s cache mode is "default" and httpRequest’s header 56238 // list contains `If-Modified-Since`, `If-None-Match`, 56239 // `If-Unmodified-Since`, `If-Match`, or `If-Range`, then set 56240 // httpRequest’s cache mode to "no-store". 56241 if ( 56242 httpRequest.cache === 'default' && 56243 (httpRequest.headersList.contains('if-modified-since') || 56244 httpRequest.headersList.contains('if-none-match') || 56245 httpRequest.headersList.contains('if-unmodified-since') || 56246 httpRequest.headersList.contains('if-match') || 56247 httpRequest.headersList.contains('if-range')) 56248 ) { 56249 httpRequest.cache = 'no-store' 56250 } 56251 56252 // 16. If httpRequest’s cache mode is "no-cache", httpRequest’s prevent 56253 // no-cache cache-control header modification flag is unset, and 56254 // httpRequest’s header list does not contain `Cache-Control`, then append 56255 // `Cache-Control`/`max-age=0` to httpRequest’s header list. 56256 if ( 56257 httpRequest.cache === 'no-cache' && 56258 !httpRequest.preventNoCacheCacheControlHeaderModification && 56259 !httpRequest.headersList.contains('cache-control') 56260 ) { 56261 httpRequest.headersList.append('cache-control', 'max-age=0') 56262 } 56263 56264 // 17. If httpRequest’s cache mode is "no-store" or "reload", then: 56265 if (httpRequest.cache === 'no-store' || httpRequest.cache === 'reload') { 56266 // 1. If httpRequest’s header list does not contain `Pragma`, then append 56267 // `Pragma`/`no-cache` to httpRequest’s header list. 56268 if (!httpRequest.headersList.contains('pragma')) { 56269 httpRequest.headersList.append('pragma', 'no-cache') 56270 } 56271 56272 // 2. If httpRequest’s header list does not contain `Cache-Control`, 56273 // then append `Cache-Control`/`no-cache` to httpRequest’s header list. 56274 if (!httpRequest.headersList.contains('cache-control')) { 56275 httpRequest.headersList.append('cache-control', 'no-cache') 56276 } 56277 } 56278 56279 // 18. If httpRequest’s header list contains `Range`, then append 56280 // `Accept-Encoding`/`identity` to httpRequest’s header list. 56281 if (httpRequest.headersList.contains('range')) { 56282 httpRequest.headersList.append('accept-encoding', 'identity') 56283 } 56284 56285 // 19. Modify httpRequest’s header list per HTTP. Do not append a given 56286 // header if httpRequest’s header list contains that header’s name. 56287 // TODO: https://github.com/whatwg/fetch/issues/1285#issuecomment-896560129 56288 if (!httpRequest.headersList.contains('accept-encoding')) { 56289 if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) { 56290 httpRequest.headersList.append('accept-encoding', 'br, gzip, deflate') 56291 } else { 56292 httpRequest.headersList.append('accept-encoding', 'gzip, deflate') 56293 } 56294 } 56295 56296 httpRequest.headersList.delete('host') 56297 56298 // 20. If includeCredentials is true, then: 56299 if (includeCredentials) { 56300 // 1. If the user agent is not configured to block cookies for httpRequest 56301 // (see section 7 of [COOKIES]), then: 56302 // TODO: credentials 56303 // 2. If httpRequest’s header list does not contain `Authorization`, then: 56304 // TODO: credentials 56305 } 56306 56307 // 21. If there’s a proxy-authentication entry, use it as appropriate. 56308 // TODO: proxy-authentication 56309 56310 // 22. Set httpCache to the result of determining the HTTP cache 56311 // partition, given httpRequest. 56312 // TODO: cache 56313 56314 // 23. If httpCache is null, then set httpRequest’s cache mode to 56315 // "no-store". 56316 if (httpCache == null) { 56317 httpRequest.cache = 'no-store' 56318 } 56319 56320 // 24. If httpRequest’s cache mode is neither "no-store" nor "reload", 56321 // then: 56322 if (httpRequest.mode !== 'no-store' && httpRequest.mode !== 'reload') { 56323 // TODO: cache 56324 } 56325 56326 // 9. If aborted, then return the appropriate network error for fetchParams. 56327 // TODO 56328 56329 // 10. If response is null, then: 56330 if (response == null) { 56331 // 1. If httpRequest’s cache mode is "only-if-cached", then return a 56332 // network error. 56333 if (httpRequest.mode === 'only-if-cached') { 56334 return makeNetworkError('only if cached') 56335 } 56336 56337 // 2. Let forwardResponse be the result of running HTTP-network fetch 56338 // given httpFetchParams, includeCredentials, and isNewConnectionFetch. 56339 const forwardResponse = await httpNetworkFetch( 56340 httpFetchParams, 56341 includeCredentials, 56342 isNewConnectionFetch 56343 ) 56344 56345 // 3. If httpRequest’s method is unsafe and forwardResponse’s status is 56346 // in the range 200 to 399, inclusive, invalidate appropriate stored 56347 // responses in httpCache, as per the "Invalidation" chapter of HTTP 56348 // Caching, and set storedResponse to null. [HTTP-CACHING] 56349 if ( 56350 !safeMethodsSet.has(httpRequest.method) && 56351 forwardResponse.status >= 200 && 56352 forwardResponse.status <= 399 56353 ) { 56354 // TODO: cache 56355 } 56356 56357 // 4. If the revalidatingFlag is set and forwardResponse’s status is 304, 56358 // then: 56359 if (revalidatingFlag && forwardResponse.status === 304) { 56360 // TODO: cache 56361 } 56362 56363 // 5. If response is null, then: 56364 if (response == null) { 56365 // 1. Set response to forwardResponse. 56366 response = forwardResponse 56367 56368 // 2. Store httpRequest and forwardResponse in httpCache, as per the 56369 // "Storing Responses in Caches" chapter of HTTP Caching. [HTTP-CACHING] 56370 // TODO: cache 56371 } 56372 } 56373 56374 // 11. Set response’s URL list to a clone of httpRequest’s URL list. 56375 response.urlList = [...httpRequest.urlList] 56376 56377 // 12. If httpRequest’s header list contains `Range`, then set response’s 56378 // range-requested flag. 56379 if (httpRequest.headersList.contains('range')) { 56380 response.rangeRequested = true 56381 } 56382 56383 // 13. Set response’s request-includes-credentials to includeCredentials. 56384 response.requestIncludesCredentials = includeCredentials 56385 56386 // 14. If response’s status is 401, httpRequest’s response tainting is not 56387 // "cors", includeCredentials is true, and request’s window is an environment 56388 // settings object, then: 56389 // TODO 56390 56391 // 15. If response’s status is 407, then: 56392 if (response.status === 407) { 56393 // 1. If request’s window is "no-window", then return a network error. 56394 if (request.window === 'no-window') { 56395 return makeNetworkError() 56396 } 56397 56398 // 2. ??? 56399 56400 // 3. If fetchParams is canceled, then return the appropriate network error for fetchParams. 56401 if (isCancelled(fetchParams)) { 56402 return makeAppropriateNetworkError(fetchParams) 56403 } 56404 56405 // 4. Prompt the end user as appropriate in request’s window and store 56406 // the result as a proxy-authentication entry. [HTTP-AUTH] 56407 // TODO: Invoke some kind of callback? 56408 56409 // 5. Set response to the result of running HTTP-network-or-cache fetch given 56410 // fetchParams. 56411 // TODO 56412 return makeNetworkError('proxy authentication required') 56413 } 56414 56415 // 16. If all of the following are true 56416 if ( 56417 // response’s status is 421 56418 response.status === 421 && 56419 // isNewConnectionFetch is false 56420 !isNewConnectionFetch && 56421 // request’s body is null, or request’s body is non-null and request’s body’s source is non-null 56422 (request.body == null || request.body.source != null) 56423 ) { 56424 // then: 56425 56426 // 1. If fetchParams is canceled, then return the appropriate network error for fetchParams. 56427 if (isCancelled(fetchParams)) { 56428 return makeAppropriateNetworkError(fetchParams) 56429 } 56430 56431 // 2. Set response to the result of running HTTP-network-or-cache 56432 // fetch given fetchParams, isAuthenticationFetch, and true. 56433 56434 // TODO (spec): The spec doesn't specify this but we need to cancel 56435 // the active response before we can start a new one. 56436 // https://github.com/whatwg/fetch/issues/1293 56437 fetchParams.controller.connection.destroy() 56438 56439 response = await httpNetworkOrCacheFetch( 56440 fetchParams, 56441 isAuthenticationFetch, 56442 true 56443 ) 56444 } 56445 56446 // 17. If isAuthenticationFetch is true, then create an authentication entry 56447 if (isAuthenticationFetch) { 56448 // TODO 56449 } 56450 56451 // 18. Return response. 56452 return response 56453 } 56454 56455 // https://fetch.spec.whatwg.org/#http-network-fetch 56456 async function httpNetworkFetch ( 56457 fetchParams, 56458 includeCredentials = false, 56459 forceNewConnection = false 56460 ) { 56461 assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed) 56462 56463 fetchParams.controller.connection = { 56464 abort: null, 56465 destroyed: false, 56466 destroy (err) { 56467 if (!this.destroyed) { 56468 this.destroyed = true 56469 this.abort?.(err ?? new DOMException('The operation was aborted.', 'AbortError')) 56470 } 56471 } 56472 } 56473 56474 // 1. Let request be fetchParams’s request. 56475 const request = fetchParams.request 56476 56477 // 2. Let response be null. 56478 let response = null 56479 56480 // 3. Let timingInfo be fetchParams’s timing info. 56481 const timingInfo = fetchParams.timingInfo 56482 56483 // 4. Let httpCache be the result of determining the HTTP cache partition, 56484 // given request. 56485 // TODO: cache 56486 const httpCache = null 56487 56488 // 5. If httpCache is null, then set request’s cache mode to "no-store". 56489 if (httpCache == null) { 56490 request.cache = 'no-store' 56491 } 56492 56493 // 6. Let networkPartitionKey be the result of determining the network 56494 // partition key given request. 56495 // TODO 56496 56497 // 7. Let newConnection be "yes" if forceNewConnection is true; otherwise 56498 // "no". 56499 const newConnection = forceNewConnection ? 'yes' : 'no' // eslint-disable-line no-unused-vars 56500 56501 // 8. Switch on request’s mode: 56502 if (request.mode === 'websocket') { 56503 // Let connection be the result of obtaining a WebSocket connection, 56504 // given request’s current URL. 56505 // TODO 56506 } else { 56507 // Let connection be the result of obtaining a connection, given 56508 // networkPartitionKey, request’s current URL’s origin, 56509 // includeCredentials, and forceNewConnection. 56510 // TODO 56511 } 56512 56513 // 9. Run these steps, but abort when the ongoing fetch is terminated: 56514 56515 // 1. If connection is failure, then return a network error. 56516 56517 // 2. Set timingInfo’s final connection timing info to the result of 56518 // calling clamp and coarsen connection timing info with connection’s 56519 // timing info, timingInfo’s post-redirect start time, and fetchParams’s 56520 // cross-origin isolated capability. 56521 56522 // 3. If connection is not an HTTP/2 connection, request’s body is non-null, 56523 // and request’s body’s source is null, then append (`Transfer-Encoding`, 56524 // `chunked`) to request’s header list. 56525 56526 // 4. Set timingInfo’s final network-request start time to the coarsened 56527 // shared current time given fetchParams’s cross-origin isolated 56528 // capability. 56529 56530 // 5. Set response to the result of making an HTTP request over connection 56531 // using request with the following caveats: 56532 56533 // - Follow the relevant requirements from HTTP. [HTTP] [HTTP-SEMANTICS] 56534 // [HTTP-COND] [HTTP-CACHING] [HTTP-AUTH] 56535 56536 // - If request’s body is non-null, and request’s body’s source is null, 56537 // then the user agent may have a buffer of up to 64 kibibytes and store 56538 // a part of request’s body in that buffer. If the user agent reads from 56539 // request’s body beyond that buffer’s size and the user agent needs to 56540 // resend request, then instead return a network error. 56541 56542 // - Set timingInfo’s final network-response start time to the coarsened 56543 // shared current time given fetchParams’s cross-origin isolated capability, 56544 // immediately after the user agent’s HTTP parser receives the first byte 56545 // of the response (e.g., frame header bytes for HTTP/2 or response status 56546 // line for HTTP/1.x). 56547 56548 // - Wait until all the headers are transmitted. 56549 56550 // - Any responses whose status is in the range 100 to 199, inclusive, 56551 // and is not 101, are to be ignored, except for the purposes of setting 56552 // timingInfo’s final network-response start time above. 56553 56554 // - If request’s header list contains `Transfer-Encoding`/`chunked` and 56555 // response is transferred via HTTP/1.0 or older, then return a network 56556 // error. 56557 56558 // - If the HTTP request results in a TLS client certificate dialog, then: 56559 56560 // 1. If request’s window is an environment settings object, make the 56561 // dialog available in request’s window. 56562 56563 // 2. Otherwise, return a network error. 56564 56565 // To transmit request’s body body, run these steps: 56566 let requestBody = null 56567 // 1. If body is null and fetchParams’s process request end-of-body is 56568 // non-null, then queue a fetch task given fetchParams’s process request 56569 // end-of-body and fetchParams’s task destination. 56570 if (request.body == null && fetchParams.processRequestEndOfBody) { 56571 queueMicrotask(() => fetchParams.processRequestEndOfBody()) 56572 } else if (request.body != null) { 56573 // 2. Otherwise, if body is non-null: 56574 56575 // 1. Let processBodyChunk given bytes be these steps: 56576 const processBodyChunk = async function * (bytes) { 56577 // 1. If the ongoing fetch is terminated, then abort these steps. 56578 if (isCancelled(fetchParams)) { 56579 return 56580 } 56581 56582 // 2. Run this step in parallel: transmit bytes. 56583 yield bytes 56584 56585 // 3. If fetchParams’s process request body is non-null, then run 56586 // fetchParams’s process request body given bytes’s length. 56587 fetchParams.processRequestBodyChunkLength?.(bytes.byteLength) 56588 } 56589 56590 // 2. Let processEndOfBody be these steps: 56591 const processEndOfBody = () => { 56592 // 1. If fetchParams is canceled, then abort these steps. 56593 if (isCancelled(fetchParams)) { 56594 return 56595 } 56596 56597 // 2. If fetchParams’s process request end-of-body is non-null, 56598 // then run fetchParams’s process request end-of-body. 56599 if (fetchParams.processRequestEndOfBody) { 56600 fetchParams.processRequestEndOfBody() 56601 } 56602 } 56603 56604 // 3. Let processBodyError given e be these steps: 56605 const processBodyError = (e) => { 56606 // 1. If fetchParams is canceled, then abort these steps. 56607 if (isCancelled(fetchParams)) { 56608 return 56609 } 56610 56611 // 2. If e is an "AbortError" DOMException, then abort fetchParams’s controller. 56612 if (e.name === 'AbortError') { 56613 fetchParams.controller.abort() 56614 } else { 56615 fetchParams.controller.terminate(e) 56616 } 56617 } 56618 56619 // 4. Incrementally read request’s body given processBodyChunk, processEndOfBody, 56620 // processBodyError, and fetchParams’s task destination. 56621 requestBody = (async function * () { 56622 try { 56623 for await (const bytes of request.body.stream) { 56624 yield * processBodyChunk(bytes) 56625 } 56626 processEndOfBody() 56627 } catch (err) { 56628 processBodyError(err) 56629 } 56630 })() 56631 } 56632 56633 try { 56634 // socket is only provided for websockets 56635 const { body, status, statusText, headersList, socket } = await dispatch({ body: requestBody }) 56636 56637 if (socket) { 56638 response = makeResponse({ status, statusText, headersList, socket }) 56639 } else { 56640 const iterator = body[Symbol.asyncIterator]() 56641 fetchParams.controller.next = () => iterator.next() 56642 56643 response = makeResponse({ status, statusText, headersList }) 56644 } 56645 } catch (err) { 56646 // 10. If aborted, then: 56647 if (err.name === 'AbortError') { 56648 // 1. If connection uses HTTP/2, then transmit an RST_STREAM frame. 56649 fetchParams.controller.connection.destroy() 56650 56651 // 2. Return the appropriate network error for fetchParams. 56652 return makeAppropriateNetworkError(fetchParams, err) 56653 } 56654 56655 return makeNetworkError(err) 56656 } 56657 56658 // 11. Let pullAlgorithm be an action that resumes the ongoing fetch 56659 // if it is suspended. 56660 const pullAlgorithm = () => { 56661 fetchParams.controller.resume() 56662 } 56663 56664 // 12. Let cancelAlgorithm be an algorithm that aborts fetchParams’s 56665 // controller with reason, given reason. 56666 const cancelAlgorithm = (reason) => { 56667 fetchParams.controller.abort(reason) 56668 } 56669 56670 // 13. Let highWaterMark be a non-negative, non-NaN number, chosen by 56671 // the user agent. 56672 // TODO 56673 56674 // 14. Let sizeAlgorithm be an algorithm that accepts a chunk object 56675 // and returns a non-negative, non-NaN, non-infinite number, chosen by the user agent. 56676 // TODO 56677 56678 // 15. Let stream be a new ReadableStream. 56679 // 16. Set up stream with pullAlgorithm set to pullAlgorithm, 56680 // cancelAlgorithm set to cancelAlgorithm, highWaterMark set to 56681 // highWaterMark, and sizeAlgorithm set to sizeAlgorithm. 56682 if (!ReadableStream) { 56683 ReadableStream = (__nccwpck_require__(35356).ReadableStream) 56684 } 56685 56686 const stream = new ReadableStream( 56687 { 56688 async start (controller) { 56689 fetchParams.controller.controller = controller 56690 }, 56691 async pull (controller) { 56692 await pullAlgorithm(controller) 56693 }, 56694 async cancel (reason) { 56695 await cancelAlgorithm(reason) 56696 } 56697 }, 56698 { 56699 highWaterMark: 0, 56700 size () { 56701 return 1 56702 } 56703 } 56704 ) 56705 56706 // 17. Run these steps, but abort when the ongoing fetch is terminated: 56707 56708 // 1. Set response’s body to a new body whose stream is stream. 56709 response.body = { stream } 56710 56711 // 2. If response is not a network error and request’s cache mode is 56712 // not "no-store", then update response in httpCache for request. 56713 // TODO 56714 56715 // 3. If includeCredentials is true and the user agent is not configured 56716 // to block cookies for request (see section 7 of [COOKIES]), then run the 56717 // "set-cookie-string" parsing algorithm (see section 5.2 of [COOKIES]) on 56718 // the value of each header whose name is a byte-case-insensitive match for 56719 // `Set-Cookie` in response’s header list, if any, and request’s current URL. 56720 // TODO 56721 56722 // 18. If aborted, then: 56723 // TODO 56724 56725 // 19. Run these steps in parallel: 56726 56727 // 1. Run these steps, but abort when fetchParams is canceled: 56728 fetchParams.controller.on('terminated', onAborted) 56729 fetchParams.controller.resume = async () => { 56730 // 1. While true 56731 while (true) { 56732 // 1-3. See onData... 56733 56734 // 4. Set bytes to the result of handling content codings given 56735 // codings and bytes. 56736 let bytes 56737 let isFailure 56738 try { 56739 const { done, value } = await fetchParams.controller.next() 56740 56741 if (isAborted(fetchParams)) { 56742 break 56743 } 56744 56745 bytes = done ? undefined : value 56746 } catch (err) { 56747 if (fetchParams.controller.ended && !timingInfo.encodedBodySize) { 56748 // zlib doesn't like empty streams. 56749 bytes = undefined 56750 } else { 56751 bytes = err 56752 56753 // err may be propagated from the result of calling readablestream.cancel, 56754 // which might not be an error. https://github.com/nodejs/undici/issues/2009 56755 isFailure = true 56756 } 56757 } 56758 56759 if (bytes === undefined) { 56760 // 2. Otherwise, if the bytes transmission for response’s message 56761 // body is done normally and stream is readable, then close 56762 // stream, finalize response for fetchParams and response, and 56763 // abort these in-parallel steps. 56764 readableStreamClose(fetchParams.controller.controller) 56765 56766 finalizeResponse(fetchParams, response) 56767 56768 return 56769 } 56770 56771 // 5. Increase timingInfo’s decoded body size by bytes’s length. 56772 timingInfo.decodedBodySize += bytes?.byteLength ?? 0 56773 56774 // 6. If bytes is failure, then terminate fetchParams’s controller. 56775 if (isFailure) { 56776 fetchParams.controller.terminate(bytes) 56777 return 56778 } 56779 56780 // 7. Enqueue a Uint8Array wrapping an ArrayBuffer containing bytes 56781 // into stream. 56782 fetchParams.controller.controller.enqueue(new Uint8Array(bytes)) 56783 56784 // 8. If stream is errored, then terminate the ongoing fetch. 56785 if (isErrored(stream)) { 56786 fetchParams.controller.terminate() 56787 return 56788 } 56789 56790 // 9. If stream doesn’t need more data ask the user agent to suspend 56791 // the ongoing fetch. 56792 if (!fetchParams.controller.controller.desiredSize) { 56793 return 56794 } 56795 } 56796 } 56797 56798 // 2. If aborted, then: 56799 function onAborted (reason) { 56800 // 2. If fetchParams is aborted, then: 56801 if (isAborted(fetchParams)) { 56802 // 1. Set response’s aborted flag. 56803 response.aborted = true 56804 56805 // 2. If stream is readable, then error stream with the result of 56806 // deserialize a serialized abort reason given fetchParams’s 56807 // controller’s serialized abort reason and an 56808 // implementation-defined realm. 56809 if (isReadable(stream)) { 56810 fetchParams.controller.controller.error( 56811 fetchParams.controller.serializedAbortReason 56812 ) 56813 } 56814 } else { 56815 // 3. Otherwise, if stream is readable, error stream with a TypeError. 56816 if (isReadable(stream)) { 56817 fetchParams.controller.controller.error(new TypeError('terminated', { 56818 cause: isErrorLike(reason) ? reason : undefined 56819 })) 56820 } 56821 } 56822 56823 // 4. If connection uses HTTP/2, then transmit an RST_STREAM frame. 56824 // 5. Otherwise, the user agent should close connection unless it would be bad for performance to do so. 56825 fetchParams.controller.connection.destroy() 56826 } 56827 56828 // 20. Return response. 56829 return response 56830 56831 async function dispatch ({ body }) { 56832 const url = requestCurrentURL(request) 56833 /** @type {import('../..').Agent} */ 56834 const agent = fetchParams.controller.dispatcher 56835 56836 return new Promise((resolve, reject) => agent.dispatch( 56837 { 56838 path: url.pathname + url.search, 56839 origin: url.origin, 56840 method: request.method, 56841 body: fetchParams.controller.dispatcher.isMockActive ? request.body && (request.body.source || request.body.stream) : body, 56842 headers: request.headersList.entries, 56843 maxRedirections: 0, 56844 upgrade: request.mode === 'websocket' ? 'websocket' : undefined 56845 }, 56846 { 56847 body: null, 56848 abort: null, 56849 56850 onConnect (abort) { 56851 // TODO (fix): Do we need connection here? 56852 const { connection } = fetchParams.controller 56853 56854 if (connection.destroyed) { 56855 abort(new DOMException('The operation was aborted.', 'AbortError')) 56856 } else { 56857 fetchParams.controller.on('terminated', abort) 56858 this.abort = connection.abort = abort 56859 } 56860 }, 56861 56862 onHeaders (status, headersList, resume, statusText) { 56863 if (status < 200) { 56864 return 56865 } 56866 56867 let codings = [] 56868 let location = '' 56869 56870 const headers = new Headers() 56871 56872 // For H2, the headers are a plain JS object 56873 // We distinguish between them and iterate accordingly 56874 if (Array.isArray(headersList)) { 56875 for (let n = 0; n < headersList.length; n += 2) { 56876 const key = headersList[n + 0].toString('latin1') 56877 const val = headersList[n + 1].toString('latin1') 56878 if (key.toLowerCase() === 'content-encoding') { 56879 // https://www.rfc-editor.org/rfc/rfc7231#section-3.1.2.1 56880 // "All content-coding values are case-insensitive..." 56881 codings = val.toLowerCase().split(',').map((x) => x.trim()) 56882 } else if (key.toLowerCase() === 'location') { 56883 location = val 56884 } 56885 56886 headers[kHeadersList].append(key, val) 56887 } 56888 } else { 56889 const keys = Object.keys(headersList) 56890 for (const key of keys) { 56891 const val = headersList[key] 56892 if (key.toLowerCase() === 'content-encoding') { 56893 // https://www.rfc-editor.org/rfc/rfc7231#section-3.1.2.1 56894 // "All content-coding values are case-insensitive..." 56895 codings = val.toLowerCase().split(',').map((x) => x.trim()).reverse() 56896 } else if (key.toLowerCase() === 'location') { 56897 location = val 56898 } 56899 56900 headers[kHeadersList].append(key, val) 56901 } 56902 } 56903 56904 this.body = new Readable({ read: resume }) 56905 56906 const decoders = [] 56907 56908 const willFollow = request.redirect === 'follow' && 56909 location && 56910 redirectStatusSet.has(status) 56911 56912 // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding 56913 if (request.method !== 'HEAD' && request.method !== 'CONNECT' && !nullBodyStatus.includes(status) && !willFollow) { 56914 for (const coding of codings) { 56915 // https://www.rfc-editor.org/rfc/rfc9112.html#section-7.2 56916 if (coding === 'x-gzip' || coding === 'gzip') { 56917 decoders.push(zlib.createGunzip({ 56918 // Be less strict when decoding compressed responses, since sometimes 56919 // servers send slightly invalid responses that are still accepted 56920 // by common browsers. 56921 // Always using Z_SYNC_FLUSH is what cURL does. 56922 flush: zlib.constants.Z_SYNC_FLUSH, 56923 finishFlush: zlib.constants.Z_SYNC_FLUSH 56924 })) 56925 } else if (coding === 'deflate') { 56926 decoders.push(zlib.createInflate()) 56927 } else if (coding === 'br') { 56928 decoders.push(zlib.createBrotliDecompress()) 56929 } else { 56930 decoders.length = 0 56931 break 56932 } 56933 } 56934 } 56935 56936 resolve({ 56937 status, 56938 statusText, 56939 headersList: headers[kHeadersList], 56940 body: decoders.length 56941 ? pipeline(this.body, ...decoders, () => { }) 56942 : this.body.on('error', () => {}) 56943 }) 56944 56945 return true 56946 }, 56947 56948 onData (chunk) { 56949 if (fetchParams.controller.dump) { 56950 return 56951 } 56952 56953 // 1. If one or more bytes have been transmitted from response’s 56954 // message body, then: 56955 56956 // 1. Let bytes be the transmitted bytes. 56957 const bytes = chunk 56958 56959 // 2. Let codings be the result of extracting header list values 56960 // given `Content-Encoding` and response’s header list. 56961 // See pullAlgorithm. 56962 56963 // 3. Increase timingInfo’s encoded body size by bytes’s length. 56964 timingInfo.encodedBodySize += bytes.byteLength 56965 56966 // 4. See pullAlgorithm... 56967 56968 return this.body.push(bytes) 56969 }, 56970 56971 onComplete () { 56972 if (this.abort) { 56973 fetchParams.controller.off('terminated', this.abort) 56974 } 56975 56976 fetchParams.controller.ended = true 56977 56978 this.body.push(null) 56979 }, 56980 56981 onError (error) { 56982 if (this.abort) { 56983 fetchParams.controller.off('terminated', this.abort) 56984 } 56985 56986 this.body?.destroy(error) 56987 56988 fetchParams.controller.terminate(error) 56989 56990 reject(error) 56991 }, 56992 56993 onUpgrade (status, headersList, socket) { 56994 if (status !== 101) { 56995 return 56996 } 56997 56998 const headers = new Headers() 56999 57000 for (let n = 0; n < headersList.length; n += 2) { 57001 const key = headersList[n + 0].toString('latin1') 57002 const val = headersList[n + 1].toString('latin1') 57003 57004 headers[kHeadersList].append(key, val) 57005 } 57006 57007 resolve({ 57008 status, 57009 statusText: STATUS_CODES[status], 57010 headersList: headers[kHeadersList], 57011 socket 57012 }) 57013 57014 return true 57015 } 57016 } 57017 )) 57018 } 57019 } 57020 57021 module.exports = { 57022 fetch, 57023 Fetch, 57024 fetching, 57025 finalizeAndReportTiming 57026 } 57027 57028 57029 /***/ }), 57030 57031 /***/ 48359: 57032 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 57033 57034 "use strict"; 57035 /* globals AbortController */ 57036 57037 57038 57039 const { extractBody, mixinBody, cloneBody } = __nccwpck_require__(41472) 57040 const { Headers, fill: fillHeaders, HeadersList } = __nccwpck_require__(10554) 57041 const { FinalizationRegistry } = __nccwpck_require__(56436)() 57042 const util = __nccwpck_require__(83983) 57043 const { 57044 isValidHTTPToken, 57045 sameOrigin, 57046 normalizeMethod, 57047 makePolicyContainer, 57048 normalizeMethodRecord 57049 } = __nccwpck_require__(52538) 57050 const { 57051 forbiddenMethodsSet, 57052 corsSafeListedMethodsSet, 57053 referrerPolicy, 57054 requestRedirect, 57055 requestMode, 57056 requestCredentials, 57057 requestCache, 57058 requestDuplex 57059 } = __nccwpck_require__(41037) 57060 const { kEnumerableProperty } = util 57061 const { kHeaders, kSignal, kState, kGuard, kRealm } = __nccwpck_require__(15861) 57062 const { webidl } = __nccwpck_require__(21744) 57063 const { getGlobalOrigin } = __nccwpck_require__(71246) 57064 const { URLSerializer } = __nccwpck_require__(685) 57065 const { kHeadersList, kConstruct } = __nccwpck_require__(72785) 57066 const assert = __nccwpck_require__(39491) 57067 const { getMaxListeners, setMaxListeners, getEventListeners, defaultMaxListeners } = __nccwpck_require__(82361) 57068 57069 let TransformStream = globalThis.TransformStream 57070 57071 const kAbortController = Symbol('abortController') 57072 57073 const requestFinalizer = new FinalizationRegistry(({ signal, abort }) => { 57074 signal.removeEventListener('abort', abort) 57075 }) 57076 57077 // https://fetch.spec.whatwg.org/#request-class 57078 class Request { 57079 // https://fetch.spec.whatwg.org/#dom-request 57080 constructor (input, init = {}) { 57081 if (input === kConstruct) { 57082 return 57083 } 57084 57085 webidl.argumentLengthCheck(arguments, 1, { header: 'Request constructor' }) 57086 57087 input = webidl.converters.RequestInfo(input) 57088 init = webidl.converters.RequestInit(init) 57089 57090 // https://html.spec.whatwg.org/multipage/webappapis.html#environment-settings-object 57091 this[kRealm] = { 57092 settingsObject: { 57093 baseUrl: getGlobalOrigin(), 57094 get origin () { 57095 return this.baseUrl?.origin 57096 }, 57097 policyContainer: makePolicyContainer() 57098 } 57099 } 57100 57101 // 1. Let request be null. 57102 let request = null 57103 57104 // 2. Let fallbackMode be null. 57105 let fallbackMode = null 57106 57107 // 3. Let baseURL be this’s relevant settings object’s API base URL. 57108 const baseUrl = this[kRealm].settingsObject.baseUrl 57109 57110 // 4. Let signal be null. 57111 let signal = null 57112 57113 // 5. If input is a string, then: 57114 if (typeof input === 'string') { 57115 // 1. Let parsedURL be the result of parsing input with baseURL. 57116 // 2. If parsedURL is failure, then throw a TypeError. 57117 let parsedURL 57118 try { 57119 parsedURL = new URL(input, baseUrl) 57120 } catch (err) { 57121 throw new TypeError('Failed to parse URL from ' + input, { cause: err }) 57122 } 57123 57124 // 3. If parsedURL includes credentials, then throw a TypeError. 57125 if (parsedURL.username || parsedURL.password) { 57126 throw new TypeError( 57127 'Request cannot be constructed from a URL that includes credentials: ' + 57128 input 57129 ) 57130 } 57131 57132 // 4. Set request to a new request whose URL is parsedURL. 57133 request = makeRequest({ urlList: [parsedURL] }) 57134 57135 // 5. Set fallbackMode to "cors". 57136 fallbackMode = 'cors' 57137 } else { 57138 // 6. Otherwise: 57139 57140 // 7. Assert: input is a Request object. 57141 assert(input instanceof Request) 57142 57143 // 8. Set request to input’s request. 57144 request = input[kState] 57145 57146 // 9. Set signal to input’s signal. 57147 signal = input[kSignal] 57148 } 57149 57150 // 7. Let origin be this’s relevant settings object’s origin. 57151 const origin = this[kRealm].settingsObject.origin 57152 57153 // 8. Let window be "client". 57154 let window = 'client' 57155 57156 // 9. If request’s window is an environment settings object and its origin 57157 // is same origin with origin, then set window to request’s window. 57158 if ( 57159 request.window?.constructor?.name === 'EnvironmentSettingsObject' && 57160 sameOrigin(request.window, origin) 57161 ) { 57162 window = request.window 57163 } 57164 57165 // 10. If init["window"] exists and is non-null, then throw a TypeError. 57166 if (init.window != null) { 57167 throw new TypeError(`'window' option '${window}' must be null`) 57168 } 57169 57170 // 11. If init["window"] exists, then set window to "no-window". 57171 if ('window' in init) { 57172 window = 'no-window' 57173 } 57174 57175 // 12. Set request to a new request with the following properties: 57176 request = makeRequest({ 57177 // URL request’s URL. 57178 // undici implementation note: this is set as the first item in request's urlList in makeRequest 57179 // method request’s method. 57180 method: request.method, 57181 // header list A copy of request’s header list. 57182 // undici implementation note: headersList is cloned in makeRequest 57183 headersList: request.headersList, 57184 // unsafe-request flag Set. 57185 unsafeRequest: request.unsafeRequest, 57186 // client This’s relevant settings object. 57187 client: this[kRealm].settingsObject, 57188 // window window. 57189 window, 57190 // priority request’s priority. 57191 priority: request.priority, 57192 // origin request’s origin. The propagation of the origin is only significant for navigation requests 57193 // being handled by a service worker. In this scenario a request can have an origin that is different 57194 // from the current client. 57195 origin: request.origin, 57196 // referrer request’s referrer. 57197 referrer: request.referrer, 57198 // referrer policy request’s referrer policy. 57199 referrerPolicy: request.referrerPolicy, 57200 // mode request’s mode. 57201 mode: request.mode, 57202 // credentials mode request’s credentials mode. 57203 credentials: request.credentials, 57204 // cache mode request’s cache mode. 57205 cache: request.cache, 57206 // redirect mode request’s redirect mode. 57207 redirect: request.redirect, 57208 // integrity metadata request’s integrity metadata. 57209 integrity: request.integrity, 57210 // keepalive request’s keepalive. 57211 keepalive: request.keepalive, 57212 // reload-navigation flag request’s reload-navigation flag. 57213 reloadNavigation: request.reloadNavigation, 57214 // history-navigation flag request’s history-navigation flag. 57215 historyNavigation: request.historyNavigation, 57216 // URL list A clone of request’s URL list. 57217 urlList: [...request.urlList] 57218 }) 57219 57220 const initHasKey = Object.keys(init).length !== 0 57221 57222 // 13. If init is not empty, then: 57223 if (initHasKey) { 57224 // 1. If request’s mode is "navigate", then set it to "same-origin". 57225 if (request.mode === 'navigate') { 57226 request.mode = 'same-origin' 57227 } 57228 57229 // 2. Unset request’s reload-navigation flag. 57230 request.reloadNavigation = false 57231 57232 // 3. Unset request’s history-navigation flag. 57233 request.historyNavigation = false 57234 57235 // 4. Set request’s origin to "client". 57236 request.origin = 'client' 57237 57238 // 5. Set request’s referrer to "client" 57239 request.referrer = 'client' 57240 57241 // 6. Set request’s referrer policy to the empty string. 57242 request.referrerPolicy = '' 57243 57244 // 7. Set request’s URL to request’s current URL. 57245 request.url = request.urlList[request.urlList.length - 1] 57246 57247 // 8. Set request’s URL list to « request’s URL ». 57248 request.urlList = [request.url] 57249 } 57250 57251 // 14. If init["referrer"] exists, then: 57252 if (init.referrer !== undefined) { 57253 // 1. Let referrer be init["referrer"]. 57254 const referrer = init.referrer 57255 57256 // 2. If referrer is the empty string, then set request’s referrer to "no-referrer". 57257 if (referrer === '') { 57258 request.referrer = 'no-referrer' 57259 } else { 57260 // 1. Let parsedReferrer be the result of parsing referrer with 57261 // baseURL. 57262 // 2. If parsedReferrer is failure, then throw a TypeError. 57263 let parsedReferrer 57264 try { 57265 parsedReferrer = new URL(referrer, baseUrl) 57266 } catch (err) { 57267 throw new TypeError(`Referrer "${referrer}" is not a valid URL.`, { cause: err }) 57268 } 57269 57270 // 3. If one of the following is true 57271 // - parsedReferrer’s scheme is "about" and path is the string "client" 57272 // - parsedReferrer’s origin is not same origin with origin 57273 // then set request’s referrer to "client". 57274 if ( 57275 (parsedReferrer.protocol === 'about:' && parsedReferrer.hostname === 'client') || 57276 (origin && !sameOrigin(parsedReferrer, this[kRealm].settingsObject.baseUrl)) 57277 ) { 57278 request.referrer = 'client' 57279 } else { 57280 // 4. Otherwise, set request’s referrer to parsedReferrer. 57281 request.referrer = parsedReferrer 57282 } 57283 } 57284 } 57285 57286 // 15. If init["referrerPolicy"] exists, then set request’s referrer policy 57287 // to it. 57288 if (init.referrerPolicy !== undefined) { 57289 request.referrerPolicy = init.referrerPolicy 57290 } 57291 57292 // 16. Let mode be init["mode"] if it exists, and fallbackMode otherwise. 57293 let mode 57294 if (init.mode !== undefined) { 57295 mode = init.mode 57296 } else { 57297 mode = fallbackMode 57298 } 57299 57300 // 17. If mode is "navigate", then throw a TypeError. 57301 if (mode === 'navigate') { 57302 throw webidl.errors.exception({ 57303 header: 'Request constructor', 57304 message: 'invalid request mode navigate.' 57305 }) 57306 } 57307 57308 // 18. If mode is non-null, set request’s mode to mode. 57309 if (mode != null) { 57310 request.mode = mode 57311 } 57312 57313 // 19. If init["credentials"] exists, then set request’s credentials mode 57314 // to it. 57315 if (init.credentials !== undefined) { 57316 request.credentials = init.credentials 57317 } 57318 57319 // 18. If init["cache"] exists, then set request’s cache mode to it. 57320 if (init.cache !== undefined) { 57321 request.cache = init.cache 57322 } 57323 57324 // 21. If request’s cache mode is "only-if-cached" and request’s mode is 57325 // not "same-origin", then throw a TypeError. 57326 if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { 57327 throw new TypeError( 57328 "'only-if-cached' can be set only with 'same-origin' mode" 57329 ) 57330 } 57331 57332 // 22. If init["redirect"] exists, then set request’s redirect mode to it. 57333 if (init.redirect !== undefined) { 57334 request.redirect = init.redirect 57335 } 57336 57337 // 23. If init["integrity"] exists, then set request’s integrity metadata to it. 57338 if (init.integrity != null) { 57339 request.integrity = String(init.integrity) 57340 } 57341 57342 // 24. If init["keepalive"] exists, then set request’s keepalive to it. 57343 if (init.keepalive !== undefined) { 57344 request.keepalive = Boolean(init.keepalive) 57345 } 57346 57347 // 25. If init["method"] exists, then: 57348 if (init.method !== undefined) { 57349 // 1. Let method be init["method"]. 57350 let method = init.method 57351 57352 // 2. If method is not a method or method is a forbidden method, then 57353 // throw a TypeError. 57354 if (!isValidHTTPToken(method)) { 57355 throw new TypeError(`'${method}' is not a valid HTTP method.`) 57356 } 57357 57358 if (forbiddenMethodsSet.has(method.toUpperCase())) { 57359 throw new TypeError(`'${method}' HTTP method is unsupported.`) 57360 } 57361 57362 // 3. Normalize method. 57363 method = normalizeMethodRecord[method] ?? normalizeMethod(method) 57364 57365 // 4. Set request’s method to method. 57366 request.method = method 57367 } 57368 57369 // 26. If init["signal"] exists, then set signal to it. 57370 if (init.signal !== undefined) { 57371 signal = init.signal 57372 } 57373 57374 // 27. Set this’s request to request. 57375 this[kState] = request 57376 57377 // 28. Set this’s signal to a new AbortSignal object with this’s relevant 57378 // Realm. 57379 // TODO: could this be simplified with AbortSignal.any 57380 // (https://dom.spec.whatwg.org/#dom-abortsignal-any) 57381 const ac = new AbortController() 57382 this[kSignal] = ac.signal 57383 this[kSignal][kRealm] = this[kRealm] 57384 57385 // 29. If signal is not null, then make this’s signal follow signal. 57386 if (signal != null) { 57387 if ( 57388 !signal || 57389 typeof signal.aborted !== 'boolean' || 57390 typeof signal.addEventListener !== 'function' 57391 ) { 57392 throw new TypeError( 57393 "Failed to construct 'Request': member signal is not of type AbortSignal." 57394 ) 57395 } 57396 57397 if (signal.aborted) { 57398 ac.abort(signal.reason) 57399 } else { 57400 // Keep a strong ref to ac while request object 57401 // is alive. This is needed to prevent AbortController 57402 // from being prematurely garbage collected. 57403 // See, https://github.com/nodejs/undici/issues/1926. 57404 this[kAbortController] = ac 57405 57406 const acRef = new WeakRef(ac) 57407 const abort = function () { 57408 const ac = acRef.deref() 57409 if (ac !== undefined) { 57410 ac.abort(this.reason) 57411 } 57412 } 57413 57414 // Third-party AbortControllers may not work with these. 57415 // See, https://github.com/nodejs/undici/pull/1910#issuecomment-1464495619. 57416 try { 57417 // If the max amount of listeners is equal to the default, increase it 57418 // This is only available in node >= v19.9.0 57419 if (typeof getMaxListeners === 'function' && getMaxListeners(signal) === defaultMaxListeners) { 57420 setMaxListeners(100, signal) 57421 } else if (getEventListeners(signal, 'abort').length >= defaultMaxListeners) { 57422 setMaxListeners(100, signal) 57423 } 57424 } catch {} 57425 57426 util.addAbortListener(signal, abort) 57427 requestFinalizer.register(ac, { signal, abort }) 57428 } 57429 } 57430 57431 // 30. Set this’s headers to a new Headers object with this’s relevant 57432 // Realm, whose header list is request’s header list and guard is 57433 // "request". 57434 this[kHeaders] = new Headers(kConstruct) 57435 this[kHeaders][kHeadersList] = request.headersList 57436 this[kHeaders][kGuard] = 'request' 57437 this[kHeaders][kRealm] = this[kRealm] 57438 57439 // 31. If this’s request’s mode is "no-cors", then: 57440 if (mode === 'no-cors') { 57441 // 1. If this’s request’s method is not a CORS-safelisted method, 57442 // then throw a TypeError. 57443 if (!corsSafeListedMethodsSet.has(request.method)) { 57444 throw new TypeError( 57445 `'${request.method} is unsupported in no-cors mode.` 57446 ) 57447 } 57448 57449 // 2. Set this’s headers’s guard to "request-no-cors". 57450 this[kHeaders][kGuard] = 'request-no-cors' 57451 } 57452 57453 // 32. If init is not empty, then: 57454 if (initHasKey) { 57455 /** @type {HeadersList} */ 57456 const headersList = this[kHeaders][kHeadersList] 57457 // 1. Let headers be a copy of this’s headers and its associated header 57458 // list. 57459 // 2. If init["headers"] exists, then set headers to init["headers"]. 57460 const headers = init.headers !== undefined ? init.headers : new HeadersList(headersList) 57461 57462 // 3. Empty this’s headers’s header list. 57463 headersList.clear() 57464 57465 // 4. If headers is a Headers object, then for each header in its header 57466 // list, append header’s name/header’s value to this’s headers. 57467 if (headers instanceof HeadersList) { 57468 for (const [key, val] of headers) { 57469 headersList.append(key, val) 57470 } 57471 // Note: Copy the `set-cookie` meta-data. 57472 headersList.cookies = headers.cookies 57473 } else { 57474 // 5. Otherwise, fill this’s headers with headers. 57475 fillHeaders(this[kHeaders], headers) 57476 } 57477 } 57478 57479 // 33. Let inputBody be input’s request’s body if input is a Request 57480 // object; otherwise null. 57481 const inputBody = input instanceof Request ? input[kState].body : null 57482 57483 // 34. If either init["body"] exists and is non-null or inputBody is 57484 // non-null, and request’s method is `GET` or `HEAD`, then throw a 57485 // TypeError. 57486 if ( 57487 (init.body != null || inputBody != null) && 57488 (request.method === 'GET' || request.method === 'HEAD') 57489 ) { 57490 throw new TypeError('Request with GET/HEAD method cannot have body.') 57491 } 57492 57493 // 35. Let initBody be null. 57494 let initBody = null 57495 57496 // 36. If init["body"] exists and is non-null, then: 57497 if (init.body != null) { 57498 // 1. Let Content-Type be null. 57499 // 2. Set initBody and Content-Type to the result of extracting 57500 // init["body"], with keepalive set to request’s keepalive. 57501 const [extractedBody, contentType] = extractBody( 57502 init.body, 57503 request.keepalive 57504 ) 57505 initBody = extractedBody 57506 57507 // 3, If Content-Type is non-null and this’s headers’s header list does 57508 // not contain `Content-Type`, then append `Content-Type`/Content-Type to 57509 // this’s headers. 57510 if (contentType && !this[kHeaders][kHeadersList].contains('content-type')) { 57511 this[kHeaders].append('content-type', contentType) 57512 } 57513 } 57514 57515 // 37. Let inputOrInitBody be initBody if it is non-null; otherwise 57516 // inputBody. 57517 const inputOrInitBody = initBody ?? inputBody 57518 57519 // 38. If inputOrInitBody is non-null and inputOrInitBody’s source is 57520 // null, then: 57521 if (inputOrInitBody != null && inputOrInitBody.source == null) { 57522 // 1. If initBody is non-null and init["duplex"] does not exist, 57523 // then throw a TypeError. 57524 if (initBody != null && init.duplex == null) { 57525 throw new TypeError('RequestInit: duplex option is required when sending a body.') 57526 } 57527 57528 // 2. If this’s request’s mode is neither "same-origin" nor "cors", 57529 // then throw a TypeError. 57530 if (request.mode !== 'same-origin' && request.mode !== 'cors') { 57531 throw new TypeError( 57532 'If request is made from ReadableStream, mode should be "same-origin" or "cors"' 57533 ) 57534 } 57535 57536 // 3. Set this’s request’s use-CORS-preflight flag. 57537 request.useCORSPreflightFlag = true 57538 } 57539 57540 // 39. Let finalBody be inputOrInitBody. 57541 let finalBody = inputOrInitBody 57542 57543 // 40. If initBody is null and inputBody is non-null, then: 57544 if (initBody == null && inputBody != null) { 57545 // 1. If input is unusable, then throw a TypeError. 57546 if (util.isDisturbed(inputBody.stream) || inputBody.stream.locked) { 57547 throw new TypeError( 57548 'Cannot construct a Request with a Request object that has already been used.' 57549 ) 57550 } 57551 57552 // 2. Set finalBody to the result of creating a proxy for inputBody. 57553 if (!TransformStream) { 57554 TransformStream = (__nccwpck_require__(35356).TransformStream) 57555 } 57556 57557 // https://streams.spec.whatwg.org/#readablestream-create-a-proxy 57558 const identityTransform = new TransformStream() 57559 inputBody.stream.pipeThrough(identityTransform) 57560 finalBody = { 57561 source: inputBody.source, 57562 length: inputBody.length, 57563 stream: identityTransform.readable 57564 } 57565 } 57566 57567 // 41. Set this’s request’s body to finalBody. 57568 this[kState].body = finalBody 57569 } 57570 57571 // Returns request’s HTTP method, which is "GET" by default. 57572 get method () { 57573 webidl.brandCheck(this, Request) 57574 57575 // The method getter steps are to return this’s request’s method. 57576 return this[kState].method 57577 } 57578 57579 // Returns the URL of request as a string. 57580 get url () { 57581 webidl.brandCheck(this, Request) 57582 57583 // The url getter steps are to return this’s request’s URL, serialized. 57584 return URLSerializer(this[kState].url) 57585 } 57586 57587 // Returns a Headers object consisting of the headers associated with request. 57588 // Note that headers added in the network layer by the user agent will not 57589 // be accounted for in this object, e.g., the "Host" header. 57590 get headers () { 57591 webidl.brandCheck(this, Request) 57592 57593 // The headers getter steps are to return this’s headers. 57594 return this[kHeaders] 57595 } 57596 57597 // Returns the kind of resource requested by request, e.g., "document" 57598 // or "script". 57599 get destination () { 57600 webidl.brandCheck(this, Request) 57601 57602 // The destination getter are to return this’s request’s destination. 57603 return this[kState].destination 57604 } 57605 57606 // Returns the referrer of request. Its value can be a same-origin URL if 57607 // explicitly set in init, the empty string to indicate no referrer, and 57608 // "about:client" when defaulting to the global’s default. This is used 57609 // during fetching to determine the value of the `Referer` header of the 57610 // request being made. 57611 get referrer () { 57612 webidl.brandCheck(this, Request) 57613 57614 // 1. If this’s request’s referrer is "no-referrer", then return the 57615 // empty string. 57616 if (this[kState].referrer === 'no-referrer') { 57617 return '' 57618 } 57619 57620 // 2. If this’s request’s referrer is "client", then return 57621 // "about:client". 57622 if (this[kState].referrer === 'client') { 57623 return 'about:client' 57624 } 57625 57626 // Return this’s request’s referrer, serialized. 57627 return this[kState].referrer.toString() 57628 } 57629 57630 // Returns the referrer policy associated with request. 57631 // This is used during fetching to compute the value of the request’s 57632 // referrer. 57633 get referrerPolicy () { 57634 webidl.brandCheck(this, Request) 57635 57636 // The referrerPolicy getter steps are to return this’s request’s referrer policy. 57637 return this[kState].referrerPolicy 57638 } 57639 57640 // Returns the mode associated with request, which is a string indicating 57641 // whether the request will use CORS, or will be restricted to same-origin 57642 // URLs. 57643 get mode () { 57644 webidl.brandCheck(this, Request) 57645 57646 // The mode getter steps are to return this’s request’s mode. 57647 return this[kState].mode 57648 } 57649 57650 // Returns the credentials mode associated with request, 57651 // which is a string indicating whether credentials will be sent with the 57652 // request always, never, or only when sent to a same-origin URL. 57653 get credentials () { 57654 // The credentials getter steps are to return this’s request’s credentials mode. 57655 return this[kState].credentials 57656 } 57657 57658 // Returns the cache mode associated with request, 57659 // which is a string indicating how the request will 57660 // interact with the browser’s cache when fetching. 57661 get cache () { 57662 webidl.brandCheck(this, Request) 57663 57664 // The cache getter steps are to return this’s request’s cache mode. 57665 return this[kState].cache 57666 } 57667 57668 // Returns the redirect mode associated with request, 57669 // which is a string indicating how redirects for the 57670 // request will be handled during fetching. A request 57671 // will follow redirects by default. 57672 get redirect () { 57673 webidl.brandCheck(this, Request) 57674 57675 // The redirect getter steps are to return this’s request’s redirect mode. 57676 return this[kState].redirect 57677 } 57678 57679 // Returns request’s subresource integrity metadata, which is a 57680 // cryptographic hash of the resource being fetched. Its value 57681 // consists of multiple hashes separated by whitespace. [SRI] 57682 get integrity () { 57683 webidl.brandCheck(this, Request) 57684 57685 // The integrity getter steps are to return this’s request’s integrity 57686 // metadata. 57687 return this[kState].integrity 57688 } 57689 57690 // Returns a boolean indicating whether or not request can outlive the 57691 // global in which it was created. 57692 get keepalive () { 57693 webidl.brandCheck(this, Request) 57694 57695 // The keepalive getter steps are to return this’s request’s keepalive. 57696 return this[kState].keepalive 57697 } 57698 57699 // Returns a boolean indicating whether or not request is for a reload 57700 // navigation. 57701 get isReloadNavigation () { 57702 webidl.brandCheck(this, Request) 57703 57704 // The isReloadNavigation getter steps are to return true if this’s 57705 // request’s reload-navigation flag is set; otherwise false. 57706 return this[kState].reloadNavigation 57707 } 57708 57709 // Returns a boolean indicating whether or not request is for a history 57710 // navigation (a.k.a. back-foward navigation). 57711 get isHistoryNavigation () { 57712 webidl.brandCheck(this, Request) 57713 57714 // The isHistoryNavigation getter steps are to return true if this’s request’s 57715 // history-navigation flag is set; otherwise false. 57716 return this[kState].historyNavigation 57717 } 57718 57719 // Returns the signal associated with request, which is an AbortSignal 57720 // object indicating whether or not request has been aborted, and its 57721 // abort event handler. 57722 get signal () { 57723 webidl.brandCheck(this, Request) 57724 57725 // The signal getter steps are to return this’s signal. 57726 return this[kSignal] 57727 } 57728 57729 get body () { 57730 webidl.brandCheck(this, Request) 57731 57732 return this[kState].body ? this[kState].body.stream : null 57733 } 57734 57735 get bodyUsed () { 57736 webidl.brandCheck(this, Request) 57737 57738 return !!this[kState].body && util.isDisturbed(this[kState].body.stream) 57739 } 57740 57741 get duplex () { 57742 webidl.brandCheck(this, Request) 57743 57744 return 'half' 57745 } 57746 57747 // Returns a clone of request. 57748 clone () { 57749 webidl.brandCheck(this, Request) 57750 57751 // 1. If this is unusable, then throw a TypeError. 57752 if (this.bodyUsed || this.body?.locked) { 57753 throw new TypeError('unusable') 57754 } 57755 57756 // 2. Let clonedRequest be the result of cloning this’s request. 57757 const clonedRequest = cloneRequest(this[kState]) 57758 57759 // 3. Let clonedRequestObject be the result of creating a Request object, 57760 // given clonedRequest, this’s headers’s guard, and this’s relevant Realm. 57761 const clonedRequestObject = new Request(kConstruct) 57762 clonedRequestObject[kState] = clonedRequest 57763 clonedRequestObject[kRealm] = this[kRealm] 57764 clonedRequestObject[kHeaders] = new Headers(kConstruct) 57765 clonedRequestObject[kHeaders][kHeadersList] = clonedRequest.headersList 57766 clonedRequestObject[kHeaders][kGuard] = this[kHeaders][kGuard] 57767 clonedRequestObject[kHeaders][kRealm] = this[kHeaders][kRealm] 57768 57769 // 4. Make clonedRequestObject’s signal follow this’s signal. 57770 const ac = new AbortController() 57771 if (this.signal.aborted) { 57772 ac.abort(this.signal.reason) 57773 } else { 57774 util.addAbortListener( 57775 this.signal, 57776 () => { 57777 ac.abort(this.signal.reason) 57778 } 57779 ) 57780 } 57781 clonedRequestObject[kSignal] = ac.signal 57782 57783 // 4. Return clonedRequestObject. 57784 return clonedRequestObject 57785 } 57786 } 57787 57788 mixinBody(Request) 57789 57790 function makeRequest (init) { 57791 // https://fetch.spec.whatwg.org/#requests 57792 const request = { 57793 method: 'GET', 57794 localURLsOnly: false, 57795 unsafeRequest: false, 57796 body: null, 57797 client: null, 57798 reservedClient: null, 57799 replacesClientId: '', 57800 window: 'client', 57801 keepalive: false, 57802 serviceWorkers: 'all', 57803 initiator: '', 57804 destination: '', 57805 priority: null, 57806 origin: 'client', 57807 policyContainer: 'client', 57808 referrer: 'client', 57809 referrerPolicy: '', 57810 mode: 'no-cors', 57811 useCORSPreflightFlag: false, 57812 credentials: 'same-origin', 57813 useCredentials: false, 57814 cache: 'default', 57815 redirect: 'follow', 57816 integrity: '', 57817 cryptoGraphicsNonceMetadata: '', 57818 parserMetadata: '', 57819 reloadNavigation: false, 57820 historyNavigation: false, 57821 userActivation: false, 57822 taintedOrigin: false, 57823 redirectCount: 0, 57824 responseTainting: 'basic', 57825 preventNoCacheCacheControlHeaderModification: false, 57826 done: false, 57827 timingAllowFailed: false, 57828 ...init, 57829 headersList: init.headersList 57830 ? new HeadersList(init.headersList) 57831 : new HeadersList() 57832 } 57833 request.url = request.urlList[0] 57834 return request 57835 } 57836 57837 // https://fetch.spec.whatwg.org/#concept-request-clone 57838 function cloneRequest (request) { 57839 // To clone a request request, run these steps: 57840 57841 // 1. Let newRequest be a copy of request, except for its body. 57842 const newRequest = makeRequest({ ...request, body: null }) 57843 57844 // 2. If request’s body is non-null, set newRequest’s body to the 57845 // result of cloning request’s body. 57846 if (request.body != null) { 57847 newRequest.body = cloneBody(request.body) 57848 } 57849 57850 // 3. Return newRequest. 57851 return newRequest 57852 } 57853 57854 Object.defineProperties(Request.prototype, { 57855 method: kEnumerableProperty, 57856 url: kEnumerableProperty, 57857 headers: kEnumerableProperty, 57858 redirect: kEnumerableProperty, 57859 clone: kEnumerableProperty, 57860 signal: kEnumerableProperty, 57861 duplex: kEnumerableProperty, 57862 destination: kEnumerableProperty, 57863 body: kEnumerableProperty, 57864 bodyUsed: kEnumerableProperty, 57865 isHistoryNavigation: kEnumerableProperty, 57866 isReloadNavigation: kEnumerableProperty, 57867 keepalive: kEnumerableProperty, 57868 integrity: kEnumerableProperty, 57869 cache: kEnumerableProperty, 57870 credentials: kEnumerableProperty, 57871 attribute: kEnumerableProperty, 57872 referrerPolicy: kEnumerableProperty, 57873 referrer: kEnumerableProperty, 57874 mode: kEnumerableProperty, 57875 [Symbol.toStringTag]: { 57876 value: 'Request', 57877 configurable: true 57878 } 57879 }) 57880 57881 webidl.converters.Request = webidl.interfaceConverter( 57882 Request 57883 ) 57884 57885 // https://fetch.spec.whatwg.org/#requestinfo 57886 webidl.converters.RequestInfo = function (V) { 57887 if (typeof V === 'string') { 57888 return webidl.converters.USVString(V) 57889 } 57890 57891 if (V instanceof Request) { 57892 return webidl.converters.Request(V) 57893 } 57894 57895 return webidl.converters.USVString(V) 57896 } 57897 57898 webidl.converters.AbortSignal = webidl.interfaceConverter( 57899 AbortSignal 57900 ) 57901 57902 // https://fetch.spec.whatwg.org/#requestinit 57903 webidl.converters.RequestInit = webidl.dictionaryConverter([ 57904 { 57905 key: 'method', 57906 converter: webidl.converters.ByteString 57907 }, 57908 { 57909 key: 'headers', 57910 converter: webidl.converters.HeadersInit 57911 }, 57912 { 57913 key: 'body', 57914 converter: webidl.nullableConverter( 57915 webidl.converters.BodyInit 57916 ) 57917 }, 57918 { 57919 key: 'referrer', 57920 converter: webidl.converters.USVString 57921 }, 57922 { 57923 key: 'referrerPolicy', 57924 converter: webidl.converters.DOMString, 57925 // https://w3c.github.io/webappsec-referrer-policy/#referrer-policy 57926 allowedValues: referrerPolicy 57927 }, 57928 { 57929 key: 'mode', 57930 converter: webidl.converters.DOMString, 57931 // https://fetch.spec.whatwg.org/#concept-request-mode 57932 allowedValues: requestMode 57933 }, 57934 { 57935 key: 'credentials', 57936 converter: webidl.converters.DOMString, 57937 // https://fetch.spec.whatwg.org/#requestcredentials 57938 allowedValues: requestCredentials 57939 }, 57940 { 57941 key: 'cache', 57942 converter: webidl.converters.DOMString, 57943 // https://fetch.spec.whatwg.org/#requestcache 57944 allowedValues: requestCache 57945 }, 57946 { 57947 key: 'redirect', 57948 converter: webidl.converters.DOMString, 57949 // https://fetch.spec.whatwg.org/#requestredirect 57950 allowedValues: requestRedirect 57951 }, 57952 { 57953 key: 'integrity', 57954 converter: webidl.converters.DOMString 57955 }, 57956 { 57957 key: 'keepalive', 57958 converter: webidl.converters.boolean 57959 }, 57960 { 57961 key: 'signal', 57962 converter: webidl.nullableConverter( 57963 (signal) => webidl.converters.AbortSignal( 57964 signal, 57965 { strict: false } 57966 ) 57967 ) 57968 }, 57969 { 57970 key: 'window', 57971 converter: webidl.converters.any 57972 }, 57973 { 57974 key: 'duplex', 57975 converter: webidl.converters.DOMString, 57976 allowedValues: requestDuplex 57977 } 57978 ]) 57979 57980 module.exports = { Request, makeRequest } 57981 57982 57983 /***/ }), 57984 57985 /***/ 27823: 57986 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 57987 57988 "use strict"; 57989 57990 57991 const { Headers, HeadersList, fill } = __nccwpck_require__(10554) 57992 const { extractBody, cloneBody, mixinBody } = __nccwpck_require__(41472) 57993 const util = __nccwpck_require__(83983) 57994 const { kEnumerableProperty } = util 57995 const { 57996 isValidReasonPhrase, 57997 isCancelled, 57998 isAborted, 57999 isBlobLike, 58000 serializeJavascriptValueToJSONString, 58001 isErrorLike, 58002 isomorphicEncode 58003 } = __nccwpck_require__(52538) 58004 const { 58005 redirectStatusSet, 58006 nullBodyStatus, 58007 DOMException 58008 } = __nccwpck_require__(41037) 58009 const { kState, kHeaders, kGuard, kRealm } = __nccwpck_require__(15861) 58010 const { webidl } = __nccwpck_require__(21744) 58011 const { FormData } = __nccwpck_require__(72015) 58012 const { getGlobalOrigin } = __nccwpck_require__(71246) 58013 const { URLSerializer } = __nccwpck_require__(685) 58014 const { kHeadersList, kConstruct } = __nccwpck_require__(72785) 58015 const assert = __nccwpck_require__(39491) 58016 const { types } = __nccwpck_require__(73837) 58017 58018 const ReadableStream = globalThis.ReadableStream || (__nccwpck_require__(35356).ReadableStream) 58019 const textEncoder = new TextEncoder('utf-8') 58020 58021 // https://fetch.spec.whatwg.org/#response-class 58022 class Response { 58023 // Creates network error Response. 58024 static error () { 58025 // TODO 58026 const relevantRealm = { settingsObject: {} } 58027 58028 // The static error() method steps are to return the result of creating a 58029 // Response object, given a new network error, "immutable", and this’s 58030 // relevant Realm. 58031 const responseObject = new Response() 58032 responseObject[kState] = makeNetworkError() 58033 responseObject[kRealm] = relevantRealm 58034 responseObject[kHeaders][kHeadersList] = responseObject[kState].headersList 58035 responseObject[kHeaders][kGuard] = 'immutable' 58036 responseObject[kHeaders][kRealm] = relevantRealm 58037 return responseObject 58038 } 58039 58040 // https://fetch.spec.whatwg.org/#dom-response-json 58041 static json (data, init = {}) { 58042 webidl.argumentLengthCheck(arguments, 1, { header: 'Response.json' }) 58043 58044 if (init !== null) { 58045 init = webidl.converters.ResponseInit(init) 58046 } 58047 58048 // 1. Let bytes the result of running serialize a JavaScript value to JSON bytes on data. 58049 const bytes = textEncoder.encode( 58050 serializeJavascriptValueToJSONString(data) 58051 ) 58052 58053 // 2. Let body be the result of extracting bytes. 58054 const body = extractBody(bytes) 58055 58056 // 3. Let responseObject be the result of creating a Response object, given a new response, 58057 // "response", and this’s relevant Realm. 58058 const relevantRealm = { settingsObject: {} } 58059 const responseObject = new Response() 58060 responseObject[kRealm] = relevantRealm 58061 responseObject[kHeaders][kGuard] = 'response' 58062 responseObject[kHeaders][kRealm] = relevantRealm 58063 58064 // 4. Perform initialize a response given responseObject, init, and (body, "application/json"). 58065 initializeResponse(responseObject, init, { body: body[0], type: 'application/json' }) 58066 58067 // 5. Return responseObject. 58068 return responseObject 58069 } 58070 58071 // Creates a redirect Response that redirects to url with status status. 58072 static redirect (url, status = 302) { 58073 const relevantRealm = { settingsObject: {} } 58074 58075 webidl.argumentLengthCheck(arguments, 1, { header: 'Response.redirect' }) 58076 58077 url = webidl.converters.USVString(url) 58078 status = webidl.converters['unsigned short'](status) 58079 58080 // 1. Let parsedURL be the result of parsing url with current settings 58081 // object’s API base URL. 58082 // 2. If parsedURL is failure, then throw a TypeError. 58083 // TODO: base-URL? 58084 let parsedURL 58085 try { 58086 parsedURL = new URL(url, getGlobalOrigin()) 58087 } catch (err) { 58088 throw Object.assign(new TypeError('Failed to parse URL from ' + url), { 58089 cause: err 58090 }) 58091 } 58092 58093 // 3. If status is not a redirect status, then throw a RangeError. 58094 if (!redirectStatusSet.has(status)) { 58095 throw new RangeError('Invalid status code ' + status) 58096 } 58097 58098 // 4. Let responseObject be the result of creating a Response object, 58099 // given a new response, "immutable", and this’s relevant Realm. 58100 const responseObject = new Response() 58101 responseObject[kRealm] = relevantRealm 58102 responseObject[kHeaders][kGuard] = 'immutable' 58103 responseObject[kHeaders][kRealm] = relevantRealm 58104 58105 // 5. Set responseObject’s response’s status to status. 58106 responseObject[kState].status = status 58107 58108 // 6. Let value be parsedURL, serialized and isomorphic encoded. 58109 const value = isomorphicEncode(URLSerializer(parsedURL)) 58110 58111 // 7. Append `Location`/value to responseObject’s response’s header list. 58112 responseObject[kState].headersList.append('location', value) 58113 58114 // 8. Return responseObject. 58115 return responseObject 58116 } 58117 58118 // https://fetch.spec.whatwg.org/#dom-response 58119 constructor (body = null, init = {}) { 58120 if (body !== null) { 58121 body = webidl.converters.BodyInit(body) 58122 } 58123 58124 init = webidl.converters.ResponseInit(init) 58125 58126 // TODO 58127 this[kRealm] = { settingsObject: {} } 58128 58129 // 1. Set this’s response to a new response. 58130 this[kState] = makeResponse({}) 58131 58132 // 2. Set this’s headers to a new Headers object with this’s relevant 58133 // Realm, whose header list is this’s response’s header list and guard 58134 // is "response". 58135 this[kHeaders] = new Headers(kConstruct) 58136 this[kHeaders][kGuard] = 'response' 58137 this[kHeaders][kHeadersList] = this[kState].headersList 58138 this[kHeaders][kRealm] = this[kRealm] 58139 58140 // 3. Let bodyWithType be null. 58141 let bodyWithType = null 58142 58143 // 4. If body is non-null, then set bodyWithType to the result of extracting body. 58144 if (body != null) { 58145 const [extractedBody, type] = extractBody(body) 58146 bodyWithType = { body: extractedBody, type } 58147 } 58148 58149 // 5. Perform initialize a response given this, init, and bodyWithType. 58150 initializeResponse(this, init, bodyWithType) 58151 } 58152 58153 // Returns response’s type, e.g., "cors". 58154 get type () { 58155 webidl.brandCheck(this, Response) 58156 58157 // The type getter steps are to return this’s response’s type. 58158 return this[kState].type 58159 } 58160 58161 // Returns response’s URL, if it has one; otherwise the empty string. 58162 get url () { 58163 webidl.brandCheck(this, Response) 58164 58165 const urlList = this[kState].urlList 58166 58167 // The url getter steps are to return the empty string if this’s 58168 // response’s URL is null; otherwise this’s response’s URL, 58169 // serialized with exclude fragment set to true. 58170 const url = urlList[urlList.length - 1] ?? null 58171 58172 if (url === null) { 58173 return '' 58174 } 58175 58176 return URLSerializer(url, true) 58177 } 58178 58179 // Returns whether response was obtained through a redirect. 58180 get redirected () { 58181 webidl.brandCheck(this, Response) 58182 58183 // The redirected getter steps are to return true if this’s response’s URL 58184 // list has more than one item; otherwise false. 58185 return this[kState].urlList.length > 1 58186 } 58187 58188 // Returns response’s status. 58189 get status () { 58190 webidl.brandCheck(this, Response) 58191 58192 // The status getter steps are to return this’s response’s status. 58193 return this[kState].status 58194 } 58195 58196 // Returns whether response’s status is an ok status. 58197 get ok () { 58198 webidl.brandCheck(this, Response) 58199 58200 // The ok getter steps are to return true if this’s response’s status is an 58201 // ok status; otherwise false. 58202 return this[kState].status >= 200 && this[kState].status <= 299 58203 } 58204 58205 // Returns response’s status message. 58206 get statusText () { 58207 webidl.brandCheck(this, Response) 58208 58209 // The statusText getter steps are to return this’s response’s status 58210 // message. 58211 return this[kState].statusText 58212 } 58213 58214 // Returns response’s headers as Headers. 58215 get headers () { 58216 webidl.brandCheck(this, Response) 58217 58218 // The headers getter steps are to return this’s headers. 58219 return this[kHeaders] 58220 } 58221 58222 get body () { 58223 webidl.brandCheck(this, Response) 58224 58225 return this[kState].body ? this[kState].body.stream : null 58226 } 58227 58228 get bodyUsed () { 58229 webidl.brandCheck(this, Response) 58230 58231 return !!this[kState].body && util.isDisturbed(this[kState].body.stream) 58232 } 58233 58234 // Returns a clone of response. 58235 clone () { 58236 webidl.brandCheck(this, Response) 58237 58238 // 1. If this is unusable, then throw a TypeError. 58239 if (this.bodyUsed || (this.body && this.body.locked)) { 58240 throw webidl.errors.exception({ 58241 header: 'Response.clone', 58242 message: 'Body has already been consumed.' 58243 }) 58244 } 58245 58246 // 2. Let clonedResponse be the result of cloning this’s response. 58247 const clonedResponse = cloneResponse(this[kState]) 58248 58249 // 3. Return the result of creating a Response object, given 58250 // clonedResponse, this’s headers’s guard, and this’s relevant Realm. 58251 const clonedResponseObject = new Response() 58252 clonedResponseObject[kState] = clonedResponse 58253 clonedResponseObject[kRealm] = this[kRealm] 58254 clonedResponseObject[kHeaders][kHeadersList] = clonedResponse.headersList 58255 clonedResponseObject[kHeaders][kGuard] = this[kHeaders][kGuard] 58256 clonedResponseObject[kHeaders][kRealm] = this[kHeaders][kRealm] 58257 58258 return clonedResponseObject 58259 } 58260 } 58261 58262 mixinBody(Response) 58263 58264 Object.defineProperties(Response.prototype, { 58265 type: kEnumerableProperty, 58266 url: kEnumerableProperty, 58267 status: kEnumerableProperty, 58268 ok: kEnumerableProperty, 58269 redirected: kEnumerableProperty, 58270 statusText: kEnumerableProperty, 58271 headers: kEnumerableProperty, 58272 clone: kEnumerableProperty, 58273 body: kEnumerableProperty, 58274 bodyUsed: kEnumerableProperty, 58275 [Symbol.toStringTag]: { 58276 value: 'Response', 58277 configurable: true 58278 } 58279 }) 58280 58281 Object.defineProperties(Response, { 58282 json: kEnumerableProperty, 58283 redirect: kEnumerableProperty, 58284 error: kEnumerableProperty 58285 }) 58286 58287 // https://fetch.spec.whatwg.org/#concept-response-clone 58288 function cloneResponse (response) { 58289 // To clone a response response, run these steps: 58290 58291 // 1. If response is a filtered response, then return a new identical 58292 // filtered response whose internal response is a clone of response’s 58293 // internal response. 58294 if (response.internalResponse) { 58295 return filterResponse( 58296 cloneResponse(response.internalResponse), 58297 response.type 58298 ) 58299 } 58300 58301 // 2. Let newResponse be a copy of response, except for its body. 58302 const newResponse = makeResponse({ ...response, body: null }) 58303 58304 // 3. If response’s body is non-null, then set newResponse’s body to the 58305 // result of cloning response’s body. 58306 if (response.body != null) { 58307 newResponse.body = cloneBody(response.body) 58308 } 58309 58310 // 4. Return newResponse. 58311 return newResponse 58312 } 58313 58314 function makeResponse (init) { 58315 return { 58316 aborted: false, 58317 rangeRequested: false, 58318 timingAllowPassed: false, 58319 requestIncludesCredentials: false, 58320 type: 'default', 58321 status: 200, 58322 timingInfo: null, 58323 cacheState: '', 58324 statusText: '', 58325 ...init, 58326 headersList: init.headersList 58327 ? new HeadersList(init.headersList) 58328 : new HeadersList(), 58329 urlList: init.urlList ? [...init.urlList] : [] 58330 } 58331 } 58332 58333 function makeNetworkError (reason) { 58334 const isError = isErrorLike(reason) 58335 return makeResponse({ 58336 type: 'error', 58337 status: 0, 58338 error: isError 58339 ? reason 58340 : new Error(reason ? String(reason) : reason), 58341 aborted: reason && reason.name === 'AbortError' 58342 }) 58343 } 58344 58345 function makeFilteredResponse (response, state) { 58346 state = { 58347 internalResponse: response, 58348 ...state 58349 } 58350 58351 return new Proxy(response, { 58352 get (target, p) { 58353 return p in state ? state[p] : target[p] 58354 }, 58355 set (target, p, value) { 58356 assert(!(p in state)) 58357 target[p] = value 58358 return true 58359 } 58360 }) 58361 } 58362 58363 // https://fetch.spec.whatwg.org/#concept-filtered-response 58364 function filterResponse (response, type) { 58365 // Set response to the following filtered response with response as its 58366 // internal response, depending on request’s response tainting: 58367 if (type === 'basic') { 58368 // A basic filtered response is a filtered response whose type is "basic" 58369 // and header list excludes any headers in internal response’s header list 58370 // whose name is a forbidden response-header name. 58371 58372 // Note: undici does not implement forbidden response-header names 58373 return makeFilteredResponse(response, { 58374 type: 'basic', 58375 headersList: response.headersList 58376 }) 58377 } else if (type === 'cors') { 58378 // A CORS filtered response is a filtered response whose type is "cors" 58379 // and header list excludes any headers in internal response’s header 58380 // list whose name is not a CORS-safelisted response-header name, given 58381 // internal response’s CORS-exposed header-name list. 58382 58383 // Note: undici does not implement CORS-safelisted response-header names 58384 return makeFilteredResponse(response, { 58385 type: 'cors', 58386 headersList: response.headersList 58387 }) 58388 } else if (type === 'opaque') { 58389 // An opaque filtered response is a filtered response whose type is 58390 // "opaque", URL list is the empty list, status is 0, status message 58391 // is the empty byte sequence, header list is empty, and body is null. 58392 58393 return makeFilteredResponse(response, { 58394 type: 'opaque', 58395 urlList: Object.freeze([]), 58396 status: 0, 58397 statusText: '', 58398 body: null 58399 }) 58400 } else if (type === 'opaqueredirect') { 58401 // An opaque-redirect filtered response is a filtered response whose type 58402 // is "opaqueredirect", status is 0, status message is the empty byte 58403 // sequence, header list is empty, and body is null. 58404 58405 return makeFilteredResponse(response, { 58406 type: 'opaqueredirect', 58407 status: 0, 58408 statusText: '', 58409 headersList: [], 58410 body: null 58411 }) 58412 } else { 58413 assert(false) 58414 } 58415 } 58416 58417 // https://fetch.spec.whatwg.org/#appropriate-network-error 58418 function makeAppropriateNetworkError (fetchParams, err = null) { 58419 // 1. Assert: fetchParams is canceled. 58420 assert(isCancelled(fetchParams)) 58421 58422 // 2. Return an aborted network error if fetchParams is aborted; 58423 // otherwise return a network error. 58424 return isAborted(fetchParams) 58425 ? makeNetworkError(Object.assign(new DOMException('The operation was aborted.', 'AbortError'), { cause: err })) 58426 : makeNetworkError(Object.assign(new DOMException('Request was cancelled.'), { cause: err })) 58427 } 58428 58429 // https://whatpr.org/fetch/1392.html#initialize-a-response 58430 function initializeResponse (response, init, body) { 58431 // 1. If init["status"] is not in the range 200 to 599, inclusive, then 58432 // throw a RangeError. 58433 if (init.status !== null && (init.status < 200 || init.status > 599)) { 58434 throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.') 58435 } 58436 58437 // 2. If init["statusText"] does not match the reason-phrase token production, 58438 // then throw a TypeError. 58439 if ('statusText' in init && init.statusText != null) { 58440 // See, https://datatracker.ietf.org/doc/html/rfc7230#section-3.1.2: 58441 // reason-phrase = *( HTAB / SP / VCHAR / obs-text ) 58442 if (!isValidReasonPhrase(String(init.statusText))) { 58443 throw new TypeError('Invalid statusText') 58444 } 58445 } 58446 58447 // 3. Set response’s response’s status to init["status"]. 58448 if ('status' in init && init.status != null) { 58449 response[kState].status = init.status 58450 } 58451 58452 // 4. Set response’s response’s status message to init["statusText"]. 58453 if ('statusText' in init && init.statusText != null) { 58454 response[kState].statusText = init.statusText 58455 } 58456 58457 // 5. If init["headers"] exists, then fill response’s headers with init["headers"]. 58458 if ('headers' in init && init.headers != null) { 58459 fill(response[kHeaders], init.headers) 58460 } 58461 58462 // 6. If body was given, then: 58463 if (body) { 58464 // 1. If response's status is a null body status, then throw a TypeError. 58465 if (nullBodyStatus.includes(response.status)) { 58466 throw webidl.errors.exception({ 58467 header: 'Response constructor', 58468 message: 'Invalid response status code ' + response.status 58469 }) 58470 } 58471 58472 // 2. Set response's body to body's body. 58473 response[kState].body = body.body 58474 58475 // 3. If body's type is non-null and response's header list does not contain 58476 // `Content-Type`, then append (`Content-Type`, body's type) to response's header list. 58477 if (body.type != null && !response[kState].headersList.contains('Content-Type')) { 58478 response[kState].headersList.append('content-type', body.type) 58479 } 58480 } 58481 } 58482 58483 webidl.converters.ReadableStream = webidl.interfaceConverter( 58484 ReadableStream 58485 ) 58486 58487 webidl.converters.FormData = webidl.interfaceConverter( 58488 FormData 58489 ) 58490 58491 webidl.converters.URLSearchParams = webidl.interfaceConverter( 58492 URLSearchParams 58493 ) 58494 58495 // https://fetch.spec.whatwg.org/#typedefdef-xmlhttprequestbodyinit 58496 webidl.converters.XMLHttpRequestBodyInit = function (V) { 58497 if (typeof V === 'string') { 58498 return webidl.converters.USVString(V) 58499 } 58500 58501 if (isBlobLike(V)) { 58502 return webidl.converters.Blob(V, { strict: false }) 58503 } 58504 58505 if (types.isArrayBuffer(V) || types.isTypedArray(V) || types.isDataView(V)) { 58506 return webidl.converters.BufferSource(V) 58507 } 58508 58509 if (util.isFormDataLike(V)) { 58510 return webidl.converters.FormData(V, { strict: false }) 58511 } 58512 58513 if (V instanceof URLSearchParams) { 58514 return webidl.converters.URLSearchParams(V) 58515 } 58516 58517 return webidl.converters.DOMString(V) 58518 } 58519 58520 // https://fetch.spec.whatwg.org/#bodyinit 58521 webidl.converters.BodyInit = function (V) { 58522 if (V instanceof ReadableStream) { 58523 return webidl.converters.ReadableStream(V) 58524 } 58525 58526 // Note: the spec doesn't include async iterables, 58527 // this is an undici extension. 58528 if (V?.[Symbol.asyncIterator]) { 58529 return V 58530 } 58531 58532 return webidl.converters.XMLHttpRequestBodyInit(V) 58533 } 58534 58535 webidl.converters.ResponseInit = webidl.dictionaryConverter([ 58536 { 58537 key: 'status', 58538 converter: webidl.converters['unsigned short'], 58539 defaultValue: 200 58540 }, 58541 { 58542 key: 'statusText', 58543 converter: webidl.converters.ByteString, 58544 defaultValue: '' 58545 }, 58546 { 58547 key: 'headers', 58548 converter: webidl.converters.HeadersInit 58549 } 58550 ]) 58551 58552 module.exports = { 58553 makeNetworkError, 58554 makeResponse, 58555 makeAppropriateNetworkError, 58556 filterResponse, 58557 Response, 58558 cloneResponse 58559 } 58560 58561 58562 /***/ }), 58563 58564 /***/ 15861: 58565 /***/ ((module) => { 58566 58567 "use strict"; 58568 58569 58570 module.exports = { 58571 kUrl: Symbol('url'), 58572 kHeaders: Symbol('headers'), 58573 kSignal: Symbol('signal'), 58574 kState: Symbol('state'), 58575 kGuard: Symbol('guard'), 58576 kRealm: Symbol('realm') 58577 } 58578 58579 58580 /***/ }), 58581 58582 /***/ 52538: 58583 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 58584 58585 "use strict"; 58586 58587 58588 const { redirectStatusSet, referrerPolicySet: referrerPolicyTokens, badPortsSet } = __nccwpck_require__(41037) 58589 const { getGlobalOrigin } = __nccwpck_require__(71246) 58590 const { performance } = __nccwpck_require__(4074) 58591 const { isBlobLike, toUSVString, ReadableStreamFrom } = __nccwpck_require__(83983) 58592 const assert = __nccwpck_require__(39491) 58593 const { isUint8Array } = __nccwpck_require__(29830) 58594 58595 let supportedHashes = [] 58596 58597 // https://nodejs.org/api/crypto.html#determining-if-crypto-support-is-unavailable 58598 /** @type {import('crypto')|undefined} */ 58599 let crypto 58600 58601 try { 58602 crypto = __nccwpck_require__(6113) 58603 const possibleRelevantHashes = ['sha256', 'sha384', 'sha512'] 58604 supportedHashes = crypto.getHashes().filter((hash) => possibleRelevantHashes.includes(hash)) 58605 /* c8 ignore next 3 */ 58606 } catch { 58607 } 58608 58609 function responseURL (response) { 58610 // https://fetch.spec.whatwg.org/#responses 58611 // A response has an associated URL. It is a pointer to the last URL 58612 // in response’s URL list and null if response’s URL list is empty. 58613 const urlList = response.urlList 58614 const length = urlList.length 58615 return length === 0 ? null : urlList[length - 1].toString() 58616 } 58617 58618 // https://fetch.spec.whatwg.org/#concept-response-location-url 58619 function responseLocationURL (response, requestFragment) { 58620 // 1. If response’s status is not a redirect status, then return null. 58621 if (!redirectStatusSet.has(response.status)) { 58622 return null 58623 } 58624 58625 // 2. Let location be the result of extracting header list values given 58626 // `Location` and response’s header list. 58627 let location = response.headersList.get('location') 58628 58629 // 3. If location is a header value, then set location to the result of 58630 // parsing location with response’s URL. 58631 if (location !== null && isValidHeaderValue(location)) { 58632 location = new URL(location, responseURL(response)) 58633 } 58634 58635 // 4. If location is a URL whose fragment is null, then set location’s 58636 // fragment to requestFragment. 58637 if (location && !location.hash) { 58638 location.hash = requestFragment 58639 } 58640 58641 // 5. Return location. 58642 return location 58643 } 58644 58645 /** @returns {URL} */ 58646 function requestCurrentURL (request) { 58647 return request.urlList[request.urlList.length - 1] 58648 } 58649 58650 function requestBadPort (request) { 58651 // 1. Let url be request’s current URL. 58652 const url = requestCurrentURL(request) 58653 58654 // 2. If url’s scheme is an HTTP(S) scheme and url’s port is a bad port, 58655 // then return blocked. 58656 if (urlIsHttpHttpsScheme(url) && badPortsSet.has(url.port)) { 58657 return 'blocked' 58658 } 58659 58660 // 3. Return allowed. 58661 return 'allowed' 58662 } 58663 58664 function isErrorLike (object) { 58665 return object instanceof Error || ( 58666 object?.constructor?.name === 'Error' || 58667 object?.constructor?.name === 'DOMException' 58668 ) 58669 } 58670 58671 // Check whether |statusText| is a ByteString and 58672 // matches the Reason-Phrase token production. 58673 // RFC 2616: https://tools.ietf.org/html/rfc2616 58674 // RFC 7230: https://tools.ietf.org/html/rfc7230 58675 // "reason-phrase = *( HTAB / SP / VCHAR / obs-text )" 58676 // https://github.com/chromium/chromium/blob/94.0.4604.1/third_party/blink/renderer/core/fetch/response.cc#L116 58677 function isValidReasonPhrase (statusText) { 58678 for (let i = 0; i < statusText.length; ++i) { 58679 const c = statusText.charCodeAt(i) 58680 if ( 58681 !( 58682 ( 58683 c === 0x09 || // HTAB 58684 (c >= 0x20 && c <= 0x7e) || // SP / VCHAR 58685 (c >= 0x80 && c <= 0xff) 58686 ) // obs-text 58687 ) 58688 ) { 58689 return false 58690 } 58691 } 58692 return true 58693 } 58694 58695 /** 58696 * @see https://tools.ietf.org/html/rfc7230#section-3.2.6 58697 * @param {number} c 58698 */ 58699 function isTokenCharCode (c) { 58700 switch (c) { 58701 case 0x22: 58702 case 0x28: 58703 case 0x29: 58704 case 0x2c: 58705 case 0x2f: 58706 case 0x3a: 58707 case 0x3b: 58708 case 0x3c: 58709 case 0x3d: 58710 case 0x3e: 58711 case 0x3f: 58712 case 0x40: 58713 case 0x5b: 58714 case 0x5c: 58715 case 0x5d: 58716 case 0x7b: 58717 case 0x7d: 58718 // DQUOTE and "(),/:;<=>?@[\]{}" 58719 return false 58720 default: 58721 // VCHAR %x21-7E 58722 return c >= 0x21 && c <= 0x7e 58723 } 58724 } 58725 58726 /** 58727 * @param {string} characters 58728 */ 58729 function isValidHTTPToken (characters) { 58730 if (characters.length === 0) { 58731 return false 58732 } 58733 for (let i = 0; i < characters.length; ++i) { 58734 if (!isTokenCharCode(characters.charCodeAt(i))) { 58735 return false 58736 } 58737 } 58738 return true 58739 } 58740 58741 /** 58742 * @see https://fetch.spec.whatwg.org/#header-name 58743 * @param {string} potentialValue 58744 */ 58745 function isValidHeaderName (potentialValue) { 58746 return isValidHTTPToken(potentialValue) 58747 } 58748 58749 /** 58750 * @see https://fetch.spec.whatwg.org/#header-value 58751 * @param {string} potentialValue 58752 */ 58753 function isValidHeaderValue (potentialValue) { 58754 // - Has no leading or trailing HTTP tab or space bytes. 58755 // - Contains no 0x00 (NUL) or HTTP newline bytes. 58756 if ( 58757 potentialValue.startsWith('\t') || 58758 potentialValue.startsWith(' ') || 58759 potentialValue.endsWith('\t') || 58760 potentialValue.endsWith(' ') 58761 ) { 58762 return false 58763 } 58764 58765 if ( 58766 potentialValue.includes('\0') || 58767 potentialValue.includes('\r') || 58768 potentialValue.includes('\n') 58769 ) { 58770 return false 58771 } 58772 58773 return true 58774 } 58775 58776 // https://w3c.github.io/webappsec-referrer-policy/#set-requests-referrer-policy-on-redirect 58777 function setRequestReferrerPolicyOnRedirect (request, actualResponse) { 58778 // Given a request request and a response actualResponse, this algorithm 58779 // updates request’s referrer policy according to the Referrer-Policy 58780 // header (if any) in actualResponse. 58781 58782 // 1. Let policy be the result of executing § 8.1 Parse a referrer policy 58783 // from a Referrer-Policy header on actualResponse. 58784 58785 // 8.1 Parse a referrer policy from a Referrer-Policy header 58786 // 1. Let policy-tokens be the result of extracting header list values given `Referrer-Policy` and response’s header list. 58787 const { headersList } = actualResponse 58788 // 2. Let policy be the empty string. 58789 // 3. For each token in policy-tokens, if token is a referrer policy and token is not the empty string, then set policy to token. 58790 // 4. Return policy. 58791 const policyHeader = (headersList.get('referrer-policy') ?? '').split(',') 58792 58793 // Note: As the referrer-policy can contain multiple policies 58794 // separated by comma, we need to loop through all of them 58795 // and pick the first valid one. 58796 // Ref: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy#specify_a_fallback_policy 58797 let policy = '' 58798 if (policyHeader.length > 0) { 58799 // The right-most policy takes precedence. 58800 // The left-most policy is the fallback. 58801 for (let i = policyHeader.length; i !== 0; i--) { 58802 const token = policyHeader[i - 1].trim() 58803 if (referrerPolicyTokens.has(token)) { 58804 policy = token 58805 break 58806 } 58807 } 58808 } 58809 58810 // 2. If policy is not the empty string, then set request’s referrer policy to policy. 58811 if (policy !== '') { 58812 request.referrerPolicy = policy 58813 } 58814 } 58815 58816 // https://fetch.spec.whatwg.org/#cross-origin-resource-policy-check 58817 function crossOriginResourcePolicyCheck () { 58818 // TODO 58819 return 'allowed' 58820 } 58821 58822 // https://fetch.spec.whatwg.org/#concept-cors-check 58823 function corsCheck () { 58824 // TODO 58825 return 'success' 58826 } 58827 58828 // https://fetch.spec.whatwg.org/#concept-tao-check 58829 function TAOCheck () { 58830 // TODO 58831 return 'success' 58832 } 58833 58834 function appendFetchMetadata (httpRequest) { 58835 // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-dest-header 58836 // TODO 58837 58838 // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-mode-header 58839 58840 // 1. Assert: r’s url is a potentially trustworthy URL. 58841 // TODO 58842 58843 // 2. Let header be a Structured Header whose value is a token. 58844 let header = null 58845 58846 // 3. Set header’s value to r’s mode. 58847 header = httpRequest.mode 58848 58849 // 4. Set a structured field value `Sec-Fetch-Mode`/header in r’s header list. 58850 httpRequest.headersList.set('sec-fetch-mode', header) 58851 58852 // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-site-header 58853 // TODO 58854 58855 // https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-user-header 58856 // TODO 58857 } 58858 58859 // https://fetch.spec.whatwg.org/#append-a-request-origin-header 58860 function appendRequestOriginHeader (request) { 58861 // 1. Let serializedOrigin be the result of byte-serializing a request origin with request. 58862 let serializedOrigin = request.origin 58863 58864 // 2. If request’s response tainting is "cors" or request’s mode is "websocket", then append (`Origin`, serializedOrigin) to request’s header list. 58865 if (request.responseTainting === 'cors' || request.mode === 'websocket') { 58866 if (serializedOrigin) { 58867 request.headersList.append('origin', serializedOrigin) 58868 } 58869 58870 // 3. Otherwise, if request’s method is neither `GET` nor `HEAD`, then: 58871 } else if (request.method !== 'GET' && request.method !== 'HEAD') { 58872 // 1. Switch on request’s referrer policy: 58873 switch (request.referrerPolicy) { 58874 case 'no-referrer': 58875 // Set serializedOrigin to `null`. 58876 serializedOrigin = null 58877 break 58878 case 'no-referrer-when-downgrade': 58879 case 'strict-origin': 58880 case 'strict-origin-when-cross-origin': 58881 // If request’s origin is a tuple origin, its scheme is "https", and request’s current URL’s scheme is not "https", then set serializedOrigin to `null`. 58882 if (request.origin && urlHasHttpsScheme(request.origin) && !urlHasHttpsScheme(requestCurrentURL(request))) { 58883 serializedOrigin = null 58884 } 58885 break 58886 case 'same-origin': 58887 // If request’s origin is not same origin with request’s current URL’s origin, then set serializedOrigin to `null`. 58888 if (!sameOrigin(request, requestCurrentURL(request))) { 58889 serializedOrigin = null 58890 } 58891 break 58892 default: 58893 // Do nothing. 58894 } 58895 58896 if (serializedOrigin) { 58897 // 2. Append (`Origin`, serializedOrigin) to request’s header list. 58898 request.headersList.append('origin', serializedOrigin) 58899 } 58900 } 58901 } 58902 58903 function coarsenedSharedCurrentTime (crossOriginIsolatedCapability) { 58904 // TODO 58905 return performance.now() 58906 } 58907 58908 // https://fetch.spec.whatwg.org/#create-an-opaque-timing-info 58909 function createOpaqueTimingInfo (timingInfo) { 58910 return { 58911 startTime: timingInfo.startTime ?? 0, 58912 redirectStartTime: 0, 58913 redirectEndTime: 0, 58914 postRedirectStartTime: timingInfo.startTime ?? 0, 58915 finalServiceWorkerStartTime: 0, 58916 finalNetworkResponseStartTime: 0, 58917 finalNetworkRequestStartTime: 0, 58918 endTime: 0, 58919 encodedBodySize: 0, 58920 decodedBodySize: 0, 58921 finalConnectionTimingInfo: null 58922 } 58923 } 58924 58925 // https://html.spec.whatwg.org/multipage/origin.html#policy-container 58926 function makePolicyContainer () { 58927 // Note: the fetch spec doesn't make use of embedder policy or CSP list 58928 return { 58929 referrerPolicy: 'strict-origin-when-cross-origin' 58930 } 58931 } 58932 58933 // https://html.spec.whatwg.org/multipage/origin.html#clone-a-policy-container 58934 function clonePolicyContainer (policyContainer) { 58935 return { 58936 referrerPolicy: policyContainer.referrerPolicy 58937 } 58938 } 58939 58940 // https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer 58941 function determineRequestsReferrer (request) { 58942 // 1. Let policy be request's referrer policy. 58943 const policy = request.referrerPolicy 58944 58945 // Note: policy cannot (shouldn't) be null or an empty string. 58946 assert(policy) 58947 58948 // 2. Let environment be request’s client. 58949 58950 let referrerSource = null 58951 58952 // 3. Switch on request’s referrer: 58953 if (request.referrer === 'client') { 58954 // Note: node isn't a browser and doesn't implement document/iframes, 58955 // so we bypass this step and replace it with our own. 58956 58957 const globalOrigin = getGlobalOrigin() 58958 58959 if (!globalOrigin || globalOrigin.origin === 'null') { 58960 return 'no-referrer' 58961 } 58962 58963 // note: we need to clone it as it's mutated 58964 referrerSource = new URL(globalOrigin) 58965 } else if (request.referrer instanceof URL) { 58966 // Let referrerSource be request’s referrer. 58967 referrerSource = request.referrer 58968 } 58969 58970 // 4. Let request’s referrerURL be the result of stripping referrerSource for 58971 // use as a referrer. 58972 let referrerURL = stripURLForReferrer(referrerSource) 58973 58974 // 5. Let referrerOrigin be the result of stripping referrerSource for use as 58975 // a referrer, with the origin-only flag set to true. 58976 const referrerOrigin = stripURLForReferrer(referrerSource, true) 58977 58978 // 6. If the result of serializing referrerURL is a string whose length is 58979 // greater than 4096, set referrerURL to referrerOrigin. 58980 if (referrerURL.toString().length > 4096) { 58981 referrerURL = referrerOrigin 58982 } 58983 58984 const areSameOrigin = sameOrigin(request, referrerURL) 58985 const isNonPotentiallyTrustWorthy = isURLPotentiallyTrustworthy(referrerURL) && 58986 !isURLPotentiallyTrustworthy(request.url) 58987 58988 // 8. Execute the switch statements corresponding to the value of policy: 58989 switch (policy) { 58990 case 'origin': return referrerOrigin != null ? referrerOrigin : stripURLForReferrer(referrerSource, true) 58991 case 'unsafe-url': return referrerURL 58992 case 'same-origin': 58993 return areSameOrigin ? referrerOrigin : 'no-referrer' 58994 case 'origin-when-cross-origin': 58995 return areSameOrigin ? referrerURL : referrerOrigin 58996 case 'strict-origin-when-cross-origin': { 58997 const currentURL = requestCurrentURL(request) 58998 58999 // 1. If the origin of referrerURL and the origin of request’s current 59000 // URL are the same, then return referrerURL. 59001 if (sameOrigin(referrerURL, currentURL)) { 59002 return referrerURL 59003 } 59004 59005 // 2. If referrerURL is a potentially trustworthy URL and request’s 59006 // current URL is not a potentially trustworthy URL, then return no 59007 // referrer. 59008 if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) { 59009 return 'no-referrer' 59010 } 59011 59012 // 3. Return referrerOrigin. 59013 return referrerOrigin 59014 } 59015 case 'strict-origin': // eslint-disable-line 59016 /** 59017 * 1. If referrerURL is a potentially trustworthy URL and 59018 * request’s current URL is not a potentially trustworthy URL, 59019 * then return no referrer. 59020 * 2. Return referrerOrigin 59021 */ 59022 case 'no-referrer-when-downgrade': // eslint-disable-line 59023 /** 59024 * 1. If referrerURL is a potentially trustworthy URL and 59025 * request’s current URL is not a potentially trustworthy URL, 59026 * then return no referrer. 59027 * 2. Return referrerOrigin 59028 */ 59029 59030 default: // eslint-disable-line 59031 return isNonPotentiallyTrustWorthy ? 'no-referrer' : referrerOrigin 59032 } 59033 } 59034 59035 /** 59036 * @see https://w3c.github.io/webappsec-referrer-policy/#strip-url 59037 * @param {URL} url 59038 * @param {boolean|undefined} originOnly 59039 */ 59040 function stripURLForReferrer (url, originOnly) { 59041 // 1. Assert: url is a URL. 59042 assert(url instanceof URL) 59043 59044 // 2. If url’s scheme is a local scheme, then return no referrer. 59045 if (url.protocol === 'file:' || url.protocol === 'about:' || url.protocol === 'blank:') { 59046 return 'no-referrer' 59047 } 59048 59049 // 3. Set url’s username to the empty string. 59050 url.username = '' 59051 59052 // 4. Set url’s password to the empty string. 59053 url.password = '' 59054 59055 // 5. Set url’s fragment to null. 59056 url.hash = '' 59057 59058 // 6. If the origin-only flag is true, then: 59059 if (originOnly) { 59060 // 1. Set url’s path to « the empty string ». 59061 url.pathname = '' 59062 59063 // 2. Set url’s query to null. 59064 url.search = '' 59065 } 59066 59067 // 7. Return url. 59068 return url 59069 } 59070 59071 function isURLPotentiallyTrustworthy (url) { 59072 if (!(url instanceof URL)) { 59073 return false 59074 } 59075 59076 // If child of about, return true 59077 if (url.href === 'about:blank' || url.href === 'about:srcdoc') { 59078 return true 59079 } 59080 59081 // If scheme is data, return true 59082 if (url.protocol === 'data:') return true 59083 59084 // If file, return true 59085 if (url.protocol === 'file:') return true 59086 59087 return isOriginPotentiallyTrustworthy(url.origin) 59088 59089 function isOriginPotentiallyTrustworthy (origin) { 59090 // If origin is explicitly null, return false 59091 if (origin == null || origin === 'null') return false 59092 59093 const originAsURL = new URL(origin) 59094 59095 // If secure, return true 59096 if (originAsURL.protocol === 'https:' || originAsURL.protocol === 'wss:') { 59097 return true 59098 } 59099 59100 // If localhost or variants, return true 59101 if (/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(originAsURL.hostname) || 59102 (originAsURL.hostname === 'localhost' || originAsURL.hostname.includes('localhost.')) || 59103 (originAsURL.hostname.endsWith('.localhost'))) { 59104 return true 59105 } 59106 59107 // If any other, return false 59108 return false 59109 } 59110 } 59111 59112 /** 59113 * @see https://w3c.github.io/webappsec-subresource-integrity/#does-response-match-metadatalist 59114 * @param {Uint8Array} bytes 59115 * @param {string} metadataList 59116 */ 59117 function bytesMatch (bytes, metadataList) { 59118 // If node is not built with OpenSSL support, we cannot check 59119 // a request's integrity, so allow it by default (the spec will 59120 // allow requests if an invalid hash is given, as precedence). 59121 /* istanbul ignore if: only if node is built with --without-ssl */ 59122 if (crypto === undefined) { 59123 return true 59124 } 59125 59126 // 1. Let parsedMetadata be the result of parsing metadataList. 59127 const parsedMetadata = parseMetadata(metadataList) 59128 59129 // 2. If parsedMetadata is no metadata, return true. 59130 if (parsedMetadata === 'no metadata') { 59131 return true 59132 } 59133 59134 // 3. If response is not eligible for integrity validation, return false. 59135 // TODO 59136 59137 // 4. If parsedMetadata is the empty set, return true. 59138 if (parsedMetadata.length === 0) { 59139 return true 59140 } 59141 59142 // 5. Let metadata be the result of getting the strongest 59143 // metadata from parsedMetadata. 59144 const strongest = getStrongestMetadata(parsedMetadata) 59145 const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest) 59146 59147 // 6. For each item in metadata: 59148 for (const item of metadata) { 59149 // 1. Let algorithm be the alg component of item. 59150 const algorithm = item.algo 59151 59152 // 2. Let expectedValue be the val component of item. 59153 const expectedValue = item.hash 59154 59155 // See https://github.com/web-platform-tests/wpt/commit/e4c5cc7a5e48093220528dfdd1c4012dc3837a0e 59156 // "be liberal with padding". This is annoying, and it's not even in the spec. 59157 59158 // 3. Let actualValue be the result of applying algorithm to bytes. 59159 let actualValue = crypto.createHash(algorithm).update(bytes).digest('base64') 59160 59161 if (actualValue[actualValue.length - 1] === '=') { 59162 if (actualValue[actualValue.length - 2] === '=') { 59163 actualValue = actualValue.slice(0, -2) 59164 } else { 59165 actualValue = actualValue.slice(0, -1) 59166 } 59167 } 59168 59169 // 4. If actualValue is a case-sensitive match for expectedValue, 59170 // return true. 59171 if (compareBase64Mixed(actualValue, expectedValue)) { 59172 return true 59173 } 59174 } 59175 59176 // 7. Return false. 59177 return false 59178 } 59179 59180 // https://w3c.github.io/webappsec-subresource-integrity/#grammardef-hash-with-options 59181 // https://www.w3.org/TR/CSP2/#source-list-syntax 59182 // https://www.rfc-editor.org/rfc/rfc5234#appendix-B.1 59183 const parseHashWithOptions = /(?<algo>sha256|sha384|sha512)-((?<hash>[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i 59184 59185 /** 59186 * @see https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata 59187 * @param {string} metadata 59188 */ 59189 function parseMetadata (metadata) { 59190 // 1. Let result be the empty set. 59191 /** @type {{ algo: string, hash: string }[]} */ 59192 const result = [] 59193 59194 // 2. Let empty be equal to true. 59195 let empty = true 59196 59197 // 3. For each token returned by splitting metadata on spaces: 59198 for (const token of metadata.split(' ')) { 59199 // 1. Set empty to false. 59200 empty = false 59201 59202 // 2. Parse token as a hash-with-options. 59203 const parsedToken = parseHashWithOptions.exec(token) 59204 59205 // 3. If token does not parse, continue to the next token. 59206 if ( 59207 parsedToken === null || 59208 parsedToken.groups === undefined || 59209 parsedToken.groups.algo === undefined 59210 ) { 59211 // Note: Chromium blocks the request at this point, but Firefox 59212 // gives a warning that an invalid integrity was given. The 59213 // correct behavior is to ignore these, and subsequently not 59214 // check the integrity of the resource. 59215 continue 59216 } 59217 59218 // 4. Let algorithm be the hash-algo component of token. 59219 const algorithm = parsedToken.groups.algo.toLowerCase() 59220 59221 // 5. If algorithm is a hash function recognized by the user 59222 // agent, add the parsed token to result. 59223 if (supportedHashes.includes(algorithm)) { 59224 result.push(parsedToken.groups) 59225 } 59226 } 59227 59228 // 4. Return no metadata if empty is true, otherwise return result. 59229 if (empty === true) { 59230 return 'no metadata' 59231 } 59232 59233 return result 59234 } 59235 59236 /** 59237 * @param {{ algo: 'sha256' | 'sha384' | 'sha512' }[]} metadataList 59238 */ 59239 function getStrongestMetadata (metadataList) { 59240 // Let algorithm be the algo component of the first item in metadataList. 59241 // Can be sha256 59242 let algorithm = metadataList[0].algo 59243 // If the algorithm is sha512, then it is the strongest 59244 // and we can return immediately 59245 if (algorithm[3] === '5') { 59246 return algorithm 59247 } 59248 59249 for (let i = 1; i < metadataList.length; ++i) { 59250 const metadata = metadataList[i] 59251 // If the algorithm is sha512, then it is the strongest 59252 // and we can break the loop immediately 59253 if (metadata.algo[3] === '5') { 59254 algorithm = 'sha512' 59255 break 59256 // If the algorithm is sha384, then a potential sha256 or sha384 is ignored 59257 } else if (algorithm[3] === '3') { 59258 continue 59259 // algorithm is sha256, check if algorithm is sha384 and if so, set it as 59260 // the strongest 59261 } else if (metadata.algo[3] === '3') { 59262 algorithm = 'sha384' 59263 } 59264 } 59265 return algorithm 59266 } 59267 59268 function filterMetadataListByAlgorithm (metadataList, algorithm) { 59269 if (metadataList.length === 1) { 59270 return metadataList 59271 } 59272 59273 let pos = 0 59274 for (let i = 0; i < metadataList.length; ++i) { 59275 if (metadataList[i].algo === algorithm) { 59276 metadataList[pos++] = metadataList[i] 59277 } 59278 } 59279 59280 metadataList.length = pos 59281 59282 return metadataList 59283 } 59284 59285 /** 59286 * Compares two base64 strings, allowing for base64url 59287 * in the second string. 59288 * 59289 * @param {string} actualValue always base64 59290 * @param {string} expectedValue base64 or base64url 59291 * @returns {boolean} 59292 */ 59293 function compareBase64Mixed (actualValue, expectedValue) { 59294 if (actualValue.length !== expectedValue.length) { 59295 return false 59296 } 59297 for (let i = 0; i < actualValue.length; ++i) { 59298 if (actualValue[i] !== expectedValue[i]) { 59299 if ( 59300 (actualValue[i] === '+' && expectedValue[i] === '-') || 59301 (actualValue[i] === '/' && expectedValue[i] === '_') 59302 ) { 59303 continue 59304 } 59305 return false 59306 } 59307 } 59308 59309 return true 59310 } 59311 59312 // https://w3c.github.io/webappsec-upgrade-insecure-requests/#upgrade-request 59313 function tryUpgradeRequestToAPotentiallyTrustworthyURL (request) { 59314 // TODO 59315 } 59316 59317 /** 59318 * @link {https://html.spec.whatwg.org/multipage/origin.html#same-origin} 59319 * @param {URL} A 59320 * @param {URL} B 59321 */ 59322 function sameOrigin (A, B) { 59323 // 1. If A and B are the same opaque origin, then return true. 59324 if (A.origin === B.origin && A.origin === 'null') { 59325 return true 59326 } 59327 59328 // 2. If A and B are both tuple origins and their schemes, 59329 // hosts, and port are identical, then return true. 59330 if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) { 59331 return true 59332 } 59333 59334 // 3. Return false. 59335 return false 59336 } 59337 59338 function createDeferredPromise () { 59339 let res 59340 let rej 59341 const promise = new Promise((resolve, reject) => { 59342 res = resolve 59343 rej = reject 59344 }) 59345 59346 return { promise, resolve: res, reject: rej } 59347 } 59348 59349 function isAborted (fetchParams) { 59350 return fetchParams.controller.state === 'aborted' 59351 } 59352 59353 function isCancelled (fetchParams) { 59354 return fetchParams.controller.state === 'aborted' || 59355 fetchParams.controller.state === 'terminated' 59356 } 59357 59358 const normalizeMethodRecord = { 59359 delete: 'DELETE', 59360 DELETE: 'DELETE', 59361 get: 'GET', 59362 GET: 'GET', 59363 head: 'HEAD', 59364 HEAD: 'HEAD', 59365 options: 'OPTIONS', 59366 OPTIONS: 'OPTIONS', 59367 post: 'POST', 59368 POST: 'POST', 59369 put: 'PUT', 59370 PUT: 'PUT' 59371 } 59372 59373 // Note: object prototypes should not be able to be referenced. e.g. `Object#hasOwnProperty`. 59374 Object.setPrototypeOf(normalizeMethodRecord, null) 59375 59376 /** 59377 * @see https://fetch.spec.whatwg.org/#concept-method-normalize 59378 * @param {string} method 59379 */ 59380 function normalizeMethod (method) { 59381 return normalizeMethodRecord[method.toLowerCase()] ?? method 59382 } 59383 59384 // https://infra.spec.whatwg.org/#serialize-a-javascript-value-to-a-json-string 59385 function serializeJavascriptValueToJSONString (value) { 59386 // 1. Let result be ? Call(%JSON.stringify%, undefined, « value »). 59387 const result = JSON.stringify(value) 59388 59389 // 2. If result is undefined, then throw a TypeError. 59390 if (result === undefined) { 59391 throw new TypeError('Value is not JSON serializable') 59392 } 59393 59394 // 3. Assert: result is a string. 59395 assert(typeof result === 'string') 59396 59397 // 4. Return result. 59398 return result 59399 } 59400 59401 // https://tc39.es/ecma262/#sec-%25iteratorprototype%25-object 59402 const esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())) 59403 59404 /** 59405 * @see https://webidl.spec.whatwg.org/#dfn-iterator-prototype-object 59406 * @param {() => unknown[]} iterator 59407 * @param {string} name name of the instance 59408 * @param {'key'|'value'|'key+value'} kind 59409 */ 59410 function makeIterator (iterator, name, kind) { 59411 const object = { 59412 index: 0, 59413 kind, 59414 target: iterator 59415 } 59416 59417 const i = { 59418 next () { 59419 // 1. Let interface be the interface for which the iterator prototype object exists. 59420 59421 // 2. Let thisValue be the this value. 59422 59423 // 3. Let object be ? ToObject(thisValue). 59424 59425 // 4. If object is a platform object, then perform a security 59426 // check, passing: 59427 59428 // 5. If object is not a default iterator object for interface, 59429 // then throw a TypeError. 59430 if (Object.getPrototypeOf(this) !== i) { 59431 throw new TypeError( 59432 `'next' called on an object that does not implement interface ${name} Iterator.` 59433 ) 59434 } 59435 59436 // 6. Let index be object’s index. 59437 // 7. Let kind be object’s kind. 59438 // 8. Let values be object’s target's value pairs to iterate over. 59439 const { index, kind, target } = object 59440 const values = target() 59441 59442 // 9. Let len be the length of values. 59443 const len = values.length 59444 59445 // 10. If index is greater than or equal to len, then return 59446 // CreateIterResultObject(undefined, true). 59447 if (index >= len) { 59448 return { value: undefined, done: true } 59449 } 59450 59451 // 11. Let pair be the entry in values at index index. 59452 const pair = values[index] 59453 59454 // 12. Set object’s index to index + 1. 59455 object.index = index + 1 59456 59457 // 13. Return the iterator result for pair and kind. 59458 return iteratorResult(pair, kind) 59459 }, 59460 // The class string of an iterator prototype object for a given interface is the 59461 // result of concatenating the identifier of the interface and the string " Iterator". 59462 [Symbol.toStringTag]: `${name} Iterator` 59463 } 59464 59465 // The [[Prototype]] internal slot of an iterator prototype object must be %IteratorPrototype%. 59466 Object.setPrototypeOf(i, esIteratorPrototype) 59467 // esIteratorPrototype needs to be the prototype of i 59468 // which is the prototype of an empty object. Yes, it's confusing. 59469 return Object.setPrototypeOf({}, i) 59470 } 59471 59472 // https://webidl.spec.whatwg.org/#iterator-result 59473 function iteratorResult (pair, kind) { 59474 let result 59475 59476 // 1. Let result be a value determined by the value of kind: 59477 switch (kind) { 59478 case 'key': { 59479 // 1. Let idlKey be pair’s key. 59480 // 2. Let key be the result of converting idlKey to an 59481 // ECMAScript value. 59482 // 3. result is key. 59483 result = pair[0] 59484 break 59485 } 59486 case 'value': { 59487 // 1. Let idlValue be pair’s value. 59488 // 2. Let value be the result of converting idlValue to 59489 // an ECMAScript value. 59490 // 3. result is value. 59491 result = pair[1] 59492 break 59493 } 59494 case 'key+value': { 59495 // 1. Let idlKey be pair’s key. 59496 // 2. Let idlValue be pair’s value. 59497 // 3. Let key be the result of converting idlKey to an 59498 // ECMAScript value. 59499 // 4. Let value be the result of converting idlValue to 59500 // an ECMAScript value. 59501 // 5. Let array be ! ArrayCreate(2). 59502 // 6. Call ! CreateDataProperty(array, "0", key). 59503 // 7. Call ! CreateDataProperty(array, "1", value). 59504 // 8. result is array. 59505 result = pair 59506 break 59507 } 59508 } 59509 59510 // 2. Return CreateIterResultObject(result, false). 59511 return { value: result, done: false } 59512 } 59513 59514 /** 59515 * @see https://fetch.spec.whatwg.org/#body-fully-read 59516 */ 59517 async function fullyReadBody (body, processBody, processBodyError) { 59518 // 1. If taskDestination is null, then set taskDestination to 59519 // the result of starting a new parallel queue. 59520 59521 // 2. Let successSteps given a byte sequence bytes be to queue a 59522 // fetch task to run processBody given bytes, with taskDestination. 59523 const successSteps = processBody 59524 59525 // 3. Let errorSteps be to queue a fetch task to run processBodyError, 59526 // with taskDestination. 59527 const errorSteps = processBodyError 59528 59529 // 4. Let reader be the result of getting a reader for body’s stream. 59530 // If that threw an exception, then run errorSteps with that 59531 // exception and return. 59532 let reader 59533 59534 try { 59535 reader = body.stream.getReader() 59536 } catch (e) { 59537 errorSteps(e) 59538 return 59539 } 59540 59541 // 5. Read all bytes from reader, given successSteps and errorSteps. 59542 try { 59543 const result = await readAllBytes(reader) 59544 successSteps(result) 59545 } catch (e) { 59546 errorSteps(e) 59547 } 59548 } 59549 59550 /** @type {ReadableStream} */ 59551 let ReadableStream = globalThis.ReadableStream 59552 59553 function isReadableStreamLike (stream) { 59554 if (!ReadableStream) { 59555 ReadableStream = (__nccwpck_require__(35356).ReadableStream) 59556 } 59557 59558 return stream instanceof ReadableStream || ( 59559 stream[Symbol.toStringTag] === 'ReadableStream' && 59560 typeof stream.tee === 'function' 59561 ) 59562 } 59563 59564 const MAXIMUM_ARGUMENT_LENGTH = 65535 59565 59566 /** 59567 * @see https://infra.spec.whatwg.org/#isomorphic-decode 59568 * @param {number[]|Uint8Array} input 59569 */ 59570 function isomorphicDecode (input) { 59571 // 1. To isomorphic decode a byte sequence input, return a string whose code point 59572 // length is equal to input’s length and whose code points have the same values 59573 // as the values of input’s bytes, in the same order. 59574 59575 if (input.length < MAXIMUM_ARGUMENT_LENGTH) { 59576 return String.fromCharCode(...input) 59577 } 59578 59579 return input.reduce((previous, current) => previous + String.fromCharCode(current), '') 59580 } 59581 59582 /** 59583 * @param {ReadableStreamController<Uint8Array>} controller 59584 */ 59585 function readableStreamClose (controller) { 59586 try { 59587 controller.close() 59588 } catch (err) { 59589 // TODO: add comment explaining why this error occurs. 59590 if (!err.message.includes('Controller is already closed')) { 59591 throw err 59592 } 59593 } 59594 } 59595 59596 /** 59597 * @see https://infra.spec.whatwg.org/#isomorphic-encode 59598 * @param {string} input 59599 */ 59600 function isomorphicEncode (input) { 59601 // 1. Assert: input contains no code points greater than U+00FF. 59602 for (let i = 0; i < input.length; i++) { 59603 assert(input.charCodeAt(i) <= 0xFF) 59604 } 59605 59606 // 2. Return a byte sequence whose length is equal to input’s code 59607 // point length and whose bytes have the same values as the 59608 // values of input’s code points, in the same order 59609 return input 59610 } 59611 59612 /** 59613 * @see https://streams.spec.whatwg.org/#readablestreamdefaultreader-read-all-bytes 59614 * @see https://streams.spec.whatwg.org/#read-loop 59615 * @param {ReadableStreamDefaultReader} reader 59616 */ 59617 async function readAllBytes (reader) { 59618 const bytes = [] 59619 let byteLength = 0 59620 59621 while (true) { 59622 const { done, value: chunk } = await reader.read() 59623 59624 if (done) { 59625 // 1. Call successSteps with bytes. 59626 return Buffer.concat(bytes, byteLength) 59627 } 59628 59629 // 1. If chunk is not a Uint8Array object, call failureSteps 59630 // with a TypeError and abort these steps. 59631 if (!isUint8Array(chunk)) { 59632 throw new TypeError('Received non-Uint8Array chunk') 59633 } 59634 59635 // 2. Append the bytes represented by chunk to bytes. 59636 bytes.push(chunk) 59637 byteLength += chunk.length 59638 59639 // 3. Read-loop given reader, bytes, successSteps, and failureSteps. 59640 } 59641 } 59642 59643 /** 59644 * @see https://fetch.spec.whatwg.org/#is-local 59645 * @param {URL} url 59646 */ 59647 function urlIsLocal (url) { 59648 assert('protocol' in url) // ensure it's a url object 59649 59650 const protocol = url.protocol 59651 59652 return protocol === 'about:' || protocol === 'blob:' || protocol === 'data:' 59653 } 59654 59655 /** 59656 * @param {string|URL} url 59657 */ 59658 function urlHasHttpsScheme (url) { 59659 if (typeof url === 'string') { 59660 return url.startsWith('https:') 59661 } 59662 59663 return url.protocol === 'https:' 59664 } 59665 59666 /** 59667 * @see https://fetch.spec.whatwg.org/#http-scheme 59668 * @param {URL} url 59669 */ 59670 function urlIsHttpHttpsScheme (url) { 59671 assert('protocol' in url) // ensure it's a url object 59672 59673 const protocol = url.protocol 59674 59675 return protocol === 'http:' || protocol === 'https:' 59676 } 59677 59678 /** 59679 * Fetch supports node >= 16.8.0, but Object.hasOwn was added in v16.9.0. 59680 */ 59681 const hasOwn = Object.hasOwn || ((dict, key) => Object.prototype.hasOwnProperty.call(dict, key)) 59682 59683 module.exports = { 59684 isAborted, 59685 isCancelled, 59686 createDeferredPromise, 59687 ReadableStreamFrom, 59688 toUSVString, 59689 tryUpgradeRequestToAPotentiallyTrustworthyURL, 59690 coarsenedSharedCurrentTime, 59691 determineRequestsReferrer, 59692 makePolicyContainer, 59693 clonePolicyContainer, 59694 appendFetchMetadata, 59695 appendRequestOriginHeader, 59696 TAOCheck, 59697 corsCheck, 59698 crossOriginResourcePolicyCheck, 59699 createOpaqueTimingInfo, 59700 setRequestReferrerPolicyOnRedirect, 59701 isValidHTTPToken, 59702 requestBadPort, 59703 requestCurrentURL, 59704 responseURL, 59705 responseLocationURL, 59706 isBlobLike, 59707 isURLPotentiallyTrustworthy, 59708 isValidReasonPhrase, 59709 sameOrigin, 59710 normalizeMethod, 59711 serializeJavascriptValueToJSONString, 59712 makeIterator, 59713 isValidHeaderName, 59714 isValidHeaderValue, 59715 hasOwn, 59716 isErrorLike, 59717 fullyReadBody, 59718 bytesMatch, 59719 isReadableStreamLike, 59720 readableStreamClose, 59721 isomorphicEncode, 59722 isomorphicDecode, 59723 urlIsLocal, 59724 urlHasHttpsScheme, 59725 urlIsHttpHttpsScheme, 59726 readAllBytes, 59727 normalizeMethodRecord, 59728 parseMetadata 59729 } 59730 59731 59732 /***/ }), 59733 59734 /***/ 21744: 59735 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 59736 59737 "use strict"; 59738 59739 59740 const { types } = __nccwpck_require__(73837) 59741 const { hasOwn, toUSVString } = __nccwpck_require__(52538) 59742 59743 /** @type {import('../../types/webidl').Webidl} */ 59744 const webidl = {} 59745 webidl.converters = {} 59746 webidl.util = {} 59747 webidl.errors = {} 59748 59749 webidl.errors.exception = function (message) { 59750 return new TypeError(`${message.header}: ${message.message}`) 59751 } 59752 59753 webidl.errors.conversionFailed = function (context) { 59754 const plural = context.types.length === 1 ? '' : ' one of' 59755 const message = 59756 `${context.argument} could not be converted to` + 59757 `${plural}: ${context.types.join(', ')}.` 59758 59759 return webidl.errors.exception({ 59760 header: context.prefix, 59761 message 59762 }) 59763 } 59764 59765 webidl.errors.invalidArgument = function (context) { 59766 return webidl.errors.exception({ 59767 header: context.prefix, 59768 message: `"${context.value}" is an invalid ${context.type}.` 59769 }) 59770 } 59771 59772 // https://webidl.spec.whatwg.org/#implements 59773 webidl.brandCheck = function (V, I, opts = undefined) { 59774 if (opts?.strict !== false && !(V instanceof I)) { 59775 throw new TypeError('Illegal invocation') 59776 } else { 59777 return V?.[Symbol.toStringTag] === I.prototype[Symbol.toStringTag] 59778 } 59779 } 59780 59781 webidl.argumentLengthCheck = function ({ length }, min, ctx) { 59782 if (length < min) { 59783 throw webidl.errors.exception({ 59784 message: `${min} argument${min !== 1 ? 's' : ''} required, ` + 59785 `but${length ? ' only' : ''} ${length} found.`, 59786 ...ctx 59787 }) 59788 } 59789 } 59790 59791 webidl.illegalConstructor = function () { 59792 throw webidl.errors.exception({ 59793 header: 'TypeError', 59794 message: 'Illegal constructor' 59795 }) 59796 } 59797 59798 // https://tc39.es/ecma262/#sec-ecmascript-data-types-and-values 59799 webidl.util.Type = function (V) { 59800 switch (typeof V) { 59801 case 'undefined': return 'Undefined' 59802 case 'boolean': return 'Boolean' 59803 case 'string': return 'String' 59804 case 'symbol': return 'Symbol' 59805 case 'number': return 'Number' 59806 case 'bigint': return 'BigInt' 59807 case 'function': 59808 case 'object': { 59809 if (V === null) { 59810 return 'Null' 59811 } 59812 59813 return 'Object' 59814 } 59815 } 59816 } 59817 59818 // https://webidl.spec.whatwg.org/#abstract-opdef-converttoint 59819 webidl.util.ConvertToInt = function (V, bitLength, signedness, opts = {}) { 59820 let upperBound 59821 let lowerBound 59822 59823 // 1. If bitLength is 64, then: 59824 if (bitLength === 64) { 59825 // 1. Let upperBound be 2^53 − 1. 59826 upperBound = Math.pow(2, 53) - 1 59827 59828 // 2. If signedness is "unsigned", then let lowerBound be 0. 59829 if (signedness === 'unsigned') { 59830 lowerBound = 0 59831 } else { 59832 // 3. Otherwise let lowerBound be −2^53 + 1. 59833 lowerBound = Math.pow(-2, 53) + 1 59834 } 59835 } else if (signedness === 'unsigned') { 59836 // 2. Otherwise, if signedness is "unsigned", then: 59837 59838 // 1. Let lowerBound be 0. 59839 lowerBound = 0 59840 59841 // 2. Let upperBound be 2^bitLength − 1. 59842 upperBound = Math.pow(2, bitLength) - 1 59843 } else { 59844 // 3. Otherwise: 59845 59846 // 1. Let lowerBound be -2^bitLength − 1. 59847 lowerBound = Math.pow(-2, bitLength) - 1 59848 59849 // 2. Let upperBound be 2^bitLength − 1 − 1. 59850 upperBound = Math.pow(2, bitLength - 1) - 1 59851 } 59852 59853 // 4. Let x be ? ToNumber(V). 59854 let x = Number(V) 59855 59856 // 5. If x is −0, then set x to +0. 59857 if (x === 0) { 59858 x = 0 59859 } 59860 59861 // 6. If the conversion is to an IDL type associated 59862 // with the [EnforceRange] extended attribute, then: 59863 if (opts.enforceRange === true) { 59864 // 1. If x is NaN, +∞, or −∞, then throw a TypeError. 59865 if ( 59866 Number.isNaN(x) || 59867 x === Number.POSITIVE_INFINITY || 59868 x === Number.NEGATIVE_INFINITY 59869 ) { 59870 throw webidl.errors.exception({ 59871 header: 'Integer conversion', 59872 message: `Could not convert ${V} to an integer.` 59873 }) 59874 } 59875 59876 // 2. Set x to IntegerPart(x). 59877 x = webidl.util.IntegerPart(x) 59878 59879 // 3. If x < lowerBound or x > upperBound, then 59880 // throw a TypeError. 59881 if (x < lowerBound || x > upperBound) { 59882 throw webidl.errors.exception({ 59883 header: 'Integer conversion', 59884 message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.` 59885 }) 59886 } 59887 59888 // 4. Return x. 59889 return x 59890 } 59891 59892 // 7. If x is not NaN and the conversion is to an IDL 59893 // type associated with the [Clamp] extended 59894 // attribute, then: 59895 if (!Number.isNaN(x) && opts.clamp === true) { 59896 // 1. Set x to min(max(x, lowerBound), upperBound). 59897 x = Math.min(Math.max(x, lowerBound), upperBound) 59898 59899 // 2. Round x to the nearest integer, choosing the 59900 // even integer if it lies halfway between two, 59901 // and choosing +0 rather than −0. 59902 if (Math.floor(x) % 2 === 0) { 59903 x = Math.floor(x) 59904 } else { 59905 x = Math.ceil(x) 59906 } 59907 59908 // 3. Return x. 59909 return x 59910 } 59911 59912 // 8. If x is NaN, +0, +∞, or −∞, then return +0. 59913 if ( 59914 Number.isNaN(x) || 59915 (x === 0 && Object.is(0, x)) || 59916 x === Number.POSITIVE_INFINITY || 59917 x === Number.NEGATIVE_INFINITY 59918 ) { 59919 return 0 59920 } 59921 59922 // 9. Set x to IntegerPart(x). 59923 x = webidl.util.IntegerPart(x) 59924 59925 // 10. Set x to x modulo 2^bitLength. 59926 x = x % Math.pow(2, bitLength) 59927 59928 // 11. If signedness is "signed" and x ≥ 2^bitLength − 1, 59929 // then return x − 2^bitLength. 59930 if (signedness === 'signed' && x >= Math.pow(2, bitLength) - 1) { 59931 return x - Math.pow(2, bitLength) 59932 } 59933 59934 // 12. Otherwise, return x. 59935 return x 59936 } 59937 59938 // https://webidl.spec.whatwg.org/#abstract-opdef-integerpart 59939 webidl.util.IntegerPart = function (n) { 59940 // 1. Let r be floor(abs(n)). 59941 const r = Math.floor(Math.abs(n)) 59942 59943 // 2. If n < 0, then return -1 × r. 59944 if (n < 0) { 59945 return -1 * r 59946 } 59947 59948 // 3. Otherwise, return r. 59949 return r 59950 } 59951 59952 // https://webidl.spec.whatwg.org/#es-sequence 59953 webidl.sequenceConverter = function (converter) { 59954 return (V) => { 59955 // 1. If Type(V) is not Object, throw a TypeError. 59956 if (webidl.util.Type(V) !== 'Object') { 59957 throw webidl.errors.exception({ 59958 header: 'Sequence', 59959 message: `Value of type ${webidl.util.Type(V)} is not an Object.` 59960 }) 59961 } 59962 59963 // 2. Let method be ? GetMethod(V, @@iterator). 59964 /** @type {Generator} */ 59965 const method = V?.[Symbol.iterator]?.() 59966 const seq = [] 59967 59968 // 3. If method is undefined, throw a TypeError. 59969 if ( 59970 method === undefined || 59971 typeof method.next !== 'function' 59972 ) { 59973 throw webidl.errors.exception({ 59974 header: 'Sequence', 59975 message: 'Object is not an iterator.' 59976 }) 59977 } 59978 59979 // https://webidl.spec.whatwg.org/#create-sequence-from-iterable 59980 while (true) { 59981 const { done, value } = method.next() 59982 59983 if (done) { 59984 break 59985 } 59986 59987 seq.push(converter(value)) 59988 } 59989 59990 return seq 59991 } 59992 } 59993 59994 // https://webidl.spec.whatwg.org/#es-to-record 59995 webidl.recordConverter = function (keyConverter, valueConverter) { 59996 return (O) => { 59997 // 1. If Type(O) is not Object, throw a TypeError. 59998 if (webidl.util.Type(O) !== 'Object') { 59999 throw webidl.errors.exception({ 60000 header: 'Record', 60001 message: `Value of type ${webidl.util.Type(O)} is not an Object.` 60002 }) 60003 } 60004 60005 // 2. Let result be a new empty instance of record<K, V>. 60006 const result = {} 60007 60008 if (!types.isProxy(O)) { 60009 // Object.keys only returns enumerable properties 60010 const keys = Object.keys(O) 60011 60012 for (const key of keys) { 60013 // 1. Let typedKey be key converted to an IDL value of type K. 60014 const typedKey = keyConverter(key) 60015 60016 // 2. Let value be ? Get(O, key). 60017 // 3. Let typedValue be value converted to an IDL value of type V. 60018 const typedValue = valueConverter(O[key]) 60019 60020 // 4. Set result[typedKey] to typedValue. 60021 result[typedKey] = typedValue 60022 } 60023 60024 // 5. Return result. 60025 return result 60026 } 60027 60028 // 3. Let keys be ? O.[[OwnPropertyKeys]](). 60029 const keys = Reflect.ownKeys(O) 60030 60031 // 4. For each key of keys. 60032 for (const key of keys) { 60033 // 1. Let desc be ? O.[[GetOwnProperty]](key). 60034 const desc = Reflect.getOwnPropertyDescriptor(O, key) 60035 60036 // 2. If desc is not undefined and desc.[[Enumerable]] is true: 60037 if (desc?.enumerable) { 60038 // 1. Let typedKey be key converted to an IDL value of type K. 60039 const typedKey = keyConverter(key) 60040 60041 // 2. Let value be ? Get(O, key). 60042 // 3. Let typedValue be value converted to an IDL value of type V. 60043 const typedValue = valueConverter(O[key]) 60044 60045 // 4. Set result[typedKey] to typedValue. 60046 result[typedKey] = typedValue 60047 } 60048 } 60049 60050 // 5. Return result. 60051 return result 60052 } 60053 } 60054 60055 webidl.interfaceConverter = function (i) { 60056 return (V, opts = {}) => { 60057 if (opts.strict !== false && !(V instanceof i)) { 60058 throw webidl.errors.exception({ 60059 header: i.name, 60060 message: `Expected ${V} to be an instance of ${i.name}.` 60061 }) 60062 } 60063 60064 return V 60065 } 60066 } 60067 60068 webidl.dictionaryConverter = function (converters) { 60069 return (dictionary) => { 60070 const type = webidl.util.Type(dictionary) 60071 const dict = {} 60072 60073 if (type === 'Null' || type === 'Undefined') { 60074 return dict 60075 } else if (type !== 'Object') { 60076 throw webidl.errors.exception({ 60077 header: 'Dictionary', 60078 message: `Expected ${dictionary} to be one of: Null, Undefined, Object.` 60079 }) 60080 } 60081 60082 for (const options of converters) { 60083 const { key, defaultValue, required, converter } = options 60084 60085 if (required === true) { 60086 if (!hasOwn(dictionary, key)) { 60087 throw webidl.errors.exception({ 60088 header: 'Dictionary', 60089 message: `Missing required key "${key}".` 60090 }) 60091 } 60092 } 60093 60094 let value = dictionary[key] 60095 const hasDefault = hasOwn(options, 'defaultValue') 60096 60097 // Only use defaultValue if value is undefined and 60098 // a defaultValue options was provided. 60099 if (hasDefault && value !== null) { 60100 value = value ?? defaultValue 60101 } 60102 60103 // A key can be optional and have no default value. 60104 // When this happens, do not perform a conversion, 60105 // and do not assign the key a value. 60106 if (required || hasDefault || value !== undefined) { 60107 value = converter(value) 60108 60109 if ( 60110 options.allowedValues && 60111 !options.allowedValues.includes(value) 60112 ) { 60113 throw webidl.errors.exception({ 60114 header: 'Dictionary', 60115 message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(', ')}.` 60116 }) 60117 } 60118 60119 dict[key] = value 60120 } 60121 } 60122 60123 return dict 60124 } 60125 } 60126 60127 webidl.nullableConverter = function (converter) { 60128 return (V) => { 60129 if (V === null) { 60130 return V 60131 } 60132 60133 return converter(V) 60134 } 60135 } 60136 60137 // https://webidl.spec.whatwg.org/#es-DOMString 60138 webidl.converters.DOMString = function (V, opts = {}) { 60139 // 1. If V is null and the conversion is to an IDL type 60140 // associated with the [LegacyNullToEmptyString] 60141 // extended attribute, then return the DOMString value 60142 // that represents the empty string. 60143 if (V === null && opts.legacyNullToEmptyString) { 60144 return '' 60145 } 60146 60147 // 2. Let x be ? ToString(V). 60148 if (typeof V === 'symbol') { 60149 throw new TypeError('Could not convert argument of type symbol to string.') 60150 } 60151 60152 // 3. Return the IDL DOMString value that represents the 60153 // same sequence of code units as the one the 60154 // ECMAScript String value x represents. 60155 return String(V) 60156 } 60157 60158 // https://webidl.spec.whatwg.org/#es-ByteString 60159 webidl.converters.ByteString = function (V) { 60160 // 1. Let x be ? ToString(V). 60161 // Note: DOMString converter perform ? ToString(V) 60162 const x = webidl.converters.DOMString(V) 60163 60164 // 2. If the value of any element of x is greater than 60165 // 255, then throw a TypeError. 60166 for (let index = 0; index < x.length; index++) { 60167 if (x.charCodeAt(index) > 255) { 60168 throw new TypeError( 60169 'Cannot convert argument to a ByteString because the character at ' + 60170 `index ${index} has a value of ${x.charCodeAt(index)} which is greater than 255.` 60171 ) 60172 } 60173 } 60174 60175 // 3. Return an IDL ByteString value whose length is the 60176 // length of x, and where the value of each element is 60177 // the value of the corresponding element of x. 60178 return x 60179 } 60180 60181 // https://webidl.spec.whatwg.org/#es-USVString 60182 webidl.converters.USVString = toUSVString 60183 60184 // https://webidl.spec.whatwg.org/#es-boolean 60185 webidl.converters.boolean = function (V) { 60186 // 1. Let x be the result of computing ToBoolean(V). 60187 const x = Boolean(V) 60188 60189 // 2. Return the IDL boolean value that is the one that represents 60190 // the same truth value as the ECMAScript Boolean value x. 60191 return x 60192 } 60193 60194 // https://webidl.spec.whatwg.org/#es-any 60195 webidl.converters.any = function (V) { 60196 return V 60197 } 60198 60199 // https://webidl.spec.whatwg.org/#es-long-long 60200 webidl.converters['long long'] = function (V) { 60201 // 1. Let x be ? ConvertToInt(V, 64, "signed"). 60202 const x = webidl.util.ConvertToInt(V, 64, 'signed') 60203 60204 // 2. Return the IDL long long value that represents 60205 // the same numeric value as x. 60206 return x 60207 } 60208 60209 // https://webidl.spec.whatwg.org/#es-unsigned-long-long 60210 webidl.converters['unsigned long long'] = function (V) { 60211 // 1. Let x be ? ConvertToInt(V, 64, "unsigned"). 60212 const x = webidl.util.ConvertToInt(V, 64, 'unsigned') 60213 60214 // 2. Return the IDL unsigned long long value that 60215 // represents the same numeric value as x. 60216 return x 60217 } 60218 60219 // https://webidl.spec.whatwg.org/#es-unsigned-long 60220 webidl.converters['unsigned long'] = function (V) { 60221 // 1. Let x be ? ConvertToInt(V, 32, "unsigned"). 60222 const x = webidl.util.ConvertToInt(V, 32, 'unsigned') 60223 60224 // 2. Return the IDL unsigned long value that 60225 // represents the same numeric value as x. 60226 return x 60227 } 60228 60229 // https://webidl.spec.whatwg.org/#es-unsigned-short 60230 webidl.converters['unsigned short'] = function (V, opts) { 60231 // 1. Let x be ? ConvertToInt(V, 16, "unsigned"). 60232 const x = webidl.util.ConvertToInt(V, 16, 'unsigned', opts) 60233 60234 // 2. Return the IDL unsigned short value that represents 60235 // the same numeric value as x. 60236 return x 60237 } 60238 60239 // https://webidl.spec.whatwg.org/#idl-ArrayBuffer 60240 webidl.converters.ArrayBuffer = function (V, opts = {}) { 60241 // 1. If Type(V) is not Object, or V does not have an 60242 // [[ArrayBufferData]] internal slot, then throw a 60243 // TypeError. 60244 // see: https://tc39.es/ecma262/#sec-properties-of-the-arraybuffer-instances 60245 // see: https://tc39.es/ecma262/#sec-properties-of-the-sharedarraybuffer-instances 60246 if ( 60247 webidl.util.Type(V) !== 'Object' || 60248 !types.isAnyArrayBuffer(V) 60249 ) { 60250 throw webidl.errors.conversionFailed({ 60251 prefix: `${V}`, 60252 argument: `${V}`, 60253 types: ['ArrayBuffer'] 60254 }) 60255 } 60256 60257 // 2. If the conversion is not to an IDL type associated 60258 // with the [AllowShared] extended attribute, and 60259 // IsSharedArrayBuffer(V) is true, then throw a 60260 // TypeError. 60261 if (opts.allowShared === false && types.isSharedArrayBuffer(V)) { 60262 throw webidl.errors.exception({ 60263 header: 'ArrayBuffer', 60264 message: 'SharedArrayBuffer is not allowed.' 60265 }) 60266 } 60267 60268 // 3. If the conversion is not to an IDL type associated 60269 // with the [AllowResizable] extended attribute, and 60270 // IsResizableArrayBuffer(V) is true, then throw a 60271 // TypeError. 60272 // Note: resizable ArrayBuffers are currently a proposal. 60273 60274 // 4. Return the IDL ArrayBuffer value that is a 60275 // reference to the same object as V. 60276 return V 60277 } 60278 60279 webidl.converters.TypedArray = function (V, T, opts = {}) { 60280 // 1. Let T be the IDL type V is being converted to. 60281 60282 // 2. If Type(V) is not Object, or V does not have a 60283 // [[TypedArrayName]] internal slot with a value 60284 // equal to T’s name, then throw a TypeError. 60285 if ( 60286 webidl.util.Type(V) !== 'Object' || 60287 !types.isTypedArray(V) || 60288 V.constructor.name !== T.name 60289 ) { 60290 throw webidl.errors.conversionFailed({ 60291 prefix: `${T.name}`, 60292 argument: `${V}`, 60293 types: [T.name] 60294 }) 60295 } 60296 60297 // 3. If the conversion is not to an IDL type associated 60298 // with the [AllowShared] extended attribute, and 60299 // IsSharedArrayBuffer(V.[[ViewedArrayBuffer]]) is 60300 // true, then throw a TypeError. 60301 if (opts.allowShared === false && types.isSharedArrayBuffer(V.buffer)) { 60302 throw webidl.errors.exception({ 60303 header: 'ArrayBuffer', 60304 message: 'SharedArrayBuffer is not allowed.' 60305 }) 60306 } 60307 60308 // 4. If the conversion is not to an IDL type associated 60309 // with the [AllowResizable] extended attribute, and 60310 // IsResizableArrayBuffer(V.[[ViewedArrayBuffer]]) is 60311 // true, then throw a TypeError. 60312 // Note: resizable array buffers are currently a proposal 60313 60314 // 5. Return the IDL value of type T that is a reference 60315 // to the same object as V. 60316 return V 60317 } 60318 60319 webidl.converters.DataView = function (V, opts = {}) { 60320 // 1. If Type(V) is not Object, or V does not have a 60321 // [[DataView]] internal slot, then throw a TypeError. 60322 if (webidl.util.Type(V) !== 'Object' || !types.isDataView(V)) { 60323 throw webidl.errors.exception({ 60324 header: 'DataView', 60325 message: 'Object is not a DataView.' 60326 }) 60327 } 60328 60329 // 2. If the conversion is not to an IDL type associated 60330 // with the [AllowShared] extended attribute, and 60331 // IsSharedArrayBuffer(V.[[ViewedArrayBuffer]]) is true, 60332 // then throw a TypeError. 60333 if (opts.allowShared === false && types.isSharedArrayBuffer(V.buffer)) { 60334 throw webidl.errors.exception({ 60335 header: 'ArrayBuffer', 60336 message: 'SharedArrayBuffer is not allowed.' 60337 }) 60338 } 60339 60340 // 3. If the conversion is not to an IDL type associated 60341 // with the [AllowResizable] extended attribute, and 60342 // IsResizableArrayBuffer(V.[[ViewedArrayBuffer]]) is 60343 // true, then throw a TypeError. 60344 // Note: resizable ArrayBuffers are currently a proposal 60345 60346 // 4. Return the IDL DataView value that is a reference 60347 // to the same object as V. 60348 return V 60349 } 60350 60351 // https://webidl.spec.whatwg.org/#BufferSource 60352 webidl.converters.BufferSource = function (V, opts = {}) { 60353 if (types.isAnyArrayBuffer(V)) { 60354 return webidl.converters.ArrayBuffer(V, opts) 60355 } 60356 60357 if (types.isTypedArray(V)) { 60358 return webidl.converters.TypedArray(V, V.constructor) 60359 } 60360 60361 if (types.isDataView(V)) { 60362 return webidl.converters.DataView(V, opts) 60363 } 60364 60365 throw new TypeError(`Could not convert ${V} to a BufferSource.`) 60366 } 60367 60368 webidl.converters['sequence<ByteString>'] = webidl.sequenceConverter( 60369 webidl.converters.ByteString 60370 ) 60371 60372 webidl.converters['sequence<sequence<ByteString>>'] = webidl.sequenceConverter( 60373 webidl.converters['sequence<ByteString>'] 60374 ) 60375 60376 webidl.converters['record<ByteString, ByteString>'] = webidl.recordConverter( 60377 webidl.converters.ByteString, 60378 webidl.converters.ByteString 60379 ) 60380 60381 module.exports = { 60382 webidl 60383 } 60384 60385 60386 /***/ }), 60387 60388 /***/ 84854: 60389 /***/ ((module) => { 60390 60391 "use strict"; 60392 60393 60394 /** 60395 * @see https://encoding.spec.whatwg.org/#concept-encoding-get 60396 * @param {string|undefined} label 60397 */ 60398 function getEncoding (label) { 60399 if (!label) { 60400 return 'failure' 60401 } 60402 60403 // 1. Remove any leading and trailing ASCII whitespace from label. 60404 // 2. If label is an ASCII case-insensitive match for any of the 60405 // labels listed in the table below, then return the 60406 // corresponding encoding; otherwise return failure. 60407 switch (label.trim().toLowerCase()) { 60408 case 'unicode-1-1-utf-8': 60409 case 'unicode11utf8': 60410 case 'unicode20utf8': 60411 case 'utf-8': 60412 case 'utf8': 60413 case 'x-unicode20utf8': 60414 return 'UTF-8' 60415 case '866': 60416 case 'cp866': 60417 case 'csibm866': 60418 case 'ibm866': 60419 return 'IBM866' 60420 case 'csisolatin2': 60421 case 'iso-8859-2': 60422 case 'iso-ir-101': 60423 case 'iso8859-2': 60424 case 'iso88592': 60425 case 'iso_8859-2': 60426 case 'iso_8859-2:1987': 60427 case 'l2': 60428 case 'latin2': 60429 return 'ISO-8859-2' 60430 case 'csisolatin3': 60431 case 'iso-8859-3': 60432 case 'iso-ir-109': 60433 case 'iso8859-3': 60434 case 'iso88593': 60435 case 'iso_8859-3': 60436 case 'iso_8859-3:1988': 60437 case 'l3': 60438 case 'latin3': 60439 return 'ISO-8859-3' 60440 case 'csisolatin4': 60441 case 'iso-8859-4': 60442 case 'iso-ir-110': 60443 case 'iso8859-4': 60444 case 'iso88594': 60445 case 'iso_8859-4': 60446 case 'iso_8859-4:1988': 60447 case 'l4': 60448 case 'latin4': 60449 return 'ISO-8859-4' 60450 case 'csisolatincyrillic': 60451 case 'cyrillic': 60452 case 'iso-8859-5': 60453 case 'iso-ir-144': 60454 case 'iso8859-5': 60455 case 'iso88595': 60456 case 'iso_8859-5': 60457 case 'iso_8859-5:1988': 60458 return 'ISO-8859-5' 60459 case 'arabic': 60460 case 'asmo-708': 60461 case 'csiso88596e': 60462 case 'csiso88596i': 60463 case 'csisolatinarabic': 60464 case 'ecma-114': 60465 case 'iso-8859-6': 60466 case 'iso-8859-6-e': 60467 case 'iso-8859-6-i': 60468 case 'iso-ir-127': 60469 case 'iso8859-6': 60470 case 'iso88596': 60471 case 'iso_8859-6': 60472 case 'iso_8859-6:1987': 60473 return 'ISO-8859-6' 60474 case 'csisolatingreek': 60475 case 'ecma-118': 60476 case 'elot_928': 60477 case 'greek': 60478 case 'greek8': 60479 case 'iso-8859-7': 60480 case 'iso-ir-126': 60481 case 'iso8859-7': 60482 case 'iso88597': 60483 case 'iso_8859-7': 60484 case 'iso_8859-7:1987': 60485 case 'sun_eu_greek': 60486 return 'ISO-8859-7' 60487 case 'csiso88598e': 60488 case 'csisolatinhebrew': 60489 case 'hebrew': 60490 case 'iso-8859-8': 60491 case 'iso-8859-8-e': 60492 case 'iso-ir-138': 60493 case 'iso8859-8': 60494 case 'iso88598': 60495 case 'iso_8859-8': 60496 case 'iso_8859-8:1988': 60497 case 'visual': 60498 return 'ISO-8859-8' 60499 case 'csiso88598i': 60500 case 'iso-8859-8-i': 60501 case 'logical': 60502 return 'ISO-8859-8-I' 60503 case 'csisolatin6': 60504 case 'iso-8859-10': 60505 case 'iso-ir-157': 60506 case 'iso8859-10': 60507 case 'iso885910': 60508 case 'l6': 60509 case 'latin6': 60510 return 'ISO-8859-10' 60511 case 'iso-8859-13': 60512 case 'iso8859-13': 60513 case 'iso885913': 60514 return 'ISO-8859-13' 60515 case 'iso-8859-14': 60516 case 'iso8859-14': 60517 case 'iso885914': 60518 return 'ISO-8859-14' 60519 case 'csisolatin9': 60520 case 'iso-8859-15': 60521 case 'iso8859-15': 60522 case 'iso885915': 60523 case 'iso_8859-15': 60524 case 'l9': 60525 return 'ISO-8859-15' 60526 case 'iso-8859-16': 60527 return 'ISO-8859-16' 60528 case 'cskoi8r': 60529 case 'koi': 60530 case 'koi8': 60531 case 'koi8-r': 60532 case 'koi8_r': 60533 return 'KOI8-R' 60534 case 'koi8-ru': 60535 case 'koi8-u': 60536 return 'KOI8-U' 60537 case 'csmacintosh': 60538 case 'mac': 60539 case 'macintosh': 60540 case 'x-mac-roman': 60541 return 'macintosh' 60542 case 'iso-8859-11': 60543 case 'iso8859-11': 60544 case 'iso885911': 60545 case 'tis-620': 60546 case 'windows-874': 60547 return 'windows-874' 60548 case 'cp1250': 60549 case 'windows-1250': 60550 case 'x-cp1250': 60551 return 'windows-1250' 60552 case 'cp1251': 60553 case 'windows-1251': 60554 case 'x-cp1251': 60555 return 'windows-1251' 60556 case 'ansi_x3.4-1968': 60557 case 'ascii': 60558 case 'cp1252': 60559 case 'cp819': 60560 case 'csisolatin1': 60561 case 'ibm819': 60562 case 'iso-8859-1': 60563 case 'iso-ir-100': 60564 case 'iso8859-1': 60565 case 'iso88591': 60566 case 'iso_8859-1': 60567 case 'iso_8859-1:1987': 60568 case 'l1': 60569 case 'latin1': 60570 case 'us-ascii': 60571 case 'windows-1252': 60572 case 'x-cp1252': 60573 return 'windows-1252' 60574 case 'cp1253': 60575 case 'windows-1253': 60576 case 'x-cp1253': 60577 return 'windows-1253' 60578 case 'cp1254': 60579 case 'csisolatin5': 60580 case 'iso-8859-9': 60581 case 'iso-ir-148': 60582 case 'iso8859-9': 60583 case 'iso88599': 60584 case 'iso_8859-9': 60585 case 'iso_8859-9:1989': 60586 case 'l5': 60587 case 'latin5': 60588 case 'windows-1254': 60589 case 'x-cp1254': 60590 return 'windows-1254' 60591 case 'cp1255': 60592 case 'windows-1255': 60593 case 'x-cp1255': 60594 return 'windows-1255' 60595 case 'cp1256': 60596 case 'windows-1256': 60597 case 'x-cp1256': 60598 return 'windows-1256' 60599 case 'cp1257': 60600 case 'windows-1257': 60601 case 'x-cp1257': 60602 return 'windows-1257' 60603 case 'cp1258': 60604 case 'windows-1258': 60605 case 'x-cp1258': 60606 return 'windows-1258' 60607 case 'x-mac-cyrillic': 60608 case 'x-mac-ukrainian': 60609 return 'x-mac-cyrillic' 60610 case 'chinese': 60611 case 'csgb2312': 60612 case 'csiso58gb231280': 60613 case 'gb2312': 60614 case 'gb_2312': 60615 case 'gb_2312-80': 60616 case 'gbk': 60617 case 'iso-ir-58': 60618 case 'x-gbk': 60619 return 'GBK' 60620 case 'gb18030': 60621 return 'gb18030' 60622 case 'big5': 60623 case 'big5-hkscs': 60624 case 'cn-big5': 60625 case 'csbig5': 60626 case 'x-x-big5': 60627 return 'Big5' 60628 case 'cseucpkdfmtjapanese': 60629 case 'euc-jp': 60630 case 'x-euc-jp': 60631 return 'EUC-JP' 60632 case 'csiso2022jp': 60633 case 'iso-2022-jp': 60634 return 'ISO-2022-JP' 60635 case 'csshiftjis': 60636 case 'ms932': 60637 case 'ms_kanji': 60638 case 'shift-jis': 60639 case 'shift_jis': 60640 case 'sjis': 60641 case 'windows-31j': 60642 case 'x-sjis': 60643 return 'Shift_JIS' 60644 case 'cseuckr': 60645 case 'csksc56011987': 60646 case 'euc-kr': 60647 case 'iso-ir-149': 60648 case 'korean': 60649 case 'ks_c_5601-1987': 60650 case 'ks_c_5601-1989': 60651 case 'ksc5601': 60652 case 'ksc_5601': 60653 case 'windows-949': 60654 return 'EUC-KR' 60655 case 'csiso2022kr': 60656 case 'hz-gb-2312': 60657 case 'iso-2022-cn': 60658 case 'iso-2022-cn-ext': 60659 case 'iso-2022-kr': 60660 case 'replacement': 60661 return 'replacement' 60662 case 'unicodefffe': 60663 case 'utf-16be': 60664 return 'UTF-16BE' 60665 case 'csunicode': 60666 case 'iso-10646-ucs-2': 60667 case 'ucs-2': 60668 case 'unicode': 60669 case 'unicodefeff': 60670 case 'utf-16': 60671 case 'utf-16le': 60672 return 'UTF-16LE' 60673 case 'x-user-defined': 60674 return 'x-user-defined' 60675 default: return 'failure' 60676 } 60677 } 60678 60679 module.exports = { 60680 getEncoding 60681 } 60682 60683 60684 /***/ }), 60685 60686 /***/ 1446: 60687 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 60688 60689 "use strict"; 60690 60691 60692 const { 60693 staticPropertyDescriptors, 60694 readOperation, 60695 fireAProgressEvent 60696 } = __nccwpck_require__(87530) 60697 const { 60698 kState, 60699 kError, 60700 kResult, 60701 kEvents, 60702 kAborted 60703 } = __nccwpck_require__(29054) 60704 const { webidl } = __nccwpck_require__(21744) 60705 const { kEnumerableProperty } = __nccwpck_require__(83983) 60706 60707 class FileReader extends EventTarget { 60708 constructor () { 60709 super() 60710 60711 this[kState] = 'empty' 60712 this[kResult] = null 60713 this[kError] = null 60714 this[kEvents] = { 60715 loadend: null, 60716 error: null, 60717 abort: null, 60718 load: null, 60719 progress: null, 60720 loadstart: null 60721 } 60722 } 60723 60724 /** 60725 * @see https://w3c.github.io/FileAPI/#dfn-readAsArrayBuffer 60726 * @param {import('buffer').Blob} blob 60727 */ 60728 readAsArrayBuffer (blob) { 60729 webidl.brandCheck(this, FileReader) 60730 60731 webidl.argumentLengthCheck(arguments, 1, { header: 'FileReader.readAsArrayBuffer' }) 60732 60733 blob = webidl.converters.Blob(blob, { strict: false }) 60734 60735 // The readAsArrayBuffer(blob) method, when invoked, 60736 // must initiate a read operation for blob with ArrayBuffer. 60737 readOperation(this, blob, 'ArrayBuffer') 60738 } 60739 60740 /** 60741 * @see https://w3c.github.io/FileAPI/#readAsBinaryString 60742 * @param {import('buffer').Blob} blob 60743 */ 60744 readAsBinaryString (blob) { 60745 webidl.brandCheck(this, FileReader) 60746 60747 webidl.argumentLengthCheck(arguments, 1, { header: 'FileReader.readAsBinaryString' }) 60748 60749 blob = webidl.converters.Blob(blob, { strict: false }) 60750 60751 // The readAsBinaryString(blob) method, when invoked, 60752 // must initiate a read operation for blob with BinaryString. 60753 readOperation(this, blob, 'BinaryString') 60754 } 60755 60756 /** 60757 * @see https://w3c.github.io/FileAPI/#readAsDataText 60758 * @param {import('buffer').Blob} blob 60759 * @param {string?} encoding 60760 */ 60761 readAsText (blob, encoding = undefined) { 60762 webidl.brandCheck(this, FileReader) 60763 60764 webidl.argumentLengthCheck(arguments, 1, { header: 'FileReader.readAsText' }) 60765 60766 blob = webidl.converters.Blob(blob, { strict: false }) 60767 60768 if (encoding !== undefined) { 60769 encoding = webidl.converters.DOMString(encoding) 60770 } 60771 60772 // The readAsText(blob, encoding) method, when invoked, 60773 // must initiate a read operation for blob with Text and encoding. 60774 readOperation(this, blob, 'Text', encoding) 60775 } 60776 60777 /** 60778 * @see https://w3c.github.io/FileAPI/#dfn-readAsDataURL 60779 * @param {import('buffer').Blob} blob 60780 */ 60781 readAsDataURL (blob) { 60782 webidl.brandCheck(this, FileReader) 60783 60784 webidl.argumentLengthCheck(arguments, 1, { header: 'FileReader.readAsDataURL' }) 60785 60786 blob = webidl.converters.Blob(blob, { strict: false }) 60787 60788 // The readAsDataURL(blob) method, when invoked, must 60789 // initiate a read operation for blob with DataURL. 60790 readOperation(this, blob, 'DataURL') 60791 } 60792 60793 /** 60794 * @see https://w3c.github.io/FileAPI/#dfn-abort 60795 */ 60796 abort () { 60797 // 1. If this's state is "empty" or if this's state is 60798 // "done" set this's result to null and terminate 60799 // this algorithm. 60800 if (this[kState] === 'empty' || this[kState] === 'done') { 60801 this[kResult] = null 60802 return 60803 } 60804 60805 // 2. If this's state is "loading" set this's state to 60806 // "done" and set this's result to null. 60807 if (this[kState] === 'loading') { 60808 this[kState] = 'done' 60809 this[kResult] = null 60810 } 60811 60812 // 3. If there are any tasks from this on the file reading 60813 // task source in an affiliated task queue, then remove 60814 // those tasks from that task queue. 60815 this[kAborted] = true 60816 60817 // 4. Terminate the algorithm for the read method being processed. 60818 // TODO 60819 60820 // 5. Fire a progress event called abort at this. 60821 fireAProgressEvent('abort', this) 60822 60823 // 6. If this's state is not "loading", fire a progress 60824 // event called loadend at this. 60825 if (this[kState] !== 'loading') { 60826 fireAProgressEvent('loadend', this) 60827 } 60828 } 60829 60830 /** 60831 * @see https://w3c.github.io/FileAPI/#dom-filereader-readystate 60832 */ 60833 get readyState () { 60834 webidl.brandCheck(this, FileReader) 60835 60836 switch (this[kState]) { 60837 case 'empty': return this.EMPTY 60838 case 'loading': return this.LOADING 60839 case 'done': return this.DONE 60840 } 60841 } 60842 60843 /** 60844 * @see https://w3c.github.io/FileAPI/#dom-filereader-result 60845 */ 60846 get result () { 60847 webidl.brandCheck(this, FileReader) 60848 60849 // The result attribute’s getter, when invoked, must return 60850 // this's result. 60851 return this[kResult] 60852 } 60853 60854 /** 60855 * @see https://w3c.github.io/FileAPI/#dom-filereader-error 60856 */ 60857 get error () { 60858 webidl.brandCheck(this, FileReader) 60859 60860 // The error attribute’s getter, when invoked, must return 60861 // this's error. 60862 return this[kError] 60863 } 60864 60865 get onloadend () { 60866 webidl.brandCheck(this, FileReader) 60867 60868 return this[kEvents].loadend 60869 } 60870 60871 set onloadend (fn) { 60872 webidl.brandCheck(this, FileReader) 60873 60874 if (this[kEvents].loadend) { 60875 this.removeEventListener('loadend', this[kEvents].loadend) 60876 } 60877 60878 if (typeof fn === 'function') { 60879 this[kEvents].loadend = fn 60880 this.addEventListener('loadend', fn) 60881 } else { 60882 this[kEvents].loadend = null 60883 } 60884 } 60885 60886 get onerror () { 60887 webidl.brandCheck(this, FileReader) 60888 60889 return this[kEvents].error 60890 } 60891 60892 set onerror (fn) { 60893 webidl.brandCheck(this, FileReader) 60894 60895 if (this[kEvents].error) { 60896 this.removeEventListener('error', this[kEvents].error) 60897 } 60898 60899 if (typeof fn === 'function') { 60900 this[kEvents].error = fn 60901 this.addEventListener('error', fn) 60902 } else { 60903 this[kEvents].error = null 60904 } 60905 } 60906 60907 get onloadstart () { 60908 webidl.brandCheck(this, FileReader) 60909 60910 return this[kEvents].loadstart 60911 } 60912 60913 set onloadstart (fn) { 60914 webidl.brandCheck(this, FileReader) 60915 60916 if (this[kEvents].loadstart) { 60917 this.removeEventListener('loadstart', this[kEvents].loadstart) 60918 } 60919 60920 if (typeof fn === 'function') { 60921 this[kEvents].loadstart = fn 60922 this.addEventListener('loadstart', fn) 60923 } else { 60924 this[kEvents].loadstart = null 60925 } 60926 } 60927 60928 get onprogress () { 60929 webidl.brandCheck(this, FileReader) 60930 60931 return this[kEvents].progress 60932 } 60933 60934 set onprogress (fn) { 60935 webidl.brandCheck(this, FileReader) 60936 60937 if (this[kEvents].progress) { 60938 this.removeEventListener('progress', this[kEvents].progress) 60939 } 60940 60941 if (typeof fn === 'function') { 60942 this[kEvents].progress = fn 60943 this.addEventListener('progress', fn) 60944 } else { 60945 this[kEvents].progress = null 60946 } 60947 } 60948 60949 get onload () { 60950 webidl.brandCheck(this, FileReader) 60951 60952 return this[kEvents].load 60953 } 60954 60955 set onload (fn) { 60956 webidl.brandCheck(this, FileReader) 60957 60958 if (this[kEvents].load) { 60959 this.removeEventListener('load', this[kEvents].load) 60960 } 60961 60962 if (typeof fn === 'function') { 60963 this[kEvents].load = fn 60964 this.addEventListener('load', fn) 60965 } else { 60966 this[kEvents].load = null 60967 } 60968 } 60969 60970 get onabort () { 60971 webidl.brandCheck(this, FileReader) 60972 60973 return this[kEvents].abort 60974 } 60975 60976 set onabort (fn) { 60977 webidl.brandCheck(this, FileReader) 60978 60979 if (this[kEvents].abort) { 60980 this.removeEventListener('abort', this[kEvents].abort) 60981 } 60982 60983 if (typeof fn === 'function') { 60984 this[kEvents].abort = fn 60985 this.addEventListener('abort', fn) 60986 } else { 60987 this[kEvents].abort = null 60988 } 60989 } 60990 } 60991 60992 // https://w3c.github.io/FileAPI/#dom-filereader-empty 60993 FileReader.EMPTY = FileReader.prototype.EMPTY = 0 60994 // https://w3c.github.io/FileAPI/#dom-filereader-loading 60995 FileReader.LOADING = FileReader.prototype.LOADING = 1 60996 // https://w3c.github.io/FileAPI/#dom-filereader-done 60997 FileReader.DONE = FileReader.prototype.DONE = 2 60998 60999 Object.defineProperties(FileReader.prototype, { 61000 EMPTY: staticPropertyDescriptors, 61001 LOADING: staticPropertyDescriptors, 61002 DONE: staticPropertyDescriptors, 61003 readAsArrayBuffer: kEnumerableProperty, 61004 readAsBinaryString: kEnumerableProperty, 61005 readAsText: kEnumerableProperty, 61006 readAsDataURL: kEnumerableProperty, 61007 abort: kEnumerableProperty, 61008 readyState: kEnumerableProperty, 61009 result: kEnumerableProperty, 61010 error: kEnumerableProperty, 61011 onloadstart: kEnumerableProperty, 61012 onprogress: kEnumerableProperty, 61013 onload: kEnumerableProperty, 61014 onabort: kEnumerableProperty, 61015 onerror: kEnumerableProperty, 61016 onloadend: kEnumerableProperty, 61017 [Symbol.toStringTag]: { 61018 value: 'FileReader', 61019 writable: false, 61020 enumerable: false, 61021 configurable: true 61022 } 61023 }) 61024 61025 Object.defineProperties(FileReader, { 61026 EMPTY: staticPropertyDescriptors, 61027 LOADING: staticPropertyDescriptors, 61028 DONE: staticPropertyDescriptors 61029 }) 61030 61031 module.exports = { 61032 FileReader 61033 } 61034 61035 61036 /***/ }), 61037 61038 /***/ 55504: 61039 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 61040 61041 "use strict"; 61042 61043 61044 const { webidl } = __nccwpck_require__(21744) 61045 61046 const kState = Symbol('ProgressEvent state') 61047 61048 /** 61049 * @see https://xhr.spec.whatwg.org/#progressevent 61050 */ 61051 class ProgressEvent extends Event { 61052 constructor (type, eventInitDict = {}) { 61053 type = webidl.converters.DOMString(type) 61054 eventInitDict = webidl.converters.ProgressEventInit(eventInitDict ?? {}) 61055 61056 super(type, eventInitDict) 61057 61058 this[kState] = { 61059 lengthComputable: eventInitDict.lengthComputable, 61060 loaded: eventInitDict.loaded, 61061 total: eventInitDict.total 61062 } 61063 } 61064 61065 get lengthComputable () { 61066 webidl.brandCheck(this, ProgressEvent) 61067 61068 return this[kState].lengthComputable 61069 } 61070 61071 get loaded () { 61072 webidl.brandCheck(this, ProgressEvent) 61073 61074 return this[kState].loaded 61075 } 61076 61077 get total () { 61078 webidl.brandCheck(this, ProgressEvent) 61079 61080 return this[kState].total 61081 } 61082 } 61083 61084 webidl.converters.ProgressEventInit = webidl.dictionaryConverter([ 61085 { 61086 key: 'lengthComputable', 61087 converter: webidl.converters.boolean, 61088 defaultValue: false 61089 }, 61090 { 61091 key: 'loaded', 61092 converter: webidl.converters['unsigned long long'], 61093 defaultValue: 0 61094 }, 61095 { 61096 key: 'total', 61097 converter: webidl.converters['unsigned long long'], 61098 defaultValue: 0 61099 }, 61100 { 61101 key: 'bubbles', 61102 converter: webidl.converters.boolean, 61103 defaultValue: false 61104 }, 61105 { 61106 key: 'cancelable', 61107 converter: webidl.converters.boolean, 61108 defaultValue: false 61109 }, 61110 { 61111 key: 'composed', 61112 converter: webidl.converters.boolean, 61113 defaultValue: false 61114 } 61115 ]) 61116 61117 module.exports = { 61118 ProgressEvent 61119 } 61120 61121 61122 /***/ }), 61123 61124 /***/ 29054: 61125 /***/ ((module) => { 61126 61127 "use strict"; 61128 61129 61130 module.exports = { 61131 kState: Symbol('FileReader state'), 61132 kResult: Symbol('FileReader result'), 61133 kError: Symbol('FileReader error'), 61134 kLastProgressEventFired: Symbol('FileReader last progress event fired timestamp'), 61135 kEvents: Symbol('FileReader events'), 61136 kAborted: Symbol('FileReader aborted') 61137 } 61138 61139 61140 /***/ }), 61141 61142 /***/ 87530: 61143 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 61144 61145 "use strict"; 61146 61147 61148 const { 61149 kState, 61150 kError, 61151 kResult, 61152 kAborted, 61153 kLastProgressEventFired 61154 } = __nccwpck_require__(29054) 61155 const { ProgressEvent } = __nccwpck_require__(55504) 61156 const { getEncoding } = __nccwpck_require__(84854) 61157 const { DOMException } = __nccwpck_require__(41037) 61158 const { serializeAMimeType, parseMIMEType } = __nccwpck_require__(685) 61159 const { types } = __nccwpck_require__(73837) 61160 const { StringDecoder } = __nccwpck_require__(71576) 61161 const { btoa } = __nccwpck_require__(14300) 61162 61163 /** @type {PropertyDescriptor} */ 61164 const staticPropertyDescriptors = { 61165 enumerable: true, 61166 writable: false, 61167 configurable: false 61168 } 61169 61170 /** 61171 * @see https://w3c.github.io/FileAPI/#readOperation 61172 * @param {import('./filereader').FileReader} fr 61173 * @param {import('buffer').Blob} blob 61174 * @param {string} type 61175 * @param {string?} encodingName 61176 */ 61177 function readOperation (fr, blob, type, encodingName) { 61178 // 1. If fr’s state is "loading", throw an InvalidStateError 61179 // DOMException. 61180 if (fr[kState] === 'loading') { 61181 throw new DOMException('Invalid state', 'InvalidStateError') 61182 } 61183 61184 // 2. Set fr’s state to "loading". 61185 fr[kState] = 'loading' 61186 61187 // 3. Set fr’s result to null. 61188 fr[kResult] = null 61189 61190 // 4. Set fr’s error to null. 61191 fr[kError] = null 61192 61193 // 5. Let stream be the result of calling get stream on blob. 61194 /** @type {import('stream/web').ReadableStream} */ 61195 const stream = blob.stream() 61196 61197 // 6. Let reader be the result of getting a reader from stream. 61198 const reader = stream.getReader() 61199 61200 // 7. Let bytes be an empty byte sequence. 61201 /** @type {Uint8Array[]} */ 61202 const bytes = [] 61203 61204 // 8. Let chunkPromise be the result of reading a chunk from 61205 // stream with reader. 61206 let chunkPromise = reader.read() 61207 61208 // 9. Let isFirstChunk be true. 61209 let isFirstChunk = true 61210 61211 // 10. In parallel, while true: 61212 // Note: "In parallel" just means non-blocking 61213 // Note 2: readOperation itself cannot be async as double 61214 // reading the body would then reject the promise, instead 61215 // of throwing an error. 61216 ;(async () => { 61217 while (!fr[kAborted]) { 61218 // 1. Wait for chunkPromise to be fulfilled or rejected. 61219 try { 61220 const { done, value } = await chunkPromise 61221 61222 // 2. If chunkPromise is fulfilled, and isFirstChunk is 61223 // true, queue a task to fire a progress event called 61224 // loadstart at fr. 61225 if (isFirstChunk && !fr[kAborted]) { 61226 queueMicrotask(() => { 61227 fireAProgressEvent('loadstart', fr) 61228 }) 61229 } 61230 61231 // 3. Set isFirstChunk to false. 61232 isFirstChunk = false 61233 61234 // 4. If chunkPromise is fulfilled with an object whose 61235 // done property is false and whose value property is 61236 // a Uint8Array object, run these steps: 61237 if (!done && types.isUint8Array(value)) { 61238 // 1. Let bs be the byte sequence represented by the 61239 // Uint8Array object. 61240 61241 // 2. Append bs to bytes. 61242 bytes.push(value) 61243 61244 // 3. If roughly 50ms have passed since these steps 61245 // were last invoked, queue a task to fire a 61246 // progress event called progress at fr. 61247 if ( 61248 ( 61249 fr[kLastProgressEventFired] === undefined || 61250 Date.now() - fr[kLastProgressEventFired] >= 50 61251 ) && 61252 !fr[kAborted] 61253 ) { 61254 fr[kLastProgressEventFired] = Date.now() 61255 queueMicrotask(() => { 61256 fireAProgressEvent('progress', fr) 61257 }) 61258 } 61259 61260 // 4. Set chunkPromise to the result of reading a 61261 // chunk from stream with reader. 61262 chunkPromise = reader.read() 61263 } else if (done) { 61264 // 5. Otherwise, if chunkPromise is fulfilled with an 61265 // object whose done property is true, queue a task 61266 // to run the following steps and abort this algorithm: 61267 queueMicrotask(() => { 61268 // 1. Set fr’s state to "done". 61269 fr[kState] = 'done' 61270 61271 // 2. Let result be the result of package data given 61272 // bytes, type, blob’s type, and encodingName. 61273 try { 61274 const result = packageData(bytes, type, blob.type, encodingName) 61275 61276 // 4. Else: 61277 61278 if (fr[kAborted]) { 61279 return 61280 } 61281 61282 // 1. Set fr’s result to result. 61283 fr[kResult] = result 61284 61285 // 2. Fire a progress event called load at the fr. 61286 fireAProgressEvent('load', fr) 61287 } catch (error) { 61288 // 3. If package data threw an exception error: 61289 61290 // 1. Set fr’s error to error. 61291 fr[kError] = error 61292 61293 // 2. Fire a progress event called error at fr. 61294 fireAProgressEvent('error', fr) 61295 } 61296 61297 // 5. If fr’s state is not "loading", fire a progress 61298 // event called loadend at the fr. 61299 if (fr[kState] !== 'loading') { 61300 fireAProgressEvent('loadend', fr) 61301 } 61302 }) 61303 61304 break 61305 } 61306 } catch (error) { 61307 if (fr[kAborted]) { 61308 return 61309 } 61310 61311 // 6. Otherwise, if chunkPromise is rejected with an 61312 // error error, queue a task to run the following 61313 // steps and abort this algorithm: 61314 queueMicrotask(() => { 61315 // 1. Set fr’s state to "done". 61316 fr[kState] = 'done' 61317 61318 // 2. Set fr’s error to error. 61319 fr[kError] = error 61320 61321 // 3. Fire a progress event called error at fr. 61322 fireAProgressEvent('error', fr) 61323 61324 // 4. If fr’s state is not "loading", fire a progress 61325 // event called loadend at fr. 61326 if (fr[kState] !== 'loading') { 61327 fireAProgressEvent('loadend', fr) 61328 } 61329 }) 61330 61331 break 61332 } 61333 } 61334 })() 61335 } 61336 61337 /** 61338 * @see https://w3c.github.io/FileAPI/#fire-a-progress-event 61339 * @see https://dom.spec.whatwg.org/#concept-event-fire 61340 * @param {string} e The name of the event 61341 * @param {import('./filereader').FileReader} reader 61342 */ 61343 function fireAProgressEvent (e, reader) { 61344 // The progress event e does not bubble. e.bubbles must be false 61345 // The progress event e is NOT cancelable. e.cancelable must be false 61346 const event = new ProgressEvent(e, { 61347 bubbles: false, 61348 cancelable: false 61349 }) 61350 61351 reader.dispatchEvent(event) 61352 } 61353 61354 /** 61355 * @see https://w3c.github.io/FileAPI/#blob-package-data 61356 * @param {Uint8Array[]} bytes 61357 * @param {string} type 61358 * @param {string?} mimeType 61359 * @param {string?} encodingName 61360 */ 61361 function packageData (bytes, type, mimeType, encodingName) { 61362 // 1. A Blob has an associated package data algorithm, given 61363 // bytes, a type, a optional mimeType, and a optional 61364 // encodingName, which switches on type and runs the 61365 // associated steps: 61366 61367 switch (type) { 61368 case 'DataURL': { 61369 // 1. Return bytes as a DataURL [RFC2397] subject to 61370 // the considerations below: 61371 // * Use mimeType as part of the Data URL if it is 61372 // available in keeping with the Data URL 61373 // specification [RFC2397]. 61374 // * If mimeType is not available return a Data URL 61375 // without a media-type. [RFC2397]. 61376 61377 // https://datatracker.ietf.org/doc/html/rfc2397#section-3 61378 // dataurl := "data:" [ mediatype ] [ ";base64" ] "," data 61379 // mediatype := [ type "/" subtype ] *( ";" parameter ) 61380 // data := *urlchar 61381 // parameter := attribute "=" value 61382 let dataURL = 'data:' 61383 61384 const parsed = parseMIMEType(mimeType || 'application/octet-stream') 61385 61386 if (parsed !== 'failure') { 61387 dataURL += serializeAMimeType(parsed) 61388 } 61389 61390 dataURL += ';base64,' 61391 61392 const decoder = new StringDecoder('latin1') 61393 61394 for (const chunk of bytes) { 61395 dataURL += btoa(decoder.write(chunk)) 61396 } 61397 61398 dataURL += btoa(decoder.end()) 61399 61400 return dataURL 61401 } 61402 case 'Text': { 61403 // 1. Let encoding be failure 61404 let encoding = 'failure' 61405 61406 // 2. If the encodingName is present, set encoding to the 61407 // result of getting an encoding from encodingName. 61408 if (encodingName) { 61409 encoding = getEncoding(encodingName) 61410 } 61411 61412 // 3. If encoding is failure, and mimeType is present: 61413 if (encoding === 'failure' && mimeType) { 61414 // 1. Let type be the result of parse a MIME type 61415 // given mimeType. 61416 const type = parseMIMEType(mimeType) 61417 61418 // 2. If type is not failure, set encoding to the result 61419 // of getting an encoding from type’s parameters["charset"]. 61420 if (type !== 'failure') { 61421 encoding = getEncoding(type.parameters.get('charset')) 61422 } 61423 } 61424 61425 // 4. If encoding is failure, then set encoding to UTF-8. 61426 if (encoding === 'failure') { 61427 encoding = 'UTF-8' 61428 } 61429 61430 // 5. Decode bytes using fallback encoding encoding, and 61431 // return the result. 61432 return decode(bytes, encoding) 61433 } 61434 case 'ArrayBuffer': { 61435 // Return a new ArrayBuffer whose contents are bytes. 61436 const sequence = combineByteSequences(bytes) 61437 61438 return sequence.buffer 61439 } 61440 case 'BinaryString': { 61441 // Return bytes as a binary string, in which every byte 61442 // is represented by a code unit of equal value [0..255]. 61443 let binaryString = '' 61444 61445 const decoder = new StringDecoder('latin1') 61446 61447 for (const chunk of bytes) { 61448 binaryString += decoder.write(chunk) 61449 } 61450 61451 binaryString += decoder.end() 61452 61453 return binaryString 61454 } 61455 } 61456 } 61457 61458 /** 61459 * @see https://encoding.spec.whatwg.org/#decode 61460 * @param {Uint8Array[]} ioQueue 61461 * @param {string} encoding 61462 */ 61463 function decode (ioQueue, encoding) { 61464 const bytes = combineByteSequences(ioQueue) 61465 61466 // 1. Let BOMEncoding be the result of BOM sniffing ioQueue. 61467 const BOMEncoding = BOMSniffing(bytes) 61468 61469 let slice = 0 61470 61471 // 2. If BOMEncoding is non-null: 61472 if (BOMEncoding !== null) { 61473 // 1. Set encoding to BOMEncoding. 61474 encoding = BOMEncoding 61475 61476 // 2. Read three bytes from ioQueue, if BOMEncoding is 61477 // UTF-8; otherwise read two bytes. 61478 // (Do nothing with those bytes.) 61479 slice = BOMEncoding === 'UTF-8' ? 3 : 2 61480 } 61481 61482 // 3. Process a queue with an instance of encoding’s 61483 // decoder, ioQueue, output, and "replacement". 61484 61485 // 4. Return output. 61486 61487 const sliced = bytes.slice(slice) 61488 return new TextDecoder(encoding).decode(sliced) 61489 } 61490 61491 /** 61492 * @see https://encoding.spec.whatwg.org/#bom-sniff 61493 * @param {Uint8Array} ioQueue 61494 */ 61495 function BOMSniffing (ioQueue) { 61496 // 1. Let BOM be the result of peeking 3 bytes from ioQueue, 61497 // converted to a byte sequence. 61498 const [a, b, c] = ioQueue 61499 61500 // 2. For each of the rows in the table below, starting with 61501 // the first one and going down, if BOM starts with the 61502 // bytes given in the first column, then return the 61503 // encoding given in the cell in the second column of that 61504 // row. Otherwise, return null. 61505 if (a === 0xEF && b === 0xBB && c === 0xBF) { 61506 return 'UTF-8' 61507 } else if (a === 0xFE && b === 0xFF) { 61508 return 'UTF-16BE' 61509 } else if (a === 0xFF && b === 0xFE) { 61510 return 'UTF-16LE' 61511 } 61512 61513 return null 61514 } 61515 61516 /** 61517 * @param {Uint8Array[]} sequences 61518 */ 61519 function combineByteSequences (sequences) { 61520 const size = sequences.reduce((a, b) => { 61521 return a + b.byteLength 61522 }, 0) 61523 61524 let offset = 0 61525 61526 return sequences.reduce((a, b) => { 61527 a.set(b, offset) 61528 offset += b.byteLength 61529 return a 61530 }, new Uint8Array(size)) 61531 } 61532 61533 module.exports = { 61534 staticPropertyDescriptors, 61535 readOperation, 61536 fireAProgressEvent 61537 } 61538 61539 61540 /***/ }), 61541 61542 /***/ 21892: 61543 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 61544 61545 "use strict"; 61546 61547 61548 // We include a version number for the Dispatcher API. In case of breaking changes, 61549 // this version number must be increased to avoid conflicts. 61550 const globalDispatcher = Symbol.for('undici.globalDispatcher.1') 61551 const { InvalidArgumentError } = __nccwpck_require__(48045) 61552 const Agent = __nccwpck_require__(7890) 61553 61554 if (getGlobalDispatcher() === undefined) { 61555 setGlobalDispatcher(new Agent()) 61556 } 61557 61558 function setGlobalDispatcher (agent) { 61559 if (!agent || typeof agent.dispatch !== 'function') { 61560 throw new InvalidArgumentError('Argument agent must implement Agent') 61561 } 61562 Object.defineProperty(globalThis, globalDispatcher, { 61563 value: agent, 61564 writable: true, 61565 enumerable: false, 61566 configurable: false 61567 }) 61568 } 61569 61570 function getGlobalDispatcher () { 61571 return globalThis[globalDispatcher] 61572 } 61573 61574 module.exports = { 61575 setGlobalDispatcher, 61576 getGlobalDispatcher 61577 } 61578 61579 61580 /***/ }), 61581 61582 /***/ 46930: 61583 /***/ ((module) => { 61584 61585 "use strict"; 61586 61587 61588 module.exports = class DecoratorHandler { 61589 constructor (handler) { 61590 this.handler = handler 61591 } 61592 61593 onConnect (...args) { 61594 return this.handler.onConnect(...args) 61595 } 61596 61597 onError (...args) { 61598 return this.handler.onError(...args) 61599 } 61600 61601 onUpgrade (...args) { 61602 return this.handler.onUpgrade(...args) 61603 } 61604 61605 onHeaders (...args) { 61606 return this.handler.onHeaders(...args) 61607 } 61608 61609 onData (...args) { 61610 return this.handler.onData(...args) 61611 } 61612 61613 onComplete (...args) { 61614 return this.handler.onComplete(...args) 61615 } 61616 61617 onBodySent (...args) { 61618 return this.handler.onBodySent(...args) 61619 } 61620 } 61621 61622 61623 /***/ }), 61624 61625 /***/ 72860: 61626 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 61627 61628 "use strict"; 61629 61630 61631 const util = __nccwpck_require__(83983) 61632 const { kBodyUsed } = __nccwpck_require__(72785) 61633 const assert = __nccwpck_require__(39491) 61634 const { InvalidArgumentError } = __nccwpck_require__(48045) 61635 const EE = __nccwpck_require__(82361) 61636 61637 const redirectableStatusCodes = [300, 301, 302, 303, 307, 308] 61638 61639 const kBody = Symbol('body') 61640 61641 class BodyAsyncIterable { 61642 constructor (body) { 61643 this[kBody] = body 61644 this[kBodyUsed] = false 61645 } 61646 61647 async * [Symbol.asyncIterator] () { 61648 assert(!this[kBodyUsed], 'disturbed') 61649 this[kBodyUsed] = true 61650 yield * this[kBody] 61651 } 61652 } 61653 61654 class RedirectHandler { 61655 constructor (dispatch, maxRedirections, opts, handler) { 61656 if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) { 61657 throw new InvalidArgumentError('maxRedirections must be a positive number') 61658 } 61659 61660 util.validateHandler(handler, opts.method, opts.upgrade) 61661 61662 this.dispatch = dispatch 61663 this.location = null 61664 this.abort = null 61665 this.opts = { ...opts, maxRedirections: 0 } // opts must be a copy 61666 this.maxRedirections = maxRedirections 61667 this.handler = handler 61668 this.history = [] 61669 61670 if (util.isStream(this.opts.body)) { 61671 // TODO (fix): Provide some way for the user to cache the file to e.g. /tmp 61672 // so that it can be dispatched again? 61673 // TODO (fix): Do we need 100-expect support to provide a way to do this properly? 61674 if (util.bodyLength(this.opts.body) === 0) { 61675 this.opts.body 61676 .on('data', function () { 61677 assert(false) 61678 }) 61679 } 61680 61681 if (typeof this.opts.body.readableDidRead !== 'boolean') { 61682 this.opts.body[kBodyUsed] = false 61683 EE.prototype.on.call(this.opts.body, 'data', function () { 61684 this[kBodyUsed] = true 61685 }) 61686 } 61687 } else if (this.opts.body && typeof this.opts.body.pipeTo === 'function') { 61688 // TODO (fix): We can't access ReadableStream internal state 61689 // to determine whether or not it has been disturbed. This is just 61690 // a workaround. 61691 this.opts.body = new BodyAsyncIterable(this.opts.body) 61692 } else if ( 61693 this.opts.body && 61694 typeof this.opts.body !== 'string' && 61695 !ArrayBuffer.isView(this.opts.body) && 61696 util.isIterable(this.opts.body) 61697 ) { 61698 // TODO: Should we allow re-using iterable if !this.opts.idempotent 61699 // or through some other flag? 61700 this.opts.body = new BodyAsyncIterable(this.opts.body) 61701 } 61702 } 61703 61704 onConnect (abort) { 61705 this.abort = abort 61706 this.handler.onConnect(abort, { history: this.history }) 61707 } 61708 61709 onUpgrade (statusCode, headers, socket) { 61710 this.handler.onUpgrade(statusCode, headers, socket) 61711 } 61712 61713 onError (error) { 61714 this.handler.onError(error) 61715 } 61716 61717 onHeaders (statusCode, headers, resume, statusText) { 61718 this.location = this.history.length >= this.maxRedirections || util.isDisturbed(this.opts.body) 61719 ? null 61720 : parseLocation(statusCode, headers) 61721 61722 if (this.opts.origin) { 61723 this.history.push(new URL(this.opts.path, this.opts.origin)) 61724 } 61725 61726 if (!this.location) { 61727 return this.handler.onHeaders(statusCode, headers, resume, statusText) 61728 } 61729 61730 const { origin, pathname, search } = util.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin))) 61731 const path = search ? `${pathname}${search}` : pathname 61732 61733 // Remove headers referring to the original URL. 61734 // By default it is Host only, unless it's a 303 (see below), which removes also all Content-* headers. 61735 // https://tools.ietf.org/html/rfc7231#section-6.4 61736 this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin) 61737 this.opts.path = path 61738 this.opts.origin = origin 61739 this.opts.maxRedirections = 0 61740 this.opts.query = null 61741 61742 // https://tools.ietf.org/html/rfc7231#section-6.4.4 61743 // In case of HTTP 303, always replace method to be either HEAD or GET 61744 if (statusCode === 303 && this.opts.method !== 'HEAD') { 61745 this.opts.method = 'GET' 61746 this.opts.body = null 61747 } 61748 } 61749 61750 onData (chunk) { 61751 if (this.location) { 61752 /* 61753 https://tools.ietf.org/html/rfc7231#section-6.4 61754 61755 TLDR: undici always ignores 3xx response bodies. 61756 61757 Redirection is used to serve the requested resource from another URL, so it is assumes that 61758 no body is generated (and thus can be ignored). Even though generating a body is not prohibited. 61759 61760 For status 301, 302, 303, 307 and 308 (the latter from RFC 7238), the specs mention that the body usually 61761 (which means it's optional and not mandated) contain just an hyperlink to the value of 61762 the Location response header, so the body can be ignored safely. 61763 61764 For status 300, which is "Multiple Choices", the spec mentions both generating a Location 61765 response header AND a response body with the other possible location to follow. 61766 Since the spec explicitily chooses not to specify a format for such body and leave it to 61767 servers and browsers implementors, we ignore the body as there is no specified way to eventually parse it. 61768 */ 61769 } else { 61770 return this.handler.onData(chunk) 61771 } 61772 } 61773 61774 onComplete (trailers) { 61775 if (this.location) { 61776 /* 61777 https://tools.ietf.org/html/rfc7231#section-6.4 61778 61779 TLDR: undici always ignores 3xx response trailers as they are not expected in case of redirections 61780 and neither are useful if present. 61781 61782 See comment on onData method above for more detailed informations. 61783 */ 61784 61785 this.location = null 61786 this.abort = null 61787 61788 this.dispatch(this.opts, this) 61789 } else { 61790 this.handler.onComplete(trailers) 61791 } 61792 } 61793 61794 onBodySent (chunk) { 61795 if (this.handler.onBodySent) { 61796 this.handler.onBodySent(chunk) 61797 } 61798 } 61799 } 61800 61801 function parseLocation (statusCode, headers) { 61802 if (redirectableStatusCodes.indexOf(statusCode) === -1) { 61803 return null 61804 } 61805 61806 for (let i = 0; i < headers.length; i += 2) { 61807 if (headers[i].toString().toLowerCase() === 'location') { 61808 return headers[i + 1] 61809 } 61810 } 61811 } 61812 61813 // https://tools.ietf.org/html/rfc7231#section-6.4.4 61814 function shouldRemoveHeader (header, removeContent, unknownOrigin) { 61815 if (header.length === 4) { 61816 return util.headerNameToString(header) === 'host' 61817 } 61818 if (removeContent && util.headerNameToString(header).startsWith('content-')) { 61819 return true 61820 } 61821 if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) { 61822 const name = util.headerNameToString(header) 61823 return name === 'authorization' || name === 'cookie' || name === 'proxy-authorization' 61824 } 61825 return false 61826 } 61827 61828 // https://tools.ietf.org/html/rfc7231#section-6.4 61829 function cleanRequestHeaders (headers, removeContent, unknownOrigin) { 61830 const ret = [] 61831 if (Array.isArray(headers)) { 61832 for (let i = 0; i < headers.length; i += 2) { 61833 if (!shouldRemoveHeader(headers[i], removeContent, unknownOrigin)) { 61834 ret.push(headers[i], headers[i + 1]) 61835 } 61836 } 61837 } else if (headers && typeof headers === 'object') { 61838 for (const key of Object.keys(headers)) { 61839 if (!shouldRemoveHeader(key, removeContent, unknownOrigin)) { 61840 ret.push(key, headers[key]) 61841 } 61842 } 61843 } else { 61844 assert(headers == null, 'headers must be an object or an array') 61845 } 61846 return ret 61847 } 61848 61849 module.exports = RedirectHandler 61850 61851 61852 /***/ }), 61853 61854 /***/ 82286: 61855 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 61856 61857 const assert = __nccwpck_require__(39491) 61858 61859 const { kRetryHandlerDefaultRetry } = __nccwpck_require__(72785) 61860 const { RequestRetryError } = __nccwpck_require__(48045) 61861 const { isDisturbed, parseHeaders, parseRangeHeader } = __nccwpck_require__(83983) 61862 61863 function calculateRetryAfterHeader (retryAfter) { 61864 const current = Date.now() 61865 const diff = new Date(retryAfter).getTime() - current 61866 61867 return diff 61868 } 61869 61870 class RetryHandler { 61871 constructor (opts, handlers) { 61872 const { retryOptions, ...dispatchOpts } = opts 61873 const { 61874 // Retry scoped 61875 retry: retryFn, 61876 maxRetries, 61877 maxTimeout, 61878 minTimeout, 61879 timeoutFactor, 61880 // Response scoped 61881 methods, 61882 errorCodes, 61883 retryAfter, 61884 statusCodes 61885 } = retryOptions ?? {} 61886 61887 this.dispatch = handlers.dispatch 61888 this.handler = handlers.handler 61889 this.opts = dispatchOpts 61890 this.abort = null 61891 this.aborted = false 61892 this.retryOpts = { 61893 retry: retryFn ?? RetryHandler[kRetryHandlerDefaultRetry], 61894 retryAfter: retryAfter ?? true, 61895 maxTimeout: maxTimeout ?? 30 * 1000, // 30s, 61896 timeout: minTimeout ?? 500, // .5s 61897 timeoutFactor: timeoutFactor ?? 2, 61898 maxRetries: maxRetries ?? 5, 61899 // What errors we should retry 61900 methods: methods ?? ['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE', 'TRACE'], 61901 // Indicates which errors to retry 61902 statusCodes: statusCodes ?? [500, 502, 503, 504, 429], 61903 // List of errors to retry 61904 errorCodes: errorCodes ?? [ 61905 'ECONNRESET', 61906 'ECONNREFUSED', 61907 'ENOTFOUND', 61908 'ENETDOWN', 61909 'ENETUNREACH', 61910 'EHOSTDOWN', 61911 'EHOSTUNREACH', 61912 'EPIPE' 61913 ] 61914 } 61915 61916 this.retryCount = 0 61917 this.start = 0 61918 this.end = null 61919 this.etag = null 61920 this.resume = null 61921 61922 // Handle possible onConnect duplication 61923 this.handler.onConnect(reason => { 61924 this.aborted = true 61925 if (this.abort) { 61926 this.abort(reason) 61927 } else { 61928 this.reason = reason 61929 } 61930 }) 61931 } 61932 61933 onRequestSent () { 61934 if (this.handler.onRequestSent) { 61935 this.handler.onRequestSent() 61936 } 61937 } 61938 61939 onUpgrade (statusCode, headers, socket) { 61940 if (this.handler.onUpgrade) { 61941 this.handler.onUpgrade(statusCode, headers, socket) 61942 } 61943 } 61944 61945 onConnect (abort) { 61946 if (this.aborted) { 61947 abort(this.reason) 61948 } else { 61949 this.abort = abort 61950 } 61951 } 61952 61953 onBodySent (chunk) { 61954 if (this.handler.onBodySent) return this.handler.onBodySent(chunk) 61955 } 61956 61957 static [kRetryHandlerDefaultRetry] (err, { state, opts }, cb) { 61958 const { statusCode, code, headers } = err 61959 const { method, retryOptions } = opts 61960 const { 61961 maxRetries, 61962 timeout, 61963 maxTimeout, 61964 timeoutFactor, 61965 statusCodes, 61966 errorCodes, 61967 methods 61968 } = retryOptions 61969 let { counter, currentTimeout } = state 61970 61971 currentTimeout = 61972 currentTimeout != null && currentTimeout > 0 ? currentTimeout : timeout 61973 61974 // Any code that is not a Undici's originated and allowed to retry 61975 if ( 61976 code && 61977 code !== 'UND_ERR_REQ_RETRY' && 61978 code !== 'UND_ERR_SOCKET' && 61979 !errorCodes.includes(code) 61980 ) { 61981 cb(err) 61982 return 61983 } 61984 61985 // If a set of method are provided and the current method is not in the list 61986 if (Array.isArray(methods) && !methods.includes(method)) { 61987 cb(err) 61988 return 61989 } 61990 61991 // If a set of status code are provided and the current status code is not in the list 61992 if ( 61993 statusCode != null && 61994 Array.isArray(statusCodes) && 61995 !statusCodes.includes(statusCode) 61996 ) { 61997 cb(err) 61998 return 61999 } 62000 62001 // If we reached the max number of retries 62002 if (counter > maxRetries) { 62003 cb(err) 62004 return 62005 } 62006 62007 let retryAfterHeader = headers != null && headers['retry-after'] 62008 if (retryAfterHeader) { 62009 retryAfterHeader = Number(retryAfterHeader) 62010 retryAfterHeader = isNaN(retryAfterHeader) 62011 ? calculateRetryAfterHeader(retryAfterHeader) 62012 : retryAfterHeader * 1e3 // Retry-After is in seconds 62013 } 62014 62015 const retryTimeout = 62016 retryAfterHeader > 0 62017 ? Math.min(retryAfterHeader, maxTimeout) 62018 : Math.min(currentTimeout * timeoutFactor ** counter, maxTimeout) 62019 62020 state.currentTimeout = retryTimeout 62021 62022 setTimeout(() => cb(null), retryTimeout) 62023 } 62024 62025 onHeaders (statusCode, rawHeaders, resume, statusMessage) { 62026 const headers = parseHeaders(rawHeaders) 62027 62028 this.retryCount += 1 62029 62030 if (statusCode >= 300) { 62031 this.abort( 62032 new RequestRetryError('Request failed', statusCode, { 62033 headers, 62034 count: this.retryCount 62035 }) 62036 ) 62037 return false 62038 } 62039 62040 // Checkpoint for resume from where we left it 62041 if (this.resume != null) { 62042 this.resume = null 62043 62044 if (statusCode !== 206) { 62045 return true 62046 } 62047 62048 const contentRange = parseRangeHeader(headers['content-range']) 62049 // If no content range 62050 if (!contentRange) { 62051 this.abort( 62052 new RequestRetryError('Content-Range mismatch', statusCode, { 62053 headers, 62054 count: this.retryCount 62055 }) 62056 ) 62057 return false 62058 } 62059 62060 // Let's start with a weak etag check 62061 if (this.etag != null && this.etag !== headers.etag) { 62062 this.abort( 62063 new RequestRetryError('ETag mismatch', statusCode, { 62064 headers, 62065 count: this.retryCount 62066 }) 62067 ) 62068 return false 62069 } 62070 62071 const { start, size, end = size } = contentRange 62072 62073 assert(this.start === start, 'content-range mismatch') 62074 assert(this.end == null || this.end === end, 'content-range mismatch') 62075 62076 this.resume = resume 62077 return true 62078 } 62079 62080 if (this.end == null) { 62081 if (statusCode === 206) { 62082 // First time we receive 206 62083 const range = parseRangeHeader(headers['content-range']) 62084 62085 if (range == null) { 62086 return this.handler.onHeaders( 62087 statusCode, 62088 rawHeaders, 62089 resume, 62090 statusMessage 62091 ) 62092 } 62093 62094 const { start, size, end = size } = range 62095 62096 assert( 62097 start != null && Number.isFinite(start) && this.start !== start, 62098 'content-range mismatch' 62099 ) 62100 assert(Number.isFinite(start)) 62101 assert( 62102 end != null && Number.isFinite(end) && this.end !== end, 62103 'invalid content-length' 62104 ) 62105 62106 this.start = start 62107 this.end = end 62108 } 62109 62110 // We make our best to checkpoint the body for further range headers 62111 if (this.end == null) { 62112 const contentLength = headers['content-length'] 62113 this.end = contentLength != null ? Number(contentLength) : null 62114 } 62115 62116 assert(Number.isFinite(this.start)) 62117 assert( 62118 this.end == null || Number.isFinite(this.end), 62119 'invalid content-length' 62120 ) 62121 62122 this.resume = resume 62123 this.etag = headers.etag != null ? headers.etag : null 62124 62125 return this.handler.onHeaders( 62126 statusCode, 62127 rawHeaders, 62128 resume, 62129 statusMessage 62130 ) 62131 } 62132 62133 const err = new RequestRetryError('Request failed', statusCode, { 62134 headers, 62135 count: this.retryCount 62136 }) 62137 62138 this.abort(err) 62139 62140 return false 62141 } 62142 62143 onData (chunk) { 62144 this.start += chunk.length 62145 62146 return this.handler.onData(chunk) 62147 } 62148 62149 onComplete (rawTrailers) { 62150 this.retryCount = 0 62151 return this.handler.onComplete(rawTrailers) 62152 } 62153 62154 onError (err) { 62155 if (this.aborted || isDisturbed(this.opts.body)) { 62156 return this.handler.onError(err) 62157 } 62158 62159 this.retryOpts.retry( 62160 err, 62161 { 62162 state: { counter: this.retryCount++, currentTimeout: this.retryAfter }, 62163 opts: { retryOptions: this.retryOpts, ...this.opts } 62164 }, 62165 onRetry.bind(this) 62166 ) 62167 62168 function onRetry (err) { 62169 if (err != null || this.aborted || isDisturbed(this.opts.body)) { 62170 return this.handler.onError(err) 62171 } 62172 62173 if (this.start !== 0) { 62174 this.opts = { 62175 ...this.opts, 62176 headers: { 62177 ...this.opts.headers, 62178 range: `bytes=${this.start}-${this.end ?? ''}` 62179 } 62180 } 62181 } 62182 62183 try { 62184 this.dispatch(this.opts, this) 62185 } catch (err) { 62186 this.handler.onError(err) 62187 } 62188 } 62189 } 62190 } 62191 62192 module.exports = RetryHandler 62193 62194 62195 /***/ }), 62196 62197 /***/ 38861: 62198 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 62199 62200 "use strict"; 62201 62202 62203 const RedirectHandler = __nccwpck_require__(72860) 62204 62205 function createRedirectInterceptor ({ maxRedirections: defaultMaxRedirections }) { 62206 return (dispatch) => { 62207 return function Intercept (opts, handler) { 62208 const { maxRedirections = defaultMaxRedirections } = opts 62209 62210 if (!maxRedirections) { 62211 return dispatch(opts, handler) 62212 } 62213 62214 const redirectHandler = new RedirectHandler(dispatch, maxRedirections, opts, handler) 62215 opts = { ...opts, maxRedirections: 0 } // Stop sub dispatcher from also redirecting. 62216 return dispatch(opts, redirectHandler) 62217 } 62218 } 62219 } 62220 62221 module.exports = createRedirectInterceptor 62222 62223 62224 /***/ }), 62225 62226 /***/ 30953: 62227 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 62228 62229 "use strict"; 62230 62231 Object.defineProperty(exports, "__esModule", ({ value: true })); 62232 exports.SPECIAL_HEADERS = exports.HEADER_STATE = exports.MINOR = exports.MAJOR = exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS = exports.TOKEN = exports.STRICT_TOKEN = exports.HEX = exports.URL_CHAR = exports.STRICT_URL_CHAR = exports.USERINFO_CHARS = exports.MARK = exports.ALPHANUM = exports.NUM = exports.HEX_MAP = exports.NUM_MAP = exports.ALPHA = exports.FINISH = exports.H_METHOD_MAP = exports.METHOD_MAP = exports.METHODS_RTSP = exports.METHODS_ICE = exports.METHODS_HTTP = exports.METHODS = exports.LENIENT_FLAGS = exports.FLAGS = exports.TYPE = exports.ERROR = void 0; 62233 const utils_1 = __nccwpck_require__(41891); 62234 // C headers 62235 var ERROR; 62236 (function (ERROR) { 62237 ERROR[ERROR["OK"] = 0] = "OK"; 62238 ERROR[ERROR["INTERNAL"] = 1] = "INTERNAL"; 62239 ERROR[ERROR["STRICT"] = 2] = "STRICT"; 62240 ERROR[ERROR["LF_EXPECTED"] = 3] = "LF_EXPECTED"; 62241 ERROR[ERROR["UNEXPECTED_CONTENT_LENGTH"] = 4] = "UNEXPECTED_CONTENT_LENGTH"; 62242 ERROR[ERROR["CLOSED_CONNECTION"] = 5] = "CLOSED_CONNECTION"; 62243 ERROR[ERROR["INVALID_METHOD"] = 6] = "INVALID_METHOD"; 62244 ERROR[ERROR["INVALID_URL"] = 7] = "INVALID_URL"; 62245 ERROR[ERROR["INVALID_CONSTANT"] = 8] = "INVALID_CONSTANT"; 62246 ERROR[ERROR["INVALID_VERSION"] = 9] = "INVALID_VERSION"; 62247 ERROR[ERROR["INVALID_HEADER_TOKEN"] = 10] = "INVALID_HEADER_TOKEN"; 62248 ERROR[ERROR["INVALID_CONTENT_LENGTH"] = 11] = "INVALID_CONTENT_LENGTH"; 62249 ERROR[ERROR["INVALID_CHUNK_SIZE"] = 12] = "INVALID_CHUNK_SIZE"; 62250 ERROR[ERROR["INVALID_STATUS"] = 13] = "INVALID_STATUS"; 62251 ERROR[ERROR["INVALID_EOF_STATE"] = 14] = "INVALID_EOF_STATE"; 62252 ERROR[ERROR["INVALID_TRANSFER_ENCODING"] = 15] = "INVALID_TRANSFER_ENCODING"; 62253 ERROR[ERROR["CB_MESSAGE_BEGIN"] = 16] = "CB_MESSAGE_BEGIN"; 62254 ERROR[ERROR["CB_HEADERS_COMPLETE"] = 17] = "CB_HEADERS_COMPLETE"; 62255 ERROR[ERROR["CB_MESSAGE_COMPLETE"] = 18] = "CB_MESSAGE_COMPLETE"; 62256 ERROR[ERROR["CB_CHUNK_HEADER"] = 19] = "CB_CHUNK_HEADER"; 62257 ERROR[ERROR["CB_CHUNK_COMPLETE"] = 20] = "CB_CHUNK_COMPLETE"; 62258 ERROR[ERROR["PAUSED"] = 21] = "PAUSED"; 62259 ERROR[ERROR["PAUSED_UPGRADE"] = 22] = "PAUSED_UPGRADE"; 62260 ERROR[ERROR["PAUSED_H2_UPGRADE"] = 23] = "PAUSED_H2_UPGRADE"; 62261 ERROR[ERROR["USER"] = 24] = "USER"; 62262 })(ERROR = exports.ERROR || (exports.ERROR = {})); 62263 var TYPE; 62264 (function (TYPE) { 62265 TYPE[TYPE["BOTH"] = 0] = "BOTH"; 62266 TYPE[TYPE["REQUEST"] = 1] = "REQUEST"; 62267 TYPE[TYPE["RESPONSE"] = 2] = "RESPONSE"; 62268 })(TYPE = exports.TYPE || (exports.TYPE = {})); 62269 var FLAGS; 62270 (function (FLAGS) { 62271 FLAGS[FLAGS["CONNECTION_KEEP_ALIVE"] = 1] = "CONNECTION_KEEP_ALIVE"; 62272 FLAGS[FLAGS["CONNECTION_CLOSE"] = 2] = "CONNECTION_CLOSE"; 62273 FLAGS[FLAGS["CONNECTION_UPGRADE"] = 4] = "CONNECTION_UPGRADE"; 62274 FLAGS[FLAGS["CHUNKED"] = 8] = "CHUNKED"; 62275 FLAGS[FLAGS["UPGRADE"] = 16] = "UPGRADE"; 62276 FLAGS[FLAGS["CONTENT_LENGTH"] = 32] = "CONTENT_LENGTH"; 62277 FLAGS[FLAGS["SKIPBODY"] = 64] = "SKIPBODY"; 62278 FLAGS[FLAGS["TRAILING"] = 128] = "TRAILING"; 62279 // 1 << 8 is unused 62280 FLAGS[FLAGS["TRANSFER_ENCODING"] = 512] = "TRANSFER_ENCODING"; 62281 })(FLAGS = exports.FLAGS || (exports.FLAGS = {})); 62282 var LENIENT_FLAGS; 62283 (function (LENIENT_FLAGS) { 62284 LENIENT_FLAGS[LENIENT_FLAGS["HEADERS"] = 1] = "HEADERS"; 62285 LENIENT_FLAGS[LENIENT_FLAGS["CHUNKED_LENGTH"] = 2] = "CHUNKED_LENGTH"; 62286 LENIENT_FLAGS[LENIENT_FLAGS["KEEP_ALIVE"] = 4] = "KEEP_ALIVE"; 62287 })(LENIENT_FLAGS = exports.LENIENT_FLAGS || (exports.LENIENT_FLAGS = {})); 62288 var METHODS; 62289 (function (METHODS) { 62290 METHODS[METHODS["DELETE"] = 0] = "DELETE"; 62291 METHODS[METHODS["GET"] = 1] = "GET"; 62292 METHODS[METHODS["HEAD"] = 2] = "HEAD"; 62293 METHODS[METHODS["POST"] = 3] = "POST"; 62294 METHODS[METHODS["PUT"] = 4] = "PUT"; 62295 /* pathological */ 62296 METHODS[METHODS["CONNECT"] = 5] = "CONNECT"; 62297 METHODS[METHODS["OPTIONS"] = 6] = "OPTIONS"; 62298 METHODS[METHODS["TRACE"] = 7] = "TRACE"; 62299 /* WebDAV */ 62300 METHODS[METHODS["COPY"] = 8] = "COPY"; 62301 METHODS[METHODS["LOCK"] = 9] = "LOCK"; 62302 METHODS[METHODS["MKCOL"] = 10] = "MKCOL"; 62303 METHODS[METHODS["MOVE"] = 11] = "MOVE"; 62304 METHODS[METHODS["PROPFIND"] = 12] = "PROPFIND"; 62305 METHODS[METHODS["PROPPATCH"] = 13] = "PROPPATCH"; 62306 METHODS[METHODS["SEARCH"] = 14] = "SEARCH"; 62307 METHODS[METHODS["UNLOCK"] = 15] = "UNLOCK"; 62308 METHODS[METHODS["BIND"] = 16] = "BIND"; 62309 METHODS[METHODS["REBIND"] = 17] = "REBIND"; 62310 METHODS[METHODS["UNBIND"] = 18] = "UNBIND"; 62311 METHODS[METHODS["ACL"] = 19] = "ACL"; 62312 /* subversion */ 62313 METHODS[METHODS["REPORT"] = 20] = "REPORT"; 62314 METHODS[METHODS["MKACTIVITY"] = 21] = "MKACTIVITY"; 62315 METHODS[METHODS["CHECKOUT"] = 22] = "CHECKOUT"; 62316 METHODS[METHODS["MERGE"] = 23] = "MERGE"; 62317 /* upnp */ 62318 METHODS[METHODS["M-SEARCH"] = 24] = "M-SEARCH"; 62319 METHODS[METHODS["NOTIFY"] = 25] = "NOTIFY"; 62320 METHODS[METHODS["SUBSCRIBE"] = 26] = "SUBSCRIBE"; 62321 METHODS[METHODS["UNSUBSCRIBE"] = 27] = "UNSUBSCRIBE"; 62322 /* RFC-5789 */ 62323 METHODS[METHODS["PATCH"] = 28] = "PATCH"; 62324 METHODS[METHODS["PURGE"] = 29] = "PURGE"; 62325 /* CalDAV */ 62326 METHODS[METHODS["MKCALENDAR"] = 30] = "MKCALENDAR"; 62327 /* RFC-2068, section 19.6.1.2 */ 62328 METHODS[METHODS["LINK"] = 31] = "LINK"; 62329 METHODS[METHODS["UNLINK"] = 32] = "UNLINK"; 62330 /* icecast */ 62331 METHODS[METHODS["SOURCE"] = 33] = "SOURCE"; 62332 /* RFC-7540, section 11.6 */ 62333 METHODS[METHODS["PRI"] = 34] = "PRI"; 62334 /* RFC-2326 RTSP */ 62335 METHODS[METHODS["DESCRIBE"] = 35] = "DESCRIBE"; 62336 METHODS[METHODS["ANNOUNCE"] = 36] = "ANNOUNCE"; 62337 METHODS[METHODS["SETUP"] = 37] = "SETUP"; 62338 METHODS[METHODS["PLAY"] = 38] = "PLAY"; 62339 METHODS[METHODS["PAUSE"] = 39] = "PAUSE"; 62340 METHODS[METHODS["TEARDOWN"] = 40] = "TEARDOWN"; 62341 METHODS[METHODS["GET_PARAMETER"] = 41] = "GET_PARAMETER"; 62342 METHODS[METHODS["SET_PARAMETER"] = 42] = "SET_PARAMETER"; 62343 METHODS[METHODS["REDIRECT"] = 43] = "REDIRECT"; 62344 METHODS[METHODS["RECORD"] = 44] = "RECORD"; 62345 /* RAOP */ 62346 METHODS[METHODS["FLUSH"] = 45] = "FLUSH"; 62347 })(METHODS = exports.METHODS || (exports.METHODS = {})); 62348 exports.METHODS_HTTP = [ 62349 METHODS.DELETE, 62350 METHODS.GET, 62351 METHODS.HEAD, 62352 METHODS.POST, 62353 METHODS.PUT, 62354 METHODS.CONNECT, 62355 METHODS.OPTIONS, 62356 METHODS.TRACE, 62357 METHODS.COPY, 62358 METHODS.LOCK, 62359 METHODS.MKCOL, 62360 METHODS.MOVE, 62361 METHODS.PROPFIND, 62362 METHODS.PROPPATCH, 62363 METHODS.SEARCH, 62364 METHODS.UNLOCK, 62365 METHODS.BIND, 62366 METHODS.REBIND, 62367 METHODS.UNBIND, 62368 METHODS.ACL, 62369 METHODS.REPORT, 62370 METHODS.MKACTIVITY, 62371 METHODS.CHECKOUT, 62372 METHODS.MERGE, 62373 METHODS['M-SEARCH'], 62374 METHODS.NOTIFY, 62375 METHODS.SUBSCRIBE, 62376 METHODS.UNSUBSCRIBE, 62377 METHODS.PATCH, 62378 METHODS.PURGE, 62379 METHODS.MKCALENDAR, 62380 METHODS.LINK, 62381 METHODS.UNLINK, 62382 METHODS.PRI, 62383 // TODO(indutny): should we allow it with HTTP? 62384 METHODS.SOURCE, 62385 ]; 62386 exports.METHODS_ICE = [ 62387 METHODS.SOURCE, 62388 ]; 62389 exports.METHODS_RTSP = [ 62390 METHODS.OPTIONS, 62391 METHODS.DESCRIBE, 62392 METHODS.ANNOUNCE, 62393 METHODS.SETUP, 62394 METHODS.PLAY, 62395 METHODS.PAUSE, 62396 METHODS.TEARDOWN, 62397 METHODS.GET_PARAMETER, 62398 METHODS.SET_PARAMETER, 62399 METHODS.REDIRECT, 62400 METHODS.RECORD, 62401 METHODS.FLUSH, 62402 // For AirPlay 62403 METHODS.GET, 62404 METHODS.POST, 62405 ]; 62406 exports.METHOD_MAP = utils_1.enumToMap(METHODS); 62407 exports.H_METHOD_MAP = {}; 62408 Object.keys(exports.METHOD_MAP).forEach((key) => { 62409 if (/^H/.test(key)) { 62410 exports.H_METHOD_MAP[key] = exports.METHOD_MAP[key]; 62411 } 62412 }); 62413 var FINISH; 62414 (function (FINISH) { 62415 FINISH[FINISH["SAFE"] = 0] = "SAFE"; 62416 FINISH[FINISH["SAFE_WITH_CB"] = 1] = "SAFE_WITH_CB"; 62417 FINISH[FINISH["UNSAFE"] = 2] = "UNSAFE"; 62418 })(FINISH = exports.FINISH || (exports.FINISH = {})); 62419 exports.ALPHA = []; 62420 for (let i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i++) { 62421 // Upper case 62422 exports.ALPHA.push(String.fromCharCode(i)); 62423 // Lower case 62424 exports.ALPHA.push(String.fromCharCode(i + 0x20)); 62425 } 62426 exports.NUM_MAP = { 62427 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 62428 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 62429 }; 62430 exports.HEX_MAP = { 62431 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 62432 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 62433 A: 0XA, B: 0XB, C: 0XC, D: 0XD, E: 0XE, F: 0XF, 62434 a: 0xa, b: 0xb, c: 0xc, d: 0xd, e: 0xe, f: 0xf, 62435 }; 62436 exports.NUM = [ 62437 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 62438 ]; 62439 exports.ALPHANUM = exports.ALPHA.concat(exports.NUM); 62440 exports.MARK = ['-', '_', '.', '!', '~', '*', '\'', '(', ')']; 62441 exports.USERINFO_CHARS = exports.ALPHANUM 62442 .concat(exports.MARK) 62443 .concat(['%', ';', ':', '&', '=', '+', '$', ',']); 62444 // TODO(indutny): use RFC 62445 exports.STRICT_URL_CHAR = [ 62446 '!', '"', '$', '%', '&', '\'', 62447 '(', ')', '*', '+', ',', '-', '.', '/', 62448 ':', ';', '<', '=', '>', 62449 '@', '[', '\\', ']', '^', '_', 62450 '`', 62451 '{', '|', '}', '~', 62452 ].concat(exports.ALPHANUM); 62453 exports.URL_CHAR = exports.STRICT_URL_CHAR 62454 .concat(['\t', '\f']); 62455 // All characters with 0x80 bit set to 1 62456 for (let i = 0x80; i <= 0xff; i++) { 62457 exports.URL_CHAR.push(i); 62458 } 62459 exports.HEX = exports.NUM.concat(['a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F']); 62460 /* Tokens as defined by rfc 2616. Also lowercases them. 62461 * token = 1*<any CHAR except CTLs or separators> 62462 * separators = "(" | ")" | "<" | ">" | "@" 62463 * | "," | ";" | ":" | "\" | <"> 62464 * | "/" | "[" | "]" | "?" | "=" 62465 * | "{" | "}" | SP | HT 62466 */ 62467 exports.STRICT_TOKEN = [ 62468 '!', '#', '$', '%', '&', '\'', 62469 '*', '+', '-', '.', 62470 '^', '_', '`', 62471 '|', '~', 62472 ].concat(exports.ALPHANUM); 62473 exports.TOKEN = exports.STRICT_TOKEN.concat([' ']); 62474 /* 62475 * Verify that a char is a valid visible (printable) US-ASCII 62476 * character or %x80-FF 62477 */ 62478 exports.HEADER_CHARS = ['\t']; 62479 for (let i = 32; i <= 255; i++) { 62480 if (i !== 127) { 62481 exports.HEADER_CHARS.push(i); 62482 } 62483 } 62484 // ',' = \x44 62485 exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS.filter((c) => c !== 44); 62486 exports.MAJOR = exports.NUM_MAP; 62487 exports.MINOR = exports.MAJOR; 62488 var HEADER_STATE; 62489 (function (HEADER_STATE) { 62490 HEADER_STATE[HEADER_STATE["GENERAL"] = 0] = "GENERAL"; 62491 HEADER_STATE[HEADER_STATE["CONNECTION"] = 1] = "CONNECTION"; 62492 HEADER_STATE[HEADER_STATE["CONTENT_LENGTH"] = 2] = "CONTENT_LENGTH"; 62493 HEADER_STATE[HEADER_STATE["TRANSFER_ENCODING"] = 3] = "TRANSFER_ENCODING"; 62494 HEADER_STATE[HEADER_STATE["UPGRADE"] = 4] = "UPGRADE"; 62495 HEADER_STATE[HEADER_STATE["CONNECTION_KEEP_ALIVE"] = 5] = "CONNECTION_KEEP_ALIVE"; 62496 HEADER_STATE[HEADER_STATE["CONNECTION_CLOSE"] = 6] = "CONNECTION_CLOSE"; 62497 HEADER_STATE[HEADER_STATE["CONNECTION_UPGRADE"] = 7] = "CONNECTION_UPGRADE"; 62498 HEADER_STATE[HEADER_STATE["TRANSFER_ENCODING_CHUNKED"] = 8] = "TRANSFER_ENCODING_CHUNKED"; 62499 })(HEADER_STATE = exports.HEADER_STATE || (exports.HEADER_STATE = {})); 62500 exports.SPECIAL_HEADERS = { 62501 'connection': HEADER_STATE.CONNECTION, 62502 'content-length': HEADER_STATE.CONTENT_LENGTH, 62503 'proxy-connection': HEADER_STATE.CONNECTION, 62504 'transfer-encoding': HEADER_STATE.TRANSFER_ENCODING, 62505 'upgrade': HEADER_STATE.UPGRADE, 62506 }; 62507 //# sourceMappingURL=constants.js.map 62508 62509 /***/ }), 62510 62511 /***/ 61145: 62512 /***/ ((module) => { 62513 62514 module.exports = 'AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJsbGh0dHBfc3RhdHVzX25hbWUAIRpsbGh0dHBfc2V0X2xlbmllbnRfaGVhZGVycwAiIWxsaHR0cF9zZXRfbGVuaWVudF9jaHVua2VkX2xlbmd0aAAjHWxsaHR0cF9zZXRfbGVuaWVudF9rZWVwX2FsaXZlACQkbGxodHRwX3NldF9sZW5pZW50X3RyYW5zZmVyX2VuY29kaW5nACUYbGxodHRwX21lc3NhZ2VfbmVlZHNfZW9mAD8JFwEAQQELEQECAwQFCwYHNTk3MS8tJyspCsLgAkUCAAsIABCIgICAAAsZACAAEMKAgIAAGiAAIAI2AjggACABOgAoCxwAIAAgAC8BMiAALQAuIAAQwYCAgAAQgICAgAALKgEBf0HAABDGgICAACIBEMKAgIAAGiABQYCIgIAANgI4IAEgADoAKCABCwoAIAAQyICAgAALBwAgAC0AKAsHACAALQAqCwcAIAAtACsLBwAgAC0AKQsHACAALwEyCwcAIAAtAC4LRQEEfyAAKAIYIQEgAC0ALSECIAAtACghAyAAKAI4IQQgABDCgICAABogACAENgI4IAAgAzoAKCAAIAI6AC0gACABNgIYCxEAIAAgASABIAJqEMOAgIAACxAAIABBAEHcABDMgICAABoLZwEBf0EAIQECQCAAKAIMDQACQAJAAkACQCAALQAvDgMBAAMCCyAAKAI4IgFFDQAgASgCLCIBRQ0AIAAgARGAgICAAAAiAQ0DC0EADwsQyoCAgAAACyAAQcOWgIAANgIQQQ4hAQsgAQseAAJAIAAoAgwNACAAQdGbgIAANgIQIABBFTYCDAsLFgACQCAAKAIMQRVHDQAgAEEANgIMCwsWAAJAIAAoAgxBFkcNACAAQQA2AgwLCwcAIAAoAgwLBwAgACgCEAsJACAAIAE2AhALBwAgACgCFAsiAAJAIABBJEkNABDKgICAAAALIABBAnRBoLOAgABqKAIACyIAAkAgAEEuSQ0AEMqAgIAAAAsgAEECdEGwtICAAGooAgAL7gsBAX9B66iAgAAhAQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABBnH9qDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0Hhp4CAAA8LQaShgIAADwtBy6yAgAAPC0H+sYCAAA8LQcCkgIAADwtBq6SAgAAPC0GNqICAAA8LQeKmgIAADwtBgLCAgAAPC0G5r4CAAA8LQdekgIAADwtB75+AgAAPC0Hhn4CAAA8LQfqfgIAADwtB8qCAgAAPC0Gor4CAAA8LQa6ygIAADwtBiLCAgAAPC0Hsp4CAAA8LQYKigIAADwtBjp2AgAAPC0HQroCAAA8LQcqjgIAADwtBxbKAgAAPC0HfnICAAA8LQdKcgIAADwtBxKCAgAAPC0HXoICAAA8LQaKfgIAADwtB7a6AgAAPC0GrsICAAA8LQdSlgIAADwtBzK6AgAAPC0H6roCAAA8LQfyrgIAADwtB0rCAgAAPC0HxnYCAAA8LQbuggIAADwtB96uAgAAPC0GQsYCAAA8LQdexgIAADwtBoq2AgAAPC0HUp4CAAA8LQeCrgIAADwtBn6yAgAAPC0HrsYCAAA8LQdWfgIAADwtByrGAgAAPC0HepYCAAA8LQdSegIAADwtB9JyAgAAPC0GnsoCAAA8LQbGdgIAADwtBoJ2AgAAPC0G5sYCAAA8LQbywgIAADwtBkqGAgAAPC0GzpoCAAA8LQemsgIAADwtBrJ6AgAAPC0HUq4CAAA8LQfemgIAADwtBgKaAgAAPC0GwoYCAAA8LQf6egIAADwtBjaOAgAAPC0GJrYCAAA8LQfeigIAADwtBoLGAgAAPC0Gun4CAAA8LQcalgIAADwtB6J6AgAAPC0GTooCAAA8LQcKvgIAADwtBw52AgAAPC0GLrICAAA8LQeGdgIAADwtBja+AgAAPC0HqoYCAAA8LQbStgIAADwtB0q+AgAAPC0HfsoCAAA8LQdKygIAADwtB8LCAgAAPC0GpooCAAA8LQfmjgIAADwtBmZ6AgAAPC0G1rICAAA8LQZuwgIAADwtBkrKAgAAPC0G2q4CAAA8LQcKigIAADwtB+LKAgAAPC0GepYCAAA8LQdCigIAADwtBup6AgAAPC0GBnoCAAA8LEMqAgIAAAAtB1qGAgAAhAQsgAQsWACAAIAAtAC1B/gFxIAFBAEdyOgAtCxkAIAAgAC0ALUH9AXEgAUEAR0EBdHI6AC0LGQAgACAALQAtQfsBcSABQQBHQQJ0cjoALQsZACAAIAAtAC1B9wFxIAFBAEdBA3RyOgAtCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAgAiBEUNACAAIAQRgICAgAAAIQMLIAMLSQECf0EAIQMCQCAAKAI4IgRFDQAgBCgCBCIERQ0AIAAgASACIAFrIAQRgYCAgAAAIgNBf0cNACAAQcaRgIAANgIQQRghAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIwIgRFDQAgACAEEYCAgIAAACEDCyADC0kBAn9BACEDAkAgACgCOCIERQ0AIAQoAggiBEUNACAAIAEgAiABayAEEYGAgIAAACIDQX9HDQAgAEH2ioCAADYCEEEYIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCNCIERQ0AIAAgBBGAgICAAAAhAwsgAwtJAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIMIgRFDQAgACABIAIgAWsgBBGBgICAAAAiA0F/Rw0AIABB7ZqAgAA2AhBBGCEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAjgiBEUNACAAIAQRgICAgAAAIQMLIAMLSQECf0EAIQMCQCAAKAI4IgRFDQAgBCgCECIERQ0AIAAgASACIAFrIAQRgYCAgAAAIgNBf0cNACAAQZWQgIAANgIQQRghAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAI8IgRFDQAgACAEEYCAgIAAACEDCyADC0kBAn9BACEDAkAgACgCOCIERQ0AIAQoAhQiBEUNACAAIAEgAiABayAEEYGAgIAAACIDQX9HDQAgAEGqm4CAADYCEEEYIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCQCIERQ0AIAAgBBGAgICAAAAhAwsgAwtJAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIYIgRFDQAgACABIAIgAWsgBBGBgICAAAAiA0F/Rw0AIABB7ZOAgAA2AhBBGCEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAkQiBEUNACAAIAQRgICAgAAAIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCJCIERQ0AIAAgBBGAgICAAAAhAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIsIgRFDQAgACAEEYCAgIAAACEDCyADC0kBAn9BACEDAkAgACgCOCIERQ0AIAQoAigiBEUNACAAIAEgAiABayAEEYGAgIAAACIDQX9HDQAgAEH2iICAADYCEEEYIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCUCIERQ0AIAAgBBGAgICAAAAhAwsgAwtJAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIcIgRFDQAgACABIAIgAWsgBBGBgICAAAAiA0F/Rw0AIABBwpmAgAA2AhBBGCEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAkgiBEUNACAAIAQRgICAgAAAIQMLIAMLSQECf0EAIQMCQCAAKAI4IgRFDQAgBCgCICIERQ0AIAAgASACIAFrIAQRgYCAgAAAIgNBf0cNACAAQZSUgIAANgIQQRghAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAJMIgRFDQAgACAEEYCAgIAAACEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAlQiBEUNACAAIAQRgICAgAAAIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCWCIERQ0AIAAgBBGAgICAAAAhAwsgAwtFAQF/AkACQCAALwEwQRRxQRRHDQBBASEDIAAtAChBAUYNASAALwEyQeUARiEDDAELIAAtAClBBUYhAwsgACADOgAuQQAL/gEBA39BASEDAkAgAC8BMCIEQQhxDQAgACkDIEIAUiEDCwJAAkAgAC0ALkUNAEEBIQUgAC0AKUEFRg0BQQEhBSAEQcAAcUUgA3FBAUcNAQtBACEFIARBwABxDQBBAiEFIARB//8DcSIDQQhxDQACQCADQYAEcUUNAAJAIAAtAChBAUcNACAALQAtQQpxDQBBBQ8LQQQPCwJAIANBIHENAAJAIAAtAChBAUYNACAALwEyQf//A3EiAEGcf2pB5ABJDQAgAEHMAUYNACAAQbACRg0AQQQhBSAEQShxRQ0CIANBiARxQYAERg0CC0EADwtBAEEDIAApAyBQGyEFCyAFC2IBAn9BACEBAkAgAC0AKEEBRg0AIAAvATJB//8DcSICQZx/akHkAEkNACACQcwBRg0AIAJBsAJGDQAgAC8BMCIAQcAAcQ0AQQEhASAAQYgEcUGABEYNACAAQShxRSEBCyABC6cBAQN/AkACQAJAIAAtACpFDQAgAC0AK0UNAEEAIQMgAC8BMCIEQQJxRQ0BDAILQQAhAyAALwEwIgRBAXFFDQELQQEhAyAALQAoQQFGDQAgAC8BMkH//wNxIgVBnH9qQeQASQ0AIAVBzAFGDQAgBUGwAkYNACAEQcAAcQ0AQQAhAyAEQYgEcUGABEYNACAEQShxQQBHIQMLIABBADsBMCAAQQA6AC8gAwuZAQECfwJAAkACQCAALQAqRQ0AIAAtACtFDQBBACEBIAAvATAiAkECcUUNAQwCC0EAIQEgAC8BMCICQQFxRQ0BC0EBIQEgAC0AKEEBRg0AIAAvATJB//8DcSIAQZx/akHkAEkNACAAQcwBRg0AIABBsAJGDQAgAkHAAHENAEEAIQEgAkGIBHFBgARGDQAgAkEocUEARyEBCyABC1kAIABBGGpCADcDACAAQgA3AwAgAEE4akIANwMAIABBMGpCADcDACAAQShqQgA3AwAgAEEgakIANwMAIABBEGpCADcDACAAQQhqQgA3AwAgAEHdATYCHEEAC3sBAX8CQCAAKAIMIgMNAAJAIAAoAgRFDQAgACABNgIECwJAIAAgASACEMSAgIAAIgMNACAAKAIMDwsgACADNgIcQQAhAyAAKAIEIgFFDQAgACABIAIgACgCCBGBgICAAAAiAUUNACAAIAI2AhQgACABNgIMIAEhAwsgAwvk8wEDDn8DfgR/I4CAgIAAQRBrIgMkgICAgAAgASEEIAEhBSABIQYgASEHIAEhCCABIQkgASEKIAEhCyABIQwgASENIAEhDiABIQ8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCHCIQQX9qDt0B2gEB2QECAwQFBgcICQoLDA0O2AEPENcBERLWARMUFRYXGBkaG+AB3wEcHR7VAR8gISIjJCXUASYnKCkqKyzTAdIBLS7RAdABLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVG2wFHSElKzwHOAUvNAUzMAU1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4ABgQGCAYMBhAGFAYYBhwGIAYkBigGLAYwBjQGOAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwHLAcoBuAHJAbkByAG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAQDcAQtBACEQDMYBC0EOIRAMxQELQQ0hEAzEAQtBDyEQDMMBC0EQIRAMwgELQRMhEAzBAQtBFCEQDMABC0EVIRAMvwELQRYhEAy+AQtBFyEQDL0BC0EYIRAMvAELQRkhEAy7AQtBGiEQDLoBC0EbIRAMuQELQRwhEAy4AQtBCCEQDLcBC0EdIRAMtgELQSAhEAy1AQtBHyEQDLQBC0EHIRAMswELQSEhEAyyAQtBIiEQDLEBC0EeIRAMsAELQSMhEAyvAQtBEiEQDK4BC0ERIRAMrQELQSQhEAysAQtBJSEQDKsBC0EmIRAMqgELQSchEAypAQtBwwEhEAyoAQtBKSEQDKcBC0ErIRAMpgELQSwhEAylAQtBLSEQDKQBC0EuIRAMowELQS8hEAyiAQtBxAEhEAyhAQtBMCEQDKABC0E0IRAMnwELQQwhEAyeAQtBMSEQDJ0BC0EyIRAMnAELQTMhEAybAQtBOSEQDJoBC0E1IRAMmQELQcUBIRAMmAELQQshEAyXAQtBOiEQDJYBC0E2IRAMlQELQQohEAyUAQtBNyEQDJMBC0E4IRAMkgELQTwhEAyRAQtBOyEQDJABC0E9IRAMjwELQQkhEAyOAQtBKCEQDI0BC0E+IRAMjAELQT8hEAyLAQtBwAAhEAyKAQtBwQAhEAyJAQtBwgAhEAyIAQtBwwAhEAyHAQtBxAAhEAyGAQtBxQAhEAyFAQtBxgAhEAyEAQtBKiEQDIMBC0HHACEQDIIBC0HIACEQDIEBC0HJACEQDIABC0HKACEQDH8LQcsAIRAMfgtBzQAhEAx9C0HMACEQDHwLQc4AIRAMewtBzwAhEAx6C0HQACEQDHkLQdEAIRAMeAtB0gAhEAx3C0HTACEQDHYLQdQAIRAMdQtB1gAhEAx0C0HVACEQDHMLQQYhEAxyC0HXACEQDHELQQUhEAxwC0HYACEQDG8LQQQhEAxuC0HZACEQDG0LQdoAIRAMbAtB2wAhEAxrC0HcACEQDGoLQQMhEAxpC0HdACEQDGgLQd4AIRAMZwtB3wAhEAxmC0HhACEQDGULQeAAIRAMZAtB4gAhEAxjC0HjACEQDGILQQIhEAxhC0HkACEQDGALQeUAIRAMXwtB5gAhEAxeC0HnACEQDF0LQegAIRAMXAtB6QAhEAxbC0HqACEQDFoLQesAIRAMWQtB7AAhEAxYC0HtACEQDFcLQe4AIRAMVgtB7wAhEAxVC0HwACEQDFQLQfEAIRAMUwtB8gAhEAxSC0HzACEQDFELQfQAIRAMUAtB9QAhEAxPC0H2ACEQDE4LQfcAIRAMTQtB+AAhEAxMC0H5ACEQDEsLQfoAIRAMSgtB+wAhEAxJC0H8ACEQDEgLQf0AIRAMRwtB/gAhEAxGC0H/ACEQDEULQYABIRAMRAtBgQEhEAxDC0GCASEQDEILQYMBIRAMQQtBhAEhEAxAC0GFASEQDD8LQYYBIRAMPgtBhwEhEAw9C0GIASEQDDwLQYkBIRAMOwtBigEhEAw6C0GLASEQDDkLQYwBIRAMOAtBjQEhEAw3C0GOASEQDDYLQY8BIRAMNQtBkAEhEAw0C0GRASEQDDMLQZIBIRAMMgtBkwEhEAwxC0GUASEQDDALQZUBIRAMLwtBlgEhEAwuC0GXASEQDC0LQZgBIRAMLAtBmQEhEAwrC0GaASEQDCoLQZsBIRAMKQtBnAEhEAwoC0GdASEQDCcLQZ4BIRAMJgtBnwEhEAwlC0GgASEQDCQLQaEBIRAMIwtBogEhEAwiC0GjASEQDCELQaQBIRAMIAtBpQEhEAwfC0GmASEQDB4LQacBIRAMHQtBqAEhEAwcC0GpASEQDBsLQaoBIRAMGgtBqwEhEAwZC0GsASEQDBgLQa0BIRAMFwtBrgEhEAwWC0EBIRAMFQtBrwEhEAwUC0GwASEQDBMLQbEBIRAMEgtBswEhEAwRC0GyASEQDBALQbQBIRAMDwtBtQEhEAwOC0G2ASEQDA0LQbcBIRAMDAtBuAEhEAwLC0G5ASEQDAoLQboBIRAMCQtBuwEhEAwIC0HGASEQDAcLQbwBIRAMBgtBvQEhEAwFC0G+ASEQDAQLQb8BIRAMAwtBwAEhEAwCC0HCASEQDAELQcEBIRALA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAQDscBAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxweHyAhIyUoP0BBREVGR0hJSktMTU9QUVJT3gNXWVtcXWBiZWZnaGlqa2xtb3BxcnN0dXZ3eHl6e3x9foABggGFAYYBhwGJAYsBjAGNAY4BjwGQAZEBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3AHdAd4B4AHhAeIB4wHkAeUB5gHnAegB6QHqAesB7AHtAe4B7wHwAfEB8gHzAZkCpAKwAv4C/gILIAEiBCACRw3zAUHdASEQDP8DCyABIhAgAkcN3QFBwwEhEAz+AwsgASIBIAJHDZABQfcAIRAM/QMLIAEiASACRw2GAUHvACEQDPwDCyABIgEgAkcNf0HqACEQDPsDCyABIgEgAkcNe0HoACEQDPoDCyABIgEgAkcNeEHmACEQDPkDCyABIgEgAkcNGkEYIRAM+AMLIAEiASACRw0UQRIhEAz3AwsgASIBIAJHDVlBxQAhEAz2AwsgASIBIAJHDUpBPyEQDPUDCyABIgEgAkcNSEE8IRAM9AMLIAEiASACRw1BQTEhEAzzAwsgAC0ALkEBRg3rAwyHAgsgACABIgEgAhDAgICAAEEBRw3mASAAQgA3AyAM5wELIAAgASIBIAIQtICAgAAiEA3nASABIQEM9QILAkAgASIBIAJHDQBBBiEQDPADCyAAIAFBAWoiASACELuAgIAAIhAN6AEgASEBDDELIABCADcDIEESIRAM1QMLIAEiECACRw0rQR0hEAztAwsCQCABIgEgAkYNACABQQFqIQFBECEQDNQDC0EHIRAM7AMLIABCACAAKQMgIhEgAiABIhBrrSISfSITIBMgEVYbNwMgIBEgElYiFEUN5QFBCCEQDOsDCwJAIAEiASACRg0AIABBiYCAgAA2AgggACABNgIEIAEhAUEUIRAM0gMLQQkhEAzqAwsgASEBIAApAyBQDeQBIAEhAQzyAgsCQCABIgEgAkcNAEELIRAM6QMLIAAgAUEBaiIBIAIQtoCAgAAiEA3lASABIQEM8gILIAAgASIBIAIQuICAgAAiEA3lASABIQEM8gILIAAgASIBIAIQuICAgAAiEA3mASABIQEMDQsgACABIgEgAhC6gICAACIQDecBIAEhAQzwAgsCQCABIgEgAkcNAEEPIRAM5QMLIAEtAAAiEEE7Rg0IIBBBDUcN6AEgAUEBaiEBDO8CCyAAIAEiASACELqAgIAAIhAN6AEgASEBDPICCwNAAkAgAS0AAEHwtYCAAGotAAAiEEEBRg0AIBBBAkcN6wEgACgCBCEQIABBADYCBCAAIBAgAUEBaiIBELmAgIAAIhAN6gEgASEBDPQCCyABQQFqIgEgAkcNAAtBEiEQDOIDCyAAIAEiASACELqAgIAAIhAN6QEgASEBDAoLIAEiASACRw0GQRshEAzgAwsCQCABIgEgAkcNAEEWIRAM4AMLIABBioCAgAA2AgggACABNgIEIAAgASACELiAgIAAIhAN6gEgASEBQSAhEAzGAwsCQCABIgEgAkYNAANAAkAgAS0AAEHwt4CAAGotAAAiEEECRg0AAkAgEEF/ag4E5QHsAQDrAewBCyABQQFqIQFBCCEQDMgDCyABQQFqIgEgAkcNAAtBFSEQDN8DC0EVIRAM3gMLA0ACQCABLQAAQfC5gIAAai0AACIQQQJGDQAgEEF/ag4E3gHsAeAB6wHsAQsgAUEBaiIBIAJHDQALQRghEAzdAwsCQCABIgEgAkYNACAAQYuAgIAANgIIIAAgATYCBCABIQFBByEQDMQDC0EZIRAM3AMLIAFBAWohAQwCCwJAIAEiFCACRw0AQRohEAzbAwsgFCEBAkAgFC0AAEFzag4U3QLuAu4C7gLuAu4C7gLuAu4C7gLuAu4C7gLuAu4C7gLuAu4C7gIA7gILQQAhECAAQQA2AhwgAEGvi4CAADYCECAAQQI2AgwgACAUQQFqNgIUDNoDCwJAIAEtAAAiEEE7Rg0AIBBBDUcN6AEgAUEBaiEBDOUCCyABQQFqIQELQSIhEAy/AwsCQCABIhAgAkcNAEEcIRAM2AMLQgAhESAQIQEgEC0AAEFQag435wHmAQECAwQFBgcIAAAAAAAAAAkKCwwNDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADxAREhMUAAtBHiEQDL0DC0ICIREM5QELQgMhEQzkAQtCBCERDOMBC0IFIREM4gELQgYhEQzhAQtCByERDOABC0IIIREM3wELQgkhEQzeAQtCCiERDN0BC0ILIREM3AELQgwhEQzbAQtCDSERDNoBC0IOIREM2QELQg8hEQzYAQtCCiERDNcBC0ILIREM1gELQgwhEQzVAQtCDSERDNQBC0IOIREM0wELQg8hEQzSAQtCACERAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAQLQAAQVBqDjflAeQBAAECAwQFBgfmAeYB5gHmAeYB5gHmAQgJCgsMDeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gEODxAREhPmAQtCAiERDOQBC0IDIREM4wELQgQhEQziAQtCBSERDOEBC0IGIREM4AELQgchEQzfAQtCCCERDN4BC0IJIREM3QELQgohEQzcAQtCCyERDNsBC0IMIREM2gELQg0hEQzZAQtCDiERDNgBC0IPIREM1wELQgohEQzWAQtCCyERDNUBC0IMIREM1AELQg0hEQzTAQtCDiERDNIBC0IPIREM0QELIABCACAAKQMgIhEgAiABIhBrrSISfSITIBMgEVYbNwMgIBEgElYiFEUN0gFBHyEQDMADCwJAIAEiASACRg0AIABBiYCAgAA2AgggACABNgIEIAEhAUEkIRAMpwMLQSAhEAy/AwsgACABIhAgAhC+gICAAEF/ag4FtgEAxQIB0QHSAQtBESEQDKQDCyAAQQE6AC8gECEBDLsDCyABIgEgAkcN0gFBJCEQDLsDCyABIg0gAkcNHkHGACEQDLoDCyAAIAEiASACELKAgIAAIhAN1AEgASEBDLUBCyABIhAgAkcNJkHQACEQDLgDCwJAIAEiASACRw0AQSghEAy4AwsgAEEANgIEIABBjICAgAA2AgggACABIAEQsYCAgAAiEA3TASABIQEM2AELAkAgASIQIAJHDQBBKSEQDLcDCyAQLQAAIgFBIEYNFCABQQlHDdMBIBBBAWohAQwVCwJAIAEiASACRg0AIAFBAWohAQwXC0EqIRAMtQMLAkAgASIQIAJHDQBBKyEQDLUDCwJAIBAtAAAiAUEJRg0AIAFBIEcN1QELIAAtACxBCEYN0wEgECEBDJEDCwJAIAEiASACRw0AQSwhEAy0AwsgAS0AAEEKRw3VASABQQFqIQEMyQILIAEiDiACRw3VAUEvIRAMsgMLA0ACQCABLQAAIhBBIEYNAAJAIBBBdmoOBADcAdwBANoBCyABIQEM4AELIAFBAWoiASACRw0AC0ExIRAMsQMLQTIhECABIhQgAkYNsAMgAiAUayAAKAIAIgFqIRUgFCABa0EDaiEWAkADQCAULQAAIhdBIHIgFyAXQb9/akH/AXFBGkkbQf8BcSABQfC7gIAAai0AAEcNAQJAIAFBA0cNAEEGIQEMlgMLIAFBAWohASAUQQFqIhQgAkcNAAsgACAVNgIADLEDCyAAQQA2AgAgFCEBDNkBC0EzIRAgASIUIAJGDa8DIAIgFGsgACgCACIBaiEVIBQgAWtBCGohFgJAA0AgFC0AACIXQSByIBcgF0G/f2pB/wFxQRpJG0H/AXEgAUH0u4CAAGotAABHDQECQCABQQhHDQBBBSEBDJUDCyABQQFqIQEgFEEBaiIUIAJHDQALIAAgFTYCAAywAwsgAEEANgIAIBQhAQzYAQtBNCEQIAEiFCACRg2uAyACIBRrIAAoAgAiAWohFSAUIAFrQQVqIRYCQANAIBQtAAAiF0EgciAXIBdBv39qQf8BcUEaSRtB/wFxIAFB0MKAgABqLQAARw0BAkAgAUEFRw0AQQchAQyUAwsgAUEBaiEBIBRBAWoiFCACRw0ACyAAIBU2AgAMrwMLIABBADYCACAUIQEM1wELAkAgASIBIAJGDQADQAJAIAEtAABBgL6AgABqLQAAIhBBAUYNACAQQQJGDQogASEBDN0BCyABQQFqIgEgAkcNAAtBMCEQDK4DC0EwIRAMrQMLAkAgASIBIAJGDQADQAJAIAEtAAAiEEEgRg0AIBBBdmoOBNkB2gHaAdkB2gELIAFBAWoiASACRw0AC0E4IRAMrQMLQTghEAysAwsDQAJAIAEtAAAiEEEgRg0AIBBBCUcNAwsgAUEBaiIBIAJHDQALQTwhEAyrAwsDQAJAIAEtAAAiEEEgRg0AAkACQCAQQXZqDgTaAQEB2gEACyAQQSxGDdsBCyABIQEMBAsgAUEBaiIBIAJHDQALQT8hEAyqAwsgASEBDNsBC0HAACEQIAEiFCACRg2oAyACIBRrIAAoAgAiAWohFiAUIAFrQQZqIRcCQANAIBQtAABBIHIgAUGAwICAAGotAABHDQEgAUEGRg2OAyABQQFqIQEgFEEBaiIUIAJHDQALIAAgFjYCAAypAwsgAEEANgIAIBQhAQtBNiEQDI4DCwJAIAEiDyACRw0AQcEAIRAMpwMLIABBjICAgAA2AgggACAPNgIEIA8hASAALQAsQX9qDgTNAdUB1wHZAYcDCyABQQFqIQEMzAELAkAgASIBIAJGDQADQAJAIAEtAAAiEEEgciAQIBBBv39qQf8BcUEaSRtB/wFxIhBBCUYNACAQQSBGDQACQAJAAkACQCAQQZ1/ag4TAAMDAwMDAwMBAwMDAwMDAwMDAgMLIAFBAWohAUExIRAMkQMLIAFBAWohAUEyIRAMkAMLIAFBAWohAUEzIRAMjwMLIAEhAQzQAQsgAUEBaiIBIAJHDQALQTUhEAylAwtBNSEQDKQDCwJAIAEiASACRg0AA0ACQCABLQAAQYC8gIAAai0AAEEBRg0AIAEhAQzTAQsgAUEBaiIBIAJHDQALQT0hEAykAwtBPSEQDKMDCyAAIAEiASACELCAgIAAIhAN1gEgASEBDAELIBBBAWohAQtBPCEQDIcDCwJAIAEiASACRw0AQcIAIRAMoAMLAkADQAJAIAEtAABBd2oOGAAC/gL+AoQD/gL+Av4C/gL+Av4C/gL+Av4C/gL+Av4C/gL+Av4C/gL+Av4CAP4CCyABQQFqIgEgAkcNAAtBwgAhEAygAwsgAUEBaiEBIAAtAC1BAXFFDb0BIAEhAQtBLCEQDIUDCyABIgEgAkcN0wFBxAAhEAydAwsDQAJAIAEtAABBkMCAgABqLQAAQQFGDQAgASEBDLcCCyABQQFqIgEgAkcNAAtBxQAhEAycAwsgDS0AACIQQSBGDbMBIBBBOkcNgQMgACgCBCEBIABBADYCBCAAIAEgDRCvgICAACIBDdABIA1BAWohAQyzAgtBxwAhECABIg0gAkYNmgMgAiANayAAKAIAIgFqIRYgDSABa0EFaiEXA0AgDS0AACIUQSByIBQgFEG/f2pB/wFxQRpJG0H/AXEgAUGQwoCAAGotAABHDYADIAFBBUYN9AIgAUEBaiEBIA1BAWoiDSACRw0ACyAAIBY2AgAMmgMLQcgAIRAgASINIAJGDZkDIAIgDWsgACgCACIBaiEWIA0gAWtBCWohFwNAIA0tAAAiFEEgciAUIBRBv39qQf8BcUEaSRtB/wFxIAFBlsKAgABqLQAARw3/AgJAIAFBCUcNAEECIQEM9QILIAFBAWohASANQQFqIg0gAkcNAAsgACAWNgIADJkDCwJAIAEiDSACRw0AQckAIRAMmQMLAkACQCANLQAAIgFBIHIgASABQb9/akH/AXFBGkkbQf8BcUGSf2oOBwCAA4ADgAOAA4ADAYADCyANQQFqIQFBPiEQDIADCyANQQFqIQFBPyEQDP8CC0HKACEQIAEiDSACRg2XAyACIA1rIAAoAgAiAWohFiANIAFrQQFqIRcDQCANLQAAIhRBIHIgFCAUQb9/akH/AXFBGkkbQf8BcSABQaDCgIAAai0AAEcN/QIgAUEBRg3wAiABQQFqIQEgDUEBaiINIAJHDQALIAAgFjYCAAyXAwtBywAhECABIg0gAkYNlgMgAiANayAAKAIAIgFqIRYgDSABa0EOaiEXA0AgDS0AACIUQSByIBQgFEG/f2pB/wFxQRpJG0H/AXEgAUGiwoCAAGotAABHDfwCIAFBDkYN8AIgAUEBaiEBIA1BAWoiDSACRw0ACyAAIBY2AgAMlgMLQcwAIRAgASINIAJGDZUDIAIgDWsgACgCACIBaiEWIA0gAWtBD2ohFwNAIA0tAAAiFEEgciAUIBRBv39qQf8BcUEaSRtB/wFxIAFBwMKAgABqLQAARw37AgJAIAFBD0cNAEEDIQEM8QILIAFBAWohASANQQFqIg0gAkcNAAsgACAWNgIADJUDC0HNACEQIAEiDSACRg2UAyACIA1rIAAoAgAiAWohFiANIAFrQQVqIRcDQCANLQAAIhRBIHIgFCAUQb9/akH/AXFBGkkbQf8BcSABQdDCgIAAai0AAEcN+gICQCABQQVHDQBBBCEBDPACCyABQQFqIQEgDUEBaiINIAJHDQALIAAgFjYCAAyUAwsCQCABIg0gAkcNAEHOACEQDJQDCwJAAkACQAJAIA0tAAAiAUEgciABIAFBv39qQf8BcUEaSRtB/wFxQZ1/ag4TAP0C/QL9Av0C/QL9Av0C/QL9Av0C/QL9AgH9Av0C/QICA/0CCyANQQFqIQFBwQAhEAz9AgsgDUEBaiEBQcIAIRAM/AILIA1BAWohAUHDACEQDPsCCyANQQFqIQFBxAAhEAz6AgsCQCABIgEgAkYNACAAQY2AgIAANgIIIAAgATYCBCABIQFBxQAhEAz6AgtBzwAhEAySAwsgECEBAkACQCAQLQAAQXZqDgQBqAKoAgCoAgsgEEEBaiEBC0EnIRAM+AILAkAgASIBIAJHDQBB0QAhEAyRAwsCQCABLQAAQSBGDQAgASEBDI0BCyABQQFqIQEgAC0ALUEBcUUNxwEgASEBDIwBCyABIhcgAkcNyAFB0gAhEAyPAwtB0wAhECABIhQgAkYNjgMgAiAUayAAKAIAIgFqIRYgFCABa0EBaiEXA0AgFC0AACABQdbCgIAAai0AAEcNzAEgAUEBRg3HASABQQFqIQEgFEEBaiIUIAJHDQALIAAgFjYCAAyOAwsCQCABIgEgAkcNAEHVACEQDI4DCyABLQAAQQpHDcwBIAFBAWohAQzHAQsCQCABIgEgAkcNAEHWACEQDI0DCwJAAkAgAS0AAEF2ag4EAM0BzQEBzQELIAFBAWohAQzHAQsgAUEBaiEBQcoAIRAM8wILIAAgASIBIAIQroCAgAAiEA3LASABIQFBzQAhEAzyAgsgAC0AKUEiRg2FAwymAgsCQCABIgEgAkcNAEHbACEQDIoDC0EAIRRBASEXQQEhFkEAIRACQAJAAkACQAJAAkACQAJAAkAgAS0AAEFQag4K1AHTAQABAgMEBQYI1QELQQIhEAwGC0EDIRAMBQtBBCEQDAQLQQUhEAwDC0EGIRAMAgtBByEQDAELQQghEAtBACEXQQAhFkEAIRQMzAELQQkhEEEBIRRBACEXQQAhFgzLAQsCQCABIgEgAkcNAEHdACEQDIkDCyABLQAAQS5HDcwBIAFBAWohAQymAgsgASIBIAJHDcwBQd8AIRAMhwMLAkAgASIBIAJGDQAgAEGOgICAADYCCCAAIAE2AgQgASEBQdAAIRAM7gILQeAAIRAMhgMLQeEAIRAgASIBIAJGDYUDIAIgAWsgACgCACIUaiEWIAEgFGtBA2ohFwNAIAEtAAAgFEHiwoCAAGotAABHDc0BIBRBA0YNzAEgFEEBaiEUIAFBAWoiASACRw0ACyAAIBY2AgAMhQMLQeIAIRAgASIBIAJGDYQDIAIgAWsgACgCACIUaiEWIAEgFGtBAmohFwNAIAEtAAAgFEHmwoCAAGotAABHDcwBIBRBAkYNzgEgFEEBaiEUIAFBAWoiASACRw0ACyAAIBY2AgAMhAMLQeMAIRAgASIBIAJGDYMDIAIgAWsgACgCACIUaiEWIAEgFGtBA2ohFwNAIAEtAAAgFEHpwoCAAGotAABHDcsBIBRBA0YNzgEgFEEBaiEUIAFBAWoiASACRw0ACyAAIBY2AgAMgwMLAkAgASIBIAJHDQBB5QAhEAyDAwsgACABQQFqIgEgAhCogICAACIQDc0BIAEhAUHWACEQDOkCCwJAIAEiASACRg0AA0ACQCABLQAAIhBBIEYNAAJAAkACQCAQQbh/ag4LAAHPAc8BzwHPAc8BzwHPAc8BAs8BCyABQQFqIQFB0gAhEAztAgsgAUEBaiEBQdMAIRAM7AILIAFBAWohAUHUACEQDOsCCyABQQFqIgEgAkcNAAtB5AAhEAyCAwtB5AAhEAyBAwsDQAJAIAEtAABB8MKAgABqLQAAIhBBAUYNACAQQX5qDgPPAdAB0QHSAQsgAUEBaiIBIAJHDQALQeYAIRAMgAMLAkAgASIBIAJGDQAgAUEBaiEBDAMLQecAIRAM/wILA0ACQCABLQAAQfDEgIAAai0AACIQQQFGDQACQCAQQX5qDgTSAdMB1AEA1QELIAEhAUHXACEQDOcCCyABQQFqIgEgAkcNAAtB6AAhEAz+AgsCQCABIgEgAkcNAEHpACEQDP4CCwJAIAEtAAAiEEF2ag4augHVAdUBvAHVAdUB1QHVAdUB1QHVAdUB1QHVAdUB1QHVAdUB1QHVAdUB1QHKAdUB1QEA0wELIAFBAWohAQtBBiEQDOMCCwNAAkAgAS0AAEHwxoCAAGotAABBAUYNACABIQEMngILIAFBAWoiASACRw0AC0HqACEQDPsCCwJAIAEiASACRg0AIAFBAWohAQwDC0HrACEQDPoCCwJAIAEiASACRw0AQewAIRAM+gILIAFBAWohAQwBCwJAIAEiASACRw0AQe0AIRAM+QILIAFBAWohAQtBBCEQDN4CCwJAIAEiFCACRw0AQe4AIRAM9wILIBQhAQJAAkACQCAULQAAQfDIgIAAai0AAEF/ag4H1AHVAdYBAJwCAQLXAQsgFEEBaiEBDAoLIBRBAWohAQzNAQtBACEQIABBADYCHCAAQZuSgIAANgIQIABBBzYCDCAAIBRBAWo2AhQM9gILAkADQAJAIAEtAABB8MiAgABqLQAAIhBBBEYNAAJAAkAgEEF/ag4H0gHTAdQB2QEABAHZAQsgASEBQdoAIRAM4AILIAFBAWohAUHcACEQDN8CCyABQQFqIgEgAkcNAAtB7wAhEAz2AgsgAUEBaiEBDMsBCwJAIAEiFCACRw0AQfAAIRAM9QILIBQtAABBL0cN1AEgFEEBaiEBDAYLAkAgASIUIAJHDQBB8QAhEAz0AgsCQCAULQAAIgFBL0cNACAUQQFqIQFB3QAhEAzbAgsgAUF2aiIEQRZLDdMBQQEgBHRBiYCAAnFFDdMBDMoCCwJAIAEiASACRg0AIAFBAWohAUHeACEQDNoCC0HyACEQDPICCwJAIAEiFCACRw0AQfQAIRAM8gILIBQhAQJAIBQtAABB8MyAgABqLQAAQX9qDgPJApQCANQBC0HhACEQDNgCCwJAIAEiFCACRg0AA0ACQCAULQAAQfDKgIAAai0AACIBQQNGDQACQCABQX9qDgLLAgDVAQsgFCEBQd8AIRAM2gILIBRBAWoiFCACRw0AC0HzACEQDPECC0HzACEQDPACCwJAIAEiASACRg0AIABBj4CAgAA2AgggACABNgIEIAEhAUHgACEQDNcCC0H1ACEQDO8CCwJAIAEiASACRw0AQfYAIRAM7wILIABBj4CAgAA2AgggACABNgIEIAEhAQtBAyEQDNQCCwNAIAEtAABBIEcNwwIgAUEBaiIBIAJHDQALQfcAIRAM7AILAkAgASIBIAJHDQBB+AAhEAzsAgsgAS0AAEEgRw3OASABQQFqIQEM7wELIAAgASIBIAIQrICAgAAiEA3OASABIQEMjgILAkAgASIEIAJHDQBB+gAhEAzqAgsgBC0AAEHMAEcN0QEgBEEBaiEBQRMhEAzPAQsCQCABIgQgAkcNAEH7ACEQDOkCCyACIARrIAAoAgAiAWohFCAEIAFrQQVqIRADQCAELQAAIAFB8M6AgABqLQAARw3QASABQQVGDc4BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQfsAIRAM6AILAkAgASIEIAJHDQBB/AAhEAzoAgsCQAJAIAQtAABBvX9qDgwA0QHRAdEB0QHRAdEB0QHRAdEB0QEB0QELIARBAWohAUHmACEQDM8CCyAEQQFqIQFB5wAhEAzOAgsCQCABIgQgAkcNAEH9ACEQDOcCCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUHtz4CAAGotAABHDc8BIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEH9ACEQDOcCCyAAQQA2AgAgEEEBaiEBQRAhEAzMAQsCQCABIgQgAkcNAEH+ACEQDOYCCyACIARrIAAoAgAiAWohFCAEIAFrQQVqIRACQANAIAQtAAAgAUH2zoCAAGotAABHDc4BIAFBBUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEH+ACEQDOYCCyAAQQA2AgAgEEEBaiEBQRYhEAzLAQsCQCABIgQgAkcNAEH/ACEQDOUCCyACIARrIAAoAgAiAWohFCAEIAFrQQNqIRACQANAIAQtAAAgAUH8zoCAAGotAABHDc0BIAFBA0YNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEH/ACEQDOUCCyAAQQA2AgAgEEEBaiEBQQUhEAzKAQsCQCABIgQgAkcNAEGAASEQDOQCCyAELQAAQdkARw3LASAEQQFqIQFBCCEQDMkBCwJAIAEiBCACRw0AQYEBIRAM4wILAkACQCAELQAAQbJ/ag4DAMwBAcwBCyAEQQFqIQFB6wAhEAzKAgsgBEEBaiEBQewAIRAMyQILAkAgASIEIAJHDQBBggEhEAziAgsCQAJAIAQtAABBuH9qDggAywHLAcsBywHLAcsBAcsBCyAEQQFqIQFB6gAhEAzJAgsgBEEBaiEBQe0AIRAMyAILAkAgASIEIAJHDQBBgwEhEAzhAgsgAiAEayAAKAIAIgFqIRAgBCABa0ECaiEUAkADQCAELQAAIAFBgM+AgABqLQAARw3JASABQQJGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBA2AgBBgwEhEAzhAgtBACEQIABBADYCACAUQQFqIQEMxgELAkAgASIEIAJHDQBBhAEhEAzgAgsgAiAEayAAKAIAIgFqIRQgBCABa0EEaiEQAkADQCAELQAAIAFBg8+AgABqLQAARw3IASABQQRGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBhAEhEAzgAgsgAEEANgIAIBBBAWohAUEjIRAMxQELAkAgASIEIAJHDQBBhQEhEAzfAgsCQAJAIAQtAABBtH9qDggAyAHIAcgByAHIAcgBAcgBCyAEQQFqIQFB7wAhEAzGAgsgBEEBaiEBQfAAIRAMxQILAkAgASIEIAJHDQBBhgEhEAzeAgsgBC0AAEHFAEcNxQEgBEEBaiEBDIMCCwJAIAEiBCACRw0AQYcBIRAM3QILIAIgBGsgACgCACIBaiEUIAQgAWtBA2ohEAJAA0AgBC0AACABQYjPgIAAai0AAEcNxQEgAUEDRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQYcBIRAM3QILIABBADYCACAQQQFqIQFBLSEQDMIBCwJAIAEiBCACRw0AQYgBIRAM3AILIAIgBGsgACgCACIBaiEUIAQgAWtBCGohEAJAA0AgBC0AACABQdDPgIAAai0AAEcNxAEgAUEIRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQYgBIRAM3AILIABBADYCACAQQQFqIQFBKSEQDMEBCwJAIAEiASACRw0AQYkBIRAM2wILQQEhECABLQAAQd8ARw3AASABQQFqIQEMgQILAkAgASIEIAJHDQBBigEhEAzaAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQA0AgBC0AACABQYzPgIAAai0AAEcNwQEgAUEBRg2vAiABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGKASEQDNkCCwJAIAEiBCACRw0AQYsBIRAM2QILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQY7PgIAAai0AAEcNwQEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQYsBIRAM2QILIABBADYCACAQQQFqIQFBAiEQDL4BCwJAIAEiBCACRw0AQYwBIRAM2AILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQfDPgIAAai0AAEcNwAEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQYwBIRAM2AILIABBADYCACAQQQFqIQFBHyEQDL0BCwJAIAEiBCACRw0AQY0BIRAM1wILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQfLPgIAAai0AAEcNvwEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQY0BIRAM1wILIABBADYCACAQQQFqIQFBCSEQDLwBCwJAIAEiBCACRw0AQY4BIRAM1gILAkACQCAELQAAQbd/ag4HAL8BvwG/Ab8BvwEBvwELIARBAWohAUH4ACEQDL0CCyAEQQFqIQFB+QAhEAy8AgsCQCABIgQgAkcNAEGPASEQDNUCCyACIARrIAAoAgAiAWohFCAEIAFrQQVqIRACQANAIAQtAAAgAUGRz4CAAGotAABHDb0BIAFBBUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGPASEQDNUCCyAAQQA2AgAgEEEBaiEBQRghEAy6AQsCQCABIgQgAkcNAEGQASEQDNQCCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUGXz4CAAGotAABHDbwBIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGQASEQDNQCCyAAQQA2AgAgEEEBaiEBQRchEAy5AQsCQCABIgQgAkcNAEGRASEQDNMCCyACIARrIAAoAgAiAWohFCAEIAFrQQZqIRACQANAIAQtAAAgAUGaz4CAAGotAABHDbsBIAFBBkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGRASEQDNMCCyAAQQA2AgAgEEEBaiEBQRUhEAy4AQsCQCABIgQgAkcNAEGSASEQDNICCyACIARrIAAoAgAiAWohFCAEIAFrQQVqIRACQANAIAQtAAAgAUGhz4CAAGotAABHDboBIAFBBUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGSASEQDNICCyAAQQA2AgAgEEEBaiEBQR4hEAy3AQsCQCABIgQgAkcNAEGTASEQDNECCyAELQAAQcwARw24ASAEQQFqIQFBCiEQDLYBCwJAIAQgAkcNAEGUASEQDNACCwJAAkAgBC0AAEG/f2oODwC5AbkBuQG5AbkBuQG5AbkBuQG5AbkBuQG5AQG5AQsgBEEBaiEBQf4AIRAMtwILIARBAWohAUH/ACEQDLYCCwJAIAQgAkcNAEGVASEQDM8CCwJAAkAgBC0AAEG/f2oOAwC4AQG4AQsgBEEBaiEBQf0AIRAMtgILIARBAWohBEGAASEQDLUCCwJAIAQgAkcNAEGWASEQDM4CCyACIARrIAAoAgAiAWohFCAEIAFrQQFqIRACQANAIAQtAAAgAUGnz4CAAGotAABHDbYBIAFBAUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGWASEQDM4CCyAAQQA2AgAgEEEBaiEBQQshEAyzAQsCQCAEIAJHDQBBlwEhEAzNAgsCQAJAAkACQCAELQAAQVNqDiMAuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AQG4AbgBuAG4AbgBArgBuAG4AQO4AQsgBEEBaiEBQfsAIRAMtgILIARBAWohAUH8ACEQDLUCCyAEQQFqIQRBgQEhEAy0AgsgBEEBaiEEQYIBIRAMswILAkAgBCACRw0AQZgBIRAMzAILIAIgBGsgACgCACIBaiEUIAQgAWtBBGohEAJAA0AgBC0AACABQanPgIAAai0AAEcNtAEgAUEERg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZgBIRAMzAILIABBADYCACAQQQFqIQFBGSEQDLEBCwJAIAQgAkcNAEGZASEQDMsCCyACIARrIAAoAgAiAWohFCAEIAFrQQVqIRACQANAIAQtAAAgAUGuz4CAAGotAABHDbMBIAFBBUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGZASEQDMsCCyAAQQA2AgAgEEEBaiEBQQYhEAywAQsCQCAEIAJHDQBBmgEhEAzKAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFBtM+AgABqLQAARw2yASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBmgEhEAzKAgsgAEEANgIAIBBBAWohAUEcIRAMrwELAkAgBCACRw0AQZsBIRAMyQILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQbbPgIAAai0AAEcNsQEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZsBIRAMyQILIABBADYCACAQQQFqIQFBJyEQDK4BCwJAIAQgAkcNAEGcASEQDMgCCwJAAkAgBC0AAEGsf2oOAgABsQELIARBAWohBEGGASEQDK8CCyAEQQFqIQRBhwEhEAyuAgsCQCAEIAJHDQBBnQEhEAzHAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFBuM+AgABqLQAARw2vASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBnQEhEAzHAgsgAEEANgIAIBBBAWohAUEmIRAMrAELAkAgBCACRw0AQZ4BIRAMxgILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQbrPgIAAai0AAEcNrgEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZ4BIRAMxgILIABBADYCACAQQQFqIQFBAyEQDKsBCwJAIAQgAkcNAEGfASEQDMUCCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUHtz4CAAGotAABHDa0BIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGfASEQDMUCCyAAQQA2AgAgEEEBaiEBQQwhEAyqAQsCQCAEIAJHDQBBoAEhEAzEAgsgAiAEayAAKAIAIgFqIRQgBCABa0EDaiEQAkADQCAELQAAIAFBvM+AgABqLQAARw2sASABQQNGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBoAEhEAzEAgsgAEEANgIAIBBBAWohAUENIRAMqQELAkAgBCACRw0AQaEBIRAMwwILAkACQCAELQAAQbp/ag4LAKwBrAGsAawBrAGsAawBrAGsAQGsAQsgBEEBaiEEQYsBIRAMqgILIARBAWohBEGMASEQDKkCCwJAIAQgAkcNAEGiASEQDMICCyAELQAAQdAARw2pASAEQQFqIQQM6QELAkAgBCACRw0AQaMBIRAMwQILAkACQCAELQAAQbd/ag4HAaoBqgGqAaoBqgEAqgELIARBAWohBEGOASEQDKgCCyAEQQFqIQFBIiEQDKYBCwJAIAQgAkcNAEGkASEQDMACCyACIARrIAAoAgAiAWohFCAEIAFrQQFqIRACQANAIAQtAAAgAUHAz4CAAGotAABHDagBIAFBAUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGkASEQDMACCyAAQQA2AgAgEEEBaiEBQR0hEAylAQsCQCAEIAJHDQBBpQEhEAy/AgsCQAJAIAQtAABBrn9qDgMAqAEBqAELIARBAWohBEGQASEQDKYCCyAEQQFqIQFBBCEQDKQBCwJAIAQgAkcNAEGmASEQDL4CCwJAAkACQAJAAkAgBC0AAEG/f2oOFQCqAaoBqgGqAaoBqgGqAaoBqgGqAQGqAaoBAqoBqgEDqgGqAQSqAQsgBEEBaiEEQYgBIRAMqAILIARBAWohBEGJASEQDKcCCyAEQQFqIQRBigEhEAymAgsgBEEBaiEEQY8BIRAMpQILIARBAWohBEGRASEQDKQCCwJAIAQgAkcNAEGnASEQDL0CCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUHtz4CAAGotAABHDaUBIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGnASEQDL0CCyAAQQA2AgAgEEEBaiEBQREhEAyiAQsCQCAEIAJHDQBBqAEhEAy8AgsgAiAEayAAKAIAIgFqIRQgBCABa0ECaiEQAkADQCAELQAAIAFBws+AgABqLQAARw2kASABQQJGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBqAEhEAy8AgsgAEEANgIAIBBBAWohAUEsIRAMoQELAkAgBCACRw0AQakBIRAMuwILIAIgBGsgACgCACIBaiEUIAQgAWtBBGohEAJAA0AgBC0AACABQcXPgIAAai0AAEcNowEgAUEERg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQakBIRAMuwILIABBADYCACAQQQFqIQFBKyEQDKABCwJAIAQgAkcNAEGqASEQDLoCCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUHKz4CAAGotAABHDaIBIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGqASEQDLoCCyAAQQA2AgAgEEEBaiEBQRQhEAyfAQsCQCAEIAJHDQBBqwEhEAy5AgsCQAJAAkACQCAELQAAQb5/ag4PAAECpAGkAaQBpAGkAaQBpAGkAaQBpAGkAQOkAQsgBEEBaiEEQZMBIRAMogILIARBAWohBEGUASEQDKECCyAEQQFqIQRBlQEhEAygAgsgBEEBaiEEQZYBIRAMnwILAkAgBCACRw0AQawBIRAMuAILIAQtAABBxQBHDZ8BIARBAWohBAzgAQsCQCAEIAJHDQBBrQEhEAy3AgsgAiAEayAAKAIAIgFqIRQgBCABa0ECaiEQAkADQCAELQAAIAFBzc+AgABqLQAARw2fASABQQJGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBrQEhEAy3AgsgAEEANgIAIBBBAWohAUEOIRAMnAELAkAgBCACRw0AQa4BIRAMtgILIAQtAABB0ABHDZ0BIARBAWohAUElIRAMmwELAkAgBCACRw0AQa8BIRAMtQILIAIgBGsgACgCACIBaiEUIAQgAWtBCGohEAJAA0AgBC0AACABQdDPgIAAai0AAEcNnQEgAUEIRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQa8BIRAMtQILIABBADYCACAQQQFqIQFBKiEQDJoBCwJAIAQgAkcNAEGwASEQDLQCCwJAAkAgBC0AAEGrf2oOCwCdAZ0BnQGdAZ0BnQGdAZ0BnQEBnQELIARBAWohBEGaASEQDJsCCyAEQQFqIQRBmwEhEAyaAgsCQCAEIAJHDQBBsQEhEAyzAgsCQAJAIAQtAABBv39qDhQAnAGcAZwBnAGcAZwBnAGcAZwBnAGcAZwBnAGcAZwBnAGcAZwBAZwBCyAEQQFqIQRBmQEhEAyaAgsgBEEBaiEEQZwBIRAMmQILAkAgBCACRw0AQbIBIRAMsgILIAIgBGsgACgCACIBaiEUIAQgAWtBA2ohEAJAA0AgBC0AACABQdnPgIAAai0AAEcNmgEgAUEDRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQbIBIRAMsgILIABBADYCACAQQQFqIQFBISEQDJcBCwJAIAQgAkcNAEGzASEQDLECCyACIARrIAAoAgAiAWohFCAEIAFrQQZqIRACQANAIAQtAAAgAUHdz4CAAGotAABHDZkBIAFBBkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGzASEQDLECCyAAQQA2AgAgEEEBaiEBQRohEAyWAQsCQCAEIAJHDQBBtAEhEAywAgsCQAJAAkAgBC0AAEG7f2oOEQCaAZoBmgGaAZoBmgGaAZoBmgEBmgGaAZoBmgGaAQKaAQsgBEEBaiEEQZ0BIRAMmAILIARBAWohBEGeASEQDJcCCyAEQQFqIQRBnwEhEAyWAgsCQCAEIAJHDQBBtQEhEAyvAgsgAiAEayAAKAIAIgFqIRQgBCABa0EFaiEQAkADQCAELQAAIAFB5M+AgABqLQAARw2XASABQQVGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBtQEhEAyvAgsgAEEANgIAIBBBAWohAUEoIRAMlAELAkAgBCACRw0AQbYBIRAMrgILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQerPgIAAai0AAEcNlgEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQbYBIRAMrgILIABBADYCACAQQQFqIQFBByEQDJMBCwJAIAQgAkcNAEG3ASEQDK0CCwJAAkAgBC0AAEG7f2oODgCWAZYBlgGWAZYBlgGWAZYBlgGWAZYBlgEBlgELIARBAWohBEGhASEQDJQCCyAEQQFqIQRBogEhEAyTAgsCQCAEIAJHDQBBuAEhEAysAgsgAiAEayAAKAIAIgFqIRQgBCABa0ECaiEQAkADQCAELQAAIAFB7c+AgABqLQAARw2UASABQQJGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBuAEhEAysAgsgAEEANgIAIBBBAWohAUESIRAMkQELAkAgBCACRw0AQbkBIRAMqwILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQfDPgIAAai0AAEcNkwEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQbkBIRAMqwILIABBADYCACAQQQFqIQFBICEQDJABCwJAIAQgAkcNAEG6ASEQDKoCCyACIARrIAAoAgAiAWohFCAEIAFrQQFqIRACQANAIAQtAAAgAUHyz4CAAGotAABHDZIBIAFBAUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEG6ASEQDKoCCyAAQQA2AgAgEEEBaiEBQQ8hEAyPAQsCQCAEIAJHDQBBuwEhEAypAgsCQAJAIAQtAABBt39qDgcAkgGSAZIBkgGSAQGSAQsgBEEBaiEEQaUBIRAMkAILIARBAWohBEGmASEQDI8CCwJAIAQgAkcNAEG8ASEQDKgCCyACIARrIAAoAgAiAWohFCAEIAFrQQdqIRACQANAIAQtAAAgAUH0z4CAAGotAABHDZABIAFBB0YNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEG8ASEQDKgCCyAAQQA2AgAgEEEBaiEBQRshEAyNAQsCQCAEIAJHDQBBvQEhEAynAgsCQAJAAkAgBC0AAEG+f2oOEgCRAZEBkQGRAZEBkQGRAZEBkQEBkQGRAZEBkQGRAZEBApEBCyAEQQFqIQRBpAEhEAyPAgsgBEEBaiEEQacBIRAMjgILIARBAWohBEGoASEQDI0CCwJAIAQgAkcNAEG+ASEQDKYCCyAELQAAQc4ARw2NASAEQQFqIQQMzwELAkAgBCACRw0AQb8BIRAMpQILAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBC0AAEG/f2oOFQABAgOcAQQFBpwBnAGcAQcICQoLnAEMDQ4PnAELIARBAWohAUHoACEQDJoCCyAEQQFqIQFB6QAhEAyZAgsgBEEBaiEBQe4AIRAMmAILIARBAWohAUHyACEQDJcCCyAEQQFqIQFB8wAhEAyWAgsgBEEBaiEBQfYAIRAMlQILIARBAWohAUH3ACEQDJQCCyAEQQFqIQFB+gAhEAyTAgsgBEEBaiEEQYMBIRAMkgILIARBAWohBEGEASEQDJECCyAEQQFqIQRBhQEhEAyQAgsgBEEBaiEEQZIBIRAMjwILIARBAWohBEGYASEQDI4CCyAEQQFqIQRBoAEhEAyNAgsgBEEBaiEEQaMBIRAMjAILIARBAWohBEGqASEQDIsCCwJAIAQgAkYNACAAQZCAgIAANgIIIAAgBDYCBEGrASEQDIsCC0HAASEQDKMCCyAAIAUgAhCqgICAACIBDYsBIAUhAQxcCwJAIAYgAkYNACAGQQFqIQUMjQELQcIBIRAMoQILA0ACQCAQLQAAQXZqDgSMAQAAjwEACyAQQQFqIhAgAkcNAAtBwwEhEAygAgsCQCAHIAJGDQAgAEGRgICAADYCCCAAIAc2AgQgByEBQQEhEAyHAgtBxAEhEAyfAgsCQCAHIAJHDQBBxQEhEAyfAgsCQAJAIActAABBdmoOBAHOAc4BAM4BCyAHQQFqIQYMjQELIAdBAWohBQyJAQsCQCAHIAJHDQBBxgEhEAyeAgsCQAJAIActAABBdmoOFwGPAY8BAY8BjwGPAY8BjwGPAY8BjwGPAY8BjwGPAY8BjwGPAY8BjwGPAQCPAQsgB0EBaiEHC0GwASEQDIQCCwJAIAggAkcNAEHIASEQDJ0CCyAILQAAQSBHDY0BIABBADsBMiAIQQFqIQFBswEhEAyDAgsgASEXAkADQCAXIgcgAkYNASAHLQAAQVBqQf8BcSIQQQpPDcwBAkAgAC8BMiIUQZkzSw0AIAAgFEEKbCIUOwEyIBBB//8DcyAUQf7/A3FJDQAgB0EBaiEXIAAgFCAQaiIQOwEyIBBB//8DcUHoB0kNAQsLQQAhECAAQQA2AhwgAEHBiYCAADYCECAAQQ02AgwgACAHQQFqNgIUDJwCC0HHASEQDJsCCyAAIAggAhCugICAACIQRQ3KASAQQRVHDYwBIABByAE2AhwgACAINgIUIABByZeAgAA2AhAgAEEVNgIMQQAhEAyaAgsCQCAJIAJHDQBBzAEhEAyaAgtBACEUQQEhF0EBIRZBACEQAkACQAJAAkACQAJAAkACQAJAIAktAABBUGoOCpYBlQEAAQIDBAUGCJcBC0ECIRAMBgtBAyEQDAULQQQhEAwEC0EFIRAMAwtBBiEQDAILQQchEAwBC0EIIRALQQAhF0EAIRZBACEUDI4BC0EJIRBBASEUQQAhF0EAIRYMjQELAkAgCiACRw0AQc4BIRAMmQILIAotAABBLkcNjgEgCkEBaiEJDMoBCyALIAJHDY4BQdABIRAMlwILAkAgCyACRg0AIABBjoCAgAA2AgggACALNgIEQbcBIRAM/gELQdEBIRAMlgILAkAgBCACRw0AQdIBIRAMlgILIAIgBGsgACgCACIQaiEUIAQgEGtBBGohCwNAIAQtAAAgEEH8z4CAAGotAABHDY4BIBBBBEYN6QEgEEEBaiEQIARBAWoiBCACRw0ACyAAIBQ2AgBB0gEhEAyVAgsgACAMIAIQrICAgAAiAQ2NASAMIQEMuAELAkAgBCACRw0AQdQBIRAMlAILIAIgBGsgACgCACIQaiEUIAQgEGtBAWohDANAIAQtAAAgEEGB0ICAAGotAABHDY8BIBBBAUYNjgEgEEEBaiEQIARBAWoiBCACRw0ACyAAIBQ2AgBB1AEhEAyTAgsCQCAEIAJHDQBB1gEhEAyTAgsgAiAEayAAKAIAIhBqIRQgBCAQa0ECaiELA0AgBC0AACAQQYPQgIAAai0AAEcNjgEgEEECRg2QASAQQQFqIRAgBEEBaiIEIAJHDQALIAAgFDYCAEHWASEQDJICCwJAIAQgAkcNAEHXASEQDJICCwJAAkAgBC0AAEG7f2oOEACPAY8BjwGPAY8BjwGPAY8BjwGPAY8BjwGPAY8BAY8BCyAEQQFqIQRBuwEhEAz5AQsgBEEBaiEEQbwBIRAM+AELAkAgBCACRw0AQdgBIRAMkQILIAQtAABByABHDYwBIARBAWohBAzEAQsCQCAEIAJGDQAgAEGQgICAADYCCCAAIAQ2AgRBvgEhEAz3AQtB2QEhEAyPAgsCQCAEIAJHDQBB2gEhEAyPAgsgBC0AAEHIAEYNwwEgAEEBOgAoDLkBCyAAQQI6AC8gACAEIAIQpoCAgAAiEA2NAUHCASEQDPQBCyAALQAoQX9qDgK3AbkBuAELA0ACQCAELQAAQXZqDgQAjgGOAQCOAQsgBEEBaiIEIAJHDQALQd0BIRAMiwILIABBADoALyAALQAtQQRxRQ2EAgsgAEEAOgAvIABBAToANCABIQEMjAELIBBBFUYN2gEgAEEANgIcIAAgATYCFCAAQaeOgIAANgIQIABBEjYCDEEAIRAMiAILAkAgACAQIAIQtICAgAAiBA0AIBAhAQyBAgsCQCAEQRVHDQAgAEEDNgIcIAAgEDYCFCAAQbCYgIAANgIQIABBFTYCDEEAIRAMiAILIABBADYCHCAAIBA2AhQgAEGnjoCAADYCECAAQRI2AgxBACEQDIcCCyAQQRVGDdYBIABBADYCHCAAIAE2AhQgAEHajYCAADYCECAAQRQ2AgxBACEQDIYCCyAAKAIEIRcgAEEANgIEIBAgEadqIhYhASAAIBcgECAWIBQbIhAQtYCAgAAiFEUNjQEgAEEHNgIcIAAgEDYCFCAAIBQ2AgxBACEQDIUCCyAAIAAvATBBgAFyOwEwIAEhAQtBKiEQDOoBCyAQQRVGDdEBIABBADYCHCAAIAE2AhQgAEGDjICAADYCECAAQRM2AgxBACEQDIICCyAQQRVGDc8BIABBADYCHCAAIAE2AhQgAEGaj4CAADYCECAAQSI2AgxBACEQDIECCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQt4CAgAAiEA0AIAFBAWohAQyNAQsgAEEMNgIcIAAgEDYCDCAAIAFBAWo2AhRBACEQDIACCyAQQRVGDcwBIABBADYCHCAAIAE2AhQgAEGaj4CAADYCECAAQSI2AgxBACEQDP8BCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQt4CAgAAiEA0AIAFBAWohAQyMAQsgAEENNgIcIAAgEDYCDCAAIAFBAWo2AhRBACEQDP4BCyAQQRVGDckBIABBADYCHCAAIAE2AhQgAEHGjICAADYCECAAQSM2AgxBACEQDP0BCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQuYCAgAAiEA0AIAFBAWohAQyLAQsgAEEONgIcIAAgEDYCDCAAIAFBAWo2AhRBACEQDPwBCyAAQQA2AhwgACABNgIUIABBwJWAgAA2AhAgAEECNgIMQQAhEAz7AQsgEEEVRg3FASAAQQA2AhwgACABNgIUIABBxoyAgAA2AhAgAEEjNgIMQQAhEAz6AQsgAEEQNgIcIAAgATYCFCAAIBA2AgxBACEQDPkBCyAAKAIEIQQgAEEANgIEAkAgACAEIAEQuYCAgAAiBA0AIAFBAWohAQzxAQsgAEERNgIcIAAgBDYCDCAAIAFBAWo2AhRBACEQDPgBCyAQQRVGDcEBIABBADYCHCAAIAE2AhQgAEHGjICAADYCECAAQSM2AgxBACEQDPcBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQuYCAgAAiEA0AIAFBAWohAQyIAQsgAEETNgIcIAAgEDYCDCAAIAFBAWo2AhRBACEQDPYBCyAAKAIEIQQgAEEANgIEAkAgACAEIAEQuYCAgAAiBA0AIAFBAWohAQztAQsgAEEUNgIcIAAgBDYCDCAAIAFBAWo2AhRBACEQDPUBCyAQQRVGDb0BIABBADYCHCAAIAE2AhQgAEGaj4CAADYCECAAQSI2AgxBACEQDPQBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQt4CAgAAiEA0AIAFBAWohAQyGAQsgAEEWNgIcIAAgEDYCDCAAIAFBAWo2AhRBACEQDPMBCyAAKAIEIQQgAEEANgIEAkAgACAEIAEQt4CAgAAiBA0AIAFBAWohAQzpAQsgAEEXNgIcIAAgBDYCDCAAIAFBAWo2AhRBACEQDPIBCyAAQQA2AhwgACABNgIUIABBzZOAgAA2AhAgAEEMNgIMQQAhEAzxAQtCASERCyAQQQFqIQECQCAAKQMgIhJC//////////8PVg0AIAAgEkIEhiARhDcDICABIQEMhAELIABBADYCHCAAIAE2AhQgAEGtiYCAADYCECAAQQw2AgxBACEQDO8BCyAAQQA2AhwgACAQNgIUIABBzZOAgAA2AhAgAEEMNgIMQQAhEAzuAQsgACgCBCEXIABBADYCBCAQIBGnaiIWIQEgACAXIBAgFiAUGyIQELWAgIAAIhRFDXMgAEEFNgIcIAAgEDYCFCAAIBQ2AgxBACEQDO0BCyAAQQA2AhwgACAQNgIUIABBqpyAgAA2AhAgAEEPNgIMQQAhEAzsAQsgACAQIAIQtICAgAAiAQ0BIBAhAQtBDiEQDNEBCwJAIAFBFUcNACAAQQI2AhwgACAQNgIUIABBsJiAgAA2AhAgAEEVNgIMQQAhEAzqAQsgAEEANgIcIAAgEDYCFCAAQaeOgIAANgIQIABBEjYCDEEAIRAM6QELIAFBAWohEAJAIAAvATAiAUGAAXFFDQACQCAAIBAgAhC7gICAACIBDQAgECEBDHALIAFBFUcNugEgAEEFNgIcIAAgEDYCFCAAQfmXgIAANgIQIABBFTYCDEEAIRAM6QELAkAgAUGgBHFBoARHDQAgAC0ALUECcQ0AIABBADYCHCAAIBA2AhQgAEGWk4CAADYCECAAQQQ2AgxBACEQDOkBCyAAIBAgAhC9gICAABogECEBAkACQAJAAkACQCAAIBAgAhCzgICAAA4WAgEABAQEBAQEBAQEBAQEBAQEBAQEAwQLIABBAToALgsgACAALwEwQcAAcjsBMCAQIQELQSYhEAzRAQsgAEEjNgIcIAAgEDYCFCAAQaWWgIAANgIQIABBFTYCDEEAIRAM6QELIABBADYCHCAAIBA2AhQgAEHVi4CAADYCECAAQRE2AgxBACEQDOgBCyAALQAtQQFxRQ0BQcMBIRAMzgELAkAgDSACRg0AA0ACQCANLQAAQSBGDQAgDSEBDMQBCyANQQFqIg0gAkcNAAtBJSEQDOcBC0ElIRAM5gELIAAoAgQhBCAAQQA2AgQgACAEIA0Qr4CAgAAiBEUNrQEgAEEmNgIcIAAgBDYCDCAAIA1BAWo2AhRBACEQDOUBCyAQQRVGDasBIABBADYCHCAAIAE2AhQgAEH9jYCAADYCECAAQR02AgxBACEQDOQBCyAAQSc2AhwgACABNgIUIAAgEDYCDEEAIRAM4wELIBAhAUEBIRQCQAJAAkACQAJAAkACQCAALQAsQX5qDgcGBQUDAQIABQsgACAALwEwQQhyOwEwDAMLQQIhFAwBC0EEIRQLIABBAToALCAAIAAvATAgFHI7ATALIBAhAQtBKyEQDMoBCyAAQQA2AhwgACAQNgIUIABBq5KAgAA2AhAgAEELNgIMQQAhEAziAQsgAEEANgIcIAAgATYCFCAAQeGPgIAANgIQIABBCjYCDEEAIRAM4QELIABBADoALCAQIQEMvQELIBAhAUEBIRQCQAJAAkACQAJAIAAtACxBe2oOBAMBAgAFCyAAIAAvATBBCHI7ATAMAwtBAiEUDAELQQQhFAsgAEEBOgAsIAAgAC8BMCAUcjsBMAsgECEBC0EpIRAMxQELIABBADYCHCAAIAE2AhQgAEHwlICAADYCECAAQQM2AgxBACEQDN0BCwJAIA4tAABBDUcNACAAKAIEIQEgAEEANgIEAkAgACABIA4QsYCAgAAiAQ0AIA5BAWohAQx1CyAAQSw2AhwgACABNgIMIAAgDkEBajYCFEEAIRAM3QELIAAtAC1BAXFFDQFBxAEhEAzDAQsCQCAOIAJHDQBBLSEQDNwBCwJAAkADQAJAIA4tAABBdmoOBAIAAAMACyAOQQFqIg4gAkcNAAtBLSEQDN0BCyAAKAIEIQEgAEEANgIEAkAgACABIA4QsYCAgAAiAQ0AIA4hAQx0CyAAQSw2AhwgACAONgIUIAAgATYCDEEAIRAM3AELIAAoAgQhASAAQQA2AgQCQCAAIAEgDhCxgICAACIBDQAgDkEBaiEBDHMLIABBLDYCHCAAIAE2AgwgACAOQQFqNgIUQQAhEAzbAQsgACgCBCEEIABBADYCBCAAIAQgDhCxgICAACIEDaABIA4hAQzOAQsgEEEsRw0BIAFBAWohEEEBIQECQAJAAkACQAJAIAAtACxBe2oOBAMBAgQACyAQIQEMBAtBAiEBDAELQQQhAQsgAEEBOgAsIAAgAC8BMCABcjsBMCAQIQEMAQsgACAALwEwQQhyOwEwIBAhAQtBOSEQDL8BCyAAQQA6ACwgASEBC0E0IRAMvQELIAAgAC8BMEEgcjsBMCABIQEMAgsgACgCBCEEIABBADYCBAJAIAAgBCABELGAgIAAIgQNACABIQEMxwELIABBNzYCHCAAIAE2AhQgACAENgIMQQAhEAzUAQsgAEEIOgAsIAEhAQtBMCEQDLkBCwJAIAAtAChBAUYNACABIQEMBAsgAC0ALUEIcUUNkwEgASEBDAMLIAAtADBBIHENlAFBxQEhEAy3AQsCQCAPIAJGDQACQANAAkAgDy0AAEFQaiIBQf8BcUEKSQ0AIA8hAUE1IRAMugELIAApAyAiEUKZs+bMmbPmzBlWDQEgACARQgp+IhE3AyAgESABrUL/AYMiEkJ/hVYNASAAIBEgEnw3AyAgD0EBaiIPIAJHDQALQTkhEAzRAQsgACgCBCECIABBADYCBCAAIAIgD0EBaiIEELGAgIAAIgINlQEgBCEBDMMBC0E5IRAMzwELAkAgAC8BMCIBQQhxRQ0AIAAtAChBAUcNACAALQAtQQhxRQ2QAQsgACABQff7A3FBgARyOwEwIA8hAQtBNyEQDLQBCyAAIAAvATBBEHI7ATAMqwELIBBBFUYNiwEgAEEANgIcIAAgATYCFCAAQfCOgIAANgIQIABBHDYCDEEAIRAMywELIABBwwA2AhwgACABNgIMIAAgDUEBajYCFEEAIRAMygELAkAgAS0AAEE6Rw0AIAAoAgQhECAAQQA2AgQCQCAAIBAgARCvgICAACIQDQAgAUEBaiEBDGMLIABBwwA2AhwgACAQNgIMIAAgAUEBajYCFEEAIRAMygELIABBADYCHCAAIAE2AhQgAEGxkYCAADYCECAAQQo2AgxBACEQDMkBCyAAQQA2AhwgACABNgIUIABBoJmAgAA2AhAgAEEeNgIMQQAhEAzIAQsgAEEANgIACyAAQYASOwEqIAAgF0EBaiIBIAIQqICAgAAiEA0BIAEhAQtBxwAhEAysAQsgEEEVRw2DASAAQdEANgIcIAAgATYCFCAAQeOXgIAANgIQIABBFTYCDEEAIRAMxAELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDF4LIABB0gA2AhwgACABNgIUIAAgEDYCDEEAIRAMwwELIABBADYCHCAAIBQ2AhQgAEHBqICAADYCECAAQQc2AgwgAEEANgIAQQAhEAzCAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMXQsgAEHTADYCHCAAIAE2AhQgACAQNgIMQQAhEAzBAQtBACEQIABBADYCHCAAIAE2AhQgAEGAkYCAADYCECAAQQk2AgwMwAELIBBBFUYNfSAAQQA2AhwgACABNgIUIABBlI2AgAA2AhAgAEEhNgIMQQAhEAy/AQtBASEWQQAhF0EAIRRBASEQCyAAIBA6ACsgAUEBaiEBAkACQCAALQAtQRBxDQACQAJAAkAgAC0AKg4DAQACBAsgFkUNAwwCCyAUDQEMAgsgF0UNAQsgACgCBCEQIABBADYCBAJAIAAgECABEK2AgIAAIhANACABIQEMXAsgAEHYADYCHCAAIAE2AhQgACAQNgIMQQAhEAy+AQsgACgCBCEEIABBADYCBAJAIAAgBCABEK2AgIAAIgQNACABIQEMrQELIABB2QA2AhwgACABNgIUIAAgBDYCDEEAIRAMvQELIAAoAgQhBCAAQQA2AgQCQCAAIAQgARCtgICAACIEDQAgASEBDKsBCyAAQdoANgIcIAAgATYCFCAAIAQ2AgxBACEQDLwBCyAAKAIEIQQgAEEANgIEAkAgACAEIAEQrYCAgAAiBA0AIAEhAQypAQsgAEHcADYCHCAAIAE2AhQgACAENgIMQQAhEAy7AQsCQCABLQAAQVBqIhBB/wFxQQpPDQAgACAQOgAqIAFBAWohAUHPACEQDKIBCyAAKAIEIQQgAEEANgIEAkAgACAEIAEQrYCAgAAiBA0AIAEhAQynAQsgAEHeADYCHCAAIAE2AhQgACAENgIMQQAhEAy6AQsgAEEANgIAIBdBAWohAQJAIAAtAClBI08NACABIQEMWQsgAEEANgIcIAAgATYCFCAAQdOJgIAANgIQIABBCDYCDEEAIRAMuQELIABBADYCAAtBACEQIABBADYCHCAAIAE2AhQgAEGQs4CAADYCECAAQQg2AgwMtwELIABBADYCACAXQQFqIQECQCAALQApQSFHDQAgASEBDFYLIABBADYCHCAAIAE2AhQgAEGbioCAADYCECAAQQg2AgxBACEQDLYBCyAAQQA2AgAgF0EBaiEBAkAgAC0AKSIQQV1qQQtPDQAgASEBDFULAkAgEEEGSw0AQQEgEHRBygBxRQ0AIAEhAQxVC0EAIRAgAEEANgIcIAAgATYCFCAAQfeJgIAANgIQIABBCDYCDAy1AQsgEEEVRg1xIABBADYCHCAAIAE2AhQgAEG5jYCAADYCECAAQRo2AgxBACEQDLQBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxUCyAAQeUANgIcIAAgATYCFCAAIBA2AgxBACEQDLMBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxNCyAAQdIANgIcIAAgATYCFCAAIBA2AgxBACEQDLIBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxNCyAAQdMANgIcIAAgATYCFCAAIBA2AgxBACEQDLEBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxRCyAAQeUANgIcIAAgATYCFCAAIBA2AgxBACEQDLABCyAAQQA2AhwgACABNgIUIABBxoqAgAA2AhAgAEEHNgIMQQAhEAyvAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHSADYCHCAAIAE2AhQgACAQNgIMQQAhEAyuAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHTADYCHCAAIAE2AhQgACAQNgIMQQAhEAytAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMTQsgAEHlADYCHCAAIAE2AhQgACAQNgIMQQAhEAysAQsgAEEANgIcIAAgATYCFCAAQdyIgIAANgIQIABBBzYCDEEAIRAMqwELIBBBP0cNASABQQFqIQELQQUhEAyQAQtBACEQIABBADYCHCAAIAE2AhQgAEH9koCAADYCECAAQQc2AgwMqAELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0gA2AhwgACABNgIUIAAgEDYCDEEAIRAMpwELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0wA2AhwgACABNgIUIAAgEDYCDEEAIRAMpgELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEYLIABB5QA2AhwgACABNgIUIAAgEDYCDEEAIRAMpQELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0gA2AhwgACAUNgIUIAAgATYCDEEAIRAMpAELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0wA2AhwgACAUNgIUIAAgATYCDEEAIRAMowELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDEMLIABB5QA2AhwgACAUNgIUIAAgATYCDEEAIRAMogELIABBADYCHCAAIBQ2AhQgAEHDj4CAADYCECAAQQc2AgxBACEQDKEBCyAAQQA2AhwgACABNgIUIABBw4+AgAA2AhAgAEEHNgIMQQAhEAygAQtBACEQIABBADYCHCAAIBQ2AhQgAEGMnICAADYCECAAQQc2AgwMnwELIABBADYCHCAAIBQ2AhQgAEGMnICAADYCECAAQQc2AgxBACEQDJ4BCyAAQQA2AhwgACAUNgIUIABB/pGAgAA2AhAgAEEHNgIMQQAhEAydAQsgAEEANgIcIAAgATYCFCAAQY6bgIAANgIQIABBBjYCDEEAIRAMnAELIBBBFUYNVyAAQQA2AhwgACABNgIUIABBzI6AgAA2AhAgAEEgNgIMQQAhEAybAQsgAEEANgIAIBBBAWohAUEkIRALIAAgEDoAKSAAKAIEIRAgAEEANgIEIAAgECABEKuAgIAAIhANVCABIQEMPgsgAEEANgIAC0EAIRAgAEEANgIcIAAgBDYCFCAAQfGbgIAANgIQIABBBjYCDAyXAQsgAUEVRg1QIABBADYCHCAAIAU2AhQgAEHwjICAADYCECAAQRs2AgxBACEQDJYBCyAAKAIEIQUgAEEANgIEIAAgBSAQEKmAgIAAIgUNASAQQQFqIQULQa0BIRAMewsgAEHBATYCHCAAIAU2AgwgACAQQQFqNgIUQQAhEAyTAQsgACgCBCEGIABBADYCBCAAIAYgEBCpgICAACIGDQEgEEEBaiEGC0GuASEQDHgLIABBwgE2AhwgACAGNgIMIAAgEEEBajYCFEEAIRAMkAELIABBADYCHCAAIAc2AhQgAEGXi4CAADYCECAAQQ02AgxBACEQDI8BCyAAQQA2AhwgACAINgIUIABB45CAgAA2AhAgAEEJNgIMQQAhEAyOAQsgAEEANgIcIAAgCDYCFCAAQZSNgIAANgIQIABBITYCDEEAIRAMjQELQQEhFkEAIRdBACEUQQEhEAsgACAQOgArIAlBAWohCAJAAkAgAC0ALUEQcQ0AAkACQAJAIAAtACoOAwEAAgQLIBZFDQMMAgsgFA0BDAILIBdFDQELIAAoAgQhECAAQQA2AgQgACAQIAgQrYCAgAAiEEUNPSAAQckBNgIcIAAgCDYCFCAAIBA2AgxBACEQDIwBCyAAKAIEIQQgAEEANgIEIAAgBCAIEK2AgIAAIgRFDXYgAEHKATYCHCAAIAg2AhQgACAENgIMQQAhEAyLAQsgACgCBCEEIABBADYCBCAAIAQgCRCtgICAACIERQ10IABBywE2AhwgACAJNgIUIAAgBDYCDEEAIRAMigELIAAoAgQhBCAAQQA2AgQgACAEIAoQrYCAgAAiBEUNciAAQc0BNgIcIAAgCjYCFCAAIAQ2AgxBACEQDIkBCwJAIAstAABBUGoiEEH/AXFBCk8NACAAIBA6ACogC0EBaiEKQbYBIRAMcAsgACgCBCEEIABBADYCBCAAIAQgCxCtgICAACIERQ1wIABBzwE2AhwgACALNgIUIAAgBDYCDEEAIRAMiAELIABBADYCHCAAIAQ2AhQgAEGQs4CAADYCECAAQQg2AgwgAEEANgIAQQAhEAyHAQsgAUEVRg0/IABBADYCHCAAIAw2AhQgAEHMjoCAADYCECAAQSA2AgxBACEQDIYBCyAAQYEEOwEoIAAoAgQhECAAQgA3AwAgACAQIAxBAWoiDBCrgICAACIQRQ04IABB0wE2AhwgACAMNgIUIAAgEDYCDEEAIRAMhQELIABBADYCAAtBACEQIABBADYCHCAAIAQ2AhQgAEHYm4CAADYCECAAQQg2AgwMgwELIAAoAgQhECAAQgA3AwAgACAQIAtBAWoiCxCrgICAACIQDQFBxgEhEAxpCyAAQQI6ACgMVQsgAEHVATYCHCAAIAs2AhQgACAQNgIMQQAhEAyAAQsgEEEVRg03IABBADYCHCAAIAQ2AhQgAEGkjICAADYCECAAQRA2AgxBACEQDH8LIAAtADRBAUcNNCAAIAQgAhC8gICAACIQRQ00IBBBFUcNNSAAQdwBNgIcIAAgBDYCFCAAQdWWgIAANgIQIABBFTYCDEEAIRAMfgtBACEQIABBADYCHCAAQa+LgIAANgIQIABBAjYCDCAAIBRBAWo2AhQMfQtBACEQDGMLQQIhEAxiC0ENIRAMYQtBDyEQDGALQSUhEAxfC0ETIRAMXgtBFSEQDF0LQRYhEAxcC0EXIRAMWwtBGCEQDFoLQRkhEAxZC0EaIRAMWAtBGyEQDFcLQRwhEAxWC0EdIRAMVQtBHyEQDFQLQSEhEAxTC0EjIRAMUgtBxgAhEAxRC0EuIRAMUAtBLyEQDE8LQTshEAxOC0E9IRAMTQtByAAhEAxMC0HJACEQDEsLQcsAIRAMSgtBzAAhEAxJC0HOACEQDEgLQdEAIRAMRwtB1QAhEAxGC0HYACEQDEULQdkAIRAMRAtB2wAhEAxDC0HkACEQDEILQeUAIRAMQQtB8QAhEAxAC0H0ACEQDD8LQY0BIRAMPgtBlwEhEAw9C0GpASEQDDwLQawBIRAMOwtBwAEhEAw6C0G5ASEQDDkLQa8BIRAMOAtBsQEhEAw3C0GyASEQDDYLQbQBIRAMNQtBtQEhEAw0C0G6ASEQDDMLQb0BIRAMMgtBvwEhEAwxC0HBASEQDDALIABBADYCHCAAIAQ2AhQgAEHpi4CAADYCECAAQR82AgxBACEQDEgLIABB2wE2AhwgACAENgIUIABB+paAgAA2AhAgAEEVNgIMQQAhEAxHCyAAQfgANgIcIAAgDDYCFCAAQcqYgIAANgIQIABBFTYCDEEAIRAMRgsgAEHRADYCHCAAIAU2AhQgAEGwl4CAADYCECAAQRU2AgxBACEQDEULIABB+QA2AhwgACABNgIUIAAgEDYCDEEAIRAMRAsgAEH4ADYCHCAAIAE2AhQgAEHKmICAADYCECAAQRU2AgxBACEQDEMLIABB5AA2AhwgACABNgIUIABB45eAgAA2AhAgAEEVNgIMQQAhEAxCCyAAQdcANgIcIAAgATYCFCAAQcmXgIAANgIQIABBFTYCDEEAIRAMQQsgAEEANgIcIAAgATYCFCAAQbmNgIAANgIQIABBGjYCDEEAIRAMQAsgAEHCADYCHCAAIAE2AhQgAEHjmICAADYCECAAQRU2AgxBACEQDD8LIABBADYCBCAAIA8gDxCxgICAACIERQ0BIABBOjYCHCAAIAQ2AgwgACAPQQFqNgIUQQAhEAw+CyAAKAIEIQQgAEEANgIEAkAgACAEIAEQsYCAgAAiBEUNACAAQTs2AhwgACAENgIMIAAgAUEBajYCFEEAIRAMPgsgAUEBaiEBDC0LIA9BAWohAQwtCyAAQQA2AhwgACAPNgIUIABB5JKAgAA2AhAgAEEENgIMQQAhEAw7CyAAQTY2AhwgACAENgIUIAAgAjYCDEEAIRAMOgsgAEEuNgIcIAAgDjYCFCAAIAQ2AgxBACEQDDkLIABB0AA2AhwgACABNgIUIABBkZiAgAA2AhAgAEEVNgIMQQAhEAw4CyANQQFqIQEMLAsgAEEVNgIcIAAgATYCFCAAQYKZgIAANgIQIABBFTYCDEEAIRAMNgsgAEEbNgIcIAAgATYCFCAAQZGXgIAANgIQIABBFTYCDEEAIRAMNQsgAEEPNgIcIAAgATYCFCAAQZGXgIAANgIQIABBFTYCDEEAIRAMNAsgAEELNgIcIAAgATYCFCAAQZGXgIAANgIQIABBFTYCDEEAIRAMMwsgAEEaNgIcIAAgATYCFCAAQYKZgIAANgIQIABBFTYCDEEAIRAMMgsgAEELNgIcIAAgATYCFCAAQYKZgIAANgIQIABBFTYCDEEAIRAMMQsgAEEKNgIcIAAgATYCFCAAQeSWgIAANgIQIABBFTYCDEEAIRAMMAsgAEEeNgIcIAAgATYCFCAAQfmXgIAANgIQIABBFTYCDEEAIRAMLwsgAEEANgIcIAAgEDYCFCAAQdqNgIAANgIQIABBFDYCDEEAIRAMLgsgAEEENgIcIAAgATYCFCAAQbCYgIAANgIQIABBFTYCDEEAIRAMLQsgAEEANgIAIAtBAWohCwtBuAEhEAwSCyAAQQA2AgAgEEEBaiEBQfUAIRAMEQsgASEBAkAgAC0AKUEFRw0AQeMAIRAMEQtB4gAhEAwQC0EAIRAgAEEANgIcIABB5JGAgAA2AhAgAEEHNgIMIAAgFEEBajYCFAwoCyAAQQA2AgAgF0EBaiEBQcAAIRAMDgtBASEBCyAAIAE6ACwgAEEANgIAIBdBAWohAQtBKCEQDAsLIAEhAQtBOCEQDAkLAkAgASIPIAJGDQADQAJAIA8tAABBgL6AgABqLQAAIgFBAUYNACABQQJHDQMgD0EBaiEBDAQLIA9BAWoiDyACRw0AC0E+IRAMIgtBPiEQDCELIABBADoALCAPIQEMAQtBCyEQDAYLQTohEAwFCyABQQFqIQFBLSEQDAQLIAAgAToALCAAQQA2AgAgFkEBaiEBQQwhEAwDCyAAQQA2AgAgF0EBaiEBQQohEAwCCyAAQQA2AgALIABBADoALCANIQFBCSEQDAALC0EAIRAgAEEANgIcIAAgCzYCFCAAQc2QgIAANgIQIABBCTYCDAwXC0EAIRAgAEEANgIcIAAgCjYCFCAAQemKgIAANgIQIABBCTYCDAwWC0EAIRAgAEEANgIcIAAgCTYCFCAAQbeQgIAANgIQIABBCTYCDAwVC0EAIRAgAEEANgIcIAAgCDYCFCAAQZyRgIAANgIQIABBCTYCDAwUC0EAIRAgAEEANgIcIAAgATYCFCAAQc2QgIAANgIQIABBCTYCDAwTC0EAIRAgAEEANgIcIAAgATYCFCAAQemKgIAANgIQIABBCTYCDAwSC0EAIRAgAEEANgIcIAAgATYCFCAAQbeQgIAANgIQIABBCTYCDAwRC0EAIRAgAEEANgIcIAAgATYCFCAAQZyRgIAANgIQIABBCTYCDAwQC0EAIRAgAEEANgIcIAAgATYCFCAAQZeVgIAANgIQIABBDzYCDAwPC0EAIRAgAEEANgIcIAAgATYCFCAAQZeVgIAANgIQIABBDzYCDAwOC0EAIRAgAEEANgIcIAAgATYCFCAAQcCSgIAANgIQIABBCzYCDAwNC0EAIRAgAEEANgIcIAAgATYCFCAAQZWJgIAANgIQIABBCzYCDAwMC0EAIRAgAEEANgIcIAAgATYCFCAAQeGPgIAANgIQIABBCjYCDAwLC0EAIRAgAEEANgIcIAAgATYCFCAAQfuPgIAANgIQIABBCjYCDAwKC0EAIRAgAEEANgIcIAAgATYCFCAAQfGZgIAANgIQIABBAjYCDAwJC0EAIRAgAEEANgIcIAAgATYCFCAAQcSUgIAANgIQIABBAjYCDAwIC0EAIRAgAEEANgIcIAAgATYCFCAAQfKVgIAANgIQIABBAjYCDAwHCyAAQQI2AhwgACABNgIUIABBnJqAgAA2AhAgAEEWNgIMQQAhEAwGC0EBIRAMBQtB1AAhECABIgQgAkYNBCADQQhqIAAgBCACQdjCgIAAQQoQxYCAgAAgAygCDCEEIAMoAggOAwEEAgALEMqAgIAAAAsgAEEANgIcIABBtZqAgAA2AhAgAEEXNgIMIAAgBEEBajYCFEEAIRAMAgsgAEEANgIcIAAgBDYCFCAAQcqagIAANgIQIABBCTYCDEEAIRAMAQsCQCABIgQgAkcNAEEiIRAMAQsgAEGJgICAADYCCCAAIAQ2AgRBISEQCyADQRBqJICAgIAAIBALrwEBAn8gASgCACEGAkACQCACIANGDQAgBCAGaiEEIAYgA2ogAmshByACIAZBf3MgBWoiBmohBQNAAkAgAi0AACAELQAARg0AQQIhBAwDCwJAIAYNAEEAIQQgBSECDAMLIAZBf2ohBiAEQQFqIQQgAkEBaiICIANHDQALIAchBiADIQILIABBATYCACABIAY2AgAgACACNgIEDwsgAUEANgIAIAAgBDYCACAAIAI2AgQLCgAgABDHgICAAAvyNgELfyOAgICAAEEQayIBJICAgIAAAkBBACgCoNCAgAANAEEAEMuAgIAAQYDUhIAAayICQdkASQ0AQQAhAwJAQQAoAuDTgIAAIgQNAEEAQn83AuzTgIAAQQBCgICEgICAwAA3AuTTgIAAQQAgAUEIakFwcUHYqtWqBXMiBDYC4NOAgABBAEEANgL004CAAEEAQQA2AsTTgIAAC0EAIAI2AszTgIAAQQBBgNSEgAA2AsjTgIAAQQBBgNSEgAA2ApjQgIAAQQAgBDYCrNCAgABBAEF/NgKo0ICAAANAIANBxNCAgABqIANBuNCAgABqIgQ2AgAgBCADQbDQgIAAaiIFNgIAIANBvNCAgABqIAU2AgAgA0HM0ICAAGogA0HA0ICAAGoiBTYCACAFIAQ2AgAgA0HU0ICAAGogA0HI0ICAAGoiBDYCACAEIAU2AgAgA0HQ0ICAAGogBDYCACADQSBqIgNBgAJHDQALQYDUhIAAQXhBgNSEgABrQQ9xQQBBgNSEgABBCGpBD3EbIgNqIgRBBGogAkFIaiIFIANrIgNBAXI2AgBBAEEAKALw04CAADYCpNCAgABBACADNgKU0ICAAEEAIAQ2AqDQgIAAQYDUhIAAIAVqQTg2AgQLAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB7AFLDQACQEEAKAKI0ICAACIGQRAgAEETakFwcSAAQQtJGyICQQN2IgR2IgNBA3FFDQACQAJAIANBAXEgBHJBAXMiBUEDdCIEQbDQgIAAaiIDIARBuNCAgABqKAIAIgQoAggiAkcNAEEAIAZBfiAFd3E2AojQgIAADAELIAMgAjYCCCACIAM2AgwLIARBCGohAyAEIAVBA3QiBUEDcjYCBCAEIAVqIgQgBCgCBEEBcjYCBAwMCyACQQAoApDQgIAAIgdNDQECQCADRQ0AAkACQCADIAR0QQIgBHQiA0EAIANrcnEiA0EAIANrcUF/aiIDIANBDHZBEHEiA3YiBEEFdkEIcSIFIANyIAQgBXYiA0ECdkEEcSIEciADIAR2IgNBAXZBAnEiBHIgAyAEdiIDQQF2QQFxIgRyIAMgBHZqIgRBA3QiA0Gw0ICAAGoiBSADQbjQgIAAaigCACIDKAIIIgBHDQBBACAGQX4gBHdxIgY2AojQgIAADAELIAUgADYCCCAAIAU2AgwLIAMgAkEDcjYCBCADIARBA3QiBGogBCACayIFNgIAIAMgAmoiACAFQQFyNgIEAkAgB0UNACAHQXhxQbDQgIAAaiECQQAoApzQgIAAIQQCQAJAIAZBASAHQQN2dCIIcQ0AQQAgBiAIcjYCiNCAgAAgAiEIDAELIAIoAgghCAsgCCAENgIMIAIgBDYCCCAEIAI2AgwgBCAINgIICyADQQhqIQNBACAANgKc0ICAAEEAIAU2ApDQgIAADAwLQQAoAozQgIAAIglFDQEgCUEAIAlrcUF/aiIDIANBDHZBEHEiA3YiBEEFdkEIcSIFIANyIAQgBXYiA0ECdkEEcSIEciADIAR2IgNBAXZBAnEiBHIgAyAEdiIDQQF2QQFxIgRyIAMgBHZqQQJ0QbjSgIAAaigCACIAKAIEQXhxIAJrIQQgACEFAkADQAJAIAUoAhAiAw0AIAVBFGooAgAiA0UNAgsgAygCBEF4cSACayIFIAQgBSAESSIFGyEEIAMgACAFGyEAIAMhBQwACwsgACgCGCEKAkAgACgCDCIIIABGDQAgACgCCCIDQQAoApjQgIAASRogCCADNgIIIAMgCDYCDAwLCwJAIABBFGoiBSgCACIDDQAgACgCECIDRQ0DIABBEGohBQsDQCAFIQsgAyIIQRRqIgUoAgAiAw0AIAhBEGohBSAIKAIQIgMNAAsgC0EANgIADAoLQX8hAiAAQb9/Sw0AIABBE2oiA0FwcSECQQAoAozQgIAAIgdFDQBBACELAkAgAkGAAkkNAEEfIQsgAkH///8HSw0AIANBCHYiAyADQYD+P2pBEHZBCHEiA3QiBCAEQYDgH2pBEHZBBHEiBHQiBSAFQYCAD2pBEHZBAnEiBXRBD3YgAyAEciAFcmsiA0EBdCACIANBFWp2QQFxckEcaiELC0EAIAJrIQQCQAJAAkACQCALQQJ0QbjSgIAAaigCACIFDQBBACEDQQAhCAwBC0EAIQMgAkEAQRkgC0EBdmsgC0EfRht0IQBBACEIA0ACQCAFKAIEQXhxIAJrIgYgBE8NACAGIQQgBSEIIAYNAEEAIQQgBSEIIAUhAwwDCyADIAVBFGooAgAiBiAGIAUgAEEddkEEcWpBEGooAgAiBUYbIAMgBhshAyAAQQF0IQAgBQ0ACwsCQCADIAhyDQBBACEIQQIgC3QiA0EAIANrciAHcSIDRQ0DIANBACADa3FBf2oiAyADQQx2QRBxIgN2IgVBBXZBCHEiACADciAFIAB2IgNBAnZBBHEiBXIgAyAFdiIDQQF2QQJxIgVyIAMgBXYiA0EBdkEBcSIFciADIAV2akECdEG40oCAAGooAgAhAwsgA0UNAQsDQCADKAIEQXhxIAJrIgYgBEkhAAJAIAMoAhAiBQ0AIANBFGooAgAhBQsgBiAEIAAbIQQgAyAIIAAbIQggBSEDIAUNAAsLIAhFDQAgBEEAKAKQ0ICAACACa08NACAIKAIYIQsCQCAIKAIMIgAgCEYNACAIKAIIIgNBACgCmNCAgABJGiAAIAM2AgggAyAANgIMDAkLAkAgCEEUaiIFKAIAIgMNACAIKAIQIgNFDQMgCEEQaiEFCwNAIAUhBiADIgBBFGoiBSgCACIDDQAgAEEQaiEFIAAoAhAiAw0ACyAGQQA2AgAMCAsCQEEAKAKQ0ICAACIDIAJJDQBBACgCnNCAgAAhBAJAAkAgAyACayIFQRBJDQAgBCACaiIAIAVBAXI2AgRBACAFNgKQ0ICAAEEAIAA2ApzQgIAAIAQgA2ogBTYCACAEIAJBA3I2AgQMAQsgBCADQQNyNgIEIAQgA2oiAyADKAIEQQFyNgIEQQBBADYCnNCAgABBAEEANgKQ0ICAAAsgBEEIaiEDDAoLAkBBACgClNCAgAAiACACTQ0AQQAoAqDQgIAAIgMgAmoiBCAAIAJrIgVBAXI2AgRBACAFNgKU0ICAAEEAIAQ2AqDQgIAAIAMgAkEDcjYCBCADQQhqIQMMCgsCQAJAQQAoAuDTgIAARQ0AQQAoAujTgIAAIQQMAQtBAEJ/NwLs04CAAEEAQoCAhICAgMAANwLk04CAAEEAIAFBDGpBcHFB2KrVqgVzNgLg04CAAEEAQQA2AvTTgIAAQQBBADYCxNOAgABBgIAEIQQLQQAhAwJAIAQgAkHHAGoiB2oiBkEAIARrIgtxIgggAksNAEEAQTA2AvjTgIAADAoLAkBBACgCwNOAgAAiA0UNAAJAQQAoArjTgIAAIgQgCGoiBSAETQ0AIAUgA00NAQtBACEDQQBBMDYC+NOAgAAMCgtBAC0AxNOAgABBBHENBAJAAkACQEEAKAKg0ICAACIERQ0AQcjTgIAAIQMDQAJAIAMoAgAiBSAESw0AIAUgAygCBGogBEsNAwsgAygCCCIDDQALC0EAEMuAgIAAIgBBf0YNBSAIIQYCQEEAKALk04CAACIDQX9qIgQgAHFFDQAgCCAAayAEIABqQQAgA2txaiEGCyAGIAJNDQUgBkH+////B0sNBQJAQQAoAsDTgIAAIgNFDQBBACgCuNOAgAAiBCAGaiIFIARNDQYgBSADSw0GCyAGEMuAgIAAIgMgAEcNAQwHCyAGIABrIAtxIgZB/v///wdLDQQgBhDLgICAACIAIAMoAgAgAygCBGpGDQMgACEDCwJAIANBf0YNACACQcgAaiAGTQ0AAkAgByAGa0EAKALo04CAACIEakEAIARrcSIEQf7///8HTQ0AIAMhAAwHCwJAIAQQy4CAgABBf0YNACAEIAZqIQYgAyEADAcLQQAgBmsQy4CAgAAaDAQLIAMhACADQX9HDQUMAwtBACEIDAcLQQAhAAwFCyAAQX9HDQILQQBBACgCxNOAgABBBHI2AsTTgIAACyAIQf7///8HSw0BIAgQy4CAgAAhAEEAEMuAgIAAIQMgAEF/Rg0BIANBf0YNASAAIANPDQEgAyAAayIGIAJBOGpNDQELQQBBACgCuNOAgAAgBmoiAzYCuNOAgAACQCADQQAoArzTgIAATQ0AQQAgAzYCvNOAgAALAkACQAJAAkBBACgCoNCAgAAiBEUNAEHI04CAACEDA0AgACADKAIAIgUgAygCBCIIakYNAiADKAIIIgMNAAwDCwsCQAJAQQAoApjQgIAAIgNFDQAgACADTw0BC0EAIAA2ApjQgIAAC0EAIQNBACAGNgLM04CAAEEAIAA2AsjTgIAAQQBBfzYCqNCAgABBAEEAKALg04CAADYCrNCAgABBAEEANgLU04CAAANAIANBxNCAgABqIANBuNCAgABqIgQ2AgAgBCADQbDQgIAAaiIFNgIAIANBvNCAgABqIAU2AgAgA0HM0ICAAGogA0HA0ICAAGoiBTYCACAFIAQ2AgAgA0HU0ICAAGogA0HI0ICAAGoiBDYCACAEIAU2AgAgA0HQ0ICAAGogBDYCACADQSBqIgNBgAJHDQALIABBeCAAa0EPcUEAIABBCGpBD3EbIgNqIgQgBkFIaiIFIANrIgNBAXI2AgRBAEEAKALw04CAADYCpNCAgABBACADNgKU0ICAAEEAIAQ2AqDQgIAAIAAgBWpBODYCBAwCCyADLQAMQQhxDQAgBCAFSQ0AIAQgAE8NACAEQXggBGtBD3FBACAEQQhqQQ9xGyIFaiIAQQAoApTQgIAAIAZqIgsgBWsiBUEBcjYCBCADIAggBmo2AgRBAEEAKALw04CAADYCpNCAgABBACAFNgKU0ICAAEEAIAA2AqDQgIAAIAQgC2pBODYCBAwBCwJAIABBACgCmNCAgAAiCE8NAEEAIAA2ApjQgIAAIAAhCAsgACAGaiEFQcjTgIAAIQMCQAJAAkACQAJAAkACQANAIAMoAgAgBUYNASADKAIIIgMNAAwCCwsgAy0ADEEIcUUNAQtByNOAgAAhAwNAAkAgAygCACIFIARLDQAgBSADKAIEaiIFIARLDQMLIAMoAgghAwwACwsgAyAANgIAIAMgAygCBCAGajYCBCAAQXggAGtBD3FBACAAQQhqQQ9xG2oiCyACQQNyNgIEIAVBeCAFa0EPcUEAIAVBCGpBD3EbaiIGIAsgAmoiAmshAwJAIAYgBEcNAEEAIAI2AqDQgIAAQQBBACgClNCAgAAgA2oiAzYClNCAgAAgAiADQQFyNgIEDAMLAkAgBkEAKAKc0ICAAEcNAEEAIAI2ApzQgIAAQQBBACgCkNCAgAAgA2oiAzYCkNCAgAAgAiADQQFyNgIEIAIgA2ogAzYCAAwDCwJAIAYoAgQiBEEDcUEBRw0AIARBeHEhBwJAAkAgBEH/AUsNACAGKAIIIgUgBEEDdiIIQQN0QbDQgIAAaiIARhoCQCAGKAIMIgQgBUcNAEEAQQAoAojQgIAAQX4gCHdxNgKI0ICAAAwCCyAEIABGGiAEIAU2AgggBSAENgIMDAELIAYoAhghCQJAAkAgBigCDCIAIAZGDQAgBigCCCIEIAhJGiAAIAQ2AgggBCAANgIMDAELAkAgBkEUaiIEKAIAIgUNACAGQRBqIgQoAgAiBQ0AQQAhAAwBCwNAIAQhCCAFIgBBFGoiBCgCACIFDQAgAEEQaiEEIAAoAhAiBQ0ACyAIQQA2AgALIAlFDQACQAJAIAYgBigCHCIFQQJ0QbjSgIAAaiIEKAIARw0AIAQgADYCACAADQFBAEEAKAKM0ICAAEF+IAV3cTYCjNCAgAAMAgsgCUEQQRQgCSgCECAGRhtqIAA2AgAgAEUNAQsgACAJNgIYAkAgBigCECIERQ0AIAAgBDYCECAEIAA2AhgLIAYoAhQiBEUNACAAQRRqIAQ2AgAgBCAANgIYCyAHIANqIQMgBiAHaiIGKAIEIQQLIAYgBEF+cTYCBCACIANqIAM2AgAgAiADQQFyNgIEAkAgA0H/AUsNACADQXhxQbDQgIAAaiEEAkACQEEAKAKI0ICAACIFQQEgA0EDdnQiA3ENAEEAIAUgA3I2AojQgIAAIAQhAwwBCyAEKAIIIQMLIAMgAjYCDCAEIAI2AgggAiAENgIMIAIgAzYCCAwDC0EfIQQCQCADQf///wdLDQAgA0EIdiIEIARBgP4/akEQdkEIcSIEdCIFIAVBgOAfakEQdkEEcSIFdCIAIABBgIAPakEQdkECcSIAdEEPdiAEIAVyIAByayIEQQF0IAMgBEEVanZBAXFyQRxqIQQLIAIgBDYCHCACQgA3AhAgBEECdEG40oCAAGohBQJAQQAoAozQgIAAIgBBASAEdCIIcQ0AIAUgAjYCAEEAIAAgCHI2AozQgIAAIAIgBTYCGCACIAI2AgggAiACNgIMDAMLIANBAEEZIARBAXZrIARBH0YbdCEEIAUoAgAhAANAIAAiBSgCBEF4cSADRg0CIARBHXYhACAEQQF0IQQgBSAAQQRxakEQaiIIKAIAIgANAAsgCCACNgIAIAIgBTYCGCACIAI2AgwgAiACNgIIDAILIABBeCAAa0EPcUEAIABBCGpBD3EbIgNqIgsgBkFIaiIIIANrIgNBAXI2AgQgACAIakE4NgIEIAQgBUE3IAVrQQ9xQQAgBUFJakEPcRtqQUFqIgggCCAEQRBqSRsiCEEjNgIEQQBBACgC8NOAgAA2AqTQgIAAQQAgAzYClNCAgABBACALNgKg0ICAACAIQRBqQQApAtDTgIAANwIAIAhBACkCyNOAgAA3AghBACAIQQhqNgLQ04CAAEEAIAY2AszTgIAAQQAgADYCyNOAgABBAEEANgLU04CAACAIQSRqIQMDQCADQQc2AgAgA0EEaiIDIAVJDQALIAggBEYNAyAIIAgoAgRBfnE2AgQgCCAIIARrIgA2AgAgBCAAQQFyNgIEAkAgAEH/AUsNACAAQXhxQbDQgIAAaiEDAkACQEEAKAKI0ICAACIFQQEgAEEDdnQiAHENAEEAIAUgAHI2AojQgIAAIAMhBQwBCyADKAIIIQULIAUgBDYCDCADIAQ2AgggBCADNgIMIAQgBTYCCAwEC0EfIQMCQCAAQf///wdLDQAgAEEIdiIDIANBgP4/akEQdkEIcSIDdCIFIAVBgOAfakEQdkEEcSIFdCIIIAhBgIAPakEQdkECcSIIdEEPdiADIAVyIAhyayIDQQF0IAAgA0EVanZBAXFyQRxqIQMLIAQgAzYCHCAEQgA3AhAgA0ECdEG40oCAAGohBQJAQQAoAozQgIAAIghBASADdCIGcQ0AIAUgBDYCAEEAIAggBnI2AozQgIAAIAQgBTYCGCAEIAQ2AgggBCAENgIMDAQLIABBAEEZIANBAXZrIANBH0YbdCEDIAUoAgAhCANAIAgiBSgCBEF4cSAARg0DIANBHXYhCCADQQF0IQMgBSAIQQRxakEQaiIGKAIAIggNAAsgBiAENgIAIAQgBTYCGCAEIAQ2AgwgBCAENgIIDAMLIAUoAggiAyACNgIMIAUgAjYCCCACQQA2AhggAiAFNgIMIAIgAzYCCAsgC0EIaiEDDAULIAUoAggiAyAENgIMIAUgBDYCCCAEQQA2AhggBCAFNgIMIAQgAzYCCAtBACgClNCAgAAiAyACTQ0AQQAoAqDQgIAAIgQgAmoiBSADIAJrIgNBAXI2AgRBACADNgKU0ICAAEEAIAU2AqDQgIAAIAQgAkEDcjYCBCAEQQhqIQMMAwtBACEDQQBBMDYC+NOAgAAMAgsCQCALRQ0AAkACQCAIIAgoAhwiBUECdEG40oCAAGoiAygCAEcNACADIAA2AgAgAA0BQQAgB0F+IAV3cSIHNgKM0ICAAAwCCyALQRBBFCALKAIQIAhGG2ogADYCACAARQ0BCyAAIAs2AhgCQCAIKAIQIgNFDQAgACADNgIQIAMgADYCGAsgCEEUaigCACIDRQ0AIABBFGogAzYCACADIAA2AhgLAkACQCAEQQ9LDQAgCCAEIAJqIgNBA3I2AgQgCCADaiIDIAMoAgRBAXI2AgQMAQsgCCACaiIAIARBAXI2AgQgCCACQQNyNgIEIAAgBGogBDYCAAJAIARB/wFLDQAgBEF4cUGw0ICAAGohAwJAAkBBACgCiNCAgAAiBUEBIARBA3Z0IgRxDQBBACAFIARyNgKI0ICAACADIQQMAQsgAygCCCEECyAEIAA2AgwgAyAANgIIIAAgAzYCDCAAIAQ2AggMAQtBHyEDAkAgBEH///8HSw0AIARBCHYiAyADQYD+P2pBEHZBCHEiA3QiBSAFQYDgH2pBEHZBBHEiBXQiAiACQYCAD2pBEHZBAnEiAnRBD3YgAyAFciACcmsiA0EBdCAEIANBFWp2QQFxckEcaiEDCyAAIAM2AhwgAEIANwIQIANBAnRBuNKAgABqIQUCQCAHQQEgA3QiAnENACAFIAA2AgBBACAHIAJyNgKM0ICAACAAIAU2AhggACAANgIIIAAgADYCDAwBCyAEQQBBGSADQQF2ayADQR9GG3QhAyAFKAIAIQICQANAIAIiBSgCBEF4cSAERg0BIANBHXYhAiADQQF0IQMgBSACQQRxakEQaiIGKAIAIgINAAsgBiAANgIAIAAgBTYCGCAAIAA2AgwgACAANgIIDAELIAUoAggiAyAANgIMIAUgADYCCCAAQQA2AhggACAFNgIMIAAgAzYCCAsgCEEIaiEDDAELAkAgCkUNAAJAAkAgACAAKAIcIgVBAnRBuNKAgABqIgMoAgBHDQAgAyAINgIAIAgNAUEAIAlBfiAFd3E2AozQgIAADAILIApBEEEUIAooAhAgAEYbaiAINgIAIAhFDQELIAggCjYCGAJAIAAoAhAiA0UNACAIIAM2AhAgAyAINgIYCyAAQRRqKAIAIgNFDQAgCEEUaiADNgIAIAMgCDYCGAsCQAJAIARBD0sNACAAIAQgAmoiA0EDcjYCBCAAIANqIgMgAygCBEEBcjYCBAwBCyAAIAJqIgUgBEEBcjYCBCAAIAJBA3I2AgQgBSAEaiAENgIAAkAgB0UNACAHQXhxQbDQgIAAaiECQQAoApzQgIAAIQMCQAJAQQEgB0EDdnQiCCAGcQ0AQQAgCCAGcjYCiNCAgAAgAiEIDAELIAIoAgghCAsgCCADNgIMIAIgAzYCCCADIAI2AgwgAyAINgIIC0EAIAU2ApzQgIAAQQAgBDYCkNCAgAALIABBCGohAwsgAUEQaiSAgICAACADCwoAIAAQyYCAgAAL4g0BB38CQCAARQ0AIABBeGoiASAAQXxqKAIAIgJBeHEiAGohAwJAIAJBAXENACACQQNxRQ0BIAEgASgCACICayIBQQAoApjQgIAAIgRJDQEgAiAAaiEAAkAgAUEAKAKc0ICAAEYNAAJAIAJB/wFLDQAgASgCCCIEIAJBA3YiBUEDdEGw0ICAAGoiBkYaAkAgASgCDCICIARHDQBBAEEAKAKI0ICAAEF+IAV3cTYCiNCAgAAMAwsgAiAGRhogAiAENgIIIAQgAjYCDAwCCyABKAIYIQcCQAJAIAEoAgwiBiABRg0AIAEoAggiAiAESRogBiACNgIIIAIgBjYCDAwBCwJAIAFBFGoiAigCACIEDQAgAUEQaiICKAIAIgQNAEEAIQYMAQsDQCACIQUgBCIGQRRqIgIoAgAiBA0AIAZBEGohAiAGKAIQIgQNAAsgBUEANgIACyAHRQ0BAkACQCABIAEoAhwiBEECdEG40oCAAGoiAigCAEcNACACIAY2AgAgBg0BQQBBACgCjNCAgABBfiAEd3E2AozQgIAADAMLIAdBEEEUIAcoAhAgAUYbaiAGNgIAIAZFDQILIAYgBzYCGAJAIAEoAhAiAkUNACAGIAI2AhAgAiAGNgIYCyABKAIUIgJFDQEgBkEUaiACNgIAIAIgBjYCGAwBCyADKAIEIgJBA3FBA0cNACADIAJBfnE2AgRBACAANgKQ0ICAACABIABqIAA2AgAgASAAQQFyNgIEDwsgASADTw0AIAMoAgQiAkEBcUUNAAJAAkAgAkECcQ0AAkAgA0EAKAKg0ICAAEcNAEEAIAE2AqDQgIAAQQBBACgClNCAgAAgAGoiADYClNCAgAAgASAAQQFyNgIEIAFBACgCnNCAgABHDQNBAEEANgKQ0ICAAEEAQQA2ApzQgIAADwsCQCADQQAoApzQgIAARw0AQQAgATYCnNCAgABBAEEAKAKQ0ICAACAAaiIANgKQ0ICAACABIABBAXI2AgQgASAAaiAANgIADwsgAkF4cSAAaiEAAkACQCACQf8BSw0AIAMoAggiBCACQQN2IgVBA3RBsNCAgABqIgZGGgJAIAMoAgwiAiAERw0AQQBBACgCiNCAgABBfiAFd3E2AojQgIAADAILIAIgBkYaIAIgBDYCCCAEIAI2AgwMAQsgAygCGCEHAkACQCADKAIMIgYgA0YNACADKAIIIgJBACgCmNCAgABJGiAGIAI2AgggAiAGNgIMDAELAkAgA0EUaiICKAIAIgQNACADQRBqIgIoAgAiBA0AQQAhBgwBCwNAIAIhBSAEIgZBFGoiAigCACIEDQAgBkEQaiECIAYoAhAiBA0ACyAFQQA2AgALIAdFDQACQAJAIAMgAygCHCIEQQJ0QbjSgIAAaiICKAIARw0AIAIgBjYCACAGDQFBAEEAKAKM0ICAAEF+IAR3cTYCjNCAgAAMAgsgB0EQQRQgBygCECADRhtqIAY2AgAgBkUNAQsgBiAHNgIYAkAgAygCECICRQ0AIAYgAjYCECACIAY2AhgLIAMoAhQiAkUNACAGQRRqIAI2AgAgAiAGNgIYCyABIABqIAA2AgAgASAAQQFyNgIEIAFBACgCnNCAgABHDQFBACAANgKQ0ICAAA8LIAMgAkF+cTYCBCABIABqIAA2AgAgASAAQQFyNgIECwJAIABB/wFLDQAgAEF4cUGw0ICAAGohAgJAAkBBACgCiNCAgAAiBEEBIABBA3Z0IgBxDQBBACAEIAByNgKI0ICAACACIQAMAQsgAigCCCEACyAAIAE2AgwgAiABNgIIIAEgAjYCDCABIAA2AggPC0EfIQICQCAAQf///wdLDQAgAEEIdiICIAJBgP4/akEQdkEIcSICdCIEIARBgOAfakEQdkEEcSIEdCIGIAZBgIAPakEQdkECcSIGdEEPdiACIARyIAZyayICQQF0IAAgAkEVanZBAXFyQRxqIQILIAEgAjYCHCABQgA3AhAgAkECdEG40oCAAGohBAJAAkBBACgCjNCAgAAiBkEBIAJ0IgNxDQAgBCABNgIAQQAgBiADcjYCjNCAgAAgASAENgIYIAEgATYCCCABIAE2AgwMAQsgAEEAQRkgAkEBdmsgAkEfRht0IQIgBCgCACEGAkADQCAGIgQoAgRBeHEgAEYNASACQR12IQYgAkEBdCECIAQgBkEEcWpBEGoiAygCACIGDQALIAMgATYCACABIAQ2AhggASABNgIMIAEgATYCCAwBCyAEKAIIIgAgATYCDCAEIAE2AgggAUEANgIYIAEgBDYCDCABIAA2AggLQQBBACgCqNCAgABBf2oiAUF/IAEbNgKo0ICAAAsLBAAAAAtOAAJAIAANAD8AQRB0DwsCQCAAQf//A3ENACAAQX9MDQACQCAAQRB2QAAiAEF/Rw0AQQBBMDYC+NOAgABBfw8LIABBEHQPCxDKgICAAAAL8gICA38BfgJAIAJFDQAgACABOgAAIAIgAGoiA0F/aiABOgAAIAJBA0kNACAAIAE6AAIgACABOgABIANBfWogAToAACADQX5qIAE6AAAgAkEHSQ0AIAAgAToAAyADQXxqIAE6AAAgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIFayICQSBJDQAgAa1CgYCAgBB+IQYgAyAFaiEBA0AgASAGNwMYIAEgBjcDECABIAY3AwggASAGNwMAIAFBIGohASACQWBqIgJBH0sNAAsLIAALC45IAQBBgAgLhkgBAAAAAgAAAAMAAAAAAAAAAAAAAAQAAAAFAAAAAAAAAAAAAAAGAAAABwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEludmFsaWQgY2hhciBpbiB1cmwgcXVlcnkAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9ib2R5AENvbnRlbnQtTGVuZ3RoIG92ZXJmbG93AENodW5rIHNpemUgb3ZlcmZsb3cAUmVzcG9uc2Ugb3ZlcmZsb3cASW52YWxpZCBtZXRob2QgZm9yIEhUVFAveC54IHJlcXVlc3QASW52YWxpZCBtZXRob2QgZm9yIFJUU1AveC54IHJlcXVlc3QARXhwZWN0ZWQgU09VUkNFIG1ldGhvZCBmb3IgSUNFL3gueCByZXF1ZXN0AEludmFsaWQgY2hhciBpbiB1cmwgZnJhZ21lbnQgc3RhcnQARXhwZWN0ZWQgZG90AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fc3RhdHVzAEludmFsaWQgcmVzcG9uc2Ugc3RhdHVzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21ldGhvZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lYCBjYWxsYmFjayBlcnJvcgBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNlcnZlcgBJbnZhbGlkIGhlYWRlciB2YWx1ZSBjaGFyAEludmFsaWQgaGVhZGVyIGZpZWxkIGNoYXIAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl92ZXJzaW9uAEludmFsaWQgbWlub3IgdmVyc2lvbgBJbnZhbGlkIG1ham9yIHZlcnNpb24ARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgdmVyc2lvbgBFeHBlY3RlZCBDUkxGIGFmdGVyIHZlcnNpb24ASW52YWxpZCBIVFRQIHZlcnNpb24ASW52YWxpZCBoZWFkZXIgdG9rZW4AU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl91cmwASW52YWxpZCBjaGFyYWN0ZXJzIGluIHVybABVbmV4cGVjdGVkIHN0YXJ0IGNoYXIgaW4gdXJsAERvdWJsZSBAIGluIHVybABFbXB0eSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXJhY3RlciBpbiBDb250ZW50LUxlbmd0aABEdXBsaWNhdGUgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyIGluIHVybCBwYXRoAENvbnRlbnQtTGVuZ3RoIGNhbid0IGJlIHByZXNlbnQgd2l0aCBUcmFuc2Zlci1FbmNvZGluZwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBzaXplAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX3ZhbHVlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgdmFsdWUATWlzc2luZyBleHBlY3RlZCBMRiBhZnRlciBoZWFkZXIgdmFsdWUASW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fbmFtZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIG5hbWUAUGF1c2Ugb24gQ09OTkVDVC9VcGdyYWRlAFBhdXNlIG9uIFBSSS9VcGdyYWRlAEV4cGVjdGVkIEhUVFAvMiBDb25uZWN0aW9uIFByZWZhY2UAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9tZXRob2QARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgbWV0aG9kAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX2ZpZWxkAFBhdXNlZABJbnZhbGlkIHdvcmQgZW5jb3VudGVyZWQASW52YWxpZCBtZXRob2QgZW5jb3VudGVyZWQAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzY2hlbWEAUmVxdWVzdCBoYXMgaW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX0NIVU5LX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX05BTUVfQ09NUExFVEUASFBFX0NCX01FU1NBR0VfQ09NUExFVEUASFBFX0NCX01FVEhPRF9DT01QTEVURQBIUEVfQ0JfSEVBREVSX0ZJRUxEX0NPTVBMRVRFAERFTEVURQBIUEVfSU5WQUxJRF9FT0ZfU1RBVEUASU5WQUxJRF9TU0xfQ0VSVElGSUNBVEUAUEFVU0UATk9fUkVTUE9OU0UAVU5TVVBQT1JURURfTUVESUFfVFlQRQBHT05FAE5PVF9BQ0NFUFRBQkxFAFNFUlZJQ0VfVU5BVkFJTEFCTEUAUkFOR0VfTk9UX1NBVElTRklBQkxFAE9SSUdJTl9JU19VTlJFQUNIQUJMRQBSRVNQT05TRV9JU19TVEFMRQBQVVJHRQBNRVJHRQBSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFAFJFUVVFU1RfSEVBREVSX1RPT19MQVJHRQBQQVlMT0FEX1RPT19MQVJHRQBJTlNVRkZJQ0lFTlRfU1RPUkFHRQBIUEVfUEFVU0VEX1VQR1JBREUASFBFX1BBVVNFRF9IMl9VUEdSQURFAFNPVVJDRQBBTk5PVU5DRQBUUkFDRQBIUEVfVU5FWFBFQ1RFRF9TUEFDRQBERVNDUklCRQBVTlNVQlNDUklCRQBSRUNPUkQASFBFX0lOVkFMSURfTUVUSE9EAE5PVF9GT1VORABQUk9QRklORABVTkJJTkQAUkVCSU5EAFVOQVVUSE9SSVpFRABNRVRIT0RfTk9UX0FMTE9XRUQASFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURUQAQUxSRUFEWV9SRVBPUlRFRABBQ0NFUFRFRABOT1RfSU1QTEVNRU5URUQATE9PUF9ERVRFQ1RFRABIUEVfQ1JfRVhQRUNURUQASFBFX0xGX0VYUEVDVEVEAENSRUFURUQASU1fVVNFRABIUEVfUEFVU0VEAFRJTUVPVVRfT0NDVVJFRABQQVlNRU5UX1JFUVVJUkVEAFBSRUNPTkRJVElPTl9SRVFVSVJFRABQUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRABORVRXT1JLX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAExFTkdUSF9SRVFVSVJFRABTU0xfQ0VSVElGSUNBVEVfUkVRVUlSRUQAVVBHUkFERV9SRVFVSVJFRABQQUdFX0VYUElSRUQAUFJFQ09ORElUSU9OX0ZBSUxFRABFWFBFQ1RBVElPTl9GQUlMRUQAUkVWQUxJREFUSU9OX0ZBSUxFRABTU0xfSEFORFNIQUtFX0ZBSUxFRABMT0NLRUQAVFJBTlNGT1JNQVRJT05fQVBQTElFRABOT1RfTU9ESUZJRUQATk9UX0VYVEVOREVEAEJBTkRXSURUSF9MSU1JVF9FWENFRURFRABTSVRFX0lTX09WRVJMT0FERUQASEVBRABFeHBlY3RlZCBIVFRQLwAAXhMAACYTAAAwEAAA8BcAAJ0TAAAVEgAAORcAAPASAAAKEAAAdRIAAK0SAACCEwAATxQAAH8QAACgFQAAIxQAAIkSAACLFAAATRUAANQRAADPFAAAEBgAAMkWAADcFgAAwREAAOAXAAC7FAAAdBQAAHwVAADlFAAACBcAAB8QAABlFQAAoxQAACgVAAACFQAAmRUAACwQAACLGQAATw8AANQOAABqEAAAzhAAAAIXAACJDgAAbhMAABwTAABmFAAAVhcAAMETAADNEwAAbBMAAGgXAABmFwAAXxcAACITAADODwAAaQ4AANgOAABjFgAAyxMAAKoOAAAoFwAAJhcAAMUTAABdFgAA6BEAAGcTAABlEwAA8hYAAHMTAAAdFwAA+RYAAPMRAADPDgAAzhUAAAwSAACzEQAApREAAGEQAAAyFwAAuxMAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIDAgICAgIAAAICAAICAAICAgICAgICAgIABAAAAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbG9zZWVlcC1hbGl2ZQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEAAAEBAAEBAAEBAQEBAQEBAQEAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AAAAAAAAAAAAAAAAAAAByYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AAAAAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQIAAQMAAAAAAAAAAAAAAAAAAAAAAAAEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAQAAAgAAAAAAAAAAAAAAAAAAAAAAAAMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAIAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOT1VOQ0VFQ0tPVVRORUNURVRFQ1JJQkVMVVNIRVRFQURTRUFSQ0hSR0VDVElWSVRZTEVOREFSVkVPVElGWVBUSU9OU0NIU0VBWVNUQVRDSEdFT1JESVJFQ1RPUlRSQ0hQQVJBTUVURVJVUkNFQlNDUklCRUFSRE9XTkFDRUlORE5LQ0tVQlNDUklCRUhUVFAvQURUUC8=' 62515 62516 62517 /***/ }), 62518 62519 /***/ 95627: 62520 /***/ ((module) => { 62521 62522 module.exports = 'AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJsbGh0dHBfc3RhdHVzX25hbWUAIRpsbGh0dHBfc2V0X2xlbmllbnRfaGVhZGVycwAiIWxsaHR0cF9zZXRfbGVuaWVudF9jaHVua2VkX2xlbmd0aAAjHWxsaHR0cF9zZXRfbGVuaWVudF9rZWVwX2FsaXZlACQkbGxodHRwX3NldF9sZW5pZW50X3RyYW5zZmVyX2VuY29kaW5nACUYbGxodHRwX21lc3NhZ2VfbmVlZHNfZW9mAD8JFwEAQQELEQECAwQFCwYHNTk3MS8tJyspCrLgAkUCAAsIABCIgICAAAsZACAAEMKAgIAAGiAAIAI2AjggACABOgAoCxwAIAAgAC8BMiAALQAuIAAQwYCAgAAQgICAgAALKgEBf0HAABDGgICAACIBEMKAgIAAGiABQYCIgIAANgI4IAEgADoAKCABCwoAIAAQyICAgAALBwAgAC0AKAsHACAALQAqCwcAIAAtACsLBwAgAC0AKQsHACAALwEyCwcAIAAtAC4LRQEEfyAAKAIYIQEgAC0ALSECIAAtACghAyAAKAI4IQQgABDCgICAABogACAENgI4IAAgAzoAKCAAIAI6AC0gACABNgIYCxEAIAAgASABIAJqEMOAgIAACxAAIABBAEHcABDMgICAABoLZwEBf0EAIQECQCAAKAIMDQACQAJAAkACQCAALQAvDgMBAAMCCyAAKAI4IgFFDQAgASgCLCIBRQ0AIAAgARGAgICAAAAiAQ0DC0EADwsQyoCAgAAACyAAQcOWgIAANgIQQQ4hAQsgAQseAAJAIAAoAgwNACAAQdGbgIAANgIQIABBFTYCDAsLFgACQCAAKAIMQRVHDQAgAEEANgIMCwsWAAJAIAAoAgxBFkcNACAAQQA2AgwLCwcAIAAoAgwLBwAgACgCEAsJACAAIAE2AhALBwAgACgCFAsiAAJAIABBJEkNABDKgICAAAALIABBAnRBoLOAgABqKAIACyIAAkAgAEEuSQ0AEMqAgIAAAAsgAEECdEGwtICAAGooAgAL7gsBAX9B66iAgAAhAQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABBnH9qDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0Hhp4CAAA8LQaShgIAADwtBy6yAgAAPC0H+sYCAAA8LQcCkgIAADwtBq6SAgAAPC0GNqICAAA8LQeKmgIAADwtBgLCAgAAPC0G5r4CAAA8LQdekgIAADwtB75+AgAAPC0Hhn4CAAA8LQfqfgIAADwtB8qCAgAAPC0Gor4CAAA8LQa6ygIAADwtBiLCAgAAPC0Hsp4CAAA8LQYKigIAADwtBjp2AgAAPC0HQroCAAA8LQcqjgIAADwtBxbKAgAAPC0HfnICAAA8LQdKcgIAADwtBxKCAgAAPC0HXoICAAA8LQaKfgIAADwtB7a6AgAAPC0GrsICAAA8LQdSlgIAADwtBzK6AgAAPC0H6roCAAA8LQfyrgIAADwtB0rCAgAAPC0HxnYCAAA8LQbuggIAADwtB96uAgAAPC0GQsYCAAA8LQdexgIAADwtBoq2AgAAPC0HUp4CAAA8LQeCrgIAADwtBn6yAgAAPC0HrsYCAAA8LQdWfgIAADwtByrGAgAAPC0HepYCAAA8LQdSegIAADwtB9JyAgAAPC0GnsoCAAA8LQbGdgIAADwtBoJ2AgAAPC0G5sYCAAA8LQbywgIAADwtBkqGAgAAPC0GzpoCAAA8LQemsgIAADwtBrJ6AgAAPC0HUq4CAAA8LQfemgIAADwtBgKaAgAAPC0GwoYCAAA8LQf6egIAADwtBjaOAgAAPC0GJrYCAAA8LQfeigIAADwtBoLGAgAAPC0Gun4CAAA8LQcalgIAADwtB6J6AgAAPC0GTooCAAA8LQcKvgIAADwtBw52AgAAPC0GLrICAAA8LQeGdgIAADwtBja+AgAAPC0HqoYCAAA8LQbStgIAADwtB0q+AgAAPC0HfsoCAAA8LQdKygIAADwtB8LCAgAAPC0GpooCAAA8LQfmjgIAADwtBmZ6AgAAPC0G1rICAAA8LQZuwgIAADwtBkrKAgAAPC0G2q4CAAA8LQcKigIAADwtB+LKAgAAPC0GepYCAAA8LQdCigIAADwtBup6AgAAPC0GBnoCAAA8LEMqAgIAAAAtB1qGAgAAhAQsgAQsWACAAIAAtAC1B/gFxIAFBAEdyOgAtCxkAIAAgAC0ALUH9AXEgAUEAR0EBdHI6AC0LGQAgACAALQAtQfsBcSABQQBHQQJ0cjoALQsZACAAIAAtAC1B9wFxIAFBAEdBA3RyOgAtCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAgAiBEUNACAAIAQRgICAgAAAIQMLIAMLSQECf0EAIQMCQCAAKAI4IgRFDQAgBCgCBCIERQ0AIAAgASACIAFrIAQRgYCAgAAAIgNBf0cNACAAQcaRgIAANgIQQRghAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIwIgRFDQAgACAEEYCAgIAAACEDCyADC0kBAn9BACEDAkAgACgCOCIERQ0AIAQoAggiBEUNACAAIAEgAiABayAEEYGAgIAAACIDQX9HDQAgAEH2ioCAADYCEEEYIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCNCIERQ0AIAAgBBGAgICAAAAhAwsgAwtJAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIMIgRFDQAgACABIAIgAWsgBBGBgICAAAAiA0F/Rw0AIABB7ZqAgAA2AhBBGCEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAjgiBEUNACAAIAQRgICAgAAAIQMLIAMLSQECf0EAIQMCQCAAKAI4IgRFDQAgBCgCECIERQ0AIAAgASACIAFrIAQRgYCAgAAAIgNBf0cNACAAQZWQgIAANgIQQRghAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAI8IgRFDQAgACAEEYCAgIAAACEDCyADC0kBAn9BACEDAkAgACgCOCIERQ0AIAQoAhQiBEUNACAAIAEgAiABayAEEYGAgIAAACIDQX9HDQAgAEGqm4CAADYCEEEYIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCQCIERQ0AIAAgBBGAgICAAAAhAwsgAwtJAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIYIgRFDQAgACABIAIgAWsgBBGBgICAAAAiA0F/Rw0AIABB7ZOAgAA2AhBBGCEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAkQiBEUNACAAIAQRgICAgAAAIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCJCIERQ0AIAAgBBGAgICAAAAhAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIsIgRFDQAgACAEEYCAgIAAACEDCyADC0kBAn9BACEDAkAgACgCOCIERQ0AIAQoAigiBEUNACAAIAEgAiABayAEEYGAgIAAACIDQX9HDQAgAEH2iICAADYCEEEYIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCUCIERQ0AIAAgBBGAgICAAAAhAwsgAwtJAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAIcIgRFDQAgACABIAIgAWsgBBGBgICAAAAiA0F/Rw0AIABBwpmAgAA2AhBBGCEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAkgiBEUNACAAIAQRgICAgAAAIQMLIAMLSQECf0EAIQMCQCAAKAI4IgRFDQAgBCgCICIERQ0AIAAgASACIAFrIAQRgYCAgAAAIgNBf0cNACAAQZSUgIAANgIQQRghAwsgAwsuAQJ/QQAhAwJAIAAoAjgiBEUNACAEKAJMIgRFDQAgACAEEYCAgIAAACEDCyADCy4BAn9BACEDAkAgACgCOCIERQ0AIAQoAlQiBEUNACAAIAQRgICAgAAAIQMLIAMLLgECf0EAIQMCQCAAKAI4IgRFDQAgBCgCWCIERQ0AIAAgBBGAgICAAAAhAwsgAwtFAQF/AkACQCAALwEwQRRxQRRHDQBBASEDIAAtAChBAUYNASAALwEyQeUARiEDDAELIAAtAClBBUYhAwsgACADOgAuQQAL/gEBA39BASEDAkAgAC8BMCIEQQhxDQAgACkDIEIAUiEDCwJAAkAgAC0ALkUNAEEBIQUgAC0AKUEFRg0BQQEhBSAEQcAAcUUgA3FBAUcNAQtBACEFIARBwABxDQBBAiEFIARB//8DcSIDQQhxDQACQCADQYAEcUUNAAJAIAAtAChBAUcNACAALQAtQQpxDQBBBQ8LQQQPCwJAIANBIHENAAJAIAAtAChBAUYNACAALwEyQf//A3EiAEGcf2pB5ABJDQAgAEHMAUYNACAAQbACRg0AQQQhBSAEQShxRQ0CIANBiARxQYAERg0CC0EADwtBAEEDIAApAyBQGyEFCyAFC2IBAn9BACEBAkAgAC0AKEEBRg0AIAAvATJB//8DcSICQZx/akHkAEkNACACQcwBRg0AIAJBsAJGDQAgAC8BMCIAQcAAcQ0AQQEhASAAQYgEcUGABEYNACAAQShxRSEBCyABC6cBAQN/AkACQAJAIAAtACpFDQAgAC0AK0UNAEEAIQMgAC8BMCIEQQJxRQ0BDAILQQAhAyAALwEwIgRBAXFFDQELQQEhAyAALQAoQQFGDQAgAC8BMkH//wNxIgVBnH9qQeQASQ0AIAVBzAFGDQAgBUGwAkYNACAEQcAAcQ0AQQAhAyAEQYgEcUGABEYNACAEQShxQQBHIQMLIABBADsBMCAAQQA6AC8gAwuZAQECfwJAAkACQCAALQAqRQ0AIAAtACtFDQBBACEBIAAvATAiAkECcUUNAQwCC0EAIQEgAC8BMCICQQFxRQ0BC0EBIQEgAC0AKEEBRg0AIAAvATJB//8DcSIAQZx/akHkAEkNACAAQcwBRg0AIABBsAJGDQAgAkHAAHENAEEAIQEgAkGIBHFBgARGDQAgAkEocUEARyEBCyABC0kBAXsgAEEQav0MAAAAAAAAAAAAAAAAAAAAACIB/QsDACAAIAH9CwMAIABBMGogAf0LAwAgAEEgaiAB/QsDACAAQd0BNgIcQQALewEBfwJAIAAoAgwiAw0AAkAgACgCBEUNACAAIAE2AgQLAkAgACABIAIQxICAgAAiAw0AIAAoAgwPCyAAIAM2AhxBACEDIAAoAgQiAUUNACAAIAEgAiAAKAIIEYGAgIAAACIBRQ0AIAAgAjYCFCAAIAE2AgwgASEDCyADC+TzAQMOfwN+BH8jgICAgABBEGsiAySAgICAACABIQQgASEFIAEhBiABIQcgASEIIAEhCSABIQogASELIAEhDCABIQ0gASEOIAEhDwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIcIhBBf2oO3QHaAQHZAQIDBAUGBwgJCgsMDQ7YAQ8Q1wEREtYBExQVFhcYGRob4AHfARwdHtUBHyAhIiMkJdQBJicoKSorLNMB0gEtLtEB0AEvMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUbbAUdISUrPAc4BS80BTMwBTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AcsBygG4AckBuQHIAboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBANwBC0EAIRAMxgELQQ4hEAzFAQtBDSEQDMQBC0EPIRAMwwELQRAhEAzCAQtBEyEQDMEBC0EUIRAMwAELQRUhEAy/AQtBFiEQDL4BC0EXIRAMvQELQRghEAy8AQtBGSEQDLsBC0EaIRAMugELQRshEAy5AQtBHCEQDLgBC0EIIRAMtwELQR0hEAy2AQtBICEQDLUBC0EfIRAMtAELQQchEAyzAQtBISEQDLIBC0EiIRAMsQELQR4hEAywAQtBIyEQDK8BC0ESIRAMrgELQREhEAytAQtBJCEQDKwBC0ElIRAMqwELQSYhEAyqAQtBJyEQDKkBC0HDASEQDKgBC0EpIRAMpwELQSshEAymAQtBLCEQDKUBC0EtIRAMpAELQS4hEAyjAQtBLyEQDKIBC0HEASEQDKEBC0EwIRAMoAELQTQhEAyfAQtBDCEQDJ4BC0ExIRAMnQELQTIhEAycAQtBMyEQDJsBC0E5IRAMmgELQTUhEAyZAQtBxQEhEAyYAQtBCyEQDJcBC0E6IRAMlgELQTYhEAyVAQtBCiEQDJQBC0E3IRAMkwELQTghEAySAQtBPCEQDJEBC0E7IRAMkAELQT0hEAyPAQtBCSEQDI4BC0EoIRAMjQELQT4hEAyMAQtBPyEQDIsBC0HAACEQDIoBC0HBACEQDIkBC0HCACEQDIgBC0HDACEQDIcBC0HEACEQDIYBC0HFACEQDIUBC0HGACEQDIQBC0EqIRAMgwELQccAIRAMggELQcgAIRAMgQELQckAIRAMgAELQcoAIRAMfwtBywAhEAx+C0HNACEQDH0LQcwAIRAMfAtBzgAhEAx7C0HPACEQDHoLQdAAIRAMeQtB0QAhEAx4C0HSACEQDHcLQdMAIRAMdgtB1AAhEAx1C0HWACEQDHQLQdUAIRAMcwtBBiEQDHILQdcAIRAMcQtBBSEQDHALQdgAIRAMbwtBBCEQDG4LQdkAIRAMbQtB2gAhEAxsC0HbACEQDGsLQdwAIRAMagtBAyEQDGkLQd0AIRAMaAtB3gAhEAxnC0HfACEQDGYLQeEAIRAMZQtB4AAhEAxkC0HiACEQDGMLQeMAIRAMYgtBAiEQDGELQeQAIRAMYAtB5QAhEAxfC0HmACEQDF4LQecAIRAMXQtB6AAhEAxcC0HpACEQDFsLQeoAIRAMWgtB6wAhEAxZC0HsACEQDFgLQe0AIRAMVwtB7gAhEAxWC0HvACEQDFULQfAAIRAMVAtB8QAhEAxTC0HyACEQDFILQfMAIRAMUQtB9AAhEAxQC0H1ACEQDE8LQfYAIRAMTgtB9wAhEAxNC0H4ACEQDEwLQfkAIRAMSwtB+gAhEAxKC0H7ACEQDEkLQfwAIRAMSAtB/QAhEAxHC0H+ACEQDEYLQf8AIRAMRQtBgAEhEAxEC0GBASEQDEMLQYIBIRAMQgtBgwEhEAxBC0GEASEQDEALQYUBIRAMPwtBhgEhEAw+C0GHASEQDD0LQYgBIRAMPAtBiQEhEAw7C0GKASEQDDoLQYsBIRAMOQtBjAEhEAw4C0GNASEQDDcLQY4BIRAMNgtBjwEhEAw1C0GQASEQDDQLQZEBIRAMMwtBkgEhEAwyC0GTASEQDDELQZQBIRAMMAtBlQEhEAwvC0GWASEQDC4LQZcBIRAMLQtBmAEhEAwsC0GZASEQDCsLQZoBIRAMKgtBmwEhEAwpC0GcASEQDCgLQZ0BIRAMJwtBngEhEAwmC0GfASEQDCULQaABIRAMJAtBoQEhEAwjC0GiASEQDCILQaMBIRAMIQtBpAEhEAwgC0GlASEQDB8LQaYBIRAMHgtBpwEhEAwdC0GoASEQDBwLQakBIRAMGwtBqgEhEAwaC0GrASEQDBkLQawBIRAMGAtBrQEhEAwXC0GuASEQDBYLQQEhEAwVC0GvASEQDBQLQbABIRAMEwtBsQEhEAwSC0GzASEQDBELQbIBIRAMEAtBtAEhEAwPC0G1ASEQDA4LQbYBIRAMDQtBtwEhEAwMC0G4ASEQDAsLQbkBIRAMCgtBugEhEAwJC0G7ASEQDAgLQcYBIRAMBwtBvAEhEAwGC0G9ASEQDAULQb4BIRAMBAtBvwEhEAwDC0HAASEQDAILQcIBIRAMAQtBwQEhEAsDQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIBAOxwEAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB4fICEjJSg/QEFERUZHSElKS0xNT1BRUlPeA1dZW1xdYGJlZmdoaWprbG1vcHFyc3R1dnd4eXp7fH1+gAGCAYUBhgGHAYkBiwGMAY0BjgGPAZABkQGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AbkBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAdQB1QHWAdcB2AHZAdoB2wHcAd0B3gHgAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMBmQKkArAC/gL+AgsgASIEIAJHDfMBQd0BIRAM/wMLIAEiECACRw3dAUHDASEQDP4DCyABIgEgAkcNkAFB9wAhEAz9AwsgASIBIAJHDYYBQe8AIRAM/AMLIAEiASACRw1/QeoAIRAM+wMLIAEiASACRw17QegAIRAM+gMLIAEiASACRw14QeYAIRAM+QMLIAEiASACRw0aQRghEAz4AwsgASIBIAJHDRRBEiEQDPcDCyABIgEgAkcNWUHFACEQDPYDCyABIgEgAkcNSkE/IRAM9QMLIAEiASACRw1IQTwhEAz0AwsgASIBIAJHDUFBMSEQDPMDCyAALQAuQQFGDesDDIcCCyAAIAEiASACEMCAgIAAQQFHDeYBIABCADcDIAznAQsgACABIgEgAhC0gICAACIQDecBIAEhAQz1AgsCQCABIgEgAkcNAEEGIRAM8AMLIAAgAUEBaiIBIAIQu4CAgAAiEA3oASABIQEMMQsgAEIANwMgQRIhEAzVAwsgASIQIAJHDStBHSEQDO0DCwJAIAEiASACRg0AIAFBAWohAUEQIRAM1AMLQQchEAzsAwsgAEIAIAApAyAiESACIAEiEGutIhJ9IhMgEyARVhs3AyAgESASViIURQ3lAUEIIRAM6wMLAkAgASIBIAJGDQAgAEGJgICAADYCCCAAIAE2AgQgASEBQRQhEAzSAwtBCSEQDOoDCyABIQEgACkDIFAN5AEgASEBDPICCwJAIAEiASACRw0AQQshEAzpAwsgACABQQFqIgEgAhC2gICAACIQDeUBIAEhAQzyAgsgACABIgEgAhC4gICAACIQDeUBIAEhAQzyAgsgACABIgEgAhC4gICAACIQDeYBIAEhAQwNCyAAIAEiASACELqAgIAAIhAN5wEgASEBDPACCwJAIAEiASACRw0AQQ8hEAzlAwsgAS0AACIQQTtGDQggEEENRw3oASABQQFqIQEM7wILIAAgASIBIAIQuoCAgAAiEA3oASABIQEM8gILA0ACQCABLQAAQfC1gIAAai0AACIQQQFGDQAgEEECRw3rASAAKAIEIRAgAEEANgIEIAAgECABQQFqIgEQuYCAgAAiEA3qASABIQEM9AILIAFBAWoiASACRw0AC0ESIRAM4gMLIAAgASIBIAIQuoCAgAAiEA3pASABIQEMCgsgASIBIAJHDQZBGyEQDOADCwJAIAEiASACRw0AQRYhEAzgAwsgAEGKgICAADYCCCAAIAE2AgQgACABIAIQuICAgAAiEA3qASABIQFBICEQDMYDCwJAIAEiASACRg0AA0ACQCABLQAAQfC3gIAAai0AACIQQQJGDQACQCAQQX9qDgTlAewBAOsB7AELIAFBAWohAUEIIRAMyAMLIAFBAWoiASACRw0AC0EVIRAM3wMLQRUhEAzeAwsDQAJAIAEtAABB8LmAgABqLQAAIhBBAkYNACAQQX9qDgTeAewB4AHrAewBCyABQQFqIgEgAkcNAAtBGCEQDN0DCwJAIAEiASACRg0AIABBi4CAgAA2AgggACABNgIEIAEhAUEHIRAMxAMLQRkhEAzcAwsgAUEBaiEBDAILAkAgASIUIAJHDQBBGiEQDNsDCyAUIQECQCAULQAAQXNqDhTdAu4C7gLuAu4C7gLuAu4C7gLuAu4C7gLuAu4C7gLuAu4C7gLuAgDuAgtBACEQIABBADYCHCAAQa+LgIAANgIQIABBAjYCDCAAIBRBAWo2AhQM2gMLAkAgAS0AACIQQTtGDQAgEEENRw3oASABQQFqIQEM5QILIAFBAWohAQtBIiEQDL8DCwJAIAEiECACRw0AQRwhEAzYAwtCACERIBAhASAQLQAAQVBqDjfnAeYBAQIDBAUGBwgAAAAAAAAACQoLDA0OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPEBESExQAC0EeIRAMvQMLQgIhEQzlAQtCAyERDOQBC0IEIREM4wELQgUhEQziAQtCBiERDOEBC0IHIREM4AELQgghEQzfAQtCCSERDN4BC0IKIREM3QELQgshEQzcAQtCDCERDNsBC0INIREM2gELQg4hEQzZAQtCDyERDNgBC0IKIREM1wELQgshEQzWAQtCDCERDNUBC0INIREM1AELQg4hEQzTAQtCDyERDNIBC0IAIRECQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIBAtAABBUGoON+UB5AEAAQIDBAUGB+YB5gHmAeYB5gHmAeYBCAkKCwwN5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAeYB5gHmAQ4PEBESE+YBC0ICIREM5AELQgMhEQzjAQtCBCERDOIBC0IFIREM4QELQgYhEQzgAQtCByERDN8BC0IIIREM3gELQgkhEQzdAQtCCiERDNwBC0ILIREM2wELQgwhEQzaAQtCDSERDNkBC0IOIREM2AELQg8hEQzXAQtCCiERDNYBC0ILIREM1QELQgwhEQzUAQtCDSERDNMBC0IOIREM0gELQg8hEQzRAQsgAEIAIAApAyAiESACIAEiEGutIhJ9IhMgEyARVhs3AyAgESASViIURQ3SAUEfIRAMwAMLAkAgASIBIAJGDQAgAEGJgICAADYCCCAAIAE2AgQgASEBQSQhEAynAwtBICEQDL8DCyAAIAEiECACEL6AgIAAQX9qDgW2AQDFAgHRAdIBC0ERIRAMpAMLIABBAToALyAQIQEMuwMLIAEiASACRw3SAUEkIRAMuwMLIAEiDSACRw0eQcYAIRAMugMLIAAgASIBIAIQsoCAgAAiEA3UASABIQEMtQELIAEiECACRw0mQdAAIRAMuAMLAkAgASIBIAJHDQBBKCEQDLgDCyAAQQA2AgQgAEGMgICAADYCCCAAIAEgARCxgICAACIQDdMBIAEhAQzYAQsCQCABIhAgAkcNAEEpIRAMtwMLIBAtAAAiAUEgRg0UIAFBCUcN0wEgEEEBaiEBDBULAkAgASIBIAJGDQAgAUEBaiEBDBcLQSohEAy1AwsCQCABIhAgAkcNAEErIRAMtQMLAkAgEC0AACIBQQlGDQAgAUEgRw3VAQsgAC0ALEEIRg3TASAQIQEMkQMLAkAgASIBIAJHDQBBLCEQDLQDCyABLQAAQQpHDdUBIAFBAWohAQzJAgsgASIOIAJHDdUBQS8hEAyyAwsDQAJAIAEtAAAiEEEgRg0AAkAgEEF2ag4EANwB3AEA2gELIAEhAQzgAQsgAUEBaiIBIAJHDQALQTEhEAyxAwtBMiEQIAEiFCACRg2wAyACIBRrIAAoAgAiAWohFSAUIAFrQQNqIRYCQANAIBQtAAAiF0EgciAXIBdBv39qQf8BcUEaSRtB/wFxIAFB8LuAgABqLQAARw0BAkAgAUEDRw0AQQYhAQyWAwsgAUEBaiEBIBRBAWoiFCACRw0ACyAAIBU2AgAMsQMLIABBADYCACAUIQEM2QELQTMhECABIhQgAkYNrwMgAiAUayAAKAIAIgFqIRUgFCABa0EIaiEWAkADQCAULQAAIhdBIHIgFyAXQb9/akH/AXFBGkkbQf8BcSABQfS7gIAAai0AAEcNAQJAIAFBCEcNAEEFIQEMlQMLIAFBAWohASAUQQFqIhQgAkcNAAsgACAVNgIADLADCyAAQQA2AgAgFCEBDNgBC0E0IRAgASIUIAJGDa4DIAIgFGsgACgCACIBaiEVIBQgAWtBBWohFgJAA0AgFC0AACIXQSByIBcgF0G/f2pB/wFxQRpJG0H/AXEgAUHQwoCAAGotAABHDQECQCABQQVHDQBBByEBDJQDCyABQQFqIQEgFEEBaiIUIAJHDQALIAAgFTYCAAyvAwsgAEEANgIAIBQhAQzXAQsCQCABIgEgAkYNAANAAkAgAS0AAEGAvoCAAGotAAAiEEEBRg0AIBBBAkYNCiABIQEM3QELIAFBAWoiASACRw0AC0EwIRAMrgMLQTAhEAytAwsCQCABIgEgAkYNAANAAkAgAS0AACIQQSBGDQAgEEF2ag4E2QHaAdoB2QHaAQsgAUEBaiIBIAJHDQALQTghEAytAwtBOCEQDKwDCwNAAkAgAS0AACIQQSBGDQAgEEEJRw0DCyABQQFqIgEgAkcNAAtBPCEQDKsDCwNAAkAgAS0AACIQQSBGDQACQAJAIBBBdmoOBNoBAQHaAQALIBBBLEYN2wELIAEhAQwECyABQQFqIgEgAkcNAAtBPyEQDKoDCyABIQEM2wELQcAAIRAgASIUIAJGDagDIAIgFGsgACgCACIBaiEWIBQgAWtBBmohFwJAA0AgFC0AAEEgciABQYDAgIAAai0AAEcNASABQQZGDY4DIAFBAWohASAUQQFqIhQgAkcNAAsgACAWNgIADKkDCyAAQQA2AgAgFCEBC0E2IRAMjgMLAkAgASIPIAJHDQBBwQAhEAynAwsgAEGMgICAADYCCCAAIA82AgQgDyEBIAAtACxBf2oOBM0B1QHXAdkBhwMLIAFBAWohAQzMAQsCQCABIgEgAkYNAANAAkAgAS0AACIQQSByIBAgEEG/f2pB/wFxQRpJG0H/AXEiEEEJRg0AIBBBIEYNAAJAAkACQAJAIBBBnX9qDhMAAwMDAwMDAwEDAwMDAwMDAwMCAwsgAUEBaiEBQTEhEAyRAwsgAUEBaiEBQTIhEAyQAwsgAUEBaiEBQTMhEAyPAwsgASEBDNABCyABQQFqIgEgAkcNAAtBNSEQDKUDC0E1IRAMpAMLAkAgASIBIAJGDQADQAJAIAEtAABBgLyAgABqLQAAQQFGDQAgASEBDNMBCyABQQFqIgEgAkcNAAtBPSEQDKQDC0E9IRAMowMLIAAgASIBIAIQsICAgAAiEA3WASABIQEMAQsgEEEBaiEBC0E8IRAMhwMLAkAgASIBIAJHDQBBwgAhEAygAwsCQANAAkAgAS0AAEF3ag4YAAL+Av4ChAP+Av4C/gL+Av4C/gL+Av4C/gL+Av4C/gL+Av4C/gL+Av4C/gIA/gILIAFBAWoiASACRw0AC0HCACEQDKADCyABQQFqIQEgAC0ALUEBcUUNvQEgASEBC0EsIRAMhQMLIAEiASACRw3TAUHEACEQDJ0DCwNAAkAgAS0AAEGQwICAAGotAABBAUYNACABIQEMtwILIAFBAWoiASACRw0AC0HFACEQDJwDCyANLQAAIhBBIEYNswEgEEE6Rw2BAyAAKAIEIQEgAEEANgIEIAAgASANEK+AgIAAIgEN0AEgDUEBaiEBDLMCC0HHACEQIAEiDSACRg2aAyACIA1rIAAoAgAiAWohFiANIAFrQQVqIRcDQCANLQAAIhRBIHIgFCAUQb9/akH/AXFBGkkbQf8BcSABQZDCgIAAai0AAEcNgAMgAUEFRg30AiABQQFqIQEgDUEBaiINIAJHDQALIAAgFjYCAAyaAwtByAAhECABIg0gAkYNmQMgAiANayAAKAIAIgFqIRYgDSABa0EJaiEXA0AgDS0AACIUQSByIBQgFEG/f2pB/wFxQRpJG0H/AXEgAUGWwoCAAGotAABHDf8CAkAgAUEJRw0AQQIhAQz1AgsgAUEBaiEBIA1BAWoiDSACRw0ACyAAIBY2AgAMmQMLAkAgASINIAJHDQBByQAhEAyZAwsCQAJAIA0tAAAiAUEgciABIAFBv39qQf8BcUEaSRtB/wFxQZJ/ag4HAIADgAOAA4ADgAMBgAMLIA1BAWohAUE+IRAMgAMLIA1BAWohAUE/IRAM/wILQcoAIRAgASINIAJGDZcDIAIgDWsgACgCACIBaiEWIA0gAWtBAWohFwNAIA0tAAAiFEEgciAUIBRBv39qQf8BcUEaSRtB/wFxIAFBoMKAgABqLQAARw39AiABQQFGDfACIAFBAWohASANQQFqIg0gAkcNAAsgACAWNgIADJcDC0HLACEQIAEiDSACRg2WAyACIA1rIAAoAgAiAWohFiANIAFrQQ5qIRcDQCANLQAAIhRBIHIgFCAUQb9/akH/AXFBGkkbQf8BcSABQaLCgIAAai0AAEcN/AIgAUEORg3wAiABQQFqIQEgDUEBaiINIAJHDQALIAAgFjYCAAyWAwtBzAAhECABIg0gAkYNlQMgAiANayAAKAIAIgFqIRYgDSABa0EPaiEXA0AgDS0AACIUQSByIBQgFEG/f2pB/wFxQRpJG0H/AXEgAUHAwoCAAGotAABHDfsCAkAgAUEPRw0AQQMhAQzxAgsgAUEBaiEBIA1BAWoiDSACRw0ACyAAIBY2AgAMlQMLQc0AIRAgASINIAJGDZQDIAIgDWsgACgCACIBaiEWIA0gAWtBBWohFwNAIA0tAAAiFEEgciAUIBRBv39qQf8BcUEaSRtB/wFxIAFB0MKAgABqLQAARw36AgJAIAFBBUcNAEEEIQEM8AILIAFBAWohASANQQFqIg0gAkcNAAsgACAWNgIADJQDCwJAIAEiDSACRw0AQc4AIRAMlAMLAkACQAJAAkAgDS0AACIBQSByIAEgAUG/f2pB/wFxQRpJG0H/AXFBnX9qDhMA/QL9Av0C/QL9Av0C/QL9Av0C/QL9Av0CAf0C/QL9AgID/QILIA1BAWohAUHBACEQDP0CCyANQQFqIQFBwgAhEAz8AgsgDUEBaiEBQcMAIRAM+wILIA1BAWohAUHEACEQDPoCCwJAIAEiASACRg0AIABBjYCAgAA2AgggACABNgIEIAEhAUHFACEQDPoCC0HPACEQDJIDCyAQIQECQAJAIBAtAABBdmoOBAGoAqgCAKgCCyAQQQFqIQELQSchEAz4AgsCQCABIgEgAkcNAEHRACEQDJEDCwJAIAEtAABBIEYNACABIQEMjQELIAFBAWohASAALQAtQQFxRQ3HASABIQEMjAELIAEiFyACRw3IAUHSACEQDI8DC0HTACEQIAEiFCACRg2OAyACIBRrIAAoAgAiAWohFiAUIAFrQQFqIRcDQCAULQAAIAFB1sKAgABqLQAARw3MASABQQFGDccBIAFBAWohASAUQQFqIhQgAkcNAAsgACAWNgIADI4DCwJAIAEiASACRw0AQdUAIRAMjgMLIAEtAABBCkcNzAEgAUEBaiEBDMcBCwJAIAEiASACRw0AQdYAIRAMjQMLAkACQCABLQAAQXZqDgQAzQHNAQHNAQsgAUEBaiEBDMcBCyABQQFqIQFBygAhEAzzAgsgACABIgEgAhCugICAACIQDcsBIAEhAUHNACEQDPICCyAALQApQSJGDYUDDKYCCwJAIAEiASACRw0AQdsAIRAMigMLQQAhFEEBIRdBASEWQQAhEAJAAkACQAJAAkACQAJAAkACQCABLQAAQVBqDgrUAdMBAAECAwQFBgjVAQtBAiEQDAYLQQMhEAwFC0EEIRAMBAtBBSEQDAMLQQYhEAwCC0EHIRAMAQtBCCEQC0EAIRdBACEWQQAhFAzMAQtBCSEQQQEhFEEAIRdBACEWDMsBCwJAIAEiASACRw0AQd0AIRAMiQMLIAEtAABBLkcNzAEgAUEBaiEBDKYCCyABIgEgAkcNzAFB3wAhEAyHAwsCQCABIgEgAkYNACAAQY6AgIAANgIIIAAgATYCBCABIQFB0AAhEAzuAgtB4AAhEAyGAwtB4QAhECABIgEgAkYNhQMgAiABayAAKAIAIhRqIRYgASAUa0EDaiEXA0AgAS0AACAUQeLCgIAAai0AAEcNzQEgFEEDRg3MASAUQQFqIRQgAUEBaiIBIAJHDQALIAAgFjYCAAyFAwtB4gAhECABIgEgAkYNhAMgAiABayAAKAIAIhRqIRYgASAUa0ECaiEXA0AgAS0AACAUQebCgIAAai0AAEcNzAEgFEECRg3OASAUQQFqIRQgAUEBaiIBIAJHDQALIAAgFjYCAAyEAwtB4wAhECABIgEgAkYNgwMgAiABayAAKAIAIhRqIRYgASAUa0EDaiEXA0AgAS0AACAUQenCgIAAai0AAEcNywEgFEEDRg3OASAUQQFqIRQgAUEBaiIBIAJHDQALIAAgFjYCAAyDAwsCQCABIgEgAkcNAEHlACEQDIMDCyAAIAFBAWoiASACEKiAgIAAIhANzQEgASEBQdYAIRAM6QILAkAgASIBIAJGDQADQAJAIAEtAAAiEEEgRg0AAkACQAJAIBBBuH9qDgsAAc8BzwHPAc8BzwHPAc8BzwECzwELIAFBAWohAUHSACEQDO0CCyABQQFqIQFB0wAhEAzsAgsgAUEBaiEBQdQAIRAM6wILIAFBAWoiASACRw0AC0HkACEQDIIDC0HkACEQDIEDCwNAAkAgAS0AAEHwwoCAAGotAAAiEEEBRg0AIBBBfmoOA88B0AHRAdIBCyABQQFqIgEgAkcNAAtB5gAhEAyAAwsCQCABIgEgAkYNACABQQFqIQEMAwtB5wAhEAz/AgsDQAJAIAEtAABB8MSAgABqLQAAIhBBAUYNAAJAIBBBfmoOBNIB0wHUAQDVAQsgASEBQdcAIRAM5wILIAFBAWoiASACRw0AC0HoACEQDP4CCwJAIAEiASACRw0AQekAIRAM/gILAkAgAS0AACIQQXZqDhq6AdUB1QG8AdUB1QHVAdUB1QHVAdUB1QHVAdUB1QHVAdUB1QHVAdUB1QHVAcoB1QHVAQDTAQsgAUEBaiEBC0EGIRAM4wILA0ACQCABLQAAQfDGgIAAai0AAEEBRg0AIAEhAQyeAgsgAUEBaiIBIAJHDQALQeoAIRAM+wILAkAgASIBIAJGDQAgAUEBaiEBDAMLQesAIRAM+gILAkAgASIBIAJHDQBB7AAhEAz6AgsgAUEBaiEBDAELAkAgASIBIAJHDQBB7QAhEAz5AgsgAUEBaiEBC0EEIRAM3gILAkAgASIUIAJHDQBB7gAhEAz3AgsgFCEBAkACQAJAIBQtAABB8MiAgABqLQAAQX9qDgfUAdUB1gEAnAIBAtcBCyAUQQFqIQEMCgsgFEEBaiEBDM0BC0EAIRAgAEEANgIcIABBm5KAgAA2AhAgAEEHNgIMIAAgFEEBajYCFAz2AgsCQANAAkAgAS0AAEHwyICAAGotAAAiEEEERg0AAkACQCAQQX9qDgfSAdMB1AHZAQAEAdkBCyABIQFB2gAhEAzgAgsgAUEBaiEBQdwAIRAM3wILIAFBAWoiASACRw0AC0HvACEQDPYCCyABQQFqIQEMywELAkAgASIUIAJHDQBB8AAhEAz1AgsgFC0AAEEvRw3UASAUQQFqIQEMBgsCQCABIhQgAkcNAEHxACEQDPQCCwJAIBQtAAAiAUEvRw0AIBRBAWohAUHdACEQDNsCCyABQXZqIgRBFksN0wFBASAEdEGJgIACcUUN0wEMygILAkAgASIBIAJGDQAgAUEBaiEBQd4AIRAM2gILQfIAIRAM8gILAkAgASIUIAJHDQBB9AAhEAzyAgsgFCEBAkAgFC0AAEHwzICAAGotAABBf2oOA8kClAIA1AELQeEAIRAM2AILAkAgASIUIAJGDQADQAJAIBQtAABB8MqAgABqLQAAIgFBA0YNAAJAIAFBf2oOAssCANUBCyAUIQFB3wAhEAzaAgsgFEEBaiIUIAJHDQALQfMAIRAM8QILQfMAIRAM8AILAkAgASIBIAJGDQAgAEGPgICAADYCCCAAIAE2AgQgASEBQeAAIRAM1wILQfUAIRAM7wILAkAgASIBIAJHDQBB9gAhEAzvAgsgAEGPgICAADYCCCAAIAE2AgQgASEBC0EDIRAM1AILA0AgAS0AAEEgRw3DAiABQQFqIgEgAkcNAAtB9wAhEAzsAgsCQCABIgEgAkcNAEH4ACEQDOwCCyABLQAAQSBHDc4BIAFBAWohAQzvAQsgACABIgEgAhCsgICAACIQDc4BIAEhAQyOAgsCQCABIgQgAkcNAEH6ACEQDOoCCyAELQAAQcwARw3RASAEQQFqIQFBEyEQDM8BCwJAIAEiBCACRw0AQfsAIRAM6QILIAIgBGsgACgCACIBaiEUIAQgAWtBBWohEANAIAQtAAAgAUHwzoCAAGotAABHDdABIAFBBUYNzgEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBB+wAhEAzoAgsCQCABIgQgAkcNAEH8ACEQDOgCCwJAAkAgBC0AAEG9f2oODADRAdEB0QHRAdEB0QHRAdEB0QHRAQHRAQsgBEEBaiEBQeYAIRAMzwILIARBAWohAUHnACEQDM4CCwJAIAEiBCACRw0AQf0AIRAM5wILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQe3PgIAAai0AAEcNzwEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQf0AIRAM5wILIABBADYCACAQQQFqIQFBECEQDMwBCwJAIAEiBCACRw0AQf4AIRAM5gILIAIgBGsgACgCACIBaiEUIAQgAWtBBWohEAJAA0AgBC0AACABQfbOgIAAai0AAEcNzgEgAUEFRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQf4AIRAM5gILIABBADYCACAQQQFqIQFBFiEQDMsBCwJAIAEiBCACRw0AQf8AIRAM5QILIAIgBGsgACgCACIBaiEUIAQgAWtBA2ohEAJAA0AgBC0AACABQfzOgIAAai0AAEcNzQEgAUEDRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQf8AIRAM5QILIABBADYCACAQQQFqIQFBBSEQDMoBCwJAIAEiBCACRw0AQYABIRAM5AILIAQtAABB2QBHDcsBIARBAWohAUEIIRAMyQELAkAgASIEIAJHDQBBgQEhEAzjAgsCQAJAIAQtAABBsn9qDgMAzAEBzAELIARBAWohAUHrACEQDMoCCyAEQQFqIQFB7AAhEAzJAgsCQCABIgQgAkcNAEGCASEQDOICCwJAAkAgBC0AAEG4f2oOCADLAcsBywHLAcsBywEBywELIARBAWohAUHqACEQDMkCCyAEQQFqIQFB7QAhEAzIAgsCQCABIgQgAkcNAEGDASEQDOECCyACIARrIAAoAgAiAWohECAEIAFrQQJqIRQCQANAIAQtAAAgAUGAz4CAAGotAABHDckBIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgEDYCAEGDASEQDOECC0EAIRAgAEEANgIAIBRBAWohAQzGAQsCQCABIgQgAkcNAEGEASEQDOACCyACIARrIAAoAgAiAWohFCAEIAFrQQRqIRACQANAIAQtAAAgAUGDz4CAAGotAABHDcgBIAFBBEYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGEASEQDOACCyAAQQA2AgAgEEEBaiEBQSMhEAzFAQsCQCABIgQgAkcNAEGFASEQDN8CCwJAAkAgBC0AAEG0f2oOCADIAcgByAHIAcgByAEByAELIARBAWohAUHvACEQDMYCCyAEQQFqIQFB8AAhEAzFAgsCQCABIgQgAkcNAEGGASEQDN4CCyAELQAAQcUARw3FASAEQQFqIQEMgwILAkAgASIEIAJHDQBBhwEhEAzdAgsgAiAEayAAKAIAIgFqIRQgBCABa0EDaiEQAkADQCAELQAAIAFBiM+AgABqLQAARw3FASABQQNGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBhwEhEAzdAgsgAEEANgIAIBBBAWohAUEtIRAMwgELAkAgASIEIAJHDQBBiAEhEAzcAgsgAiAEayAAKAIAIgFqIRQgBCABa0EIaiEQAkADQCAELQAAIAFB0M+AgABqLQAARw3EASABQQhGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBiAEhEAzcAgsgAEEANgIAIBBBAWohAUEpIRAMwQELAkAgASIBIAJHDQBBiQEhEAzbAgtBASEQIAEtAABB3wBHDcABIAFBAWohAQyBAgsCQCABIgQgAkcNAEGKASEQDNoCCyACIARrIAAoAgAiAWohFCAEIAFrQQFqIRADQCAELQAAIAFBjM+AgABqLQAARw3BASABQQFGDa8CIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQYoBIRAM2QILAkAgASIEIAJHDQBBiwEhEAzZAgsgAiAEayAAKAIAIgFqIRQgBCABa0ECaiEQAkADQCAELQAAIAFBjs+AgABqLQAARw3BASABQQJGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBiwEhEAzZAgsgAEEANgIAIBBBAWohAUECIRAMvgELAkAgASIEIAJHDQBBjAEhEAzYAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFB8M+AgABqLQAARw3AASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBjAEhEAzYAgsgAEEANgIAIBBBAWohAUEfIRAMvQELAkAgASIEIAJHDQBBjQEhEAzXAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFB8s+AgABqLQAARw2/ASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBjQEhEAzXAgsgAEEANgIAIBBBAWohAUEJIRAMvAELAkAgASIEIAJHDQBBjgEhEAzWAgsCQAJAIAQtAABBt39qDgcAvwG/Ab8BvwG/AQG/AQsgBEEBaiEBQfgAIRAMvQILIARBAWohAUH5ACEQDLwCCwJAIAEiBCACRw0AQY8BIRAM1QILIAIgBGsgACgCACIBaiEUIAQgAWtBBWohEAJAA0AgBC0AACABQZHPgIAAai0AAEcNvQEgAUEFRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQY8BIRAM1QILIABBADYCACAQQQFqIQFBGCEQDLoBCwJAIAEiBCACRw0AQZABIRAM1AILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQZfPgIAAai0AAEcNvAEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZABIRAM1AILIABBADYCACAQQQFqIQFBFyEQDLkBCwJAIAEiBCACRw0AQZEBIRAM0wILIAIgBGsgACgCACIBaiEUIAQgAWtBBmohEAJAA0AgBC0AACABQZrPgIAAai0AAEcNuwEgAUEGRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZEBIRAM0wILIABBADYCACAQQQFqIQFBFSEQDLgBCwJAIAEiBCACRw0AQZIBIRAM0gILIAIgBGsgACgCACIBaiEUIAQgAWtBBWohEAJAA0AgBC0AACABQaHPgIAAai0AAEcNugEgAUEFRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZIBIRAM0gILIABBADYCACAQQQFqIQFBHiEQDLcBCwJAIAEiBCACRw0AQZMBIRAM0QILIAQtAABBzABHDbgBIARBAWohAUEKIRAMtgELAkAgBCACRw0AQZQBIRAM0AILAkACQCAELQAAQb9/ag4PALkBuQG5AbkBuQG5AbkBuQG5AbkBuQG5AbkBAbkBCyAEQQFqIQFB/gAhEAy3AgsgBEEBaiEBQf8AIRAMtgILAkAgBCACRw0AQZUBIRAMzwILAkACQCAELQAAQb9/ag4DALgBAbgBCyAEQQFqIQFB/QAhEAy2AgsgBEEBaiEEQYABIRAMtQILAkAgBCACRw0AQZYBIRAMzgILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQafPgIAAai0AAEcNtgEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZYBIRAMzgILIABBADYCACAQQQFqIQFBCyEQDLMBCwJAIAQgAkcNAEGXASEQDM0CCwJAAkACQAJAIAQtAABBU2oOIwC4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBuAG4AbgBAbgBuAG4AbgBuAECuAG4AbgBA7gBCyAEQQFqIQFB+wAhEAy2AgsgBEEBaiEBQfwAIRAMtQILIARBAWohBEGBASEQDLQCCyAEQQFqIQRBggEhEAyzAgsCQCAEIAJHDQBBmAEhEAzMAgsgAiAEayAAKAIAIgFqIRQgBCABa0EEaiEQAkADQCAELQAAIAFBqc+AgABqLQAARw20ASABQQRGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBmAEhEAzMAgsgAEEANgIAIBBBAWohAUEZIRAMsQELAkAgBCACRw0AQZkBIRAMywILIAIgBGsgACgCACIBaiEUIAQgAWtBBWohEAJAA0AgBC0AACABQa7PgIAAai0AAEcNswEgAUEFRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZkBIRAMywILIABBADYCACAQQQFqIQFBBiEQDLABCwJAIAQgAkcNAEGaASEQDMoCCyACIARrIAAoAgAiAWohFCAEIAFrQQFqIRACQANAIAQtAAAgAUG0z4CAAGotAABHDbIBIAFBAUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGaASEQDMoCCyAAQQA2AgAgEEEBaiEBQRwhEAyvAQsCQCAEIAJHDQBBmwEhEAzJAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFBts+AgABqLQAARw2xASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBmwEhEAzJAgsgAEEANgIAIBBBAWohAUEnIRAMrgELAkAgBCACRw0AQZwBIRAMyAILAkACQCAELQAAQax/ag4CAAGxAQsgBEEBaiEEQYYBIRAMrwILIARBAWohBEGHASEQDK4CCwJAIAQgAkcNAEGdASEQDMcCCyACIARrIAAoAgAiAWohFCAEIAFrQQFqIRACQANAIAQtAAAgAUG4z4CAAGotAABHDa8BIAFBAUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGdASEQDMcCCyAAQQA2AgAgEEEBaiEBQSYhEAysAQsCQCAEIAJHDQBBngEhEAzGAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFBus+AgABqLQAARw2uASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBngEhEAzGAgsgAEEANgIAIBBBAWohAUEDIRAMqwELAkAgBCACRw0AQZ8BIRAMxQILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQe3PgIAAai0AAEcNrQEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQZ8BIRAMxQILIABBADYCACAQQQFqIQFBDCEQDKoBCwJAIAQgAkcNAEGgASEQDMQCCyACIARrIAAoAgAiAWohFCAEIAFrQQNqIRACQANAIAQtAAAgAUG8z4CAAGotAABHDawBIAFBA0YNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGgASEQDMQCCyAAQQA2AgAgEEEBaiEBQQ0hEAypAQsCQCAEIAJHDQBBoQEhEAzDAgsCQAJAIAQtAABBun9qDgsArAGsAawBrAGsAawBrAGsAawBAawBCyAEQQFqIQRBiwEhEAyqAgsgBEEBaiEEQYwBIRAMqQILAkAgBCACRw0AQaIBIRAMwgILIAQtAABB0ABHDakBIARBAWohBAzpAQsCQCAEIAJHDQBBowEhEAzBAgsCQAJAIAQtAABBt39qDgcBqgGqAaoBqgGqAQCqAQsgBEEBaiEEQY4BIRAMqAILIARBAWohAUEiIRAMpgELAkAgBCACRw0AQaQBIRAMwAILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQcDPgIAAai0AAEcNqAEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQaQBIRAMwAILIABBADYCACAQQQFqIQFBHSEQDKUBCwJAIAQgAkcNAEGlASEQDL8CCwJAAkAgBC0AAEGuf2oOAwCoAQGoAQsgBEEBaiEEQZABIRAMpgILIARBAWohAUEEIRAMpAELAkAgBCACRw0AQaYBIRAMvgILAkACQAJAAkACQCAELQAAQb9/ag4VAKoBqgGqAaoBqgGqAaoBqgGqAaoBAaoBqgECqgGqAQOqAaoBBKoBCyAEQQFqIQRBiAEhEAyoAgsgBEEBaiEEQYkBIRAMpwILIARBAWohBEGKASEQDKYCCyAEQQFqIQRBjwEhEAylAgsgBEEBaiEEQZEBIRAMpAILAkAgBCACRw0AQacBIRAMvQILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQe3PgIAAai0AAEcNpQEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQacBIRAMvQILIABBADYCACAQQQFqIQFBESEQDKIBCwJAIAQgAkcNAEGoASEQDLwCCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUHCz4CAAGotAABHDaQBIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGoASEQDLwCCyAAQQA2AgAgEEEBaiEBQSwhEAyhAQsCQCAEIAJHDQBBqQEhEAy7AgsgAiAEayAAKAIAIgFqIRQgBCABa0EEaiEQAkADQCAELQAAIAFBxc+AgABqLQAARw2jASABQQRGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBqQEhEAy7AgsgAEEANgIAIBBBAWohAUErIRAMoAELAkAgBCACRw0AQaoBIRAMugILIAIgBGsgACgCACIBaiEUIAQgAWtBAmohEAJAA0AgBC0AACABQcrPgIAAai0AAEcNogEgAUECRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQaoBIRAMugILIABBADYCACAQQQFqIQFBFCEQDJ8BCwJAIAQgAkcNAEGrASEQDLkCCwJAAkACQAJAIAQtAABBvn9qDg8AAQKkAaQBpAGkAaQBpAGkAaQBpAGkAaQBA6QBCyAEQQFqIQRBkwEhEAyiAgsgBEEBaiEEQZQBIRAMoQILIARBAWohBEGVASEQDKACCyAEQQFqIQRBlgEhEAyfAgsCQCAEIAJHDQBBrAEhEAy4AgsgBC0AAEHFAEcNnwEgBEEBaiEEDOABCwJAIAQgAkcNAEGtASEQDLcCCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUHNz4CAAGotAABHDZ8BIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEGtASEQDLcCCyAAQQA2AgAgEEEBaiEBQQ4hEAycAQsCQCAEIAJHDQBBrgEhEAy2AgsgBC0AAEHQAEcNnQEgBEEBaiEBQSUhEAybAQsCQCAEIAJHDQBBrwEhEAy1AgsgAiAEayAAKAIAIgFqIRQgBCABa0EIaiEQAkADQCAELQAAIAFB0M+AgABqLQAARw2dASABQQhGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBrwEhEAy1AgsgAEEANgIAIBBBAWohAUEqIRAMmgELAkAgBCACRw0AQbABIRAMtAILAkACQCAELQAAQat/ag4LAJ0BnQGdAZ0BnQGdAZ0BnQGdAQGdAQsgBEEBaiEEQZoBIRAMmwILIARBAWohBEGbASEQDJoCCwJAIAQgAkcNAEGxASEQDLMCCwJAAkAgBC0AAEG/f2oOFACcAZwBnAGcAZwBnAGcAZwBnAGcAZwBnAGcAZwBnAGcAZwBnAEBnAELIARBAWohBEGZASEQDJoCCyAEQQFqIQRBnAEhEAyZAgsCQCAEIAJHDQBBsgEhEAyyAgsgAiAEayAAKAIAIgFqIRQgBCABa0EDaiEQAkADQCAELQAAIAFB2c+AgABqLQAARw2aASABQQNGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBsgEhEAyyAgsgAEEANgIAIBBBAWohAUEhIRAMlwELAkAgBCACRw0AQbMBIRAMsQILIAIgBGsgACgCACIBaiEUIAQgAWtBBmohEAJAA0AgBC0AACABQd3PgIAAai0AAEcNmQEgAUEGRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQbMBIRAMsQILIABBADYCACAQQQFqIQFBGiEQDJYBCwJAIAQgAkcNAEG0ASEQDLACCwJAAkACQCAELQAAQbt/ag4RAJoBmgGaAZoBmgGaAZoBmgGaAQGaAZoBmgGaAZoBApoBCyAEQQFqIQRBnQEhEAyYAgsgBEEBaiEEQZ4BIRAMlwILIARBAWohBEGfASEQDJYCCwJAIAQgAkcNAEG1ASEQDK8CCyACIARrIAAoAgAiAWohFCAEIAFrQQVqIRACQANAIAQtAAAgAUHkz4CAAGotAABHDZcBIAFBBUYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEG1ASEQDK8CCyAAQQA2AgAgEEEBaiEBQSghEAyUAQsCQCAEIAJHDQBBtgEhEAyuAgsgAiAEayAAKAIAIgFqIRQgBCABa0ECaiEQAkADQCAELQAAIAFB6s+AgABqLQAARw2WASABQQJGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBtgEhEAyuAgsgAEEANgIAIBBBAWohAUEHIRAMkwELAkAgBCACRw0AQbcBIRAMrQILAkACQCAELQAAQbt/ag4OAJYBlgGWAZYBlgGWAZYBlgGWAZYBlgGWAQGWAQsgBEEBaiEEQaEBIRAMlAILIARBAWohBEGiASEQDJMCCwJAIAQgAkcNAEG4ASEQDKwCCyACIARrIAAoAgAiAWohFCAEIAFrQQJqIRACQANAIAQtAAAgAUHtz4CAAGotAABHDZQBIAFBAkYNASABQQFqIQEgBEEBaiIEIAJHDQALIAAgFDYCAEG4ASEQDKwCCyAAQQA2AgAgEEEBaiEBQRIhEAyRAQsCQCAEIAJHDQBBuQEhEAyrAgsgAiAEayAAKAIAIgFqIRQgBCABa0EBaiEQAkADQCAELQAAIAFB8M+AgABqLQAARw2TASABQQFGDQEgAUEBaiEBIARBAWoiBCACRw0ACyAAIBQ2AgBBuQEhEAyrAgsgAEEANgIAIBBBAWohAUEgIRAMkAELAkAgBCACRw0AQboBIRAMqgILIAIgBGsgACgCACIBaiEUIAQgAWtBAWohEAJAA0AgBC0AACABQfLPgIAAai0AAEcNkgEgAUEBRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQboBIRAMqgILIABBADYCACAQQQFqIQFBDyEQDI8BCwJAIAQgAkcNAEG7ASEQDKkCCwJAAkAgBC0AAEG3f2oOBwCSAZIBkgGSAZIBAZIBCyAEQQFqIQRBpQEhEAyQAgsgBEEBaiEEQaYBIRAMjwILAkAgBCACRw0AQbwBIRAMqAILIAIgBGsgACgCACIBaiEUIAQgAWtBB2ohEAJAA0AgBC0AACABQfTPgIAAai0AAEcNkAEgAUEHRg0BIAFBAWohASAEQQFqIgQgAkcNAAsgACAUNgIAQbwBIRAMqAILIABBADYCACAQQQFqIQFBGyEQDI0BCwJAIAQgAkcNAEG9ASEQDKcCCwJAAkACQCAELQAAQb5/ag4SAJEBkQGRAZEBkQGRAZEBkQGRAQGRAZEBkQGRAZEBkQECkQELIARBAWohBEGkASEQDI8CCyAEQQFqIQRBpwEhEAyOAgsgBEEBaiEEQagBIRAMjQILAkAgBCACRw0AQb4BIRAMpgILIAQtAABBzgBHDY0BIARBAWohBAzPAQsCQCAEIAJHDQBBvwEhEAylAgsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAELQAAQb9/ag4VAAECA5wBBAUGnAGcAZwBBwgJCgucAQwNDg+cAQsgBEEBaiEBQegAIRAMmgILIARBAWohAUHpACEQDJkCCyAEQQFqIQFB7gAhEAyYAgsgBEEBaiEBQfIAIRAMlwILIARBAWohAUHzACEQDJYCCyAEQQFqIQFB9gAhEAyVAgsgBEEBaiEBQfcAIRAMlAILIARBAWohAUH6ACEQDJMCCyAEQQFqIQRBgwEhEAySAgsgBEEBaiEEQYQBIRAMkQILIARBAWohBEGFASEQDJACCyAEQQFqIQRBkgEhEAyPAgsgBEEBaiEEQZgBIRAMjgILIARBAWohBEGgASEQDI0CCyAEQQFqIQRBowEhEAyMAgsgBEEBaiEEQaoBIRAMiwILAkAgBCACRg0AIABBkICAgAA2AgggACAENgIEQasBIRAMiwILQcABIRAMowILIAAgBSACEKqAgIAAIgENiwEgBSEBDFwLAkAgBiACRg0AIAZBAWohBQyNAQtBwgEhEAyhAgsDQAJAIBAtAABBdmoOBIwBAACPAQALIBBBAWoiECACRw0AC0HDASEQDKACCwJAIAcgAkYNACAAQZGAgIAANgIIIAAgBzYCBCAHIQFBASEQDIcCC0HEASEQDJ8CCwJAIAcgAkcNAEHFASEQDJ8CCwJAAkAgBy0AAEF2ag4EAc4BzgEAzgELIAdBAWohBgyNAQsgB0EBaiEFDIkBCwJAIAcgAkcNAEHGASEQDJ4CCwJAAkAgBy0AAEF2ag4XAY8BjwEBjwGPAY8BjwGPAY8BjwGPAY8BjwGPAY8BjwGPAY8BjwGPAY8BAI8BCyAHQQFqIQcLQbABIRAMhAILAkAgCCACRw0AQcgBIRAMnQILIAgtAABBIEcNjQEgAEEAOwEyIAhBAWohAUGzASEQDIMCCyABIRcCQANAIBciByACRg0BIActAABBUGpB/wFxIhBBCk8NzAECQCAALwEyIhRBmTNLDQAgACAUQQpsIhQ7ATIgEEH//wNzIBRB/v8DcUkNACAHQQFqIRcgACAUIBBqIhA7ATIgEEH//wNxQegHSQ0BCwtBACEQIABBADYCHCAAQcGJgIAANgIQIABBDTYCDCAAIAdBAWo2AhQMnAILQccBIRAMmwILIAAgCCACEK6AgIAAIhBFDcoBIBBBFUcNjAEgAEHIATYCHCAAIAg2AhQgAEHJl4CAADYCECAAQRU2AgxBACEQDJoCCwJAIAkgAkcNAEHMASEQDJoCC0EAIRRBASEXQQEhFkEAIRACQAJAAkACQAJAAkACQAJAAkAgCS0AAEFQag4KlgGVAQABAgMEBQYIlwELQQIhEAwGC0EDIRAMBQtBBCEQDAQLQQUhEAwDC0EGIRAMAgtBByEQDAELQQghEAtBACEXQQAhFkEAIRQMjgELQQkhEEEBIRRBACEXQQAhFgyNAQsCQCAKIAJHDQBBzgEhEAyZAgsgCi0AAEEuRw2OASAKQQFqIQkMygELIAsgAkcNjgFB0AEhEAyXAgsCQCALIAJGDQAgAEGOgICAADYCCCAAIAs2AgRBtwEhEAz+AQtB0QEhEAyWAgsCQCAEIAJHDQBB0gEhEAyWAgsgAiAEayAAKAIAIhBqIRQgBCAQa0EEaiELA0AgBC0AACAQQfzPgIAAai0AAEcNjgEgEEEERg3pASAQQQFqIRAgBEEBaiIEIAJHDQALIAAgFDYCAEHSASEQDJUCCyAAIAwgAhCsgICAACIBDY0BIAwhAQy4AQsCQCAEIAJHDQBB1AEhEAyUAgsgAiAEayAAKAIAIhBqIRQgBCAQa0EBaiEMA0AgBC0AACAQQYHQgIAAai0AAEcNjwEgEEEBRg2OASAQQQFqIRAgBEEBaiIEIAJHDQALIAAgFDYCAEHUASEQDJMCCwJAIAQgAkcNAEHWASEQDJMCCyACIARrIAAoAgAiEGohFCAEIBBrQQJqIQsDQCAELQAAIBBBg9CAgABqLQAARw2OASAQQQJGDZABIBBBAWohECAEQQFqIgQgAkcNAAsgACAUNgIAQdYBIRAMkgILAkAgBCACRw0AQdcBIRAMkgILAkACQCAELQAAQbt/ag4QAI8BjwGPAY8BjwGPAY8BjwGPAY8BjwGPAY8BjwEBjwELIARBAWohBEG7ASEQDPkBCyAEQQFqIQRBvAEhEAz4AQsCQCAEIAJHDQBB2AEhEAyRAgsgBC0AAEHIAEcNjAEgBEEBaiEEDMQBCwJAIAQgAkYNACAAQZCAgIAANgIIIAAgBDYCBEG+ASEQDPcBC0HZASEQDI8CCwJAIAQgAkcNAEHaASEQDI8CCyAELQAAQcgARg3DASAAQQE6ACgMuQELIABBAjoALyAAIAQgAhCmgICAACIQDY0BQcIBIRAM9AELIAAtAChBf2oOArcBuQG4AQsDQAJAIAQtAABBdmoOBACOAY4BAI4BCyAEQQFqIgQgAkcNAAtB3QEhEAyLAgsgAEEAOgAvIAAtAC1BBHFFDYQCCyAAQQA6AC8gAEEBOgA0IAEhAQyMAQsgEEEVRg3aASAAQQA2AhwgACABNgIUIABBp46AgAA2AhAgAEESNgIMQQAhEAyIAgsCQCAAIBAgAhC0gICAACIEDQAgECEBDIECCwJAIARBFUcNACAAQQM2AhwgACAQNgIUIABBsJiAgAA2AhAgAEEVNgIMQQAhEAyIAgsgAEEANgIcIAAgEDYCFCAAQaeOgIAANgIQIABBEjYCDEEAIRAMhwILIBBBFUYN1gEgAEEANgIcIAAgATYCFCAAQdqNgIAANgIQIABBFDYCDEEAIRAMhgILIAAoAgQhFyAAQQA2AgQgECARp2oiFiEBIAAgFyAQIBYgFBsiEBC1gICAACIURQ2NASAAQQc2AhwgACAQNgIUIAAgFDYCDEEAIRAMhQILIAAgAC8BMEGAAXI7ATAgASEBC0EqIRAM6gELIBBBFUYN0QEgAEEANgIcIAAgATYCFCAAQYOMgIAANgIQIABBEzYCDEEAIRAMggILIBBBFUYNzwEgAEEANgIcIAAgATYCFCAAQZqPgIAANgIQIABBIjYCDEEAIRAMgQILIAAoAgQhECAAQQA2AgQCQCAAIBAgARC3gICAACIQDQAgAUEBaiEBDI0BCyAAQQw2AhwgACAQNgIMIAAgAUEBajYCFEEAIRAMgAILIBBBFUYNzAEgAEEANgIcIAAgATYCFCAAQZqPgIAANgIQIABBIjYCDEEAIRAM/wELIAAoAgQhECAAQQA2AgQCQCAAIBAgARC3gICAACIQDQAgAUEBaiEBDIwBCyAAQQ02AhwgACAQNgIMIAAgAUEBajYCFEEAIRAM/gELIBBBFUYNyQEgAEEANgIcIAAgATYCFCAAQcaMgIAANgIQIABBIzYCDEEAIRAM/QELIAAoAgQhECAAQQA2AgQCQCAAIBAgARC5gICAACIQDQAgAUEBaiEBDIsBCyAAQQ42AhwgACAQNgIMIAAgAUEBajYCFEEAIRAM/AELIABBADYCHCAAIAE2AhQgAEHAlYCAADYCECAAQQI2AgxBACEQDPsBCyAQQRVGDcUBIABBADYCHCAAIAE2AhQgAEHGjICAADYCECAAQSM2AgxBACEQDPoBCyAAQRA2AhwgACABNgIUIAAgEDYCDEEAIRAM+QELIAAoAgQhBCAAQQA2AgQCQCAAIAQgARC5gICAACIEDQAgAUEBaiEBDPEBCyAAQRE2AhwgACAENgIMIAAgAUEBajYCFEEAIRAM+AELIBBBFUYNwQEgAEEANgIcIAAgATYCFCAAQcaMgIAANgIQIABBIzYCDEEAIRAM9wELIAAoAgQhECAAQQA2AgQCQCAAIBAgARC5gICAACIQDQAgAUEBaiEBDIgBCyAAQRM2AhwgACAQNgIMIAAgAUEBajYCFEEAIRAM9gELIAAoAgQhBCAAQQA2AgQCQCAAIAQgARC5gICAACIEDQAgAUEBaiEBDO0BCyAAQRQ2AhwgACAENgIMIAAgAUEBajYCFEEAIRAM9QELIBBBFUYNvQEgAEEANgIcIAAgATYCFCAAQZqPgIAANgIQIABBIjYCDEEAIRAM9AELIAAoAgQhECAAQQA2AgQCQCAAIBAgARC3gICAACIQDQAgAUEBaiEBDIYBCyAAQRY2AhwgACAQNgIMIAAgAUEBajYCFEEAIRAM8wELIAAoAgQhBCAAQQA2AgQCQCAAIAQgARC3gICAACIEDQAgAUEBaiEBDOkBCyAAQRc2AhwgACAENgIMIAAgAUEBajYCFEEAIRAM8gELIABBADYCHCAAIAE2AhQgAEHNk4CAADYCECAAQQw2AgxBACEQDPEBC0IBIRELIBBBAWohAQJAIAApAyAiEkL//////////w9WDQAgACASQgSGIBGENwMgIAEhAQyEAQsgAEEANgIcIAAgATYCFCAAQa2JgIAANgIQIABBDDYCDEEAIRAM7wELIABBADYCHCAAIBA2AhQgAEHNk4CAADYCECAAQQw2AgxBACEQDO4BCyAAKAIEIRcgAEEANgIEIBAgEadqIhYhASAAIBcgECAWIBQbIhAQtYCAgAAiFEUNcyAAQQU2AhwgACAQNgIUIAAgFDYCDEEAIRAM7QELIABBADYCHCAAIBA2AhQgAEGqnICAADYCECAAQQ82AgxBACEQDOwBCyAAIBAgAhC0gICAACIBDQEgECEBC0EOIRAM0QELAkAgAUEVRw0AIABBAjYCHCAAIBA2AhQgAEGwmICAADYCECAAQRU2AgxBACEQDOoBCyAAQQA2AhwgACAQNgIUIABBp46AgAA2AhAgAEESNgIMQQAhEAzpAQsgAUEBaiEQAkAgAC8BMCIBQYABcUUNAAJAIAAgECACELuAgIAAIgENACAQIQEMcAsgAUEVRw26ASAAQQU2AhwgACAQNgIUIABB+ZeAgAA2AhAgAEEVNgIMQQAhEAzpAQsCQCABQaAEcUGgBEcNACAALQAtQQJxDQAgAEEANgIcIAAgEDYCFCAAQZaTgIAANgIQIABBBDYCDEEAIRAM6QELIAAgECACEL2AgIAAGiAQIQECQAJAAkACQAJAIAAgECACELOAgIAADhYCAQAEBAQEBAQEBAQEBAQEBAQEBAQDBAsgAEEBOgAuCyAAIAAvATBBwAByOwEwIBAhAQtBJiEQDNEBCyAAQSM2AhwgACAQNgIUIABBpZaAgAA2AhAgAEEVNgIMQQAhEAzpAQsgAEEANgIcIAAgEDYCFCAAQdWLgIAANgIQIABBETYCDEEAIRAM6AELIAAtAC1BAXFFDQFBwwEhEAzOAQsCQCANIAJGDQADQAJAIA0tAABBIEYNACANIQEMxAELIA1BAWoiDSACRw0AC0ElIRAM5wELQSUhEAzmAQsgACgCBCEEIABBADYCBCAAIAQgDRCvgICAACIERQ2tASAAQSY2AhwgACAENgIMIAAgDUEBajYCFEEAIRAM5QELIBBBFUYNqwEgAEEANgIcIAAgATYCFCAAQf2NgIAANgIQIABBHTYCDEEAIRAM5AELIABBJzYCHCAAIAE2AhQgACAQNgIMQQAhEAzjAQsgECEBQQEhFAJAAkACQAJAAkACQAJAIAAtACxBfmoOBwYFBQMBAgAFCyAAIAAvATBBCHI7ATAMAwtBAiEUDAELQQQhFAsgAEEBOgAsIAAgAC8BMCAUcjsBMAsgECEBC0ErIRAMygELIABBADYCHCAAIBA2AhQgAEGrkoCAADYCECAAQQs2AgxBACEQDOIBCyAAQQA2AhwgACABNgIUIABB4Y+AgAA2AhAgAEEKNgIMQQAhEAzhAQsgAEEAOgAsIBAhAQy9AQsgECEBQQEhFAJAAkACQAJAAkAgAC0ALEF7ag4EAwECAAULIAAgAC8BMEEIcjsBMAwDC0ECIRQMAQtBBCEUCyAAQQE6ACwgACAALwEwIBRyOwEwCyAQIQELQSkhEAzFAQsgAEEANgIcIAAgATYCFCAAQfCUgIAANgIQIABBAzYCDEEAIRAM3QELAkAgDi0AAEENRw0AIAAoAgQhASAAQQA2AgQCQCAAIAEgDhCxgICAACIBDQAgDkEBaiEBDHULIABBLDYCHCAAIAE2AgwgACAOQQFqNgIUQQAhEAzdAQsgAC0ALUEBcUUNAUHEASEQDMMBCwJAIA4gAkcNAEEtIRAM3AELAkACQANAAkAgDi0AAEF2ag4EAgAAAwALIA5BAWoiDiACRw0AC0EtIRAM3QELIAAoAgQhASAAQQA2AgQCQCAAIAEgDhCxgICAACIBDQAgDiEBDHQLIABBLDYCHCAAIA42AhQgACABNgIMQQAhEAzcAQsgACgCBCEBIABBADYCBAJAIAAgASAOELGAgIAAIgENACAOQQFqIQEMcwsgAEEsNgIcIAAgATYCDCAAIA5BAWo2AhRBACEQDNsBCyAAKAIEIQQgAEEANgIEIAAgBCAOELGAgIAAIgQNoAEgDiEBDM4BCyAQQSxHDQEgAUEBaiEQQQEhAQJAAkACQAJAAkAgAC0ALEF7ag4EAwECBAALIBAhAQwEC0ECIQEMAQtBBCEBCyAAQQE6ACwgACAALwEwIAFyOwEwIBAhAQwBCyAAIAAvATBBCHI7ATAgECEBC0E5IRAMvwELIABBADoALCABIQELQTQhEAy9AQsgACAALwEwQSByOwEwIAEhAQwCCyAAKAIEIQQgAEEANgIEAkAgACAEIAEQsYCAgAAiBA0AIAEhAQzHAQsgAEE3NgIcIAAgATYCFCAAIAQ2AgxBACEQDNQBCyAAQQg6ACwgASEBC0EwIRAMuQELAkAgAC0AKEEBRg0AIAEhAQwECyAALQAtQQhxRQ2TASABIQEMAwsgAC0AMEEgcQ2UAUHFASEQDLcBCwJAIA8gAkYNAAJAA0ACQCAPLQAAQVBqIgFB/wFxQQpJDQAgDyEBQTUhEAy6AQsgACkDICIRQpmz5syZs+bMGVYNASAAIBFCCn4iETcDICARIAGtQv8BgyISQn+FVg0BIAAgESASfDcDICAPQQFqIg8gAkcNAAtBOSEQDNEBCyAAKAIEIQIgAEEANgIEIAAgAiAPQQFqIgQQsYCAgAAiAg2VASAEIQEMwwELQTkhEAzPAQsCQCAALwEwIgFBCHFFDQAgAC0AKEEBRw0AIAAtAC1BCHFFDZABCyAAIAFB9/sDcUGABHI7ATAgDyEBC0E3IRAMtAELIAAgAC8BMEEQcjsBMAyrAQsgEEEVRg2LASAAQQA2AhwgACABNgIUIABB8I6AgAA2AhAgAEEcNgIMQQAhEAzLAQsgAEHDADYCHCAAIAE2AgwgACANQQFqNgIUQQAhEAzKAQsCQCABLQAAQTpHDQAgACgCBCEQIABBADYCBAJAIAAgECABEK+AgIAAIhANACABQQFqIQEMYwsgAEHDADYCHCAAIBA2AgwgACABQQFqNgIUQQAhEAzKAQsgAEEANgIcIAAgATYCFCAAQbGRgIAANgIQIABBCjYCDEEAIRAMyQELIABBADYCHCAAIAE2AhQgAEGgmYCAADYCECAAQR42AgxBACEQDMgBCyAAQQA2AgALIABBgBI7ASogACAXQQFqIgEgAhCogICAACIQDQEgASEBC0HHACEQDKwBCyAQQRVHDYMBIABB0QA2AhwgACABNgIUIABB45eAgAA2AhAgAEEVNgIMQQAhEAzEAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMXgsgAEHSADYCHCAAIAE2AhQgACAQNgIMQQAhEAzDAQsgAEEANgIcIAAgFDYCFCAAQcGogIAANgIQIABBBzYCDCAAQQA2AgBBACEQDMIBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxdCyAAQdMANgIcIAAgATYCFCAAIBA2AgxBACEQDMEBC0EAIRAgAEEANgIcIAAgATYCFCAAQYCRgIAANgIQIABBCTYCDAzAAQsgEEEVRg19IABBADYCHCAAIAE2AhQgAEGUjYCAADYCECAAQSE2AgxBACEQDL8BC0EBIRZBACEXQQAhFEEBIRALIAAgEDoAKyABQQFqIQECQAJAIAAtAC1BEHENAAJAAkACQCAALQAqDgMBAAIECyAWRQ0DDAILIBQNAQwCCyAXRQ0BCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQrYCAgAAiEA0AIAEhAQxcCyAAQdgANgIcIAAgATYCFCAAIBA2AgxBACEQDL4BCyAAKAIEIQQgAEEANgIEAkAgACAEIAEQrYCAgAAiBA0AIAEhAQytAQsgAEHZADYCHCAAIAE2AhQgACAENgIMQQAhEAy9AQsgACgCBCEEIABBADYCBAJAIAAgBCABEK2AgIAAIgQNACABIQEMqwELIABB2gA2AhwgACABNgIUIAAgBDYCDEEAIRAMvAELIAAoAgQhBCAAQQA2AgQCQCAAIAQgARCtgICAACIEDQAgASEBDKkBCyAAQdwANgIcIAAgATYCFCAAIAQ2AgxBACEQDLsBCwJAIAEtAABBUGoiEEH/AXFBCk8NACAAIBA6ACogAUEBaiEBQc8AIRAMogELIAAoAgQhBCAAQQA2AgQCQCAAIAQgARCtgICAACIEDQAgASEBDKcBCyAAQd4ANgIcIAAgATYCFCAAIAQ2AgxBACEQDLoBCyAAQQA2AgAgF0EBaiEBAkAgAC0AKUEjTw0AIAEhAQxZCyAAQQA2AhwgACABNgIUIABB04mAgAA2AhAgAEEINgIMQQAhEAy5AQsgAEEANgIAC0EAIRAgAEEANgIcIAAgATYCFCAAQZCzgIAANgIQIABBCDYCDAy3AQsgAEEANgIAIBdBAWohAQJAIAAtAClBIUcNACABIQEMVgsgAEEANgIcIAAgATYCFCAAQZuKgIAANgIQIABBCDYCDEEAIRAMtgELIABBADYCACAXQQFqIQECQCAALQApIhBBXWpBC08NACABIQEMVQsCQCAQQQZLDQBBASAQdEHKAHFFDQAgASEBDFULQQAhECAAQQA2AhwgACABNgIUIABB94mAgAA2AhAgAEEINgIMDLUBCyAQQRVGDXEgAEEANgIcIAAgATYCFCAAQbmNgIAANgIQIABBGjYCDEEAIRAMtAELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDFQLIABB5QA2AhwgACABNgIUIAAgEDYCDEEAIRAMswELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDE0LIABB0gA2AhwgACABNgIUIAAgEDYCDEEAIRAMsgELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDE0LIABB0wA2AhwgACABNgIUIAAgEDYCDEEAIRAMsQELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDFELIABB5QA2AhwgACABNgIUIAAgEDYCDEEAIRAMsAELIABBADYCHCAAIAE2AhQgAEHGioCAADYCECAAQQc2AgxBACEQDK8BCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxJCyAAQdIANgIcIAAgATYCFCAAIBA2AgxBACEQDK4BCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxJCyAAQdMANgIcIAAgATYCFCAAIBA2AgxBACEQDK0BCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxNCyAAQeUANgIcIAAgATYCFCAAIBA2AgxBACEQDKwBCyAAQQA2AhwgACABNgIUIABB3IiAgAA2AhAgAEEHNgIMQQAhEAyrAQsgEEE/Rw0BIAFBAWohAQtBBSEQDJABC0EAIRAgAEEANgIcIAAgATYCFCAAQf2SgIAANgIQIABBBzYCDAyoAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMQgsgAEHSADYCHCAAIAE2AhQgACAQNgIMQQAhEAynAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMQgsgAEHTADYCHCAAIAE2AhQgACAQNgIMQQAhEAymAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMRgsgAEHlADYCHCAAIAE2AhQgACAQNgIMQQAhEAylAQsgACgCBCEBIABBADYCBAJAIAAgASAUEKeAgIAAIgENACAUIQEMPwsgAEHSADYCHCAAIBQ2AhQgACABNgIMQQAhEAykAQsgACgCBCEBIABBADYCBAJAIAAgASAUEKeAgIAAIgENACAUIQEMPwsgAEHTADYCHCAAIBQ2AhQgACABNgIMQQAhEAyjAQsgACgCBCEBIABBADYCBAJAIAAgASAUEKeAgIAAIgENACAUIQEMQwsgAEHlADYCHCAAIBQ2AhQgACABNgIMQQAhEAyiAQsgAEEANgIcIAAgFDYCFCAAQcOPgIAANgIQIABBBzYCDEEAIRAMoQELIABBADYCHCAAIAE2AhQgAEHDj4CAADYCECAAQQc2AgxBACEQDKABC0EAIRAgAEEANgIcIAAgFDYCFCAAQYycgIAANgIQIABBBzYCDAyfAQsgAEEANgIcIAAgFDYCFCAAQYycgIAANgIQIABBBzYCDEEAIRAMngELIABBADYCHCAAIBQ2AhQgAEH+kYCAADYCECAAQQc2AgxBACEQDJ0BCyAAQQA2AhwgACABNgIUIABBjpuAgAA2AhAgAEEGNgIMQQAhEAycAQsgEEEVRg1XIABBADYCHCAAIAE2AhQgAEHMjoCAADYCECAAQSA2AgxBACEQDJsBCyAAQQA2AgAgEEEBaiEBQSQhEAsgACAQOgApIAAoAgQhECAAQQA2AgQgACAQIAEQq4CAgAAiEA1UIAEhAQw+CyAAQQA2AgALQQAhECAAQQA2AhwgACAENgIUIABB8ZuAgAA2AhAgAEEGNgIMDJcBCyABQRVGDVAgAEEANgIcIAAgBTYCFCAAQfCMgIAANgIQIABBGzYCDEEAIRAMlgELIAAoAgQhBSAAQQA2AgQgACAFIBAQqYCAgAAiBQ0BIBBBAWohBQtBrQEhEAx7CyAAQcEBNgIcIAAgBTYCDCAAIBBBAWo2AhRBACEQDJMBCyAAKAIEIQYgAEEANgIEIAAgBiAQEKmAgIAAIgYNASAQQQFqIQYLQa4BIRAMeAsgAEHCATYCHCAAIAY2AgwgACAQQQFqNgIUQQAhEAyQAQsgAEEANgIcIAAgBzYCFCAAQZeLgIAANgIQIABBDTYCDEEAIRAMjwELIABBADYCHCAAIAg2AhQgAEHjkICAADYCECAAQQk2AgxBACEQDI4BCyAAQQA2AhwgACAINgIUIABBlI2AgAA2AhAgAEEhNgIMQQAhEAyNAQtBASEWQQAhF0EAIRRBASEQCyAAIBA6ACsgCUEBaiEIAkACQCAALQAtQRBxDQACQAJAAkAgAC0AKg4DAQACBAsgFkUNAwwCCyAUDQEMAgsgF0UNAQsgACgCBCEQIABBADYCBCAAIBAgCBCtgICAACIQRQ09IABByQE2AhwgACAINgIUIAAgEDYCDEEAIRAMjAELIAAoAgQhBCAAQQA2AgQgACAEIAgQrYCAgAAiBEUNdiAAQcoBNgIcIAAgCDYCFCAAIAQ2AgxBACEQDIsBCyAAKAIEIQQgAEEANgIEIAAgBCAJEK2AgIAAIgRFDXQgAEHLATYCHCAAIAk2AhQgACAENgIMQQAhEAyKAQsgACgCBCEEIABBADYCBCAAIAQgChCtgICAACIERQ1yIABBzQE2AhwgACAKNgIUIAAgBDYCDEEAIRAMiQELAkAgCy0AAEFQaiIQQf8BcUEKTw0AIAAgEDoAKiALQQFqIQpBtgEhEAxwCyAAKAIEIQQgAEEANgIEIAAgBCALEK2AgIAAIgRFDXAgAEHPATYCHCAAIAs2AhQgACAENgIMQQAhEAyIAQsgAEEANgIcIAAgBDYCFCAAQZCzgIAANgIQIABBCDYCDCAAQQA2AgBBACEQDIcBCyABQRVGDT8gAEEANgIcIAAgDDYCFCAAQcyOgIAANgIQIABBIDYCDEEAIRAMhgELIABBgQQ7ASggACgCBCEQIABCADcDACAAIBAgDEEBaiIMEKuAgIAAIhBFDTggAEHTATYCHCAAIAw2AhQgACAQNgIMQQAhEAyFAQsgAEEANgIAC0EAIRAgAEEANgIcIAAgBDYCFCAAQdibgIAANgIQIABBCDYCDAyDAQsgACgCBCEQIABCADcDACAAIBAgC0EBaiILEKuAgIAAIhANAUHGASEQDGkLIABBAjoAKAxVCyAAQdUBNgIcIAAgCzYCFCAAIBA2AgxBACEQDIABCyAQQRVGDTcgAEEANgIcIAAgBDYCFCAAQaSMgIAANgIQIABBEDYCDEEAIRAMfwsgAC0ANEEBRw00IAAgBCACELyAgIAAIhBFDTQgEEEVRw01IABB3AE2AhwgACAENgIUIABB1ZaAgAA2AhAgAEEVNgIMQQAhEAx+C0EAIRAgAEEANgIcIABBr4uAgAA2AhAgAEECNgIMIAAgFEEBajYCFAx9C0EAIRAMYwtBAiEQDGILQQ0hEAxhC0EPIRAMYAtBJSEQDF8LQRMhEAxeC0EVIRAMXQtBFiEQDFwLQRchEAxbC0EYIRAMWgtBGSEQDFkLQRohEAxYC0EbIRAMVwtBHCEQDFYLQR0hEAxVC0EfIRAMVAtBISEQDFMLQSMhEAxSC0HGACEQDFELQS4hEAxQC0EvIRAMTwtBOyEQDE4LQT0hEAxNC0HIACEQDEwLQckAIRAMSwtBywAhEAxKC0HMACEQDEkLQc4AIRAMSAtB0QAhEAxHC0HVACEQDEYLQdgAIRAMRQtB2QAhEAxEC0HbACEQDEMLQeQAIRAMQgtB5QAhEAxBC0HxACEQDEALQfQAIRAMPwtBjQEhEAw+C0GXASEQDD0LQakBIRAMPAtBrAEhEAw7C0HAASEQDDoLQbkBIRAMOQtBrwEhEAw4C0GxASEQDDcLQbIBIRAMNgtBtAEhEAw1C0G1ASEQDDQLQboBIRAMMwtBvQEhEAwyC0G/ASEQDDELQcEBIRAMMAsgAEEANgIcIAAgBDYCFCAAQemLgIAANgIQIABBHzYCDEEAIRAMSAsgAEHbATYCHCAAIAQ2AhQgAEH6loCAADYCECAAQRU2AgxBACEQDEcLIABB+AA2AhwgACAMNgIUIABBypiAgAA2AhAgAEEVNgIMQQAhEAxGCyAAQdEANgIcIAAgBTYCFCAAQbCXgIAANgIQIABBFTYCDEEAIRAMRQsgAEH5ADYCHCAAIAE2AhQgACAQNgIMQQAhEAxECyAAQfgANgIcIAAgATYCFCAAQcqYgIAANgIQIABBFTYCDEEAIRAMQwsgAEHkADYCHCAAIAE2AhQgAEHjl4CAADYCECAAQRU2AgxBACEQDEILIABB1wA2AhwgACABNgIUIABByZeAgAA2AhAgAEEVNgIMQQAhEAxBCyAAQQA2AhwgACABNgIUIABBuY2AgAA2AhAgAEEaNgIMQQAhEAxACyAAQcIANgIcIAAgATYCFCAAQeOYgIAANgIQIABBFTYCDEEAIRAMPwsgAEEANgIEIAAgDyAPELGAgIAAIgRFDQEgAEE6NgIcIAAgBDYCDCAAIA9BAWo2AhRBACEQDD4LIAAoAgQhBCAAQQA2AgQCQCAAIAQgARCxgICAACIERQ0AIABBOzYCHCAAIAQ2AgwgACABQQFqNgIUQQAhEAw+CyABQQFqIQEMLQsgD0EBaiEBDC0LIABBADYCHCAAIA82AhQgAEHkkoCAADYCECAAQQQ2AgxBACEQDDsLIABBNjYCHCAAIAQ2AhQgACACNgIMQQAhEAw6CyAAQS42AhwgACAONgIUIAAgBDYCDEEAIRAMOQsgAEHQADYCHCAAIAE2AhQgAEGRmICAADYCECAAQRU2AgxBACEQDDgLIA1BAWohAQwsCyAAQRU2AhwgACABNgIUIABBgpmAgAA2AhAgAEEVNgIMQQAhEAw2CyAAQRs2AhwgACABNgIUIABBkZeAgAA2AhAgAEEVNgIMQQAhEAw1CyAAQQ82AhwgACABNgIUIABBkZeAgAA2AhAgAEEVNgIMQQAhEAw0CyAAQQs2AhwgACABNgIUIABBkZeAgAA2AhAgAEEVNgIMQQAhEAwzCyAAQRo2AhwgACABNgIUIABBgpmAgAA2AhAgAEEVNgIMQQAhEAwyCyAAQQs2AhwgACABNgIUIABBgpmAgAA2AhAgAEEVNgIMQQAhEAwxCyAAQQo2AhwgACABNgIUIABB5JaAgAA2AhAgAEEVNgIMQQAhEAwwCyAAQR42AhwgACABNgIUIABB+ZeAgAA2AhAgAEEVNgIMQQAhEAwvCyAAQQA2AhwgACAQNgIUIABB2o2AgAA2AhAgAEEUNgIMQQAhEAwuCyAAQQQ2AhwgACABNgIUIABBsJiAgAA2AhAgAEEVNgIMQQAhEAwtCyAAQQA2AgAgC0EBaiELC0G4ASEQDBILIABBADYCACAQQQFqIQFB9QAhEAwRCyABIQECQCAALQApQQVHDQBB4wAhEAwRC0HiACEQDBALQQAhECAAQQA2AhwgAEHkkYCAADYCECAAQQc2AgwgACAUQQFqNgIUDCgLIABBADYCACAXQQFqIQFBwAAhEAwOC0EBIQELIAAgAToALCAAQQA2AgAgF0EBaiEBC0EoIRAMCwsgASEBC0E4IRAMCQsCQCABIg8gAkYNAANAAkAgDy0AAEGAvoCAAGotAAAiAUEBRg0AIAFBAkcNAyAPQQFqIQEMBAsgD0EBaiIPIAJHDQALQT4hEAwiC0E+IRAMIQsgAEEAOgAsIA8hAQwBC0ELIRAMBgtBOiEQDAULIAFBAWohAUEtIRAMBAsgACABOgAsIABBADYCACAWQQFqIQFBDCEQDAMLIABBADYCACAXQQFqIQFBCiEQDAILIABBADYCAAsgAEEAOgAsIA0hAUEJIRAMAAsLQQAhECAAQQA2AhwgACALNgIUIABBzZCAgAA2AhAgAEEJNgIMDBcLQQAhECAAQQA2AhwgACAKNgIUIABB6YqAgAA2AhAgAEEJNgIMDBYLQQAhECAAQQA2AhwgACAJNgIUIABBt5CAgAA2AhAgAEEJNgIMDBULQQAhECAAQQA2AhwgACAINgIUIABBnJGAgAA2AhAgAEEJNgIMDBQLQQAhECAAQQA2AhwgACABNgIUIABBzZCAgAA2AhAgAEEJNgIMDBMLQQAhECAAQQA2AhwgACABNgIUIABB6YqAgAA2AhAgAEEJNgIMDBILQQAhECAAQQA2AhwgACABNgIUIABBt5CAgAA2AhAgAEEJNgIMDBELQQAhECAAQQA2AhwgACABNgIUIABBnJGAgAA2AhAgAEEJNgIMDBALQQAhECAAQQA2AhwgACABNgIUIABBl5WAgAA2AhAgAEEPNgIMDA8LQQAhECAAQQA2AhwgACABNgIUIABBl5WAgAA2AhAgAEEPNgIMDA4LQQAhECAAQQA2AhwgACABNgIUIABBwJKAgAA2AhAgAEELNgIMDA0LQQAhECAAQQA2AhwgACABNgIUIABBlYmAgAA2AhAgAEELNgIMDAwLQQAhECAAQQA2AhwgACABNgIUIABB4Y+AgAA2AhAgAEEKNgIMDAsLQQAhECAAQQA2AhwgACABNgIUIABB+4+AgAA2AhAgAEEKNgIMDAoLQQAhECAAQQA2AhwgACABNgIUIABB8ZmAgAA2AhAgAEECNgIMDAkLQQAhECAAQQA2AhwgACABNgIUIABBxJSAgAA2AhAgAEECNgIMDAgLQQAhECAAQQA2AhwgACABNgIUIABB8pWAgAA2AhAgAEECNgIMDAcLIABBAjYCHCAAIAE2AhQgAEGcmoCAADYCECAAQRY2AgxBACEQDAYLQQEhEAwFC0HUACEQIAEiBCACRg0EIANBCGogACAEIAJB2MKAgABBChDFgICAACADKAIMIQQgAygCCA4DAQQCAAsQyoCAgAAACyAAQQA2AhwgAEG1moCAADYCECAAQRc2AgwgACAEQQFqNgIUQQAhEAwCCyAAQQA2AhwgACAENgIUIABBypqAgAA2AhAgAEEJNgIMQQAhEAwBCwJAIAEiBCACRw0AQSIhEAwBCyAAQYmAgIAANgIIIAAgBDYCBEEhIRALIANBEGokgICAgAAgEAuvAQECfyABKAIAIQYCQAJAIAIgA0YNACAEIAZqIQQgBiADaiACayEHIAIgBkF/cyAFaiIGaiEFA0ACQCACLQAAIAQtAABGDQBBAiEEDAMLAkAgBg0AQQAhBCAFIQIMAwsgBkF/aiEGIARBAWohBCACQQFqIgIgA0cNAAsgByEGIAMhAgsgAEEBNgIAIAEgBjYCACAAIAI2AgQPCyABQQA2AgAgACAENgIAIAAgAjYCBAsKACAAEMeAgIAAC/I2AQt/I4CAgIAAQRBrIgEkgICAgAACQEEAKAKg0ICAAA0AQQAQy4CAgABBgNSEgABrIgJB2QBJDQBBACEDAkBBACgC4NOAgAAiBA0AQQBCfzcC7NOAgABBAEKAgISAgIDAADcC5NOAgABBACABQQhqQXBxQdiq1aoFcyIENgLg04CAAEEAQQA2AvTTgIAAQQBBADYCxNOAgAALQQAgAjYCzNOAgABBAEGA1ISAADYCyNOAgABBAEGA1ISAADYCmNCAgABBACAENgKs0ICAAEEAQX82AqjQgIAAA0AgA0HE0ICAAGogA0G40ICAAGoiBDYCACAEIANBsNCAgABqIgU2AgAgA0G80ICAAGogBTYCACADQczQgIAAaiADQcDQgIAAaiIFNgIAIAUgBDYCACADQdTQgIAAaiADQcjQgIAAaiIENgIAIAQgBTYCACADQdDQgIAAaiAENgIAIANBIGoiA0GAAkcNAAtBgNSEgABBeEGA1ISAAGtBD3FBAEGA1ISAAEEIakEPcRsiA2oiBEEEaiACQUhqIgUgA2siA0EBcjYCAEEAQQAoAvDTgIAANgKk0ICAAEEAIAM2ApTQgIAAQQAgBDYCoNCAgABBgNSEgAAgBWpBODYCBAsCQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAEHsAUsNAAJAQQAoAojQgIAAIgZBECAAQRNqQXBxIABBC0kbIgJBA3YiBHYiA0EDcUUNAAJAAkAgA0EBcSAEckEBcyIFQQN0IgRBsNCAgABqIgMgBEG40ICAAGooAgAiBCgCCCICRw0AQQAgBkF+IAV3cTYCiNCAgAAMAQsgAyACNgIIIAIgAzYCDAsgBEEIaiEDIAQgBUEDdCIFQQNyNgIEIAQgBWoiBCAEKAIEQQFyNgIEDAwLIAJBACgCkNCAgAAiB00NAQJAIANFDQACQAJAIAMgBHRBAiAEdCIDQQAgA2tycSIDQQAgA2txQX9qIgMgA0EMdkEQcSIDdiIEQQV2QQhxIgUgA3IgBCAFdiIDQQJ2QQRxIgRyIAMgBHYiA0EBdkECcSIEciADIAR2IgNBAXZBAXEiBHIgAyAEdmoiBEEDdCIDQbDQgIAAaiIFIANBuNCAgABqKAIAIgMoAggiAEcNAEEAIAZBfiAEd3EiBjYCiNCAgAAMAQsgBSAANgIIIAAgBTYCDAsgAyACQQNyNgIEIAMgBEEDdCIEaiAEIAJrIgU2AgAgAyACaiIAIAVBAXI2AgQCQCAHRQ0AIAdBeHFBsNCAgABqIQJBACgCnNCAgAAhBAJAAkAgBkEBIAdBA3Z0IghxDQBBACAGIAhyNgKI0ICAACACIQgMAQsgAigCCCEICyAIIAQ2AgwgAiAENgIIIAQgAjYCDCAEIAg2AggLIANBCGohA0EAIAA2ApzQgIAAQQAgBTYCkNCAgAAMDAtBACgCjNCAgAAiCUUNASAJQQAgCWtxQX9qIgMgA0EMdkEQcSIDdiIEQQV2QQhxIgUgA3IgBCAFdiIDQQJ2QQRxIgRyIAMgBHYiA0EBdkECcSIEciADIAR2IgNBAXZBAXEiBHIgAyAEdmpBAnRBuNKAgABqKAIAIgAoAgRBeHEgAmshBCAAIQUCQANAAkAgBSgCECIDDQAgBUEUaigCACIDRQ0CCyADKAIEQXhxIAJrIgUgBCAFIARJIgUbIQQgAyAAIAUbIQAgAyEFDAALCyAAKAIYIQoCQCAAKAIMIgggAEYNACAAKAIIIgNBACgCmNCAgABJGiAIIAM2AgggAyAINgIMDAsLAkAgAEEUaiIFKAIAIgMNACAAKAIQIgNFDQMgAEEQaiEFCwNAIAUhCyADIghBFGoiBSgCACIDDQAgCEEQaiEFIAgoAhAiAw0ACyALQQA2AgAMCgtBfyECIABBv39LDQAgAEETaiIDQXBxIQJBACgCjNCAgAAiB0UNAEEAIQsCQCACQYACSQ0AQR8hCyACQf///wdLDQAgA0EIdiIDIANBgP4/akEQdkEIcSIDdCIEIARBgOAfakEQdkEEcSIEdCIFIAVBgIAPakEQdkECcSIFdEEPdiADIARyIAVyayIDQQF0IAIgA0EVanZBAXFyQRxqIQsLQQAgAmshBAJAAkACQAJAIAtBAnRBuNKAgABqKAIAIgUNAEEAIQNBACEIDAELQQAhAyACQQBBGSALQQF2ayALQR9GG3QhAEEAIQgDQAJAIAUoAgRBeHEgAmsiBiAETw0AIAYhBCAFIQggBg0AQQAhBCAFIQggBSEDDAMLIAMgBUEUaigCACIGIAYgBSAAQR12QQRxakEQaigCACIFRhsgAyAGGyEDIABBAXQhACAFDQALCwJAIAMgCHINAEEAIQhBAiALdCIDQQAgA2tyIAdxIgNFDQMgA0EAIANrcUF/aiIDIANBDHZBEHEiA3YiBUEFdkEIcSIAIANyIAUgAHYiA0ECdkEEcSIFciADIAV2IgNBAXZBAnEiBXIgAyAFdiIDQQF2QQFxIgVyIAMgBXZqQQJ0QbjSgIAAaigCACEDCyADRQ0BCwNAIAMoAgRBeHEgAmsiBiAESSEAAkAgAygCECIFDQAgA0EUaigCACEFCyAGIAQgABshBCADIAggABshCCAFIQMgBQ0ACwsgCEUNACAEQQAoApDQgIAAIAJrTw0AIAgoAhghCwJAIAgoAgwiACAIRg0AIAgoAggiA0EAKAKY0ICAAEkaIAAgAzYCCCADIAA2AgwMCQsCQCAIQRRqIgUoAgAiAw0AIAgoAhAiA0UNAyAIQRBqIQULA0AgBSEGIAMiAEEUaiIFKAIAIgMNACAAQRBqIQUgACgCECIDDQALIAZBADYCAAwICwJAQQAoApDQgIAAIgMgAkkNAEEAKAKc0ICAACEEAkACQCADIAJrIgVBEEkNACAEIAJqIgAgBUEBcjYCBEEAIAU2ApDQgIAAQQAgADYCnNCAgAAgBCADaiAFNgIAIAQgAkEDcjYCBAwBCyAEIANBA3I2AgQgBCADaiIDIAMoAgRBAXI2AgRBAEEANgKc0ICAAEEAQQA2ApDQgIAACyAEQQhqIQMMCgsCQEEAKAKU0ICAACIAIAJNDQBBACgCoNCAgAAiAyACaiIEIAAgAmsiBUEBcjYCBEEAIAU2ApTQgIAAQQAgBDYCoNCAgAAgAyACQQNyNgIEIANBCGohAwwKCwJAAkBBACgC4NOAgABFDQBBACgC6NOAgAAhBAwBC0EAQn83AuzTgIAAQQBCgICEgICAwAA3AuTTgIAAQQAgAUEMakFwcUHYqtWqBXM2AuDTgIAAQQBBADYC9NOAgABBAEEANgLE04CAAEGAgAQhBAtBACEDAkAgBCACQccAaiIHaiIGQQAgBGsiC3EiCCACSw0AQQBBMDYC+NOAgAAMCgsCQEEAKALA04CAACIDRQ0AAkBBACgCuNOAgAAiBCAIaiIFIARNDQAgBSADTQ0BC0EAIQNBAEEwNgL404CAAAwKC0EALQDE04CAAEEEcQ0EAkACQAJAQQAoAqDQgIAAIgRFDQBByNOAgAAhAwNAAkAgAygCACIFIARLDQAgBSADKAIEaiAESw0DCyADKAIIIgMNAAsLQQAQy4CAgAAiAEF/Rg0FIAghBgJAQQAoAuTTgIAAIgNBf2oiBCAAcUUNACAIIABrIAQgAGpBACADa3FqIQYLIAYgAk0NBSAGQf7///8HSw0FAkBBACgCwNOAgAAiA0UNAEEAKAK404CAACIEIAZqIgUgBE0NBiAFIANLDQYLIAYQy4CAgAAiAyAARw0BDAcLIAYgAGsgC3EiBkH+////B0sNBCAGEMuAgIAAIgAgAygCACADKAIEakYNAyAAIQMLAkAgA0F/Rg0AIAJByABqIAZNDQACQCAHIAZrQQAoAujTgIAAIgRqQQAgBGtxIgRB/v///wdNDQAgAyEADAcLAkAgBBDLgICAAEF/Rg0AIAQgBmohBiADIQAMBwtBACAGaxDLgICAABoMBAsgAyEAIANBf0cNBQwDC0EAIQgMBwtBACEADAULIABBf0cNAgtBAEEAKALE04CAAEEEcjYCxNOAgAALIAhB/v///wdLDQEgCBDLgICAACEAQQAQy4CAgAAhAyAAQX9GDQEgA0F/Rg0BIAAgA08NASADIABrIgYgAkE4ak0NAQtBAEEAKAK404CAACAGaiIDNgK404CAAAJAIANBACgCvNOAgABNDQBBACADNgK804CAAAsCQAJAAkACQEEAKAKg0ICAACIERQ0AQcjTgIAAIQMDQCAAIAMoAgAiBSADKAIEIghqRg0CIAMoAggiAw0ADAMLCwJAAkBBACgCmNCAgAAiA0UNACAAIANPDQELQQAgADYCmNCAgAALQQAhA0EAIAY2AszTgIAAQQAgADYCyNOAgABBAEF/NgKo0ICAAEEAQQAoAuDTgIAANgKs0ICAAEEAQQA2AtTTgIAAA0AgA0HE0ICAAGogA0G40ICAAGoiBDYCACAEIANBsNCAgABqIgU2AgAgA0G80ICAAGogBTYCACADQczQgIAAaiADQcDQgIAAaiIFNgIAIAUgBDYCACADQdTQgIAAaiADQcjQgIAAaiIENgIAIAQgBTYCACADQdDQgIAAaiAENgIAIANBIGoiA0GAAkcNAAsgAEF4IABrQQ9xQQAgAEEIakEPcRsiA2oiBCAGQUhqIgUgA2siA0EBcjYCBEEAQQAoAvDTgIAANgKk0ICAAEEAIAM2ApTQgIAAQQAgBDYCoNCAgAAgACAFakE4NgIEDAILIAMtAAxBCHENACAEIAVJDQAgBCAATw0AIARBeCAEa0EPcUEAIARBCGpBD3EbIgVqIgBBACgClNCAgAAgBmoiCyAFayIFQQFyNgIEIAMgCCAGajYCBEEAQQAoAvDTgIAANgKk0ICAAEEAIAU2ApTQgIAAQQAgADYCoNCAgAAgBCALakE4NgIEDAELAkAgAEEAKAKY0ICAACIITw0AQQAgADYCmNCAgAAgACEICyAAIAZqIQVByNOAgAAhAwJAAkACQAJAAkACQAJAA0AgAygCACAFRg0BIAMoAggiAw0ADAILCyADLQAMQQhxRQ0BC0HI04CAACEDA0ACQCADKAIAIgUgBEsNACAFIAMoAgRqIgUgBEsNAwsgAygCCCEDDAALCyADIAA2AgAgAyADKAIEIAZqNgIEIABBeCAAa0EPcUEAIABBCGpBD3EbaiILIAJBA3I2AgQgBUF4IAVrQQ9xQQAgBUEIakEPcRtqIgYgCyACaiICayEDAkAgBiAERw0AQQAgAjYCoNCAgABBAEEAKAKU0ICAACADaiIDNgKU0ICAACACIANBAXI2AgQMAwsCQCAGQQAoApzQgIAARw0AQQAgAjYCnNCAgABBAEEAKAKQ0ICAACADaiIDNgKQ0ICAACACIANBAXI2AgQgAiADaiADNgIADAMLAkAgBigCBCIEQQNxQQFHDQAgBEF4cSEHAkACQCAEQf8BSw0AIAYoAggiBSAEQQN2IghBA3RBsNCAgABqIgBGGgJAIAYoAgwiBCAFRw0AQQBBACgCiNCAgABBfiAId3E2AojQgIAADAILIAQgAEYaIAQgBTYCCCAFIAQ2AgwMAQsgBigCGCEJAkACQCAGKAIMIgAgBkYNACAGKAIIIgQgCEkaIAAgBDYCCCAEIAA2AgwMAQsCQCAGQRRqIgQoAgAiBQ0AIAZBEGoiBCgCACIFDQBBACEADAELA0AgBCEIIAUiAEEUaiIEKAIAIgUNACAAQRBqIQQgACgCECIFDQALIAhBADYCAAsgCUUNAAJAAkAgBiAGKAIcIgVBAnRBuNKAgABqIgQoAgBHDQAgBCAANgIAIAANAUEAQQAoAozQgIAAQX4gBXdxNgKM0ICAAAwCCyAJQRBBFCAJKAIQIAZGG2ogADYCACAARQ0BCyAAIAk2AhgCQCAGKAIQIgRFDQAgACAENgIQIAQgADYCGAsgBigCFCIERQ0AIABBFGogBDYCACAEIAA2AhgLIAcgA2ohAyAGIAdqIgYoAgQhBAsgBiAEQX5xNgIEIAIgA2ogAzYCACACIANBAXI2AgQCQCADQf8BSw0AIANBeHFBsNCAgABqIQQCQAJAQQAoAojQgIAAIgVBASADQQN2dCIDcQ0AQQAgBSADcjYCiNCAgAAgBCEDDAELIAQoAgghAwsgAyACNgIMIAQgAjYCCCACIAQ2AgwgAiADNgIIDAMLQR8hBAJAIANB////B0sNACADQQh2IgQgBEGA/j9qQRB2QQhxIgR0IgUgBUGA4B9qQRB2QQRxIgV0IgAgAEGAgA9qQRB2QQJxIgB0QQ92IAQgBXIgAHJrIgRBAXQgAyAEQRVqdkEBcXJBHGohBAsgAiAENgIcIAJCADcCECAEQQJ0QbjSgIAAaiEFAkBBACgCjNCAgAAiAEEBIAR0IghxDQAgBSACNgIAQQAgACAIcjYCjNCAgAAgAiAFNgIYIAIgAjYCCCACIAI2AgwMAwsgA0EAQRkgBEEBdmsgBEEfRht0IQQgBSgCACEAA0AgACIFKAIEQXhxIANGDQIgBEEddiEAIARBAXQhBCAFIABBBHFqQRBqIggoAgAiAA0ACyAIIAI2AgAgAiAFNgIYIAIgAjYCDCACIAI2AggMAgsgAEF4IABrQQ9xQQAgAEEIakEPcRsiA2oiCyAGQUhqIgggA2siA0EBcjYCBCAAIAhqQTg2AgQgBCAFQTcgBWtBD3FBACAFQUlqQQ9xG2pBQWoiCCAIIARBEGpJGyIIQSM2AgRBAEEAKALw04CAADYCpNCAgABBACADNgKU0ICAAEEAIAs2AqDQgIAAIAhBEGpBACkC0NOAgAA3AgAgCEEAKQLI04CAADcCCEEAIAhBCGo2AtDTgIAAQQAgBjYCzNOAgABBACAANgLI04CAAEEAQQA2AtTTgIAAIAhBJGohAwNAIANBBzYCACADQQRqIgMgBUkNAAsgCCAERg0DIAggCCgCBEF+cTYCBCAIIAggBGsiADYCACAEIABBAXI2AgQCQCAAQf8BSw0AIABBeHFBsNCAgABqIQMCQAJAQQAoAojQgIAAIgVBASAAQQN2dCIAcQ0AQQAgBSAAcjYCiNCAgAAgAyEFDAELIAMoAgghBQsgBSAENgIMIAMgBDYCCCAEIAM2AgwgBCAFNgIIDAQLQR8hAwJAIABB////B0sNACAAQQh2IgMgA0GA/j9qQRB2QQhxIgN0IgUgBUGA4B9qQRB2QQRxIgV0IgggCEGAgA9qQRB2QQJxIgh0QQ92IAMgBXIgCHJrIgNBAXQgACADQRVqdkEBcXJBHGohAwsgBCADNgIcIARCADcCECADQQJ0QbjSgIAAaiEFAkBBACgCjNCAgAAiCEEBIAN0IgZxDQAgBSAENgIAQQAgCCAGcjYCjNCAgAAgBCAFNgIYIAQgBDYCCCAEIAQ2AgwMBAsgAEEAQRkgA0EBdmsgA0EfRht0IQMgBSgCACEIA0AgCCIFKAIEQXhxIABGDQMgA0EddiEIIANBAXQhAyAFIAhBBHFqQRBqIgYoAgAiCA0ACyAGIAQ2AgAgBCAFNgIYIAQgBDYCDCAEIAQ2AggMAwsgBSgCCCIDIAI2AgwgBSACNgIIIAJBADYCGCACIAU2AgwgAiADNgIICyALQQhqIQMMBQsgBSgCCCIDIAQ2AgwgBSAENgIIIARBADYCGCAEIAU2AgwgBCADNgIIC0EAKAKU0ICAACIDIAJNDQBBACgCoNCAgAAiBCACaiIFIAMgAmsiA0EBcjYCBEEAIAM2ApTQgIAAQQAgBTYCoNCAgAAgBCACQQNyNgIEIARBCGohAwwDC0EAIQNBAEEwNgL404CAAAwCCwJAIAtFDQACQAJAIAggCCgCHCIFQQJ0QbjSgIAAaiIDKAIARw0AIAMgADYCACAADQFBACAHQX4gBXdxIgc2AozQgIAADAILIAtBEEEUIAsoAhAgCEYbaiAANgIAIABFDQELIAAgCzYCGAJAIAgoAhAiA0UNACAAIAM2AhAgAyAANgIYCyAIQRRqKAIAIgNFDQAgAEEUaiADNgIAIAMgADYCGAsCQAJAIARBD0sNACAIIAQgAmoiA0EDcjYCBCAIIANqIgMgAygCBEEBcjYCBAwBCyAIIAJqIgAgBEEBcjYCBCAIIAJBA3I2AgQgACAEaiAENgIAAkAgBEH/AUsNACAEQXhxQbDQgIAAaiEDAkACQEEAKAKI0ICAACIFQQEgBEEDdnQiBHENAEEAIAUgBHI2AojQgIAAIAMhBAwBCyADKAIIIQQLIAQgADYCDCADIAA2AgggACADNgIMIAAgBDYCCAwBC0EfIQMCQCAEQf///wdLDQAgBEEIdiIDIANBgP4/akEQdkEIcSIDdCIFIAVBgOAfakEQdkEEcSIFdCICIAJBgIAPakEQdkECcSICdEEPdiADIAVyIAJyayIDQQF0IAQgA0EVanZBAXFyQRxqIQMLIAAgAzYCHCAAQgA3AhAgA0ECdEG40oCAAGohBQJAIAdBASADdCICcQ0AIAUgADYCAEEAIAcgAnI2AozQgIAAIAAgBTYCGCAAIAA2AgggACAANgIMDAELIARBAEEZIANBAXZrIANBH0YbdCEDIAUoAgAhAgJAA0AgAiIFKAIEQXhxIARGDQEgA0EddiECIANBAXQhAyAFIAJBBHFqQRBqIgYoAgAiAg0ACyAGIAA2AgAgACAFNgIYIAAgADYCDCAAIAA2AggMAQsgBSgCCCIDIAA2AgwgBSAANgIIIABBADYCGCAAIAU2AgwgACADNgIICyAIQQhqIQMMAQsCQCAKRQ0AAkACQCAAIAAoAhwiBUECdEG40oCAAGoiAygCAEcNACADIAg2AgAgCA0BQQAgCUF+IAV3cTYCjNCAgAAMAgsgCkEQQRQgCigCECAARhtqIAg2AgAgCEUNAQsgCCAKNgIYAkAgACgCECIDRQ0AIAggAzYCECADIAg2AhgLIABBFGooAgAiA0UNACAIQRRqIAM2AgAgAyAINgIYCwJAAkAgBEEPSw0AIAAgBCACaiIDQQNyNgIEIAAgA2oiAyADKAIEQQFyNgIEDAELIAAgAmoiBSAEQQFyNgIEIAAgAkEDcjYCBCAFIARqIAQ2AgACQCAHRQ0AIAdBeHFBsNCAgABqIQJBACgCnNCAgAAhAwJAAkBBASAHQQN2dCIIIAZxDQBBACAIIAZyNgKI0ICAACACIQgMAQsgAigCCCEICyAIIAM2AgwgAiADNgIIIAMgAjYCDCADIAg2AggLQQAgBTYCnNCAgABBACAENgKQ0ICAAAsgAEEIaiEDCyABQRBqJICAgIAAIAMLCgAgABDJgICAAAviDQEHfwJAIABFDQAgAEF4aiIBIABBfGooAgAiAkF4cSIAaiEDAkAgAkEBcQ0AIAJBA3FFDQEgASABKAIAIgJrIgFBACgCmNCAgAAiBEkNASACIABqIQACQCABQQAoApzQgIAARg0AAkAgAkH/AUsNACABKAIIIgQgAkEDdiIFQQN0QbDQgIAAaiIGRhoCQCABKAIMIgIgBEcNAEEAQQAoAojQgIAAQX4gBXdxNgKI0ICAAAwDCyACIAZGGiACIAQ2AgggBCACNgIMDAILIAEoAhghBwJAAkAgASgCDCIGIAFGDQAgASgCCCICIARJGiAGIAI2AgggAiAGNgIMDAELAkAgAUEUaiICKAIAIgQNACABQRBqIgIoAgAiBA0AQQAhBgwBCwNAIAIhBSAEIgZBFGoiAigCACIEDQAgBkEQaiECIAYoAhAiBA0ACyAFQQA2AgALIAdFDQECQAJAIAEgASgCHCIEQQJ0QbjSgIAAaiICKAIARw0AIAIgBjYCACAGDQFBAEEAKAKM0ICAAEF+IAR3cTYCjNCAgAAMAwsgB0EQQRQgBygCECABRhtqIAY2AgAgBkUNAgsgBiAHNgIYAkAgASgCECICRQ0AIAYgAjYCECACIAY2AhgLIAEoAhQiAkUNASAGQRRqIAI2AgAgAiAGNgIYDAELIAMoAgQiAkEDcUEDRw0AIAMgAkF+cTYCBEEAIAA2ApDQgIAAIAEgAGogADYCACABIABBAXI2AgQPCyABIANPDQAgAygCBCICQQFxRQ0AAkACQCACQQJxDQACQCADQQAoAqDQgIAARw0AQQAgATYCoNCAgABBAEEAKAKU0ICAACAAaiIANgKU0ICAACABIABBAXI2AgQgAUEAKAKc0ICAAEcNA0EAQQA2ApDQgIAAQQBBADYCnNCAgAAPCwJAIANBACgCnNCAgABHDQBBACABNgKc0ICAAEEAQQAoApDQgIAAIABqIgA2ApDQgIAAIAEgAEEBcjYCBCABIABqIAA2AgAPCyACQXhxIABqIQACQAJAIAJB/wFLDQAgAygCCCIEIAJBA3YiBUEDdEGw0ICAAGoiBkYaAkAgAygCDCICIARHDQBBAEEAKAKI0ICAAEF+IAV3cTYCiNCAgAAMAgsgAiAGRhogAiAENgIIIAQgAjYCDAwBCyADKAIYIQcCQAJAIAMoAgwiBiADRg0AIAMoAggiAkEAKAKY0ICAAEkaIAYgAjYCCCACIAY2AgwMAQsCQCADQRRqIgIoAgAiBA0AIANBEGoiAigCACIEDQBBACEGDAELA0AgAiEFIAQiBkEUaiICKAIAIgQNACAGQRBqIQIgBigCECIEDQALIAVBADYCAAsgB0UNAAJAAkAgAyADKAIcIgRBAnRBuNKAgABqIgIoAgBHDQAgAiAGNgIAIAYNAUEAQQAoAozQgIAAQX4gBHdxNgKM0ICAAAwCCyAHQRBBFCAHKAIQIANGG2ogBjYCACAGRQ0BCyAGIAc2AhgCQCADKAIQIgJFDQAgBiACNgIQIAIgBjYCGAsgAygCFCICRQ0AIAZBFGogAjYCACACIAY2AhgLIAEgAGogADYCACABIABBAXI2AgQgAUEAKAKc0ICAAEcNAUEAIAA2ApDQgIAADwsgAyACQX5xNgIEIAEgAGogADYCACABIABBAXI2AgQLAkAgAEH/AUsNACAAQXhxQbDQgIAAaiECAkACQEEAKAKI0ICAACIEQQEgAEEDdnQiAHENAEEAIAQgAHI2AojQgIAAIAIhAAwBCyACKAIIIQALIAAgATYCDCACIAE2AgggASACNgIMIAEgADYCCA8LQR8hAgJAIABB////B0sNACAAQQh2IgIgAkGA/j9qQRB2QQhxIgJ0IgQgBEGA4B9qQRB2QQRxIgR0IgYgBkGAgA9qQRB2QQJxIgZ0QQ92IAIgBHIgBnJrIgJBAXQgACACQRVqdkEBcXJBHGohAgsgASACNgIcIAFCADcCECACQQJ0QbjSgIAAaiEEAkACQEEAKAKM0ICAACIGQQEgAnQiA3ENACAEIAE2AgBBACAGIANyNgKM0ICAACABIAQ2AhggASABNgIIIAEgATYCDAwBCyAAQQBBGSACQQF2ayACQR9GG3QhAiAEKAIAIQYCQANAIAYiBCgCBEF4cSAARg0BIAJBHXYhBiACQQF0IQIgBCAGQQRxakEQaiIDKAIAIgYNAAsgAyABNgIAIAEgBDYCGCABIAE2AgwgASABNgIIDAELIAQoAggiACABNgIMIAQgATYCCCABQQA2AhggASAENgIMIAEgADYCCAtBAEEAKAKo0ICAAEF/aiIBQX8gARs2AqjQgIAACwsEAAAAC04AAkAgAA0APwBBEHQPCwJAIABB//8DcQ0AIABBf0wNAAJAIABBEHZAACIAQX9HDQBBAEEwNgL404CAAEF/DwsgAEEQdA8LEMqAgIAAAAvyAgIDfwF+AkAgAkUNACAAIAE6AAAgAiAAaiIDQX9qIAE6AAAgAkEDSQ0AIAAgAToAAiAAIAE6AAEgA0F9aiABOgAAIANBfmogAToAACACQQdJDQAgACABOgADIANBfGogAToAACACQQlJDQAgAEEAIABrQQNxIgRqIgMgAUH/AXFBgYKECGwiATYCACADIAIgBGtBfHEiBGoiAkF8aiABNgIAIARBCUkNACADIAE2AgggAyABNgIEIAJBeGogATYCACACQXRqIAE2AgAgBEEZSQ0AIAMgATYCGCADIAE2AhQgAyABNgIQIAMgATYCDCACQXBqIAE2AgAgAkFsaiABNgIAIAJBaGogATYCACACQWRqIAE2AgAgBCADQQRxQRhyIgVrIgJBIEkNACABrUKBgICAEH4hBiADIAVqIQEDQCABIAY3AxggASAGNwMQIAEgBjcDCCABIAY3AwAgAUEgaiEBIAJBYGoiAkEfSw0ACwsgAAsLjkgBAEGACAuGSAEAAAACAAAAAwAAAAAAAAAAAAAABAAAAAUAAAAAAAAAAAAAAAYAAAAHAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsb3NlZWVwLWFsaXZlAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgAAAAAAAAAAAAAAAAAAAHJhbnNmZXItZW5jb2RpbmdwZ3JhZGUNCg0KDQpTTQ0KDQpUVFAvQ0UvVFNQLwAAAAAAAAAAAAAAAAECAAEDAAAAAAAAAAAAAAAAAAAAAAAABAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAABAAACAAAAAAAAAAAAAAAAAAAAAAAAAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAgAAAAACAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==' 62523 62524 62525 /***/ }), 62526 62527 /***/ 41891: 62528 /***/ ((__unused_webpack_module, exports) => { 62529 62530 "use strict"; 62531 62532 Object.defineProperty(exports, "__esModule", ({ value: true })); 62533 exports.enumToMap = void 0; 62534 function enumToMap(obj) { 62535 const res = {}; 62536 Object.keys(obj).forEach((key) => { 62537 const value = obj[key]; 62538 if (typeof value === 'number') { 62539 res[key] = value; 62540 } 62541 }); 62542 return res; 62543 } 62544 exports.enumToMap = enumToMap; 62545 //# sourceMappingURL=utils.js.map 62546 62547 /***/ }), 62548 62549 /***/ 66771: 62550 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 62551 62552 "use strict"; 62553 62554 62555 const { kClients } = __nccwpck_require__(72785) 62556 const Agent = __nccwpck_require__(7890) 62557 const { 62558 kAgent, 62559 kMockAgentSet, 62560 kMockAgentGet, 62561 kDispatches, 62562 kIsMockActive, 62563 kNetConnect, 62564 kGetNetConnect, 62565 kOptions, 62566 kFactory 62567 } = __nccwpck_require__(24347) 62568 const MockClient = __nccwpck_require__(58687) 62569 const MockPool = __nccwpck_require__(26193) 62570 const { matchValue, buildMockOptions } = __nccwpck_require__(79323) 62571 const { InvalidArgumentError, UndiciError } = __nccwpck_require__(48045) 62572 const Dispatcher = __nccwpck_require__(60412) 62573 const Pluralizer = __nccwpck_require__(78891) 62574 const PendingInterceptorsFormatter = __nccwpck_require__(86823) 62575 62576 class FakeWeakRef { 62577 constructor (value) { 62578 this.value = value 62579 } 62580 62581 deref () { 62582 return this.value 62583 } 62584 } 62585 62586 class MockAgent extends Dispatcher { 62587 constructor (opts) { 62588 super(opts) 62589 62590 this[kNetConnect] = true 62591 this[kIsMockActive] = true 62592 62593 // Instantiate Agent and encapsulate 62594 if ((opts && opts.agent && typeof opts.agent.dispatch !== 'function')) { 62595 throw new InvalidArgumentError('Argument opts.agent must implement Agent') 62596 } 62597 const agent = opts && opts.agent ? opts.agent : new Agent(opts) 62598 this[kAgent] = agent 62599 62600 this[kClients] = agent[kClients] 62601 this[kOptions] = buildMockOptions(opts) 62602 } 62603 62604 get (origin) { 62605 let dispatcher = this[kMockAgentGet](origin) 62606 62607 if (!dispatcher) { 62608 dispatcher = this[kFactory](origin) 62609 this[kMockAgentSet](origin, dispatcher) 62610 } 62611 return dispatcher 62612 } 62613 62614 dispatch (opts, handler) { 62615 // Call MockAgent.get to perform additional setup before dispatching as normal 62616 this.get(opts.origin) 62617 return this[kAgent].dispatch(opts, handler) 62618 } 62619 62620 async close () { 62621 await this[kAgent].close() 62622 this[kClients].clear() 62623 } 62624 62625 deactivate () { 62626 this[kIsMockActive] = false 62627 } 62628 62629 activate () { 62630 this[kIsMockActive] = true 62631 } 62632 62633 enableNetConnect (matcher) { 62634 if (typeof matcher === 'string' || typeof matcher === 'function' || matcher instanceof RegExp) { 62635 if (Array.isArray(this[kNetConnect])) { 62636 this[kNetConnect].push(matcher) 62637 } else { 62638 this[kNetConnect] = [matcher] 62639 } 62640 } else if (typeof matcher === 'undefined') { 62641 this[kNetConnect] = true 62642 } else { 62643 throw new InvalidArgumentError('Unsupported matcher. Must be one of String|Function|RegExp.') 62644 } 62645 } 62646 62647 disableNetConnect () { 62648 this[kNetConnect] = false 62649 } 62650 62651 // This is required to bypass issues caused by using global symbols - see: 62652 // https://github.com/nodejs/undici/issues/1447 62653 get isMockActive () { 62654 return this[kIsMockActive] 62655 } 62656 62657 [kMockAgentSet] (origin, dispatcher) { 62658 this[kClients].set(origin, new FakeWeakRef(dispatcher)) 62659 } 62660 62661 [kFactory] (origin) { 62662 const mockOptions = Object.assign({ agent: this }, this[kOptions]) 62663 return this[kOptions] && this[kOptions].connections === 1 62664 ? new MockClient(origin, mockOptions) 62665 : new MockPool(origin, mockOptions) 62666 } 62667 62668 [kMockAgentGet] (origin) { 62669 // First check if we can immediately find it 62670 const ref = this[kClients].get(origin) 62671 if (ref) { 62672 return ref.deref() 62673 } 62674 62675 // If the origin is not a string create a dummy parent pool and return to user 62676 if (typeof origin !== 'string') { 62677 const dispatcher = this[kFactory]('http://localhost:9999') 62678 this[kMockAgentSet](origin, dispatcher) 62679 return dispatcher 62680 } 62681 62682 // If we match, create a pool and assign the same dispatches 62683 for (const [keyMatcher, nonExplicitRef] of Array.from(this[kClients])) { 62684 const nonExplicitDispatcher = nonExplicitRef.deref() 62685 if (nonExplicitDispatcher && typeof keyMatcher !== 'string' && matchValue(keyMatcher, origin)) { 62686 const dispatcher = this[kFactory](origin) 62687 this[kMockAgentSet](origin, dispatcher) 62688 dispatcher[kDispatches] = nonExplicitDispatcher[kDispatches] 62689 return dispatcher 62690 } 62691 } 62692 } 62693 62694 [kGetNetConnect] () { 62695 return this[kNetConnect] 62696 } 62697 62698 pendingInterceptors () { 62699 const mockAgentClients = this[kClients] 62700 62701 return Array.from(mockAgentClients.entries()) 62702 .flatMap(([origin, scope]) => scope.deref()[kDispatches].map(dispatch => ({ ...dispatch, origin }))) 62703 .filter(({ pending }) => pending) 62704 } 62705 62706 assertNoPendingInterceptors ({ pendingInterceptorsFormatter = new PendingInterceptorsFormatter() } = {}) { 62707 const pending = this.pendingInterceptors() 62708 62709 if (pending.length === 0) { 62710 return 62711 } 62712 62713 const pluralizer = new Pluralizer('interceptor', 'interceptors').pluralize(pending.length) 62714 62715 throw new UndiciError(` 62716 ${pluralizer.count} ${pluralizer.noun} ${pluralizer.is} pending: 62717 62718 ${pendingInterceptorsFormatter.format(pending)} 62719 `.trim()) 62720 } 62721 } 62722 62723 module.exports = MockAgent 62724 62725 62726 /***/ }), 62727 62728 /***/ 58687: 62729 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 62730 62731 "use strict"; 62732 62733 62734 const { promisify } = __nccwpck_require__(73837) 62735 const Client = __nccwpck_require__(33598) 62736 const { buildMockDispatch } = __nccwpck_require__(79323) 62737 const { 62738 kDispatches, 62739 kMockAgent, 62740 kClose, 62741 kOriginalClose, 62742 kOrigin, 62743 kOriginalDispatch, 62744 kConnected 62745 } = __nccwpck_require__(24347) 62746 const { MockInterceptor } = __nccwpck_require__(90410) 62747 const Symbols = __nccwpck_require__(72785) 62748 const { InvalidArgumentError } = __nccwpck_require__(48045) 62749 62750 /** 62751 * MockClient provides an API that extends the Client to influence the mockDispatches. 62752 */ 62753 class MockClient extends Client { 62754 constructor (origin, opts) { 62755 super(origin, opts) 62756 62757 if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') { 62758 throw new InvalidArgumentError('Argument opts.agent must implement Agent') 62759 } 62760 62761 this[kMockAgent] = opts.agent 62762 this[kOrigin] = origin 62763 this[kDispatches] = [] 62764 this[kConnected] = 1 62765 this[kOriginalDispatch] = this.dispatch 62766 this[kOriginalClose] = this.close.bind(this) 62767 62768 this.dispatch = buildMockDispatch.call(this) 62769 this.close = this[kClose] 62770 } 62771 62772 get [Symbols.kConnected] () { 62773 return this[kConnected] 62774 } 62775 62776 /** 62777 * Sets up the base interceptor for mocking replies from undici. 62778 */ 62779 intercept (opts) { 62780 return new MockInterceptor(opts, this[kDispatches]) 62781 } 62782 62783 async [kClose] () { 62784 await promisify(this[kOriginalClose])() 62785 this[kConnected] = 0 62786 this[kMockAgent][Symbols.kClients].delete(this[kOrigin]) 62787 } 62788 } 62789 62790 module.exports = MockClient 62791 62792 62793 /***/ }), 62794 62795 /***/ 50888: 62796 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 62797 62798 "use strict"; 62799 62800 62801 const { UndiciError } = __nccwpck_require__(48045) 62802 62803 class MockNotMatchedError extends UndiciError { 62804 constructor (message) { 62805 super(message) 62806 Error.captureStackTrace(this, MockNotMatchedError) 62807 this.name = 'MockNotMatchedError' 62808 this.message = message || 'The request does not match any registered mock dispatches' 62809 this.code = 'UND_MOCK_ERR_MOCK_NOT_MATCHED' 62810 } 62811 } 62812 62813 module.exports = { 62814 MockNotMatchedError 62815 } 62816 62817 62818 /***/ }), 62819 62820 /***/ 90410: 62821 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 62822 62823 "use strict"; 62824 62825 62826 const { getResponseData, buildKey, addMockDispatch } = __nccwpck_require__(79323) 62827 const { 62828 kDispatches, 62829 kDispatchKey, 62830 kDefaultHeaders, 62831 kDefaultTrailers, 62832 kContentLength, 62833 kMockDispatch 62834 } = __nccwpck_require__(24347) 62835 const { InvalidArgumentError } = __nccwpck_require__(48045) 62836 const { buildURL } = __nccwpck_require__(83983) 62837 62838 /** 62839 * Defines the scope API for an interceptor reply 62840 */ 62841 class MockScope { 62842 constructor (mockDispatch) { 62843 this[kMockDispatch] = mockDispatch 62844 } 62845 62846 /** 62847 * Delay a reply by a set amount in ms. 62848 */ 62849 delay (waitInMs) { 62850 if (typeof waitInMs !== 'number' || !Number.isInteger(waitInMs) || waitInMs <= 0) { 62851 throw new InvalidArgumentError('waitInMs must be a valid integer > 0') 62852 } 62853 62854 this[kMockDispatch].delay = waitInMs 62855 return this 62856 } 62857 62858 /** 62859 * For a defined reply, never mark as consumed. 62860 */ 62861 persist () { 62862 this[kMockDispatch].persist = true 62863 return this 62864 } 62865 62866 /** 62867 * Allow one to define a reply for a set amount of matching requests. 62868 */ 62869 times (repeatTimes) { 62870 if (typeof repeatTimes !== 'number' || !Number.isInteger(repeatTimes) || repeatTimes <= 0) { 62871 throw new InvalidArgumentError('repeatTimes must be a valid integer > 0') 62872 } 62873 62874 this[kMockDispatch].times = repeatTimes 62875 return this 62876 } 62877 } 62878 62879 /** 62880 * Defines an interceptor for a Mock 62881 */ 62882 class MockInterceptor { 62883 constructor (opts, mockDispatches) { 62884 if (typeof opts !== 'object') { 62885 throw new InvalidArgumentError('opts must be an object') 62886 } 62887 if (typeof opts.path === 'undefined') { 62888 throw new InvalidArgumentError('opts.path must be defined') 62889 } 62890 if (typeof opts.method === 'undefined') { 62891 opts.method = 'GET' 62892 } 62893 // See https://github.com/nodejs/undici/issues/1245 62894 // As per RFC 3986, clients are not supposed to send URI 62895 // fragments to servers when they retrieve a document, 62896 if (typeof opts.path === 'string') { 62897 if (opts.query) { 62898 opts.path = buildURL(opts.path, opts.query) 62899 } else { 62900 // Matches https://github.com/nodejs/undici/blob/main/lib/fetch/index.js#L1811 62901 const parsedURL = new URL(opts.path, 'data://') 62902 opts.path = parsedURL.pathname + parsedURL.search 62903 } 62904 } 62905 if (typeof opts.method === 'string') { 62906 opts.method = opts.method.toUpperCase() 62907 } 62908 62909 this[kDispatchKey] = buildKey(opts) 62910 this[kDispatches] = mockDispatches 62911 this[kDefaultHeaders] = {} 62912 this[kDefaultTrailers] = {} 62913 this[kContentLength] = false 62914 } 62915 62916 createMockScopeDispatchData (statusCode, data, responseOptions = {}) { 62917 const responseData = getResponseData(data) 62918 const contentLength = this[kContentLength] ? { 'content-length': responseData.length } : {} 62919 const headers = { ...this[kDefaultHeaders], ...contentLength, ...responseOptions.headers } 62920 const trailers = { ...this[kDefaultTrailers], ...responseOptions.trailers } 62921 62922 return { statusCode, data, headers, trailers } 62923 } 62924 62925 validateReplyParameters (statusCode, data, responseOptions) { 62926 if (typeof statusCode === 'undefined') { 62927 throw new InvalidArgumentError('statusCode must be defined') 62928 } 62929 if (typeof data === 'undefined') { 62930 throw new InvalidArgumentError('data must be defined') 62931 } 62932 if (typeof responseOptions !== 'object') { 62933 throw new InvalidArgumentError('responseOptions must be an object') 62934 } 62935 } 62936 62937 /** 62938 * Mock an undici request with a defined reply. 62939 */ 62940 reply (replyData) { 62941 // Values of reply aren't available right now as they 62942 // can only be available when the reply callback is invoked. 62943 if (typeof replyData === 'function') { 62944 // We'll first wrap the provided callback in another function, 62945 // this function will properly resolve the data from the callback 62946 // when invoked. 62947 const wrappedDefaultsCallback = (opts) => { 62948 // Our reply options callback contains the parameter for statusCode, data and options. 62949 const resolvedData = replyData(opts) 62950 62951 // Check if it is in the right format 62952 if (typeof resolvedData !== 'object') { 62953 throw new InvalidArgumentError('reply options callback must return an object') 62954 } 62955 62956 const { statusCode, data = '', responseOptions = {} } = resolvedData 62957 this.validateReplyParameters(statusCode, data, responseOptions) 62958 // Since the values can be obtained immediately we return them 62959 // from this higher order function that will be resolved later. 62960 return { 62961 ...this.createMockScopeDispatchData(statusCode, data, responseOptions) 62962 } 62963 } 62964 62965 // Add usual dispatch data, but this time set the data parameter to function that will eventually provide data. 62966 const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback) 62967 return new MockScope(newMockDispatch) 62968 } 62969 62970 // We can have either one or three parameters, if we get here, 62971 // we should have 1-3 parameters. So we spread the arguments of 62972 // this function to obtain the parameters, since replyData will always 62973 // just be the statusCode. 62974 const [statusCode, data = '', responseOptions = {}] = [...arguments] 62975 this.validateReplyParameters(statusCode, data, responseOptions) 62976 62977 // Send in-already provided data like usual 62978 const dispatchData = this.createMockScopeDispatchData(statusCode, data, responseOptions) 62979 const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], dispatchData) 62980 return new MockScope(newMockDispatch) 62981 } 62982 62983 /** 62984 * Mock an undici request with a defined error. 62985 */ 62986 replyWithError (error) { 62987 if (typeof error === 'undefined') { 62988 throw new InvalidArgumentError('error must be defined') 62989 } 62990 62991 const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], { error }) 62992 return new MockScope(newMockDispatch) 62993 } 62994 62995 /** 62996 * Set default reply headers on the interceptor for subsequent replies 62997 */ 62998 defaultReplyHeaders (headers) { 62999 if (typeof headers === 'undefined') { 63000 throw new InvalidArgumentError('headers must be defined') 63001 } 63002 63003 this[kDefaultHeaders] = headers 63004 return this 63005 } 63006 63007 /** 63008 * Set default reply trailers on the interceptor for subsequent replies 63009 */ 63010 defaultReplyTrailers (trailers) { 63011 if (typeof trailers === 'undefined') { 63012 throw new InvalidArgumentError('trailers must be defined') 63013 } 63014 63015 this[kDefaultTrailers] = trailers 63016 return this 63017 } 63018 63019 /** 63020 * Set reply content length header for replies on the interceptor 63021 */ 63022 replyContentLength () { 63023 this[kContentLength] = true 63024 return this 63025 } 63026 } 63027 63028 module.exports.MockInterceptor = MockInterceptor 63029 module.exports.MockScope = MockScope 63030 63031 63032 /***/ }), 63033 63034 /***/ 26193: 63035 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 63036 63037 "use strict"; 63038 63039 63040 const { promisify } = __nccwpck_require__(73837) 63041 const Pool = __nccwpck_require__(4634) 63042 const { buildMockDispatch } = __nccwpck_require__(79323) 63043 const { 63044 kDispatches, 63045 kMockAgent, 63046 kClose, 63047 kOriginalClose, 63048 kOrigin, 63049 kOriginalDispatch, 63050 kConnected 63051 } = __nccwpck_require__(24347) 63052 const { MockInterceptor } = __nccwpck_require__(90410) 63053 const Symbols = __nccwpck_require__(72785) 63054 const { InvalidArgumentError } = __nccwpck_require__(48045) 63055 63056 /** 63057 * MockPool provides an API that extends the Pool to influence the mockDispatches. 63058 */ 63059 class MockPool extends Pool { 63060 constructor (origin, opts) { 63061 super(origin, opts) 63062 63063 if (!opts || !opts.agent || typeof opts.agent.dispatch !== 'function') { 63064 throw new InvalidArgumentError('Argument opts.agent must implement Agent') 63065 } 63066 63067 this[kMockAgent] = opts.agent 63068 this[kOrigin] = origin 63069 this[kDispatches] = [] 63070 this[kConnected] = 1 63071 this[kOriginalDispatch] = this.dispatch 63072 this[kOriginalClose] = this.close.bind(this) 63073 63074 this.dispatch = buildMockDispatch.call(this) 63075 this.close = this[kClose] 63076 } 63077 63078 get [Symbols.kConnected] () { 63079 return this[kConnected] 63080 } 63081 63082 /** 63083 * Sets up the base interceptor for mocking replies from undici. 63084 */ 63085 intercept (opts) { 63086 return new MockInterceptor(opts, this[kDispatches]) 63087 } 63088 63089 async [kClose] () { 63090 await promisify(this[kOriginalClose])() 63091 this[kConnected] = 0 63092 this[kMockAgent][Symbols.kClients].delete(this[kOrigin]) 63093 } 63094 } 63095 63096 module.exports = MockPool 63097 63098 63099 /***/ }), 63100 63101 /***/ 24347: 63102 /***/ ((module) => { 63103 63104 "use strict"; 63105 63106 63107 module.exports = { 63108 kAgent: Symbol('agent'), 63109 kOptions: Symbol('options'), 63110 kFactory: Symbol('factory'), 63111 kDispatches: Symbol('dispatches'), 63112 kDispatchKey: Symbol('dispatch key'), 63113 kDefaultHeaders: Symbol('default headers'), 63114 kDefaultTrailers: Symbol('default trailers'), 63115 kContentLength: Symbol('content length'), 63116 kMockAgent: Symbol('mock agent'), 63117 kMockAgentSet: Symbol('mock agent set'), 63118 kMockAgentGet: Symbol('mock agent get'), 63119 kMockDispatch: Symbol('mock dispatch'), 63120 kClose: Symbol('close'), 63121 kOriginalClose: Symbol('original agent close'), 63122 kOrigin: Symbol('origin'), 63123 kIsMockActive: Symbol('is mock active'), 63124 kNetConnect: Symbol('net connect'), 63125 kGetNetConnect: Symbol('get net connect'), 63126 kConnected: Symbol('connected') 63127 } 63128 63129 63130 /***/ }), 63131 63132 /***/ 79323: 63133 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 63134 63135 "use strict"; 63136 63137 63138 const { MockNotMatchedError } = __nccwpck_require__(50888) 63139 const { 63140 kDispatches, 63141 kMockAgent, 63142 kOriginalDispatch, 63143 kOrigin, 63144 kGetNetConnect 63145 } = __nccwpck_require__(24347) 63146 const { buildURL, nop } = __nccwpck_require__(83983) 63147 const { STATUS_CODES } = __nccwpck_require__(13685) 63148 const { 63149 types: { 63150 isPromise 63151 } 63152 } = __nccwpck_require__(73837) 63153 63154 function matchValue (match, value) { 63155 if (typeof match === 'string') { 63156 return match === value 63157 } 63158 if (match instanceof RegExp) { 63159 return match.test(value) 63160 } 63161 if (typeof match === 'function') { 63162 return match(value) === true 63163 } 63164 return false 63165 } 63166 63167 function lowerCaseEntries (headers) { 63168 return Object.fromEntries( 63169 Object.entries(headers).map(([headerName, headerValue]) => { 63170 return [headerName.toLocaleLowerCase(), headerValue] 63171 }) 63172 ) 63173 } 63174 63175 /** 63176 * @param {import('../../index').Headers|string[]|Record<string, string>} headers 63177 * @param {string} key 63178 */ 63179 function getHeaderByName (headers, key) { 63180 if (Array.isArray(headers)) { 63181 for (let i = 0; i < headers.length; i += 2) { 63182 if (headers[i].toLocaleLowerCase() === key.toLocaleLowerCase()) { 63183 return headers[i + 1] 63184 } 63185 } 63186 63187 return undefined 63188 } else if (typeof headers.get === 'function') { 63189 return headers.get(key) 63190 } else { 63191 return lowerCaseEntries(headers)[key.toLocaleLowerCase()] 63192 } 63193 } 63194 63195 /** @param {string[]} headers */ 63196 function buildHeadersFromArray (headers) { // fetch HeadersList 63197 const clone = headers.slice() 63198 const entries = [] 63199 for (let index = 0; index < clone.length; index += 2) { 63200 entries.push([clone[index], clone[index + 1]]) 63201 } 63202 return Object.fromEntries(entries) 63203 } 63204 63205 function matchHeaders (mockDispatch, headers) { 63206 if (typeof mockDispatch.headers === 'function') { 63207 if (Array.isArray(headers)) { // fetch HeadersList 63208 headers = buildHeadersFromArray(headers) 63209 } 63210 return mockDispatch.headers(headers ? lowerCaseEntries(headers) : {}) 63211 } 63212 if (typeof mockDispatch.headers === 'undefined') { 63213 return true 63214 } 63215 if (typeof headers !== 'object' || typeof mockDispatch.headers !== 'object') { 63216 return false 63217 } 63218 63219 for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch.headers)) { 63220 const headerValue = getHeaderByName(headers, matchHeaderName) 63221 63222 if (!matchValue(matchHeaderValue, headerValue)) { 63223 return false 63224 } 63225 } 63226 return true 63227 } 63228 63229 function safeUrl (path) { 63230 if (typeof path !== 'string') { 63231 return path 63232 } 63233 63234 const pathSegments = path.split('?') 63235 63236 if (pathSegments.length !== 2) { 63237 return path 63238 } 63239 63240 const qp = new URLSearchParams(pathSegments.pop()) 63241 qp.sort() 63242 return [...pathSegments, qp.toString()].join('?') 63243 } 63244 63245 function matchKey (mockDispatch, { path, method, body, headers }) { 63246 const pathMatch = matchValue(mockDispatch.path, path) 63247 const methodMatch = matchValue(mockDispatch.method, method) 63248 const bodyMatch = typeof mockDispatch.body !== 'undefined' ? matchValue(mockDispatch.body, body) : true 63249 const headersMatch = matchHeaders(mockDispatch, headers) 63250 return pathMatch && methodMatch && bodyMatch && headersMatch 63251 } 63252 63253 function getResponseData (data) { 63254 if (Buffer.isBuffer(data)) { 63255 return data 63256 } else if (typeof data === 'object') { 63257 return JSON.stringify(data) 63258 } else { 63259 return data.toString() 63260 } 63261 } 63262 63263 function getMockDispatch (mockDispatches, key) { 63264 const basePath = key.query ? buildURL(key.path, key.query) : key.path 63265 const resolvedPath = typeof basePath === 'string' ? safeUrl(basePath) : basePath 63266 63267 // Match path 63268 let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path }) => matchValue(safeUrl(path), resolvedPath)) 63269 if (matchedMockDispatches.length === 0) { 63270 throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`) 63271 } 63272 63273 // Match method 63274 matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method)) 63275 if (matchedMockDispatches.length === 0) { 63276 throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}'`) 63277 } 63278 63279 // Match body 63280 matchedMockDispatches = matchedMockDispatches.filter(({ body }) => typeof body !== 'undefined' ? matchValue(body, key.body) : true) 63281 if (matchedMockDispatches.length === 0) { 63282 throw new MockNotMatchedError(`Mock dispatch not matched for body '${key.body}'`) 63283 } 63284 63285 // Match headers 63286 matchedMockDispatches = matchedMockDispatches.filter((mockDispatch) => matchHeaders(mockDispatch, key.headers)) 63287 if (matchedMockDispatches.length === 0) { 63288 throw new MockNotMatchedError(`Mock dispatch not matched for headers '${typeof key.headers === 'object' ? JSON.stringify(key.headers) : key.headers}'`) 63289 } 63290 63291 return matchedMockDispatches[0] 63292 } 63293 63294 function addMockDispatch (mockDispatches, key, data) { 63295 const baseData = { timesInvoked: 0, times: 1, persist: false, consumed: false } 63296 const replyData = typeof data === 'function' ? { callback: data } : { ...data } 63297 const newMockDispatch = { ...baseData, ...key, pending: true, data: { error: null, ...replyData } } 63298 mockDispatches.push(newMockDispatch) 63299 return newMockDispatch 63300 } 63301 63302 function deleteMockDispatch (mockDispatches, key) { 63303 const index = mockDispatches.findIndex(dispatch => { 63304 if (!dispatch.consumed) { 63305 return false 63306 } 63307 return matchKey(dispatch, key) 63308 }) 63309 if (index !== -1) { 63310 mockDispatches.splice(index, 1) 63311 } 63312 } 63313 63314 function buildKey (opts) { 63315 const { path, method, body, headers, query } = opts 63316 return { 63317 path, 63318 method, 63319 body, 63320 headers, 63321 query 63322 } 63323 } 63324 63325 function generateKeyValues (data) { 63326 return Object.entries(data).reduce((keyValuePairs, [key, value]) => [ 63327 ...keyValuePairs, 63328 Buffer.from(`${key}`), 63329 Array.isArray(value) ? value.map(x => Buffer.from(`${x}`)) : Buffer.from(`${value}`) 63330 ], []) 63331 } 63332 63333 /** 63334 * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Status 63335 * @param {number} statusCode 63336 */ 63337 function getStatusText (statusCode) { 63338 return STATUS_CODES[statusCode] || 'unknown' 63339 } 63340 63341 async function getResponse (body) { 63342 const buffers = [] 63343 for await (const data of body) { 63344 buffers.push(data) 63345 } 63346 return Buffer.concat(buffers).toString('utf8') 63347 } 63348 63349 /** 63350 * Mock dispatch function used to simulate undici dispatches 63351 */ 63352 function mockDispatch (opts, handler) { 63353 // Get mock dispatch from built key 63354 const key = buildKey(opts) 63355 const mockDispatch = getMockDispatch(this[kDispatches], key) 63356 63357 mockDispatch.timesInvoked++ 63358 63359 // Here's where we resolve a callback if a callback is present for the dispatch data. 63360 if (mockDispatch.data.callback) { 63361 mockDispatch.data = { ...mockDispatch.data, ...mockDispatch.data.callback(opts) } 63362 } 63363 63364 // Parse mockDispatch data 63365 const { data: { statusCode, data, headers, trailers, error }, delay, persist } = mockDispatch 63366 const { timesInvoked, times } = mockDispatch 63367 63368 // If it's used up and not persistent, mark as consumed 63369 mockDispatch.consumed = !persist && timesInvoked >= times 63370 mockDispatch.pending = timesInvoked < times 63371 63372 // If specified, trigger dispatch error 63373 if (error !== null) { 63374 deleteMockDispatch(this[kDispatches], key) 63375 handler.onError(error) 63376 return true 63377 } 63378 63379 // Handle the request with a delay if necessary 63380 if (typeof delay === 'number' && delay > 0) { 63381 setTimeout(() => { 63382 handleReply(this[kDispatches]) 63383 }, delay) 63384 } else { 63385 handleReply(this[kDispatches]) 63386 } 63387 63388 function handleReply (mockDispatches, _data = data) { 63389 // fetch's HeadersList is a 1D string array 63390 const optsHeaders = Array.isArray(opts.headers) 63391 ? buildHeadersFromArray(opts.headers) 63392 : opts.headers 63393 const body = typeof _data === 'function' 63394 ? _data({ ...opts, headers: optsHeaders }) 63395 : _data 63396 63397 // util.types.isPromise is likely needed for jest. 63398 if (isPromise(body)) { 63399 // If handleReply is asynchronous, throwing an error 63400 // in the callback will reject the promise, rather than 63401 // synchronously throw the error, which breaks some tests. 63402 // Rather, we wait for the callback to resolve if it is a 63403 // promise, and then re-run handleReply with the new body. 63404 body.then((newData) => handleReply(mockDispatches, newData)) 63405 return 63406 } 63407 63408 const responseData = getResponseData(body) 63409 const responseHeaders = generateKeyValues(headers) 63410 const responseTrailers = generateKeyValues(trailers) 63411 63412 handler.abort = nop 63413 handler.onHeaders(statusCode, responseHeaders, resume, getStatusText(statusCode)) 63414 handler.onData(Buffer.from(responseData)) 63415 handler.onComplete(responseTrailers) 63416 deleteMockDispatch(mockDispatches, key) 63417 } 63418 63419 function resume () {} 63420 63421 return true 63422 } 63423 63424 function buildMockDispatch () { 63425 const agent = this[kMockAgent] 63426 const origin = this[kOrigin] 63427 const originalDispatch = this[kOriginalDispatch] 63428 63429 return function dispatch (opts, handler) { 63430 if (agent.isMockActive) { 63431 try { 63432 mockDispatch.call(this, opts, handler) 63433 } catch (error) { 63434 if (error instanceof MockNotMatchedError) { 63435 const netConnect = agent[kGetNetConnect]() 63436 if (netConnect === false) { 63437 throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)`) 63438 } 63439 if (checkNetConnect(netConnect, origin)) { 63440 originalDispatch.call(this, opts, handler) 63441 } else { 63442 throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)`) 63443 } 63444 } else { 63445 throw error 63446 } 63447 } 63448 } else { 63449 originalDispatch.call(this, opts, handler) 63450 } 63451 } 63452 } 63453 63454 function checkNetConnect (netConnect, origin) { 63455 const url = new URL(origin) 63456 if (netConnect === true) { 63457 return true 63458 } else if (Array.isArray(netConnect) && netConnect.some((matcher) => matchValue(matcher, url.host))) { 63459 return true 63460 } 63461 return false 63462 } 63463 63464 function buildMockOptions (opts) { 63465 if (opts) { 63466 const { agent, ...mockOptions } = opts 63467 return mockOptions 63468 } 63469 } 63470 63471 module.exports = { 63472 getResponseData, 63473 getMockDispatch, 63474 addMockDispatch, 63475 deleteMockDispatch, 63476 buildKey, 63477 generateKeyValues, 63478 matchValue, 63479 getResponse, 63480 getStatusText, 63481 mockDispatch, 63482 buildMockDispatch, 63483 checkNetConnect, 63484 buildMockOptions, 63485 getHeaderByName 63486 } 63487 63488 63489 /***/ }), 63490 63491 /***/ 86823: 63492 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 63493 63494 "use strict"; 63495 63496 63497 const { Transform } = __nccwpck_require__(12781) 63498 const { Console } = __nccwpck_require__(96206) 63499 63500 /** 63501 * Gets the output of `console.table(…)` as a string. 63502 */ 63503 module.exports = class PendingInterceptorsFormatter { 63504 constructor ({ disableColors } = {}) { 63505 this.transform = new Transform({ 63506 transform (chunk, _enc, cb) { 63507 cb(null, chunk) 63508 } 63509 }) 63510 63511 this.logger = new Console({ 63512 stdout: this.transform, 63513 inspectOptions: { 63514 colors: !disableColors && !process.env.CI 63515 } 63516 }) 63517 } 63518 63519 format (pendingInterceptors) { 63520 const withPrettyHeaders = pendingInterceptors.map( 63521 ({ method, path, data: { statusCode }, persist, times, timesInvoked, origin }) => ({ 63522 Method: method, 63523 Origin: origin, 63524 Path: path, 63525 'Status code': statusCode, 63526 Persistent: persist ? '✅' : '❌', 63527 Invocations: timesInvoked, 63528 Remaining: persist ? Infinity : times - timesInvoked 63529 })) 63530 63531 this.logger.table(withPrettyHeaders) 63532 return this.transform.read().toString() 63533 } 63534 } 63535 63536 63537 /***/ }), 63538 63539 /***/ 78891: 63540 /***/ ((module) => { 63541 63542 "use strict"; 63543 63544 63545 const singulars = { 63546 pronoun: 'it', 63547 is: 'is', 63548 was: 'was', 63549 this: 'this' 63550 } 63551 63552 const plurals = { 63553 pronoun: 'they', 63554 is: 'are', 63555 was: 'were', 63556 this: 'these' 63557 } 63558 63559 module.exports = class Pluralizer { 63560 constructor (singular, plural) { 63561 this.singular = singular 63562 this.plural = plural 63563 } 63564 63565 pluralize (count) { 63566 const one = count === 1 63567 const keys = one ? singulars : plurals 63568 const noun = one ? this.singular : this.plural 63569 return { ...keys, count, noun } 63570 } 63571 } 63572 63573 63574 /***/ }), 63575 63576 /***/ 68266: 63577 /***/ ((module) => { 63578 63579 "use strict"; 63580 /* eslint-disable */ 63581 63582 63583 63584 // Extracted from node/lib/internal/fixed_queue.js 63585 63586 // Currently optimal queue size, tested on V8 6.0 - 6.6. Must be power of two. 63587 const kSize = 2048; 63588 const kMask = kSize - 1; 63589 63590 // The FixedQueue is implemented as a singly-linked list of fixed-size 63591 // circular buffers. It looks something like this: 63592 // 63593 // head tail 63594 // | | 63595 // v v 63596 // +-----------+ <-----\ +-----------+ <------\ +-----------+ 63597 // | [null] | \----- | next | \------- | next | 63598 // +-----------+ +-----------+ +-----------+ 63599 // | item | <-- bottom | item | <-- bottom | [empty] | 63600 // | item | | item | | [empty] | 63601 // | item | | item | | [empty] | 63602 // | item | | item | | [empty] | 63603 // | item | | item | bottom --> | item | 63604 // | item | | item | | item | 63605 // | ... | | ... | | ... | 63606 // | item | | item | | item | 63607 // | item | | item | | item | 63608 // | [empty] | <-- top | item | | item | 63609 // | [empty] | | item | | item | 63610 // | [empty] | | [empty] | <-- top top --> | [empty] | 63611 // +-----------+ +-----------+ +-----------+ 63612 // 63613 // Or, if there is only one circular buffer, it looks something 63614 // like either of these: 63615 // 63616 // head tail head tail 63617 // | | | | 63618 // v v v v 63619 // +-----------+ +-----------+ 63620 // | [null] | | [null] | 63621 // +-----------+ +-----------+ 63622 // | [empty] | | item | 63623 // | [empty] | | item | 63624 // | item | <-- bottom top --> | [empty] | 63625 // | item | | [empty] | 63626 // | [empty] | <-- top bottom --> | item | 63627 // | [empty] | | item | 63628 // +-----------+ +-----------+ 63629 // 63630 // Adding a value means moving `top` forward by one, removing means 63631 // moving `bottom` forward by one. After reaching the end, the queue 63632 // wraps around. 63633 // 63634 // When `top === bottom` the current queue is empty and when 63635 // `top + 1 === bottom` it's full. This wastes a single space of storage 63636 // but allows much quicker checks. 63637 63638 class FixedCircularBuffer { 63639 constructor() { 63640 this.bottom = 0; 63641 this.top = 0; 63642 this.list = new Array(kSize); 63643 this.next = null; 63644 } 63645 63646 isEmpty() { 63647 return this.top === this.bottom; 63648 } 63649 63650 isFull() { 63651 return ((this.top + 1) & kMask) === this.bottom; 63652 } 63653 63654 push(data) { 63655 this.list[this.top] = data; 63656 this.top = (this.top + 1) & kMask; 63657 } 63658 63659 shift() { 63660 const nextItem = this.list[this.bottom]; 63661 if (nextItem === undefined) 63662 return null; 63663 this.list[this.bottom] = undefined; 63664 this.bottom = (this.bottom + 1) & kMask; 63665 return nextItem; 63666 } 63667 } 63668 63669 module.exports = class FixedQueue { 63670 constructor() { 63671 this.head = this.tail = new FixedCircularBuffer(); 63672 } 63673 63674 isEmpty() { 63675 return this.head.isEmpty(); 63676 } 63677 63678 push(data) { 63679 if (this.head.isFull()) { 63680 // Head is full: Creates a new queue, sets the old queue's `.next` to it, 63681 // and sets it as the new main queue. 63682 this.head = this.head.next = new FixedCircularBuffer(); 63683 } 63684 this.head.push(data); 63685 } 63686 63687 shift() { 63688 const tail = this.tail; 63689 const next = tail.shift(); 63690 if (tail.isEmpty() && tail.next !== null) { 63691 // If there is another queue, it forms the new tail. 63692 this.tail = tail.next; 63693 } 63694 return next; 63695 } 63696 }; 63697 63698 63699 /***/ }), 63700 63701 /***/ 73198: 63702 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 63703 63704 "use strict"; 63705 63706 63707 const DispatcherBase = __nccwpck_require__(74839) 63708 const FixedQueue = __nccwpck_require__(68266) 63709 const { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = __nccwpck_require__(72785) 63710 const PoolStats = __nccwpck_require__(39689) 63711 63712 const kClients = Symbol('clients') 63713 const kNeedDrain = Symbol('needDrain') 63714 const kQueue = Symbol('queue') 63715 const kClosedResolve = Symbol('closed resolve') 63716 const kOnDrain = Symbol('onDrain') 63717 const kOnConnect = Symbol('onConnect') 63718 const kOnDisconnect = Symbol('onDisconnect') 63719 const kOnConnectionError = Symbol('onConnectionError') 63720 const kGetDispatcher = Symbol('get dispatcher') 63721 const kAddClient = Symbol('add client') 63722 const kRemoveClient = Symbol('remove client') 63723 const kStats = Symbol('stats') 63724 63725 class PoolBase extends DispatcherBase { 63726 constructor () { 63727 super() 63728 63729 this[kQueue] = new FixedQueue() 63730 this[kClients] = [] 63731 this[kQueued] = 0 63732 63733 const pool = this 63734 63735 this[kOnDrain] = function onDrain (origin, targets) { 63736 const queue = pool[kQueue] 63737 63738 let needDrain = false 63739 63740 while (!needDrain) { 63741 const item = queue.shift() 63742 if (!item) { 63743 break 63744 } 63745 pool[kQueued]-- 63746 needDrain = !this.dispatch(item.opts, item.handler) 63747 } 63748 63749 this[kNeedDrain] = needDrain 63750 63751 if (!this[kNeedDrain] && pool[kNeedDrain]) { 63752 pool[kNeedDrain] = false 63753 pool.emit('drain', origin, [pool, ...targets]) 63754 } 63755 63756 if (pool[kClosedResolve] && queue.isEmpty()) { 63757 Promise 63758 .all(pool[kClients].map(c => c.close())) 63759 .then(pool[kClosedResolve]) 63760 } 63761 } 63762 63763 this[kOnConnect] = (origin, targets) => { 63764 pool.emit('connect', origin, [pool, ...targets]) 63765 } 63766 63767 this[kOnDisconnect] = (origin, targets, err) => { 63768 pool.emit('disconnect', origin, [pool, ...targets], err) 63769 } 63770 63771 this[kOnConnectionError] = (origin, targets, err) => { 63772 pool.emit('connectionError', origin, [pool, ...targets], err) 63773 } 63774 63775 this[kStats] = new PoolStats(this) 63776 } 63777 63778 get [kBusy] () { 63779 return this[kNeedDrain] 63780 } 63781 63782 get [kConnected] () { 63783 return this[kClients].filter(client => client[kConnected]).length 63784 } 63785 63786 get [kFree] () { 63787 return this[kClients].filter(client => client[kConnected] && !client[kNeedDrain]).length 63788 } 63789 63790 get [kPending] () { 63791 let ret = this[kQueued] 63792 for (const { [kPending]: pending } of this[kClients]) { 63793 ret += pending 63794 } 63795 return ret 63796 } 63797 63798 get [kRunning] () { 63799 let ret = 0 63800 for (const { [kRunning]: running } of this[kClients]) { 63801 ret += running 63802 } 63803 return ret 63804 } 63805 63806 get [kSize] () { 63807 let ret = this[kQueued] 63808 for (const { [kSize]: size } of this[kClients]) { 63809 ret += size 63810 } 63811 return ret 63812 } 63813 63814 get stats () { 63815 return this[kStats] 63816 } 63817 63818 async [kClose] () { 63819 if (this[kQueue].isEmpty()) { 63820 return Promise.all(this[kClients].map(c => c.close())) 63821 } else { 63822 return new Promise((resolve) => { 63823 this[kClosedResolve] = resolve 63824 }) 63825 } 63826 } 63827 63828 async [kDestroy] (err) { 63829 while (true) { 63830 const item = this[kQueue].shift() 63831 if (!item) { 63832 break 63833 } 63834 item.handler.onError(err) 63835 } 63836 63837 return Promise.all(this[kClients].map(c => c.destroy(err))) 63838 } 63839 63840 [kDispatch] (opts, handler) { 63841 const dispatcher = this[kGetDispatcher]() 63842 63843 if (!dispatcher) { 63844 this[kNeedDrain] = true 63845 this[kQueue].push({ opts, handler }) 63846 this[kQueued]++ 63847 } else if (!dispatcher.dispatch(opts, handler)) { 63848 dispatcher[kNeedDrain] = true 63849 this[kNeedDrain] = !this[kGetDispatcher]() 63850 } 63851 63852 return !this[kNeedDrain] 63853 } 63854 63855 [kAddClient] (client) { 63856 client 63857 .on('drain', this[kOnDrain]) 63858 .on('connect', this[kOnConnect]) 63859 .on('disconnect', this[kOnDisconnect]) 63860 .on('connectionError', this[kOnConnectionError]) 63861 63862 this[kClients].push(client) 63863 63864 if (this[kNeedDrain]) { 63865 process.nextTick(() => { 63866 if (this[kNeedDrain]) { 63867 this[kOnDrain](client[kUrl], [this, client]) 63868 } 63869 }) 63870 } 63871 63872 return this 63873 } 63874 63875 [kRemoveClient] (client) { 63876 client.close(() => { 63877 const idx = this[kClients].indexOf(client) 63878 if (idx !== -1) { 63879 this[kClients].splice(idx, 1) 63880 } 63881 }) 63882 63883 this[kNeedDrain] = this[kClients].some(dispatcher => ( 63884 !dispatcher[kNeedDrain] && 63885 dispatcher.closed !== true && 63886 dispatcher.destroyed !== true 63887 )) 63888 } 63889 } 63890 63891 module.exports = { 63892 PoolBase, 63893 kClients, 63894 kNeedDrain, 63895 kAddClient, 63896 kRemoveClient, 63897 kGetDispatcher 63898 } 63899 63900 63901 /***/ }), 63902 63903 /***/ 39689: 63904 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 63905 63906 const { kFree, kConnected, kPending, kQueued, kRunning, kSize } = __nccwpck_require__(72785) 63907 const kPool = Symbol('pool') 63908 63909 class PoolStats { 63910 constructor (pool) { 63911 this[kPool] = pool 63912 } 63913 63914 get connected () { 63915 return this[kPool][kConnected] 63916 } 63917 63918 get free () { 63919 return this[kPool][kFree] 63920 } 63921 63922 get pending () { 63923 return this[kPool][kPending] 63924 } 63925 63926 get queued () { 63927 return this[kPool][kQueued] 63928 } 63929 63930 get running () { 63931 return this[kPool][kRunning] 63932 } 63933 63934 get size () { 63935 return this[kPool][kSize] 63936 } 63937 } 63938 63939 module.exports = PoolStats 63940 63941 63942 /***/ }), 63943 63944 /***/ 4634: 63945 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 63946 63947 "use strict"; 63948 63949 63950 const { 63951 PoolBase, 63952 kClients, 63953 kNeedDrain, 63954 kAddClient, 63955 kGetDispatcher 63956 } = __nccwpck_require__(73198) 63957 const Client = __nccwpck_require__(33598) 63958 const { 63959 InvalidArgumentError 63960 } = __nccwpck_require__(48045) 63961 const util = __nccwpck_require__(83983) 63962 const { kUrl, kInterceptors } = __nccwpck_require__(72785) 63963 const buildConnector = __nccwpck_require__(82067) 63964 63965 const kOptions = Symbol('options') 63966 const kConnections = Symbol('connections') 63967 const kFactory = Symbol('factory') 63968 63969 function defaultFactory (origin, opts) { 63970 return new Client(origin, opts) 63971 } 63972 63973 class Pool extends PoolBase { 63974 constructor (origin, { 63975 connections, 63976 factory = defaultFactory, 63977 connect, 63978 connectTimeout, 63979 tls, 63980 maxCachedSessions, 63981 socketPath, 63982 autoSelectFamily, 63983 autoSelectFamilyAttemptTimeout, 63984 allowH2, 63985 ...options 63986 } = {}) { 63987 super() 63988 63989 if (connections != null && (!Number.isFinite(connections) || connections < 0)) { 63990 throw new InvalidArgumentError('invalid connections') 63991 } 63992 63993 if (typeof factory !== 'function') { 63994 throw new InvalidArgumentError('factory must be a function.') 63995 } 63996 63997 if (connect != null && typeof connect !== 'function' && typeof connect !== 'object') { 63998 throw new InvalidArgumentError('connect must be a function or an object') 63999 } 64000 64001 if (typeof connect !== 'function') { 64002 connect = buildConnector({ 64003 ...tls, 64004 maxCachedSessions, 64005 allowH2, 64006 socketPath, 64007 timeout: connectTimeout, 64008 ...(util.nodeHasAutoSelectFamily && autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined), 64009 ...connect 64010 }) 64011 } 64012 64013 this[kInterceptors] = options.interceptors && options.interceptors.Pool && Array.isArray(options.interceptors.Pool) 64014 ? options.interceptors.Pool 64015 : [] 64016 this[kConnections] = connections || null 64017 this[kUrl] = util.parseOrigin(origin) 64018 this[kOptions] = { ...util.deepClone(options), connect, allowH2 } 64019 this[kOptions].interceptors = options.interceptors 64020 ? { ...options.interceptors } 64021 : undefined 64022 this[kFactory] = factory 64023 } 64024 64025 [kGetDispatcher] () { 64026 let dispatcher = this[kClients].find(dispatcher => !dispatcher[kNeedDrain]) 64027 64028 if (dispatcher) { 64029 return dispatcher 64030 } 64031 64032 if (!this[kConnections] || this[kClients].length < this[kConnections]) { 64033 dispatcher = this[kFactory](this[kUrl], this[kOptions]) 64034 this[kAddClient](dispatcher) 64035 } 64036 64037 return dispatcher 64038 } 64039 } 64040 64041 module.exports = Pool 64042 64043 64044 /***/ }), 64045 64046 /***/ 97858: 64047 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 64048 64049 "use strict"; 64050 64051 64052 const { kProxy, kClose, kDestroy, kInterceptors } = __nccwpck_require__(72785) 64053 const { URL } = __nccwpck_require__(57310) 64054 const Agent = __nccwpck_require__(7890) 64055 const Pool = __nccwpck_require__(4634) 64056 const DispatcherBase = __nccwpck_require__(74839) 64057 const { InvalidArgumentError, RequestAbortedError } = __nccwpck_require__(48045) 64058 const buildConnector = __nccwpck_require__(82067) 64059 64060 const kAgent = Symbol('proxy agent') 64061 const kClient = Symbol('proxy client') 64062 const kProxyHeaders = Symbol('proxy headers') 64063 const kRequestTls = Symbol('request tls settings') 64064 const kProxyTls = Symbol('proxy tls settings') 64065 const kConnectEndpoint = Symbol('connect endpoint function') 64066 64067 function defaultProtocolPort (protocol) { 64068 return protocol === 'https:' ? 443 : 80 64069 } 64070 64071 function buildProxyOptions (opts) { 64072 if (typeof opts === 'string') { 64073 opts = { uri: opts } 64074 } 64075 64076 if (!opts || !opts.uri) { 64077 throw new InvalidArgumentError('Proxy opts.uri is mandatory') 64078 } 64079 64080 return { 64081 uri: opts.uri, 64082 protocol: opts.protocol || 'https' 64083 } 64084 } 64085 64086 function defaultFactory (origin, opts) { 64087 return new Pool(origin, opts) 64088 } 64089 64090 class ProxyAgent extends DispatcherBase { 64091 constructor (opts) { 64092 super(opts) 64093 this[kProxy] = buildProxyOptions(opts) 64094 this[kAgent] = new Agent(opts) 64095 this[kInterceptors] = opts.interceptors && opts.interceptors.ProxyAgent && Array.isArray(opts.interceptors.ProxyAgent) 64096 ? opts.interceptors.ProxyAgent 64097 : [] 64098 64099 if (typeof opts === 'string') { 64100 opts = { uri: opts } 64101 } 64102 64103 if (!opts || !opts.uri) { 64104 throw new InvalidArgumentError('Proxy opts.uri is mandatory') 64105 } 64106 64107 const { clientFactory = defaultFactory } = opts 64108 64109 if (typeof clientFactory !== 'function') { 64110 throw new InvalidArgumentError('Proxy opts.clientFactory must be a function.') 64111 } 64112 64113 this[kRequestTls] = opts.requestTls 64114 this[kProxyTls] = opts.proxyTls 64115 this[kProxyHeaders] = opts.headers || {} 64116 64117 const resolvedUrl = new URL(opts.uri) 64118 const { origin, port, host, username, password } = resolvedUrl 64119 64120 if (opts.auth && opts.token) { 64121 throw new InvalidArgumentError('opts.auth cannot be used in combination with opts.token') 64122 } else if (opts.auth) { 64123 /* @deprecated in favour of opts.token */ 64124 this[kProxyHeaders]['proxy-authorization'] = `Basic ${opts.auth}` 64125 } else if (opts.token) { 64126 this[kProxyHeaders]['proxy-authorization'] = opts.token 64127 } else if (username && password) { 64128 this[kProxyHeaders]['proxy-authorization'] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:${decodeURIComponent(password)}`).toString('base64')}` 64129 } 64130 64131 const connect = buildConnector({ ...opts.proxyTls }) 64132 this[kConnectEndpoint] = buildConnector({ ...opts.requestTls }) 64133 this[kClient] = clientFactory(resolvedUrl, { connect }) 64134 this[kAgent] = new Agent({ 64135 ...opts, 64136 connect: async (opts, callback) => { 64137 let requestedHost = opts.host 64138 if (!opts.port) { 64139 requestedHost += `:${defaultProtocolPort(opts.protocol)}` 64140 } 64141 try { 64142 const { socket, statusCode } = await this[kClient].connect({ 64143 origin, 64144 port, 64145 path: requestedHost, 64146 signal: opts.signal, 64147 headers: { 64148 ...this[kProxyHeaders], 64149 host 64150 } 64151 }) 64152 if (statusCode !== 200) { 64153 socket.on('error', () => {}).destroy() 64154 callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`)) 64155 } 64156 if (opts.protocol !== 'https:') { 64157 callback(null, socket) 64158 return 64159 } 64160 let servername 64161 if (this[kRequestTls]) { 64162 servername = this[kRequestTls].servername 64163 } else { 64164 servername = opts.servername 64165 } 64166 this[kConnectEndpoint]({ ...opts, servername, httpSocket: socket }, callback) 64167 } catch (err) { 64168 callback(err) 64169 } 64170 } 64171 }) 64172 } 64173 64174 dispatch (opts, handler) { 64175 const { host } = new URL(opts.origin) 64176 const headers = buildHeaders(opts.headers) 64177 throwIfProxyAuthIsSent(headers) 64178 return this[kAgent].dispatch( 64179 { 64180 ...opts, 64181 headers: { 64182 ...headers, 64183 host 64184 } 64185 }, 64186 handler 64187 ) 64188 } 64189 64190 async [kClose] () { 64191 await this[kAgent].close() 64192 await this[kClient].close() 64193 } 64194 64195 async [kDestroy] () { 64196 await this[kAgent].destroy() 64197 await this[kClient].destroy() 64198 } 64199 } 64200 64201 /** 64202 * @param {string[] | Record<string, string>} headers 64203 * @returns {Record<string, string>} 64204 */ 64205 function buildHeaders (headers) { 64206 // When using undici.fetch, the headers list is stored 64207 // as an array. 64208 if (Array.isArray(headers)) { 64209 /** @type {Record<string, string>} */ 64210 const headersPair = {} 64211 64212 for (let i = 0; i < headers.length; i += 2) { 64213 headersPair[headers[i]] = headers[i + 1] 64214 } 64215 64216 return headersPair 64217 } 64218 64219 return headers 64220 } 64221 64222 /** 64223 * @param {Record<string, string>} headers 64224 * 64225 * Previous versions of ProxyAgent suggests the Proxy-Authorization in request headers 64226 * Nevertheless, it was changed and to avoid a security vulnerability by end users 64227 * this check was created. 64228 * It should be removed in the next major version for performance reasons 64229 */ 64230 function throwIfProxyAuthIsSent (headers) { 64231 const existProxyAuth = headers && Object.keys(headers) 64232 .find((key) => key.toLowerCase() === 'proxy-authorization') 64233 if (existProxyAuth) { 64234 throw new InvalidArgumentError('Proxy-Authorization should be sent in ProxyAgent constructor') 64235 } 64236 } 64237 64238 module.exports = ProxyAgent 64239 64240 64241 /***/ }), 64242 64243 /***/ 29459: 64244 /***/ ((module) => { 64245 64246 "use strict"; 64247 64248 64249 let fastNow = Date.now() 64250 let fastNowTimeout 64251 64252 const fastTimers = [] 64253 64254 function onTimeout () { 64255 fastNow = Date.now() 64256 64257 let len = fastTimers.length 64258 let idx = 0 64259 while (idx < len) { 64260 const timer = fastTimers[idx] 64261 64262 if (timer.state === 0) { 64263 timer.state = fastNow + timer.delay 64264 } else if (timer.state > 0 && fastNow >= timer.state) { 64265 timer.state = -1 64266 timer.callback(timer.opaque) 64267 } 64268 64269 if (timer.state === -1) { 64270 timer.state = -2 64271 if (idx !== len - 1) { 64272 fastTimers[idx] = fastTimers.pop() 64273 } else { 64274 fastTimers.pop() 64275 } 64276 len -= 1 64277 } else { 64278 idx += 1 64279 } 64280 } 64281 64282 if (fastTimers.length > 0) { 64283 refreshTimeout() 64284 } 64285 } 64286 64287 function refreshTimeout () { 64288 if (fastNowTimeout && fastNowTimeout.refresh) { 64289 fastNowTimeout.refresh() 64290 } else { 64291 clearTimeout(fastNowTimeout) 64292 fastNowTimeout = setTimeout(onTimeout, 1e3) 64293 if (fastNowTimeout.unref) { 64294 fastNowTimeout.unref() 64295 } 64296 } 64297 } 64298 64299 class Timeout { 64300 constructor (callback, delay, opaque) { 64301 this.callback = callback 64302 this.delay = delay 64303 this.opaque = opaque 64304 64305 // -2 not in timer list 64306 // -1 in timer list but inactive 64307 // 0 in timer list waiting for time 64308 // > 0 in timer list waiting for time to expire 64309 this.state = -2 64310 64311 this.refresh() 64312 } 64313 64314 refresh () { 64315 if (this.state === -2) { 64316 fastTimers.push(this) 64317 if (!fastNowTimeout || fastTimers.length === 1) { 64318 refreshTimeout() 64319 } 64320 } 64321 64322 this.state = 0 64323 } 64324 64325 clear () { 64326 this.state = -1 64327 } 64328 } 64329 64330 module.exports = { 64331 setTimeout (callback, delay, opaque) { 64332 return delay < 1e3 64333 ? setTimeout(callback, delay, opaque) 64334 : new Timeout(callback, delay, opaque) 64335 }, 64336 clearTimeout (timeout) { 64337 if (timeout instanceof Timeout) { 64338 timeout.clear() 64339 } else { 64340 clearTimeout(timeout) 64341 } 64342 } 64343 } 64344 64345 64346 /***/ }), 64347 64348 /***/ 35354: 64349 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 64350 64351 "use strict"; 64352 64353 64354 const diagnosticsChannel = __nccwpck_require__(67643) 64355 const { uid, states } = __nccwpck_require__(19188) 64356 const { 64357 kReadyState, 64358 kSentClose, 64359 kByteParser, 64360 kReceivedClose 64361 } = __nccwpck_require__(37578) 64362 const { fireEvent, failWebsocketConnection } = __nccwpck_require__(25515) 64363 const { CloseEvent } = __nccwpck_require__(52611) 64364 const { makeRequest } = __nccwpck_require__(48359) 64365 const { fetching } = __nccwpck_require__(74881) 64366 const { Headers } = __nccwpck_require__(10554) 64367 const { getGlobalDispatcher } = __nccwpck_require__(21892) 64368 const { kHeadersList } = __nccwpck_require__(72785) 64369 64370 const channels = {} 64371 channels.open = diagnosticsChannel.channel('undici:websocket:open') 64372 channels.close = diagnosticsChannel.channel('undici:websocket:close') 64373 channels.socketError = diagnosticsChannel.channel('undici:websocket:socket_error') 64374 64375 /** @type {import('crypto')} */ 64376 let crypto 64377 try { 64378 crypto = __nccwpck_require__(6113) 64379 } catch { 64380 64381 } 64382 64383 /** 64384 * @see https://websockets.spec.whatwg.org/#concept-websocket-establish 64385 * @param {URL} url 64386 * @param {string|string[]} protocols 64387 * @param {import('./websocket').WebSocket} ws 64388 * @param {(response: any) => void} onEstablish 64389 * @param {Partial<import('../../types/websocket').WebSocketInit>} options 64390 */ 64391 function establishWebSocketConnection (url, protocols, ws, onEstablish, options) { 64392 // 1. Let requestURL be a copy of url, with its scheme set to "http", if url’s 64393 // scheme is "ws", and to "https" otherwise. 64394 const requestURL = url 64395 64396 requestURL.protocol = url.protocol === 'ws:' ? 'http:' : 'https:' 64397 64398 // 2. Let request be a new request, whose URL is requestURL, client is client, 64399 // service-workers mode is "none", referrer is "no-referrer", mode is 64400 // "websocket", credentials mode is "include", cache mode is "no-store" , 64401 // and redirect mode is "error". 64402 const request = makeRequest({ 64403 urlList: [requestURL], 64404 serviceWorkers: 'none', 64405 referrer: 'no-referrer', 64406 mode: 'websocket', 64407 credentials: 'include', 64408 cache: 'no-store', 64409 redirect: 'error' 64410 }) 64411 64412 // Note: undici extension, allow setting custom headers. 64413 if (options.headers) { 64414 const headersList = new Headers(options.headers)[kHeadersList] 64415 64416 request.headersList = headersList 64417 } 64418 64419 // 3. Append (`Upgrade`, `websocket`) to request’s header list. 64420 // 4. Append (`Connection`, `Upgrade`) to request’s header list. 64421 // Note: both of these are handled by undici currently. 64422 // https://github.com/nodejs/undici/blob/68c269c4144c446f3f1220951338daef4a6b5ec4/lib/client.js#L1397 64423 64424 // 5. Let keyValue be a nonce consisting of a randomly selected 64425 // 16-byte value that has been forgiving-base64-encoded and 64426 // isomorphic encoded. 64427 const keyValue = crypto.randomBytes(16).toString('base64') 64428 64429 // 6. Append (`Sec-WebSocket-Key`, keyValue) to request’s 64430 // header list. 64431 request.headersList.append('sec-websocket-key', keyValue) 64432 64433 // 7. Append (`Sec-WebSocket-Version`, `13`) to request’s 64434 // header list. 64435 request.headersList.append('sec-websocket-version', '13') 64436 64437 // 8. For each protocol in protocols, combine 64438 // (`Sec-WebSocket-Protocol`, protocol) in request’s header 64439 // list. 64440 for (const protocol of protocols) { 64441 request.headersList.append('sec-websocket-protocol', protocol) 64442 } 64443 64444 // 9. Let permessageDeflate be a user-agent defined 64445 // "permessage-deflate" extension header value. 64446 // https://github.com/mozilla/gecko-dev/blob/ce78234f5e653a5d3916813ff990f053510227bc/netwerk/protocol/websocket/WebSocketChannel.cpp#L2673 64447 // TODO: enable once permessage-deflate is supported 64448 const permessageDeflate = '' // 'permessage-deflate; 15' 64449 64450 // 10. Append (`Sec-WebSocket-Extensions`, permessageDeflate) to 64451 // request’s header list. 64452 // request.headersList.append('sec-websocket-extensions', permessageDeflate) 64453 64454 // 11. Fetch request with useParallelQueue set to true, and 64455 // processResponse given response being these steps: 64456 const controller = fetching({ 64457 request, 64458 useParallelQueue: true, 64459 dispatcher: options.dispatcher ?? getGlobalDispatcher(), 64460 processResponse (response) { 64461 // 1. If response is a network error or its status is not 101, 64462 // fail the WebSocket connection. 64463 if (response.type === 'error' || response.status !== 101) { 64464 failWebsocketConnection(ws, 'Received network error or non-101 status code.') 64465 return 64466 } 64467 64468 // 2. If protocols is not the empty list and extracting header 64469 // list values given `Sec-WebSocket-Protocol` and response’s 64470 // header list results in null, failure, or the empty byte 64471 // sequence, then fail the WebSocket connection. 64472 if (protocols.length !== 0 && !response.headersList.get('Sec-WebSocket-Protocol')) { 64473 failWebsocketConnection(ws, 'Server did not respond with sent protocols.') 64474 return 64475 } 64476 64477 // 3. Follow the requirements stated step 2 to step 6, inclusive, 64478 // of the last set of steps in section 4.1 of The WebSocket 64479 // Protocol to validate response. This either results in fail 64480 // the WebSocket connection or the WebSocket connection is 64481 // established. 64482 64483 // 2. If the response lacks an |Upgrade| header field or the |Upgrade| 64484 // header field contains a value that is not an ASCII case- 64485 // insensitive match for the value "websocket", the client MUST 64486 // _Fail the WebSocket Connection_. 64487 if (response.headersList.get('Upgrade')?.toLowerCase() !== 'websocket') { 64488 failWebsocketConnection(ws, 'Server did not set Upgrade header to "websocket".') 64489 return 64490 } 64491 64492 // 3. If the response lacks a |Connection| header field or the 64493 // |Connection| header field doesn't contain a token that is an 64494 // ASCII case-insensitive match for the value "Upgrade", the client 64495 // MUST _Fail the WebSocket Connection_. 64496 if (response.headersList.get('Connection')?.toLowerCase() !== 'upgrade') { 64497 failWebsocketConnection(ws, 'Server did not set Connection header to "upgrade".') 64498 return 64499 } 64500 64501 // 4. If the response lacks a |Sec-WebSocket-Accept| header field or 64502 // the |Sec-WebSocket-Accept| contains a value other than the 64503 // base64-encoded SHA-1 of the concatenation of the |Sec-WebSocket- 64504 // Key| (as a string, not base64-decoded) with the string "258EAFA5- 64505 // E914-47DA-95CA-C5AB0DC85B11" but ignoring any leading and 64506 // trailing whitespace, the client MUST _Fail the WebSocket 64507 // Connection_. 64508 const secWSAccept = response.headersList.get('Sec-WebSocket-Accept') 64509 const digest = crypto.createHash('sha1').update(keyValue + uid).digest('base64') 64510 if (secWSAccept !== digest) { 64511 failWebsocketConnection(ws, 'Incorrect hash received in Sec-WebSocket-Accept header.') 64512 return 64513 } 64514 64515 // 5. If the response includes a |Sec-WebSocket-Extensions| header 64516 // field and this header field indicates the use of an extension 64517 // that was not present in the client's handshake (the server has 64518 // indicated an extension not requested by the client), the client 64519 // MUST _Fail the WebSocket Connection_. (The parsing of this 64520 // header field to determine which extensions are requested is 64521 // discussed in Section 9.1.) 64522 const secExtension = response.headersList.get('Sec-WebSocket-Extensions') 64523 64524 if (secExtension !== null && secExtension !== permessageDeflate) { 64525 failWebsocketConnection(ws, 'Received different permessage-deflate than the one set.') 64526 return 64527 } 64528 64529 // 6. If the response includes a |Sec-WebSocket-Protocol| header field 64530 // and this header field indicates the use of a subprotocol that was 64531 // not present in the client's handshake (the server has indicated a 64532 // subprotocol not requested by the client), the client MUST _Fail 64533 // the WebSocket Connection_. 64534 const secProtocol = response.headersList.get('Sec-WebSocket-Protocol') 64535 64536 if (secProtocol !== null && secProtocol !== request.headersList.get('Sec-WebSocket-Protocol')) { 64537 failWebsocketConnection(ws, 'Protocol was not set in the opening handshake.') 64538 return 64539 } 64540 64541 response.socket.on('data', onSocketData) 64542 response.socket.on('close', onSocketClose) 64543 response.socket.on('error', onSocketError) 64544 64545 if (channels.open.hasSubscribers) { 64546 channels.open.publish({ 64547 address: response.socket.address(), 64548 protocol: secProtocol, 64549 extensions: secExtension 64550 }) 64551 } 64552 64553 onEstablish(response) 64554 } 64555 }) 64556 64557 return controller 64558 } 64559 64560 /** 64561 * @param {Buffer} chunk 64562 */ 64563 function onSocketData (chunk) { 64564 if (!this.ws[kByteParser].write(chunk)) { 64565 this.pause() 64566 } 64567 } 64568 64569 /** 64570 * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol 64571 * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.4 64572 */ 64573 function onSocketClose () { 64574 const { ws } = this 64575 64576 // If the TCP connection was closed after the 64577 // WebSocket closing handshake was completed, the WebSocket connection 64578 // is said to have been closed _cleanly_. 64579 const wasClean = ws[kSentClose] && ws[kReceivedClose] 64580 64581 let code = 1005 64582 let reason = '' 64583 64584 const result = ws[kByteParser].closingInfo 64585 64586 if (result) { 64587 code = result.code ?? 1005 64588 reason = result.reason 64589 } else if (!ws[kSentClose]) { 64590 // If _The WebSocket 64591 // Connection is Closed_ and no Close control frame was received by the 64592 // endpoint (such as could occur if the underlying transport connection 64593 // is lost), _The WebSocket Connection Close Code_ is considered to be 64594 // 1006. 64595 code = 1006 64596 } 64597 64598 // 1. Change the ready state to CLOSED (3). 64599 ws[kReadyState] = states.CLOSED 64600 64601 // 2. If the user agent was required to fail the WebSocket 64602 // connection, or if the WebSocket connection was closed 64603 // after being flagged as full, fire an event named error 64604 // at the WebSocket object. 64605 // TODO 64606 64607 // 3. Fire an event named close at the WebSocket object, 64608 // using CloseEvent, with the wasClean attribute 64609 // initialized to true if the connection closed cleanly 64610 // and false otherwise, the code attribute initialized to 64611 // the WebSocket connection close code, and the reason 64612 // attribute initialized to the result of applying UTF-8 64613 // decode without BOM to the WebSocket connection close 64614 // reason. 64615 fireEvent('close', ws, CloseEvent, { 64616 wasClean, code, reason 64617 }) 64618 64619 if (channels.close.hasSubscribers) { 64620 channels.close.publish({ 64621 websocket: ws, 64622 code, 64623 reason 64624 }) 64625 } 64626 } 64627 64628 function onSocketError (error) { 64629 const { ws } = this 64630 64631 ws[kReadyState] = states.CLOSING 64632 64633 if (channels.socketError.hasSubscribers) { 64634 channels.socketError.publish(error) 64635 } 64636 64637 this.destroy() 64638 } 64639 64640 module.exports = { 64641 establishWebSocketConnection 64642 } 64643 64644 64645 /***/ }), 64646 64647 /***/ 19188: 64648 /***/ ((module) => { 64649 64650 "use strict"; 64651 64652 64653 // This is a Globally Unique Identifier unique used 64654 // to validate that the endpoint accepts websocket 64655 // connections. 64656 // See https://www.rfc-editor.org/rfc/rfc6455.html#section-1.3 64657 const uid = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11' 64658 64659 /** @type {PropertyDescriptor} */ 64660 const staticPropertyDescriptors = { 64661 enumerable: true, 64662 writable: false, 64663 configurable: false 64664 } 64665 64666 const states = { 64667 CONNECTING: 0, 64668 OPEN: 1, 64669 CLOSING: 2, 64670 CLOSED: 3 64671 } 64672 64673 const opcodes = { 64674 CONTINUATION: 0x0, 64675 TEXT: 0x1, 64676 BINARY: 0x2, 64677 CLOSE: 0x8, 64678 PING: 0x9, 64679 PONG: 0xA 64680 } 64681 64682 const maxUnsigned16Bit = 2 ** 16 - 1 // 65535 64683 64684 const parserStates = { 64685 INFO: 0, 64686 PAYLOADLENGTH_16: 2, 64687 PAYLOADLENGTH_64: 3, 64688 READ_DATA: 4 64689 } 64690 64691 const emptyBuffer = Buffer.allocUnsafe(0) 64692 64693 module.exports = { 64694 uid, 64695 staticPropertyDescriptors, 64696 states, 64697 opcodes, 64698 maxUnsigned16Bit, 64699 parserStates, 64700 emptyBuffer 64701 } 64702 64703 64704 /***/ }), 64705 64706 /***/ 52611: 64707 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 64708 64709 "use strict"; 64710 64711 64712 const { webidl } = __nccwpck_require__(21744) 64713 const { kEnumerableProperty } = __nccwpck_require__(83983) 64714 const { MessagePort } = __nccwpck_require__(71267) 64715 64716 /** 64717 * @see https://html.spec.whatwg.org/multipage/comms.html#messageevent 64718 */ 64719 class MessageEvent extends Event { 64720 #eventInit 64721 64722 constructor (type, eventInitDict = {}) { 64723 webidl.argumentLengthCheck(arguments, 1, { header: 'MessageEvent constructor' }) 64724 64725 type = webidl.converters.DOMString(type) 64726 eventInitDict = webidl.converters.MessageEventInit(eventInitDict) 64727 64728 super(type, eventInitDict) 64729 64730 this.#eventInit = eventInitDict 64731 } 64732 64733 get data () { 64734 webidl.brandCheck(this, MessageEvent) 64735 64736 return this.#eventInit.data 64737 } 64738 64739 get origin () { 64740 webidl.brandCheck(this, MessageEvent) 64741 64742 return this.#eventInit.origin 64743 } 64744 64745 get lastEventId () { 64746 webidl.brandCheck(this, MessageEvent) 64747 64748 return this.#eventInit.lastEventId 64749 } 64750 64751 get source () { 64752 webidl.brandCheck(this, MessageEvent) 64753 64754 return this.#eventInit.source 64755 } 64756 64757 get ports () { 64758 webidl.brandCheck(this, MessageEvent) 64759 64760 if (!Object.isFrozen(this.#eventInit.ports)) { 64761 Object.freeze(this.#eventInit.ports) 64762 } 64763 64764 return this.#eventInit.ports 64765 } 64766 64767 initMessageEvent ( 64768 type, 64769 bubbles = false, 64770 cancelable = false, 64771 data = null, 64772 origin = '', 64773 lastEventId = '', 64774 source = null, 64775 ports = [] 64776 ) { 64777 webidl.brandCheck(this, MessageEvent) 64778 64779 webidl.argumentLengthCheck(arguments, 1, { header: 'MessageEvent.initMessageEvent' }) 64780 64781 return new MessageEvent(type, { 64782 bubbles, cancelable, data, origin, lastEventId, source, ports 64783 }) 64784 } 64785 } 64786 64787 /** 64788 * @see https://websockets.spec.whatwg.org/#the-closeevent-interface 64789 */ 64790 class CloseEvent extends Event { 64791 #eventInit 64792 64793 constructor (type, eventInitDict = {}) { 64794 webidl.argumentLengthCheck(arguments, 1, { header: 'CloseEvent constructor' }) 64795 64796 type = webidl.converters.DOMString(type) 64797 eventInitDict = webidl.converters.CloseEventInit(eventInitDict) 64798 64799 super(type, eventInitDict) 64800 64801 this.#eventInit = eventInitDict 64802 } 64803 64804 get wasClean () { 64805 webidl.brandCheck(this, CloseEvent) 64806 64807 return this.#eventInit.wasClean 64808 } 64809 64810 get code () { 64811 webidl.brandCheck(this, CloseEvent) 64812 64813 return this.#eventInit.code 64814 } 64815 64816 get reason () { 64817 webidl.brandCheck(this, CloseEvent) 64818 64819 return this.#eventInit.reason 64820 } 64821 } 64822 64823 // https://html.spec.whatwg.org/multipage/webappapis.html#the-errorevent-interface 64824 class ErrorEvent extends Event { 64825 #eventInit 64826 64827 constructor (type, eventInitDict) { 64828 webidl.argumentLengthCheck(arguments, 1, { header: 'ErrorEvent constructor' }) 64829 64830 super(type, eventInitDict) 64831 64832 type = webidl.converters.DOMString(type) 64833 eventInitDict = webidl.converters.ErrorEventInit(eventInitDict ?? {}) 64834 64835 this.#eventInit = eventInitDict 64836 } 64837 64838 get message () { 64839 webidl.brandCheck(this, ErrorEvent) 64840 64841 return this.#eventInit.message 64842 } 64843 64844 get filename () { 64845 webidl.brandCheck(this, ErrorEvent) 64846 64847 return this.#eventInit.filename 64848 } 64849 64850 get lineno () { 64851 webidl.brandCheck(this, ErrorEvent) 64852 64853 return this.#eventInit.lineno 64854 } 64855 64856 get colno () { 64857 webidl.brandCheck(this, ErrorEvent) 64858 64859 return this.#eventInit.colno 64860 } 64861 64862 get error () { 64863 webidl.brandCheck(this, ErrorEvent) 64864 64865 return this.#eventInit.error 64866 } 64867 } 64868 64869 Object.defineProperties(MessageEvent.prototype, { 64870 [Symbol.toStringTag]: { 64871 value: 'MessageEvent', 64872 configurable: true 64873 }, 64874 data: kEnumerableProperty, 64875 origin: kEnumerableProperty, 64876 lastEventId: kEnumerableProperty, 64877 source: kEnumerableProperty, 64878 ports: kEnumerableProperty, 64879 initMessageEvent: kEnumerableProperty 64880 }) 64881 64882 Object.defineProperties(CloseEvent.prototype, { 64883 [Symbol.toStringTag]: { 64884 value: 'CloseEvent', 64885 configurable: true 64886 }, 64887 reason: kEnumerableProperty, 64888 code: kEnumerableProperty, 64889 wasClean: kEnumerableProperty 64890 }) 64891 64892 Object.defineProperties(ErrorEvent.prototype, { 64893 [Symbol.toStringTag]: { 64894 value: 'ErrorEvent', 64895 configurable: true 64896 }, 64897 message: kEnumerableProperty, 64898 filename: kEnumerableProperty, 64899 lineno: kEnumerableProperty, 64900 colno: kEnumerableProperty, 64901 error: kEnumerableProperty 64902 }) 64903 64904 webidl.converters.MessagePort = webidl.interfaceConverter(MessagePort) 64905 64906 webidl.converters['sequence<MessagePort>'] = webidl.sequenceConverter( 64907 webidl.converters.MessagePort 64908 ) 64909 64910 const eventInit = [ 64911 { 64912 key: 'bubbles', 64913 converter: webidl.converters.boolean, 64914 defaultValue: false 64915 }, 64916 { 64917 key: 'cancelable', 64918 converter: webidl.converters.boolean, 64919 defaultValue: false 64920 }, 64921 { 64922 key: 'composed', 64923 converter: webidl.converters.boolean, 64924 defaultValue: false 64925 } 64926 ] 64927 64928 webidl.converters.MessageEventInit = webidl.dictionaryConverter([ 64929 ...eventInit, 64930 { 64931 key: 'data', 64932 converter: webidl.converters.any, 64933 defaultValue: null 64934 }, 64935 { 64936 key: 'origin', 64937 converter: webidl.converters.USVString, 64938 defaultValue: '' 64939 }, 64940 { 64941 key: 'lastEventId', 64942 converter: webidl.converters.DOMString, 64943 defaultValue: '' 64944 }, 64945 { 64946 key: 'source', 64947 // Node doesn't implement WindowProxy or ServiceWorker, so the only 64948 // valid value for source is a MessagePort. 64949 converter: webidl.nullableConverter(webidl.converters.MessagePort), 64950 defaultValue: null 64951 }, 64952 { 64953 key: 'ports', 64954 converter: webidl.converters['sequence<MessagePort>'], 64955 get defaultValue () { 64956 return [] 64957 } 64958 } 64959 ]) 64960 64961 webidl.converters.CloseEventInit = webidl.dictionaryConverter([ 64962 ...eventInit, 64963 { 64964 key: 'wasClean', 64965 converter: webidl.converters.boolean, 64966 defaultValue: false 64967 }, 64968 { 64969 key: 'code', 64970 converter: webidl.converters['unsigned short'], 64971 defaultValue: 0 64972 }, 64973 { 64974 key: 'reason', 64975 converter: webidl.converters.USVString, 64976 defaultValue: '' 64977 } 64978 ]) 64979 64980 webidl.converters.ErrorEventInit = webidl.dictionaryConverter([ 64981 ...eventInit, 64982 { 64983 key: 'message', 64984 converter: webidl.converters.DOMString, 64985 defaultValue: '' 64986 }, 64987 { 64988 key: 'filename', 64989 converter: webidl.converters.USVString, 64990 defaultValue: '' 64991 }, 64992 { 64993 key: 'lineno', 64994 converter: webidl.converters['unsigned long'], 64995 defaultValue: 0 64996 }, 64997 { 64998 key: 'colno', 64999 converter: webidl.converters['unsigned long'], 65000 defaultValue: 0 65001 }, 65002 { 65003 key: 'error', 65004 converter: webidl.converters.any 65005 } 65006 ]) 65007 65008 module.exports = { 65009 MessageEvent, 65010 CloseEvent, 65011 ErrorEvent 65012 } 65013 65014 65015 /***/ }), 65016 65017 /***/ 25444: 65018 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 65019 65020 "use strict"; 65021 65022 65023 const { maxUnsigned16Bit } = __nccwpck_require__(19188) 65024 65025 /** @type {import('crypto')} */ 65026 let crypto 65027 try { 65028 crypto = __nccwpck_require__(6113) 65029 } catch { 65030 65031 } 65032 65033 class WebsocketFrameSend { 65034 /** 65035 * @param {Buffer|undefined} data 65036 */ 65037 constructor (data) { 65038 this.frameData = data 65039 this.maskKey = crypto.randomBytes(4) 65040 } 65041 65042 createFrame (opcode) { 65043 const bodyLength = this.frameData?.byteLength ?? 0 65044 65045 /** @type {number} */ 65046 let payloadLength = bodyLength // 0-125 65047 let offset = 6 65048 65049 if (bodyLength > maxUnsigned16Bit) { 65050 offset += 8 // payload length is next 8 bytes 65051 payloadLength = 127 65052 } else if (bodyLength > 125) { 65053 offset += 2 // payload length is next 2 bytes 65054 payloadLength = 126 65055 } 65056 65057 const buffer = Buffer.allocUnsafe(bodyLength + offset) 65058 65059 // Clear first 2 bytes, everything else is overwritten 65060 buffer[0] = buffer[1] = 0 65061 buffer[0] |= 0x80 // FIN 65062 buffer[0] = (buffer[0] & 0xF0) + opcode // opcode 65063 65064 /*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> */ 65065 buffer[offset - 4] = this.maskKey[0] 65066 buffer[offset - 3] = this.maskKey[1] 65067 buffer[offset - 2] = this.maskKey[2] 65068 buffer[offset - 1] = this.maskKey[3] 65069 65070 buffer[1] = payloadLength 65071 65072 if (payloadLength === 126) { 65073 buffer.writeUInt16BE(bodyLength, 2) 65074 } else if (payloadLength === 127) { 65075 // Clear extended payload length 65076 buffer[2] = buffer[3] = 0 65077 buffer.writeUIntBE(bodyLength, 4, 6) 65078 } 65079 65080 buffer[1] |= 0x80 // MASK 65081 65082 // mask body 65083 for (let i = 0; i < bodyLength; i++) { 65084 buffer[offset + i] = this.frameData[i] ^ this.maskKey[i % 4] 65085 } 65086 65087 return buffer 65088 } 65089 } 65090 65091 module.exports = { 65092 WebsocketFrameSend 65093 } 65094 65095 65096 /***/ }), 65097 65098 /***/ 11688: 65099 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 65100 65101 "use strict"; 65102 65103 65104 const { Writable } = __nccwpck_require__(12781) 65105 const diagnosticsChannel = __nccwpck_require__(67643) 65106 const { parserStates, opcodes, states, emptyBuffer } = __nccwpck_require__(19188) 65107 const { kReadyState, kSentClose, kResponse, kReceivedClose } = __nccwpck_require__(37578) 65108 const { isValidStatusCode, failWebsocketConnection, websocketMessageReceived } = __nccwpck_require__(25515) 65109 const { WebsocketFrameSend } = __nccwpck_require__(25444) 65110 65111 // This code was influenced by ws released under the MIT license. 65112 // Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com> 65113 // Copyright (c) 2013 Arnout Kazemier and contributors 65114 // Copyright (c) 2016 Luigi Pinca and contributors 65115 65116 const channels = {} 65117 channels.ping = diagnosticsChannel.channel('undici:websocket:ping') 65118 channels.pong = diagnosticsChannel.channel('undici:websocket:pong') 65119 65120 class ByteParser extends Writable { 65121 #buffers = [] 65122 #byteOffset = 0 65123 65124 #state = parserStates.INFO 65125 65126 #info = {} 65127 #fragments = [] 65128 65129 constructor (ws) { 65130 super() 65131 65132 this.ws = ws 65133 } 65134 65135 /** 65136 * @param {Buffer} chunk 65137 * @param {() => void} callback 65138 */ 65139 _write (chunk, _, callback) { 65140 this.#buffers.push(chunk) 65141 this.#byteOffset += chunk.length 65142 65143 this.run(callback) 65144 } 65145 65146 /** 65147 * Runs whenever a new chunk is received. 65148 * Callback is called whenever there are no more chunks buffering, 65149 * or not enough bytes are buffered to parse. 65150 */ 65151 run (callback) { 65152 while (true) { 65153 if (this.#state === parserStates.INFO) { 65154 // If there aren't enough bytes to parse the payload length, etc. 65155 if (this.#byteOffset < 2) { 65156 return callback() 65157 } 65158 65159 const buffer = this.consume(2) 65160 65161 this.#info.fin = (buffer[0] & 0x80) !== 0 65162 this.#info.opcode = buffer[0] & 0x0F 65163 65164 // If we receive a fragmented message, we use the type of the first 65165 // frame to parse the full message as binary/text, when it's terminated 65166 this.#info.originalOpcode ??= this.#info.opcode 65167 65168 this.#info.fragmented = !this.#info.fin && this.#info.opcode !== opcodes.CONTINUATION 65169 65170 if (this.#info.fragmented && this.#info.opcode !== opcodes.BINARY && this.#info.opcode !== opcodes.TEXT) { 65171 // Only text and binary frames can be fragmented 65172 failWebsocketConnection(this.ws, 'Invalid frame type was fragmented.') 65173 return 65174 } 65175 65176 const payloadLength = buffer[1] & 0x7F 65177 65178 if (payloadLength <= 125) { 65179 this.#info.payloadLength = payloadLength 65180 this.#state = parserStates.READ_DATA 65181 } else if (payloadLength === 126) { 65182 this.#state = parserStates.PAYLOADLENGTH_16 65183 } else if (payloadLength === 127) { 65184 this.#state = parserStates.PAYLOADLENGTH_64 65185 } 65186 65187 if (this.#info.fragmented && payloadLength > 125) { 65188 // A fragmented frame can't be fragmented itself 65189 failWebsocketConnection(this.ws, 'Fragmented frame exceeded 125 bytes.') 65190 return 65191 } else if ( 65192 (this.#info.opcode === opcodes.PING || 65193 this.#info.opcode === opcodes.PONG || 65194 this.#info.opcode === opcodes.CLOSE) && 65195 payloadLength > 125 65196 ) { 65197 // Control frames can have a payload length of 125 bytes MAX 65198 failWebsocketConnection(this.ws, 'Payload length for control frame exceeded 125 bytes.') 65199 return 65200 } else if (this.#info.opcode === opcodes.CLOSE) { 65201 if (payloadLength === 1) { 65202 failWebsocketConnection(this.ws, 'Received close frame with a 1-byte body.') 65203 return 65204 } 65205 65206 const body = this.consume(payloadLength) 65207 65208 this.#info.closeInfo = this.parseCloseBody(false, body) 65209 65210 if (!this.ws[kSentClose]) { 65211 // If an endpoint receives a Close frame and did not previously send a 65212 // Close frame, the endpoint MUST send a Close frame in response. (When 65213 // sending a Close frame in response, the endpoint typically echos the 65214 // status code it received.) 65215 const body = Buffer.allocUnsafe(2) 65216 body.writeUInt16BE(this.#info.closeInfo.code, 0) 65217 const closeFrame = new WebsocketFrameSend(body) 65218 65219 this.ws[kResponse].socket.write( 65220 closeFrame.createFrame(opcodes.CLOSE), 65221 (err) => { 65222 if (!err) { 65223 this.ws[kSentClose] = true 65224 } 65225 } 65226 ) 65227 } 65228 65229 // Upon either sending or receiving a Close control frame, it is said 65230 // that _The WebSocket Closing Handshake is Started_ and that the 65231 // WebSocket connection is in the CLOSING state. 65232 this.ws[kReadyState] = states.CLOSING 65233 this.ws[kReceivedClose] = true 65234 65235 this.end() 65236 65237 return 65238 } else if (this.#info.opcode === opcodes.PING) { 65239 // Upon receipt of a Ping frame, an endpoint MUST send a Pong frame in 65240 // response, unless it already received a Close frame. 65241 // A Pong frame sent in response to a Ping frame must have identical 65242 // "Application data" 65243 65244 const body = this.consume(payloadLength) 65245 65246 if (!this.ws[kReceivedClose]) { 65247 const frame = new WebsocketFrameSend(body) 65248 65249 this.ws[kResponse].socket.write(frame.createFrame(opcodes.PONG)) 65250 65251 if (channels.ping.hasSubscribers) { 65252 channels.ping.publish({ 65253 payload: body 65254 }) 65255 } 65256 } 65257 65258 this.#state = parserStates.INFO 65259 65260 if (this.#byteOffset > 0) { 65261 continue 65262 } else { 65263 callback() 65264 return 65265 } 65266 } else if (this.#info.opcode === opcodes.PONG) { 65267 // A Pong frame MAY be sent unsolicited. This serves as a 65268 // unidirectional heartbeat. A response to an unsolicited Pong frame is 65269 // not expected. 65270 65271 const body = this.consume(payloadLength) 65272 65273 if (channels.pong.hasSubscribers) { 65274 channels.pong.publish({ 65275 payload: body 65276 }) 65277 } 65278 65279 if (this.#byteOffset > 0) { 65280 continue 65281 } else { 65282 callback() 65283 return 65284 } 65285 } 65286 } else if (this.#state === parserStates.PAYLOADLENGTH_16) { 65287 if (this.#byteOffset < 2) { 65288 return callback() 65289 } 65290 65291 const buffer = this.consume(2) 65292 65293 this.#info.payloadLength = buffer.readUInt16BE(0) 65294 this.#state = parserStates.READ_DATA 65295 } else if (this.#state === parserStates.PAYLOADLENGTH_64) { 65296 if (this.#byteOffset < 8) { 65297 return callback() 65298 } 65299 65300 const buffer = this.consume(8) 65301 const upper = buffer.readUInt32BE(0) 65302 65303 // 2^31 is the maxinimum bytes an arraybuffer can contain 65304 // on 32-bit systems. Although, on 64-bit systems, this is 65305 // 2^53-1 bytes. 65306 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_array_length 65307 // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/common/globals.h;drc=1946212ac0100668f14eb9e2843bdd846e510a1e;bpv=1;bpt=1;l=1275 65308 // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/objects/js-array-buffer.h;l=34;drc=1946212ac0100668f14eb9e2843bdd846e510a1e 65309 if (upper > 2 ** 31 - 1) { 65310 failWebsocketConnection(this.ws, 'Received payload length > 2^31 bytes.') 65311 return 65312 } 65313 65314 const lower = buffer.readUInt32BE(4) 65315 65316 this.#info.payloadLength = (upper << 8) + lower 65317 this.#state = parserStates.READ_DATA 65318 } else if (this.#state === parserStates.READ_DATA) { 65319 if (this.#byteOffset < this.#info.payloadLength) { 65320 // If there is still more data in this chunk that needs to be read 65321 return callback() 65322 } else if (this.#byteOffset >= this.#info.payloadLength) { 65323 // If the server sent multiple frames in a single chunk 65324 65325 const body = this.consume(this.#info.payloadLength) 65326 65327 this.#fragments.push(body) 65328 65329 // If the frame is unfragmented, or a fragmented frame was terminated, 65330 // a message was received 65331 if (!this.#info.fragmented || (this.#info.fin && this.#info.opcode === opcodes.CONTINUATION)) { 65332 const fullMessage = Buffer.concat(this.#fragments) 65333 65334 websocketMessageReceived(this.ws, this.#info.originalOpcode, fullMessage) 65335 65336 this.#info = {} 65337 this.#fragments.length = 0 65338 } 65339 65340 this.#state = parserStates.INFO 65341 } 65342 } 65343 65344 if (this.#byteOffset > 0) { 65345 continue 65346 } else { 65347 callback() 65348 break 65349 } 65350 } 65351 } 65352 65353 /** 65354 * Take n bytes from the buffered Buffers 65355 * @param {number} n 65356 * @returns {Buffer|null} 65357 */ 65358 consume (n) { 65359 if (n > this.#byteOffset) { 65360 return null 65361 } else if (n === 0) { 65362 return emptyBuffer 65363 } 65364 65365 if (this.#buffers[0].length === n) { 65366 this.#byteOffset -= this.#buffers[0].length 65367 return this.#buffers.shift() 65368 } 65369 65370 const buffer = Buffer.allocUnsafe(n) 65371 let offset = 0 65372 65373 while (offset !== n) { 65374 const next = this.#buffers[0] 65375 const { length } = next 65376 65377 if (length + offset === n) { 65378 buffer.set(this.#buffers.shift(), offset) 65379 break 65380 } else if (length + offset > n) { 65381 buffer.set(next.subarray(0, n - offset), offset) 65382 this.#buffers[0] = next.subarray(n - offset) 65383 break 65384 } else { 65385 buffer.set(this.#buffers.shift(), offset) 65386 offset += next.length 65387 } 65388 } 65389 65390 this.#byteOffset -= n 65391 65392 return buffer 65393 } 65394 65395 parseCloseBody (onlyCode, data) { 65396 // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5 65397 /** @type {number|undefined} */ 65398 let code 65399 65400 if (data.length >= 2) { 65401 // _The WebSocket Connection Close Code_ is 65402 // defined as the status code (Section 7.4) contained in the first Close 65403 // control frame received by the application 65404 code = data.readUInt16BE(0) 65405 } 65406 65407 if (onlyCode) { 65408 if (!isValidStatusCode(code)) { 65409 return null 65410 } 65411 65412 return { code } 65413 } 65414 65415 // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.6 65416 /** @type {Buffer} */ 65417 let reason = data.subarray(2) 65418 65419 // Remove BOM 65420 if (reason[0] === 0xEF && reason[1] === 0xBB && reason[2] === 0xBF) { 65421 reason = reason.subarray(3) 65422 } 65423 65424 if (code !== undefined && !isValidStatusCode(code)) { 65425 return null 65426 } 65427 65428 try { 65429 // TODO: optimize this 65430 reason = new TextDecoder('utf-8', { fatal: true }).decode(reason) 65431 } catch { 65432 return null 65433 } 65434 65435 return { code, reason } 65436 } 65437 65438 get closingInfo () { 65439 return this.#info.closeInfo 65440 } 65441 } 65442 65443 module.exports = { 65444 ByteParser 65445 } 65446 65447 65448 /***/ }), 65449 65450 /***/ 37578: 65451 /***/ ((module) => { 65452 65453 "use strict"; 65454 65455 65456 module.exports = { 65457 kWebSocketURL: Symbol('url'), 65458 kReadyState: Symbol('ready state'), 65459 kController: Symbol('controller'), 65460 kResponse: Symbol('response'), 65461 kBinaryType: Symbol('binary type'), 65462 kSentClose: Symbol('sent close'), 65463 kReceivedClose: Symbol('received close'), 65464 kByteParser: Symbol('byte parser') 65465 } 65466 65467 65468 /***/ }), 65469 65470 /***/ 25515: 65471 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 65472 65473 "use strict"; 65474 65475 65476 const { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = __nccwpck_require__(37578) 65477 const { states, opcodes } = __nccwpck_require__(19188) 65478 const { MessageEvent, ErrorEvent } = __nccwpck_require__(52611) 65479 65480 /* globals Blob */ 65481 65482 /** 65483 * @param {import('./websocket').WebSocket} ws 65484 */ 65485 function isEstablished (ws) { 65486 // If the server's response is validated as provided for above, it is 65487 // said that _The WebSocket Connection is Established_ and that the 65488 // WebSocket Connection is in the OPEN state. 65489 return ws[kReadyState] === states.OPEN 65490 } 65491 65492 /** 65493 * @param {import('./websocket').WebSocket} ws 65494 */ 65495 function isClosing (ws) { 65496 // Upon either sending or receiving a Close control frame, it is said 65497 // that _The WebSocket Closing Handshake is Started_ and that the 65498 // WebSocket connection is in the CLOSING state. 65499 return ws[kReadyState] === states.CLOSING 65500 } 65501 65502 /** 65503 * @param {import('./websocket').WebSocket} ws 65504 */ 65505 function isClosed (ws) { 65506 return ws[kReadyState] === states.CLOSED 65507 } 65508 65509 /** 65510 * @see https://dom.spec.whatwg.org/#concept-event-fire 65511 * @param {string} e 65512 * @param {EventTarget} target 65513 * @param {EventInit | undefined} eventInitDict 65514 */ 65515 function fireEvent (e, target, eventConstructor = Event, eventInitDict) { 65516 // 1. If eventConstructor is not given, then let eventConstructor be Event. 65517 65518 // 2. Let event be the result of creating an event given eventConstructor, 65519 // in the relevant realm of target. 65520 // 3. Initialize event’s type attribute to e. 65521 const event = new eventConstructor(e, eventInitDict) // eslint-disable-line new-cap 65522 65523 // 4. Initialize any other IDL attributes of event as described in the 65524 // invocation of this algorithm. 65525 65526 // 5. Return the result of dispatching event at target, with legacy target 65527 // override flag set if set. 65528 target.dispatchEvent(event) 65529 } 65530 65531 /** 65532 * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol 65533 * @param {import('./websocket').WebSocket} ws 65534 * @param {number} type Opcode 65535 * @param {Buffer} data application data 65536 */ 65537 function websocketMessageReceived (ws, type, data) { 65538 // 1. If ready state is not OPEN (1), then return. 65539 if (ws[kReadyState] !== states.OPEN) { 65540 return 65541 } 65542 65543 // 2. Let dataForEvent be determined by switching on type and binary type: 65544 let dataForEvent 65545 65546 if (type === opcodes.TEXT) { 65547 // -> type indicates that the data is Text 65548 // a new DOMString containing data 65549 try { 65550 dataForEvent = new TextDecoder('utf-8', { fatal: true }).decode(data) 65551 } catch { 65552 failWebsocketConnection(ws, 'Received invalid UTF-8 in text frame.') 65553 return 65554 } 65555 } else if (type === opcodes.BINARY) { 65556 if (ws[kBinaryType] === 'blob') { 65557 // -> type indicates that the data is Binary and binary type is "blob" 65558 // a new Blob object, created in the relevant Realm of the WebSocket 65559 // object, that represents data as its raw data 65560 dataForEvent = new Blob([data]) 65561 } else { 65562 // -> type indicates that the data is Binary and binary type is "arraybuffer" 65563 // a new ArrayBuffer object, created in the relevant Realm of the 65564 // WebSocket object, whose contents are data 65565 dataForEvent = new Uint8Array(data).buffer 65566 } 65567 } 65568 65569 // 3. Fire an event named message at the WebSocket object, using MessageEvent, 65570 // with the origin attribute initialized to the serialization of the WebSocket 65571 // object’s url's origin, and the data attribute initialized to dataForEvent. 65572 fireEvent('message', ws, MessageEvent, { 65573 origin: ws[kWebSocketURL].origin, 65574 data: dataForEvent 65575 }) 65576 } 65577 65578 /** 65579 * @see https://datatracker.ietf.org/doc/html/rfc6455 65580 * @see https://datatracker.ietf.org/doc/html/rfc2616 65581 * @see https://bugs.chromium.org/p/chromium/issues/detail?id=398407 65582 * @param {string} protocol 65583 */ 65584 function isValidSubprotocol (protocol) { 65585 // If present, this value indicates one 65586 // or more comma-separated subprotocol the client wishes to speak, 65587 // ordered by preference. The elements that comprise this value 65588 // MUST be non-empty strings with characters in the range U+0021 to 65589 // U+007E not including separator characters as defined in 65590 // [RFC2616] and MUST all be unique strings. 65591 if (protocol.length === 0) { 65592 return false 65593 } 65594 65595 for (const char of protocol) { 65596 const code = char.charCodeAt(0) 65597 65598 if ( 65599 code < 0x21 || 65600 code > 0x7E || 65601 char === '(' || 65602 char === ')' || 65603 char === '<' || 65604 char === '>' || 65605 char === '@' || 65606 char === ',' || 65607 char === ';' || 65608 char === ':' || 65609 char === '\\' || 65610 char === '"' || 65611 char === '/' || 65612 char === '[' || 65613 char === ']' || 65614 char === '?' || 65615 char === '=' || 65616 char === '{' || 65617 char === '}' || 65618 code === 32 || // SP 65619 code === 9 // HT 65620 ) { 65621 return false 65622 } 65623 } 65624 65625 return true 65626 } 65627 65628 /** 65629 * @see https://datatracker.ietf.org/doc/html/rfc6455#section-7-4 65630 * @param {number} code 65631 */ 65632 function isValidStatusCode (code) { 65633 if (code >= 1000 && code < 1015) { 65634 return ( 65635 code !== 1004 && // reserved 65636 code !== 1005 && // "MUST NOT be set as a status code" 65637 code !== 1006 // "MUST NOT be set as a status code" 65638 ) 65639 } 65640 65641 return code >= 3000 && code <= 4999 65642 } 65643 65644 /** 65645 * @param {import('./websocket').WebSocket} ws 65646 * @param {string|undefined} reason 65647 */ 65648 function failWebsocketConnection (ws, reason) { 65649 const { [kController]: controller, [kResponse]: response } = ws 65650 65651 controller.abort() 65652 65653 if (response?.socket && !response.socket.destroyed) { 65654 response.socket.destroy() 65655 } 65656 65657 if (reason) { 65658 fireEvent('error', ws, ErrorEvent, { 65659 error: new Error(reason) 65660 }) 65661 } 65662 } 65663 65664 module.exports = { 65665 isEstablished, 65666 isClosing, 65667 isClosed, 65668 fireEvent, 65669 isValidSubprotocol, 65670 isValidStatusCode, 65671 failWebsocketConnection, 65672 websocketMessageReceived 65673 } 65674 65675 65676 /***/ }), 65677 65678 /***/ 54284: 65679 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 65680 65681 "use strict"; 65682 65683 65684 const { webidl } = __nccwpck_require__(21744) 65685 const { DOMException } = __nccwpck_require__(41037) 65686 const { URLSerializer } = __nccwpck_require__(685) 65687 const { getGlobalOrigin } = __nccwpck_require__(71246) 65688 const { staticPropertyDescriptors, states, opcodes, emptyBuffer } = __nccwpck_require__(19188) 65689 const { 65690 kWebSocketURL, 65691 kReadyState, 65692 kController, 65693 kBinaryType, 65694 kResponse, 65695 kSentClose, 65696 kByteParser 65697 } = __nccwpck_require__(37578) 65698 const { isEstablished, isClosing, isValidSubprotocol, failWebsocketConnection, fireEvent } = __nccwpck_require__(25515) 65699 const { establishWebSocketConnection } = __nccwpck_require__(35354) 65700 const { WebsocketFrameSend } = __nccwpck_require__(25444) 65701 const { ByteParser } = __nccwpck_require__(11688) 65702 const { kEnumerableProperty, isBlobLike } = __nccwpck_require__(83983) 65703 const { getGlobalDispatcher } = __nccwpck_require__(21892) 65704 const { types } = __nccwpck_require__(73837) 65705 65706 let experimentalWarned = false 65707 65708 // https://websockets.spec.whatwg.org/#interface-definition 65709 class WebSocket extends EventTarget { 65710 #events = { 65711 open: null, 65712 error: null, 65713 close: null, 65714 message: null 65715 } 65716 65717 #bufferedAmount = 0 65718 #protocol = '' 65719 #extensions = '' 65720 65721 /** 65722 * @param {string} url 65723 * @param {string|string[]} protocols 65724 */ 65725 constructor (url, protocols = []) { 65726 super() 65727 65728 webidl.argumentLengthCheck(arguments, 1, { header: 'WebSocket constructor' }) 65729 65730 if (!experimentalWarned) { 65731 experimentalWarned = true 65732 process.emitWarning('WebSockets are experimental, expect them to change at any time.', { 65733 code: 'UNDICI-WS' 65734 }) 65735 } 65736 65737 const options = webidl.converters['DOMString or sequence<DOMString> or WebSocketInit'](protocols) 65738 65739 url = webidl.converters.USVString(url) 65740 protocols = options.protocols 65741 65742 // 1. Let baseURL be this's relevant settings object's API base URL. 65743 const baseURL = getGlobalOrigin() 65744 65745 // 1. Let urlRecord be the result of applying the URL parser to url with baseURL. 65746 let urlRecord 65747 65748 try { 65749 urlRecord = new URL(url, baseURL) 65750 } catch (e) { 65751 // 3. If urlRecord is failure, then throw a "SyntaxError" DOMException. 65752 throw new DOMException(e, 'SyntaxError') 65753 } 65754 65755 // 4. If urlRecord’s scheme is "http", then set urlRecord’s scheme to "ws". 65756 if (urlRecord.protocol === 'http:') { 65757 urlRecord.protocol = 'ws:' 65758 } else if (urlRecord.protocol === 'https:') { 65759 // 5. Otherwise, if urlRecord’s scheme is "https", set urlRecord’s scheme to "wss". 65760 urlRecord.protocol = 'wss:' 65761 } 65762 65763 // 6. If urlRecord’s scheme is not "ws" or "wss", then throw a "SyntaxError" DOMException. 65764 if (urlRecord.protocol !== 'ws:' && urlRecord.protocol !== 'wss:') { 65765 throw new DOMException( 65766 `Expected a ws: or wss: protocol, got ${urlRecord.protocol}`, 65767 'SyntaxError' 65768 ) 65769 } 65770 65771 // 7. If urlRecord’s fragment is non-null, then throw a "SyntaxError" 65772 // DOMException. 65773 if (urlRecord.hash || urlRecord.href.endsWith('#')) { 65774 throw new DOMException('Got fragment', 'SyntaxError') 65775 } 65776 65777 // 8. If protocols is a string, set protocols to a sequence consisting 65778 // of just that string. 65779 if (typeof protocols === 'string') { 65780 protocols = [protocols] 65781 } 65782 65783 // 9. If any of the values in protocols occur more than once or otherwise 65784 // fail to match the requirements for elements that comprise the value 65785 // of `Sec-WebSocket-Protocol` fields as defined by The WebSocket 65786 // protocol, then throw a "SyntaxError" DOMException. 65787 if (protocols.length !== new Set(protocols.map(p => p.toLowerCase())).size) { 65788 throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError') 65789 } 65790 65791 if (protocols.length > 0 && !protocols.every(p => isValidSubprotocol(p))) { 65792 throw new DOMException('Invalid Sec-WebSocket-Protocol value', 'SyntaxError') 65793 } 65794 65795 // 10. Set this's url to urlRecord. 65796 this[kWebSocketURL] = new URL(urlRecord.href) 65797 65798 // 11. Let client be this's relevant settings object. 65799 65800 // 12. Run this step in parallel: 65801 65802 // 1. Establish a WebSocket connection given urlRecord, protocols, 65803 // and client. 65804 this[kController] = establishWebSocketConnection( 65805 urlRecord, 65806 protocols, 65807 this, 65808 (response) => this.#onConnectionEstablished(response), 65809 options 65810 ) 65811 65812 // Each WebSocket object has an associated ready state, which is a 65813 // number representing the state of the connection. Initially it must 65814 // be CONNECTING (0). 65815 this[kReadyState] = WebSocket.CONNECTING 65816 65817 // The extensions attribute must initially return the empty string. 65818 65819 // The protocol attribute must initially return the empty string. 65820 65821 // Each WebSocket object has an associated binary type, which is a 65822 // BinaryType. Initially it must be "blob". 65823 this[kBinaryType] = 'blob' 65824 } 65825 65826 /** 65827 * @see https://websockets.spec.whatwg.org/#dom-websocket-close 65828 * @param {number|undefined} code 65829 * @param {string|undefined} reason 65830 */ 65831 close (code = undefined, reason = undefined) { 65832 webidl.brandCheck(this, WebSocket) 65833 65834 if (code !== undefined) { 65835 code = webidl.converters['unsigned short'](code, { clamp: true }) 65836 } 65837 65838 if (reason !== undefined) { 65839 reason = webidl.converters.USVString(reason) 65840 } 65841 65842 // 1. If code is present, but is neither an integer equal to 1000 nor an 65843 // integer in the range 3000 to 4999, inclusive, throw an 65844 // "InvalidAccessError" DOMException. 65845 if (code !== undefined) { 65846 if (code !== 1000 && (code < 3000 || code > 4999)) { 65847 throw new DOMException('invalid code', 'InvalidAccessError') 65848 } 65849 } 65850 65851 let reasonByteLength = 0 65852 65853 // 2. If reason is present, then run these substeps: 65854 if (reason !== undefined) { 65855 // 1. Let reasonBytes be the result of encoding reason. 65856 // 2. If reasonBytes is longer than 123 bytes, then throw a 65857 // "SyntaxError" DOMException. 65858 reasonByteLength = Buffer.byteLength(reason) 65859 65860 if (reasonByteLength > 123) { 65861 throw new DOMException( 65862 `Reason must be less than 123 bytes; received ${reasonByteLength}`, 65863 'SyntaxError' 65864 ) 65865 } 65866 } 65867 65868 // 3. Run the first matching steps from the following list: 65869 if (this[kReadyState] === WebSocket.CLOSING || this[kReadyState] === WebSocket.CLOSED) { 65870 // If this's ready state is CLOSING (2) or CLOSED (3) 65871 // Do nothing. 65872 } else if (!isEstablished(this)) { 65873 // If the WebSocket connection is not yet established 65874 // Fail the WebSocket connection and set this's ready state 65875 // to CLOSING (2). 65876 failWebsocketConnection(this, 'Connection was closed before it was established.') 65877 this[kReadyState] = WebSocket.CLOSING 65878 } else if (!isClosing(this)) { 65879 // If the WebSocket closing handshake has not yet been started 65880 // Start the WebSocket closing handshake and set this's ready 65881 // state to CLOSING (2). 65882 // - If neither code nor reason is present, the WebSocket Close 65883 // message must not have a body. 65884 // - If code is present, then the status code to use in the 65885 // WebSocket Close message must be the integer given by code. 65886 // - If reason is also present, then reasonBytes must be 65887 // provided in the Close message after the status code. 65888 65889 const frame = new WebsocketFrameSend() 65890 65891 // If neither code nor reason is present, the WebSocket Close 65892 // message must not have a body. 65893 65894 // If code is present, then the status code to use in the 65895 // WebSocket Close message must be the integer given by code. 65896 if (code !== undefined && reason === undefined) { 65897 frame.frameData = Buffer.allocUnsafe(2) 65898 frame.frameData.writeUInt16BE(code, 0) 65899 } else if (code !== undefined && reason !== undefined) { 65900 // If reason is also present, then reasonBytes must be 65901 // provided in the Close message after the status code. 65902 frame.frameData = Buffer.allocUnsafe(2 + reasonByteLength) 65903 frame.frameData.writeUInt16BE(code, 0) 65904 // the body MAY contain UTF-8-encoded data with value /reason/ 65905 frame.frameData.write(reason, 2, 'utf-8') 65906 } else { 65907 frame.frameData = emptyBuffer 65908 } 65909 65910 /** @type {import('stream').Duplex} */ 65911 const socket = this[kResponse].socket 65912 65913 socket.write(frame.createFrame(opcodes.CLOSE), (err) => { 65914 if (!err) { 65915 this[kSentClose] = true 65916 } 65917 }) 65918 65919 // Upon either sending or receiving a Close control frame, it is said 65920 // that _The WebSocket Closing Handshake is Started_ and that the 65921 // WebSocket connection is in the CLOSING state. 65922 this[kReadyState] = states.CLOSING 65923 } else { 65924 // Otherwise 65925 // Set this's ready state to CLOSING (2). 65926 this[kReadyState] = WebSocket.CLOSING 65927 } 65928 } 65929 65930 /** 65931 * @see https://websockets.spec.whatwg.org/#dom-websocket-send 65932 * @param {NodeJS.TypedArray|ArrayBuffer|Blob|string} data 65933 */ 65934 send (data) { 65935 webidl.brandCheck(this, WebSocket) 65936 65937 webidl.argumentLengthCheck(arguments, 1, { header: 'WebSocket.send' }) 65938 65939 data = webidl.converters.WebSocketSendData(data) 65940 65941 // 1. If this's ready state is CONNECTING, then throw an 65942 // "InvalidStateError" DOMException. 65943 if (this[kReadyState] === WebSocket.CONNECTING) { 65944 throw new DOMException('Sent before connected.', 'InvalidStateError') 65945 } 65946 65947 // 2. Run the appropriate set of steps from the following list: 65948 // https://datatracker.ietf.org/doc/html/rfc6455#section-6.1 65949 // https://datatracker.ietf.org/doc/html/rfc6455#section-5.2 65950 65951 if (!isEstablished(this) || isClosing(this)) { 65952 return 65953 } 65954 65955 /** @type {import('stream').Duplex} */ 65956 const socket = this[kResponse].socket 65957 65958 // If data is a string 65959 if (typeof data === 'string') { 65960 // If the WebSocket connection is established and the WebSocket 65961 // closing handshake has not yet started, then the user agent 65962 // must send a WebSocket Message comprised of the data argument 65963 // using a text frame opcode; if the data cannot be sent, e.g. 65964 // because it would need to be buffered but the buffer is full, 65965 // the user agent must flag the WebSocket as full and then close 65966 // the WebSocket connection. Any invocation of this method with a 65967 // string argument that does not throw an exception must increase 65968 // the bufferedAmount attribute by the number of bytes needed to 65969 // express the argument as UTF-8. 65970 65971 const value = Buffer.from(data) 65972 const frame = new WebsocketFrameSend(value) 65973 const buffer = frame.createFrame(opcodes.TEXT) 65974 65975 this.#bufferedAmount += value.byteLength 65976 socket.write(buffer, () => { 65977 this.#bufferedAmount -= value.byteLength 65978 }) 65979 } else if (types.isArrayBuffer(data)) { 65980 // If the WebSocket connection is established, and the WebSocket 65981 // closing handshake has not yet started, then the user agent must 65982 // send a WebSocket Message comprised of data using a binary frame 65983 // opcode; if the data cannot be sent, e.g. because it would need 65984 // to be buffered but the buffer is full, the user agent must flag 65985 // the WebSocket as full and then close the WebSocket connection. 65986 // The data to be sent is the data stored in the buffer described 65987 // by the ArrayBuffer object. Any invocation of this method with an 65988 // ArrayBuffer argument that does not throw an exception must 65989 // increase the bufferedAmount attribute by the length of the 65990 // ArrayBuffer in bytes. 65991 65992 const value = Buffer.from(data) 65993 const frame = new WebsocketFrameSend(value) 65994 const buffer = frame.createFrame(opcodes.BINARY) 65995 65996 this.#bufferedAmount += value.byteLength 65997 socket.write(buffer, () => { 65998 this.#bufferedAmount -= value.byteLength 65999 }) 66000 } else if (ArrayBuffer.isView(data)) { 66001 // If the WebSocket connection is established, and the WebSocket 66002 // closing handshake has not yet started, then the user agent must 66003 // send a WebSocket Message comprised of data using a binary frame 66004 // opcode; if the data cannot be sent, e.g. because it would need to 66005 // be buffered but the buffer is full, the user agent must flag the 66006 // WebSocket as full and then close the WebSocket connection. The 66007 // data to be sent is the data stored in the section of the buffer 66008 // described by the ArrayBuffer object that data references. Any 66009 // invocation of this method with this kind of argument that does 66010 // not throw an exception must increase the bufferedAmount attribute 66011 // by the length of data’s buffer in bytes. 66012 66013 const ab = Buffer.from(data, data.byteOffset, data.byteLength) 66014 66015 const frame = new WebsocketFrameSend(ab) 66016 const buffer = frame.createFrame(opcodes.BINARY) 66017 66018 this.#bufferedAmount += ab.byteLength 66019 socket.write(buffer, () => { 66020 this.#bufferedAmount -= ab.byteLength 66021 }) 66022 } else if (isBlobLike(data)) { 66023 // If the WebSocket connection is established, and the WebSocket 66024 // closing handshake has not yet started, then the user agent must 66025 // send a WebSocket Message comprised of data using a binary frame 66026 // opcode; if the data cannot be sent, e.g. because it would need to 66027 // be buffered but the buffer is full, the user agent must flag the 66028 // WebSocket as full and then close the WebSocket connection. The data 66029 // to be sent is the raw data represented by the Blob object. Any 66030 // invocation of this method with a Blob argument that does not throw 66031 // an exception must increase the bufferedAmount attribute by the size 66032 // of the Blob object’s raw data, in bytes. 66033 66034 const frame = new WebsocketFrameSend() 66035 66036 data.arrayBuffer().then((ab) => { 66037 const value = Buffer.from(ab) 66038 frame.frameData = value 66039 const buffer = frame.createFrame(opcodes.BINARY) 66040 66041 this.#bufferedAmount += value.byteLength 66042 socket.write(buffer, () => { 66043 this.#bufferedAmount -= value.byteLength 66044 }) 66045 }) 66046 } 66047 } 66048 66049 get readyState () { 66050 webidl.brandCheck(this, WebSocket) 66051 66052 // The readyState getter steps are to return this's ready state. 66053 return this[kReadyState] 66054 } 66055 66056 get bufferedAmount () { 66057 webidl.brandCheck(this, WebSocket) 66058 66059 return this.#bufferedAmount 66060 } 66061 66062 get url () { 66063 webidl.brandCheck(this, WebSocket) 66064 66065 // The url getter steps are to return this's url, serialized. 66066 return URLSerializer(this[kWebSocketURL]) 66067 } 66068 66069 get extensions () { 66070 webidl.brandCheck(this, WebSocket) 66071 66072 return this.#extensions 66073 } 66074 66075 get protocol () { 66076 webidl.brandCheck(this, WebSocket) 66077 66078 return this.#protocol 66079 } 66080 66081 get onopen () { 66082 webidl.brandCheck(this, WebSocket) 66083 66084 return this.#events.open 66085 } 66086 66087 set onopen (fn) { 66088 webidl.brandCheck(this, WebSocket) 66089 66090 if (this.#events.open) { 66091 this.removeEventListener('open', this.#events.open) 66092 } 66093 66094 if (typeof fn === 'function') { 66095 this.#events.open = fn 66096 this.addEventListener('open', fn) 66097 } else { 66098 this.#events.open = null 66099 } 66100 } 66101 66102 get onerror () { 66103 webidl.brandCheck(this, WebSocket) 66104 66105 return this.#events.error 66106 } 66107 66108 set onerror (fn) { 66109 webidl.brandCheck(this, WebSocket) 66110 66111 if (this.#events.error) { 66112 this.removeEventListener('error', this.#events.error) 66113 } 66114 66115 if (typeof fn === 'function') { 66116 this.#events.error = fn 66117 this.addEventListener('error', fn) 66118 } else { 66119 this.#events.error = null 66120 } 66121 } 66122 66123 get onclose () { 66124 webidl.brandCheck(this, WebSocket) 66125 66126 return this.#events.close 66127 } 66128 66129 set onclose (fn) { 66130 webidl.brandCheck(this, WebSocket) 66131 66132 if (this.#events.close) { 66133 this.removeEventListener('close', this.#events.close) 66134 } 66135 66136 if (typeof fn === 'function') { 66137 this.#events.close = fn 66138 this.addEventListener('close', fn) 66139 } else { 66140 this.#events.close = null 66141 } 66142 } 66143 66144 get onmessage () { 66145 webidl.brandCheck(this, WebSocket) 66146 66147 return this.#events.message 66148 } 66149 66150 set onmessage (fn) { 66151 webidl.brandCheck(this, WebSocket) 66152 66153 if (this.#events.message) { 66154 this.removeEventListener('message', this.#events.message) 66155 } 66156 66157 if (typeof fn === 'function') { 66158 this.#events.message = fn 66159 this.addEventListener('message', fn) 66160 } else { 66161 this.#events.message = null 66162 } 66163 } 66164 66165 get binaryType () { 66166 webidl.brandCheck(this, WebSocket) 66167 66168 return this[kBinaryType] 66169 } 66170 66171 set binaryType (type) { 66172 webidl.brandCheck(this, WebSocket) 66173 66174 if (type !== 'blob' && type !== 'arraybuffer') { 66175 this[kBinaryType] = 'blob' 66176 } else { 66177 this[kBinaryType] = type 66178 } 66179 } 66180 66181 /** 66182 * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol 66183 */ 66184 #onConnectionEstablished (response) { 66185 // processResponse is called when the "response’s header list has been received and initialized." 66186 // once this happens, the connection is open 66187 this[kResponse] = response 66188 66189 const parser = new ByteParser(this) 66190 parser.on('drain', function onParserDrain () { 66191 this.ws[kResponse].socket.resume() 66192 }) 66193 66194 response.socket.ws = this 66195 this[kByteParser] = parser 66196 66197 // 1. Change the ready state to OPEN (1). 66198 this[kReadyState] = states.OPEN 66199 66200 // 2. Change the extensions attribute’s value to the extensions in use, if 66201 // it is not the null value. 66202 // https://datatracker.ietf.org/doc/html/rfc6455#section-9.1 66203 const extensions = response.headersList.get('sec-websocket-extensions') 66204 66205 if (extensions !== null) { 66206 this.#extensions = extensions 66207 } 66208 66209 // 3. Change the protocol attribute’s value to the subprotocol in use, if 66210 // it is not the null value. 66211 // https://datatracker.ietf.org/doc/html/rfc6455#section-1.9 66212 const protocol = response.headersList.get('sec-websocket-protocol') 66213 66214 if (protocol !== null) { 66215 this.#protocol = protocol 66216 } 66217 66218 // 4. Fire an event named open at the WebSocket object. 66219 fireEvent('open', this) 66220 } 66221 } 66222 66223 // https://websockets.spec.whatwg.org/#dom-websocket-connecting 66224 WebSocket.CONNECTING = WebSocket.prototype.CONNECTING = states.CONNECTING 66225 // https://websockets.spec.whatwg.org/#dom-websocket-open 66226 WebSocket.OPEN = WebSocket.prototype.OPEN = states.OPEN 66227 // https://websockets.spec.whatwg.org/#dom-websocket-closing 66228 WebSocket.CLOSING = WebSocket.prototype.CLOSING = states.CLOSING 66229 // https://websockets.spec.whatwg.org/#dom-websocket-closed 66230 WebSocket.CLOSED = WebSocket.prototype.CLOSED = states.CLOSED 66231 66232 Object.defineProperties(WebSocket.prototype, { 66233 CONNECTING: staticPropertyDescriptors, 66234 OPEN: staticPropertyDescriptors, 66235 CLOSING: staticPropertyDescriptors, 66236 CLOSED: staticPropertyDescriptors, 66237 url: kEnumerableProperty, 66238 readyState: kEnumerableProperty, 66239 bufferedAmount: kEnumerableProperty, 66240 onopen: kEnumerableProperty, 66241 onerror: kEnumerableProperty, 66242 onclose: kEnumerableProperty, 66243 close: kEnumerableProperty, 66244 onmessage: kEnumerableProperty, 66245 binaryType: kEnumerableProperty, 66246 send: kEnumerableProperty, 66247 extensions: kEnumerableProperty, 66248 protocol: kEnumerableProperty, 66249 [Symbol.toStringTag]: { 66250 value: 'WebSocket', 66251 writable: false, 66252 enumerable: false, 66253 configurable: true 66254 } 66255 }) 66256 66257 Object.defineProperties(WebSocket, { 66258 CONNECTING: staticPropertyDescriptors, 66259 OPEN: staticPropertyDescriptors, 66260 CLOSING: staticPropertyDescriptors, 66261 CLOSED: staticPropertyDescriptors 66262 }) 66263 66264 webidl.converters['sequence<DOMString>'] = webidl.sequenceConverter( 66265 webidl.converters.DOMString 66266 ) 66267 66268 webidl.converters['DOMString or sequence<DOMString>'] = function (V) { 66269 if (webidl.util.Type(V) === 'Object' && Symbol.iterator in V) { 66270 return webidl.converters['sequence<DOMString>'](V) 66271 } 66272 66273 return webidl.converters.DOMString(V) 66274 } 66275 66276 // This implements the propsal made in https://github.com/whatwg/websockets/issues/42 66277 webidl.converters.WebSocketInit = webidl.dictionaryConverter([ 66278 { 66279 key: 'protocols', 66280 converter: webidl.converters['DOMString or sequence<DOMString>'], 66281 get defaultValue () { 66282 return [] 66283 } 66284 }, 66285 { 66286 key: 'dispatcher', 66287 converter: (V) => V, 66288 get defaultValue () { 66289 return getGlobalDispatcher() 66290 } 66291 }, 66292 { 66293 key: 'headers', 66294 converter: webidl.nullableConverter(webidl.converters.HeadersInit) 66295 } 66296 ]) 66297 66298 webidl.converters['DOMString or sequence<DOMString> or WebSocketInit'] = function (V) { 66299 if (webidl.util.Type(V) === 'Object' && !(Symbol.iterator in V)) { 66300 return webidl.converters.WebSocketInit(V) 66301 } 66302 66303 return { protocols: webidl.converters['DOMString or sequence<DOMString>'](V) } 66304 } 66305 66306 webidl.converters.WebSocketSendData = function (V) { 66307 if (webidl.util.Type(V) === 'Object') { 66308 if (isBlobLike(V)) { 66309 return webidl.converters.Blob(V, { strict: false }) 66310 } 66311 66312 if (ArrayBuffer.isView(V) || types.isAnyArrayBuffer(V)) { 66313 return webidl.converters.BufferSource(V) 66314 } 66315 } 66316 66317 return webidl.converters.USVString(V) 66318 } 66319 66320 module.exports = { 66321 WebSocket 66322 } 66323 66324 66325 /***/ }), 66326 66327 /***/ 91747: 66328 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 66329 66330 var path = __nccwpck_require__(71017) 66331 66332 var uniqueSlug = __nccwpck_require__(17848) 66333 66334 module.exports = function (filepath, prefix, uniq) { 66335 return path.join(filepath, (prefix ? prefix + '-' : '') + uniqueSlug(uniq)) 66336 } 66337 66338 66339 /***/ }), 66340 66341 /***/ 17848: 66342 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 66343 66344 "use strict"; 66345 66346 var MurmurHash3 = __nccwpck_require__(52527) 66347 66348 module.exports = function (uniq) { 66349 if (uniq) { 66350 var hash = new MurmurHash3(uniq) 66351 return ('00000000' + hash.result().toString(16)).slice(-8) 66352 } else { 66353 return (Math.random().toString(16) + '0000000').slice(2, 10) 66354 } 66355 } 66356 66357 66358 /***/ }), 66359 66360 /***/ 45030: 66361 /***/ ((__unused_webpack_module, exports) => { 66362 66363 "use strict"; 66364 66365 66366 Object.defineProperty(exports, "__esModule", ({ value: true })); 66367 66368 function getUserAgent() { 66369 if (typeof navigator === "object" && "userAgent" in navigator) { 66370 return navigator.userAgent; 66371 } 66372 66373 if (typeof process === "object" && process.version !== undefined) { 66374 return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; 66375 } 66376 66377 return "<environment undetectable>"; 66378 } 66379 66380 exports.getUserAgent = getUserAgent; 66381 //# sourceMappingURL=index.js.map 66382 66383 66384 /***/ }), 66385 66386 /***/ 75840: 66387 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 66388 66389 "use strict"; 66390 66391 66392 Object.defineProperty(exports, "__esModule", ({ 66393 value: true 66394 })); 66395 Object.defineProperty(exports, "v1", ({ 66396 enumerable: true, 66397 get: function () { 66398 return _v.default; 66399 } 66400 })); 66401 Object.defineProperty(exports, "v3", ({ 66402 enumerable: true, 66403 get: function () { 66404 return _v2.default; 66405 } 66406 })); 66407 Object.defineProperty(exports, "v4", ({ 66408 enumerable: true, 66409 get: function () { 66410 return _v3.default; 66411 } 66412 })); 66413 Object.defineProperty(exports, "v5", ({ 66414 enumerable: true, 66415 get: function () { 66416 return _v4.default; 66417 } 66418 })); 66419 Object.defineProperty(exports, "NIL", ({ 66420 enumerable: true, 66421 get: function () { 66422 return _nil.default; 66423 } 66424 })); 66425 Object.defineProperty(exports, "version", ({ 66426 enumerable: true, 66427 get: function () { 66428 return _version.default; 66429 } 66430 })); 66431 Object.defineProperty(exports, "validate", ({ 66432 enumerable: true, 66433 get: function () { 66434 return _validate.default; 66435 } 66436 })); 66437 Object.defineProperty(exports, "stringify", ({ 66438 enumerable: true, 66439 get: function () { 66440 return _stringify.default; 66441 } 66442 })); 66443 Object.defineProperty(exports, "parse", ({ 66444 enumerable: true, 66445 get: function () { 66446 return _parse.default; 66447 } 66448 })); 66449 66450 var _v = _interopRequireDefault(__nccwpck_require__(78628)); 66451 66452 var _v2 = _interopRequireDefault(__nccwpck_require__(86409)); 66453 66454 var _v3 = _interopRequireDefault(__nccwpck_require__(85122)); 66455 66456 var _v4 = _interopRequireDefault(__nccwpck_require__(79120)); 66457 66458 var _nil = _interopRequireDefault(__nccwpck_require__(25332)); 66459 66460 var _version = _interopRequireDefault(__nccwpck_require__(81595)); 66461 66462 var _validate = _interopRequireDefault(__nccwpck_require__(66900)); 66463 66464 var _stringify = _interopRequireDefault(__nccwpck_require__(18950)); 66465 66466 var _parse = _interopRequireDefault(__nccwpck_require__(62746)); 66467 66468 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 66469 66470 /***/ }), 66471 66472 /***/ 4569: 66473 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 66474 66475 "use strict"; 66476 66477 66478 Object.defineProperty(exports, "__esModule", ({ 66479 value: true 66480 })); 66481 exports["default"] = void 0; 66482 66483 var _crypto = _interopRequireDefault(__nccwpck_require__(6113)); 66484 66485 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 66486 66487 function md5(bytes) { 66488 if (Array.isArray(bytes)) { 66489 bytes = Buffer.from(bytes); 66490 } else if (typeof bytes === 'string') { 66491 bytes = Buffer.from(bytes, 'utf8'); 66492 } 66493 66494 return _crypto.default.createHash('md5').update(bytes).digest(); 66495 } 66496 66497 var _default = md5; 66498 exports["default"] = _default; 66499 66500 /***/ }), 66501 66502 /***/ 25332: 66503 /***/ ((__unused_webpack_module, exports) => { 66504 66505 "use strict"; 66506 66507 66508 Object.defineProperty(exports, "__esModule", ({ 66509 value: true 66510 })); 66511 exports["default"] = void 0; 66512 var _default = '00000000-0000-0000-0000-000000000000'; 66513 exports["default"] = _default; 66514 66515 /***/ }), 66516 66517 /***/ 62746: 66518 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 66519 66520 "use strict"; 66521 66522 66523 Object.defineProperty(exports, "__esModule", ({ 66524 value: true 66525 })); 66526 exports["default"] = void 0; 66527 66528 var _validate = _interopRequireDefault(__nccwpck_require__(66900)); 66529 66530 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 66531 66532 function parse(uuid) { 66533 if (!(0, _validate.default)(uuid)) { 66534 throw TypeError('Invalid UUID'); 66535 } 66536 66537 let v; 66538 const arr = new Uint8Array(16); // Parse ########-....-....-....-............ 66539 66540 arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; 66541 arr[1] = v >>> 16 & 0xff; 66542 arr[2] = v >>> 8 & 0xff; 66543 arr[3] = v & 0xff; // Parse ........-####-....-....-............ 66544 66545 arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; 66546 arr[5] = v & 0xff; // Parse ........-....-####-....-............ 66547 66548 arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; 66549 arr[7] = v & 0xff; // Parse ........-....-....-####-............ 66550 66551 arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; 66552 arr[9] = v & 0xff; // Parse ........-....-....-....-############ 66553 // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) 66554 66555 arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; 66556 arr[11] = v / 0x100000000 & 0xff; 66557 arr[12] = v >>> 24 & 0xff; 66558 arr[13] = v >>> 16 & 0xff; 66559 arr[14] = v >>> 8 & 0xff; 66560 arr[15] = v & 0xff; 66561 return arr; 66562 } 66563 66564 var _default = parse; 66565 exports["default"] = _default; 66566 66567 /***/ }), 66568 66569 /***/ 40814: 66570 /***/ ((__unused_webpack_module, exports) => { 66571 66572 "use strict"; 66573 66574 66575 Object.defineProperty(exports, "__esModule", ({ 66576 value: true 66577 })); 66578 exports["default"] = void 0; 66579 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; 66580 exports["default"] = _default; 66581 66582 /***/ }), 66583 66584 /***/ 50807: 66585 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 66586 66587 "use strict"; 66588 66589 66590 Object.defineProperty(exports, "__esModule", ({ 66591 value: true 66592 })); 66593 exports["default"] = rng; 66594 66595 var _crypto = _interopRequireDefault(__nccwpck_require__(6113)); 66596 66597 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 66598 66599 const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate 66600 66601 let poolPtr = rnds8Pool.length; 66602 66603 function rng() { 66604 if (poolPtr > rnds8Pool.length - 16) { 66605 _crypto.default.randomFillSync(rnds8Pool); 66606 66607 poolPtr = 0; 66608 } 66609 66610 return rnds8Pool.slice(poolPtr, poolPtr += 16); 66611 } 66612 66613 /***/ }), 66614 66615 /***/ 85274: 66616 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 66617 66618 "use strict"; 66619 66620 66621 Object.defineProperty(exports, "__esModule", ({ 66622 value: true 66623 })); 66624 exports["default"] = void 0; 66625 66626 var _crypto = _interopRequireDefault(__nccwpck_require__(6113)); 66627 66628 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 66629 66630 function sha1(bytes) { 66631 if (Array.isArray(bytes)) { 66632 bytes = Buffer.from(bytes); 66633 } else if (typeof bytes === 'string') { 66634 bytes = Buffer.from(bytes, 'utf8'); 66635 } 66636 66637 return _crypto.default.createHash('sha1').update(bytes).digest(); 66638 } 66639 66640 var _default = sha1; 66641 exports["default"] = _default; 66642 66643 /***/ }), 66644 66645 /***/ 18950: 66646 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 66647 66648 "use strict"; 66649 66650 66651 Object.defineProperty(exports, "__esModule", ({ 66652 value: true 66653 })); 66654 exports["default"] = void 0; 66655 66656 var _validate = _interopRequireDefault(__nccwpck_require__(66900)); 66657 66658 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 66659 66660 /** 66661 * Convert array of 16 byte values to UUID string format of the form: 66662 * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 66663 */ 66664 const byteToHex = []; 66665 66666 for (let i = 0; i < 256; ++i) { 66667 byteToHex.push((i + 0x100).toString(16).substr(1)); 66668 } 66669 66670 function stringify(arr, offset = 0) { 66671 // Note: Be careful editing this code! It's been tuned for performance 66672 // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 66673 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 66674 // of the following: 66675 // - One or more input array values don't map to a hex octet (leading to 66676 // "undefined" in the uuid) 66677 // - Invalid input values for the RFC `version` or `variant` fields 66678 66679 if (!(0, _validate.default)(uuid)) { 66680 throw TypeError('Stringified UUID is invalid'); 66681 } 66682 66683 return uuid; 66684 } 66685 66686 var _default = stringify; 66687 exports["default"] = _default; 66688 66689 /***/ }), 66690 66691 /***/ 78628: 66692 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 66693 66694 "use strict"; 66695 66696 66697 Object.defineProperty(exports, "__esModule", ({ 66698 value: true 66699 })); 66700 exports["default"] = void 0; 66701 66702 var _rng = _interopRequireDefault(__nccwpck_require__(50807)); 66703 66704 var _stringify = _interopRequireDefault(__nccwpck_require__(18950)); 66705 66706 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 66707 66708 // **`v1()` - Generate time-based UUID** 66709 // 66710 // Inspired by https://github.com/LiosK/UUID.js 66711 // and http://docs.python.org/library/uuid.html 66712 let _nodeId; 66713 66714 let _clockseq; // Previous uuid creation time 66715 66716 66717 let _lastMSecs = 0; 66718 let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details 66719 66720 function v1(options, buf, offset) { 66721 let i = buf && offset || 0; 66722 const b = buf || new Array(16); 66723 options = options || {}; 66724 let node = options.node || _nodeId; 66725 let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not 66726 // specified. We do this lazily to minimize issues related to insufficient 66727 // system entropy. See #189 66728 66729 if (node == null || clockseq == null) { 66730 const seedBytes = options.random || (options.rng || _rng.default)(); 66731 66732 if (node == null) { 66733 // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) 66734 node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; 66735 } 66736 66737 if (clockseq == null) { 66738 // Per 4.2.2, randomize (14 bit) clockseq 66739 clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; 66740 } 66741 } // UUID timestamps are 100 nano-second units since the Gregorian epoch, 66742 // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so 66743 // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' 66744 // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. 66745 66746 66747 let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock 66748 // cycle to simulate higher resolution clock 66749 66750 let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) 66751 66752 const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression 66753 66754 if (dt < 0 && options.clockseq === undefined) { 66755 clockseq = clockseq + 1 & 0x3fff; 66756 } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new 66757 // time interval 66758 66759 66760 if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { 66761 nsecs = 0; 66762 } // Per 4.2.1.2 Throw error if too many uuids are requested 66763 66764 66765 if (nsecs >= 10000) { 66766 throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); 66767 } 66768 66769 _lastMSecs = msecs; 66770 _lastNSecs = nsecs; 66771 _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch 66772 66773 msecs += 12219292800000; // `time_low` 66774 66775 const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; 66776 b[i++] = tl >>> 24 & 0xff; 66777 b[i++] = tl >>> 16 & 0xff; 66778 b[i++] = tl >>> 8 & 0xff; 66779 b[i++] = tl & 0xff; // `time_mid` 66780 66781 const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; 66782 b[i++] = tmh >>> 8 & 0xff; 66783 b[i++] = tmh & 0xff; // `time_high_and_version` 66784 66785 b[i++] = tmh >>> 24 & 0xf | 0x10; // include version 66786 66787 b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) 66788 66789 b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` 66790 66791 b[i++] = clockseq & 0xff; // `node` 66792 66793 for (let n = 0; n < 6; ++n) { 66794 b[i + n] = node[n]; 66795 } 66796 66797 return buf || (0, _stringify.default)(b); 66798 } 66799 66800 var _default = v1; 66801 exports["default"] = _default; 66802 66803 /***/ }), 66804 66805 /***/ 86409: 66806 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 66807 66808 "use strict"; 66809 66810 66811 Object.defineProperty(exports, "__esModule", ({ 66812 value: true 66813 })); 66814 exports["default"] = void 0; 66815 66816 var _v = _interopRequireDefault(__nccwpck_require__(65998)); 66817 66818 var _md = _interopRequireDefault(__nccwpck_require__(4569)); 66819 66820 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 66821 66822 const v3 = (0, _v.default)('v3', 0x30, _md.default); 66823 var _default = v3; 66824 exports["default"] = _default; 66825 66826 /***/ }), 66827 66828 /***/ 65998: 66829 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 66830 66831 "use strict"; 66832 66833 66834 Object.defineProperty(exports, "__esModule", ({ 66835 value: true 66836 })); 66837 exports["default"] = _default; 66838 exports.URL = exports.DNS = void 0; 66839 66840 var _stringify = _interopRequireDefault(__nccwpck_require__(18950)); 66841 66842 var _parse = _interopRequireDefault(__nccwpck_require__(62746)); 66843 66844 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 66845 66846 function stringToBytes(str) { 66847 str = unescape(encodeURIComponent(str)); // UTF8 escape 66848 66849 const bytes = []; 66850 66851 for (let i = 0; i < str.length; ++i) { 66852 bytes.push(str.charCodeAt(i)); 66853 } 66854 66855 return bytes; 66856 } 66857 66858 const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; 66859 exports.DNS = DNS; 66860 const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; 66861 exports.URL = URL; 66862 66863 function _default(name, version, hashfunc) { 66864 function generateUUID(value, namespace, buf, offset) { 66865 if (typeof value === 'string') { 66866 value = stringToBytes(value); 66867 } 66868 66869 if (typeof namespace === 'string') { 66870 namespace = (0, _parse.default)(namespace); 66871 } 66872 66873 if (namespace.length !== 16) { 66874 throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); 66875 } // Compute hash of namespace and value, Per 4.3 66876 // Future: Use spread syntax when supported on all platforms, e.g. `bytes = 66877 // hashfunc([...namespace, ... value])` 66878 66879 66880 let bytes = new Uint8Array(16 + value.length); 66881 bytes.set(namespace); 66882 bytes.set(value, namespace.length); 66883 bytes = hashfunc(bytes); 66884 bytes[6] = bytes[6] & 0x0f | version; 66885 bytes[8] = bytes[8] & 0x3f | 0x80; 66886 66887 if (buf) { 66888 offset = offset || 0; 66889 66890 for (let i = 0; i < 16; ++i) { 66891 buf[offset + i] = bytes[i]; 66892 } 66893 66894 return buf; 66895 } 66896 66897 return (0, _stringify.default)(bytes); 66898 } // Function#name is not settable on some platforms (#270) 66899 66900 66901 try { 66902 generateUUID.name = name; // eslint-disable-next-line no-empty 66903 } catch (err) {} // For CommonJS default export support 66904 66905 66906 generateUUID.DNS = DNS; 66907 generateUUID.URL = URL; 66908 return generateUUID; 66909 } 66910 66911 /***/ }), 66912 66913 /***/ 85122: 66914 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 66915 66916 "use strict"; 66917 66918 66919 Object.defineProperty(exports, "__esModule", ({ 66920 value: true 66921 })); 66922 exports["default"] = void 0; 66923 66924 var _rng = _interopRequireDefault(__nccwpck_require__(50807)); 66925 66926 var _stringify = _interopRequireDefault(__nccwpck_require__(18950)); 66927 66928 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 66929 66930 function v4(options, buf, offset) { 66931 options = options || {}; 66932 66933 const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` 66934 66935 66936 rnds[6] = rnds[6] & 0x0f | 0x40; 66937 rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided 66938 66939 if (buf) { 66940 offset = offset || 0; 66941 66942 for (let i = 0; i < 16; ++i) { 66943 buf[offset + i] = rnds[i]; 66944 } 66945 66946 return buf; 66947 } 66948 66949 return (0, _stringify.default)(rnds); 66950 } 66951 66952 var _default = v4; 66953 exports["default"] = _default; 66954 66955 /***/ }), 66956 66957 /***/ 79120: 66958 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 66959 66960 "use strict"; 66961 66962 66963 Object.defineProperty(exports, "__esModule", ({ 66964 value: true 66965 })); 66966 exports["default"] = void 0; 66967 66968 var _v = _interopRequireDefault(__nccwpck_require__(65998)); 66969 66970 var _sha = _interopRequireDefault(__nccwpck_require__(85274)); 66971 66972 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 66973 66974 const v5 = (0, _v.default)('v5', 0x50, _sha.default); 66975 var _default = v5; 66976 exports["default"] = _default; 66977 66978 /***/ }), 66979 66980 /***/ 66900: 66981 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 66982 66983 "use strict"; 66984 66985 66986 Object.defineProperty(exports, "__esModule", ({ 66987 value: true 66988 })); 66989 exports["default"] = void 0; 66990 66991 var _regex = _interopRequireDefault(__nccwpck_require__(40814)); 66992 66993 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 66994 66995 function validate(uuid) { 66996 return typeof uuid === 'string' && _regex.default.test(uuid); 66997 } 66998 66999 var _default = validate; 67000 exports["default"] = _default; 67001 67002 /***/ }), 67003 67004 /***/ 81595: 67005 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 67006 67007 "use strict"; 67008 67009 67010 Object.defineProperty(exports, "__esModule", ({ 67011 value: true 67012 })); 67013 exports["default"] = void 0; 67014 67015 var _validate = _interopRequireDefault(__nccwpck_require__(66900)); 67016 67017 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 67018 67019 function version(uuid) { 67020 if (!(0, _validate.default)(uuid)) { 67021 throw TypeError('Invalid UUID'); 67022 } 67023 67024 return parseInt(uuid.substr(14, 1), 16); 67025 } 67026 67027 var _default = version; 67028 exports["default"] = _default; 67029 67030 /***/ }), 67031 67032 /***/ 62940: 67033 /***/ ((module) => { 67034 67035 // Returns a wrapper function that returns a wrapped callback 67036 // The wrapper function should do some stuff, and return a 67037 // presumably different callback function. 67038 // This makes sure that own properties are retained, so that 67039 // decorations and such are not lost along the way. 67040 module.exports = wrappy 67041 function wrappy (fn, cb) { 67042 if (fn && cb) return wrappy(fn)(cb) 67043 67044 if (typeof fn !== 'function') 67045 throw new TypeError('need wrapper function') 67046 67047 Object.keys(fn).forEach(function (k) { 67048 wrapper[k] = fn[k] 67049 }) 67050 67051 return wrapper 67052 67053 function wrapper() { 67054 var args = new Array(arguments.length) 67055 for (var i = 0; i < args.length; i++) { 67056 args[i] = arguments[i] 67057 } 67058 var ret = fn.apply(this, args) 67059 var cb = args[args.length-1] 67060 if (typeof ret === 'function' && ret !== cb) { 67061 Object.keys(cb).forEach(function (k) { 67062 ret[k] = cb[k] 67063 }) 67064 } 67065 return ret 67066 } 67067 } 67068 67069 67070 /***/ }), 67071 67072 /***/ 4091: 67073 /***/ ((module) => { 67074 67075 "use strict"; 67076 67077 module.exports = function (Yallist) { 67078 Yallist.prototype[Symbol.iterator] = function* () { 67079 for (let walker = this.head; walker; walker = walker.next) { 67080 yield walker.value 67081 } 67082 } 67083 } 67084 67085 67086 /***/ }), 67087 67088 /***/ 40665: 67089 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 67090 67091 "use strict"; 67092 67093 module.exports = Yallist 67094 67095 Yallist.Node = Node 67096 Yallist.create = Yallist 67097 67098 function Yallist (list) { 67099 var self = this 67100 if (!(self instanceof Yallist)) { 67101 self = new Yallist() 67102 } 67103 67104 self.tail = null 67105 self.head = null 67106 self.length = 0 67107 67108 if (list && typeof list.forEach === 'function') { 67109 list.forEach(function (item) { 67110 self.push(item) 67111 }) 67112 } else if (arguments.length > 0) { 67113 for (var i = 0, l = arguments.length; i < l; i++) { 67114 self.push(arguments[i]) 67115 } 67116 } 67117 67118 return self 67119 } 67120 67121 Yallist.prototype.removeNode = function (node) { 67122 if (node.list !== this) { 67123 throw new Error('removing node which does not belong to this list') 67124 } 67125 67126 var next = node.next 67127 var prev = node.prev 67128 67129 if (next) { 67130 next.prev = prev 67131 } 67132 67133 if (prev) { 67134 prev.next = next 67135 } 67136 67137 if (node === this.head) { 67138 this.head = next 67139 } 67140 if (node === this.tail) { 67141 this.tail = prev 67142 } 67143 67144 node.list.length-- 67145 node.next = null 67146 node.prev = null 67147 node.list = null 67148 67149 return next 67150 } 67151 67152 Yallist.prototype.unshiftNode = function (node) { 67153 if (node === this.head) { 67154 return 67155 } 67156 67157 if (node.list) { 67158 node.list.removeNode(node) 67159 } 67160 67161 var head = this.head 67162 node.list = this 67163 node.next = head 67164 if (head) { 67165 head.prev = node 67166 } 67167 67168 this.head = node 67169 if (!this.tail) { 67170 this.tail = node 67171 } 67172 this.length++ 67173 } 67174 67175 Yallist.prototype.pushNode = function (node) { 67176 if (node === this.tail) { 67177 return 67178 } 67179 67180 if (node.list) { 67181 node.list.removeNode(node) 67182 } 67183 67184 var tail = this.tail 67185 node.list = this 67186 node.prev = tail 67187 if (tail) { 67188 tail.next = node 67189 } 67190 67191 this.tail = node 67192 if (!this.head) { 67193 this.head = node 67194 } 67195 this.length++ 67196 } 67197 67198 Yallist.prototype.push = function () { 67199 for (var i = 0, l = arguments.length; i < l; i++) { 67200 push(this, arguments[i]) 67201 } 67202 return this.length 67203 } 67204 67205 Yallist.prototype.unshift = function () { 67206 for (var i = 0, l = arguments.length; i < l; i++) { 67207 unshift(this, arguments[i]) 67208 } 67209 return this.length 67210 } 67211 67212 Yallist.prototype.pop = function () { 67213 if (!this.tail) { 67214 return undefined 67215 } 67216 67217 var res = this.tail.value 67218 this.tail = this.tail.prev 67219 if (this.tail) { 67220 this.tail.next = null 67221 } else { 67222 this.head = null 67223 } 67224 this.length-- 67225 return res 67226 } 67227 67228 Yallist.prototype.shift = function () { 67229 if (!this.head) { 67230 return undefined 67231 } 67232 67233 var res = this.head.value 67234 this.head = this.head.next 67235 if (this.head) { 67236 this.head.prev = null 67237 } else { 67238 this.tail = null 67239 } 67240 this.length-- 67241 return res 67242 } 67243 67244 Yallist.prototype.forEach = function (fn, thisp) { 67245 thisp = thisp || this 67246 for (var walker = this.head, i = 0; walker !== null; i++) { 67247 fn.call(thisp, walker.value, i, this) 67248 walker = walker.next 67249 } 67250 } 67251 67252 Yallist.prototype.forEachReverse = function (fn, thisp) { 67253 thisp = thisp || this 67254 for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { 67255 fn.call(thisp, walker.value, i, this) 67256 walker = walker.prev 67257 } 67258 } 67259 67260 Yallist.prototype.get = function (n) { 67261 for (var i = 0, walker = this.head; walker !== null && i < n; i++) { 67262 // abort out of the list early if we hit a cycle 67263 walker = walker.next 67264 } 67265 if (i === n && walker !== null) { 67266 return walker.value 67267 } 67268 } 67269 67270 Yallist.prototype.getReverse = function (n) { 67271 for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { 67272 // abort out of the list early if we hit a cycle 67273 walker = walker.prev 67274 } 67275 if (i === n && walker !== null) { 67276 return walker.value 67277 } 67278 } 67279 67280 Yallist.prototype.map = function (fn, thisp) { 67281 thisp = thisp || this 67282 var res = new Yallist() 67283 for (var walker = this.head; walker !== null;) { 67284 res.push(fn.call(thisp, walker.value, this)) 67285 walker = walker.next 67286 } 67287 return res 67288 } 67289 67290 Yallist.prototype.mapReverse = function (fn, thisp) { 67291 thisp = thisp || this 67292 var res = new Yallist() 67293 for (var walker = this.tail; walker !== null;) { 67294 res.push(fn.call(thisp, walker.value, this)) 67295 walker = walker.prev 67296 } 67297 return res 67298 } 67299 67300 Yallist.prototype.reduce = function (fn, initial) { 67301 var acc 67302 var walker = this.head 67303 if (arguments.length > 1) { 67304 acc = initial 67305 } else if (this.head) { 67306 walker = this.head.next 67307 acc = this.head.value 67308 } else { 67309 throw new TypeError('Reduce of empty list with no initial value') 67310 } 67311 67312 for (var i = 0; walker !== null; i++) { 67313 acc = fn(acc, walker.value, i) 67314 walker = walker.next 67315 } 67316 67317 return acc 67318 } 67319 67320 Yallist.prototype.reduceReverse = function (fn, initial) { 67321 var acc 67322 var walker = this.tail 67323 if (arguments.length > 1) { 67324 acc = initial 67325 } else if (this.tail) { 67326 walker = this.tail.prev 67327 acc = this.tail.value 67328 } else { 67329 throw new TypeError('Reduce of empty list with no initial value') 67330 } 67331 67332 for (var i = this.length - 1; walker !== null; i--) { 67333 acc = fn(acc, walker.value, i) 67334 walker = walker.prev 67335 } 67336 67337 return acc 67338 } 67339 67340 Yallist.prototype.toArray = function () { 67341 var arr = new Array(this.length) 67342 for (var i = 0, walker = this.head; walker !== null; i++) { 67343 arr[i] = walker.value 67344 walker = walker.next 67345 } 67346 return arr 67347 } 67348 67349 Yallist.prototype.toArrayReverse = function () { 67350 var arr = new Array(this.length) 67351 for (var i = 0, walker = this.tail; walker !== null; i++) { 67352 arr[i] = walker.value 67353 walker = walker.prev 67354 } 67355 return arr 67356 } 67357 67358 Yallist.prototype.slice = function (from, to) { 67359 to = to || this.length 67360 if (to < 0) { 67361 to += this.length 67362 } 67363 from = from || 0 67364 if (from < 0) { 67365 from += this.length 67366 } 67367 var ret = new Yallist() 67368 if (to < from || to < 0) { 67369 return ret 67370 } 67371 if (from < 0) { 67372 from = 0 67373 } 67374 if (to > this.length) { 67375 to = this.length 67376 } 67377 for (var i = 0, walker = this.head; walker !== null && i < from; i++) { 67378 walker = walker.next 67379 } 67380 for (; walker !== null && i < to; i++, walker = walker.next) { 67381 ret.push(walker.value) 67382 } 67383 return ret 67384 } 67385 67386 Yallist.prototype.sliceReverse = function (from, to) { 67387 to = to || this.length 67388 if (to < 0) { 67389 to += this.length 67390 } 67391 from = from || 0 67392 if (from < 0) { 67393 from += this.length 67394 } 67395 var ret = new Yallist() 67396 if (to < from || to < 0) { 67397 return ret 67398 } 67399 if (from < 0) { 67400 from = 0 67401 } 67402 if (to > this.length) { 67403 to = this.length 67404 } 67405 for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { 67406 walker = walker.prev 67407 } 67408 for (; walker !== null && i > from; i--, walker = walker.prev) { 67409 ret.push(walker.value) 67410 } 67411 return ret 67412 } 67413 67414 Yallist.prototype.splice = function (start, deleteCount, ...nodes) { 67415 if (start > this.length) { 67416 start = this.length - 1 67417 } 67418 if (start < 0) { 67419 start = this.length + start; 67420 } 67421 67422 for (var i = 0, walker = this.head; walker !== null && i < start; i++) { 67423 walker = walker.next 67424 } 67425 67426 var ret = [] 67427 for (var i = 0; walker && i < deleteCount; i++) { 67428 ret.push(walker.value) 67429 walker = this.removeNode(walker) 67430 } 67431 if (walker === null) { 67432 walker = this.tail 67433 } 67434 67435 if (walker !== this.head && walker !== this.tail) { 67436 walker = walker.prev 67437 } 67438 67439 for (var i = 0; i < nodes.length; i++) { 67440 walker = insert(this, walker, nodes[i]) 67441 } 67442 return ret; 67443 } 67444 67445 Yallist.prototype.reverse = function () { 67446 var head = this.head 67447 var tail = this.tail 67448 for (var walker = head; walker !== null; walker = walker.prev) { 67449 var p = walker.prev 67450 walker.prev = walker.next 67451 walker.next = p 67452 } 67453 this.head = tail 67454 this.tail = head 67455 return this 67456 } 67457 67458 function insert (self, node, value) { 67459 var inserted = node === self.head ? 67460 new Node(value, null, node, self) : 67461 new Node(value, node, node.next, self) 67462 67463 if (inserted.next === null) { 67464 self.tail = inserted 67465 } 67466 if (inserted.prev === null) { 67467 self.head = inserted 67468 } 67469 67470 self.length++ 67471 67472 return inserted 67473 } 67474 67475 function push (self, item) { 67476 self.tail = new Node(item, self.tail, null, self) 67477 if (!self.head) { 67478 self.head = self.tail 67479 } 67480 self.length++ 67481 } 67482 67483 function unshift (self, item) { 67484 self.head = new Node(item, null, self.head, self) 67485 if (!self.tail) { 67486 self.tail = self.head 67487 } 67488 self.length++ 67489 } 67490 67491 function Node (value, prev, next, list) { 67492 if (!(this instanceof Node)) { 67493 return new Node(value, prev, next, list) 67494 } 67495 67496 this.list = list 67497 this.value = value 67498 67499 if (prev) { 67500 prev.next = this 67501 this.prev = prev 67502 } else { 67503 this.prev = null 67504 } 67505 67506 if (next) { 67507 next.prev = this 67508 this.next = next 67509 } else { 67510 this.next = null 67511 } 67512 } 67513 67514 try { 67515 // add if support for Symbol.iterator is present 67516 __nccwpck_require__(4091)(Yallist) 67517 } catch (er) {} 67518 67519 67520 /***/ }), 67521 67522 /***/ 39491: 67523 /***/ ((module) => { 67524 67525 "use strict"; 67526 module.exports = require("assert"); 67527 67528 /***/ }), 67529 67530 /***/ 50852: 67531 /***/ ((module) => { 67532 67533 "use strict"; 67534 module.exports = require("async_hooks"); 67535 67536 /***/ }), 67537 67538 /***/ 14300: 67539 /***/ ((module) => { 67540 67541 "use strict"; 67542 module.exports = require("buffer"); 67543 67544 /***/ }), 67545 67546 /***/ 96206: 67547 /***/ ((module) => { 67548 67549 "use strict"; 67550 module.exports = require("console"); 67551 67552 /***/ }), 67553 67554 /***/ 6113: 67555 /***/ ((module) => { 67556 67557 "use strict"; 67558 module.exports = require("crypto"); 67559 67560 /***/ }), 67561 67562 /***/ 67643: 67563 /***/ ((module) => { 67564 67565 "use strict"; 67566 module.exports = require("diagnostics_channel"); 67567 67568 /***/ }), 67569 67570 /***/ 9523: 67571 /***/ ((module) => { 67572 67573 "use strict"; 67574 module.exports = require("dns"); 67575 67576 /***/ }), 67577 67578 /***/ 82361: 67579 /***/ ((module) => { 67580 67581 "use strict"; 67582 module.exports = require("events"); 67583 67584 /***/ }), 67585 67586 /***/ 57147: 67587 /***/ ((module) => { 67588 67589 "use strict"; 67590 module.exports = require("fs"); 67591 67592 /***/ }), 67593 67594 /***/ 73292: 67595 /***/ ((module) => { 67596 67597 "use strict"; 67598 module.exports = require("fs/promises"); 67599 67600 /***/ }), 67601 67602 /***/ 13685: 67603 /***/ ((module) => { 67604 67605 "use strict"; 67606 module.exports = require("http"); 67607 67608 /***/ }), 67609 67610 /***/ 85158: 67611 /***/ ((module) => { 67612 67613 "use strict"; 67614 module.exports = require("http2"); 67615 67616 /***/ }), 67617 67618 /***/ 95687: 67619 /***/ ((module) => { 67620 67621 "use strict"; 67622 module.exports = require("https"); 67623 67624 /***/ }), 67625 67626 /***/ 41808: 67627 /***/ ((module) => { 67628 67629 "use strict"; 67630 module.exports = require("net"); 67631 67632 /***/ }), 67633 67634 /***/ 15673: 67635 /***/ ((module) => { 67636 67637 "use strict"; 67638 module.exports = require("node:events"); 67639 67640 /***/ }), 67641 67642 /***/ 84492: 67643 /***/ ((module) => { 67644 67645 "use strict"; 67646 module.exports = require("node:stream"); 67647 67648 /***/ }), 67649 67650 /***/ 47261: 67651 /***/ ((module) => { 67652 67653 "use strict"; 67654 module.exports = require("node:util"); 67655 67656 /***/ }), 67657 67658 /***/ 22037: 67659 /***/ ((module) => { 67660 67661 "use strict"; 67662 module.exports = require("os"); 67663 67664 /***/ }), 67665 67666 /***/ 71017: 67667 /***/ ((module) => { 67668 67669 "use strict"; 67670 module.exports = require("path"); 67671 67672 /***/ }), 67673 67674 /***/ 4074: 67675 /***/ ((module) => { 67676 67677 "use strict"; 67678 module.exports = require("perf_hooks"); 67679 67680 /***/ }), 67681 67682 /***/ 77282: 67683 /***/ ((module) => { 67684 67685 "use strict"; 67686 module.exports = require("process"); 67687 67688 /***/ }), 67689 67690 /***/ 63477: 67691 /***/ ((module) => { 67692 67693 "use strict"; 67694 module.exports = require("querystring"); 67695 67696 /***/ }), 67697 67698 /***/ 12781: 67699 /***/ ((module) => { 67700 67701 "use strict"; 67702 module.exports = require("stream"); 67703 67704 /***/ }), 67705 67706 /***/ 35356: 67707 /***/ ((module) => { 67708 67709 "use strict"; 67710 module.exports = require("stream/web"); 67711 67712 /***/ }), 67713 67714 /***/ 71576: 67715 /***/ ((module) => { 67716 67717 "use strict"; 67718 module.exports = require("string_decoder"); 67719 67720 /***/ }), 67721 67722 /***/ 68670: 67723 /***/ ((module) => { 67724 67725 "use strict"; 67726 module.exports = require("timers/promises"); 67727 67728 /***/ }), 67729 67730 /***/ 24404: 67731 /***/ ((module) => { 67732 67733 "use strict"; 67734 module.exports = require("tls"); 67735 67736 /***/ }), 67737 67738 /***/ 76224: 67739 /***/ ((module) => { 67740 67741 "use strict"; 67742 module.exports = require("tty"); 67743 67744 /***/ }), 67745 67746 /***/ 57310: 67747 /***/ ((module) => { 67748 67749 "use strict"; 67750 module.exports = require("url"); 67751 67752 /***/ }), 67753 67754 /***/ 73837: 67755 /***/ ((module) => { 67756 67757 "use strict"; 67758 module.exports = require("util"); 67759 67760 /***/ }), 67761 67762 /***/ 29830: 67763 /***/ ((module) => { 67764 67765 "use strict"; 67766 module.exports = require("util/types"); 67767 67768 /***/ }), 67769 67770 /***/ 71267: 67771 /***/ ((module) => { 67772 67773 "use strict"; 67774 module.exports = require("worker_threads"); 67775 67776 /***/ }), 67777 67778 /***/ 59796: 67779 /***/ ((module) => { 67780 67781 "use strict"; 67782 module.exports = require("zlib"); 67783 67784 /***/ }), 67785 67786 /***/ 92960: 67787 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 67788 67789 "use strict"; 67790 67791 67792 const WritableStream = (__nccwpck_require__(84492).Writable) 67793 const inherits = (__nccwpck_require__(47261).inherits) 67794 67795 const StreamSearch = __nccwpck_require__(51142) 67796 67797 const PartStream = __nccwpck_require__(81620) 67798 const HeaderParser = __nccwpck_require__(92032) 67799 67800 const DASH = 45 67801 const B_ONEDASH = Buffer.from('-') 67802 const B_CRLF = Buffer.from('\r\n') 67803 const EMPTY_FN = function () {} 67804 67805 function Dicer (cfg) { 67806 if (!(this instanceof Dicer)) { return new Dicer(cfg) } 67807 WritableStream.call(this, cfg) 67808 67809 if (!cfg || (!cfg.headerFirst && typeof cfg.boundary !== 'string')) { throw new TypeError('Boundary required') } 67810 67811 if (typeof cfg.boundary === 'string') { this.setBoundary(cfg.boundary) } else { this._bparser = undefined } 67812 67813 this._headerFirst = cfg.headerFirst 67814 67815 this._dashes = 0 67816 this._parts = 0 67817 this._finished = false 67818 this._realFinish = false 67819 this._isPreamble = true 67820 this._justMatched = false 67821 this._firstWrite = true 67822 this._inHeader = true 67823 this._part = undefined 67824 this._cb = undefined 67825 this._ignoreData = false 67826 this._partOpts = { highWaterMark: cfg.partHwm } 67827 this._pause = false 67828 67829 const self = this 67830 this._hparser = new HeaderParser(cfg) 67831 this._hparser.on('header', function (header) { 67832 self._inHeader = false 67833 self._part.emit('header', header) 67834 }) 67835 } 67836 inherits(Dicer, WritableStream) 67837 67838 Dicer.prototype.emit = function (ev) { 67839 if (ev === 'finish' && !this._realFinish) { 67840 if (!this._finished) { 67841 const self = this 67842 process.nextTick(function () { 67843 self.emit('error', new Error('Unexpected end of multipart data')) 67844 if (self._part && !self._ignoreData) { 67845 const type = (self._isPreamble ? 'Preamble' : 'Part') 67846 self._part.emit('error', new Error(type + ' terminated early due to unexpected end of multipart data')) 67847 self._part.push(null) 67848 process.nextTick(function () { 67849 self._realFinish = true 67850 self.emit('finish') 67851 self._realFinish = false 67852 }) 67853 return 67854 } 67855 self._realFinish = true 67856 self.emit('finish') 67857 self._realFinish = false 67858 }) 67859 } 67860 } else { WritableStream.prototype.emit.apply(this, arguments) } 67861 } 67862 67863 Dicer.prototype._write = function (data, encoding, cb) { 67864 // ignore unexpected data (e.g. extra trailer data after finished) 67865 if (!this._hparser && !this._bparser) { return cb() } 67866 67867 if (this._headerFirst && this._isPreamble) { 67868 if (!this._part) { 67869 this._part = new PartStream(this._partOpts) 67870 if (this.listenerCount('preamble') !== 0) { this.emit('preamble', this._part) } else { this._ignore() } 67871 } 67872 const r = this._hparser.push(data) 67873 if (!this._inHeader && r !== undefined && r < data.length) { data = data.slice(r) } else { return cb() } 67874 } 67875 67876 // allows for "easier" testing 67877 if (this._firstWrite) { 67878 this._bparser.push(B_CRLF) 67879 this._firstWrite = false 67880 } 67881 67882 this._bparser.push(data) 67883 67884 if (this._pause) { this._cb = cb } else { cb() } 67885 } 67886 67887 Dicer.prototype.reset = function () { 67888 this._part = undefined 67889 this._bparser = undefined 67890 this._hparser = undefined 67891 } 67892 67893 Dicer.prototype.setBoundary = function (boundary) { 67894 const self = this 67895 this._bparser = new StreamSearch('\r\n--' + boundary) 67896 this._bparser.on('info', function (isMatch, data, start, end) { 67897 self._oninfo(isMatch, data, start, end) 67898 }) 67899 } 67900 67901 Dicer.prototype._ignore = function () { 67902 if (this._part && !this._ignoreData) { 67903 this._ignoreData = true 67904 this._part.on('error', EMPTY_FN) 67905 // we must perform some kind of read on the stream even though we are 67906 // ignoring the data, otherwise node's Readable stream will not emit 'end' 67907 // after pushing null to the stream 67908 this._part.resume() 67909 } 67910 } 67911 67912 Dicer.prototype._oninfo = function (isMatch, data, start, end) { 67913 let buf; const self = this; let i = 0; let r; let shouldWriteMore = true 67914 67915 if (!this._part && this._justMatched && data) { 67916 while (this._dashes < 2 && (start + i) < end) { 67917 if (data[start + i] === DASH) { 67918 ++i 67919 ++this._dashes 67920 } else { 67921 if (this._dashes) { buf = B_ONEDASH } 67922 this._dashes = 0 67923 break 67924 } 67925 } 67926 if (this._dashes === 2) { 67927 if ((start + i) < end && this.listenerCount('trailer') !== 0) { this.emit('trailer', data.slice(start + i, end)) } 67928 this.reset() 67929 this._finished = true 67930 // no more parts will be added 67931 if (self._parts === 0) { 67932 self._realFinish = true 67933 self.emit('finish') 67934 self._realFinish = false 67935 } 67936 } 67937 if (this._dashes) { return } 67938 } 67939 if (this._justMatched) { this._justMatched = false } 67940 if (!this._part) { 67941 this._part = new PartStream(this._partOpts) 67942 this._part._read = function (n) { 67943 self._unpause() 67944 } 67945 if (this._isPreamble && this.listenerCount('preamble') !== 0) { 67946 this.emit('preamble', this._part) 67947 } else if (this._isPreamble !== true && this.listenerCount('part') !== 0) { 67948 this.emit('part', this._part) 67949 } else { 67950 this._ignore() 67951 } 67952 if (!this._isPreamble) { this._inHeader = true } 67953 } 67954 if (data && start < end && !this._ignoreData) { 67955 if (this._isPreamble || !this._inHeader) { 67956 if (buf) { shouldWriteMore = this._part.push(buf) } 67957 shouldWriteMore = this._part.push(data.slice(start, end)) 67958 if (!shouldWriteMore) { this._pause = true } 67959 } else if (!this._isPreamble && this._inHeader) { 67960 if (buf) { this._hparser.push(buf) } 67961 r = this._hparser.push(data.slice(start, end)) 67962 if (!this._inHeader && r !== undefined && r < end) { this._oninfo(false, data, start + r, end) } 67963 } 67964 } 67965 if (isMatch) { 67966 this._hparser.reset() 67967 if (this._isPreamble) { this._isPreamble = false } else { 67968 if (start !== end) { 67969 ++this._parts 67970 this._part.on('end', function () { 67971 if (--self._parts === 0) { 67972 if (self._finished) { 67973 self._realFinish = true 67974 self.emit('finish') 67975 self._realFinish = false 67976 } else { 67977 self._unpause() 67978 } 67979 } 67980 }) 67981 } 67982 } 67983 this._part.push(null) 67984 this._part = undefined 67985 this._ignoreData = false 67986 this._justMatched = true 67987 this._dashes = 0 67988 } 67989 } 67990 67991 Dicer.prototype._unpause = function () { 67992 if (!this._pause) { return } 67993 67994 this._pause = false 67995 if (this._cb) { 67996 const cb = this._cb 67997 this._cb = undefined 67998 cb() 67999 } 68000 } 68001 68002 module.exports = Dicer 68003 68004 68005 /***/ }), 68006 68007 /***/ 92032: 68008 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 68009 68010 "use strict"; 68011 68012 68013 const EventEmitter = (__nccwpck_require__(15673).EventEmitter) 68014 const inherits = (__nccwpck_require__(47261).inherits) 68015 const getLimit = __nccwpck_require__(21467) 68016 68017 const StreamSearch = __nccwpck_require__(51142) 68018 68019 const B_DCRLF = Buffer.from('\r\n\r\n') 68020 const RE_CRLF = /\r\n/g 68021 const RE_HDR = /^([^:]+):[ \t]?([\x00-\xFF]+)?$/ // eslint-disable-line no-control-regex 68022 68023 function HeaderParser (cfg) { 68024 EventEmitter.call(this) 68025 68026 cfg = cfg || {} 68027 const self = this 68028 this.nread = 0 68029 this.maxed = false 68030 this.npairs = 0 68031 this.maxHeaderPairs = getLimit(cfg, 'maxHeaderPairs', 2000) 68032 this.maxHeaderSize = getLimit(cfg, 'maxHeaderSize', 80 * 1024) 68033 this.buffer = '' 68034 this.header = {} 68035 this.finished = false 68036 this.ss = new StreamSearch(B_DCRLF) 68037 this.ss.on('info', function (isMatch, data, start, end) { 68038 if (data && !self.maxed) { 68039 if (self.nread + end - start >= self.maxHeaderSize) { 68040 end = self.maxHeaderSize - self.nread + start 68041 self.nread = self.maxHeaderSize 68042 self.maxed = true 68043 } else { self.nread += (end - start) } 68044 68045 self.buffer += data.toString('binary', start, end) 68046 } 68047 if (isMatch) { self._finish() } 68048 }) 68049 } 68050 inherits(HeaderParser, EventEmitter) 68051 68052 HeaderParser.prototype.push = function (data) { 68053 const r = this.ss.push(data) 68054 if (this.finished) { return r } 68055 } 68056 68057 HeaderParser.prototype.reset = function () { 68058 this.finished = false 68059 this.buffer = '' 68060 this.header = {} 68061 this.ss.reset() 68062 } 68063 68064 HeaderParser.prototype._finish = function () { 68065 if (this.buffer) { this._parseHeader() } 68066 this.ss.matches = this.ss.maxMatches 68067 const header = this.header 68068 this.header = {} 68069 this.buffer = '' 68070 this.finished = true 68071 this.nread = this.npairs = 0 68072 this.maxed = false 68073 this.emit('header', header) 68074 } 68075 68076 HeaderParser.prototype._parseHeader = function () { 68077 if (this.npairs === this.maxHeaderPairs) { return } 68078 68079 const lines = this.buffer.split(RE_CRLF) 68080 const len = lines.length 68081 let m, h 68082 68083 for (var i = 0; i < len; ++i) { // eslint-disable-line no-var 68084 if (lines[i].length === 0) { continue } 68085 if (lines[i][0] === '\t' || lines[i][0] === ' ') { 68086 // folded header content 68087 // RFC2822 says to just remove the CRLF and not the whitespace following 68088 // it, so we follow the RFC and include the leading whitespace ... 68089 if (h) { 68090 this.header[h][this.header[h].length - 1] += lines[i] 68091 continue 68092 } 68093 } 68094 68095 const posColon = lines[i].indexOf(':') 68096 if ( 68097 posColon === -1 || 68098 posColon === 0 68099 ) { 68100 return 68101 } 68102 m = RE_HDR.exec(lines[i]) 68103 h = m[1].toLowerCase() 68104 this.header[h] = this.header[h] || [] 68105 this.header[h].push((m[2] || '')) 68106 if (++this.npairs === this.maxHeaderPairs) { break } 68107 } 68108 } 68109 68110 module.exports = HeaderParser 68111 68112 68113 /***/ }), 68114 68115 /***/ 81620: 68116 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 68117 68118 "use strict"; 68119 68120 68121 const inherits = (__nccwpck_require__(47261).inherits) 68122 const ReadableStream = (__nccwpck_require__(84492).Readable) 68123 68124 function PartStream (opts) { 68125 ReadableStream.call(this, opts) 68126 } 68127 inherits(PartStream, ReadableStream) 68128 68129 PartStream.prototype._read = function (n) {} 68130 68131 module.exports = PartStream 68132 68133 68134 /***/ }), 68135 68136 /***/ 51142: 68137 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 68138 68139 "use strict"; 68140 68141 68142 /** 68143 * Copyright Brian White. All rights reserved. 68144 * 68145 * @see https://github.com/mscdex/streamsearch 68146 * 68147 * Permission is hereby granted, free of charge, to any person obtaining a copy 68148 * of this software and associated documentation files (the "Software"), to 68149 * deal in the Software without restriction, including without limitation the 68150 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 68151 * sell copies of the Software, and to permit persons to whom the Software is 68152 * furnished to do so, subject to the following conditions: 68153 * 68154 * The above copyright notice and this permission notice shall be included in 68155 * all copies or substantial portions of the Software. 68156 * 68157 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 68158 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 68159 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 68160 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 68161 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 68162 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 68163 * IN THE SOFTWARE. 68164 * 68165 * Based heavily on the Streaming Boyer-Moore-Horspool C++ implementation 68166 * by Hongli Lai at: https://github.com/FooBarWidget/boyer-moore-horspool 68167 */ 68168 const EventEmitter = (__nccwpck_require__(15673).EventEmitter) 68169 const inherits = (__nccwpck_require__(47261).inherits) 68170 68171 function SBMH (needle) { 68172 if (typeof needle === 'string') { 68173 needle = Buffer.from(needle) 68174 } 68175 68176 if (!Buffer.isBuffer(needle)) { 68177 throw new TypeError('The needle has to be a String or a Buffer.') 68178 } 68179 68180 const needleLength = needle.length 68181 68182 if (needleLength === 0) { 68183 throw new Error('The needle cannot be an empty String/Buffer.') 68184 } 68185 68186 if (needleLength > 256) { 68187 throw new Error('The needle cannot have a length bigger than 256.') 68188 } 68189 68190 this.maxMatches = Infinity 68191 this.matches = 0 68192 68193 this._occ = new Array(256) 68194 .fill(needleLength) // Initialize occurrence table. 68195 this._lookbehind_size = 0 68196 this._needle = needle 68197 this._bufpos = 0 68198 68199 this._lookbehind = Buffer.alloc(needleLength) 68200 68201 // Populate occurrence table with analysis of the needle, 68202 // ignoring last letter. 68203 for (var i = 0; i < needleLength - 1; ++i) { // eslint-disable-line no-var 68204 this._occ[needle[i]] = needleLength - 1 - i 68205 } 68206 } 68207 inherits(SBMH, EventEmitter) 68208 68209 SBMH.prototype.reset = function () { 68210 this._lookbehind_size = 0 68211 this.matches = 0 68212 this._bufpos = 0 68213 } 68214 68215 SBMH.prototype.push = function (chunk, pos) { 68216 if (!Buffer.isBuffer(chunk)) { 68217 chunk = Buffer.from(chunk, 'binary') 68218 } 68219 const chlen = chunk.length 68220 this._bufpos = pos || 0 68221 let r 68222 while (r !== chlen && this.matches < this.maxMatches) { r = this._sbmh_feed(chunk) } 68223 return r 68224 } 68225 68226 SBMH.prototype._sbmh_feed = function (data) { 68227 const len = data.length 68228 const needle = this._needle 68229 const needleLength = needle.length 68230 const lastNeedleChar = needle[needleLength - 1] 68231 68232 // Positive: points to a position in `data` 68233 // pos == 3 points to data[3] 68234 // Negative: points to a position in the lookbehind buffer 68235 // pos == -2 points to lookbehind[lookbehind_size - 2] 68236 let pos = -this._lookbehind_size 68237 let ch 68238 68239 if (pos < 0) { 68240 // Lookbehind buffer is not empty. Perform Boyer-Moore-Horspool 68241 // search with character lookup code that considers both the 68242 // lookbehind buffer and the current round's haystack data. 68243 // 68244 // Loop until 68245 // there is a match. 68246 // or until 68247 // we've moved past the position that requires the 68248 // lookbehind buffer. In this case we switch to the 68249 // optimized loop. 68250 // or until 68251 // the character to look at lies outside the haystack. 68252 while (pos < 0 && pos <= len - needleLength) { 68253 ch = this._sbmh_lookup_char(data, pos + needleLength - 1) 68254 68255 if ( 68256 ch === lastNeedleChar && 68257 this._sbmh_memcmp(data, pos, needleLength - 1) 68258 ) { 68259 this._lookbehind_size = 0 68260 ++this.matches 68261 this.emit('info', true) 68262 68263 return (this._bufpos = pos + needleLength) 68264 } 68265 pos += this._occ[ch] 68266 } 68267 68268 // No match. 68269 68270 if (pos < 0) { 68271 // There's too few data for Boyer-Moore-Horspool to run, 68272 // so let's use a different algorithm to skip as much as 68273 // we can. 68274 // Forward pos until 68275 // the trailing part of lookbehind + data 68276 // looks like the beginning of the needle 68277 // or until 68278 // pos == 0 68279 while (pos < 0 && !this._sbmh_memcmp(data, pos, len - pos)) { ++pos } 68280 } 68281 68282 if (pos >= 0) { 68283 // Discard lookbehind buffer. 68284 this.emit('info', false, this._lookbehind, 0, this._lookbehind_size) 68285 this._lookbehind_size = 0 68286 } else { 68287 // Cut off part of the lookbehind buffer that has 68288 // been processed and append the entire haystack 68289 // into it. 68290 const bytesToCutOff = this._lookbehind_size + pos 68291 if (bytesToCutOff > 0) { 68292 // The cut off data is guaranteed not to contain the needle. 68293 this.emit('info', false, this._lookbehind, 0, bytesToCutOff) 68294 } 68295 68296 this._lookbehind.copy(this._lookbehind, 0, bytesToCutOff, 68297 this._lookbehind_size - bytesToCutOff) 68298 this._lookbehind_size -= bytesToCutOff 68299 68300 data.copy(this._lookbehind, this._lookbehind_size) 68301 this._lookbehind_size += len 68302 68303 this._bufpos = len 68304 return len 68305 } 68306 } 68307 68308 pos += (pos >= 0) * this._bufpos 68309 68310 // Lookbehind buffer is now empty. We only need to check if the 68311 // needle is in the haystack. 68312 if (data.indexOf(needle, pos) !== -1) { 68313 pos = data.indexOf(needle, pos) 68314 ++this.matches 68315 if (pos > 0) { this.emit('info', true, data, this._bufpos, pos) } else { this.emit('info', true) } 68316 68317 return (this._bufpos = pos + needleLength) 68318 } else { 68319 pos = len - needleLength 68320 } 68321 68322 // There was no match. If there's trailing haystack data that we cannot 68323 // match yet using the Boyer-Moore-Horspool algorithm (because the trailing 68324 // data is less than the needle size) then match using a modified 68325 // algorithm that starts matching from the beginning instead of the end. 68326 // Whatever trailing data is left after running this algorithm is added to 68327 // the lookbehind buffer. 68328 while ( 68329 pos < len && 68330 ( 68331 data[pos] !== needle[0] || 68332 ( 68333 (Buffer.compare( 68334 data.subarray(pos, pos + len - pos), 68335 needle.subarray(0, len - pos) 68336 ) !== 0) 68337 ) 68338 ) 68339 ) { 68340 ++pos 68341 } 68342 if (pos < len) { 68343 data.copy(this._lookbehind, 0, pos, pos + (len - pos)) 68344 this._lookbehind_size = len - pos 68345 } 68346 68347 // Everything until pos is guaranteed not to contain needle data. 68348 if (pos > 0) { this.emit('info', false, data, this._bufpos, pos < len ? pos : len) } 68349 68350 this._bufpos = len 68351 return len 68352 } 68353 68354 SBMH.prototype._sbmh_lookup_char = function (data, pos) { 68355 return (pos < 0) 68356 ? this._lookbehind[this._lookbehind_size + pos] 68357 : data[pos] 68358 } 68359 68360 SBMH.prototype._sbmh_memcmp = function (data, pos, len) { 68361 for (var i = 0; i < len; ++i) { // eslint-disable-line no-var 68362 if (this._sbmh_lookup_char(data, pos + i) !== this._needle[i]) { return false } 68363 } 68364 return true 68365 } 68366 68367 module.exports = SBMH 68368 68369 68370 /***/ }), 68371 68372 /***/ 50727: 68373 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 68374 68375 "use strict"; 68376 68377 68378 const WritableStream = (__nccwpck_require__(84492).Writable) 68379 const { inherits } = __nccwpck_require__(47261) 68380 const Dicer = __nccwpck_require__(92960) 68381 68382 const MultipartParser = __nccwpck_require__(32183) 68383 const UrlencodedParser = __nccwpck_require__(78306) 68384 const parseParams = __nccwpck_require__(31854) 68385 68386 function Busboy (opts) { 68387 if (!(this instanceof Busboy)) { return new Busboy(opts) } 68388 68389 if (typeof opts !== 'object') { 68390 throw new TypeError('Busboy expected an options-Object.') 68391 } 68392 if (typeof opts.headers !== 'object') { 68393 throw new TypeError('Busboy expected an options-Object with headers-attribute.') 68394 } 68395 if (typeof opts.headers['content-type'] !== 'string') { 68396 throw new TypeError('Missing Content-Type-header.') 68397 } 68398 68399 const { 68400 headers, 68401 ...streamOptions 68402 } = opts 68403 68404 this.opts = { 68405 autoDestroy: false, 68406 ...streamOptions 68407 } 68408 WritableStream.call(this, this.opts) 68409 68410 this._done = false 68411 this._parser = this.getParserByHeaders(headers) 68412 this._finished = false 68413 } 68414 inherits(Busboy, WritableStream) 68415 68416 Busboy.prototype.emit = function (ev) { 68417 if (ev === 'finish') { 68418 if (!this._done) { 68419 this._parser?.end() 68420 return 68421 } else if (this._finished) { 68422 return 68423 } 68424 this._finished = true 68425 } 68426 WritableStream.prototype.emit.apply(this, arguments) 68427 } 68428 68429 Busboy.prototype.getParserByHeaders = function (headers) { 68430 const parsed = parseParams(headers['content-type']) 68431 68432 const cfg = { 68433 defCharset: this.opts.defCharset, 68434 fileHwm: this.opts.fileHwm, 68435 headers, 68436 highWaterMark: this.opts.highWaterMark, 68437 isPartAFile: this.opts.isPartAFile, 68438 limits: this.opts.limits, 68439 parsedConType: parsed, 68440 preservePath: this.opts.preservePath 68441 } 68442 68443 if (MultipartParser.detect.test(parsed[0])) { 68444 return new MultipartParser(this, cfg) 68445 } 68446 if (UrlencodedParser.detect.test(parsed[0])) { 68447 return new UrlencodedParser(this, cfg) 68448 } 68449 throw new Error('Unsupported Content-Type.') 68450 } 68451 68452 Busboy.prototype._write = function (chunk, encoding, cb) { 68453 this._parser.write(chunk, cb) 68454 } 68455 68456 module.exports = Busboy 68457 module.exports["default"] = Busboy 68458 module.exports.Busboy = Busboy 68459 68460 module.exports.Dicer = Dicer 68461 68462 68463 /***/ }), 68464 68465 /***/ 32183: 68466 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 68467 68468 "use strict"; 68469 68470 68471 // TODO: 68472 // * support 1 nested multipart level 68473 // (see second multipart example here: 68474 // http://www.w3.org/TR/html401/interact/forms.html#didx-multipartform-data) 68475 // * support limits.fieldNameSize 68476 // -- this will require modifications to utils.parseParams 68477 68478 const { Readable } = __nccwpck_require__(84492) 68479 const { inherits } = __nccwpck_require__(47261) 68480 68481 const Dicer = __nccwpck_require__(92960) 68482 68483 const parseParams = __nccwpck_require__(31854) 68484 const decodeText = __nccwpck_require__(84619) 68485 const basename = __nccwpck_require__(48647) 68486 const getLimit = __nccwpck_require__(21467) 68487 68488 const RE_BOUNDARY = /^boundary$/i 68489 const RE_FIELD = /^form-data$/i 68490 const RE_CHARSET = /^charset$/i 68491 const RE_FILENAME = /^filename$/i 68492 const RE_NAME = /^name$/i 68493 68494 Multipart.detect = /^multipart\/form-data/i 68495 function Multipart (boy, cfg) { 68496 let i 68497 let len 68498 const self = this 68499 let boundary 68500 const limits = cfg.limits 68501 const isPartAFile = cfg.isPartAFile || ((fieldName, contentType, fileName) => (contentType === 'application/octet-stream' || fileName !== undefined)) 68502 const parsedConType = cfg.parsedConType || [] 68503 const defCharset = cfg.defCharset || 'utf8' 68504 const preservePath = cfg.preservePath 68505 const fileOpts = { highWaterMark: cfg.fileHwm } 68506 68507 for (i = 0, len = parsedConType.length; i < len; ++i) { 68508 if (Array.isArray(parsedConType[i]) && 68509 RE_BOUNDARY.test(parsedConType[i][0])) { 68510 boundary = parsedConType[i][1] 68511 break 68512 } 68513 } 68514 68515 function checkFinished () { 68516 if (nends === 0 && finished && !boy._done) { 68517 finished = false 68518 self.end() 68519 } 68520 } 68521 68522 if (typeof boundary !== 'string') { throw new Error('Multipart: Boundary not found') } 68523 68524 const fieldSizeLimit = getLimit(limits, 'fieldSize', 1 * 1024 * 1024) 68525 const fileSizeLimit = getLimit(limits, 'fileSize', Infinity) 68526 const filesLimit = getLimit(limits, 'files', Infinity) 68527 const fieldsLimit = getLimit(limits, 'fields', Infinity) 68528 const partsLimit = getLimit(limits, 'parts', Infinity) 68529 const headerPairsLimit = getLimit(limits, 'headerPairs', 2000) 68530 const headerSizeLimit = getLimit(limits, 'headerSize', 80 * 1024) 68531 68532 let nfiles = 0 68533 let nfields = 0 68534 let nends = 0 68535 let curFile 68536 let curField 68537 let finished = false 68538 68539 this._needDrain = false 68540 this._pause = false 68541 this._cb = undefined 68542 this._nparts = 0 68543 this._boy = boy 68544 68545 const parserCfg = { 68546 boundary, 68547 maxHeaderPairs: headerPairsLimit, 68548 maxHeaderSize: headerSizeLimit, 68549 partHwm: fileOpts.highWaterMark, 68550 highWaterMark: cfg.highWaterMark 68551 } 68552 68553 this.parser = new Dicer(parserCfg) 68554 this.parser.on('drain', function () { 68555 self._needDrain = false 68556 if (self._cb && !self._pause) { 68557 const cb = self._cb 68558 self._cb = undefined 68559 cb() 68560 } 68561 }).on('part', function onPart (part) { 68562 if (++self._nparts > partsLimit) { 68563 self.parser.removeListener('part', onPart) 68564 self.parser.on('part', skipPart) 68565 boy.hitPartsLimit = true 68566 boy.emit('partsLimit') 68567 return skipPart(part) 68568 } 68569 68570 // hack because streams2 _always_ doesn't emit 'end' until nextTick, so let 68571 // us emit 'end' early since we know the part has ended if we are already 68572 // seeing the next part 68573 if (curField) { 68574 const field = curField 68575 field.emit('end') 68576 field.removeAllListeners('end') 68577 } 68578 68579 part.on('header', function (header) { 68580 let contype 68581 let fieldname 68582 let parsed 68583 let charset 68584 let encoding 68585 let filename 68586 let nsize = 0 68587 68588 if (header['content-type']) { 68589 parsed = parseParams(header['content-type'][0]) 68590 if (parsed[0]) { 68591 contype = parsed[0].toLowerCase() 68592 for (i = 0, len = parsed.length; i < len; ++i) { 68593 if (RE_CHARSET.test(parsed[i][0])) { 68594 charset = parsed[i][1].toLowerCase() 68595 break 68596 } 68597 } 68598 } 68599 } 68600 68601 if (contype === undefined) { contype = 'text/plain' } 68602 if (charset === undefined) { charset = defCharset } 68603 68604 if (header['content-disposition']) { 68605 parsed = parseParams(header['content-disposition'][0]) 68606 if (!RE_FIELD.test(parsed[0])) { return skipPart(part) } 68607 for (i = 0, len = parsed.length; i < len; ++i) { 68608 if (RE_NAME.test(parsed[i][0])) { 68609 fieldname = parsed[i][1] 68610 } else if (RE_FILENAME.test(parsed[i][0])) { 68611 filename = parsed[i][1] 68612 if (!preservePath) { filename = basename(filename) } 68613 } 68614 } 68615 } else { return skipPart(part) } 68616 68617 if (header['content-transfer-encoding']) { encoding = header['content-transfer-encoding'][0].toLowerCase() } else { encoding = '7bit' } 68618 68619 let onData, 68620 onEnd 68621 68622 if (isPartAFile(fieldname, contype, filename)) { 68623 // file/binary field 68624 if (nfiles === filesLimit) { 68625 if (!boy.hitFilesLimit) { 68626 boy.hitFilesLimit = true 68627 boy.emit('filesLimit') 68628 } 68629 return skipPart(part) 68630 } 68631 68632 ++nfiles 68633 68634 if (boy.listenerCount('file') === 0) { 68635 self.parser._ignore() 68636 return 68637 } 68638 68639 ++nends 68640 const file = new FileStream(fileOpts) 68641 curFile = file 68642 file.on('end', function () { 68643 --nends 68644 self._pause = false 68645 checkFinished() 68646 if (self._cb && !self._needDrain) { 68647 const cb = self._cb 68648 self._cb = undefined 68649 cb() 68650 } 68651 }) 68652 file._read = function (n) { 68653 if (!self._pause) { return } 68654 self._pause = false 68655 if (self._cb && !self._needDrain) { 68656 const cb = self._cb 68657 self._cb = undefined 68658 cb() 68659 } 68660 } 68661 boy.emit('file', fieldname, file, filename, encoding, contype) 68662 68663 onData = function (data) { 68664 if ((nsize += data.length) > fileSizeLimit) { 68665 const extralen = fileSizeLimit - nsize + data.length 68666 if (extralen > 0) { file.push(data.slice(0, extralen)) } 68667 file.truncated = true 68668 file.bytesRead = fileSizeLimit 68669 part.removeAllListeners('data') 68670 file.emit('limit') 68671 return 68672 } else if (!file.push(data)) { self._pause = true } 68673 68674 file.bytesRead = nsize 68675 } 68676 68677 onEnd = function () { 68678 curFile = undefined 68679 file.push(null) 68680 } 68681 } else { 68682 // non-file field 68683 if (nfields === fieldsLimit) { 68684 if (!boy.hitFieldsLimit) { 68685 boy.hitFieldsLimit = true 68686 boy.emit('fieldsLimit') 68687 } 68688 return skipPart(part) 68689 } 68690 68691 ++nfields 68692 ++nends 68693 let buffer = '' 68694 let truncated = false 68695 curField = part 68696 68697 onData = function (data) { 68698 if ((nsize += data.length) > fieldSizeLimit) { 68699 const extralen = (fieldSizeLimit - (nsize - data.length)) 68700 buffer += data.toString('binary', 0, extralen) 68701 truncated = true 68702 part.removeAllListeners('data') 68703 } else { buffer += data.toString('binary') } 68704 } 68705 68706 onEnd = function () { 68707 curField = undefined 68708 if (buffer.length) { buffer = decodeText(buffer, 'binary', charset) } 68709 boy.emit('field', fieldname, buffer, false, truncated, encoding, contype) 68710 --nends 68711 checkFinished() 68712 } 68713 } 68714 68715 /* As of node@2efe4ab761666 (v0.10.29+/v0.11.14+), busboy had become 68716 broken. Streams2/streams3 is a huge black box of confusion, but 68717 somehow overriding the sync state seems to fix things again (and still 68718 seems to work for previous node versions). 68719 */ 68720 part._readableState.sync = false 68721 68722 part.on('data', onData) 68723 part.on('end', onEnd) 68724 }).on('error', function (err) { 68725 if (curFile) { curFile.emit('error', err) } 68726 }) 68727 }).on('error', function (err) { 68728 boy.emit('error', err) 68729 }).on('finish', function () { 68730 finished = true 68731 checkFinished() 68732 }) 68733 } 68734 68735 Multipart.prototype.write = function (chunk, cb) { 68736 const r = this.parser.write(chunk) 68737 if (r && !this._pause) { 68738 cb() 68739 } else { 68740 this._needDrain = !r 68741 this._cb = cb 68742 } 68743 } 68744 68745 Multipart.prototype.end = function () { 68746 const self = this 68747 68748 if (self.parser.writable) { 68749 self.parser.end() 68750 } else if (!self._boy._done) { 68751 process.nextTick(function () { 68752 self._boy._done = true 68753 self._boy.emit('finish') 68754 }) 68755 } 68756 } 68757 68758 function skipPart (part) { 68759 part.resume() 68760 } 68761 68762 function FileStream (opts) { 68763 Readable.call(this, opts) 68764 68765 this.bytesRead = 0 68766 68767 this.truncated = false 68768 } 68769 68770 inherits(FileStream, Readable) 68771 68772 FileStream.prototype._read = function (n) {} 68773 68774 module.exports = Multipart 68775 68776 68777 /***/ }), 68778 68779 /***/ 78306: 68780 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 68781 68782 "use strict"; 68783 68784 68785 const Decoder = __nccwpck_require__(27100) 68786 const decodeText = __nccwpck_require__(84619) 68787 const getLimit = __nccwpck_require__(21467) 68788 68789 const RE_CHARSET = /^charset$/i 68790 68791 UrlEncoded.detect = /^application\/x-www-form-urlencoded/i 68792 function UrlEncoded (boy, cfg) { 68793 const limits = cfg.limits 68794 const parsedConType = cfg.parsedConType 68795 this.boy = boy 68796 68797 this.fieldSizeLimit = getLimit(limits, 'fieldSize', 1 * 1024 * 1024) 68798 this.fieldNameSizeLimit = getLimit(limits, 'fieldNameSize', 100) 68799 this.fieldsLimit = getLimit(limits, 'fields', Infinity) 68800 68801 let charset 68802 for (var i = 0, len = parsedConType.length; i < len; ++i) { // eslint-disable-line no-var 68803 if (Array.isArray(parsedConType[i]) && 68804 RE_CHARSET.test(parsedConType[i][0])) { 68805 charset = parsedConType[i][1].toLowerCase() 68806 break 68807 } 68808 } 68809 68810 if (charset === undefined) { charset = cfg.defCharset || 'utf8' } 68811 68812 this.decoder = new Decoder() 68813 this.charset = charset 68814 this._fields = 0 68815 this._state = 'key' 68816 this._checkingBytes = true 68817 this._bytesKey = 0 68818 this._bytesVal = 0 68819 this._key = '' 68820 this._val = '' 68821 this._keyTrunc = false 68822 this._valTrunc = false 68823 this._hitLimit = false 68824 } 68825 68826 UrlEncoded.prototype.write = function (data, cb) { 68827 if (this._fields === this.fieldsLimit) { 68828 if (!this.boy.hitFieldsLimit) { 68829 this.boy.hitFieldsLimit = true 68830 this.boy.emit('fieldsLimit') 68831 } 68832 return cb() 68833 } 68834 68835 let idxeq; let idxamp; let i; let p = 0; const len = data.length 68836 68837 while (p < len) { 68838 if (this._state === 'key') { 68839 idxeq = idxamp = undefined 68840 for (i = p; i < len; ++i) { 68841 if (!this._checkingBytes) { ++p } 68842 if (data[i] === 0x3D/* = */) { 68843 idxeq = i 68844 break 68845 } else if (data[i] === 0x26/* & */) { 68846 idxamp = i 68847 break 68848 } 68849 if (this._checkingBytes && this._bytesKey === this.fieldNameSizeLimit) { 68850 this._hitLimit = true 68851 break 68852 } else if (this._checkingBytes) { ++this._bytesKey } 68853 } 68854 68855 if (idxeq !== undefined) { 68856 // key with assignment 68857 if (idxeq > p) { this._key += this.decoder.write(data.toString('binary', p, idxeq)) } 68858 this._state = 'val' 68859 68860 this._hitLimit = false 68861 this._checkingBytes = true 68862 this._val = '' 68863 this._bytesVal = 0 68864 this._valTrunc = false 68865 this.decoder.reset() 68866 68867 p = idxeq + 1 68868 } else if (idxamp !== undefined) { 68869 // key with no assignment 68870 ++this._fields 68871 let key; const keyTrunc = this._keyTrunc 68872 if (idxamp > p) { key = (this._key += this.decoder.write(data.toString('binary', p, idxamp))) } else { key = this._key } 68873 68874 this._hitLimit = false 68875 this._checkingBytes = true 68876 this._key = '' 68877 this._bytesKey = 0 68878 this._keyTrunc = false 68879 this.decoder.reset() 68880 68881 if (key.length) { 68882 this.boy.emit('field', decodeText(key, 'binary', this.charset), 68883 '', 68884 keyTrunc, 68885 false) 68886 } 68887 68888 p = idxamp + 1 68889 if (this._fields === this.fieldsLimit) { return cb() } 68890 } else if (this._hitLimit) { 68891 // we may not have hit the actual limit if there are encoded bytes... 68892 if (i > p) { this._key += this.decoder.write(data.toString('binary', p, i)) } 68893 p = i 68894 if ((this._bytesKey = this._key.length) === this.fieldNameSizeLimit) { 68895 // yep, we actually did hit the limit 68896 this._checkingBytes = false 68897 this._keyTrunc = true 68898 } 68899 } else { 68900 if (p < len) { this._key += this.decoder.write(data.toString('binary', p)) } 68901 p = len 68902 } 68903 } else { 68904 idxamp = undefined 68905 for (i = p; i < len; ++i) { 68906 if (!this._checkingBytes) { ++p } 68907 if (data[i] === 0x26/* & */) { 68908 idxamp = i 68909 break 68910 } 68911 if (this._checkingBytes && this._bytesVal === this.fieldSizeLimit) { 68912 this._hitLimit = true 68913 break 68914 } else if (this._checkingBytes) { ++this._bytesVal } 68915 } 68916 68917 if (idxamp !== undefined) { 68918 ++this._fields 68919 if (idxamp > p) { this._val += this.decoder.write(data.toString('binary', p, idxamp)) } 68920 this.boy.emit('field', decodeText(this._key, 'binary', this.charset), 68921 decodeText(this._val, 'binary', this.charset), 68922 this._keyTrunc, 68923 this._valTrunc) 68924 this._state = 'key' 68925 68926 this._hitLimit = false 68927 this._checkingBytes = true 68928 this._key = '' 68929 this._bytesKey = 0 68930 this._keyTrunc = false 68931 this.decoder.reset() 68932 68933 p = idxamp + 1 68934 if (this._fields === this.fieldsLimit) { return cb() } 68935 } else if (this._hitLimit) { 68936 // we may not have hit the actual limit if there are encoded bytes... 68937 if (i > p) { this._val += this.decoder.write(data.toString('binary', p, i)) } 68938 p = i 68939 if ((this._val === '' && this.fieldSizeLimit === 0) || 68940 (this._bytesVal = this._val.length) === this.fieldSizeLimit) { 68941 // yep, we actually did hit the limit 68942 this._checkingBytes = false 68943 this._valTrunc = true 68944 } 68945 } else { 68946 if (p < len) { this._val += this.decoder.write(data.toString('binary', p)) } 68947 p = len 68948 } 68949 } 68950 } 68951 cb() 68952 } 68953 68954 UrlEncoded.prototype.end = function () { 68955 if (this.boy._done) { return } 68956 68957 if (this._state === 'key' && this._key.length > 0) { 68958 this.boy.emit('field', decodeText(this._key, 'binary', this.charset), 68959 '', 68960 this._keyTrunc, 68961 false) 68962 } else if (this._state === 'val') { 68963 this.boy.emit('field', decodeText(this._key, 'binary', this.charset), 68964 decodeText(this._val, 'binary', this.charset), 68965 this._keyTrunc, 68966 this._valTrunc) 68967 } 68968 this.boy._done = true 68969 this.boy.emit('finish') 68970 } 68971 68972 module.exports = UrlEncoded 68973 68974 68975 /***/ }), 68976 68977 /***/ 27100: 68978 /***/ ((module) => { 68979 68980 "use strict"; 68981 68982 68983 const RE_PLUS = /\+/g 68984 68985 const HEX = [ 68986 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68987 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68988 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68989 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 68990 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68991 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68992 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68993 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 68994 ] 68995 68996 function Decoder () { 68997 this.buffer = undefined 68998 } 68999 Decoder.prototype.write = function (str) { 69000 // Replace '+' with ' ' before decoding 69001 str = str.replace(RE_PLUS, ' ') 69002 let res = '' 69003 let i = 0; let p = 0; const len = str.length 69004 for (; i < len; ++i) { 69005 if (this.buffer !== undefined) { 69006 if (!HEX[str.charCodeAt(i)]) { 69007 res += '%' + this.buffer 69008 this.buffer = undefined 69009 --i // retry character 69010 } else { 69011 this.buffer += str[i] 69012 ++p 69013 if (this.buffer.length === 2) { 69014 res += String.fromCharCode(parseInt(this.buffer, 16)) 69015 this.buffer = undefined 69016 } 69017 } 69018 } else if (str[i] === '%') { 69019 if (i > p) { 69020 res += str.substring(p, i) 69021 p = i 69022 } 69023 this.buffer = '' 69024 ++p 69025 } 69026 } 69027 if (p < len && this.buffer === undefined) { res += str.substring(p) } 69028 return res 69029 } 69030 Decoder.prototype.reset = function () { 69031 this.buffer = undefined 69032 } 69033 69034 module.exports = Decoder 69035 69036 69037 /***/ }), 69038 69039 /***/ 48647: 69040 /***/ ((module) => { 69041 69042 "use strict"; 69043 69044 69045 module.exports = function basename (path) { 69046 if (typeof path !== 'string') { return '' } 69047 for (var i = path.length - 1; i >= 0; --i) { // eslint-disable-line no-var 69048 switch (path.charCodeAt(i)) { 69049 case 0x2F: // '/' 69050 case 0x5C: // '\' 69051 path = path.slice(i + 1) 69052 return (path === '..' || path === '.' ? '' : path) 69053 } 69054 } 69055 return (path === '..' || path === '.' ? '' : path) 69056 } 69057 69058 69059 /***/ }), 69060 69061 /***/ 84619: 69062 /***/ (function(module) { 69063 69064 "use strict"; 69065 69066 69067 // Node has always utf-8 69068 const utf8Decoder = new TextDecoder('utf-8') 69069 const textDecoders = new Map([ 69070 ['utf-8', utf8Decoder], 69071 ['utf8', utf8Decoder] 69072 ]) 69073 69074 function getDecoder (charset) { 69075 let lc 69076 while (true) { 69077 switch (charset) { 69078 case 'utf-8': 69079 case 'utf8': 69080 return decoders.utf8 69081 case 'latin1': 69082 case 'ascii': // TODO: Make these a separate, strict decoder? 69083 case 'us-ascii': 69084 case 'iso-8859-1': 69085 case 'iso8859-1': 69086 case 'iso88591': 69087 case 'iso_8859-1': 69088 case 'windows-1252': 69089 case 'iso_8859-1:1987': 69090 case 'cp1252': 69091 case 'x-cp1252': 69092 return decoders.latin1 69093 case 'utf16le': 69094 case 'utf-16le': 69095 case 'ucs2': 69096 case 'ucs-2': 69097 return decoders.utf16le 69098 case 'base64': 69099 return decoders.base64 69100 default: 69101 if (lc === undefined) { 69102 lc = true 69103 charset = charset.toLowerCase() 69104 continue 69105 } 69106 return decoders.other.bind(charset) 69107 } 69108 } 69109 } 69110 69111 const decoders = { 69112 utf8: (data, sourceEncoding) => { 69113 if (data.length === 0) { 69114 return '' 69115 } 69116 if (typeof data === 'string') { 69117 data = Buffer.from(data, sourceEncoding) 69118 } 69119 return data.utf8Slice(0, data.length) 69120 }, 69121 69122 latin1: (data, sourceEncoding) => { 69123 if (data.length === 0) { 69124 return '' 69125 } 69126 if (typeof data === 'string') { 69127 return data 69128 } 69129 return data.latin1Slice(0, data.length) 69130 }, 69131 69132 utf16le: (data, sourceEncoding) => { 69133 if (data.length === 0) { 69134 return '' 69135 } 69136 if (typeof data === 'string') { 69137 data = Buffer.from(data, sourceEncoding) 69138 } 69139 return data.ucs2Slice(0, data.length) 69140 }, 69141 69142 base64: (data, sourceEncoding) => { 69143 if (data.length === 0) { 69144 return '' 69145 } 69146 if (typeof data === 'string') { 69147 data = Buffer.from(data, sourceEncoding) 69148 } 69149 return data.base64Slice(0, data.length) 69150 }, 69151 69152 other: (data, sourceEncoding) => { 69153 if (data.length === 0) { 69154 return '' 69155 } 69156 if (typeof data === 'string') { 69157 data = Buffer.from(data, sourceEncoding) 69158 } 69159 69160 if (textDecoders.has(this.toString())) { 69161 try { 69162 return textDecoders.get(this).decode(data) 69163 } catch {} 69164 } 69165 return typeof data === 'string' 69166 ? data 69167 : data.toString() 69168 } 69169 } 69170 69171 function decodeText (text, sourceEncoding, destEncoding) { 69172 if (text) { 69173 return getDecoder(destEncoding)(text, sourceEncoding) 69174 } 69175 return text 69176 } 69177 69178 module.exports = decodeText 69179 69180 69181 /***/ }), 69182 69183 /***/ 21467: 69184 /***/ ((module) => { 69185 69186 "use strict"; 69187 69188 69189 module.exports = function getLimit (limits, name, defaultLimit) { 69190 if ( 69191 !limits || 69192 limits[name] === undefined || 69193 limits[name] === null 69194 ) { return defaultLimit } 69195 69196 if ( 69197 typeof limits[name] !== 'number' || 69198 isNaN(limits[name]) 69199 ) { throw new TypeError('Limit ' + name + ' is not a valid number') } 69200 69201 return limits[name] 69202 } 69203 69204 69205 /***/ }), 69206 69207 /***/ 31854: 69208 /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { 69209 69210 "use strict"; 69211 /* eslint-disable object-property-newline */ 69212 69213 69214 const decodeText = __nccwpck_require__(84619) 69215 69216 const RE_ENCODED = /%[a-fA-F0-9][a-fA-F0-9]/g 69217 69218 const EncodedLookup = { 69219 '%00': '\x00', '%01': '\x01', '%02': '\x02', '%03': '\x03', '%04': '\x04', 69220 '%05': '\x05', '%06': '\x06', '%07': '\x07', '%08': '\x08', '%09': '\x09', 69221 '%0a': '\x0a', '%0A': '\x0a', '%0b': '\x0b', '%0B': '\x0b', '%0c': '\x0c', 69222 '%0C': '\x0c', '%0d': '\x0d', '%0D': '\x0d', '%0e': '\x0e', '%0E': '\x0e', 69223 '%0f': '\x0f', '%0F': '\x0f', '%10': '\x10', '%11': '\x11', '%12': '\x12', 69224 '%13': '\x13', '%14': '\x14', '%15': '\x15', '%16': '\x16', '%17': '\x17', 69225 '%18': '\x18', '%19': '\x19', '%1a': '\x1a', '%1A': '\x1a', '%1b': '\x1b', 69226 '%1B': '\x1b', '%1c': '\x1c', '%1C': '\x1c', '%1d': '\x1d', '%1D': '\x1d', 69227 '%1e': '\x1e', '%1E': '\x1e', '%1f': '\x1f', '%1F': '\x1f', '%20': '\x20', 69228 '%21': '\x21', '%22': '\x22', '%23': '\x23', '%24': '\x24', '%25': '\x25', 69229 '%26': '\x26', '%27': '\x27', '%28': '\x28', '%29': '\x29', '%2a': '\x2a', 69230 '%2A': '\x2a', '%2b': '\x2b', '%2B': '\x2b', '%2c': '\x2c', '%2C': '\x2c', 69231 '%2d': '\x2d', '%2D': '\x2d', '%2e': '\x2e', '%2E': '\x2e', '%2f': '\x2f', 69232 '%2F': '\x2f', '%30': '\x30', '%31': '\x31', '%32': '\x32', '%33': '\x33', 69233 '%34': '\x34', '%35': '\x35', '%36': '\x36', '%37': '\x37', '%38': '\x38', 69234 '%39': '\x39', '%3a': '\x3a', '%3A': '\x3a', '%3b': '\x3b', '%3B': '\x3b', 69235 '%3c': '\x3c', '%3C': '\x3c', '%3d': '\x3d', '%3D': '\x3d', '%3e': '\x3e', 69236 '%3E': '\x3e', '%3f': '\x3f', '%3F': '\x3f', '%40': '\x40', '%41': '\x41', 69237 '%42': '\x42', '%43': '\x43', '%44': '\x44', '%45': '\x45', '%46': '\x46', 69238 '%47': '\x47', '%48': '\x48', '%49': '\x49', '%4a': '\x4a', '%4A': '\x4a', 69239 '%4b': '\x4b', '%4B': '\x4b', '%4c': '\x4c', '%4C': '\x4c', '%4d': '\x4d', 69240 '%4D': '\x4d', '%4e': '\x4e', '%4E': '\x4e', '%4f': '\x4f', '%4F': '\x4f', 69241 '%50': '\x50', '%51': '\x51', '%52': '\x52', '%53': '\x53', '%54': '\x54', 69242 '%55': '\x55', '%56': '\x56', '%57': '\x57', '%58': '\x58', '%59': '\x59', 69243 '%5a': '\x5a', '%5A': '\x5a', '%5b': '\x5b', '%5B': '\x5b', '%5c': '\x5c', 69244 '%5C': '\x5c', '%5d': '\x5d', '%5D': '\x5d', '%5e': '\x5e', '%5E': '\x5e', 69245 '%5f': '\x5f', '%5F': '\x5f', '%60': '\x60', '%61': '\x61', '%62': '\x62', 69246 '%63': '\x63', '%64': '\x64', '%65': '\x65', '%66': '\x66', '%67': '\x67', 69247 '%68': '\x68', '%69': '\x69', '%6a': '\x6a', '%6A': '\x6a', '%6b': '\x6b', 69248 '%6B': '\x6b', '%6c': '\x6c', '%6C': '\x6c', '%6d': '\x6d', '%6D': '\x6d', 69249 '%6e': '\x6e', '%6E': '\x6e', '%6f': '\x6f', '%6F': '\x6f', '%70': '\x70', 69250 '%71': '\x71', '%72': '\x72', '%73': '\x73', '%74': '\x74', '%75': '\x75', 69251 '%76': '\x76', '%77': '\x77', '%78': '\x78', '%79': '\x79', '%7a': '\x7a', 69252 '%7A': '\x7a', '%7b': '\x7b', '%7B': '\x7b', '%7c': '\x7c', '%7C': '\x7c', 69253 '%7d': '\x7d', '%7D': '\x7d', '%7e': '\x7e', '%7E': '\x7e', '%7f': '\x7f', 69254 '%7F': '\x7f', '%80': '\x80', '%81': '\x81', '%82': '\x82', '%83': '\x83', 69255 '%84': '\x84', '%85': '\x85', '%86': '\x86', '%87': '\x87', '%88': '\x88', 69256 '%89': '\x89', '%8a': '\x8a', '%8A': '\x8a', '%8b': '\x8b', '%8B': '\x8b', 69257 '%8c': '\x8c', '%8C': '\x8c', '%8d': '\x8d', '%8D': '\x8d', '%8e': '\x8e', 69258 '%8E': '\x8e', '%8f': '\x8f', '%8F': '\x8f', '%90': '\x90', '%91': '\x91', 69259 '%92': '\x92', '%93': '\x93', '%94': '\x94', '%95': '\x95', '%96': '\x96', 69260 '%97': '\x97', '%98': '\x98', '%99': '\x99', '%9a': '\x9a', '%9A': '\x9a', 69261 '%9b': '\x9b', '%9B': '\x9b', '%9c': '\x9c', '%9C': '\x9c', '%9d': '\x9d', 69262 '%9D': '\x9d', '%9e': '\x9e', '%9E': '\x9e', '%9f': '\x9f', '%9F': '\x9f', 69263 '%a0': '\xa0', '%A0': '\xa0', '%a1': '\xa1', '%A1': '\xa1', '%a2': '\xa2', 69264 '%A2': '\xa2', '%a3': '\xa3', '%A3': '\xa3', '%a4': '\xa4', '%A4': '\xa4', 69265 '%a5': '\xa5', '%A5': '\xa5', '%a6': '\xa6', '%A6': '\xa6', '%a7': '\xa7', 69266 '%A7': '\xa7', '%a8': '\xa8', '%A8': '\xa8', '%a9': '\xa9', '%A9': '\xa9', 69267 '%aa': '\xaa', '%Aa': '\xaa', '%aA': '\xaa', '%AA': '\xaa', '%ab': '\xab', 69268 '%Ab': '\xab', '%aB': '\xab', '%AB': '\xab', '%ac': '\xac', '%Ac': '\xac', 69269 '%aC': '\xac', '%AC': '\xac', '%ad': '\xad', '%Ad': '\xad', '%aD': '\xad', 69270 '%AD': '\xad', '%ae': '\xae', '%Ae': '\xae', '%aE': '\xae', '%AE': '\xae', 69271 '%af': '\xaf', '%Af': '\xaf', '%aF': '\xaf', '%AF': '\xaf', '%b0': '\xb0', 69272 '%B0': '\xb0', '%b1': '\xb1', '%B1': '\xb1', '%b2': '\xb2', '%B2': '\xb2', 69273 '%b3': '\xb3', '%B3': '\xb3', '%b4': '\xb4', '%B4': '\xb4', '%b5': '\xb5', 69274 '%B5': '\xb5', '%b6': '\xb6', '%B6': '\xb6', '%b7': '\xb7', '%B7': '\xb7', 69275 '%b8': '\xb8', '%B8': '\xb8', '%b9': '\xb9', '%B9': '\xb9', '%ba': '\xba', 69276 '%Ba': '\xba', '%bA': '\xba', '%BA': '\xba', '%bb': '\xbb', '%Bb': '\xbb', 69277 '%bB': '\xbb', '%BB': '\xbb', '%bc': '\xbc', '%Bc': '\xbc', '%bC': '\xbc', 69278 '%BC': '\xbc', '%bd': '\xbd', '%Bd': '\xbd', '%bD': '\xbd', '%BD': '\xbd', 69279 '%be': '\xbe', '%Be': '\xbe', '%bE': '\xbe', '%BE': '\xbe', '%bf': '\xbf', 69280 '%Bf': '\xbf', '%bF': '\xbf', '%BF': '\xbf', '%c0': '\xc0', '%C0': '\xc0', 69281 '%c1': '\xc1', '%C1': '\xc1', '%c2': '\xc2', '%C2': '\xc2', '%c3': '\xc3', 69282 '%C3': '\xc3', '%c4': '\xc4', '%C4': '\xc4', '%c5': '\xc5', '%C5': '\xc5', 69283 '%c6': '\xc6', '%C6': '\xc6', '%c7': '\xc7', '%C7': '\xc7', '%c8': '\xc8', 69284 '%C8': '\xc8', '%c9': '\xc9', '%C9': '\xc9', '%ca': '\xca', '%Ca': '\xca', 69285 '%cA': '\xca', '%CA': '\xca', '%cb': '\xcb', '%Cb': '\xcb', '%cB': '\xcb', 69286 '%CB': '\xcb', '%cc': '\xcc', '%Cc': '\xcc', '%cC': '\xcc', '%CC': '\xcc', 69287 '%cd': '\xcd', '%Cd': '\xcd', '%cD': '\xcd', '%CD': '\xcd', '%ce': '\xce', 69288 '%Ce': '\xce', '%cE': '\xce', '%CE': '\xce', '%cf': '\xcf', '%Cf': '\xcf', 69289 '%cF': '\xcf', '%CF': '\xcf', '%d0': '\xd0', '%D0': '\xd0', '%d1': '\xd1', 69290 '%D1': '\xd1', '%d2': '\xd2', '%D2': '\xd2', '%d3': '\xd3', '%D3': '\xd3', 69291 '%d4': '\xd4', '%D4': '\xd4', '%d5': '\xd5', '%D5': '\xd5', '%d6': '\xd6', 69292 '%D6': '\xd6', '%d7': '\xd7', '%D7': '\xd7', '%d8': '\xd8', '%D8': '\xd8', 69293 '%d9': '\xd9', '%D9': '\xd9', '%da': '\xda', '%Da': '\xda', '%dA': '\xda', 69294 '%DA': '\xda', '%db': '\xdb', '%Db': '\xdb', '%dB': '\xdb', '%DB': '\xdb', 69295 '%dc': '\xdc', '%Dc': '\xdc', '%dC': '\xdc', '%DC': '\xdc', '%dd': '\xdd', 69296 '%Dd': '\xdd', '%dD': '\xdd', '%DD': '\xdd', '%de': '\xde', '%De': '\xde', 69297 '%dE': '\xde', '%DE': '\xde', '%df': '\xdf', '%Df': '\xdf', '%dF': '\xdf', 69298 '%DF': '\xdf', '%e0': '\xe0', '%E0': '\xe0', '%e1': '\xe1', '%E1': '\xe1', 69299 '%e2': '\xe2', '%E2': '\xe2', '%e3': '\xe3', '%E3': '\xe3', '%e4': '\xe4', 69300 '%E4': '\xe4', '%e5': '\xe5', '%E5': '\xe5', '%e6': '\xe6', '%E6': '\xe6', 69301 '%e7': '\xe7', '%E7': '\xe7', '%e8': '\xe8', '%E8': '\xe8', '%e9': '\xe9', 69302 '%E9': '\xe9', '%ea': '\xea', '%Ea': '\xea', '%eA': '\xea', '%EA': '\xea', 69303 '%eb': '\xeb', '%Eb': '\xeb', '%eB': '\xeb', '%EB': '\xeb', '%ec': '\xec', 69304 '%Ec': '\xec', '%eC': '\xec', '%EC': '\xec', '%ed': '\xed', '%Ed': '\xed', 69305 '%eD': '\xed', '%ED': '\xed', '%ee': '\xee', '%Ee': '\xee', '%eE': '\xee', 69306 '%EE': '\xee', '%ef': '\xef', '%Ef': '\xef', '%eF': '\xef', '%EF': '\xef', 69307 '%f0': '\xf0', '%F0': '\xf0', '%f1': '\xf1', '%F1': '\xf1', '%f2': '\xf2', 69308 '%F2': '\xf2', '%f3': '\xf3', '%F3': '\xf3', '%f4': '\xf4', '%F4': '\xf4', 69309 '%f5': '\xf5', '%F5': '\xf5', '%f6': '\xf6', '%F6': '\xf6', '%f7': '\xf7', 69310 '%F7': '\xf7', '%f8': '\xf8', '%F8': '\xf8', '%f9': '\xf9', '%F9': '\xf9', 69311 '%fa': '\xfa', '%Fa': '\xfa', '%fA': '\xfa', '%FA': '\xfa', '%fb': '\xfb', 69312 '%Fb': '\xfb', '%fB': '\xfb', '%FB': '\xfb', '%fc': '\xfc', '%Fc': '\xfc', 69313 '%fC': '\xfc', '%FC': '\xfc', '%fd': '\xfd', '%Fd': '\xfd', '%fD': '\xfd', 69314 '%FD': '\xfd', '%fe': '\xfe', '%Fe': '\xfe', '%fE': '\xfe', '%FE': '\xfe', 69315 '%ff': '\xff', '%Ff': '\xff', '%fF': '\xff', '%FF': '\xff' 69316 } 69317 69318 function encodedReplacer (match) { 69319 return EncodedLookup[match] 69320 } 69321 69322 const STATE_KEY = 0 69323 const STATE_VALUE = 1 69324 const STATE_CHARSET = 2 69325 const STATE_LANG = 3 69326 69327 function parseParams (str) { 69328 const res = [] 69329 let state = STATE_KEY 69330 let charset = '' 69331 let inquote = false 69332 let escaping = false 69333 let p = 0 69334 let tmp = '' 69335 const len = str.length 69336 69337 for (var i = 0; i < len; ++i) { // eslint-disable-line no-var 69338 const char = str[i] 69339 if (char === '\\' && inquote) { 69340 if (escaping) { escaping = false } else { 69341 escaping = true 69342 continue 69343 } 69344 } else if (char === '"') { 69345 if (!escaping) { 69346 if (inquote) { 69347 inquote = false 69348 state = STATE_KEY 69349 } else { inquote = true } 69350 continue 69351 } else { escaping = false } 69352 } else { 69353 if (escaping && inquote) { tmp += '\\' } 69354 escaping = false 69355 if ((state === STATE_CHARSET || state === STATE_LANG) && char === "'") { 69356 if (state === STATE_CHARSET) { 69357 state = STATE_LANG 69358 charset = tmp.substring(1) 69359 } else { state = STATE_VALUE } 69360 tmp = '' 69361 continue 69362 } else if (state === STATE_KEY && 69363 (char === '*' || char === '=') && 69364 res.length) { 69365 state = char === '*' 69366 ? STATE_CHARSET 69367 : STATE_VALUE 69368 res[p] = [tmp, undefined] 69369 tmp = '' 69370 continue 69371 } else if (!inquote && char === ';') { 69372 state = STATE_KEY 69373 if (charset) { 69374 if (tmp.length) { 69375 tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer), 69376 'binary', 69377 charset) 69378 } 69379 charset = '' 69380 } else if (tmp.length) { 69381 tmp = decodeText(tmp, 'binary', 'utf8') 69382 } 69383 if (res[p] === undefined) { res[p] = tmp } else { res[p][1] = tmp } 69384 tmp = '' 69385 ++p 69386 continue 69387 } else if (!inquote && (char === ' ' || char === '\t')) { continue } 69388 } 69389 tmp += char 69390 } 69391 if (charset && tmp.length) { 69392 tmp = decodeText(tmp.replace(RE_ENCODED, encodedReplacer), 69393 'binary', 69394 charset) 69395 } else if (tmp) { 69396 tmp = decodeText(tmp, 'binary', 'utf8') 69397 } 69398 69399 if (res[p] === undefined) { 69400 if (tmp) { res[p] = tmp } 69401 } else { res[p][1] = tmp } 69402 69403 return res 69404 } 69405 69406 module.exports = parseParams 69407 69408 69409 /***/ }), 69410 69411 /***/ 24446: 69412 /***/ ((__unused_webpack_module, exports) => { 69413 69414 "use strict"; 69415 69416 /** 69417 * @module LRUCache 69418 */ 69419 Object.defineProperty(exports, "__esModule", ({ value: true })); 69420 exports.LRUCache = void 0; 69421 const perf = typeof performance === 'object' && 69422 performance && 69423 typeof performance.now === 'function' 69424 ? performance 69425 : Date; 69426 const warned = new Set(); 69427 /* c8 ignore start */ 69428 const PROCESS = (typeof process === 'object' && !!process ? process : {}); 69429 /* c8 ignore start */ 69430 const emitWarning = (msg, type, code, fn) => { 69431 typeof PROCESS.emitWarning === 'function' 69432 ? PROCESS.emitWarning(msg, type, code, fn) 69433 : console.error(`[${code}] ${type}: ${msg}`); 69434 }; 69435 let AC = globalThis.AbortController; 69436 let AS = globalThis.AbortSignal; 69437 /* c8 ignore start */ 69438 if (typeof AC === 'undefined') { 69439 //@ts-ignore 69440 AS = class AbortSignal { 69441 onabort; 69442 _onabort = []; 69443 reason; 69444 aborted = false; 69445 addEventListener(_, fn) { 69446 this._onabort.push(fn); 69447 } 69448 }; 69449 //@ts-ignore 69450 AC = class AbortController { 69451 constructor() { 69452 warnACPolyfill(); 69453 } 69454 signal = new AS(); 69455 abort(reason) { 69456 if (this.signal.aborted) 69457 return; 69458 //@ts-ignore 69459 this.signal.reason = reason; 69460 //@ts-ignore 69461 this.signal.aborted = true; 69462 //@ts-ignore 69463 for (const fn of this.signal._onabort) { 69464 fn(reason); 69465 } 69466 this.signal.onabort?.(reason); 69467 } 69468 }; 69469 let printACPolyfillWarning = PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1'; 69470 const warnACPolyfill = () => { 69471 if (!printACPolyfillWarning) 69472 return; 69473 printACPolyfillWarning = false; 69474 emitWarning('AbortController is not defined. If using lru-cache in ' + 69475 'node 14, load an AbortController polyfill from the ' + 69476 '`node-abort-controller` package. A minimal polyfill is ' + 69477 'provided for use by LRUCache.fetch(), but it should not be ' + 69478 'relied upon in other contexts (eg, passing it to other APIs that ' + 69479 'use AbortController/AbortSignal might have undesirable effects). ' + 69480 'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.', 'NO_ABORT_CONTROLLER', 'ENOTSUP', warnACPolyfill); 69481 }; 69482 } 69483 /* c8 ignore stop */ 69484 const shouldWarn = (code) => !warned.has(code); 69485 const TYPE = Symbol('type'); 69486 const isPosInt = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n); 69487 /* c8 ignore start */ 69488 // This is a little bit ridiculous, tbh. 69489 // The maximum array length is 2^32-1 or thereabouts on most JS impls. 69490 // And well before that point, you're caching the entire world, I mean, 69491 // that's ~32GB of just integers for the next/prev links, plus whatever 69492 // else to hold that many keys and values. Just filling the memory with 69493 // zeroes at init time is brutal when you get that big. 69494 // But why not be complete? 69495 // Maybe in the future, these limits will have expanded. 69496 const getUintArray = (max) => !isPosInt(max) 69497 ? null 69498 : max <= Math.pow(2, 8) 69499 ? Uint8Array 69500 : max <= Math.pow(2, 16) 69501 ? Uint16Array 69502 : max <= Math.pow(2, 32) 69503 ? Uint32Array 69504 : max <= Number.MAX_SAFE_INTEGER 69505 ? ZeroArray 69506 : null; 69507 /* c8 ignore stop */ 69508 class ZeroArray extends Array { 69509 constructor(size) { 69510 super(size); 69511 this.fill(0); 69512 } 69513 } 69514 class Stack { 69515 heap; 69516 length; 69517 // private constructor 69518 static #constructing = false; 69519 static create(max) { 69520 const HeapCls = getUintArray(max); 69521 if (!HeapCls) 69522 return []; 69523 Stack.#constructing = true; 69524 const s = new Stack(max, HeapCls); 69525 Stack.#constructing = false; 69526 return s; 69527 } 69528 constructor(max, HeapCls) { 69529 /* c8 ignore start */ 69530 if (!Stack.#constructing) { 69531 throw new TypeError('instantiate Stack using Stack.create(n)'); 69532 } 69533 /* c8 ignore stop */ 69534 this.heap = new HeapCls(max); 69535 this.length = 0; 69536 } 69537 push(n) { 69538 this.heap[this.length++] = n; 69539 } 69540 pop() { 69541 return this.heap[--this.length]; 69542 } 69543 } 69544 /** 69545 * Default export, the thing you're using this module to get. 69546 * 69547 * All properties from the options object (with the exception of 69548 * {@link OptionsBase.max} and {@link OptionsBase.maxSize}) are added as 69549 * normal public members. (`max` and `maxBase` are read-only getters.) 69550 * Changing any of these will alter the defaults for subsequent method calls, 69551 * but is otherwise safe. 69552 */ 69553 class LRUCache { 69554 // properties coming in from the options of these, only max and maxSize 69555 // really *need* to be protected. The rest can be modified, as they just 69556 // set defaults for various methods. 69557 #max; 69558 #maxSize; 69559 #dispose; 69560 #disposeAfter; 69561 #fetchMethod; 69562 /** 69563 * {@link LRUCache.OptionsBase.ttl} 69564 */ 69565 ttl; 69566 /** 69567 * {@link LRUCache.OptionsBase.ttlResolution} 69568 */ 69569 ttlResolution; 69570 /** 69571 * {@link LRUCache.OptionsBase.ttlAutopurge} 69572 */ 69573 ttlAutopurge; 69574 /** 69575 * {@link LRUCache.OptionsBase.updateAgeOnGet} 69576 */ 69577 updateAgeOnGet; 69578 /** 69579 * {@link LRUCache.OptionsBase.updateAgeOnHas} 69580 */ 69581 updateAgeOnHas; 69582 /** 69583 * {@link LRUCache.OptionsBase.allowStale} 69584 */ 69585 allowStale; 69586 /** 69587 * {@link LRUCache.OptionsBase.noDisposeOnSet} 69588 */ 69589 noDisposeOnSet; 69590 /** 69591 * {@link LRUCache.OptionsBase.noUpdateTTL} 69592 */ 69593 noUpdateTTL; 69594 /** 69595 * {@link LRUCache.OptionsBase.maxEntrySize} 69596 */ 69597 maxEntrySize; 69598 /** 69599 * {@link LRUCache.OptionsBase.sizeCalculation} 69600 */ 69601 sizeCalculation; 69602 /** 69603 * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection} 69604 */ 69605 noDeleteOnFetchRejection; 69606 /** 69607 * {@link LRUCache.OptionsBase.noDeleteOnStaleGet} 69608 */ 69609 noDeleteOnStaleGet; 69610 /** 69611 * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort} 69612 */ 69613 allowStaleOnFetchAbort; 69614 /** 69615 * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection} 69616 */ 69617 allowStaleOnFetchRejection; 69618 /** 69619 * {@link LRUCache.OptionsBase.ignoreFetchAbort} 69620 */ 69621 ignoreFetchAbort; 69622 // computed properties 69623 #size; 69624 #calculatedSize; 69625 #keyMap; 69626 #keyList; 69627 #valList; 69628 #next; 69629 #prev; 69630 #head; 69631 #tail; 69632 #free; 69633 #disposed; 69634 #sizes; 69635 #starts; 69636 #ttls; 69637 #hasDispose; 69638 #hasFetchMethod; 69639 #hasDisposeAfter; 69640 /** 69641 * Do not call this method unless you need to inspect the 69642 * inner workings of the cache. If anything returned by this 69643 * object is modified in any way, strange breakage may occur. 69644 * 69645 * These fields are private for a reason! 69646 * 69647 * @internal 69648 */ 69649 static unsafeExposeInternals(c) { 69650 return { 69651 // properties 69652 starts: c.#starts, 69653 ttls: c.#ttls, 69654 sizes: c.#sizes, 69655 keyMap: c.#keyMap, 69656 keyList: c.#keyList, 69657 valList: c.#valList, 69658 next: c.#next, 69659 prev: c.#prev, 69660 get head() { 69661 return c.#head; 69662 }, 69663 get tail() { 69664 return c.#tail; 69665 }, 69666 free: c.#free, 69667 // methods 69668 isBackgroundFetch: (p) => c.#isBackgroundFetch(p), 69669 backgroundFetch: (k, index, options, context) => c.#backgroundFetch(k, index, options, context), 69670 moveToTail: (index) => c.#moveToTail(index), 69671 indexes: (options) => c.#indexes(options), 69672 rindexes: (options) => c.#rindexes(options), 69673 isStale: (index) => c.#isStale(index), 69674 }; 69675 } 69676 // Protected read-only members 69677 /** 69678 * {@link LRUCache.OptionsBase.max} (read-only) 69679 */ 69680 get max() { 69681 return this.#max; 69682 } 69683 /** 69684 * {@link LRUCache.OptionsBase.maxSize} (read-only) 69685 */ 69686 get maxSize() { 69687 return this.#maxSize; 69688 } 69689 /** 69690 * The total computed size of items in the cache (read-only) 69691 */ 69692 get calculatedSize() { 69693 return this.#calculatedSize; 69694 } 69695 /** 69696 * The number of items stored in the cache (read-only) 69697 */ 69698 get size() { 69699 return this.#size; 69700 } 69701 /** 69702 * {@link LRUCache.OptionsBase.fetchMethod} (read-only) 69703 */ 69704 get fetchMethod() { 69705 return this.#fetchMethod; 69706 } 69707 /** 69708 * {@link LRUCache.OptionsBase.dispose} (read-only) 69709 */ 69710 get dispose() { 69711 return this.#dispose; 69712 } 69713 /** 69714 * {@link LRUCache.OptionsBase.disposeAfter} (read-only) 69715 */ 69716 get disposeAfter() { 69717 return this.#disposeAfter; 69718 } 69719 constructor(options) { 69720 const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort, } = options; 69721 if (max !== 0 && !isPosInt(max)) { 69722 throw new TypeError('max option must be a nonnegative integer'); 69723 } 69724 const UintArray = max ? getUintArray(max) : Array; 69725 if (!UintArray) { 69726 throw new Error('invalid max value: ' + max); 69727 } 69728 this.#max = max; 69729 this.#maxSize = maxSize; 69730 this.maxEntrySize = maxEntrySize || this.#maxSize; 69731 this.sizeCalculation = sizeCalculation; 69732 if (this.sizeCalculation) { 69733 if (!this.#maxSize && !this.maxEntrySize) { 69734 throw new TypeError('cannot set sizeCalculation without setting maxSize or maxEntrySize'); 69735 } 69736 if (typeof this.sizeCalculation !== 'function') { 69737 throw new TypeError('sizeCalculation set to non-function'); 69738 } 69739 } 69740 if (fetchMethod !== undefined && 69741 typeof fetchMethod !== 'function') { 69742 throw new TypeError('fetchMethod must be a function if specified'); 69743 } 69744 this.#fetchMethod = fetchMethod; 69745 this.#hasFetchMethod = !!fetchMethod; 69746 this.#keyMap = new Map(); 69747 this.#keyList = new Array(max).fill(undefined); 69748 this.#valList = new Array(max).fill(undefined); 69749 this.#next = new UintArray(max); 69750 this.#prev = new UintArray(max); 69751 this.#head = 0; 69752 this.#tail = 0; 69753 this.#free = Stack.create(max); 69754 this.#size = 0; 69755 this.#calculatedSize = 0; 69756 if (typeof dispose === 'function') { 69757 this.#dispose = dispose; 69758 } 69759 if (typeof disposeAfter === 'function') { 69760 this.#disposeAfter = disposeAfter; 69761 this.#disposed = []; 69762 } 69763 else { 69764 this.#disposeAfter = undefined; 69765 this.#disposed = undefined; 69766 } 69767 this.#hasDispose = !!this.#dispose; 69768 this.#hasDisposeAfter = !!this.#disposeAfter; 69769 this.noDisposeOnSet = !!noDisposeOnSet; 69770 this.noUpdateTTL = !!noUpdateTTL; 69771 this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection; 69772 this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection; 69773 this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort; 69774 this.ignoreFetchAbort = !!ignoreFetchAbort; 69775 // NB: maxEntrySize is set to maxSize if it's set 69776 if (this.maxEntrySize !== 0) { 69777 if (this.#maxSize !== 0) { 69778 if (!isPosInt(this.#maxSize)) { 69779 throw new TypeError('maxSize must be a positive integer if specified'); 69780 } 69781 } 69782 if (!isPosInt(this.maxEntrySize)) { 69783 throw new TypeError('maxEntrySize must be a positive integer if specified'); 69784 } 69785 this.#initializeSizeTracking(); 69786 } 69787 this.allowStale = !!allowStale; 69788 this.noDeleteOnStaleGet = !!noDeleteOnStaleGet; 69789 this.updateAgeOnGet = !!updateAgeOnGet; 69790 this.updateAgeOnHas = !!updateAgeOnHas; 69791 this.ttlResolution = 69792 isPosInt(ttlResolution) || ttlResolution === 0 69793 ? ttlResolution 69794 : 1; 69795 this.ttlAutopurge = !!ttlAutopurge; 69796 this.ttl = ttl || 0; 69797 if (this.ttl) { 69798 if (!isPosInt(this.ttl)) { 69799 throw new TypeError('ttl must be a positive integer if specified'); 69800 } 69801 this.#initializeTTLTracking(); 69802 } 69803 // do not allow completely unbounded caches 69804 if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) { 69805 throw new TypeError('At least one of max, maxSize, or ttl is required'); 69806 } 69807 if (!this.ttlAutopurge && !this.#max && !this.#maxSize) { 69808 const code = 'LRU_CACHE_UNBOUNDED'; 69809 if (shouldWarn(code)) { 69810 warned.add(code); 69811 const msg = 'TTL caching without ttlAutopurge, max, or maxSize can ' + 69812 'result in unbounded memory consumption.'; 69813 emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache); 69814 } 69815 } 69816 } 69817 /** 69818 * Return the remaining TTL time for a given entry key 69819 */ 69820 getRemainingTTL(key) { 69821 return this.#keyMap.has(key) ? Infinity : 0; 69822 } 69823 #initializeTTLTracking() { 69824 const ttls = new ZeroArray(this.#max); 69825 const starts = new ZeroArray(this.#max); 69826 this.#ttls = ttls; 69827 this.#starts = starts; 69828 this.#setItemTTL = (index, ttl, start = perf.now()) => { 69829 starts[index] = ttl !== 0 ? start : 0; 69830 ttls[index] = ttl; 69831 if (ttl !== 0 && this.ttlAutopurge) { 69832 const t = setTimeout(() => { 69833 if (this.#isStale(index)) { 69834 this.delete(this.#keyList[index]); 69835 } 69836 }, ttl + 1); 69837 // unref() not supported on all platforms 69838 /* c8 ignore start */ 69839 if (t.unref) { 69840 t.unref(); 69841 } 69842 /* c8 ignore stop */ 69843 } 69844 }; 69845 this.#updateItemAge = index => { 69846 starts[index] = ttls[index] !== 0 ? perf.now() : 0; 69847 }; 69848 this.#statusTTL = (status, index) => { 69849 if (ttls[index]) { 69850 const ttl = ttls[index]; 69851 const start = starts[index]; 69852 /* c8 ignore next */ 69853 if (!ttl || !start) 69854 return; 69855 status.ttl = ttl; 69856 status.start = start; 69857 status.now = cachedNow || getNow(); 69858 const age = status.now - start; 69859 status.remainingTTL = ttl - age; 69860 } 69861 }; 69862 // debounce calls to perf.now() to 1s so we're not hitting 69863 // that costly call repeatedly. 69864 let cachedNow = 0; 69865 const getNow = () => { 69866 const n = perf.now(); 69867 if (this.ttlResolution > 0) { 69868 cachedNow = n; 69869 const t = setTimeout(() => (cachedNow = 0), this.ttlResolution); 69870 // not available on all platforms 69871 /* c8 ignore start */ 69872 if (t.unref) { 69873 t.unref(); 69874 } 69875 /* c8 ignore stop */ 69876 } 69877 return n; 69878 }; 69879 this.getRemainingTTL = key => { 69880 const index = this.#keyMap.get(key); 69881 if (index === undefined) { 69882 return 0; 69883 } 69884 const ttl = ttls[index]; 69885 const start = starts[index]; 69886 if (!ttl || !start) { 69887 return Infinity; 69888 } 69889 const age = (cachedNow || getNow()) - start; 69890 return ttl - age; 69891 }; 69892 this.#isStale = index => { 69893 const s = starts[index]; 69894 const t = ttls[index]; 69895 return !!t && !!s && (cachedNow || getNow()) - s > t; 69896 }; 69897 } 69898 // conditionally set private methods related to TTL 69899 #updateItemAge = () => { }; 69900 #statusTTL = () => { }; 69901 #setItemTTL = () => { }; 69902 /* c8 ignore stop */ 69903 #isStale = () => false; 69904 #initializeSizeTracking() { 69905 const sizes = new ZeroArray(this.#max); 69906 this.#calculatedSize = 0; 69907 this.#sizes = sizes; 69908 this.#removeItemSize = index => { 69909 this.#calculatedSize -= sizes[index]; 69910 sizes[index] = 0; 69911 }; 69912 this.#requireSize = (k, v, size, sizeCalculation) => { 69913 // provisionally accept background fetches. 69914 // actual value size will be checked when they return. 69915 if (this.#isBackgroundFetch(v)) { 69916 return 0; 69917 } 69918 if (!isPosInt(size)) { 69919 if (sizeCalculation) { 69920 if (typeof sizeCalculation !== 'function') { 69921 throw new TypeError('sizeCalculation must be a function'); 69922 } 69923 size = sizeCalculation(v, k); 69924 if (!isPosInt(size)) { 69925 throw new TypeError('sizeCalculation return invalid (expect positive integer)'); 69926 } 69927 } 69928 else { 69929 throw new TypeError('invalid size value (must be positive integer). ' + 69930 'When maxSize or maxEntrySize is used, sizeCalculation ' + 69931 'or size must be set.'); 69932 } 69933 } 69934 return size; 69935 }; 69936 this.#addItemSize = (index, size, status) => { 69937 sizes[index] = size; 69938 if (this.#maxSize) { 69939 const maxSize = this.#maxSize - sizes[index]; 69940 while (this.#calculatedSize > maxSize) { 69941 this.#evict(true); 69942 } 69943 } 69944 this.#calculatedSize += sizes[index]; 69945 if (status) { 69946 status.entrySize = size; 69947 status.totalCalculatedSize = this.#calculatedSize; 69948 } 69949 }; 69950 } 69951 #removeItemSize = _i => { }; 69952 #addItemSize = (_i, _s, _st) => { }; 69953 #requireSize = (_k, _v, size, sizeCalculation) => { 69954 if (size || sizeCalculation) { 69955 throw new TypeError('cannot set size without setting maxSize or maxEntrySize on cache'); 69956 } 69957 return 0; 69958 }; 69959 *#indexes({ allowStale = this.allowStale } = {}) { 69960 if (this.#size) { 69961 for (let i = this.#tail; true;) { 69962 if (!this.#isValidIndex(i)) { 69963 break; 69964 } 69965 if (allowStale || !this.#isStale(i)) { 69966 yield i; 69967 } 69968 if (i === this.#head) { 69969 break; 69970 } 69971 else { 69972 i = this.#prev[i]; 69973 } 69974 } 69975 } 69976 } 69977 *#rindexes({ allowStale = this.allowStale } = {}) { 69978 if (this.#size) { 69979 for (let i = this.#head; true;) { 69980 if (!this.#isValidIndex(i)) { 69981 break; 69982 } 69983 if (allowStale || !this.#isStale(i)) { 69984 yield i; 69985 } 69986 if (i === this.#tail) { 69987 break; 69988 } 69989 else { 69990 i = this.#next[i]; 69991 } 69992 } 69993 } 69994 } 69995 #isValidIndex(index) { 69996 return (index !== undefined && 69997 this.#keyMap.get(this.#keyList[index]) === index); 69998 } 69999 /** 70000 * Return a generator yielding `[key, value]` pairs, 70001 * in order from most recently used to least recently used. 70002 */ 70003 *entries() { 70004 for (const i of this.#indexes()) { 70005 if (this.#valList[i] !== undefined && 70006 this.#keyList[i] !== undefined && 70007 !this.#isBackgroundFetch(this.#valList[i])) { 70008 yield [this.#keyList[i], this.#valList[i]]; 70009 } 70010 } 70011 } 70012 /** 70013 * Inverse order version of {@link LRUCache.entries} 70014 * 70015 * Return a generator yielding `[key, value]` pairs, 70016 * in order from least recently used to most recently used. 70017 */ 70018 *rentries() { 70019 for (const i of this.#rindexes()) { 70020 if (this.#valList[i] !== undefined && 70021 this.#keyList[i] !== undefined && 70022 !this.#isBackgroundFetch(this.#valList[i])) { 70023 yield [this.#keyList[i], this.#valList[i]]; 70024 } 70025 } 70026 } 70027 /** 70028 * Return a generator yielding the keys in the cache, 70029 * in order from most recently used to least recently used. 70030 */ 70031 *keys() { 70032 for (const i of this.#indexes()) { 70033 const k = this.#keyList[i]; 70034 if (k !== undefined && 70035 !this.#isBackgroundFetch(this.#valList[i])) { 70036 yield k; 70037 } 70038 } 70039 } 70040 /** 70041 * Inverse order version of {@link LRUCache.keys} 70042 * 70043 * Return a generator yielding the keys in the cache, 70044 * in order from least recently used to most recently used. 70045 */ 70046 *rkeys() { 70047 for (const i of this.#rindexes()) { 70048 const k = this.#keyList[i]; 70049 if (k !== undefined && 70050 !this.#isBackgroundFetch(this.#valList[i])) { 70051 yield k; 70052 } 70053 } 70054 } 70055 /** 70056 * Return a generator yielding the values in the cache, 70057 * in order from most recently used to least recently used. 70058 */ 70059 *values() { 70060 for (const i of this.#indexes()) { 70061 const v = this.#valList[i]; 70062 if (v !== undefined && 70063 !this.#isBackgroundFetch(this.#valList[i])) { 70064 yield this.#valList[i]; 70065 } 70066 } 70067 } 70068 /** 70069 * Inverse order version of {@link LRUCache.values} 70070 * 70071 * Return a generator yielding the values in the cache, 70072 * in order from least recently used to most recently used. 70073 */ 70074 *rvalues() { 70075 for (const i of this.#rindexes()) { 70076 const v = this.#valList[i]; 70077 if (v !== undefined && 70078 !this.#isBackgroundFetch(this.#valList[i])) { 70079 yield this.#valList[i]; 70080 } 70081 } 70082 } 70083 /** 70084 * Iterating over the cache itself yields the same results as 70085 * {@link LRUCache.entries} 70086 */ 70087 [Symbol.iterator]() { 70088 return this.entries(); 70089 } 70090 /** 70091 * A String value that is used in the creation of the default string description of an object. 70092 * Called by the built-in method Object.prototype.toString. 70093 */ 70094 [Symbol.toStringTag] = 'LRUCache'; 70095 /** 70096 * Find a value for which the supplied fn method returns a truthy value, 70097 * similar to Array.find(). fn is called as fn(value, key, cache). 70098 */ 70099 find(fn, getOptions = {}) { 70100 for (const i of this.#indexes()) { 70101 const v = this.#valList[i]; 70102 const value = this.#isBackgroundFetch(v) 70103 ? v.__staleWhileFetching 70104 : v; 70105 if (value === undefined) 70106 continue; 70107 if (fn(value, this.#keyList[i], this)) { 70108 return this.get(this.#keyList[i], getOptions); 70109 } 70110 } 70111 } 70112 /** 70113 * Call the supplied function on each item in the cache, in order from 70114 * most recently used to least recently used. fn is called as 70115 * fn(value, key, cache). Does not update age or recenty of use. 70116 * Does not iterate over stale values. 70117 */ 70118 forEach(fn, thisp = this) { 70119 for (const i of this.#indexes()) { 70120 const v = this.#valList[i]; 70121 const value = this.#isBackgroundFetch(v) 70122 ? v.__staleWhileFetching 70123 : v; 70124 if (value === undefined) 70125 continue; 70126 fn.call(thisp, value, this.#keyList[i], this); 70127 } 70128 } 70129 /** 70130 * The same as {@link LRUCache.forEach} but items are iterated over in 70131 * reverse order. (ie, less recently used items are iterated over first.) 70132 */ 70133 rforEach(fn, thisp = this) { 70134 for (const i of this.#rindexes()) { 70135 const v = this.#valList[i]; 70136 const value = this.#isBackgroundFetch(v) 70137 ? v.__staleWhileFetching 70138 : v; 70139 if (value === undefined) 70140 continue; 70141 fn.call(thisp, value, this.#keyList[i], this); 70142 } 70143 } 70144 /** 70145 * Delete any stale entries. Returns true if anything was removed, 70146 * false otherwise. 70147 */ 70148 purgeStale() { 70149 let deleted = false; 70150 for (const i of this.#rindexes({ allowStale: true })) { 70151 if (this.#isStale(i)) { 70152 this.delete(this.#keyList[i]); 70153 deleted = true; 70154 } 70155 } 70156 return deleted; 70157 } 70158 /** 70159 * Get the extended info about a given entry, to get its value, size, and 70160 * TTL info simultaneously. Like {@link LRUCache#dump}, but just for a 70161 * single key. Always returns stale values, if their info is found in the 70162 * cache, so be sure to check for expired TTLs if relevant. 70163 */ 70164 info(key) { 70165 const i = this.#keyMap.get(key); 70166 if (i === undefined) 70167 return undefined; 70168 const v = this.#valList[i]; 70169 const value = this.#isBackgroundFetch(v) 70170 ? v.__staleWhileFetching 70171 : v; 70172 if (value === undefined) 70173 return undefined; 70174 const entry = { value }; 70175 if (this.#ttls && this.#starts) { 70176 const ttl = this.#ttls[i]; 70177 const start = this.#starts[i]; 70178 if (ttl && start) { 70179 const remain = ttl - (perf.now() - start); 70180 entry.ttl = remain; 70181 entry.start = Date.now(); 70182 } 70183 } 70184 if (this.#sizes) { 70185 entry.size = this.#sizes[i]; 70186 } 70187 return entry; 70188 } 70189 /** 70190 * Return an array of [key, {@link LRUCache.Entry}] tuples which can be 70191 * passed to cache.load() 70192 */ 70193 dump() { 70194 const arr = []; 70195 for (const i of this.#indexes({ allowStale: true })) { 70196 const key = this.#keyList[i]; 70197 const v = this.#valList[i]; 70198 const value = this.#isBackgroundFetch(v) 70199 ? v.__staleWhileFetching 70200 : v; 70201 if (value === undefined || key === undefined) 70202 continue; 70203 const entry = { value }; 70204 if (this.#ttls && this.#starts) { 70205 entry.ttl = this.#ttls[i]; 70206 // always dump the start relative to a portable timestamp 70207 // it's ok for this to be a bit slow, it's a rare operation. 70208 const age = perf.now() - this.#starts[i]; 70209 entry.start = Math.floor(Date.now() - age); 70210 } 70211 if (this.#sizes) { 70212 entry.size = this.#sizes[i]; 70213 } 70214 arr.unshift([key, entry]); 70215 } 70216 return arr; 70217 } 70218 /** 70219 * Reset the cache and load in the items in entries in the order listed. 70220 * Note that the shape of the resulting cache may be different if the 70221 * same options are not used in both caches. 70222 */ 70223 load(arr) { 70224 this.clear(); 70225 for (const [key, entry] of arr) { 70226 if (entry.start) { 70227 // entry.start is a portable timestamp, but we may be using 70228 // node's performance.now(), so calculate the offset, so that 70229 // we get the intended remaining TTL, no matter how long it's 70230 // been on ice. 70231 // 70232 // it's ok for this to be a bit slow, it's a rare operation. 70233 const age = Date.now() - entry.start; 70234 entry.start = perf.now() - age; 70235 } 70236 this.set(key, entry.value, entry); 70237 } 70238 } 70239 /** 70240 * Add a value to the cache. 70241 * 70242 * Note: if `undefined` is specified as a value, this is an alias for 70243 * {@link LRUCache#delete} 70244 */ 70245 set(k, v, setOptions = {}) { 70246 if (v === undefined) { 70247 this.delete(k); 70248 return this; 70249 } 70250 const { ttl = this.ttl, start, noDisposeOnSet = this.noDisposeOnSet, sizeCalculation = this.sizeCalculation, status, } = setOptions; 70251 let { noUpdateTTL = this.noUpdateTTL } = setOptions; 70252 const size = this.#requireSize(k, v, setOptions.size || 0, sizeCalculation); 70253 // if the item doesn't fit, don't do anything 70254 // NB: maxEntrySize set to maxSize by default 70255 if (this.maxEntrySize && size > this.maxEntrySize) { 70256 if (status) { 70257 status.set = 'miss'; 70258 status.maxEntrySizeExceeded = true; 70259 } 70260 // have to delete, in case something is there already. 70261 this.delete(k); 70262 return this; 70263 } 70264 let index = this.#size === 0 ? undefined : this.#keyMap.get(k); 70265 if (index === undefined) { 70266 // addition 70267 index = (this.#size === 0 70268 ? this.#tail 70269 : this.#free.length !== 0 70270 ? this.#free.pop() 70271 : this.#size === this.#max 70272 ? this.#evict(false) 70273 : this.#size); 70274 this.#keyList[index] = k; 70275 this.#valList[index] = v; 70276 this.#keyMap.set(k, index); 70277 this.#next[this.#tail] = index; 70278 this.#prev[index] = this.#tail; 70279 this.#tail = index; 70280 this.#size++; 70281 this.#addItemSize(index, size, status); 70282 if (status) 70283 status.set = 'add'; 70284 noUpdateTTL = false; 70285 } 70286 else { 70287 // update 70288 this.#moveToTail(index); 70289 const oldVal = this.#valList[index]; 70290 if (v !== oldVal) { 70291 if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) { 70292 oldVal.__abortController.abort(new Error('replaced')); 70293 const { __staleWhileFetching: s } = oldVal; 70294 if (s !== undefined && !noDisposeOnSet) { 70295 if (this.#hasDispose) { 70296 this.#dispose?.(s, k, 'set'); 70297 } 70298 if (this.#hasDisposeAfter) { 70299 this.#disposed?.push([s, k, 'set']); 70300 } 70301 } 70302 } 70303 else if (!noDisposeOnSet) { 70304 if (this.#hasDispose) { 70305 this.#dispose?.(oldVal, k, 'set'); 70306 } 70307 if (this.#hasDisposeAfter) { 70308 this.#disposed?.push([oldVal, k, 'set']); 70309 } 70310 } 70311 this.#removeItemSize(index); 70312 this.#addItemSize(index, size, status); 70313 this.#valList[index] = v; 70314 if (status) { 70315 status.set = 'replace'; 70316 const oldValue = oldVal && this.#isBackgroundFetch(oldVal) 70317 ? oldVal.__staleWhileFetching 70318 : oldVal; 70319 if (oldValue !== undefined) 70320 status.oldValue = oldValue; 70321 } 70322 } 70323 else if (status) { 70324 status.set = 'update'; 70325 } 70326 } 70327 if (ttl !== 0 && !this.#ttls) { 70328 this.#initializeTTLTracking(); 70329 } 70330 if (this.#ttls) { 70331 if (!noUpdateTTL) { 70332 this.#setItemTTL(index, ttl, start); 70333 } 70334 if (status) 70335 this.#statusTTL(status, index); 70336 } 70337 if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) { 70338 const dt = this.#disposed; 70339 let task; 70340 while ((task = dt?.shift())) { 70341 this.#disposeAfter?.(...task); 70342 } 70343 } 70344 return this; 70345 } 70346 /** 70347 * Evict the least recently used item, returning its value or 70348 * `undefined` if cache is empty. 70349 */ 70350 pop() { 70351 try { 70352 while (this.#size) { 70353 const val = this.#valList[this.#head]; 70354 this.#evict(true); 70355 if (this.#isBackgroundFetch(val)) { 70356 if (val.__staleWhileFetching) { 70357 return val.__staleWhileFetching; 70358 } 70359 } 70360 else if (val !== undefined) { 70361 return val; 70362 } 70363 } 70364 } 70365 finally { 70366 if (this.#hasDisposeAfter && this.#disposed) { 70367 const dt = this.#disposed; 70368 let task; 70369 while ((task = dt?.shift())) { 70370 this.#disposeAfter?.(...task); 70371 } 70372 } 70373 } 70374 } 70375 #evict(free) { 70376 const head = this.#head; 70377 const k = this.#keyList[head]; 70378 const v = this.#valList[head]; 70379 if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) { 70380 v.__abortController.abort(new Error('evicted')); 70381 } 70382 else if (this.#hasDispose || this.#hasDisposeAfter) { 70383 if (this.#hasDispose) { 70384 this.#dispose?.(v, k, 'evict'); 70385 } 70386 if (this.#hasDisposeAfter) { 70387 this.#disposed?.push([v, k, 'evict']); 70388 } 70389 } 70390 this.#removeItemSize(head); 70391 // if we aren't about to use the index, then null these out 70392 if (free) { 70393 this.#keyList[head] = undefined; 70394 this.#valList[head] = undefined; 70395 this.#free.push(head); 70396 } 70397 if (this.#size === 1) { 70398 this.#head = this.#tail = 0; 70399 this.#free.length = 0; 70400 } 70401 else { 70402 this.#head = this.#next[head]; 70403 } 70404 this.#keyMap.delete(k); 70405 this.#size--; 70406 return head; 70407 } 70408 /** 70409 * Check if a key is in the cache, without updating the recency of use. 70410 * Will return false if the item is stale, even though it is technically 70411 * in the cache. 70412 * 70413 * Will not update item age unless 70414 * {@link LRUCache.OptionsBase.updateAgeOnHas} is set. 70415 */ 70416 has(k, hasOptions = {}) { 70417 const { updateAgeOnHas = this.updateAgeOnHas, status } = hasOptions; 70418 const index = this.#keyMap.get(k); 70419 if (index !== undefined) { 70420 const v = this.#valList[index]; 70421 if (this.#isBackgroundFetch(v) && 70422 v.__staleWhileFetching === undefined) { 70423 return false; 70424 } 70425 if (!this.#isStale(index)) { 70426 if (updateAgeOnHas) { 70427 this.#updateItemAge(index); 70428 } 70429 if (status) { 70430 status.has = 'hit'; 70431 this.#statusTTL(status, index); 70432 } 70433 return true; 70434 } 70435 else if (status) { 70436 status.has = 'stale'; 70437 this.#statusTTL(status, index); 70438 } 70439 } 70440 else if (status) { 70441 status.has = 'miss'; 70442 } 70443 return false; 70444 } 70445 /** 70446 * Like {@link LRUCache#get} but doesn't update recency or delete stale 70447 * items. 70448 * 70449 * Returns `undefined` if the item is stale, unless 70450 * {@link LRUCache.OptionsBase.allowStale} is set. 70451 */ 70452 peek(k, peekOptions = {}) { 70453 const { allowStale = this.allowStale } = peekOptions; 70454 const index = this.#keyMap.get(k); 70455 if (index === undefined || 70456 (!allowStale && this.#isStale(index))) { 70457 return; 70458 } 70459 const v = this.#valList[index]; 70460 // either stale and allowed, or forcing a refresh of non-stale value 70461 return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v; 70462 } 70463 #backgroundFetch(k, index, options, context) { 70464 const v = index === undefined ? undefined : this.#valList[index]; 70465 if (this.#isBackgroundFetch(v)) { 70466 return v; 70467 } 70468 const ac = new AC(); 70469 const { signal } = options; 70470 // when/if our AC signals, then stop listening to theirs. 70471 signal?.addEventListener('abort', () => ac.abort(signal.reason), { 70472 signal: ac.signal, 70473 }); 70474 const fetchOpts = { 70475 signal: ac.signal, 70476 options, 70477 context, 70478 }; 70479 const cb = (v, updateCache = false) => { 70480 const { aborted } = ac.signal; 70481 const ignoreAbort = options.ignoreFetchAbort && v !== undefined; 70482 if (options.status) { 70483 if (aborted && !updateCache) { 70484 options.status.fetchAborted = true; 70485 options.status.fetchError = ac.signal.reason; 70486 if (ignoreAbort) 70487 options.status.fetchAbortIgnored = true; 70488 } 70489 else { 70490 options.status.fetchResolved = true; 70491 } 70492 } 70493 if (aborted && !ignoreAbort && !updateCache) { 70494 return fetchFail(ac.signal.reason); 70495 } 70496 // either we didn't abort, and are still here, or we did, and ignored 70497 const bf = p; 70498 if (this.#valList[index] === p) { 70499 if (v === undefined) { 70500 if (bf.__staleWhileFetching) { 70501 this.#valList[index] = bf.__staleWhileFetching; 70502 } 70503 else { 70504 this.delete(k); 70505 } 70506 } 70507 else { 70508 if (options.status) 70509 options.status.fetchUpdated = true; 70510 this.set(k, v, fetchOpts.options); 70511 } 70512 } 70513 return v; 70514 }; 70515 const eb = (er) => { 70516 if (options.status) { 70517 options.status.fetchRejected = true; 70518 options.status.fetchError = er; 70519 } 70520 return fetchFail(er); 70521 }; 70522 const fetchFail = (er) => { 70523 const { aborted } = ac.signal; 70524 const allowStaleAborted = aborted && options.allowStaleOnFetchAbort; 70525 const allowStale = allowStaleAborted || options.allowStaleOnFetchRejection; 70526 const noDelete = allowStale || options.noDeleteOnFetchRejection; 70527 const bf = p; 70528 if (this.#valList[index] === p) { 70529 // if we allow stale on fetch rejections, then we need to ensure that 70530 // the stale value is not removed from the cache when the fetch fails. 70531 const del = !noDelete || bf.__staleWhileFetching === undefined; 70532 if (del) { 70533 this.delete(k); 70534 } 70535 else if (!allowStaleAborted) { 70536 // still replace the *promise* with the stale value, 70537 // since we are done with the promise at this point. 70538 // leave it untouched if we're still waiting for an 70539 // aborted background fetch that hasn't yet returned. 70540 this.#valList[index] = bf.__staleWhileFetching; 70541 } 70542 } 70543 if (allowStale) { 70544 if (options.status && bf.__staleWhileFetching !== undefined) { 70545 options.status.returnedStale = true; 70546 } 70547 return bf.__staleWhileFetching; 70548 } 70549 else if (bf.__returned === bf) { 70550 throw er; 70551 } 70552 }; 70553 const pcall = (res, rej) => { 70554 const fmp = this.#fetchMethod?.(k, v, fetchOpts); 70555 if (fmp && fmp instanceof Promise) { 70556 fmp.then(v => res(v === undefined ? undefined : v), rej); 70557 } 70558 // ignored, we go until we finish, regardless. 70559 // defer check until we are actually aborting, 70560 // so fetchMethod can override. 70561 ac.signal.addEventListener('abort', () => { 70562 if (!options.ignoreFetchAbort || 70563 options.allowStaleOnFetchAbort) { 70564 res(undefined); 70565 // when it eventually resolves, update the cache. 70566 if (options.allowStaleOnFetchAbort) { 70567 res = v => cb(v, true); 70568 } 70569 } 70570 }); 70571 }; 70572 if (options.status) 70573 options.status.fetchDispatched = true; 70574 const p = new Promise(pcall).then(cb, eb); 70575 const bf = Object.assign(p, { 70576 __abortController: ac, 70577 __staleWhileFetching: v, 70578 __returned: undefined, 70579 }); 70580 if (index === undefined) { 70581 // internal, don't expose status. 70582 this.set(k, bf, { ...fetchOpts.options, status: undefined }); 70583 index = this.#keyMap.get(k); 70584 } 70585 else { 70586 this.#valList[index] = bf; 70587 } 70588 return bf; 70589 } 70590 #isBackgroundFetch(p) { 70591 if (!this.#hasFetchMethod) 70592 return false; 70593 const b = p; 70594 return (!!b && 70595 b instanceof Promise && 70596 b.hasOwnProperty('__staleWhileFetching') && 70597 b.__abortController instanceof AC); 70598 } 70599 async fetch(k, fetchOptions = {}) { 70600 const { 70601 // get options 70602 allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, 70603 // set options 70604 ttl = this.ttl, noDisposeOnSet = this.noDisposeOnSet, size = 0, sizeCalculation = this.sizeCalculation, noUpdateTTL = this.noUpdateTTL, 70605 // fetch exclusive options 70606 noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, allowStaleOnFetchRejection = this.allowStaleOnFetchRejection, ignoreFetchAbort = this.ignoreFetchAbort, allowStaleOnFetchAbort = this.allowStaleOnFetchAbort, context, forceRefresh = false, status, signal, } = fetchOptions; 70607 if (!this.#hasFetchMethod) { 70608 if (status) 70609 status.fetch = 'get'; 70610 return this.get(k, { 70611 allowStale, 70612 updateAgeOnGet, 70613 noDeleteOnStaleGet, 70614 status, 70615 }); 70616 } 70617 const options = { 70618 allowStale, 70619 updateAgeOnGet, 70620 noDeleteOnStaleGet, 70621 ttl, 70622 noDisposeOnSet, 70623 size, 70624 sizeCalculation, 70625 noUpdateTTL, 70626 noDeleteOnFetchRejection, 70627 allowStaleOnFetchRejection, 70628 allowStaleOnFetchAbort, 70629 ignoreFetchAbort, 70630 status, 70631 signal, 70632 }; 70633 let index = this.#keyMap.get(k); 70634 if (index === undefined) { 70635 if (status) 70636 status.fetch = 'miss'; 70637 const p = this.#backgroundFetch(k, index, options, context); 70638 return (p.__returned = p); 70639 } 70640 else { 70641 // in cache, maybe already fetching 70642 const v = this.#valList[index]; 70643 if (this.#isBackgroundFetch(v)) { 70644 const stale = allowStale && v.__staleWhileFetching !== undefined; 70645 if (status) { 70646 status.fetch = 'inflight'; 70647 if (stale) 70648 status.returnedStale = true; 70649 } 70650 return stale ? v.__staleWhileFetching : (v.__returned = v); 70651 } 70652 // if we force a refresh, that means do NOT serve the cached value, 70653 // unless we are already in the process of refreshing the cache. 70654 const isStale = this.#isStale(index); 70655 if (!forceRefresh && !isStale) { 70656 if (status) 70657 status.fetch = 'hit'; 70658 this.#moveToTail(index); 70659 if (updateAgeOnGet) { 70660 this.#updateItemAge(index); 70661 } 70662 if (status) 70663 this.#statusTTL(status, index); 70664 return v; 70665 } 70666 // ok, it is stale or a forced refresh, and not already fetching. 70667 // refresh the cache. 70668 const p = this.#backgroundFetch(k, index, options, context); 70669 const hasStale = p.__staleWhileFetching !== undefined; 70670 const staleVal = hasStale && allowStale; 70671 if (status) { 70672 status.fetch = isStale ? 'stale' : 'refresh'; 70673 if (staleVal && isStale) 70674 status.returnedStale = true; 70675 } 70676 return staleVal ? p.__staleWhileFetching : (p.__returned = p); 70677 } 70678 } 70679 /** 70680 * Return a value from the cache. Will update the recency of the cache 70681 * entry found. 70682 * 70683 * If the key is not found, get() will return `undefined`. 70684 */ 70685 get(k, getOptions = {}) { 70686 const { allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, status, } = getOptions; 70687 const index = this.#keyMap.get(k); 70688 if (index !== undefined) { 70689 const value = this.#valList[index]; 70690 const fetching = this.#isBackgroundFetch(value); 70691 if (status) 70692 this.#statusTTL(status, index); 70693 if (this.#isStale(index)) { 70694 if (status) 70695 status.get = 'stale'; 70696 // delete only if not an in-flight background fetch 70697 if (!fetching) { 70698 if (!noDeleteOnStaleGet) { 70699 this.delete(k); 70700 } 70701 if (status && allowStale) 70702 status.returnedStale = true; 70703 return allowStale ? value : undefined; 70704 } 70705 else { 70706 if (status && 70707 allowStale && 70708 value.__staleWhileFetching !== undefined) { 70709 status.returnedStale = true; 70710 } 70711 return allowStale ? value.__staleWhileFetching : undefined; 70712 } 70713 } 70714 else { 70715 if (status) 70716 status.get = 'hit'; 70717 // if we're currently fetching it, we don't actually have it yet 70718 // it's not stale, which means this isn't a staleWhileRefetching. 70719 // If it's not stale, and fetching, AND has a __staleWhileFetching 70720 // value, then that means the user fetched with {forceRefresh:true}, 70721 // so it's safe to return that value. 70722 if (fetching) { 70723 return value.__staleWhileFetching; 70724 } 70725 this.#moveToTail(index); 70726 if (updateAgeOnGet) { 70727 this.#updateItemAge(index); 70728 } 70729 return value; 70730 } 70731 } 70732 else if (status) { 70733 status.get = 'miss'; 70734 } 70735 } 70736 #connect(p, n) { 70737 this.#prev[n] = p; 70738 this.#next[p] = n; 70739 } 70740 #moveToTail(index) { 70741 // if tail already, nothing to do 70742 // if head, move head to next[index] 70743 // else 70744 // move next[prev[index]] to next[index] (head has no prev) 70745 // move prev[next[index]] to prev[index] 70746 // prev[index] = tail 70747 // next[tail] = index 70748 // tail = index 70749 if (index !== this.#tail) { 70750 if (index === this.#head) { 70751 this.#head = this.#next[index]; 70752 } 70753 else { 70754 this.#connect(this.#prev[index], this.#next[index]); 70755 } 70756 this.#connect(this.#tail, index); 70757 this.#tail = index; 70758 } 70759 } 70760 /** 70761 * Deletes a key out of the cache. 70762 * Returns true if the key was deleted, false otherwise. 70763 */ 70764 delete(k) { 70765 let deleted = false; 70766 if (this.#size !== 0) { 70767 const index = this.#keyMap.get(k); 70768 if (index !== undefined) { 70769 deleted = true; 70770 if (this.#size === 1) { 70771 this.clear(); 70772 } 70773 else { 70774 this.#removeItemSize(index); 70775 const v = this.#valList[index]; 70776 if (this.#isBackgroundFetch(v)) { 70777 v.__abortController.abort(new Error('deleted')); 70778 } 70779 else if (this.#hasDispose || this.#hasDisposeAfter) { 70780 if (this.#hasDispose) { 70781 this.#dispose?.(v, k, 'delete'); 70782 } 70783 if (this.#hasDisposeAfter) { 70784 this.#disposed?.push([v, k, 'delete']); 70785 } 70786 } 70787 this.#keyMap.delete(k); 70788 this.#keyList[index] = undefined; 70789 this.#valList[index] = undefined; 70790 if (index === this.#tail) { 70791 this.#tail = this.#prev[index]; 70792 } 70793 else if (index === this.#head) { 70794 this.#head = this.#next[index]; 70795 } 70796 else { 70797 const pi = this.#prev[index]; 70798 this.#next[pi] = this.#next[index]; 70799 const ni = this.#next[index]; 70800 this.#prev[ni] = this.#prev[index]; 70801 } 70802 this.#size--; 70803 this.#free.push(index); 70804 } 70805 } 70806 } 70807 if (this.#hasDisposeAfter && this.#disposed?.length) { 70808 const dt = this.#disposed; 70809 let task; 70810 while ((task = dt?.shift())) { 70811 this.#disposeAfter?.(...task); 70812 } 70813 } 70814 return deleted; 70815 } 70816 /** 70817 * Clear the cache entirely, throwing away all values. 70818 */ 70819 clear() { 70820 for (const index of this.#rindexes({ allowStale: true })) { 70821 const v = this.#valList[index]; 70822 if (this.#isBackgroundFetch(v)) { 70823 v.__abortController.abort(new Error('deleted')); 70824 } 70825 else { 70826 const k = this.#keyList[index]; 70827 if (this.#hasDispose) { 70828 this.#dispose?.(v, k, 'delete'); 70829 } 70830 if (this.#hasDisposeAfter) { 70831 this.#disposed?.push([v, k, 'delete']); 70832 } 70833 } 70834 } 70835 this.#keyMap.clear(); 70836 this.#valList.fill(undefined); 70837 this.#keyList.fill(undefined); 70838 if (this.#ttls && this.#starts) { 70839 this.#ttls.fill(0); 70840 this.#starts.fill(0); 70841 } 70842 if (this.#sizes) { 70843 this.#sizes.fill(0); 70844 } 70845 this.#head = 0; 70846 this.#tail = 0; 70847 this.#free.length = 0; 70848 this.#calculatedSize = 0; 70849 this.#size = 0; 70850 if (this.#hasDisposeAfter && this.#disposed) { 70851 const dt = this.#disposed; 70852 let task; 70853 while ((task = dt?.shift())) { 70854 this.#disposeAfter?.(...task); 70855 } 70856 } 70857 } 70858 } 70859 exports.LRUCache = LRUCache; 70860 //# sourceMappingURL=index.js.map 70861 70862 /***/ }), 70863 70864 /***/ 43033: 70865 /***/ ((__unused_webpack_module, exports) => { 70866 70867 "use strict"; 70868 70869 Object.defineProperty(exports, "__esModule", ({ value: true })); 70870 exports.assertValidPattern = void 0; 70871 const MAX_PATTERN_LENGTH = 1024 * 64; 70872 const assertValidPattern = (pattern) => { 70873 if (typeof pattern !== 'string') { 70874 throw new TypeError('invalid pattern'); 70875 } 70876 if (pattern.length > MAX_PATTERN_LENGTH) { 70877 throw new TypeError('pattern is too long'); 70878 } 70879 }; 70880 exports.assertValidPattern = assertValidPattern; 70881 //# sourceMappingURL=assert-valid-pattern.js.map 70882 70883 /***/ }), 70884 70885 /***/ 10596: 70886 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 70887 70888 "use strict"; 70889 70890 // parse a single path portion 70891 Object.defineProperty(exports, "__esModule", ({ value: true })); 70892 exports.AST = void 0; 70893 const brace_expressions_js_1 = __nccwpck_require__(3857); 70894 const unescape_js_1 = __nccwpck_require__(66615); 70895 const types = new Set(['!', '?', '+', '*', '@']); 70896 const isExtglobType = (c) => types.has(c); 70897 // Patterns that get prepended to bind to the start of either the 70898 // entire string, or just a single path portion, to prevent dots 70899 // and/or traversal patterns, when needed. 70900 // Exts don't need the ^ or / bit, because the root binds that already. 70901 const startNoTraversal = '(?!(?:^|/)\\.\\.?(?:$|/))'; 70902 const startNoDot = '(?!\\.)'; 70903 // characters that indicate a start of pattern needs the "no dots" bit, 70904 // because a dot *might* be matched. ( is not in the list, because in 70905 // the case of a child extglob, it will handle the prevention itself. 70906 const addPatternStart = new Set(['[', '.']); 70907 // cases where traversal is A-OK, no dot prevention needed 70908 const justDots = new Set(['..', '.']); 70909 const reSpecials = new Set('().*{}+?[]^$\\!'); 70910 const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); 70911 // any single thing other than / 70912 const qmark = '[^/]'; 70913 // * => any number of characters 70914 const star = qmark + '*?'; 70915 // use + when we need to ensure that *something* matches, because the * is 70916 // the only thing in the path portion. 70917 const starNoEmpty = qmark + '+?'; 70918 // remove the \ chars that we added if we end up doing a nonmagic compare 70919 // const deslash = (s: string) => s.replace(/\\(.)/g, '$1') 70920 class AST { 70921 type; 70922 #root; 70923 #hasMagic; 70924 #uflag = false; 70925 #parts = []; 70926 #parent; 70927 #parentIndex; 70928 #negs; 70929 #filledNegs = false; 70930 #options; 70931 #toString; 70932 // set to true if it's an extglob with no children 70933 // (which really means one child of '') 70934 #emptyExt = false; 70935 constructor(type, parent, options = {}) { 70936 this.type = type; 70937 // extglobs are inherently magical 70938 if (type) 70939 this.#hasMagic = true; 70940 this.#parent = parent; 70941 this.#root = this.#parent ? this.#parent.#root : this; 70942 this.#options = this.#root === this ? options : this.#root.#options; 70943 this.#negs = this.#root === this ? [] : this.#root.#negs; 70944 if (type === '!' && !this.#root.#filledNegs) 70945 this.#negs.push(this); 70946 this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0; 70947 } 70948 get hasMagic() { 70949 /* c8 ignore start */ 70950 if (this.#hasMagic !== undefined) 70951 return this.#hasMagic; 70952 /* c8 ignore stop */ 70953 for (const p of this.#parts) { 70954 if (typeof p === 'string') 70955 continue; 70956 if (p.type || p.hasMagic) 70957 return (this.#hasMagic = true); 70958 } 70959 // note: will be undefined until we generate the regexp src and find out 70960 return this.#hasMagic; 70961 } 70962 // reconstructs the pattern 70963 toString() { 70964 if (this.#toString !== undefined) 70965 return this.#toString; 70966 if (!this.type) { 70967 return (this.#toString = this.#parts.map(p => String(p)).join('')); 70968 } 70969 else { 70970 return (this.#toString = 70971 this.type + '(' + this.#parts.map(p => String(p)).join('|') + ')'); 70972 } 70973 } 70974 #fillNegs() { 70975 /* c8 ignore start */ 70976 if (this !== this.#root) 70977 throw new Error('should only call on root'); 70978 if (this.#filledNegs) 70979 return this; 70980 /* c8 ignore stop */ 70981 // call toString() once to fill this out 70982 this.toString(); 70983 this.#filledNegs = true; 70984 let n; 70985 while ((n = this.#negs.pop())) { 70986 if (n.type !== '!') 70987 continue; 70988 // walk up the tree, appending everthing that comes AFTER parentIndex 70989 let p = n; 70990 let pp = p.#parent; 70991 while (pp) { 70992 for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) { 70993 for (const part of n.#parts) { 70994 /* c8 ignore start */ 70995 if (typeof part === 'string') { 70996 throw new Error('string part in extglob AST??'); 70997 } 70998 /* c8 ignore stop */ 70999 part.copyIn(pp.#parts[i]); 71000 } 71001 } 71002 p = pp; 71003 pp = p.#parent; 71004 } 71005 } 71006 return this; 71007 } 71008 push(...parts) { 71009 for (const p of parts) { 71010 if (p === '') 71011 continue; 71012 /* c8 ignore start */ 71013 if (typeof p !== 'string' && !(p instanceof AST && p.#parent === this)) { 71014 throw new Error('invalid part: ' + p); 71015 } 71016 /* c8 ignore stop */ 71017 this.#parts.push(p); 71018 } 71019 } 71020 toJSON() { 71021 const ret = this.type === null 71022 ? this.#parts.slice().map(p => (typeof p === 'string' ? p : p.toJSON())) 71023 : [this.type, ...this.#parts.map(p => p.toJSON())]; 71024 if (this.isStart() && !this.type) 71025 ret.unshift([]); 71026 if (this.isEnd() && 71027 (this === this.#root || 71028 (this.#root.#filledNegs && this.#parent?.type === '!'))) { 71029 ret.push({}); 71030 } 71031 return ret; 71032 } 71033 isStart() { 71034 if (this.#root === this) 71035 return true; 71036 // if (this.type) return !!this.#parent?.isStart() 71037 if (!this.#parent?.isStart()) 71038 return false; 71039 if (this.#parentIndex === 0) 71040 return true; 71041 // if everything AHEAD of this is a negation, then it's still the "start" 71042 const p = this.#parent; 71043 for (let i = 0; i < this.#parentIndex; i++) { 71044 const pp = p.#parts[i]; 71045 if (!(pp instanceof AST && pp.type === '!')) { 71046 return false; 71047 } 71048 } 71049 return true; 71050 } 71051 isEnd() { 71052 if (this.#root === this) 71053 return true; 71054 if (this.#parent?.type === '!') 71055 return true; 71056 if (!this.#parent?.isEnd()) 71057 return false; 71058 if (!this.type) 71059 return this.#parent?.isEnd(); 71060 // if not root, it'll always have a parent 71061 /* c8 ignore start */ 71062 const pl = this.#parent ? this.#parent.#parts.length : 0; 71063 /* c8 ignore stop */ 71064 return this.#parentIndex === pl - 1; 71065 } 71066 copyIn(part) { 71067 if (typeof part === 'string') 71068 this.push(part); 71069 else 71070 this.push(part.clone(this)); 71071 } 71072 clone(parent) { 71073 const c = new AST(this.type, parent); 71074 for (const p of this.#parts) { 71075 c.copyIn(p); 71076 } 71077 return c; 71078 } 71079 static #parseAST(str, ast, pos, opt) { 71080 let escaping = false; 71081 let inBrace = false; 71082 let braceStart = -1; 71083 let braceNeg = false; 71084 if (ast.type === null) { 71085 // outside of a extglob, append until we find a start 71086 let i = pos; 71087 let acc = ''; 71088 while (i < str.length) { 71089 const c = str.charAt(i++); 71090 // still accumulate escapes at this point, but we do ignore 71091 // starts that are escaped 71092 if (escaping || c === '\\') { 71093 escaping = !escaping; 71094 acc += c; 71095 continue; 71096 } 71097 if (inBrace) { 71098 if (i === braceStart + 1) { 71099 if (c === '^' || c === '!') { 71100 braceNeg = true; 71101 } 71102 } 71103 else if (c === ']' && !(i === braceStart + 2 && braceNeg)) { 71104 inBrace = false; 71105 } 71106 acc += c; 71107 continue; 71108 } 71109 else if (c === '[') { 71110 inBrace = true; 71111 braceStart = i; 71112 braceNeg = false; 71113 acc += c; 71114 continue; 71115 } 71116 if (!opt.noext && isExtglobType(c) && str.charAt(i) === '(') { 71117 ast.push(acc); 71118 acc = ''; 71119 const ext = new AST(c, ast); 71120 i = AST.#parseAST(str, ext, i, opt); 71121 ast.push(ext); 71122 continue; 71123 } 71124 acc += c; 71125 } 71126 ast.push(acc); 71127 return i; 71128 } 71129 // some kind of extglob, pos is at the ( 71130 // find the next | or ) 71131 let i = pos + 1; 71132 let part = new AST(null, ast); 71133 const parts = []; 71134 let acc = ''; 71135 while (i < str.length) { 71136 const c = str.charAt(i++); 71137 // still accumulate escapes at this point, but we do ignore 71138 // starts that are escaped 71139 if (escaping || c === '\\') { 71140 escaping = !escaping; 71141 acc += c; 71142 continue; 71143 } 71144 if (inBrace) { 71145 if (i === braceStart + 1) { 71146 if (c === '^' || c === '!') { 71147 braceNeg = true; 71148 } 71149 } 71150 else if (c === ']' && !(i === braceStart + 2 && braceNeg)) { 71151 inBrace = false; 71152 } 71153 acc += c; 71154 continue; 71155 } 71156 else if (c === '[') { 71157 inBrace = true; 71158 braceStart = i; 71159 braceNeg = false; 71160 acc += c; 71161 continue; 71162 } 71163 if (isExtglobType(c) && str.charAt(i) === '(') { 71164 part.push(acc); 71165 acc = ''; 71166 const ext = new AST(c, part); 71167 part.push(ext); 71168 i = AST.#parseAST(str, ext, i, opt); 71169 continue; 71170 } 71171 if (c === '|') { 71172 part.push(acc); 71173 acc = ''; 71174 parts.push(part); 71175 part = new AST(null, ast); 71176 continue; 71177 } 71178 if (c === ')') { 71179 if (acc === '' && ast.#parts.length === 0) { 71180 ast.#emptyExt = true; 71181 } 71182 part.push(acc); 71183 acc = ''; 71184 ast.push(...parts, part); 71185 return i; 71186 } 71187 acc += c; 71188 } 71189 // unfinished extglob 71190 // if we got here, it was a malformed extglob! not an extglob, but 71191 // maybe something else in there. 71192 ast.type = null; 71193 ast.#hasMagic = undefined; 71194 ast.#parts = [str.substring(pos - 1)]; 71195 return i; 71196 } 71197 static fromGlob(pattern, options = {}) { 71198 const ast = new AST(null, undefined, options); 71199 AST.#parseAST(pattern, ast, 0, options); 71200 return ast; 71201 } 71202 // returns the regular expression if there's magic, or the unescaped 71203 // string if not. 71204 toMMPattern() { 71205 // should only be called on root 71206 /* c8 ignore start */ 71207 if (this !== this.#root) 71208 return this.#root.toMMPattern(); 71209 /* c8 ignore stop */ 71210 const glob = this.toString(); 71211 const [re, body, hasMagic, uflag] = this.toRegExpSource(); 71212 // if we're in nocase mode, and not nocaseMagicOnly, then we do 71213 // still need a regular expression if we have to case-insensitively 71214 // match capital/lowercase characters. 71215 const anyMagic = hasMagic || 71216 this.#hasMagic || 71217 (this.#options.nocase && 71218 !this.#options.nocaseMagicOnly && 71219 glob.toUpperCase() !== glob.toLowerCase()); 71220 if (!anyMagic) { 71221 return body; 71222 } 71223 const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : ''); 71224 return Object.assign(new RegExp(`^${re}$`, flags), { 71225 _src: re, 71226 _glob: glob, 71227 }); 71228 } 71229 // returns the string match, the regexp source, whether there's magic 71230 // in the regexp (so a regular expression is required) and whether or 71231 // not the uflag is needed for the regular expression (for posix classes) 71232 // TODO: instead of injecting the start/end at this point, just return 71233 // the BODY of the regexp, along with the start/end portions suitable 71234 // for binding the start/end in either a joined full-path makeRe context 71235 // (where we bind to (^|/), or a standalone matchPart context (where 71236 // we bind to ^, and not /). Otherwise slashes get duped! 71237 // 71238 // In part-matching mode, the start is: 71239 // - if not isStart: nothing 71240 // - if traversal possible, but not allowed: ^(?!\.\.?$) 71241 // - if dots allowed or not possible: ^ 71242 // - if dots possible and not allowed: ^(?!\.) 71243 // end is: 71244 // - if not isEnd(): nothing 71245 // - else: $ 71246 // 71247 // In full-path matching mode, we put the slash at the START of the 71248 // pattern, so start is: 71249 // - if first pattern: same as part-matching mode 71250 // - if not isStart(): nothing 71251 // - if traversal possible, but not allowed: /(?!\.\.?(?:$|/)) 71252 // - if dots allowed or not possible: / 71253 // - if dots possible and not allowed: /(?!\.) 71254 // end is: 71255 // - if last pattern, same as part-matching mode 71256 // - else nothing 71257 // 71258 // Always put the (?:$|/) on negated tails, though, because that has to be 71259 // there to bind the end of the negated pattern portion, and it's easier to 71260 // just stick it in now rather than try to inject it later in the middle of 71261 // the pattern. 71262 // 71263 // We can just always return the same end, and leave it up to the caller 71264 // to know whether it's going to be used joined or in parts. 71265 // And, if the start is adjusted slightly, can do the same there: 71266 // - if not isStart: nothing 71267 // - if traversal possible, but not allowed: (?:/|^)(?!\.\.?$) 71268 // - if dots allowed or not possible: (?:/|^) 71269 // - if dots possible and not allowed: (?:/|^)(?!\.) 71270 // 71271 // But it's better to have a simpler binding without a conditional, for 71272 // performance, so probably better to return both start options. 71273 // 71274 // Then the caller just ignores the end if it's not the first pattern, 71275 // and the start always gets applied. 71276 // 71277 // But that's always going to be $ if it's the ending pattern, or nothing, 71278 // so the caller can just attach $ at the end of the pattern when building. 71279 // 71280 // So the todo is: 71281 // - better detect what kind of start is needed 71282 // - return both flavors of starting pattern 71283 // - attach $ at the end of the pattern when creating the actual RegExp 71284 // 71285 // Ah, but wait, no, that all only applies to the root when the first pattern 71286 // is not an extglob. If the first pattern IS an extglob, then we need all 71287 // that dot prevention biz to live in the extglob portions, because eg 71288 // +(*|.x*) can match .xy but not .yx. 71289 // 71290 // So, return the two flavors if it's #root and the first child is not an 71291 // AST, otherwise leave it to the child AST to handle it, and there, 71292 // use the (?:^|/) style of start binding. 71293 // 71294 // Even simplified further: 71295 // - Since the start for a join is eg /(?!\.) and the start for a part 71296 // is ^(?!\.), we can just prepend (?!\.) to the pattern (either root 71297 // or start or whatever) and prepend ^ or / at the Regexp construction. 71298 toRegExpSource(allowDot) { 71299 const dot = allowDot ?? !!this.#options.dot; 71300 if (this.#root === this) 71301 this.#fillNegs(); 71302 if (!this.type) { 71303 const noEmpty = this.isStart() && this.isEnd(); 71304 const src = this.#parts 71305 .map(p => { 71306 const [re, _, hasMagic, uflag] = typeof p === 'string' 71307 ? AST.#parseGlob(p, this.#hasMagic, noEmpty) 71308 : p.toRegExpSource(allowDot); 71309 this.#hasMagic = this.#hasMagic || hasMagic; 71310 this.#uflag = this.#uflag || uflag; 71311 return re; 71312 }) 71313 .join(''); 71314 let start = ''; 71315 if (this.isStart()) { 71316 if (typeof this.#parts[0] === 'string') { 71317 // this is the string that will match the start of the pattern, 71318 // so we need to protect against dots and such. 71319 // '.' and '..' cannot match unless the pattern is that exactly, 71320 // even if it starts with . or dot:true is set. 71321 const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]); 71322 if (!dotTravAllowed) { 71323 const aps = addPatternStart; 71324 // check if we have a possibility of matching . or .., 71325 // and prevent that. 71326 const needNoTrav = 71327 // dots are allowed, and the pattern starts with [ or . 71328 (dot && aps.has(src.charAt(0))) || 71329 // the pattern starts with \., and then [ or . 71330 (src.startsWith('\\.') && aps.has(src.charAt(2))) || 71331 // the pattern starts with \.\., and then [ or . 71332 (src.startsWith('\\.\\.') && aps.has(src.charAt(4))); 71333 // no need to prevent dots if it can't match a dot, or if a 71334 // sub-pattern will be preventing it anyway. 71335 const needNoDot = !dot && !allowDot && aps.has(src.charAt(0)); 71336 start = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : ''; 71337 } 71338 } 71339 } 71340 // append the "end of path portion" pattern to negation tails 71341 let end = ''; 71342 if (this.isEnd() && 71343 this.#root.#filledNegs && 71344 this.#parent?.type === '!') { 71345 end = '(?:$|\\/)'; 71346 } 71347 const final = start + src + end; 71348 return [ 71349 final, 71350 (0, unescape_js_1.unescape)(src), 71351 (this.#hasMagic = !!this.#hasMagic), 71352 this.#uflag, 71353 ]; 71354 } 71355 // We need to calculate the body *twice* if it's a repeat pattern 71356 // at the start, once in nodot mode, then again in dot mode, so a 71357 // pattern like *(?) can match 'x.y' 71358 const repeated = this.type === '*' || this.type === '+'; 71359 // some kind of extglob 71360 const start = this.type === '!' ? '(?:(?!(?:' : '(?:'; 71361 let body = this.#partsToRegExp(dot); 71362 if (this.isStart() && this.isEnd() && !body && this.type !== '!') { 71363 // invalid extglob, has to at least be *something* present, if it's 71364 // the entire path portion. 71365 const s = this.toString(); 71366 this.#parts = [s]; 71367 this.type = null; 71368 this.#hasMagic = undefined; 71369 return [s, (0, unescape_js_1.unescape)(this.toString()), false, false]; 71370 } 71371 // XXX abstract out this map method 71372 let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot 71373 ? '' 71374 : this.#partsToRegExp(true); 71375 if (bodyDotAllowed === body) { 71376 bodyDotAllowed = ''; 71377 } 71378 if (bodyDotAllowed) { 71379 body = `(?:${body})(?:${bodyDotAllowed})*?`; 71380 } 71381 // an empty !() is exactly equivalent to a starNoEmpty 71382 let final = ''; 71383 if (this.type === '!' && this.#emptyExt) { 71384 final = (this.isStart() && !dot ? startNoDot : '') + starNoEmpty; 71385 } 71386 else { 71387 const close = this.type === '!' 71388 ? // !() must match something,but !(x) can match '' 71389 '))' + 71390 (this.isStart() && !dot && !allowDot ? startNoDot : '') + 71391 star + 71392 ')' 71393 : this.type === '@' 71394 ? ')' 71395 : this.type === '?' 71396 ? ')?' 71397 : this.type === '+' && bodyDotAllowed 71398 ? ')' 71399 : this.type === '*' && bodyDotAllowed 71400 ? `)?` 71401 : `)${this.type}`; 71402 final = start + body + close; 71403 } 71404 return [ 71405 final, 71406 (0, unescape_js_1.unescape)(body), 71407 (this.#hasMagic = !!this.#hasMagic), 71408 this.#uflag, 71409 ]; 71410 } 71411 #partsToRegExp(dot) { 71412 return this.#parts 71413 .map(p => { 71414 // extglob ASTs should only contain parent ASTs 71415 /* c8 ignore start */ 71416 if (typeof p === 'string') { 71417 throw new Error('string type in extglob ast??'); 71418 } 71419 /* c8 ignore stop */ 71420 // can ignore hasMagic, because extglobs are already always magic 71421 const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot); 71422 this.#uflag = this.#uflag || uflag; 71423 return re; 71424 }) 71425 .filter(p => !(this.isStart() && this.isEnd()) || !!p) 71426 .join('|'); 71427 } 71428 static #parseGlob(glob, hasMagic, noEmpty = false) { 71429 let escaping = false; 71430 let re = ''; 71431 let uflag = false; 71432 for (let i = 0; i < glob.length; i++) { 71433 const c = glob.charAt(i); 71434 if (escaping) { 71435 escaping = false; 71436 re += (reSpecials.has(c) ? '\\' : '') + c; 71437 continue; 71438 } 71439 if (c === '\\') { 71440 if (i === glob.length - 1) { 71441 re += '\\\\'; 71442 } 71443 else { 71444 escaping = true; 71445 } 71446 continue; 71447 } 71448 if (c === '[') { 71449 const [src, needUflag, consumed, magic] = (0, brace_expressions_js_1.parseClass)(glob, i); 71450 if (consumed) { 71451 re += src; 71452 uflag = uflag || needUflag; 71453 i += consumed - 1; 71454 hasMagic = hasMagic || magic; 71455 continue; 71456 } 71457 } 71458 if (c === '*') { 71459 if (noEmpty && glob === '*') 71460 re += starNoEmpty; 71461 else 71462 re += star; 71463 hasMagic = true; 71464 continue; 71465 } 71466 if (c === '?') { 71467 re += qmark; 71468 hasMagic = true; 71469 continue; 71470 } 71471 re += regExpEscape(c); 71472 } 71473 return [re, (0, unescape_js_1.unescape)(glob), !!hasMagic, uflag]; 71474 } 71475 } 71476 exports.AST = AST; 71477 //# sourceMappingURL=ast.js.map 71478 71479 /***/ }), 71480 71481 /***/ 3857: 71482 /***/ ((__unused_webpack_module, exports) => { 71483 71484 "use strict"; 71485 71486 // translate the various posix character classes into unicode properties 71487 // this works across all unicode locales 71488 Object.defineProperty(exports, "__esModule", ({ value: true })); 71489 exports.parseClass = void 0; 71490 // { <posix class>: [<translation>, /u flag required, negated] 71491 const posixClasses = { 71492 '[:alnum:]': ['\\p{L}\\p{Nl}\\p{Nd}', true], 71493 '[:alpha:]': ['\\p{L}\\p{Nl}', true], 71494 '[:ascii:]': ['\\x' + '00-\\x' + '7f', false], 71495 '[:blank:]': ['\\p{Zs}\\t', true], 71496 '[:cntrl:]': ['\\p{Cc}', true], 71497 '[:digit:]': ['\\p{Nd}', true], 71498 '[:graph:]': ['\\p{Z}\\p{C}', true, true], 71499 '[:lower:]': ['\\p{Ll}', true], 71500 '[:print:]': ['\\p{C}', true], 71501 '[:punct:]': ['\\p{P}', true], 71502 '[:space:]': ['\\p{Z}\\t\\r\\n\\v\\f', true], 71503 '[:upper:]': ['\\p{Lu}', true], 71504 '[:word:]': ['\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}', true], 71505 '[:xdigit:]': ['A-Fa-f0-9', false], 71506 }; 71507 // only need to escape a few things inside of brace expressions 71508 // escapes: [ \ ] - 71509 const braceEscape = (s) => s.replace(/[[\]\\-]/g, '\\$&'); 71510 // escape all regexp magic characters 71511 const regexpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); 71512 // everything has already been escaped, we just have to join 71513 const rangesToString = (ranges) => ranges.join(''); 71514 // takes a glob string at a posix brace expression, and returns 71515 // an equivalent regular expression source, and boolean indicating 71516 // whether the /u flag needs to be applied, and the number of chars 71517 // consumed to parse the character class. 71518 // This also removes out of order ranges, and returns ($.) if the 71519 // entire class just no good. 71520 const parseClass = (glob, position) => { 71521 const pos = position; 71522 /* c8 ignore start */ 71523 if (glob.charAt(pos) !== '[') { 71524 throw new Error('not in a brace expression'); 71525 } 71526 /* c8 ignore stop */ 71527 const ranges = []; 71528 const negs = []; 71529 let i = pos + 1; 71530 let sawStart = false; 71531 let uflag = false; 71532 let escaping = false; 71533 let negate = false; 71534 let endPos = pos; 71535 let rangeStart = ''; 71536 WHILE: while (i < glob.length) { 71537 const c = glob.charAt(i); 71538 if ((c === '!' || c === '^') && i === pos + 1) { 71539 negate = true; 71540 i++; 71541 continue; 71542 } 71543 if (c === ']' && sawStart && !escaping) { 71544 endPos = i + 1; 71545 break; 71546 } 71547 sawStart = true; 71548 if (c === '\\') { 71549 if (!escaping) { 71550 escaping = true; 71551 i++; 71552 continue; 71553 } 71554 // escaped \ char, fall through and treat like normal char 71555 } 71556 if (c === '[' && !escaping) { 71557 // either a posix class, a collation equivalent, or just a [ 71558 for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) { 71559 if (glob.startsWith(cls, i)) { 71560 // invalid, [a-[] is fine, but not [a-[:alpha]] 71561 if (rangeStart) { 71562 return ['$.', false, glob.length - pos, true]; 71563 } 71564 i += cls.length; 71565 if (neg) 71566 negs.push(unip); 71567 else 71568 ranges.push(unip); 71569 uflag = uflag || u; 71570 continue WHILE; 71571 } 71572 } 71573 } 71574 // now it's just a normal character, effectively 71575 escaping = false; 71576 if (rangeStart) { 71577 // throw this range away if it's not valid, but others 71578 // can still match. 71579 if (c > rangeStart) { 71580 ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c)); 71581 } 71582 else if (c === rangeStart) { 71583 ranges.push(braceEscape(c)); 71584 } 71585 rangeStart = ''; 71586 i++; 71587 continue; 71588 } 71589 // now might be the start of a range. 71590 // can be either c-d or c-] or c<more...>] or c] at this point 71591 if (glob.startsWith('-]', i + 1)) { 71592 ranges.push(braceEscape(c + '-')); 71593 i += 2; 71594 continue; 71595 } 71596 if (glob.startsWith('-', i + 1)) { 71597 rangeStart = c; 71598 i += 2; 71599 continue; 71600 } 71601 // not the start of a range, just a single character 71602 ranges.push(braceEscape(c)); 71603 i++; 71604 } 71605 if (endPos < i) { 71606 // didn't see the end of the class, not a valid class, 71607 // but might still be valid as a literal match. 71608 return ['', false, 0, false]; 71609 } 71610 // if we got no ranges and no negates, then we have a range that 71611 // cannot possibly match anything, and that poisons the whole glob 71612 if (!ranges.length && !negs.length) { 71613 return ['$.', false, glob.length - pos, true]; 71614 } 71615 // if we got one positive range, and it's a single character, then that's 71616 // not actually a magic pattern, it's just that one literal character. 71617 // we should not treat that as "magic", we should just return the literal 71618 // character. [_] is a perfectly valid way to escape glob magic chars. 71619 if (negs.length === 0 && 71620 ranges.length === 1 && 71621 /^\\?.$/.test(ranges[0]) && 71622 !negate) { 71623 const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0]; 71624 return [regexpEscape(r), false, endPos - pos, false]; 71625 } 71626 const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']'; 71627 const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']'; 71628 const comb = ranges.length && negs.length 71629 ? '(' + sranges + '|' + snegs + ')' 71630 : ranges.length 71631 ? sranges 71632 : snegs; 71633 return [comb, uflag, endPos - pos, true]; 71634 }; 71635 exports.parseClass = parseClass; 71636 //# sourceMappingURL=brace-expressions.js.map 71637 71638 /***/ }), 71639 71640 /***/ 45615: 71641 /***/ ((__unused_webpack_module, exports) => { 71642 71643 "use strict"; 71644 71645 Object.defineProperty(exports, "__esModule", ({ value: true })); 71646 exports.escape = void 0; 71647 /** 71648 * Escape all magic characters in a glob pattern. 71649 * 71650 * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape} 71651 * option is used, then characters are escaped by wrapping in `[]`, because 71652 * a magic character wrapped in a character class can only be satisfied by 71653 * that exact character. In this mode, `\` is _not_ escaped, because it is 71654 * not interpreted as a magic character, but instead as a path separator. 71655 */ 71656 const escape = (s, { windowsPathsNoEscape = false, } = {}) => { 71657 // don't need to escape +@! because we escape the parens 71658 // that make those magic, and escaping ! as [!] isn't valid, 71659 // because [!]] is a valid glob class meaning not ']'. 71660 return windowsPathsNoEscape 71661 ? s.replace(/[?*()[\]]/g, '[$&]') 71662 : s.replace(/[?*()[\]\\]/g, '\\$&'); 71663 }; 71664 exports.escape = escape; 71665 //# sourceMappingURL=escape.js.map 71666 71667 /***/ }), 71668 71669 /***/ 54878: 71670 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 71671 71672 "use strict"; 71673 71674 var __importDefault = (this && this.__importDefault) || function (mod) { 71675 return (mod && mod.__esModule) ? mod : { "default": mod }; 71676 }; 71677 Object.defineProperty(exports, "__esModule", ({ value: true })); 71678 exports.unescape = exports.escape = exports.AST = exports.Minimatch = exports.match = exports.makeRe = exports.braceExpand = exports.defaults = exports.filter = exports.GLOBSTAR = exports.sep = exports.minimatch = void 0; 71679 const brace_expansion_1 = __importDefault(__nccwpck_require__(14515)); 71680 const assert_valid_pattern_js_1 = __nccwpck_require__(43033); 71681 const ast_js_1 = __nccwpck_require__(10596); 71682 const escape_js_1 = __nccwpck_require__(45615); 71683 const unescape_js_1 = __nccwpck_require__(66615); 71684 const minimatch = (p, pattern, options = {}) => { 71685 (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); 71686 // shortcut: comments match nothing. 71687 if (!options.nocomment && pattern.charAt(0) === '#') { 71688 return false; 71689 } 71690 return new Minimatch(pattern, options).match(p); 71691 }; 71692 exports.minimatch = minimatch; 71693 // Optimized checking for the most common glob patterns. 71694 const starDotExtRE = /^\*+([^+@!?\*\[\(]*)$/; 71695 const starDotExtTest = (ext) => (f) => !f.startsWith('.') && f.endsWith(ext); 71696 const starDotExtTestDot = (ext) => (f) => f.endsWith(ext); 71697 const starDotExtTestNocase = (ext) => { 71698 ext = ext.toLowerCase(); 71699 return (f) => !f.startsWith('.') && f.toLowerCase().endsWith(ext); 71700 }; 71701 const starDotExtTestNocaseDot = (ext) => { 71702 ext = ext.toLowerCase(); 71703 return (f) => f.toLowerCase().endsWith(ext); 71704 }; 71705 const starDotStarRE = /^\*+\.\*+$/; 71706 const starDotStarTest = (f) => !f.startsWith('.') && f.includes('.'); 71707 const starDotStarTestDot = (f) => f !== '.' && f !== '..' && f.includes('.'); 71708 const dotStarRE = /^\.\*+$/; 71709 const dotStarTest = (f) => f !== '.' && f !== '..' && f.startsWith('.'); 71710 const starRE = /^\*+$/; 71711 const starTest = (f) => f.length !== 0 && !f.startsWith('.'); 71712 const starTestDot = (f) => f.length !== 0 && f !== '.' && f !== '..'; 71713 const qmarksRE = /^\?+([^+@!?\*\[\(]*)?$/; 71714 const qmarksTestNocase = ([$0, ext = '']) => { 71715 const noext = qmarksTestNoExt([$0]); 71716 if (!ext) 71717 return noext; 71718 ext = ext.toLowerCase(); 71719 return (f) => noext(f) && f.toLowerCase().endsWith(ext); 71720 }; 71721 const qmarksTestNocaseDot = ([$0, ext = '']) => { 71722 const noext = qmarksTestNoExtDot([$0]); 71723 if (!ext) 71724 return noext; 71725 ext = ext.toLowerCase(); 71726 return (f) => noext(f) && f.toLowerCase().endsWith(ext); 71727 }; 71728 const qmarksTestDot = ([$0, ext = '']) => { 71729 const noext = qmarksTestNoExtDot([$0]); 71730 return !ext ? noext : (f) => noext(f) && f.endsWith(ext); 71731 }; 71732 const qmarksTest = ([$0, ext = '']) => { 71733 const noext = qmarksTestNoExt([$0]); 71734 return !ext ? noext : (f) => noext(f) && f.endsWith(ext); 71735 }; 71736 const qmarksTestNoExt = ([$0]) => { 71737 const len = $0.length; 71738 return (f) => f.length === len && !f.startsWith('.'); 71739 }; 71740 const qmarksTestNoExtDot = ([$0]) => { 71741 const len = $0.length; 71742 return (f) => f.length === len && f !== '.' && f !== '..'; 71743 }; 71744 /* c8 ignore start */ 71745 const defaultPlatform = (typeof process === 'object' && process 71746 ? (typeof process.env === 'object' && 71747 process.env && 71748 process.env.__MINIMATCH_TESTING_PLATFORM__) || 71749 process.platform 71750 : 'posix'); 71751 const path = { 71752 win32: { sep: '\\' }, 71753 posix: { sep: '/' }, 71754 }; 71755 /* c8 ignore stop */ 71756 exports.sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep; 71757 exports.minimatch.sep = exports.sep; 71758 exports.GLOBSTAR = Symbol('globstar **'); 71759 exports.minimatch.GLOBSTAR = exports.GLOBSTAR; 71760 // any single thing other than / 71761 // don't need to escape / when using new RegExp() 71762 const qmark = '[^/]'; 71763 // * => any number of characters 71764 const star = qmark + '*?'; 71765 // ** when dots are allowed. Anything goes, except .. and . 71766 // not (^ or / followed by one or two dots followed by $ or /), 71767 // followed by anything, any number of times. 71768 const twoStarDot = '(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?'; 71769 // not a ^ or / followed by a dot, 71770 // followed by anything, any number of times. 71771 const twoStarNoDot = '(?:(?!(?:\\/|^)\\.).)*?'; 71772 const filter = (pattern, options = {}) => (p) => (0, exports.minimatch)(p, pattern, options); 71773 exports.filter = filter; 71774 exports.minimatch.filter = exports.filter; 71775 const ext = (a, b = {}) => Object.assign({}, a, b); 71776 const defaults = (def) => { 71777 if (!def || typeof def !== 'object' || !Object.keys(def).length) { 71778 return exports.minimatch; 71779 } 71780 const orig = exports.minimatch; 71781 const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options)); 71782 return Object.assign(m, { 71783 Minimatch: class Minimatch extends orig.Minimatch { 71784 constructor(pattern, options = {}) { 71785 super(pattern, ext(def, options)); 71786 } 71787 static defaults(options) { 71788 return orig.defaults(ext(def, options)).Minimatch; 71789 } 71790 }, 71791 AST: class AST extends orig.AST { 71792 /* c8 ignore start */ 71793 constructor(type, parent, options = {}) { 71794 super(type, parent, ext(def, options)); 71795 } 71796 /* c8 ignore stop */ 71797 static fromGlob(pattern, options = {}) { 71798 return orig.AST.fromGlob(pattern, ext(def, options)); 71799 } 71800 }, 71801 unescape: (s, options = {}) => orig.unescape(s, ext(def, options)), 71802 escape: (s, options = {}) => orig.escape(s, ext(def, options)), 71803 filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)), 71804 defaults: (options) => orig.defaults(ext(def, options)), 71805 makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)), 71806 braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)), 71807 match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)), 71808 sep: orig.sep, 71809 GLOBSTAR: exports.GLOBSTAR, 71810 }); 71811 }; 71812 exports.defaults = defaults; 71813 exports.minimatch.defaults = exports.defaults; 71814 // Brace expansion: 71815 // a{b,c}d -> abd acd 71816 // a{b,}c -> abc ac 71817 // a{0..3}d -> a0d a1d a2d a3d 71818 // a{b,c{d,e}f}g -> abg acdfg acefg 71819 // a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg 71820 // 71821 // Invalid sets are not expanded. 71822 // a{2..}b -> a{2..}b 71823 // a{b}c -> a{b}c 71824 const braceExpand = (pattern, options = {}) => { 71825 (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); 71826 // Thanks to Yeting Li <https://github.com/yetingli> for 71827 // improving this regexp to avoid a ReDOS vulnerability. 71828 if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) { 71829 // shortcut. no need to expand. 71830 return [pattern]; 71831 } 71832 return (0, brace_expansion_1.default)(pattern); 71833 }; 71834 exports.braceExpand = braceExpand; 71835 exports.minimatch.braceExpand = exports.braceExpand; 71836 // parse a component of the expanded set. 71837 // At this point, no pattern may contain "/" in it 71838 // so we're going to return a 2d array, where each entry is the full 71839 // pattern, split on '/', and then turned into a regular expression. 71840 // A regexp is made at the end which joins each array with an 71841 // escaped /, and another full one which joins each regexp with |. 71842 // 71843 // Following the lead of Bash 4.1, note that "**" only has special meaning 71844 // when it is the *only* thing in a path portion. Otherwise, any series 71845 // of * is equivalent to a single *. Globstar behavior is enabled by 71846 // default, and can be disabled by setting options.noglobstar. 71847 const makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe(); 71848 exports.makeRe = makeRe; 71849 exports.minimatch.makeRe = exports.makeRe; 71850 const match = (list, pattern, options = {}) => { 71851 const mm = new Minimatch(pattern, options); 71852 list = list.filter(f => mm.match(f)); 71853 if (mm.options.nonull && !list.length) { 71854 list.push(pattern); 71855 } 71856 return list; 71857 }; 71858 exports.match = match; 71859 exports.minimatch.match = exports.match; 71860 // replace stuff like \* with * 71861 const globMagic = /[?*]|[+@!]\(.*?\)|\[|\]/; 71862 const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); 71863 class Minimatch { 71864 options; 71865 set; 71866 pattern; 71867 windowsPathsNoEscape; 71868 nonegate; 71869 negate; 71870 comment; 71871 empty; 71872 preserveMultipleSlashes; 71873 partial; 71874 globSet; 71875 globParts; 71876 nocase; 71877 isWindows; 71878 platform; 71879 windowsNoMagicRoot; 71880 regexp; 71881 constructor(pattern, options = {}) { 71882 (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); 71883 options = options || {}; 71884 this.options = options; 71885 this.pattern = pattern; 71886 this.platform = options.platform || defaultPlatform; 71887 this.isWindows = this.platform === 'win32'; 71888 this.windowsPathsNoEscape = 71889 !!options.windowsPathsNoEscape || options.allowWindowsEscape === false; 71890 if (this.windowsPathsNoEscape) { 71891 this.pattern = this.pattern.replace(/\\/g, '/'); 71892 } 71893 this.preserveMultipleSlashes = !!options.preserveMultipleSlashes; 71894 this.regexp = null; 71895 this.negate = false; 71896 this.nonegate = !!options.nonegate; 71897 this.comment = false; 71898 this.empty = false; 71899 this.partial = !!options.partial; 71900 this.nocase = !!this.options.nocase; 71901 this.windowsNoMagicRoot = 71902 options.windowsNoMagicRoot !== undefined 71903 ? options.windowsNoMagicRoot 71904 : !!(this.isWindows && this.nocase); 71905 this.globSet = []; 71906 this.globParts = []; 71907 this.set = []; 71908 // make the set of regexps etc. 71909 this.make(); 71910 } 71911 hasMagic() { 71912 if (this.options.magicalBraces && this.set.length > 1) { 71913 return true; 71914 } 71915 for (const pattern of this.set) { 71916 for (const part of pattern) { 71917 if (typeof part !== 'string') 71918 return true; 71919 } 71920 } 71921 return false; 71922 } 71923 debug(..._) { } 71924 make() { 71925 const pattern = this.pattern; 71926 const options = this.options; 71927 // empty patterns and comments match nothing. 71928 if (!options.nocomment && pattern.charAt(0) === '#') { 71929 this.comment = true; 71930 return; 71931 } 71932 if (!pattern) { 71933 this.empty = true; 71934 return; 71935 } 71936 // step 1: figure out negation, etc. 71937 this.parseNegate(); 71938 // step 2: expand braces 71939 this.globSet = [...new Set(this.braceExpand())]; 71940 if (options.debug) { 71941 this.debug = (...args) => console.error(...args); 71942 } 71943 this.debug(this.pattern, this.globSet); 71944 // step 3: now we have a set, so turn each one into a series of 71945 // path-portion matching patterns. 71946 // These will be regexps, except in the case of "**", which is 71947 // set to the GLOBSTAR object for globstar behavior, 71948 // and will not contain any / characters 71949 // 71950 // First, we preprocess to make the glob pattern sets a bit simpler 71951 // and deduped. There are some perf-killing patterns that can cause 71952 // problems with a glob walk, but we can simplify them down a bit. 71953 const rawGlobParts = this.globSet.map(s => this.slashSplit(s)); 71954 this.globParts = this.preprocess(rawGlobParts); 71955 this.debug(this.pattern, this.globParts); 71956 // glob --> regexps 71957 let set = this.globParts.map((s, _, __) => { 71958 if (this.isWindows && this.windowsNoMagicRoot) { 71959 // check if it's a drive or unc path. 71960 const isUNC = s[0] === '' && 71961 s[1] === '' && 71962 (s[2] === '?' || !globMagic.test(s[2])) && 71963 !globMagic.test(s[3]); 71964 const isDrive = /^[a-z]:/i.test(s[0]); 71965 if (isUNC) { 71966 return [...s.slice(0, 4), ...s.slice(4).map(ss => this.parse(ss))]; 71967 } 71968 else if (isDrive) { 71969 return [s[0], ...s.slice(1).map(ss => this.parse(ss))]; 71970 } 71971 } 71972 return s.map(ss => this.parse(ss)); 71973 }); 71974 this.debug(this.pattern, set); 71975 // filter out everything that didn't compile properly. 71976 this.set = set.filter(s => s.indexOf(false) === -1); 71977 // do not treat the ? in UNC paths as magic 71978 if (this.isWindows) { 71979 for (let i = 0; i < this.set.length; i++) { 71980 const p = this.set[i]; 71981 if (p[0] === '' && 71982 p[1] === '' && 71983 this.globParts[i][2] === '?' && 71984 typeof p[3] === 'string' && 71985 /^[a-z]:$/i.test(p[3])) { 71986 p[2] = '?'; 71987 } 71988 } 71989 } 71990 this.debug(this.pattern, this.set); 71991 } 71992 // various transforms to equivalent pattern sets that are 71993 // faster to process in a filesystem walk. The goal is to 71994 // eliminate what we can, and push all ** patterns as far 71995 // to the right as possible, even if it increases the number 71996 // of patterns that we have to process. 71997 preprocess(globParts) { 71998 // if we're not in globstar mode, then turn all ** into * 71999 if (this.options.noglobstar) { 72000 for (let i = 0; i < globParts.length; i++) { 72001 for (let j = 0; j < globParts[i].length; j++) { 72002 if (globParts[i][j] === '**') { 72003 globParts[i][j] = '*'; 72004 } 72005 } 72006 } 72007 } 72008 const { optimizationLevel = 1 } = this.options; 72009 if (optimizationLevel >= 2) { 72010 // aggressive optimization for the purpose of fs walking 72011 globParts = this.firstPhasePreProcess(globParts); 72012 globParts = this.secondPhasePreProcess(globParts); 72013 } 72014 else if (optimizationLevel >= 1) { 72015 // just basic optimizations to remove some .. parts 72016 globParts = this.levelOneOptimize(globParts); 72017 } 72018 else { 72019 globParts = this.adjascentGlobstarOptimize(globParts); 72020 } 72021 return globParts; 72022 } 72023 // just get rid of adjascent ** portions 72024 adjascentGlobstarOptimize(globParts) { 72025 return globParts.map(parts => { 72026 let gs = -1; 72027 while (-1 !== (gs = parts.indexOf('**', gs + 1))) { 72028 let i = gs; 72029 while (parts[i + 1] === '**') { 72030 i++; 72031 } 72032 if (i !== gs) { 72033 parts.splice(gs, i - gs); 72034 } 72035 } 72036 return parts; 72037 }); 72038 } 72039 // get rid of adjascent ** and resolve .. portions 72040 levelOneOptimize(globParts) { 72041 return globParts.map(parts => { 72042 parts = parts.reduce((set, part) => { 72043 const prev = set[set.length - 1]; 72044 if (part === '**' && prev === '**') { 72045 return set; 72046 } 72047 if (part === '..') { 72048 if (prev && prev !== '..' && prev !== '.' && prev !== '**') { 72049 set.pop(); 72050 return set; 72051 } 72052 } 72053 set.push(part); 72054 return set; 72055 }, []); 72056 return parts.length === 0 ? [''] : parts; 72057 }); 72058 } 72059 levelTwoFileOptimize(parts) { 72060 if (!Array.isArray(parts)) { 72061 parts = this.slashSplit(parts); 72062 } 72063 let didSomething = false; 72064 do { 72065 didSomething = false; 72066 // <pre>/<e>/<rest> -> <pre>/<rest> 72067 if (!this.preserveMultipleSlashes) { 72068 for (let i = 1; i < parts.length - 1; i++) { 72069 const p = parts[i]; 72070 // don't squeeze out UNC patterns 72071 if (i === 1 && p === '' && parts[0] === '') 72072 continue; 72073 if (p === '.' || p === '') { 72074 didSomething = true; 72075 parts.splice(i, 1); 72076 i--; 72077 } 72078 } 72079 if (parts[0] === '.' && 72080 parts.length === 2 && 72081 (parts[1] === '.' || parts[1] === '')) { 72082 didSomething = true; 72083 parts.pop(); 72084 } 72085 } 72086 // <pre>/<p>/../<rest> -> <pre>/<rest> 72087 let dd = 0; 72088 while (-1 !== (dd = parts.indexOf('..', dd + 1))) { 72089 const p = parts[dd - 1]; 72090 if (p && p !== '.' && p !== '..' && p !== '**') { 72091 didSomething = true; 72092 parts.splice(dd - 1, 2); 72093 dd -= 2; 72094 } 72095 } 72096 } while (didSomething); 72097 return parts.length === 0 ? [''] : parts; 72098 } 72099 // First phase: single-pattern processing 72100 // <pre> is 1 or more portions 72101 // <rest> is 1 or more portions 72102 // <p> is any portion other than ., .., '', or ** 72103 // <e> is . or '' 72104 // 72105 // **/.. is *brutal* for filesystem walking performance, because 72106 // it effectively resets the recursive walk each time it occurs, 72107 // and ** cannot be reduced out by a .. pattern part like a regexp 72108 // or most strings (other than .., ., and '') can be. 72109 // 72110 // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>} 72111 // <pre>/<e>/<rest> -> <pre>/<rest> 72112 // <pre>/<p>/../<rest> -> <pre>/<rest> 72113 // **/**/<rest> -> **/<rest> 72114 // 72115 // **/*/<rest> -> */**/<rest> <== not valid because ** doesn't follow 72116 // this WOULD be allowed if ** did follow symlinks, or * didn't 72117 firstPhasePreProcess(globParts) { 72118 let didSomething = false; 72119 do { 72120 didSomething = false; 72121 // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>} 72122 for (let parts of globParts) { 72123 let gs = -1; 72124 while (-1 !== (gs = parts.indexOf('**', gs + 1))) { 72125 let gss = gs; 72126 while (parts[gss + 1] === '**') { 72127 // <pre>/**/**/<rest> -> <pre>/**/<rest> 72128 gss++; 72129 } 72130 // eg, if gs is 2 and gss is 4, that means we have 3 ** 72131 // parts, and can remove 2 of them. 72132 if (gss > gs) { 72133 parts.splice(gs + 1, gss - gs); 72134 } 72135 let next = parts[gs + 1]; 72136 const p = parts[gs + 2]; 72137 const p2 = parts[gs + 3]; 72138 if (next !== '..') 72139 continue; 72140 if (!p || 72141 p === '.' || 72142 p === '..' || 72143 !p2 || 72144 p2 === '.' || 72145 p2 === '..') { 72146 continue; 72147 } 72148 didSomething = true; 72149 // edit parts in place, and push the new one 72150 parts.splice(gs, 1); 72151 const other = parts.slice(0); 72152 other[gs] = '**'; 72153 globParts.push(other); 72154 gs--; 72155 } 72156 // <pre>/<e>/<rest> -> <pre>/<rest> 72157 if (!this.preserveMultipleSlashes) { 72158 for (let i = 1; i < parts.length - 1; i++) { 72159 const p = parts[i]; 72160 // don't squeeze out UNC patterns 72161 if (i === 1 && p === '' && parts[0] === '') 72162 continue; 72163 if (p === '.' || p === '') { 72164 didSomething = true; 72165 parts.splice(i, 1); 72166 i--; 72167 } 72168 } 72169 if (parts[0] === '.' && 72170 parts.length === 2 && 72171 (parts[1] === '.' || parts[1] === '')) { 72172 didSomething = true; 72173 parts.pop(); 72174 } 72175 } 72176 // <pre>/<p>/../<rest> -> <pre>/<rest> 72177 let dd = 0; 72178 while (-1 !== (dd = parts.indexOf('..', dd + 1))) { 72179 const p = parts[dd - 1]; 72180 if (p && p !== '.' && p !== '..' && p !== '**') { 72181 didSomething = true; 72182 const needDot = dd === 1 && parts[dd + 1] === '**'; 72183 const splin = needDot ? ['.'] : []; 72184 parts.splice(dd - 1, 2, ...splin); 72185 if (parts.length === 0) 72186 parts.push(''); 72187 dd -= 2; 72188 } 72189 } 72190 } 72191 } while (didSomething); 72192 return globParts; 72193 } 72194 // second phase: multi-pattern dedupes 72195 // {<pre>/*/<rest>,<pre>/<p>/<rest>} -> <pre>/*/<rest> 72196 // {<pre>/<rest>,<pre>/<rest>} -> <pre>/<rest> 72197 // {<pre>/**/<rest>,<pre>/<rest>} -> <pre>/**/<rest> 72198 // 72199 // {<pre>/**/<rest>,<pre>/**/<p>/<rest>} -> <pre>/**/<rest> 72200 // ^-- not valid because ** doens't follow symlinks 72201 secondPhasePreProcess(globParts) { 72202 for (let i = 0; i < globParts.length - 1; i++) { 72203 for (let j = i + 1; j < globParts.length; j++) { 72204 const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes); 72205 if (!matched) 72206 continue; 72207 globParts[i] = matched; 72208 globParts[j] = []; 72209 } 72210 } 72211 return globParts.filter(gs => gs.length); 72212 } 72213 partsMatch(a, b, emptyGSMatch = false) { 72214 let ai = 0; 72215 let bi = 0; 72216 let result = []; 72217 let which = ''; 72218 while (ai < a.length && bi < b.length) { 72219 if (a[ai] === b[bi]) { 72220 result.push(which === 'b' ? b[bi] : a[ai]); 72221 ai++; 72222 bi++; 72223 } 72224 else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) { 72225 result.push(a[ai]); 72226 ai++; 72227 } 72228 else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) { 72229 result.push(b[bi]); 72230 bi++; 72231 } 72232 else if (a[ai] === '*' && 72233 b[bi] && 72234 (this.options.dot || !b[bi].startsWith('.')) && 72235 b[bi] !== '**') { 72236 if (which === 'b') 72237 return false; 72238 which = 'a'; 72239 result.push(a[ai]); 72240 ai++; 72241 bi++; 72242 } 72243 else if (b[bi] === '*' && 72244 a[ai] && 72245 (this.options.dot || !a[ai].startsWith('.')) && 72246 a[ai] !== '**') { 72247 if (which === 'a') 72248 return false; 72249 which = 'b'; 72250 result.push(b[bi]); 72251 ai++; 72252 bi++; 72253 } 72254 else { 72255 return false; 72256 } 72257 } 72258 // if we fall out of the loop, it means they two are identical 72259 // as long as their lengths match 72260 return a.length === b.length && result; 72261 } 72262 parseNegate() { 72263 if (this.nonegate) 72264 return; 72265 const pattern = this.pattern; 72266 let negate = false; 72267 let negateOffset = 0; 72268 for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) { 72269 negate = !negate; 72270 negateOffset++; 72271 } 72272 if (negateOffset) 72273 this.pattern = pattern.slice(negateOffset); 72274 this.negate = negate; 72275 } 72276 // set partial to true to test if, for example, 72277 // "/a/b" matches the start of "/*/b/*/d" 72278 // Partial means, if you run out of file before you run 72279 // out of pattern, then that's fine, as long as all 72280 // the parts match. 72281 matchOne(file, pattern, partial = false) { 72282 const options = this.options; 72283 // UNC paths like //?/X:/... can match X:/... and vice versa 72284 // Drive letters in absolute drive or unc paths are always compared 72285 // case-insensitively. 72286 if (this.isWindows) { 72287 const fileDrive = typeof file[0] === 'string' && /^[a-z]:$/i.test(file[0]); 72288 const fileUNC = !fileDrive && 72289 file[0] === '' && 72290 file[1] === '' && 72291 file[2] === '?' && 72292 /^[a-z]:$/i.test(file[3]); 72293 const patternDrive = typeof pattern[0] === 'string' && /^[a-z]:$/i.test(pattern[0]); 72294 const patternUNC = !patternDrive && 72295 pattern[0] === '' && 72296 pattern[1] === '' && 72297 pattern[2] === '?' && 72298 typeof pattern[3] === 'string' && 72299 /^[a-z]:$/i.test(pattern[3]); 72300 const fdi = fileUNC ? 3 : fileDrive ? 0 : undefined; 72301 const pdi = patternUNC ? 3 : patternDrive ? 0 : undefined; 72302 if (typeof fdi === 'number' && typeof pdi === 'number') { 72303 const [fd, pd] = [file[fdi], pattern[pdi]]; 72304 if (fd.toLowerCase() === pd.toLowerCase()) { 72305 pattern[pdi] = fd; 72306 if (pdi > fdi) { 72307 pattern = pattern.slice(pdi); 72308 } 72309 else if (fdi > pdi) { 72310 file = file.slice(fdi); 72311 } 72312 } 72313 } 72314 } 72315 // resolve and reduce . and .. portions in the file as well. 72316 // dont' need to do the second phase, because it's only one string[] 72317 const { optimizationLevel = 1 } = this.options; 72318 if (optimizationLevel >= 2) { 72319 file = this.levelTwoFileOptimize(file); 72320 } 72321 this.debug('matchOne', this, { file, pattern }); 72322 this.debug('matchOne', file.length, pattern.length); 72323 for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) { 72324 this.debug('matchOne loop'); 72325 var p = pattern[pi]; 72326 var f = file[fi]; 72327 this.debug(pattern, p, f); 72328 // should be impossible. 72329 // some invalid regexp stuff in the set. 72330 /* c8 ignore start */ 72331 if (p === false) { 72332 return false; 72333 } 72334 /* c8 ignore stop */ 72335 if (p === exports.GLOBSTAR) { 72336 this.debug('GLOBSTAR', [pattern, p, f]); 72337 // "**" 72338 // a/**/b/**/c would match the following: 72339 // a/b/x/y/z/c 72340 // a/x/y/z/b/c 72341 // a/b/x/b/x/c 72342 // a/b/c 72343 // To do this, take the rest of the pattern after 72344 // the **, and see if it would match the file remainder. 72345 // If so, return success. 72346 // If not, the ** "swallows" a segment, and try again. 72347 // This is recursively awful. 72348 // 72349 // a/**/b/**/c matching a/b/x/y/z/c 72350 // - a matches a 72351 // - doublestar 72352 // - matchOne(b/x/y/z/c, b/**/c) 72353 // - b matches b 72354 // - doublestar 72355 // - matchOne(x/y/z/c, c) -> no 72356 // - matchOne(y/z/c, c) -> no 72357 // - matchOne(z/c, c) -> no 72358 // - matchOne(c, c) yes, hit 72359 var fr = fi; 72360 var pr = pi + 1; 72361 if (pr === pl) { 72362 this.debug('** at the end'); 72363 // a ** at the end will just swallow the rest. 72364 // We have found a match. 72365 // however, it will not swallow /.x, unless 72366 // options.dot is set. 72367 // . and .. are *never* matched by **, for explosively 72368 // exponential reasons. 72369 for (; fi < fl; fi++) { 72370 if (file[fi] === '.' || 72371 file[fi] === '..' || 72372 (!options.dot && file[fi].charAt(0) === '.')) 72373 return false; 72374 } 72375 return true; 72376 } 72377 // ok, let's see if we can swallow whatever we can. 72378 while (fr < fl) { 72379 var swallowee = file[fr]; 72380 this.debug('\nglobstar while', file, fr, pattern, pr, swallowee); 72381 // XXX remove this slice. Just pass the start index. 72382 if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { 72383 this.debug('globstar found match!', fr, fl, swallowee); 72384 // found a match. 72385 return true; 72386 } 72387 else { 72388 // can't swallow "." or ".." ever. 72389 // can only swallow ".foo" when explicitly asked. 72390 if (swallowee === '.' || 72391 swallowee === '..' || 72392 (!options.dot && swallowee.charAt(0) === '.')) { 72393 this.debug('dot detected!', file, fr, pattern, pr); 72394 break; 72395 } 72396 // ** swallows a segment, and continue. 72397 this.debug('globstar swallow a segment, and continue'); 72398 fr++; 72399 } 72400 } 72401 // no match was found. 72402 // However, in partial mode, we can't say this is necessarily over. 72403 /* c8 ignore start */ 72404 if (partial) { 72405 // ran out of file 72406 this.debug('\n>>> no match, partial?', file, fr, pattern, pr); 72407 if (fr === fl) { 72408 return true; 72409 } 72410 } 72411 /* c8 ignore stop */ 72412 return false; 72413 } 72414 // something other than ** 72415 // non-magic patterns just have to match exactly 72416 // patterns with magic have been turned into regexps. 72417 let hit; 72418 if (typeof p === 'string') { 72419 hit = f === p; 72420 this.debug('string match', p, f, hit); 72421 } 72422 else { 72423 hit = p.test(f); 72424 this.debug('pattern match', p, f, hit); 72425 } 72426 if (!hit) 72427 return false; 72428 } 72429 // Note: ending in / means that we'll get a final "" 72430 // at the end of the pattern. This can only match a 72431 // corresponding "" at the end of the file. 72432 // If the file ends in /, then it can only match a 72433 // a pattern that ends in /, unless the pattern just 72434 // doesn't have any more for it. But, a/b/ should *not* 72435 // match "a/b/*", even though "" matches against the 72436 // [^/]*? pattern, except in partial mode, where it might 72437 // simply not be reached yet. 72438 // However, a/b/ should still satisfy a/* 72439 // now either we fell off the end of the pattern, or we're done. 72440 if (fi === fl && pi === pl) { 72441 // ran out of pattern and filename at the same time. 72442 // an exact hit! 72443 return true; 72444 } 72445 else if (fi === fl) { 72446 // ran out of file, but still had pattern left. 72447 // this is ok if we're doing the match as part of 72448 // a glob fs traversal. 72449 return partial; 72450 } 72451 else if (pi === pl) { 72452 // ran out of pattern, still have file left. 72453 // this is only acceptable if we're on the very last 72454 // empty segment of a file with a trailing slash. 72455 // a/* should match a/b/ 72456 return fi === fl - 1 && file[fi] === ''; 72457 /* c8 ignore start */ 72458 } 72459 else { 72460 // should be unreachable. 72461 throw new Error('wtf?'); 72462 } 72463 /* c8 ignore stop */ 72464 } 72465 braceExpand() { 72466 return (0, exports.braceExpand)(this.pattern, this.options); 72467 } 72468 parse(pattern) { 72469 (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); 72470 const options = this.options; 72471 // shortcuts 72472 if (pattern === '**') 72473 return exports.GLOBSTAR; 72474 if (pattern === '') 72475 return ''; 72476 // far and away, the most common glob pattern parts are 72477 // *, *.*, and *.<ext> Add a fast check method for those. 72478 let m; 72479 let fastTest = null; 72480 if ((m = pattern.match(starRE))) { 72481 fastTest = options.dot ? starTestDot : starTest; 72482 } 72483 else if ((m = pattern.match(starDotExtRE))) { 72484 fastTest = (options.nocase 72485 ? options.dot 72486 ? starDotExtTestNocaseDot 72487 : starDotExtTestNocase 72488 : options.dot 72489 ? starDotExtTestDot 72490 : starDotExtTest)(m[1]); 72491 } 72492 else if ((m = pattern.match(qmarksRE))) { 72493 fastTest = (options.nocase 72494 ? options.dot 72495 ? qmarksTestNocaseDot 72496 : qmarksTestNocase 72497 : options.dot 72498 ? qmarksTestDot 72499 : qmarksTest)(m); 72500 } 72501 else if ((m = pattern.match(starDotStarRE))) { 72502 fastTest = options.dot ? starDotStarTestDot : starDotStarTest; 72503 } 72504 else if ((m = pattern.match(dotStarRE))) { 72505 fastTest = dotStarTest; 72506 } 72507 const re = ast_js_1.AST.fromGlob(pattern, this.options).toMMPattern(); 72508 return fastTest ? Object.assign(re, { test: fastTest }) : re; 72509 } 72510 makeRe() { 72511 if (this.regexp || this.regexp === false) 72512 return this.regexp; 72513 // at this point, this.set is a 2d array of partial 72514 // pattern strings, or "**". 72515 // 72516 // It's better to use .match(). This function shouldn't 72517 // be used, really, but it's pretty convenient sometimes, 72518 // when you just want to work with a regex. 72519 const set = this.set; 72520 if (!set.length) { 72521 this.regexp = false; 72522 return this.regexp; 72523 } 72524 const options = this.options; 72525 const twoStar = options.noglobstar 72526 ? star 72527 : options.dot 72528 ? twoStarDot 72529 : twoStarNoDot; 72530 const flags = new Set(options.nocase ? ['i'] : []); 72531 // regexpify non-globstar patterns 72532 // if ** is only item, then we just do one twoStar 72533 // if ** is first, and there are more, prepend (\/|twoStar\/)? to next 72534 // if ** is last, append (\/twoStar|) to previous 72535 // if ** is in the middle, append (\/|\/twoStar\/) to previous 72536 // then filter out GLOBSTAR symbols 72537 let re = set 72538 .map(pattern => { 72539 const pp = pattern.map(p => { 72540 if (p instanceof RegExp) { 72541 for (const f of p.flags.split('')) 72542 flags.add(f); 72543 } 72544 return typeof p === 'string' 72545 ? regExpEscape(p) 72546 : p === exports.GLOBSTAR 72547 ? exports.GLOBSTAR 72548 : p._src; 72549 }); 72550 pp.forEach((p, i) => { 72551 const next = pp[i + 1]; 72552 const prev = pp[i - 1]; 72553 if (p !== exports.GLOBSTAR || prev === exports.GLOBSTAR) { 72554 return; 72555 } 72556 if (prev === undefined) { 72557 if (next !== undefined && next !== exports.GLOBSTAR) { 72558 pp[i + 1] = '(?:\\/|' + twoStar + '\\/)?' + next; 72559 } 72560 else { 72561 pp[i] = twoStar; 72562 } 72563 } 72564 else if (next === undefined) { 72565 pp[i - 1] = prev + '(?:\\/|' + twoStar + ')?'; 72566 } 72567 else if (next !== exports.GLOBSTAR) { 72568 pp[i - 1] = prev + '(?:\\/|\\/' + twoStar + '\\/)' + next; 72569 pp[i + 1] = exports.GLOBSTAR; 72570 } 72571 }); 72572 return pp.filter(p => p !== exports.GLOBSTAR).join('/'); 72573 }) 72574 .join('|'); 72575 // need to wrap in parens if we had more than one thing with |, 72576 // otherwise only the first will be anchored to ^ and the last to $ 72577 const [open, close] = set.length > 1 ? ['(?:', ')'] : ['', '']; 72578 // must match entire pattern 72579 // ending in a * or ** will make it less strict. 72580 re = '^' + open + re + close + '$'; 72581 // can match anything, as long as it's not this. 72582 if (this.negate) 72583 re = '^(?!' + re + ').+$'; 72584 try { 72585 this.regexp = new RegExp(re, [...flags].join('')); 72586 /* c8 ignore start */ 72587 } 72588 catch (ex) { 72589 // should be impossible 72590 this.regexp = false; 72591 } 72592 /* c8 ignore stop */ 72593 return this.regexp; 72594 } 72595 slashSplit(p) { 72596 // if p starts with // on windows, we preserve that 72597 // so that UNC paths aren't broken. Otherwise, any number of 72598 // / characters are coalesced into one, unless 72599 // preserveMultipleSlashes is set to true. 72600 if (this.preserveMultipleSlashes) { 72601 return p.split('/'); 72602 } 72603 else if (this.isWindows && /^\/\/[^\/]+/.test(p)) { 72604 // add an extra '' for the one we lose 72605 return ['', ...p.split(/\/+/)]; 72606 } 72607 else { 72608 return p.split(/\/+/); 72609 } 72610 } 72611 match(f, partial = this.partial) { 72612 this.debug('match', f, this.pattern); 72613 // short-circuit in the case of busted things. 72614 // comments, etc. 72615 if (this.comment) { 72616 return false; 72617 } 72618 if (this.empty) { 72619 return f === ''; 72620 } 72621 if (f === '/' && partial) { 72622 return true; 72623 } 72624 const options = this.options; 72625 // windows: need to use /, not \ 72626 if (this.isWindows) { 72627 f = f.split('\\').join('/'); 72628 } 72629 // treat the test path as a set of pathparts. 72630 const ff = this.slashSplit(f); 72631 this.debug(this.pattern, 'split', ff); 72632 // just ONE of the pattern sets in this.set needs to match 72633 // in order for it to be valid. If negating, then just one 72634 // match means that we have failed. 72635 // Either way, return on the first hit. 72636 const set = this.set; 72637 this.debug(this.pattern, 'set', set); 72638 // Find the basename of the path by looking for the last non-empty segment 72639 let filename = ff[ff.length - 1]; 72640 if (!filename) { 72641 for (let i = ff.length - 2; !filename && i >= 0; i--) { 72642 filename = ff[i]; 72643 } 72644 } 72645 for (let i = 0; i < set.length; i++) { 72646 const pattern = set[i]; 72647 let file = ff; 72648 if (options.matchBase && pattern.length === 1) { 72649 file = [filename]; 72650 } 72651 const hit = this.matchOne(file, pattern, partial); 72652 if (hit) { 72653 if (options.flipNegate) { 72654 return true; 72655 } 72656 return !this.negate; 72657 } 72658 } 72659 // didn't get any hits. this is success if it's a negative 72660 // pattern, failure otherwise. 72661 if (options.flipNegate) { 72662 return false; 72663 } 72664 return this.negate; 72665 } 72666 static defaults(def) { 72667 return exports.minimatch.defaults(def).Minimatch; 72668 } 72669 } 72670 exports.Minimatch = Minimatch; 72671 /* c8 ignore start */ 72672 var ast_js_2 = __nccwpck_require__(10596); 72673 Object.defineProperty(exports, "AST", ({ enumerable: true, get: function () { return ast_js_2.AST; } })); 72674 var escape_js_2 = __nccwpck_require__(45615); 72675 Object.defineProperty(exports, "escape", ({ enumerable: true, get: function () { return escape_js_2.escape; } })); 72676 var unescape_js_2 = __nccwpck_require__(66615); 72677 Object.defineProperty(exports, "unescape", ({ enumerable: true, get: function () { return unescape_js_2.unescape; } })); 72678 /* c8 ignore stop */ 72679 exports.minimatch.AST = ast_js_1.AST; 72680 exports.minimatch.Minimatch = Minimatch; 72681 exports.minimatch.escape = escape_js_1.escape; 72682 exports.minimatch.unescape = unescape_js_1.unescape; 72683 //# sourceMappingURL=index.js.map 72684 72685 /***/ }), 72686 72687 /***/ 66615: 72688 /***/ ((__unused_webpack_module, exports) => { 72689 72690 "use strict"; 72691 72692 Object.defineProperty(exports, "__esModule", ({ value: true })); 72693 exports.unescape = void 0; 72694 /** 72695 * Un-escape a string that has been escaped with {@link escape}. 72696 * 72697 * If the {@link windowsPathsNoEscape} option is used, then square-brace 72698 * escapes are removed, but not backslash escapes. For example, it will turn 72699 * the string `'[*]'` into `*`, but it will not turn `'\\*'` into `'*'`, 72700 * becuase `\` is a path separator in `windowsPathsNoEscape` mode. 72701 * 72702 * When `windowsPathsNoEscape` is not set, then both brace escapes and 72703 * backslash escapes are removed. 72704 * 72705 * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped 72706 * or unescaped. 72707 */ 72708 const unescape = (s, { windowsPathsNoEscape = false, } = {}) => { 72709 return windowsPathsNoEscape 72710 ? s.replace(/\[([^\/\\])\]/g, '$1') 72711 : s.replace(/((?!\\).|^)\[([^\/\\])\]/g, '$1$2').replace(/\\([^\/])/g, '$1'); 72712 }; 72713 exports.unescape = unescape; 72714 //# sourceMappingURL=unescape.js.map 72715 72716 /***/ }), 72717 72718 /***/ 55339: 72719 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 72720 72721 "use strict"; 72722 72723 Object.defineProperty(exports, "__esModule", ({ value: true })); 72724 exports.Glob = void 0; 72725 const minimatch_1 = __nccwpck_require__(7111); 72726 const path_scurry_1 = __nccwpck_require__(51081); 72727 const url_1 = __nccwpck_require__(57310); 72728 const pattern_js_1 = __nccwpck_require__(92895); 72729 const walker_js_1 = __nccwpck_require__(45548); 72730 // if no process global, just call it linux. 72731 // so we default to case-sensitive, / separators 72732 const defaultPlatform = typeof process === 'object' && 72733 process && 72734 typeof process.platform === 'string' 72735 ? process.platform 72736 : 'linux'; 72737 /** 72738 * An object that can perform glob pattern traversals. 72739 */ 72740 class Glob { 72741 absolute; 72742 cwd; 72743 root; 72744 dot; 72745 dotRelative; 72746 follow; 72747 ignore; 72748 magicalBraces; 72749 mark; 72750 matchBase; 72751 maxDepth; 72752 nobrace; 72753 nocase; 72754 nodir; 72755 noext; 72756 noglobstar; 72757 pattern; 72758 platform; 72759 realpath; 72760 scurry; 72761 stat; 72762 signal; 72763 windowsPathsNoEscape; 72764 withFileTypes; 72765 /** 72766 * The options provided to the constructor. 72767 */ 72768 opts; 72769 /** 72770 * An array of parsed immutable {@link Pattern} objects. 72771 */ 72772 patterns; 72773 /** 72774 * All options are stored as properties on the `Glob` object. 72775 * 72776 * See {@link GlobOptions} for full options descriptions. 72777 * 72778 * Note that a previous `Glob` object can be passed as the 72779 * `GlobOptions` to another `Glob` instantiation to re-use settings 72780 * and caches with a new pattern. 72781 * 72782 * Traversal functions can be called multiple times to run the walk 72783 * again. 72784 */ 72785 constructor(pattern, opts) { 72786 /* c8 ignore start */ 72787 if (!opts) 72788 throw new TypeError('glob options required'); 72789 /* c8 ignore stop */ 72790 this.withFileTypes = !!opts.withFileTypes; 72791 this.signal = opts.signal; 72792 this.follow = !!opts.follow; 72793 this.dot = !!opts.dot; 72794 this.dotRelative = !!opts.dotRelative; 72795 this.nodir = !!opts.nodir; 72796 this.mark = !!opts.mark; 72797 if (!opts.cwd) { 72798 this.cwd = ''; 72799 } 72800 else if (opts.cwd instanceof URL || opts.cwd.startsWith('file://')) { 72801 opts.cwd = (0, url_1.fileURLToPath)(opts.cwd); 72802 } 72803 this.cwd = opts.cwd || ''; 72804 this.root = opts.root; 72805 this.magicalBraces = !!opts.magicalBraces; 72806 this.nobrace = !!opts.nobrace; 72807 this.noext = !!opts.noext; 72808 this.realpath = !!opts.realpath; 72809 this.absolute = opts.absolute; 72810 this.noglobstar = !!opts.noglobstar; 72811 this.matchBase = !!opts.matchBase; 72812 this.maxDepth = 72813 typeof opts.maxDepth === 'number' ? opts.maxDepth : Infinity; 72814 this.stat = !!opts.stat; 72815 this.ignore = opts.ignore; 72816 if (this.withFileTypes && this.absolute !== undefined) { 72817 throw new Error('cannot set absolute and withFileTypes:true'); 72818 } 72819 if (typeof pattern === 'string') { 72820 pattern = [pattern]; 72821 } 72822 this.windowsPathsNoEscape = 72823 !!opts.windowsPathsNoEscape || 72824 opts.allowWindowsEscape === false; 72825 if (this.windowsPathsNoEscape) { 72826 pattern = pattern.map(p => p.replace(/\\/g, '/')); 72827 } 72828 if (this.matchBase) { 72829 if (opts.noglobstar) { 72830 throw new TypeError('base matching requires globstar'); 72831 } 72832 pattern = pattern.map(p => (p.includes('/') ? p : `./**/${p}`)); 72833 } 72834 this.pattern = pattern; 72835 this.platform = opts.platform || defaultPlatform; 72836 this.opts = { ...opts, platform: this.platform }; 72837 if (opts.scurry) { 72838 this.scurry = opts.scurry; 72839 if (opts.nocase !== undefined && 72840 opts.nocase !== opts.scurry.nocase) { 72841 throw new Error('nocase option contradicts provided scurry option'); 72842 } 72843 } 72844 else { 72845 const Scurry = opts.platform === 'win32' 72846 ? path_scurry_1.PathScurryWin32 72847 : opts.platform === 'darwin' 72848 ? path_scurry_1.PathScurryDarwin 72849 : opts.platform 72850 ? path_scurry_1.PathScurryPosix 72851 : path_scurry_1.PathScurry; 72852 this.scurry = new Scurry(this.cwd, { 72853 nocase: opts.nocase, 72854 fs: opts.fs, 72855 }); 72856 } 72857 this.nocase = this.scurry.nocase; 72858 // If you do nocase:true on a case-sensitive file system, then 72859 // we need to use regexps instead of strings for non-magic 72860 // path portions, because statting `aBc` won't return results 72861 // for the file `AbC` for example. 72862 const nocaseMagicOnly = this.platform === 'darwin' || this.platform === 'win32'; 72863 const mmo = { 72864 // default nocase based on platform 72865 ...opts, 72866 dot: this.dot, 72867 matchBase: this.matchBase, 72868 nobrace: this.nobrace, 72869 nocase: this.nocase, 72870 nocaseMagicOnly, 72871 nocomment: true, 72872 noext: this.noext, 72873 nonegate: true, 72874 optimizationLevel: 2, 72875 platform: this.platform, 72876 windowsPathsNoEscape: this.windowsPathsNoEscape, 72877 debug: !!this.opts.debug, 72878 }; 72879 const mms = this.pattern.map(p => new minimatch_1.Minimatch(p, mmo)); 72880 const [matchSet, globParts] = mms.reduce((set, m) => { 72881 set[0].push(...m.set); 72882 set[1].push(...m.globParts); 72883 return set; 72884 }, [[], []]); 72885 this.patterns = matchSet.map((set, i) => { 72886 const g = globParts[i]; 72887 /* c8 ignore start */ 72888 if (!g) 72889 throw new Error('invalid pattern object'); 72890 /* c8 ignore stop */ 72891 return new pattern_js_1.Pattern(set, g, 0, this.platform); 72892 }); 72893 } 72894 async walk() { 72895 // Walkers always return array of Path objects, so we just have to 72896 // coerce them into the right shape. It will have already called 72897 // realpath() if the option was set to do so, so we know that's cached. 72898 // start out knowing the cwd, at least 72899 return [ 72900 ...(await new walker_js_1.GlobWalker(this.patterns, this.scurry.cwd, { 72901 ...this.opts, 72902 maxDepth: this.maxDepth !== Infinity 72903 ? this.maxDepth + this.scurry.cwd.depth() 72904 : Infinity, 72905 platform: this.platform, 72906 nocase: this.nocase, 72907 }).walk()), 72908 ]; 72909 } 72910 walkSync() { 72911 return [ 72912 ...new walker_js_1.GlobWalker(this.patterns, this.scurry.cwd, { 72913 ...this.opts, 72914 maxDepth: this.maxDepth !== Infinity 72915 ? this.maxDepth + this.scurry.cwd.depth() 72916 : Infinity, 72917 platform: this.platform, 72918 nocase: this.nocase, 72919 }).walkSync(), 72920 ]; 72921 } 72922 stream() { 72923 return new walker_js_1.GlobStream(this.patterns, this.scurry.cwd, { 72924 ...this.opts, 72925 maxDepth: this.maxDepth !== Infinity 72926 ? this.maxDepth + this.scurry.cwd.depth() 72927 : Infinity, 72928 platform: this.platform, 72929 nocase: this.nocase, 72930 }).stream(); 72931 } 72932 streamSync() { 72933 return new walker_js_1.GlobStream(this.patterns, this.scurry.cwd, { 72934 ...this.opts, 72935 maxDepth: this.maxDepth !== Infinity 72936 ? this.maxDepth + this.scurry.cwd.depth() 72937 : Infinity, 72938 platform: this.platform, 72939 nocase: this.nocase, 72940 }).streamSync(); 72941 } 72942 /** 72943 * Default sync iteration function. Returns a Generator that 72944 * iterates over the results. 72945 */ 72946 iterateSync() { 72947 return this.streamSync()[Symbol.iterator](); 72948 } 72949 [Symbol.iterator]() { 72950 return this.iterateSync(); 72951 } 72952 /** 72953 * Default async iteration function. Returns an AsyncGenerator that 72954 * iterates over the results. 72955 */ 72956 iterate() { 72957 return this.stream()[Symbol.asyncIterator](); 72958 } 72959 [Symbol.asyncIterator]() { 72960 return this.iterate(); 72961 } 72962 } 72963 exports.Glob = Glob; 72964 //# sourceMappingURL=glob.js.map 72965 72966 /***/ }), 72967 72968 /***/ 96490: 72969 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 72970 72971 "use strict"; 72972 72973 Object.defineProperty(exports, "__esModule", ({ value: true })); 72974 exports.hasMagic = void 0; 72975 const minimatch_1 = __nccwpck_require__(7111); 72976 /** 72977 * Return true if the patterns provided contain any magic glob characters, 72978 * given the options provided. 72979 * 72980 * Brace expansion is not considered "magic" unless the `magicalBraces` option 72981 * is set, as brace expansion just turns one string into an array of strings. 72982 * So a pattern like `'x{a,b}y'` would return `false`, because `'xay'` and 72983 * `'xby'` both do not contain any magic glob characters, and it's treated the 72984 * same as if you had called it on `['xay', 'xby']`. When `magicalBraces:true` 72985 * is in the options, brace expansion _is_ treated as a pattern having magic. 72986 */ 72987 const hasMagic = (pattern, options = {}) => { 72988 if (!Array.isArray(pattern)) { 72989 pattern = [pattern]; 72990 } 72991 for (const p of pattern) { 72992 if (new minimatch_1.Minimatch(p, options).hasMagic()) 72993 return true; 72994 } 72995 return false; 72996 }; 72997 exports.hasMagic = hasMagic; 72998 //# sourceMappingURL=has-magic.js.map 72999 73000 /***/ }), 73001 73002 /***/ 50750: 73003 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 73004 73005 "use strict"; 73006 73007 // give it a pattern, and it'll be able to tell you if 73008 // a given path should be ignored. 73009 // Ignoring a path ignores its children if the pattern ends in /** 73010 // Ignores are always parsed in dot:true mode 73011 Object.defineProperty(exports, "__esModule", ({ value: true })); 73012 exports.Ignore = void 0; 73013 const minimatch_1 = __nccwpck_require__(7111); 73014 const pattern_js_1 = __nccwpck_require__(92895); 73015 const defaultPlatform = typeof process === 'object' && 73016 process && 73017 typeof process.platform === 'string' 73018 ? process.platform 73019 : 'linux'; 73020 /** 73021 * Class used to process ignored patterns 73022 */ 73023 class Ignore { 73024 relative; 73025 relativeChildren; 73026 absolute; 73027 absoluteChildren; 73028 constructor(ignored, { nobrace, nocase, noext, noglobstar, platform = defaultPlatform, }) { 73029 this.relative = []; 73030 this.absolute = []; 73031 this.relativeChildren = []; 73032 this.absoluteChildren = []; 73033 const mmopts = { 73034 dot: true, 73035 nobrace, 73036 nocase, 73037 noext, 73038 noglobstar, 73039 optimizationLevel: 2, 73040 platform, 73041 nocomment: true, 73042 nonegate: true, 73043 }; 73044 // this is a little weird, but it gives us a clean set of optimized 73045 // minimatch matchers, without getting tripped up if one of them 73046 // ends in /** inside a brace section, and it's only inefficient at 73047 // the start of the walk, not along it. 73048 // It'd be nice if the Pattern class just had a .test() method, but 73049 // handling globstars is a bit of a pita, and that code already lives 73050 // in minimatch anyway. 73051 // Another way would be if maybe Minimatch could take its set/globParts 73052 // as an option, and then we could at least just use Pattern to test 73053 // for absolute-ness. 73054 // Yet another way, Minimatch could take an array of glob strings, and 73055 // a cwd option, and do the right thing. 73056 for (const ign of ignored) { 73057 const mm = new minimatch_1.Minimatch(ign, mmopts); 73058 for (let i = 0; i < mm.set.length; i++) { 73059 const parsed = mm.set[i]; 73060 const globParts = mm.globParts[i]; 73061 /* c8 ignore start */ 73062 if (!parsed || !globParts) { 73063 throw new Error('invalid pattern object'); 73064 } 73065 /* c8 ignore stop */ 73066 const p = new pattern_js_1.Pattern(parsed, globParts, 0, platform); 73067 const m = new minimatch_1.Minimatch(p.globString(), mmopts); 73068 const children = globParts[globParts.length - 1] === '**'; 73069 const absolute = p.isAbsolute(); 73070 if (absolute) 73071 this.absolute.push(m); 73072 else 73073 this.relative.push(m); 73074 if (children) { 73075 if (absolute) 73076 this.absoluteChildren.push(m); 73077 else 73078 this.relativeChildren.push(m); 73079 } 73080 } 73081 } 73082 } 73083 ignored(p) { 73084 const fullpath = p.fullpath(); 73085 const fullpaths = `${fullpath}/`; 73086 const relative = p.relative() || '.'; 73087 const relatives = `${relative}/`; 73088 for (const m of this.relative) { 73089 if (m.match(relative) || m.match(relatives)) 73090 return true; 73091 } 73092 for (const m of this.absolute) { 73093 if (m.match(fullpath) || m.match(fullpaths)) 73094 return true; 73095 } 73096 return false; 73097 } 73098 childrenIgnored(p) { 73099 const fullpath = p.fullpath() + '/'; 73100 const relative = (p.relative() || '.') + '/'; 73101 for (const m of this.relativeChildren) { 73102 if (m.match(relative)) 73103 return true; 73104 } 73105 for (const m of this.absoluteChildren) { 73106 if (m.match(fullpath)) 73107 return true; 73108 } 73109 return false; 73110 } 73111 } 73112 exports.Ignore = Ignore; 73113 //# sourceMappingURL=ignore.js.map 73114 73115 /***/ }), 73116 73117 /***/ 50836: 73118 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 73119 73120 "use strict"; 73121 73122 Object.defineProperty(exports, "__esModule", ({ value: true })); 73123 exports.glob = exports.hasMagic = exports.Glob = exports.unescape = exports.escape = exports.sync = exports.iterate = exports.iterateSync = exports.stream = exports.streamSync = exports.globIterate = exports.globIterateSync = exports.globSync = exports.globStream = exports.globStreamSync = void 0; 73124 const minimatch_1 = __nccwpck_require__(7111); 73125 const glob_js_1 = __nccwpck_require__(55339); 73126 const has_magic_js_1 = __nccwpck_require__(96490); 73127 function globStreamSync(pattern, options = {}) { 73128 return new glob_js_1.Glob(pattern, options).streamSync(); 73129 } 73130 exports.globStreamSync = globStreamSync; 73131 function globStream(pattern, options = {}) { 73132 return new glob_js_1.Glob(pattern, options).stream(); 73133 } 73134 exports.globStream = globStream; 73135 function globSync(pattern, options = {}) { 73136 return new glob_js_1.Glob(pattern, options).walkSync(); 73137 } 73138 exports.globSync = globSync; 73139 async function glob_(pattern, options = {}) { 73140 return new glob_js_1.Glob(pattern, options).walk(); 73141 } 73142 function globIterateSync(pattern, options = {}) { 73143 return new glob_js_1.Glob(pattern, options).iterateSync(); 73144 } 73145 exports.globIterateSync = globIterateSync; 73146 function globIterate(pattern, options = {}) { 73147 return new glob_js_1.Glob(pattern, options).iterate(); 73148 } 73149 exports.globIterate = globIterate; 73150 // aliases: glob.sync.stream() glob.stream.sync() glob.sync() etc 73151 exports.streamSync = globStreamSync; 73152 exports.stream = Object.assign(globStream, { sync: globStreamSync }); 73153 exports.iterateSync = globIterateSync; 73154 exports.iterate = Object.assign(globIterate, { 73155 sync: globIterateSync, 73156 }); 73157 exports.sync = Object.assign(globSync, { 73158 stream: globStreamSync, 73159 iterate: globIterateSync, 73160 }); 73161 /* c8 ignore start */ 73162 var minimatch_2 = __nccwpck_require__(7111); 73163 Object.defineProperty(exports, "escape", ({ enumerable: true, get: function () { return minimatch_2.escape; } })); 73164 Object.defineProperty(exports, "unescape", ({ enumerable: true, get: function () { return minimatch_2.unescape; } })); 73165 var glob_js_2 = __nccwpck_require__(55339); 73166 Object.defineProperty(exports, "Glob", ({ enumerable: true, get: function () { return glob_js_2.Glob; } })); 73167 var has_magic_js_2 = __nccwpck_require__(96490); 73168 Object.defineProperty(exports, "hasMagic", ({ enumerable: true, get: function () { return has_magic_js_2.hasMagic; } })); 73169 /* c8 ignore stop */ 73170 exports.glob = Object.assign(glob_, { 73171 glob: glob_, 73172 globSync, 73173 sync: exports.sync, 73174 globStream, 73175 stream: exports.stream, 73176 globStreamSync, 73177 streamSync: exports.streamSync, 73178 globIterate, 73179 iterate: exports.iterate, 73180 globIterateSync, 73181 iterateSync: exports.iterateSync, 73182 Glob: glob_js_1.Glob, 73183 hasMagic: has_magic_js_1.hasMagic, 73184 escape: minimatch_1.escape, 73185 unescape: minimatch_1.unescape, 73186 }); 73187 exports.glob.glob = exports.glob; 73188 //# sourceMappingURL=index.js.map 73189 73190 /***/ }), 73191 73192 /***/ 92895: 73193 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 73194 73195 "use strict"; 73196 73197 // this is just a very light wrapper around 2 arrays with an offset index 73198 Object.defineProperty(exports, "__esModule", ({ value: true })); 73199 exports.Pattern = void 0; 73200 const minimatch_1 = __nccwpck_require__(7111); 73201 const isPatternList = (pl) => pl.length >= 1; 73202 const isGlobList = (gl) => gl.length >= 1; 73203 /** 73204 * An immutable-ish view on an array of glob parts and their parsed 73205 * results 73206 */ 73207 class Pattern { 73208 #patternList; 73209 #globList; 73210 #index; 73211 length; 73212 #platform; 73213 #rest; 73214 #globString; 73215 #isDrive; 73216 #isUNC; 73217 #isAbsolute; 73218 #followGlobstar = true; 73219 constructor(patternList, globList, index, platform) { 73220 if (!isPatternList(patternList)) { 73221 throw new TypeError('empty pattern list'); 73222 } 73223 if (!isGlobList(globList)) { 73224 throw new TypeError('empty glob list'); 73225 } 73226 if (globList.length !== patternList.length) { 73227 throw new TypeError('mismatched pattern list and glob list lengths'); 73228 } 73229 this.length = patternList.length; 73230 if (index < 0 || index >= this.length) { 73231 throw new TypeError('index out of range'); 73232 } 73233 this.#patternList = patternList; 73234 this.#globList = globList; 73235 this.#index = index; 73236 this.#platform = platform; 73237 // normalize root entries of absolute patterns on initial creation. 73238 if (this.#index === 0) { 73239 // c: => ['c:/'] 73240 // C:/ => ['C:/'] 73241 // C:/x => ['C:/', 'x'] 73242 // //host/share => ['//host/share/'] 73243 // //host/share/ => ['//host/share/'] 73244 // //host/share/x => ['//host/share/', 'x'] 73245 // /etc => ['/', 'etc'] 73246 // / => ['/'] 73247 if (this.isUNC()) { 73248 // '' / '' / 'host' / 'share' 73249 const [p0, p1, p2, p3, ...prest] = this.#patternList; 73250 const [g0, g1, g2, g3, ...grest] = this.#globList; 73251 if (prest[0] === '') { 73252 // ends in / 73253 prest.shift(); 73254 grest.shift(); 73255 } 73256 const p = [p0, p1, p2, p3, ''].join('/'); 73257 const g = [g0, g1, g2, g3, ''].join('/'); 73258 this.#patternList = [p, ...prest]; 73259 this.#globList = [g, ...grest]; 73260 this.length = this.#patternList.length; 73261 } 73262 else if (this.isDrive() || this.isAbsolute()) { 73263 const [p1, ...prest] = this.#patternList; 73264 const [g1, ...grest] = this.#globList; 73265 if (prest[0] === '') { 73266 // ends in / 73267 prest.shift(); 73268 grest.shift(); 73269 } 73270 const p = p1 + '/'; 73271 const g = g1 + '/'; 73272 this.#patternList = [p, ...prest]; 73273 this.#globList = [g, ...grest]; 73274 this.length = this.#patternList.length; 73275 } 73276 } 73277 } 73278 /** 73279 * The first entry in the parsed list of patterns 73280 */ 73281 pattern() { 73282 return this.#patternList[this.#index]; 73283 } 73284 /** 73285 * true of if pattern() returns a string 73286 */ 73287 isString() { 73288 return typeof this.#patternList[this.#index] === 'string'; 73289 } 73290 /** 73291 * true of if pattern() returns GLOBSTAR 73292 */ 73293 isGlobstar() { 73294 return this.#patternList[this.#index] === minimatch_1.GLOBSTAR; 73295 } 73296 /** 73297 * true if pattern() returns a regexp 73298 */ 73299 isRegExp() { 73300 return this.#patternList[this.#index] instanceof RegExp; 73301 } 73302 /** 73303 * The /-joined set of glob parts that make up this pattern 73304 */ 73305 globString() { 73306 return (this.#globString = 73307 this.#globString || 73308 (this.#index === 0 73309 ? this.isAbsolute() 73310 ? this.#globList[0] + this.#globList.slice(1).join('/') 73311 : this.#globList.join('/') 73312 : this.#globList.slice(this.#index).join('/'))); 73313 } 73314 /** 73315 * true if there are more pattern parts after this one 73316 */ 73317 hasMore() { 73318 return this.length > this.#index + 1; 73319 } 73320 /** 73321 * The rest of the pattern after this part, or null if this is the end 73322 */ 73323 rest() { 73324 if (this.#rest !== undefined) 73325 return this.#rest; 73326 if (!this.hasMore()) 73327 return (this.#rest = null); 73328 this.#rest = new Pattern(this.#patternList, this.#globList, this.#index + 1, this.#platform); 73329 this.#rest.#isAbsolute = this.#isAbsolute; 73330 this.#rest.#isUNC = this.#isUNC; 73331 this.#rest.#isDrive = this.#isDrive; 73332 return this.#rest; 73333 } 73334 /** 73335 * true if the pattern represents a //unc/path/ on windows 73336 */ 73337 isUNC() { 73338 const pl = this.#patternList; 73339 return this.#isUNC !== undefined 73340 ? this.#isUNC 73341 : (this.#isUNC = 73342 this.#platform === 'win32' && 73343 this.#index === 0 && 73344 pl[0] === '' && 73345 pl[1] === '' && 73346 typeof pl[2] === 'string' && 73347 !!pl[2] && 73348 typeof pl[3] === 'string' && 73349 !!pl[3]); 73350 } 73351 // pattern like C:/... 73352 // split = ['C:', ...] 73353 // XXX: would be nice to handle patterns like `c:*` to test the cwd 73354 // in c: for *, but I don't know of a way to even figure out what that 73355 // cwd is without actually chdir'ing into it? 73356 /** 73357 * True if the pattern starts with a drive letter on Windows 73358 */ 73359 isDrive() { 73360 const pl = this.#patternList; 73361 return this.#isDrive !== undefined 73362 ? this.#isDrive 73363 : (this.#isDrive = 73364 this.#platform === 'win32' && 73365 this.#index === 0 && 73366 this.length > 1 && 73367 typeof pl[0] === 'string' && 73368 /^[a-z]:$/i.test(pl[0])); 73369 } 73370 // pattern = '/' or '/...' or '/x/...' 73371 // split = ['', ''] or ['', ...] or ['', 'x', ...] 73372 // Drive and UNC both considered absolute on windows 73373 /** 73374 * True if the pattern is rooted on an absolute path 73375 */ 73376 isAbsolute() { 73377 const pl = this.#patternList; 73378 return this.#isAbsolute !== undefined 73379 ? this.#isAbsolute 73380 : (this.#isAbsolute = 73381 (pl[0] === '' && pl.length > 1) || 73382 this.isDrive() || 73383 this.isUNC()); 73384 } 73385 /** 73386 * consume the root of the pattern, and return it 73387 */ 73388 root() { 73389 const p = this.#patternList[0]; 73390 return typeof p === 'string' && this.isAbsolute() && this.#index === 0 73391 ? p 73392 : ''; 73393 } 73394 /** 73395 * Check to see if the current globstar pattern is allowed to follow 73396 * a symbolic link. 73397 */ 73398 checkFollowGlobstar() { 73399 return !(this.#index === 0 || 73400 !this.isGlobstar() || 73401 !this.#followGlobstar); 73402 } 73403 /** 73404 * Mark that the current globstar pattern is following a symbolic link 73405 */ 73406 markFollowGlobstar() { 73407 if (this.#index === 0 || !this.isGlobstar() || !this.#followGlobstar) 73408 return false; 73409 this.#followGlobstar = false; 73410 return true; 73411 } 73412 } 73413 exports.Pattern = Pattern; 73414 //# sourceMappingURL=pattern.js.map 73415 73416 /***/ }), 73417 73418 /***/ 62813: 73419 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 73420 73421 "use strict"; 73422 73423 // synchronous utility for filtering entries and calculating subwalks 73424 Object.defineProperty(exports, "__esModule", ({ value: true })); 73425 exports.Processor = exports.SubWalks = exports.MatchRecord = exports.HasWalkedCache = void 0; 73426 const minimatch_1 = __nccwpck_require__(7111); 73427 /** 73428 * A cache of which patterns have been processed for a given Path 73429 */ 73430 class HasWalkedCache { 73431 store; 73432 constructor(store = new Map()) { 73433 this.store = store; 73434 } 73435 copy() { 73436 return new HasWalkedCache(new Map(this.store)); 73437 } 73438 hasWalked(target, pattern) { 73439 return this.store.get(target.fullpath())?.has(pattern.globString()); 73440 } 73441 storeWalked(target, pattern) { 73442 const fullpath = target.fullpath(); 73443 const cached = this.store.get(fullpath); 73444 if (cached) 73445 cached.add(pattern.globString()); 73446 else 73447 this.store.set(fullpath, new Set([pattern.globString()])); 73448 } 73449 } 73450 exports.HasWalkedCache = HasWalkedCache; 73451 /** 73452 * A record of which paths have been matched in a given walk step, 73453 * and whether they only are considered a match if they are a directory, 73454 * and whether their absolute or relative path should be returned. 73455 */ 73456 class MatchRecord { 73457 store = new Map(); 73458 add(target, absolute, ifDir) { 73459 const n = (absolute ? 2 : 0) | (ifDir ? 1 : 0); 73460 const current = this.store.get(target); 73461 this.store.set(target, current === undefined ? n : n & current); 73462 } 73463 // match, absolute, ifdir 73464 entries() { 73465 return [...this.store.entries()].map(([path, n]) => [ 73466 path, 73467 !!(n & 2), 73468 !!(n & 1), 73469 ]); 73470 } 73471 } 73472 exports.MatchRecord = MatchRecord; 73473 /** 73474 * A collection of patterns that must be processed in a subsequent step 73475 * for a given path. 73476 */ 73477 class SubWalks { 73478 store = new Map(); 73479 add(target, pattern) { 73480 if (!target.canReaddir()) { 73481 return; 73482 } 73483 const subs = this.store.get(target); 73484 if (subs) { 73485 if (!subs.find(p => p.globString() === pattern.globString())) { 73486 subs.push(pattern); 73487 } 73488 } 73489 else 73490 this.store.set(target, [pattern]); 73491 } 73492 get(target) { 73493 const subs = this.store.get(target); 73494 /* c8 ignore start */ 73495 if (!subs) { 73496 throw new Error('attempting to walk unknown path'); 73497 } 73498 /* c8 ignore stop */ 73499 return subs; 73500 } 73501 entries() { 73502 return this.keys().map(k => [k, this.store.get(k)]); 73503 } 73504 keys() { 73505 return [...this.store.keys()].filter(t => t.canReaddir()); 73506 } 73507 } 73508 exports.SubWalks = SubWalks; 73509 /** 73510 * The class that processes patterns for a given path. 73511 * 73512 * Handles child entry filtering, and determining whether a path's 73513 * directory contents must be read. 73514 */ 73515 class Processor { 73516 hasWalkedCache; 73517 matches = new MatchRecord(); 73518 subwalks = new SubWalks(); 73519 patterns; 73520 follow; 73521 dot; 73522 opts; 73523 constructor(opts, hasWalkedCache) { 73524 this.opts = opts; 73525 this.follow = !!opts.follow; 73526 this.dot = !!opts.dot; 73527 this.hasWalkedCache = hasWalkedCache 73528 ? hasWalkedCache.copy() 73529 : new HasWalkedCache(); 73530 } 73531 processPatterns(target, patterns) { 73532 this.patterns = patterns; 73533 const processingSet = patterns.map(p => [target, p]); 73534 // map of paths to the magic-starting subwalks they need to walk 73535 // first item in patterns is the filter 73536 for (let [t, pattern] of processingSet) { 73537 this.hasWalkedCache.storeWalked(t, pattern); 73538 const root = pattern.root(); 73539 const absolute = pattern.isAbsolute() && this.opts.absolute !== false; 73540 // start absolute patterns at root 73541 if (root) { 73542 t = t.resolve(root === '/' && this.opts.root !== undefined 73543 ? this.opts.root 73544 : root); 73545 const rest = pattern.rest(); 73546 if (!rest) { 73547 this.matches.add(t, true, false); 73548 continue; 73549 } 73550 else { 73551 pattern = rest; 73552 } 73553 } 73554 if (t.isENOENT()) 73555 continue; 73556 let p; 73557 let rest; 73558 let changed = false; 73559 while (typeof (p = pattern.pattern()) === 'string' && 73560 (rest = pattern.rest())) { 73561 const c = t.resolve(p); 73562 t = c; 73563 pattern = rest; 73564 changed = true; 73565 } 73566 p = pattern.pattern(); 73567 rest = pattern.rest(); 73568 if (changed) { 73569 if (this.hasWalkedCache.hasWalked(t, pattern)) 73570 continue; 73571 this.hasWalkedCache.storeWalked(t, pattern); 73572 } 73573 // now we have either a final string for a known entry, 73574 // more strings for an unknown entry, 73575 // or a pattern starting with magic, mounted on t. 73576 if (typeof p === 'string') { 73577 // must not be final entry, otherwise we would have 73578 // concatenated it earlier. 73579 const ifDir = p === '..' || p === '' || p === '.'; 73580 this.matches.add(t.resolve(p), absolute, ifDir); 73581 continue; 73582 } 73583 else if (p === minimatch_1.GLOBSTAR) { 73584 // if no rest, match and subwalk pattern 73585 // if rest, process rest and subwalk pattern 73586 // if it's a symlink, but we didn't get here by way of a 73587 // globstar match (meaning it's the first time THIS globstar 73588 // has traversed a symlink), then we follow it. Otherwise, stop. 73589 if (!t.isSymbolicLink() || 73590 this.follow || 73591 pattern.checkFollowGlobstar()) { 73592 this.subwalks.add(t, pattern); 73593 } 73594 const rp = rest?.pattern(); 73595 const rrest = rest?.rest(); 73596 if (!rest || ((rp === '' || rp === '.') && !rrest)) { 73597 // only HAS to be a dir if it ends in **/ or **/. 73598 // but ending in ** will match files as well. 73599 this.matches.add(t, absolute, rp === '' || rp === '.'); 73600 } 73601 else { 73602 if (rp === '..') { 73603 // this would mean you're matching **/.. at the fs root, 73604 // and no thanks, I'm not gonna test that specific case. 73605 /* c8 ignore start */ 73606 const tp = t.parent || t; 73607 /* c8 ignore stop */ 73608 if (!rrest) 73609 this.matches.add(tp, absolute, true); 73610 else if (!this.hasWalkedCache.hasWalked(tp, rrest)) { 73611 this.subwalks.add(tp, rrest); 73612 } 73613 } 73614 } 73615 } 73616 else if (p instanceof RegExp) { 73617 this.subwalks.add(t, pattern); 73618 } 73619 } 73620 return this; 73621 } 73622 subwalkTargets() { 73623 return this.subwalks.keys(); 73624 } 73625 child() { 73626 return new Processor(this.opts, this.hasWalkedCache); 73627 } 73628 // return a new Processor containing the subwalks for each 73629 // child entry, and a set of matches, and 73630 // a hasWalkedCache that's a copy of this one 73631 // then we're going to call 73632 filterEntries(parent, entries) { 73633 const patterns = this.subwalks.get(parent); 73634 // put matches and entry walks into the results processor 73635 const results = this.child(); 73636 for (const e of entries) { 73637 for (const pattern of patterns) { 73638 const absolute = pattern.isAbsolute(); 73639 const p = pattern.pattern(); 73640 const rest = pattern.rest(); 73641 if (p === minimatch_1.GLOBSTAR) { 73642 results.testGlobstar(e, pattern, rest, absolute); 73643 } 73644 else if (p instanceof RegExp) { 73645 results.testRegExp(e, p, rest, absolute); 73646 } 73647 else { 73648 results.testString(e, p, rest, absolute); 73649 } 73650 } 73651 } 73652 return results; 73653 } 73654 testGlobstar(e, pattern, rest, absolute) { 73655 if (this.dot || !e.name.startsWith('.')) { 73656 if (!pattern.hasMore()) { 73657 this.matches.add(e, absolute, false); 73658 } 73659 if (e.canReaddir()) { 73660 // if we're in follow mode or it's not a symlink, just keep 73661 // testing the same pattern. If there's more after the globstar, 73662 // then this symlink consumes the globstar. If not, then we can 73663 // follow at most ONE symlink along the way, so we mark it, which 73664 // also checks to ensure that it wasn't already marked. 73665 if (this.follow || !e.isSymbolicLink()) { 73666 this.subwalks.add(e, pattern); 73667 } 73668 else if (e.isSymbolicLink()) { 73669 if (rest && pattern.checkFollowGlobstar()) { 73670 this.subwalks.add(e, rest); 73671 } 73672 else if (pattern.markFollowGlobstar()) { 73673 this.subwalks.add(e, pattern); 73674 } 73675 } 73676 } 73677 } 73678 // if the NEXT thing matches this entry, then also add 73679 // the rest. 73680 if (rest) { 73681 const rp = rest.pattern(); 73682 if (typeof rp === 'string' && 73683 // dots and empty were handled already 73684 rp !== '..' && 73685 rp !== '' && 73686 rp !== '.') { 73687 this.testString(e, rp, rest.rest(), absolute); 73688 } 73689 else if (rp === '..') { 73690 /* c8 ignore start */ 73691 const ep = e.parent || e; 73692 /* c8 ignore stop */ 73693 this.subwalks.add(ep, rest); 73694 } 73695 else if (rp instanceof RegExp) { 73696 this.testRegExp(e, rp, rest.rest(), absolute); 73697 } 73698 } 73699 } 73700 testRegExp(e, p, rest, absolute) { 73701 if (!p.test(e.name)) 73702 return; 73703 if (!rest) { 73704 this.matches.add(e, absolute, false); 73705 } 73706 else { 73707 this.subwalks.add(e, rest); 73708 } 73709 } 73710 testString(e, p, rest, absolute) { 73711 // should never happen? 73712 if (!e.isNamed(p)) 73713 return; 73714 if (!rest) { 73715 this.matches.add(e, absolute, false); 73716 } 73717 else { 73718 this.subwalks.add(e, rest); 73719 } 73720 } 73721 } 73722 exports.Processor = Processor; 73723 //# sourceMappingURL=processor.js.map 73724 73725 /***/ }), 73726 73727 /***/ 45548: 73728 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 73729 73730 "use strict"; 73731 73732 Object.defineProperty(exports, "__esModule", ({ value: true })); 73733 exports.GlobStream = exports.GlobWalker = exports.GlobUtil = void 0; 73734 /** 73735 * Single-use utility classes to provide functionality to the {@link Glob} 73736 * methods. 73737 * 73738 * @module 73739 */ 73740 const minipass_1 = __nccwpck_require__(14968); 73741 const ignore_js_1 = __nccwpck_require__(50750); 73742 const processor_js_1 = __nccwpck_require__(62813); 73743 const makeIgnore = (ignore, opts) => typeof ignore === 'string' 73744 ? new ignore_js_1.Ignore([ignore], opts) 73745 : Array.isArray(ignore) 73746 ? new ignore_js_1.Ignore(ignore, opts) 73747 : ignore; 73748 /** 73749 * basic walking utilities that all the glob walker types use 73750 */ 73751 class GlobUtil { 73752 path; 73753 patterns; 73754 opts; 73755 seen = new Set(); 73756 paused = false; 73757 aborted = false; 73758 #onResume = []; 73759 #ignore; 73760 #sep; 73761 signal; 73762 maxDepth; 73763 constructor(patterns, path, opts) { 73764 this.patterns = patterns; 73765 this.path = path; 73766 this.opts = opts; 73767 this.#sep = !opts.posix && opts.platform === 'win32' ? '\\' : '/'; 73768 if (opts.ignore) { 73769 this.#ignore = makeIgnore(opts.ignore, opts); 73770 } 73771 // ignore, always set with maxDepth, but it's optional on the 73772 // GlobOptions type 73773 /* c8 ignore start */ 73774 this.maxDepth = opts.maxDepth || Infinity; 73775 /* c8 ignore stop */ 73776 if (opts.signal) { 73777 this.signal = opts.signal; 73778 this.signal.addEventListener('abort', () => { 73779 this.#onResume.length = 0; 73780 }); 73781 } 73782 } 73783 #ignored(path) { 73784 return this.seen.has(path) || !!this.#ignore?.ignored?.(path); 73785 } 73786 #childrenIgnored(path) { 73787 return !!this.#ignore?.childrenIgnored?.(path); 73788 } 73789 // backpressure mechanism 73790 pause() { 73791 this.paused = true; 73792 } 73793 resume() { 73794 /* c8 ignore start */ 73795 if (this.signal?.aborted) 73796 return; 73797 /* c8 ignore stop */ 73798 this.paused = false; 73799 let fn = undefined; 73800 while (!this.paused && (fn = this.#onResume.shift())) { 73801 fn(); 73802 } 73803 } 73804 onResume(fn) { 73805 if (this.signal?.aborted) 73806 return; 73807 /* c8 ignore start */ 73808 if (!this.paused) { 73809 fn(); 73810 } 73811 else { 73812 /* c8 ignore stop */ 73813 this.#onResume.push(fn); 73814 } 73815 } 73816 // do the requisite realpath/stat checking, and return the path 73817 // to add or undefined to filter it out. 73818 async matchCheck(e, ifDir) { 73819 if (ifDir && this.opts.nodir) 73820 return undefined; 73821 let rpc; 73822 if (this.opts.realpath) { 73823 rpc = e.realpathCached() || (await e.realpath()); 73824 if (!rpc) 73825 return undefined; 73826 e = rpc; 73827 } 73828 const needStat = e.isUnknown() || this.opts.stat; 73829 return this.matchCheckTest(needStat ? await e.lstat() : e, ifDir); 73830 } 73831 matchCheckTest(e, ifDir) { 73832 return e && 73833 (this.maxDepth === Infinity || e.depth() <= this.maxDepth) && 73834 (!ifDir || e.canReaddir()) && 73835 (!this.opts.nodir || !e.isDirectory()) && 73836 !this.#ignored(e) 73837 ? e 73838 : undefined; 73839 } 73840 matchCheckSync(e, ifDir) { 73841 if (ifDir && this.opts.nodir) 73842 return undefined; 73843 let rpc; 73844 if (this.opts.realpath) { 73845 rpc = e.realpathCached() || e.realpathSync(); 73846 if (!rpc) 73847 return undefined; 73848 e = rpc; 73849 } 73850 const needStat = e.isUnknown() || this.opts.stat; 73851 return this.matchCheckTest(needStat ? e.lstatSync() : e, ifDir); 73852 } 73853 matchFinish(e, absolute) { 73854 if (this.#ignored(e)) 73855 return; 73856 const abs = this.opts.absolute === undefined ? absolute : this.opts.absolute; 73857 this.seen.add(e); 73858 const mark = this.opts.mark && e.isDirectory() ? this.#sep : ''; 73859 // ok, we have what we need! 73860 if (this.opts.withFileTypes) { 73861 this.matchEmit(e); 73862 } 73863 else if (abs) { 73864 const abs = this.opts.posix ? e.fullpathPosix() : e.fullpath(); 73865 this.matchEmit(abs + mark); 73866 } 73867 else { 73868 const rel = this.opts.posix ? e.relativePosix() : e.relative(); 73869 const pre = this.opts.dotRelative && !rel.startsWith('..' + this.#sep) 73870 ? '.' + this.#sep 73871 : ''; 73872 this.matchEmit(!rel ? '.' + mark : pre + rel + mark); 73873 } 73874 } 73875 async match(e, absolute, ifDir) { 73876 const p = await this.matchCheck(e, ifDir); 73877 if (p) 73878 this.matchFinish(p, absolute); 73879 } 73880 matchSync(e, absolute, ifDir) { 73881 const p = this.matchCheckSync(e, ifDir); 73882 if (p) 73883 this.matchFinish(p, absolute); 73884 } 73885 walkCB(target, patterns, cb) { 73886 /* c8 ignore start */ 73887 if (this.signal?.aborted) 73888 cb(); 73889 /* c8 ignore stop */ 73890 this.walkCB2(target, patterns, new processor_js_1.Processor(this.opts), cb); 73891 } 73892 walkCB2(target, patterns, processor, cb) { 73893 if (this.#childrenIgnored(target)) 73894 return cb(); 73895 if (this.signal?.aborted) 73896 cb(); 73897 if (this.paused) { 73898 this.onResume(() => this.walkCB2(target, patterns, processor, cb)); 73899 return; 73900 } 73901 processor.processPatterns(target, patterns); 73902 // done processing. all of the above is sync, can be abstracted out. 73903 // subwalks is a map of paths to the entry filters they need 73904 // matches is a map of paths to [absolute, ifDir] tuples. 73905 let tasks = 1; 73906 const next = () => { 73907 if (--tasks === 0) 73908 cb(); 73909 }; 73910 for (const [m, absolute, ifDir] of processor.matches.entries()) { 73911 if (this.#ignored(m)) 73912 continue; 73913 tasks++; 73914 this.match(m, absolute, ifDir).then(() => next()); 73915 } 73916 for (const t of processor.subwalkTargets()) { 73917 if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) { 73918 continue; 73919 } 73920 tasks++; 73921 const childrenCached = t.readdirCached(); 73922 if (t.calledReaddir()) 73923 this.walkCB3(t, childrenCached, processor, next); 73924 else { 73925 t.readdirCB((_, entries) => this.walkCB3(t, entries, processor, next), true); 73926 } 73927 } 73928 next(); 73929 } 73930 walkCB3(target, entries, processor, cb) { 73931 processor = processor.filterEntries(target, entries); 73932 let tasks = 1; 73933 const next = () => { 73934 if (--tasks === 0) 73935 cb(); 73936 }; 73937 for (const [m, absolute, ifDir] of processor.matches.entries()) { 73938 if (this.#ignored(m)) 73939 continue; 73940 tasks++; 73941 this.match(m, absolute, ifDir).then(() => next()); 73942 } 73943 for (const [target, patterns] of processor.subwalks.entries()) { 73944 tasks++; 73945 this.walkCB2(target, patterns, processor.child(), next); 73946 } 73947 next(); 73948 } 73949 walkCBSync(target, patterns, cb) { 73950 /* c8 ignore start */ 73951 if (this.signal?.aborted) 73952 cb(); 73953 /* c8 ignore stop */ 73954 this.walkCB2Sync(target, patterns, new processor_js_1.Processor(this.opts), cb); 73955 } 73956 walkCB2Sync(target, patterns, processor, cb) { 73957 if (this.#childrenIgnored(target)) 73958 return cb(); 73959 if (this.signal?.aborted) 73960 cb(); 73961 if (this.paused) { 73962 this.onResume(() => this.walkCB2Sync(target, patterns, processor, cb)); 73963 return; 73964 } 73965 processor.processPatterns(target, patterns); 73966 // done processing. all of the above is sync, can be abstracted out. 73967 // subwalks is a map of paths to the entry filters they need 73968 // matches is a map of paths to [absolute, ifDir] tuples. 73969 let tasks = 1; 73970 const next = () => { 73971 if (--tasks === 0) 73972 cb(); 73973 }; 73974 for (const [m, absolute, ifDir] of processor.matches.entries()) { 73975 if (this.#ignored(m)) 73976 continue; 73977 this.matchSync(m, absolute, ifDir); 73978 } 73979 for (const t of processor.subwalkTargets()) { 73980 if (this.maxDepth !== Infinity && t.depth() >= this.maxDepth) { 73981 continue; 73982 } 73983 tasks++; 73984 const children = t.readdirSync(); 73985 this.walkCB3Sync(t, children, processor, next); 73986 } 73987 next(); 73988 } 73989 walkCB3Sync(target, entries, processor, cb) { 73990 processor = processor.filterEntries(target, entries); 73991 let tasks = 1; 73992 const next = () => { 73993 if (--tasks === 0) 73994 cb(); 73995 }; 73996 for (const [m, absolute, ifDir] of processor.matches.entries()) { 73997 if (this.#ignored(m)) 73998 continue; 73999 this.matchSync(m, absolute, ifDir); 74000 } 74001 for (const [target, patterns] of processor.subwalks.entries()) { 74002 tasks++; 74003 this.walkCB2Sync(target, patterns, processor.child(), next); 74004 } 74005 next(); 74006 } 74007 } 74008 exports.GlobUtil = GlobUtil; 74009 class GlobWalker extends GlobUtil { 74010 matches; 74011 constructor(patterns, path, opts) { 74012 super(patterns, path, opts); 74013 this.matches = new Set(); 74014 } 74015 matchEmit(e) { 74016 this.matches.add(e); 74017 } 74018 async walk() { 74019 if (this.signal?.aborted) 74020 throw this.signal.reason; 74021 if (this.path.isUnknown()) { 74022 await this.path.lstat(); 74023 } 74024 await new Promise((res, rej) => { 74025 this.walkCB(this.path, this.patterns, () => { 74026 if (this.signal?.aborted) { 74027 rej(this.signal.reason); 74028 } 74029 else { 74030 res(this.matches); 74031 } 74032 }); 74033 }); 74034 return this.matches; 74035 } 74036 walkSync() { 74037 if (this.signal?.aborted) 74038 throw this.signal.reason; 74039 if (this.path.isUnknown()) { 74040 this.path.lstatSync(); 74041 } 74042 // nothing for the callback to do, because this never pauses 74043 this.walkCBSync(this.path, this.patterns, () => { 74044 if (this.signal?.aborted) 74045 throw this.signal.reason; 74046 }); 74047 return this.matches; 74048 } 74049 } 74050 exports.GlobWalker = GlobWalker; 74051 class GlobStream extends GlobUtil { 74052 results; 74053 constructor(patterns, path, opts) { 74054 super(patterns, path, opts); 74055 this.results = new minipass_1.Minipass({ 74056 signal: this.signal, 74057 objectMode: true, 74058 }); 74059 this.results.on('drain', () => this.resume()); 74060 this.results.on('resume', () => this.resume()); 74061 } 74062 matchEmit(e) { 74063 this.results.write(e); 74064 if (!this.results.flowing) 74065 this.pause(); 74066 } 74067 stream() { 74068 const target = this.path; 74069 if (target.isUnknown()) { 74070 target.lstat().then(() => { 74071 this.walkCB(target, this.patterns, () => this.results.end()); 74072 }); 74073 } 74074 else { 74075 this.walkCB(target, this.patterns, () => this.results.end()); 74076 } 74077 return this.results; 74078 } 74079 streamSync() { 74080 if (this.path.isUnknown()) { 74081 this.path.lstatSync(); 74082 } 74083 this.walkCBSync(this.path, this.patterns, () => this.results.end()); 74084 return this.results; 74085 } 74086 } 74087 exports.GlobStream = GlobStream; 74088 //# sourceMappingURL=walker.js.map 74089 74090 /***/ }), 74091 74092 /***/ 96874: 74093 /***/ ((__unused_webpack_module, exports) => { 74094 74095 "use strict"; 74096 74097 /** 74098 * @module LRUCache 74099 */ 74100 Object.defineProperty(exports, "__esModule", ({ value: true })); 74101 exports.LRUCache = void 0; 74102 const perf = typeof performance === 'object' && 74103 performance && 74104 typeof performance.now === 'function' 74105 ? performance 74106 : Date; 74107 const warned = new Set(); 74108 /* c8 ignore start */ 74109 const PROCESS = (typeof process === 'object' && !!process ? process : {}); 74110 /* c8 ignore start */ 74111 const emitWarning = (msg, type, code, fn) => { 74112 typeof PROCESS.emitWarning === 'function' 74113 ? PROCESS.emitWarning(msg, type, code, fn) 74114 : console.error(`[${code}] ${type}: ${msg}`); 74115 }; 74116 let AC = globalThis.AbortController; 74117 let AS = globalThis.AbortSignal; 74118 /* c8 ignore start */ 74119 if (typeof AC === 'undefined') { 74120 //@ts-ignore 74121 AS = class AbortSignal { 74122 onabort; 74123 _onabort = []; 74124 reason; 74125 aborted = false; 74126 addEventListener(_, fn) { 74127 this._onabort.push(fn); 74128 } 74129 }; 74130 //@ts-ignore 74131 AC = class AbortController { 74132 constructor() { 74133 warnACPolyfill(); 74134 } 74135 signal = new AS(); 74136 abort(reason) { 74137 if (this.signal.aborted) 74138 return; 74139 //@ts-ignore 74140 this.signal.reason = reason; 74141 //@ts-ignore 74142 this.signal.aborted = true; 74143 //@ts-ignore 74144 for (const fn of this.signal._onabort) { 74145 fn(reason); 74146 } 74147 this.signal.onabort?.(reason); 74148 } 74149 }; 74150 let printACPolyfillWarning = PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1'; 74151 const warnACPolyfill = () => { 74152 if (!printACPolyfillWarning) 74153 return; 74154 printACPolyfillWarning = false; 74155 emitWarning('AbortController is not defined. If using lru-cache in ' + 74156 'node 14, load an AbortController polyfill from the ' + 74157 '`node-abort-controller` package. A minimal polyfill is ' + 74158 'provided for use by LRUCache.fetch(), but it should not be ' + 74159 'relied upon in other contexts (eg, passing it to other APIs that ' + 74160 'use AbortController/AbortSignal might have undesirable effects). ' + 74161 'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.', 'NO_ABORT_CONTROLLER', 'ENOTSUP', warnACPolyfill); 74162 }; 74163 } 74164 /* c8 ignore stop */ 74165 const shouldWarn = (code) => !warned.has(code); 74166 const TYPE = Symbol('type'); 74167 const isPosInt = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n); 74168 /* c8 ignore start */ 74169 // This is a little bit ridiculous, tbh. 74170 // The maximum array length is 2^32-1 or thereabouts on most JS impls. 74171 // And well before that point, you're caching the entire world, I mean, 74172 // that's ~32GB of just integers for the next/prev links, plus whatever 74173 // else to hold that many keys and values. Just filling the memory with 74174 // zeroes at init time is brutal when you get that big. 74175 // But why not be complete? 74176 // Maybe in the future, these limits will have expanded. 74177 const getUintArray = (max) => !isPosInt(max) 74178 ? null 74179 : max <= Math.pow(2, 8) 74180 ? Uint8Array 74181 : max <= Math.pow(2, 16) 74182 ? Uint16Array 74183 : max <= Math.pow(2, 32) 74184 ? Uint32Array 74185 : max <= Number.MAX_SAFE_INTEGER 74186 ? ZeroArray 74187 : null; 74188 /* c8 ignore stop */ 74189 class ZeroArray extends Array { 74190 constructor(size) { 74191 super(size); 74192 this.fill(0); 74193 } 74194 } 74195 class Stack { 74196 heap; 74197 length; 74198 // private constructor 74199 static #constructing = false; 74200 static create(max) { 74201 const HeapCls = getUintArray(max); 74202 if (!HeapCls) 74203 return []; 74204 Stack.#constructing = true; 74205 const s = new Stack(max, HeapCls); 74206 Stack.#constructing = false; 74207 return s; 74208 } 74209 constructor(max, HeapCls) { 74210 /* c8 ignore start */ 74211 if (!Stack.#constructing) { 74212 throw new TypeError('instantiate Stack using Stack.create(n)'); 74213 } 74214 /* c8 ignore stop */ 74215 this.heap = new HeapCls(max); 74216 this.length = 0; 74217 } 74218 push(n) { 74219 this.heap[this.length++] = n; 74220 } 74221 pop() { 74222 return this.heap[--this.length]; 74223 } 74224 } 74225 /** 74226 * Default export, the thing you're using this module to get. 74227 * 74228 * All properties from the options object (with the exception of 74229 * {@link OptionsBase.max} and {@link OptionsBase.maxSize}) are added as 74230 * normal public members. (`max` and `maxBase` are read-only getters.) 74231 * Changing any of these will alter the defaults for subsequent method calls, 74232 * but is otherwise safe. 74233 */ 74234 class LRUCache { 74235 // properties coming in from the options of these, only max and maxSize 74236 // really *need* to be protected. The rest can be modified, as they just 74237 // set defaults for various methods. 74238 #max; 74239 #maxSize; 74240 #dispose; 74241 #disposeAfter; 74242 #fetchMethod; 74243 /** 74244 * {@link LRUCache.OptionsBase.ttl} 74245 */ 74246 ttl; 74247 /** 74248 * {@link LRUCache.OptionsBase.ttlResolution} 74249 */ 74250 ttlResolution; 74251 /** 74252 * {@link LRUCache.OptionsBase.ttlAutopurge} 74253 */ 74254 ttlAutopurge; 74255 /** 74256 * {@link LRUCache.OptionsBase.updateAgeOnGet} 74257 */ 74258 updateAgeOnGet; 74259 /** 74260 * {@link LRUCache.OptionsBase.updateAgeOnHas} 74261 */ 74262 updateAgeOnHas; 74263 /** 74264 * {@link LRUCache.OptionsBase.allowStale} 74265 */ 74266 allowStale; 74267 /** 74268 * {@link LRUCache.OptionsBase.noDisposeOnSet} 74269 */ 74270 noDisposeOnSet; 74271 /** 74272 * {@link LRUCache.OptionsBase.noUpdateTTL} 74273 */ 74274 noUpdateTTL; 74275 /** 74276 * {@link LRUCache.OptionsBase.maxEntrySize} 74277 */ 74278 maxEntrySize; 74279 /** 74280 * {@link LRUCache.OptionsBase.sizeCalculation} 74281 */ 74282 sizeCalculation; 74283 /** 74284 * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection} 74285 */ 74286 noDeleteOnFetchRejection; 74287 /** 74288 * {@link LRUCache.OptionsBase.noDeleteOnStaleGet} 74289 */ 74290 noDeleteOnStaleGet; 74291 /** 74292 * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort} 74293 */ 74294 allowStaleOnFetchAbort; 74295 /** 74296 * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection} 74297 */ 74298 allowStaleOnFetchRejection; 74299 /** 74300 * {@link LRUCache.OptionsBase.ignoreFetchAbort} 74301 */ 74302 ignoreFetchAbort; 74303 // computed properties 74304 #size; 74305 #calculatedSize; 74306 #keyMap; 74307 #keyList; 74308 #valList; 74309 #next; 74310 #prev; 74311 #head; 74312 #tail; 74313 #free; 74314 #disposed; 74315 #sizes; 74316 #starts; 74317 #ttls; 74318 #hasDispose; 74319 #hasFetchMethod; 74320 #hasDisposeAfter; 74321 /** 74322 * Do not call this method unless you need to inspect the 74323 * inner workings of the cache. If anything returned by this 74324 * object is modified in any way, strange breakage may occur. 74325 * 74326 * These fields are private for a reason! 74327 * 74328 * @internal 74329 */ 74330 static unsafeExposeInternals(c) { 74331 return { 74332 // properties 74333 starts: c.#starts, 74334 ttls: c.#ttls, 74335 sizes: c.#sizes, 74336 keyMap: c.#keyMap, 74337 keyList: c.#keyList, 74338 valList: c.#valList, 74339 next: c.#next, 74340 prev: c.#prev, 74341 get head() { 74342 return c.#head; 74343 }, 74344 get tail() { 74345 return c.#tail; 74346 }, 74347 free: c.#free, 74348 // methods 74349 isBackgroundFetch: (p) => c.#isBackgroundFetch(p), 74350 backgroundFetch: (k, index, options, context) => c.#backgroundFetch(k, index, options, context), 74351 moveToTail: (index) => c.#moveToTail(index), 74352 indexes: (options) => c.#indexes(options), 74353 rindexes: (options) => c.#rindexes(options), 74354 isStale: (index) => c.#isStale(index), 74355 }; 74356 } 74357 // Protected read-only members 74358 /** 74359 * {@link LRUCache.OptionsBase.max} (read-only) 74360 */ 74361 get max() { 74362 return this.#max; 74363 } 74364 /** 74365 * {@link LRUCache.OptionsBase.maxSize} (read-only) 74366 */ 74367 get maxSize() { 74368 return this.#maxSize; 74369 } 74370 /** 74371 * The total computed size of items in the cache (read-only) 74372 */ 74373 get calculatedSize() { 74374 return this.#calculatedSize; 74375 } 74376 /** 74377 * The number of items stored in the cache (read-only) 74378 */ 74379 get size() { 74380 return this.#size; 74381 } 74382 /** 74383 * {@link LRUCache.OptionsBase.fetchMethod} (read-only) 74384 */ 74385 get fetchMethod() { 74386 return this.#fetchMethod; 74387 } 74388 /** 74389 * {@link LRUCache.OptionsBase.dispose} (read-only) 74390 */ 74391 get dispose() { 74392 return this.#dispose; 74393 } 74394 /** 74395 * {@link LRUCache.OptionsBase.disposeAfter} (read-only) 74396 */ 74397 get disposeAfter() { 74398 return this.#disposeAfter; 74399 } 74400 constructor(options) { 74401 const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort, } = options; 74402 if (max !== 0 && !isPosInt(max)) { 74403 throw new TypeError('max option must be a nonnegative integer'); 74404 } 74405 const UintArray = max ? getUintArray(max) : Array; 74406 if (!UintArray) { 74407 throw new Error('invalid max value: ' + max); 74408 } 74409 this.#max = max; 74410 this.#maxSize = maxSize; 74411 this.maxEntrySize = maxEntrySize || this.#maxSize; 74412 this.sizeCalculation = sizeCalculation; 74413 if (this.sizeCalculation) { 74414 if (!this.#maxSize && !this.maxEntrySize) { 74415 throw new TypeError('cannot set sizeCalculation without setting maxSize or maxEntrySize'); 74416 } 74417 if (typeof this.sizeCalculation !== 'function') { 74418 throw new TypeError('sizeCalculation set to non-function'); 74419 } 74420 } 74421 if (fetchMethod !== undefined && 74422 typeof fetchMethod !== 'function') { 74423 throw new TypeError('fetchMethod must be a function if specified'); 74424 } 74425 this.#fetchMethod = fetchMethod; 74426 this.#hasFetchMethod = !!fetchMethod; 74427 this.#keyMap = new Map(); 74428 this.#keyList = new Array(max).fill(undefined); 74429 this.#valList = new Array(max).fill(undefined); 74430 this.#next = new UintArray(max); 74431 this.#prev = new UintArray(max); 74432 this.#head = 0; 74433 this.#tail = 0; 74434 this.#free = Stack.create(max); 74435 this.#size = 0; 74436 this.#calculatedSize = 0; 74437 if (typeof dispose === 'function') { 74438 this.#dispose = dispose; 74439 } 74440 if (typeof disposeAfter === 'function') { 74441 this.#disposeAfter = disposeAfter; 74442 this.#disposed = []; 74443 } 74444 else { 74445 this.#disposeAfter = undefined; 74446 this.#disposed = undefined; 74447 } 74448 this.#hasDispose = !!this.#dispose; 74449 this.#hasDisposeAfter = !!this.#disposeAfter; 74450 this.noDisposeOnSet = !!noDisposeOnSet; 74451 this.noUpdateTTL = !!noUpdateTTL; 74452 this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection; 74453 this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection; 74454 this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort; 74455 this.ignoreFetchAbort = !!ignoreFetchAbort; 74456 // NB: maxEntrySize is set to maxSize if it's set 74457 if (this.maxEntrySize !== 0) { 74458 if (this.#maxSize !== 0) { 74459 if (!isPosInt(this.#maxSize)) { 74460 throw new TypeError('maxSize must be a positive integer if specified'); 74461 } 74462 } 74463 if (!isPosInt(this.maxEntrySize)) { 74464 throw new TypeError('maxEntrySize must be a positive integer if specified'); 74465 } 74466 this.#initializeSizeTracking(); 74467 } 74468 this.allowStale = !!allowStale; 74469 this.noDeleteOnStaleGet = !!noDeleteOnStaleGet; 74470 this.updateAgeOnGet = !!updateAgeOnGet; 74471 this.updateAgeOnHas = !!updateAgeOnHas; 74472 this.ttlResolution = 74473 isPosInt(ttlResolution) || ttlResolution === 0 74474 ? ttlResolution 74475 : 1; 74476 this.ttlAutopurge = !!ttlAutopurge; 74477 this.ttl = ttl || 0; 74478 if (this.ttl) { 74479 if (!isPosInt(this.ttl)) { 74480 throw new TypeError('ttl must be a positive integer if specified'); 74481 } 74482 this.#initializeTTLTracking(); 74483 } 74484 // do not allow completely unbounded caches 74485 if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) { 74486 throw new TypeError('At least one of max, maxSize, or ttl is required'); 74487 } 74488 if (!this.ttlAutopurge && !this.#max && !this.#maxSize) { 74489 const code = 'LRU_CACHE_UNBOUNDED'; 74490 if (shouldWarn(code)) { 74491 warned.add(code); 74492 const msg = 'TTL caching without ttlAutopurge, max, or maxSize can ' + 74493 'result in unbounded memory consumption.'; 74494 emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache); 74495 } 74496 } 74497 } 74498 /** 74499 * Return the remaining TTL time for a given entry key 74500 */ 74501 getRemainingTTL(key) { 74502 return this.#keyMap.has(key) ? Infinity : 0; 74503 } 74504 #initializeTTLTracking() { 74505 const ttls = new ZeroArray(this.#max); 74506 const starts = new ZeroArray(this.#max); 74507 this.#ttls = ttls; 74508 this.#starts = starts; 74509 this.#setItemTTL = (index, ttl, start = perf.now()) => { 74510 starts[index] = ttl !== 0 ? start : 0; 74511 ttls[index] = ttl; 74512 if (ttl !== 0 && this.ttlAutopurge) { 74513 const t = setTimeout(() => { 74514 if (this.#isStale(index)) { 74515 this.delete(this.#keyList[index]); 74516 } 74517 }, ttl + 1); 74518 // unref() not supported on all platforms 74519 /* c8 ignore start */ 74520 if (t.unref) { 74521 t.unref(); 74522 } 74523 /* c8 ignore stop */ 74524 } 74525 }; 74526 this.#updateItemAge = index => { 74527 starts[index] = ttls[index] !== 0 ? perf.now() : 0; 74528 }; 74529 this.#statusTTL = (status, index) => { 74530 if (ttls[index]) { 74531 const ttl = ttls[index]; 74532 const start = starts[index]; 74533 /* c8 ignore next */ 74534 if (!ttl || !start) 74535 return; 74536 status.ttl = ttl; 74537 status.start = start; 74538 status.now = cachedNow || getNow(); 74539 const age = status.now - start; 74540 status.remainingTTL = ttl - age; 74541 } 74542 }; 74543 // debounce calls to perf.now() to 1s so we're not hitting 74544 // that costly call repeatedly. 74545 let cachedNow = 0; 74546 const getNow = () => { 74547 const n = perf.now(); 74548 if (this.ttlResolution > 0) { 74549 cachedNow = n; 74550 const t = setTimeout(() => (cachedNow = 0), this.ttlResolution); 74551 // not available on all platforms 74552 /* c8 ignore start */ 74553 if (t.unref) { 74554 t.unref(); 74555 } 74556 /* c8 ignore stop */ 74557 } 74558 return n; 74559 }; 74560 this.getRemainingTTL = key => { 74561 const index = this.#keyMap.get(key); 74562 if (index === undefined) { 74563 return 0; 74564 } 74565 const ttl = ttls[index]; 74566 const start = starts[index]; 74567 if (!ttl || !start) { 74568 return Infinity; 74569 } 74570 const age = (cachedNow || getNow()) - start; 74571 return ttl - age; 74572 }; 74573 this.#isStale = index => { 74574 const s = starts[index]; 74575 const t = ttls[index]; 74576 return !!t && !!s && (cachedNow || getNow()) - s > t; 74577 }; 74578 } 74579 // conditionally set private methods related to TTL 74580 #updateItemAge = () => { }; 74581 #statusTTL = () => { }; 74582 #setItemTTL = () => { }; 74583 /* c8 ignore stop */ 74584 #isStale = () => false; 74585 #initializeSizeTracking() { 74586 const sizes = new ZeroArray(this.#max); 74587 this.#calculatedSize = 0; 74588 this.#sizes = sizes; 74589 this.#removeItemSize = index => { 74590 this.#calculatedSize -= sizes[index]; 74591 sizes[index] = 0; 74592 }; 74593 this.#requireSize = (k, v, size, sizeCalculation) => { 74594 // provisionally accept background fetches. 74595 // actual value size will be checked when they return. 74596 if (this.#isBackgroundFetch(v)) { 74597 return 0; 74598 } 74599 if (!isPosInt(size)) { 74600 if (sizeCalculation) { 74601 if (typeof sizeCalculation !== 'function') { 74602 throw new TypeError('sizeCalculation must be a function'); 74603 } 74604 size = sizeCalculation(v, k); 74605 if (!isPosInt(size)) { 74606 throw new TypeError('sizeCalculation return invalid (expect positive integer)'); 74607 } 74608 } 74609 else { 74610 throw new TypeError('invalid size value (must be positive integer). ' + 74611 'When maxSize or maxEntrySize is used, sizeCalculation ' + 74612 'or size must be set.'); 74613 } 74614 } 74615 return size; 74616 }; 74617 this.#addItemSize = (index, size, status) => { 74618 sizes[index] = size; 74619 if (this.#maxSize) { 74620 const maxSize = this.#maxSize - sizes[index]; 74621 while (this.#calculatedSize > maxSize) { 74622 this.#evict(true); 74623 } 74624 } 74625 this.#calculatedSize += sizes[index]; 74626 if (status) { 74627 status.entrySize = size; 74628 status.totalCalculatedSize = this.#calculatedSize; 74629 } 74630 }; 74631 } 74632 #removeItemSize = _i => { }; 74633 #addItemSize = (_i, _s, _st) => { }; 74634 #requireSize = (_k, _v, size, sizeCalculation) => { 74635 if (size || sizeCalculation) { 74636 throw new TypeError('cannot set size without setting maxSize or maxEntrySize on cache'); 74637 } 74638 return 0; 74639 }; 74640 *#indexes({ allowStale = this.allowStale } = {}) { 74641 if (this.#size) { 74642 for (let i = this.#tail; true;) { 74643 if (!this.#isValidIndex(i)) { 74644 break; 74645 } 74646 if (allowStale || !this.#isStale(i)) { 74647 yield i; 74648 } 74649 if (i === this.#head) { 74650 break; 74651 } 74652 else { 74653 i = this.#prev[i]; 74654 } 74655 } 74656 } 74657 } 74658 *#rindexes({ allowStale = this.allowStale } = {}) { 74659 if (this.#size) { 74660 for (let i = this.#head; true;) { 74661 if (!this.#isValidIndex(i)) { 74662 break; 74663 } 74664 if (allowStale || !this.#isStale(i)) { 74665 yield i; 74666 } 74667 if (i === this.#tail) { 74668 break; 74669 } 74670 else { 74671 i = this.#next[i]; 74672 } 74673 } 74674 } 74675 } 74676 #isValidIndex(index) { 74677 return (index !== undefined && 74678 this.#keyMap.get(this.#keyList[index]) === index); 74679 } 74680 /** 74681 * Return a generator yielding `[key, value]` pairs, 74682 * in order from most recently used to least recently used. 74683 */ 74684 *entries() { 74685 for (const i of this.#indexes()) { 74686 if (this.#valList[i] !== undefined && 74687 this.#keyList[i] !== undefined && 74688 !this.#isBackgroundFetch(this.#valList[i])) { 74689 yield [this.#keyList[i], this.#valList[i]]; 74690 } 74691 } 74692 } 74693 /** 74694 * Inverse order version of {@link LRUCache.entries} 74695 * 74696 * Return a generator yielding `[key, value]` pairs, 74697 * in order from least recently used to most recently used. 74698 */ 74699 *rentries() { 74700 for (const i of this.#rindexes()) { 74701 if (this.#valList[i] !== undefined && 74702 this.#keyList[i] !== undefined && 74703 !this.#isBackgroundFetch(this.#valList[i])) { 74704 yield [this.#keyList[i], this.#valList[i]]; 74705 } 74706 } 74707 } 74708 /** 74709 * Return a generator yielding the keys in the cache, 74710 * in order from most recently used to least recently used. 74711 */ 74712 *keys() { 74713 for (const i of this.#indexes()) { 74714 const k = this.#keyList[i]; 74715 if (k !== undefined && 74716 !this.#isBackgroundFetch(this.#valList[i])) { 74717 yield k; 74718 } 74719 } 74720 } 74721 /** 74722 * Inverse order version of {@link LRUCache.keys} 74723 * 74724 * Return a generator yielding the keys in the cache, 74725 * in order from least recently used to most recently used. 74726 */ 74727 *rkeys() { 74728 for (const i of this.#rindexes()) { 74729 const k = this.#keyList[i]; 74730 if (k !== undefined && 74731 !this.#isBackgroundFetch(this.#valList[i])) { 74732 yield k; 74733 } 74734 } 74735 } 74736 /** 74737 * Return a generator yielding the values in the cache, 74738 * in order from most recently used to least recently used. 74739 */ 74740 *values() { 74741 for (const i of this.#indexes()) { 74742 const v = this.#valList[i]; 74743 if (v !== undefined && 74744 !this.#isBackgroundFetch(this.#valList[i])) { 74745 yield this.#valList[i]; 74746 } 74747 } 74748 } 74749 /** 74750 * Inverse order version of {@link LRUCache.values} 74751 * 74752 * Return a generator yielding the values in the cache, 74753 * in order from least recently used to most recently used. 74754 */ 74755 *rvalues() { 74756 for (const i of this.#rindexes()) { 74757 const v = this.#valList[i]; 74758 if (v !== undefined && 74759 !this.#isBackgroundFetch(this.#valList[i])) { 74760 yield this.#valList[i]; 74761 } 74762 } 74763 } 74764 /** 74765 * Iterating over the cache itself yields the same results as 74766 * {@link LRUCache.entries} 74767 */ 74768 [Symbol.iterator]() { 74769 return this.entries(); 74770 } 74771 /** 74772 * A String value that is used in the creation of the default string description of an object. 74773 * Called by the built-in method Object.prototype.toString. 74774 */ 74775 [Symbol.toStringTag] = 'LRUCache'; 74776 /** 74777 * Find a value for which the supplied fn method returns a truthy value, 74778 * similar to Array.find(). fn is called as fn(value, key, cache). 74779 */ 74780 find(fn, getOptions = {}) { 74781 for (const i of this.#indexes()) { 74782 const v = this.#valList[i]; 74783 const value = this.#isBackgroundFetch(v) 74784 ? v.__staleWhileFetching 74785 : v; 74786 if (value === undefined) 74787 continue; 74788 if (fn(value, this.#keyList[i], this)) { 74789 return this.get(this.#keyList[i], getOptions); 74790 } 74791 } 74792 } 74793 /** 74794 * Call the supplied function on each item in the cache, in order from 74795 * most recently used to least recently used. fn is called as 74796 * fn(value, key, cache). Does not update age or recenty of use. 74797 * Does not iterate over stale values. 74798 */ 74799 forEach(fn, thisp = this) { 74800 for (const i of this.#indexes()) { 74801 const v = this.#valList[i]; 74802 const value = this.#isBackgroundFetch(v) 74803 ? v.__staleWhileFetching 74804 : v; 74805 if (value === undefined) 74806 continue; 74807 fn.call(thisp, value, this.#keyList[i], this); 74808 } 74809 } 74810 /** 74811 * The same as {@link LRUCache.forEach} but items are iterated over in 74812 * reverse order. (ie, less recently used items are iterated over first.) 74813 */ 74814 rforEach(fn, thisp = this) { 74815 for (const i of this.#rindexes()) { 74816 const v = this.#valList[i]; 74817 const value = this.#isBackgroundFetch(v) 74818 ? v.__staleWhileFetching 74819 : v; 74820 if (value === undefined) 74821 continue; 74822 fn.call(thisp, value, this.#keyList[i], this); 74823 } 74824 } 74825 /** 74826 * Delete any stale entries. Returns true if anything was removed, 74827 * false otherwise. 74828 */ 74829 purgeStale() { 74830 let deleted = false; 74831 for (const i of this.#rindexes({ allowStale: true })) { 74832 if (this.#isStale(i)) { 74833 this.delete(this.#keyList[i]); 74834 deleted = true; 74835 } 74836 } 74837 return deleted; 74838 } 74839 /** 74840 * Get the extended info about a given entry, to get its value, size, and 74841 * TTL info simultaneously. Like {@link LRUCache#dump}, but just for a 74842 * single key. Always returns stale values, if their info is found in the 74843 * cache, so be sure to check for expired TTLs if relevant. 74844 */ 74845 info(key) { 74846 const i = this.#keyMap.get(key); 74847 if (i === undefined) 74848 return undefined; 74849 const v = this.#valList[i]; 74850 const value = this.#isBackgroundFetch(v) 74851 ? v.__staleWhileFetching 74852 : v; 74853 if (value === undefined) 74854 return undefined; 74855 const entry = { value }; 74856 if (this.#ttls && this.#starts) { 74857 const ttl = this.#ttls[i]; 74858 const start = this.#starts[i]; 74859 if (ttl && start) { 74860 const remain = ttl - (perf.now() - start); 74861 entry.ttl = remain; 74862 entry.start = Date.now(); 74863 } 74864 } 74865 if (this.#sizes) { 74866 entry.size = this.#sizes[i]; 74867 } 74868 return entry; 74869 } 74870 /** 74871 * Return an array of [key, {@link LRUCache.Entry}] tuples which can be 74872 * passed to cache.load() 74873 */ 74874 dump() { 74875 const arr = []; 74876 for (const i of this.#indexes({ allowStale: true })) { 74877 const key = this.#keyList[i]; 74878 const v = this.#valList[i]; 74879 const value = this.#isBackgroundFetch(v) 74880 ? v.__staleWhileFetching 74881 : v; 74882 if (value === undefined || key === undefined) 74883 continue; 74884 const entry = { value }; 74885 if (this.#ttls && this.#starts) { 74886 entry.ttl = this.#ttls[i]; 74887 // always dump the start relative to a portable timestamp 74888 // it's ok for this to be a bit slow, it's a rare operation. 74889 const age = perf.now() - this.#starts[i]; 74890 entry.start = Math.floor(Date.now() - age); 74891 } 74892 if (this.#sizes) { 74893 entry.size = this.#sizes[i]; 74894 } 74895 arr.unshift([key, entry]); 74896 } 74897 return arr; 74898 } 74899 /** 74900 * Reset the cache and load in the items in entries in the order listed. 74901 * Note that the shape of the resulting cache may be different if the 74902 * same options are not used in both caches. 74903 */ 74904 load(arr) { 74905 this.clear(); 74906 for (const [key, entry] of arr) { 74907 if (entry.start) { 74908 // entry.start is a portable timestamp, but we may be using 74909 // node's performance.now(), so calculate the offset, so that 74910 // we get the intended remaining TTL, no matter how long it's 74911 // been on ice. 74912 // 74913 // it's ok for this to be a bit slow, it's a rare operation. 74914 const age = Date.now() - entry.start; 74915 entry.start = perf.now() - age; 74916 } 74917 this.set(key, entry.value, entry); 74918 } 74919 } 74920 /** 74921 * Add a value to the cache. 74922 * 74923 * Note: if `undefined` is specified as a value, this is an alias for 74924 * {@link LRUCache#delete} 74925 */ 74926 set(k, v, setOptions = {}) { 74927 if (v === undefined) { 74928 this.delete(k); 74929 return this; 74930 } 74931 const { ttl = this.ttl, start, noDisposeOnSet = this.noDisposeOnSet, sizeCalculation = this.sizeCalculation, status, } = setOptions; 74932 let { noUpdateTTL = this.noUpdateTTL } = setOptions; 74933 const size = this.#requireSize(k, v, setOptions.size || 0, sizeCalculation); 74934 // if the item doesn't fit, don't do anything 74935 // NB: maxEntrySize set to maxSize by default 74936 if (this.maxEntrySize && size > this.maxEntrySize) { 74937 if (status) { 74938 status.set = 'miss'; 74939 status.maxEntrySizeExceeded = true; 74940 } 74941 // have to delete, in case something is there already. 74942 this.delete(k); 74943 return this; 74944 } 74945 let index = this.#size === 0 ? undefined : this.#keyMap.get(k); 74946 if (index === undefined) { 74947 // addition 74948 index = (this.#size === 0 74949 ? this.#tail 74950 : this.#free.length !== 0 74951 ? this.#free.pop() 74952 : this.#size === this.#max 74953 ? this.#evict(false) 74954 : this.#size); 74955 this.#keyList[index] = k; 74956 this.#valList[index] = v; 74957 this.#keyMap.set(k, index); 74958 this.#next[this.#tail] = index; 74959 this.#prev[index] = this.#tail; 74960 this.#tail = index; 74961 this.#size++; 74962 this.#addItemSize(index, size, status); 74963 if (status) 74964 status.set = 'add'; 74965 noUpdateTTL = false; 74966 } 74967 else { 74968 // update 74969 this.#moveToTail(index); 74970 const oldVal = this.#valList[index]; 74971 if (v !== oldVal) { 74972 if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) { 74973 oldVal.__abortController.abort(new Error('replaced')); 74974 const { __staleWhileFetching: s } = oldVal; 74975 if (s !== undefined && !noDisposeOnSet) { 74976 if (this.#hasDispose) { 74977 this.#dispose?.(s, k, 'set'); 74978 } 74979 if (this.#hasDisposeAfter) { 74980 this.#disposed?.push([s, k, 'set']); 74981 } 74982 } 74983 } 74984 else if (!noDisposeOnSet) { 74985 if (this.#hasDispose) { 74986 this.#dispose?.(oldVal, k, 'set'); 74987 } 74988 if (this.#hasDisposeAfter) { 74989 this.#disposed?.push([oldVal, k, 'set']); 74990 } 74991 } 74992 this.#removeItemSize(index); 74993 this.#addItemSize(index, size, status); 74994 this.#valList[index] = v; 74995 if (status) { 74996 status.set = 'replace'; 74997 const oldValue = oldVal && this.#isBackgroundFetch(oldVal) 74998 ? oldVal.__staleWhileFetching 74999 : oldVal; 75000 if (oldValue !== undefined) 75001 status.oldValue = oldValue; 75002 } 75003 } 75004 else if (status) { 75005 status.set = 'update'; 75006 } 75007 } 75008 if (ttl !== 0 && !this.#ttls) { 75009 this.#initializeTTLTracking(); 75010 } 75011 if (this.#ttls) { 75012 if (!noUpdateTTL) { 75013 this.#setItemTTL(index, ttl, start); 75014 } 75015 if (status) 75016 this.#statusTTL(status, index); 75017 } 75018 if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) { 75019 const dt = this.#disposed; 75020 let task; 75021 while ((task = dt?.shift())) { 75022 this.#disposeAfter?.(...task); 75023 } 75024 } 75025 return this; 75026 } 75027 /** 75028 * Evict the least recently used item, returning its value or 75029 * `undefined` if cache is empty. 75030 */ 75031 pop() { 75032 try { 75033 while (this.#size) { 75034 const val = this.#valList[this.#head]; 75035 this.#evict(true); 75036 if (this.#isBackgroundFetch(val)) { 75037 if (val.__staleWhileFetching) { 75038 return val.__staleWhileFetching; 75039 } 75040 } 75041 else if (val !== undefined) { 75042 return val; 75043 } 75044 } 75045 } 75046 finally { 75047 if (this.#hasDisposeAfter && this.#disposed) { 75048 const dt = this.#disposed; 75049 let task; 75050 while ((task = dt?.shift())) { 75051 this.#disposeAfter?.(...task); 75052 } 75053 } 75054 } 75055 } 75056 #evict(free) { 75057 const head = this.#head; 75058 const k = this.#keyList[head]; 75059 const v = this.#valList[head]; 75060 if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) { 75061 v.__abortController.abort(new Error('evicted')); 75062 } 75063 else if (this.#hasDispose || this.#hasDisposeAfter) { 75064 if (this.#hasDispose) { 75065 this.#dispose?.(v, k, 'evict'); 75066 } 75067 if (this.#hasDisposeAfter) { 75068 this.#disposed?.push([v, k, 'evict']); 75069 } 75070 } 75071 this.#removeItemSize(head); 75072 // if we aren't about to use the index, then null these out 75073 if (free) { 75074 this.#keyList[head] = undefined; 75075 this.#valList[head] = undefined; 75076 this.#free.push(head); 75077 } 75078 if (this.#size === 1) { 75079 this.#head = this.#tail = 0; 75080 this.#free.length = 0; 75081 } 75082 else { 75083 this.#head = this.#next[head]; 75084 } 75085 this.#keyMap.delete(k); 75086 this.#size--; 75087 return head; 75088 } 75089 /** 75090 * Check if a key is in the cache, without updating the recency of use. 75091 * Will return false if the item is stale, even though it is technically 75092 * in the cache. 75093 * 75094 * Will not update item age unless 75095 * {@link LRUCache.OptionsBase.updateAgeOnHas} is set. 75096 */ 75097 has(k, hasOptions = {}) { 75098 const { updateAgeOnHas = this.updateAgeOnHas, status } = hasOptions; 75099 const index = this.#keyMap.get(k); 75100 if (index !== undefined) { 75101 const v = this.#valList[index]; 75102 if (this.#isBackgroundFetch(v) && 75103 v.__staleWhileFetching === undefined) { 75104 return false; 75105 } 75106 if (!this.#isStale(index)) { 75107 if (updateAgeOnHas) { 75108 this.#updateItemAge(index); 75109 } 75110 if (status) { 75111 status.has = 'hit'; 75112 this.#statusTTL(status, index); 75113 } 75114 return true; 75115 } 75116 else if (status) { 75117 status.has = 'stale'; 75118 this.#statusTTL(status, index); 75119 } 75120 } 75121 else if (status) { 75122 status.has = 'miss'; 75123 } 75124 return false; 75125 } 75126 /** 75127 * Like {@link LRUCache#get} but doesn't update recency or delete stale 75128 * items. 75129 * 75130 * Returns `undefined` if the item is stale, unless 75131 * {@link LRUCache.OptionsBase.allowStale} is set. 75132 */ 75133 peek(k, peekOptions = {}) { 75134 const { allowStale = this.allowStale } = peekOptions; 75135 const index = this.#keyMap.get(k); 75136 if (index === undefined || 75137 (!allowStale && this.#isStale(index))) { 75138 return; 75139 } 75140 const v = this.#valList[index]; 75141 // either stale and allowed, or forcing a refresh of non-stale value 75142 return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v; 75143 } 75144 #backgroundFetch(k, index, options, context) { 75145 const v = index === undefined ? undefined : this.#valList[index]; 75146 if (this.#isBackgroundFetch(v)) { 75147 return v; 75148 } 75149 const ac = new AC(); 75150 const { signal } = options; 75151 // when/if our AC signals, then stop listening to theirs. 75152 signal?.addEventListener('abort', () => ac.abort(signal.reason), { 75153 signal: ac.signal, 75154 }); 75155 const fetchOpts = { 75156 signal: ac.signal, 75157 options, 75158 context, 75159 }; 75160 const cb = (v, updateCache = false) => { 75161 const { aborted } = ac.signal; 75162 const ignoreAbort = options.ignoreFetchAbort && v !== undefined; 75163 if (options.status) { 75164 if (aborted && !updateCache) { 75165 options.status.fetchAborted = true; 75166 options.status.fetchError = ac.signal.reason; 75167 if (ignoreAbort) 75168 options.status.fetchAbortIgnored = true; 75169 } 75170 else { 75171 options.status.fetchResolved = true; 75172 } 75173 } 75174 if (aborted && !ignoreAbort && !updateCache) { 75175 return fetchFail(ac.signal.reason); 75176 } 75177 // either we didn't abort, and are still here, or we did, and ignored 75178 const bf = p; 75179 if (this.#valList[index] === p) { 75180 if (v === undefined) { 75181 if (bf.__staleWhileFetching) { 75182 this.#valList[index] = bf.__staleWhileFetching; 75183 } 75184 else { 75185 this.delete(k); 75186 } 75187 } 75188 else { 75189 if (options.status) 75190 options.status.fetchUpdated = true; 75191 this.set(k, v, fetchOpts.options); 75192 } 75193 } 75194 return v; 75195 }; 75196 const eb = (er) => { 75197 if (options.status) { 75198 options.status.fetchRejected = true; 75199 options.status.fetchError = er; 75200 } 75201 return fetchFail(er); 75202 }; 75203 const fetchFail = (er) => { 75204 const { aborted } = ac.signal; 75205 const allowStaleAborted = aborted && options.allowStaleOnFetchAbort; 75206 const allowStale = allowStaleAborted || options.allowStaleOnFetchRejection; 75207 const noDelete = allowStale || options.noDeleteOnFetchRejection; 75208 const bf = p; 75209 if (this.#valList[index] === p) { 75210 // if we allow stale on fetch rejections, then we need to ensure that 75211 // the stale value is not removed from the cache when the fetch fails. 75212 const del = !noDelete || bf.__staleWhileFetching === undefined; 75213 if (del) { 75214 this.delete(k); 75215 } 75216 else if (!allowStaleAborted) { 75217 // still replace the *promise* with the stale value, 75218 // since we are done with the promise at this point. 75219 // leave it untouched if we're still waiting for an 75220 // aborted background fetch that hasn't yet returned. 75221 this.#valList[index] = bf.__staleWhileFetching; 75222 } 75223 } 75224 if (allowStale) { 75225 if (options.status && bf.__staleWhileFetching !== undefined) { 75226 options.status.returnedStale = true; 75227 } 75228 return bf.__staleWhileFetching; 75229 } 75230 else if (bf.__returned === bf) { 75231 throw er; 75232 } 75233 }; 75234 const pcall = (res, rej) => { 75235 const fmp = this.#fetchMethod?.(k, v, fetchOpts); 75236 if (fmp && fmp instanceof Promise) { 75237 fmp.then(v => res(v === undefined ? undefined : v), rej); 75238 } 75239 // ignored, we go until we finish, regardless. 75240 // defer check until we are actually aborting, 75241 // so fetchMethod can override. 75242 ac.signal.addEventListener('abort', () => { 75243 if (!options.ignoreFetchAbort || 75244 options.allowStaleOnFetchAbort) { 75245 res(undefined); 75246 // when it eventually resolves, update the cache. 75247 if (options.allowStaleOnFetchAbort) { 75248 res = v => cb(v, true); 75249 } 75250 } 75251 }); 75252 }; 75253 if (options.status) 75254 options.status.fetchDispatched = true; 75255 const p = new Promise(pcall).then(cb, eb); 75256 const bf = Object.assign(p, { 75257 __abortController: ac, 75258 __staleWhileFetching: v, 75259 __returned: undefined, 75260 }); 75261 if (index === undefined) { 75262 // internal, don't expose status. 75263 this.set(k, bf, { ...fetchOpts.options, status: undefined }); 75264 index = this.#keyMap.get(k); 75265 } 75266 else { 75267 this.#valList[index] = bf; 75268 } 75269 return bf; 75270 } 75271 #isBackgroundFetch(p) { 75272 if (!this.#hasFetchMethod) 75273 return false; 75274 const b = p; 75275 return (!!b && 75276 b instanceof Promise && 75277 b.hasOwnProperty('__staleWhileFetching') && 75278 b.__abortController instanceof AC); 75279 } 75280 async fetch(k, fetchOptions = {}) { 75281 const { 75282 // get options 75283 allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, 75284 // set options 75285 ttl = this.ttl, noDisposeOnSet = this.noDisposeOnSet, size = 0, sizeCalculation = this.sizeCalculation, noUpdateTTL = this.noUpdateTTL, 75286 // fetch exclusive options 75287 noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, allowStaleOnFetchRejection = this.allowStaleOnFetchRejection, ignoreFetchAbort = this.ignoreFetchAbort, allowStaleOnFetchAbort = this.allowStaleOnFetchAbort, context, forceRefresh = false, status, signal, } = fetchOptions; 75288 if (!this.#hasFetchMethod) { 75289 if (status) 75290 status.fetch = 'get'; 75291 return this.get(k, { 75292 allowStale, 75293 updateAgeOnGet, 75294 noDeleteOnStaleGet, 75295 status, 75296 }); 75297 } 75298 const options = { 75299 allowStale, 75300 updateAgeOnGet, 75301 noDeleteOnStaleGet, 75302 ttl, 75303 noDisposeOnSet, 75304 size, 75305 sizeCalculation, 75306 noUpdateTTL, 75307 noDeleteOnFetchRejection, 75308 allowStaleOnFetchRejection, 75309 allowStaleOnFetchAbort, 75310 ignoreFetchAbort, 75311 status, 75312 signal, 75313 }; 75314 let index = this.#keyMap.get(k); 75315 if (index === undefined) { 75316 if (status) 75317 status.fetch = 'miss'; 75318 const p = this.#backgroundFetch(k, index, options, context); 75319 return (p.__returned = p); 75320 } 75321 else { 75322 // in cache, maybe already fetching 75323 const v = this.#valList[index]; 75324 if (this.#isBackgroundFetch(v)) { 75325 const stale = allowStale && v.__staleWhileFetching !== undefined; 75326 if (status) { 75327 status.fetch = 'inflight'; 75328 if (stale) 75329 status.returnedStale = true; 75330 } 75331 return stale ? v.__staleWhileFetching : (v.__returned = v); 75332 } 75333 // if we force a refresh, that means do NOT serve the cached value, 75334 // unless we are already in the process of refreshing the cache. 75335 const isStale = this.#isStale(index); 75336 if (!forceRefresh && !isStale) { 75337 if (status) 75338 status.fetch = 'hit'; 75339 this.#moveToTail(index); 75340 if (updateAgeOnGet) { 75341 this.#updateItemAge(index); 75342 } 75343 if (status) 75344 this.#statusTTL(status, index); 75345 return v; 75346 } 75347 // ok, it is stale or a forced refresh, and not already fetching. 75348 // refresh the cache. 75349 const p = this.#backgroundFetch(k, index, options, context); 75350 const hasStale = p.__staleWhileFetching !== undefined; 75351 const staleVal = hasStale && allowStale; 75352 if (status) { 75353 status.fetch = isStale ? 'stale' : 'refresh'; 75354 if (staleVal && isStale) 75355 status.returnedStale = true; 75356 } 75357 return staleVal ? p.__staleWhileFetching : (p.__returned = p); 75358 } 75359 } 75360 /** 75361 * Return a value from the cache. Will update the recency of the cache 75362 * entry found. 75363 * 75364 * If the key is not found, get() will return `undefined`. 75365 */ 75366 get(k, getOptions = {}) { 75367 const { allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, status, } = getOptions; 75368 const index = this.#keyMap.get(k); 75369 if (index !== undefined) { 75370 const value = this.#valList[index]; 75371 const fetching = this.#isBackgroundFetch(value); 75372 if (status) 75373 this.#statusTTL(status, index); 75374 if (this.#isStale(index)) { 75375 if (status) 75376 status.get = 'stale'; 75377 // delete only if not an in-flight background fetch 75378 if (!fetching) { 75379 if (!noDeleteOnStaleGet) { 75380 this.delete(k); 75381 } 75382 if (status && allowStale) 75383 status.returnedStale = true; 75384 return allowStale ? value : undefined; 75385 } 75386 else { 75387 if (status && 75388 allowStale && 75389 value.__staleWhileFetching !== undefined) { 75390 status.returnedStale = true; 75391 } 75392 return allowStale ? value.__staleWhileFetching : undefined; 75393 } 75394 } 75395 else { 75396 if (status) 75397 status.get = 'hit'; 75398 // if we're currently fetching it, we don't actually have it yet 75399 // it's not stale, which means this isn't a staleWhileRefetching. 75400 // If it's not stale, and fetching, AND has a __staleWhileFetching 75401 // value, then that means the user fetched with {forceRefresh:true}, 75402 // so it's safe to return that value. 75403 if (fetching) { 75404 return value.__staleWhileFetching; 75405 } 75406 this.#moveToTail(index); 75407 if (updateAgeOnGet) { 75408 this.#updateItemAge(index); 75409 } 75410 return value; 75411 } 75412 } 75413 else if (status) { 75414 status.get = 'miss'; 75415 } 75416 } 75417 #connect(p, n) { 75418 this.#prev[n] = p; 75419 this.#next[p] = n; 75420 } 75421 #moveToTail(index) { 75422 // if tail already, nothing to do 75423 // if head, move head to next[index] 75424 // else 75425 // move next[prev[index]] to next[index] (head has no prev) 75426 // move prev[next[index]] to prev[index] 75427 // prev[index] = tail 75428 // next[tail] = index 75429 // tail = index 75430 if (index !== this.#tail) { 75431 if (index === this.#head) { 75432 this.#head = this.#next[index]; 75433 } 75434 else { 75435 this.#connect(this.#prev[index], this.#next[index]); 75436 } 75437 this.#connect(this.#tail, index); 75438 this.#tail = index; 75439 } 75440 } 75441 /** 75442 * Deletes a key out of the cache. 75443 * Returns true if the key was deleted, false otherwise. 75444 */ 75445 delete(k) { 75446 let deleted = false; 75447 if (this.#size !== 0) { 75448 const index = this.#keyMap.get(k); 75449 if (index !== undefined) { 75450 deleted = true; 75451 if (this.#size === 1) { 75452 this.clear(); 75453 } 75454 else { 75455 this.#removeItemSize(index); 75456 const v = this.#valList[index]; 75457 if (this.#isBackgroundFetch(v)) { 75458 v.__abortController.abort(new Error('deleted')); 75459 } 75460 else if (this.#hasDispose || this.#hasDisposeAfter) { 75461 if (this.#hasDispose) { 75462 this.#dispose?.(v, k, 'delete'); 75463 } 75464 if (this.#hasDisposeAfter) { 75465 this.#disposed?.push([v, k, 'delete']); 75466 } 75467 } 75468 this.#keyMap.delete(k); 75469 this.#keyList[index] = undefined; 75470 this.#valList[index] = undefined; 75471 if (index === this.#tail) { 75472 this.#tail = this.#prev[index]; 75473 } 75474 else if (index === this.#head) { 75475 this.#head = this.#next[index]; 75476 } 75477 else { 75478 const pi = this.#prev[index]; 75479 this.#next[pi] = this.#next[index]; 75480 const ni = this.#next[index]; 75481 this.#prev[ni] = this.#prev[index]; 75482 } 75483 this.#size--; 75484 this.#free.push(index); 75485 } 75486 } 75487 } 75488 if (this.#hasDisposeAfter && this.#disposed?.length) { 75489 const dt = this.#disposed; 75490 let task; 75491 while ((task = dt?.shift())) { 75492 this.#disposeAfter?.(...task); 75493 } 75494 } 75495 return deleted; 75496 } 75497 /** 75498 * Clear the cache entirely, throwing away all values. 75499 */ 75500 clear() { 75501 for (const index of this.#rindexes({ allowStale: true })) { 75502 const v = this.#valList[index]; 75503 if (this.#isBackgroundFetch(v)) { 75504 v.__abortController.abort(new Error('deleted')); 75505 } 75506 else { 75507 const k = this.#keyList[index]; 75508 if (this.#hasDispose) { 75509 this.#dispose?.(v, k, 'delete'); 75510 } 75511 if (this.#hasDisposeAfter) { 75512 this.#disposed?.push([v, k, 'delete']); 75513 } 75514 } 75515 } 75516 this.#keyMap.clear(); 75517 this.#valList.fill(undefined); 75518 this.#keyList.fill(undefined); 75519 if (this.#ttls && this.#starts) { 75520 this.#ttls.fill(0); 75521 this.#starts.fill(0); 75522 } 75523 if (this.#sizes) { 75524 this.#sizes.fill(0); 75525 } 75526 this.#head = 0; 75527 this.#tail = 0; 75528 this.#free.length = 0; 75529 this.#calculatedSize = 0; 75530 this.#size = 0; 75531 if (this.#hasDisposeAfter && this.#disposed) { 75532 const dt = this.#disposed; 75533 let task; 75534 while ((task = dt?.shift())) { 75535 this.#disposeAfter?.(...task); 75536 } 75537 } 75538 } 75539 } 75540 exports.LRUCache = LRUCache; 75541 //# sourceMappingURL=index.js.map 75542 75543 /***/ }), 75544 75545 /***/ 43691: 75546 /***/ ((__unused_webpack_module, exports) => { 75547 75548 "use strict"; 75549 75550 Object.defineProperty(exports, "__esModule", ({ value: true })); 75551 exports.assertValidPattern = void 0; 75552 const MAX_PATTERN_LENGTH = 1024 * 64; 75553 const assertValidPattern = (pattern) => { 75554 if (typeof pattern !== 'string') { 75555 throw new TypeError('invalid pattern'); 75556 } 75557 if (pattern.length > MAX_PATTERN_LENGTH) { 75558 throw new TypeError('pattern is too long'); 75559 } 75560 }; 75561 exports.assertValidPattern = assertValidPattern; 75562 //# sourceMappingURL=assert-valid-pattern.js.map 75563 75564 /***/ }), 75565 75566 /***/ 99262: 75567 /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { 75568 75569 "use strict"; 75570 75571 // parse a single path portion 75572 Object.defineProperty(exports, "__esModule", ({ value: true })); 75573 exports.AST = void 0; 75574 const brace_expressions_js_1 = __nccwpck_require__(33542); 75575 const unescape_js_1 = __nccwpck_require__(13704); 75576 const types = new Set(['!', '?', '+', '*', '@']); 75577 const isExtglobType = (c) => types.has(c); 75578 // Patterns that get prepended to bind to the start of either the 75579 // entire string, or just a single path portion, to prevent dots 75580 // and/or traversal patterns, when needed. 75581 // Exts don't need the ^ or / bit, because the root binds that already. 75582 const startNoTraversal = '(?!(?:^|/)\\.\\.?(?:$|/))'; 75583 const startNoDot = '(?!\\.)'; 75584 // characters that indicate a start of pattern needs the "no dots" bit, 75585 // because a dot *might* be matched. ( is not in the list, because in 75586 // the case of a child extglob, it will handle the prevention itself. 75587 const addPatternStart = new Set(['[', '.']); 75588 // cases where traversal is A-OK, no dot prevention needed 75589 const justDots = new Set(['..', '.']); 75590 const reSpecials = new Set('().*{}+?[]^$\\!'); 75591 const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); 75592 // any single thing other than / 75593 const qmark = '[^/]'; 75594 // * => any number of characters 75595 const star = qmark + '*?'; 75596 // use + when we need to ensure that *something* matches, because the * is 75597 // the only thing in the path portion. 75598 const starNoEmpty = qmark + '+?'; 75599 // remove the \ chars that we added if we end up doing a nonmagic compare 75600 // const deslash = (s: string) => s.replace(/\\(.)/g, '$1') 75601 class AST { 75602 type; 75603 #root; 75604 #hasMagic; 75605 #uflag = false; 75606 #parts = []; 75607 #parent; 75608 #parentIndex; 75609 #negs; 75610 #filledNegs = false; 75611 #options; 75612 #toString; 75613 // set to true if it's an extglob with no children 75614 // (which really means one child of '') 75615 #emptyExt = false; 75616 constructor(type, parent, options = {}) { 75617 this.type = type; 75618 // extglobs are inherently magical 75619 if (type) 75620 this.#hasMagic = true; 75621 this.#parent = parent; 75622 this.#root = this.#parent ? this.#parent.#root : this; 75623 this.#options = this.#root === this ? options : this.#root.#options; 75624 this.#negs = this.#root === this ? [] : this.#root.#negs; 75625 if (type === '!' && !this.#root.#filledNegs) 75626 this.#negs.push(this); 75627 this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0; 75628 } 75629 get hasMagic() { 75630 /* c8 ignore start */ 75631 if (this.#hasMagic !== undefined) 75632 return this.#hasMagic; 75633 /* c8 ignore stop */ 75634 for (const p of this.#parts) { 75635 if (typeof p === 'string') 75636 continue; 75637 if (p.type || p.hasMagic) 75638 return (this.#hasMagic = true); 75639 } 75640 // note: will be undefined until we generate the regexp src and find out 75641 return this.#hasMagic; 75642 } 75643 // reconstructs the pattern 75644 toString() { 75645 if (this.#toString !== undefined) 75646 return this.#toString; 75647 if (!this.type) { 75648 return (this.#toString = this.#parts.map(p => String(p)).join('')); 75649 } 75650 else { 75651 return (this.#toString = 75652 this.type + '(' + this.#parts.map(p => String(p)).join('|') + ')'); 75653 } 75654 } 75655 #fillNegs() { 75656 /* c8 ignore start */ 75657 if (this !== this.#root) 75658 throw new Error('should only call on root'); 75659 if (this.#filledNegs) 75660 return this; 75661 /* c8 ignore stop */ 75662 // call toString() once to fill this out 75663 this.toString(); 75664 this.#filledNegs = true; 75665 let n; 75666 while ((n = this.#negs.pop())) { 75667 if (n.type !== '!') 75668 continue; 75669 // walk up the tree, appending everthing that comes AFTER parentIndex 75670 let p = n; 75671 let pp = p.#parent; 75672 while (pp) { 75673 for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) { 75674 for (const part of n.#parts) { 75675 /* c8 ignore start */ 75676 if (typeof part === 'string') { 75677 throw new Error('string part in extglob AST??'); 75678 } 75679 /* c8 ignore stop */ 75680 part.copyIn(pp.#parts[i]); 75681 } 75682 } 75683 p = pp; 75684 pp = p.#parent; 75685 } 75686 } 75687 return this; 75688 } 75689 push(...parts) { 75690 for (const p of parts) { 75691 if (p === '') 75692 continue; 75693 /* c8 ignore start */ 75694 if (typeof p !== 'string' && !(p instanceof AST && p.#parent === this)) { 75695 throw new Error('invalid part: ' + p); 75696 } 75697 /* c8 ignore stop */ 75698 this.#parts.push(p); 75699 } 75700 } 75701 toJSON() { 75702 const ret = this.type === null 75703 ? this.#parts.slice().map(p => (typeof p === 'string' ? p : p.toJSON())) 75704 : [this.type, ...this.#parts.map(p => p.toJSON())]; 75705 if (this.isStart() && !this.type) 75706 ret.unshift([]); 75707 if (this.isEnd() && 75708 (this === this.#root || 75709 (this.#root.#filledNegs && this.#parent?.type === '!'))) { 75710 ret.push({}); 75711 } 75712 return ret; 75713 } 75714 isStart() { 75715 if (this.#root === this) 75716 return true; 75717 // if (this.type) return !!this.#parent?.isStart() 75718 if (!this.#parent?.isStart()) 75719 return false; 75720 if (this.#parentIndex === 0) 75721 return true; 75722 // if everything AHEAD of this is a negation, then it's still the "start" 75723 const p = this.#parent; 75724 for (let i = 0; i < this.#parentIndex; i++) { 75725 const pp = p.#parts[i]; 75726 if (!(pp instanceof AST && pp.type === '!')) { 75727 return false; 75728 } 75729 } 75730 return true; 75731 } 75732 isEnd() { 75733 if (this.#root === this) 75734 return true; 75735 if (this.#parent?.type === '!') 75736 return true; 75737 if (!this.#parent?.isEnd()) 75738 return false; 75739 if (!this.type) 75740 return this.#parent?.isEnd(); 75741 // if not root, it'll always have a parent 75742 /* c8 ignore start */ 75743 const pl = this.#parent ? this.#parent.#parts.length : 0; 75744 /* c8 ignore stop */ 75745 return this.#parentIndex === pl - 1; 75746 } 75747 copyIn(part) { 75748 if (typeof part === 'string') 75749 this.push(part); 75750 else 75751 this.push(part.clone(this)); 75752 } 75753 clone(parent) { 75754 const c = new AST(this.type, parent); 75755 for (const p of this.#parts) { 75756 c.copyIn(p); 75757 } 75758 return c; 75759 } 75760 static #parseAST(str, ast, pos, opt) { 75761 let escaping = false; 75762 let inBrace = false; 75763 let braceStart = -1; 75764 let braceNeg = false; 75765 if (ast.type === null) { 75766 // outside of a extglob, append until we find a start 75767 let i = pos; 75768 let acc = ''; 75769 while (i < str.length) { 75770 const c = str.charAt(i++); 75771 // still accumulate escapes at this point, but we do ignore 75772 // starts that are escaped 75773 if (escaping || c === '\\') { 75774 escaping = !escaping; 75775 acc += c; 75776 continue; 75777 } 75778 if (inBrace) { 75779 if (i === braceStart + 1) { 75780 if (c === '^' || c === '!') { 75781 braceNeg = true; 75782 } 75783 } 75784 else if (c === ']' && !(i === braceStart + 2 && braceNeg)) { 75785 inBrace = false; 75786 } 75787 acc += c; 75788 continue; 75789 } 75790 else if (c === '[') { 75791 inBrace = true; 75792 braceStart = i; 75793 braceNeg = false; 75794 acc += c; 75795 continue; 75796 } 75797 if (!opt.noext && isExtglobType(c) && str.charAt(i) === '(') { 75798 ast.push(acc); 75799 acc = ''; 75800 const ext = new AST(c, ast); 75801 i = AST.#parseAST(str, ext, i, opt); 75802 ast.push(ext); 75803 continue; 75804 } 75805 acc += c; 75806 } 75807 ast.push(acc); 75808 return i; 75809 } 75810 // some kind of extglob, pos is at the ( 75811 // find the next | or ) 75812 let i = pos + 1; 75813 let part = new AST(null, ast); 75814 const parts = []; 75815 let acc = ''; 75816 while (i < str.length) { 75817 const c = str.charAt(i++); 75818 // still accumulate escapes at this point, but we do ignore 75819 // starts that are escaped 75820 if (escaping || c === '\\') { 75821 escaping = !escaping; 75822 acc += c; 75823 continue; 75824 } 75825 if (inBrace) { 75826 if (i === braceStart + 1) { 75827 if (c === '^' || c === '!') { 75828 braceNeg = true; 75829 } 75830 } 75831 else if (c === ']' && !(i === braceStart + 2 && braceNeg)) { 75832 inBrace = false; 75833 } 75834 acc += c; 75835 continue; 75836 } 75837 else if (c === '[') { 75838 inBrace = true; 75839 braceStart = i; 75840 braceNeg = false; 75841 acc += c; 75842 continue; 75843 } 75844 if (isExtglobType(c) && str.charAt(i) === '(') { 75845 part.push(acc); 75846 acc = ''; 75847 const ext = new AST(c, part); 75848 part.push(ext); 75849 i = AST.#parseAST(str, ext, i, opt); 75850 continue; 75851 } 75852 if (c === '|') { 75853 part.push(acc); 75854 acc = ''; 75855 parts.push(part); 75856 part = new AST(null, ast); 75857 continue; 75858 } 75859 if (c === ')') { 75860 if (acc === '' && ast.#parts.length === 0) { 75861 ast.#emptyExt = true; 75862 } 75863 part.push(acc); 75864 acc = ''; 75865 ast.push(...parts, part); 75866 return i; 75867 } 75868 acc += c; 75869 } 75870 // unfinished extglob 75871 // if we got here, it was a malformed extglob! not an extglob, but 75872 // maybe something else in there. 75873 ast.type = null; 75874 ast.#hasMagic = undefined; 75875 ast.#parts = [str.substring(pos - 1)]; 75876 return i; 75877 } 75878 static fromGlob(pattern, options = {}) { 75879 const ast = new AST(null, undefined, options); 75880 AST.#parseAST(pattern, ast, 0, options); 75881 return ast; 75882 } 75883 // returns the regular expression if there's magic, or the unescaped 75884 // string if not. 75885 toMMPattern() { 75886 // should only be called on root 75887 /* c8 ignore start */ 75888 if (this !== this.#root) 75889 return this.#root.toMMPattern(); 75890 /* c8 ignore stop */ 75891 const glob = this.toString(); 75892 const [re, body, hasMagic, uflag] = this.toRegExpSource(); 75893 // if we're in nocase mode, and not nocaseMagicOnly, then we do 75894 // still need a regular expression if we have to case-insensitively 75895 // match capital/lowercase characters. 75896 const anyMagic = hasMagic || 75897 this.#hasMagic || 75898 (this.#options.nocase && 75899 !this.#options.nocaseMagicOnly && 75900 glob.toUpperCase() !== glob.toLowerCase()); 75901 if (!anyMagic) { 75902 return body; 75903 } 75904 const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : ''); 75905 return Object.assign(new RegExp(`^${re}$`, flags), { 75906 _src: re, 75907 _glob: glob, 75908 }); 75909 } 75910 // returns the string match, the regexp source, whether there's magic 75911 // in the regexp (so a regular expression is required) and whether or 75912 // not the uflag is needed for the regular expression (for posix classes) 75913 // TODO: instead of injecting the start/end at this point, just return 75914 // the BODY of the regexp, along with the start/end portions suitable 75915 // for binding the start/end in either a joined full-path makeRe context 75916 // (where we bind to (^|/), or a standalone matchPart context (where 75917 // we bind to ^, and not /). Otherwise slashes get duped! 75918 // 75919 // In part-matching mode, the start is: 75920 // - if not isStart: nothing 75921 // - if traversal possible, but not allowed: ^(?!\.\.?$) 75922 // - if dots allowed or not possible: ^ 75923 // - if dots possible and not allowed: ^(?!\.) 75924 // end is: 75925 // - if not isEnd(): nothing 75926 // - else: $ 75927 // 75928 // In full-path matching mode, we put the slash at the START of the 75929 // pattern, so start is: 75930 // - if first pattern: same as part-matching mode 75931 // - if not isStart(): nothing 75932 // - if traversal possible, but not allowed: /(?!\.\.?(?:$|/)) 75933 // - if dots allowed or not possible: / 75934 // - if dots possible and not allowed: /(?!\.) 75935 // end is: 75936 // - if last pattern, same as part-matching mode 75937 // - else nothing 75938 // 75939 // Always put the (?:$|/) on negated tails, though, because that has to be 75940 // there to bind the end of the negated pattern portion, and it's easier to 75941 // just stick it in now rather than try to inject it later in the middle of 75942 // the pattern. 75943 // 75944 // We can just always return the same end, and leave it up to the caller 75945 // to know whether it's going to be used joined or in parts. 75946 // And, if the start is adjusted slightly, can do the same there: 75947 // - if not isStart: nothing 75948 // - if traversal possible, but not allowed: (?:/|^)(?!\.\.?$) 75949 // - if dots allowed or not possible: (?:/|^) 75950 // - if dots possible and not allowed: (?:/|^)(?!\.) 75951 // 75952 // But it's better to have a simpler binding without a conditional, for 75953 // performance, so probably better to return both start options. 75954 // 75955 // Then the caller just ignores the end if it's not the first pattern, 75956 // and the start always gets applied. 75957 // 75958 // But that's always going to be $ if it's the ending pattern, or nothing, 75959 // so the caller can just attach $ at the end of the pattern when building. 75960 // 75961 // So the todo is: 75962 // - better detect what kind of start is needed 75963 // - return both flavors of starting pattern 75964 // - attach $ at the end of the pattern when creating the actual RegExp 75965 // 75966 // Ah, but wait, no, that all only applies to the root when the first pattern 75967 // is not an extglob. If the first pattern IS an extglob, then we need all 75968 // that dot prevention biz to live in the extglob portions, because eg 75969 // +(*|.x*) can match .xy but not .yx. 75970 // 75971 // So, return the two flavors if it's #root and the first child is not an 75972 // AST, otherwise leave it to the child AST to handle it, and there, 75973 // use the (?:^|/) style of start binding. 75974 // 75975 // Even simplified further: 75976 // - Since the start for a join is eg /(?!\.) and the start for a part 75977 // is ^(?!\.), we can just prepend (?!\.) to the pattern (either root 75978 // or start or whatever) and prepend ^ or / at the Regexp construction. 75979 toRegExpSource(allowDot) { 75980 const dot = allowDot ?? !!this.#options.dot; 75981 if (this.#root === this) 75982 this.#fillNegs(); 75983 if (!this.type) { 75984 const noEmpty = this.isStart() && this.isEnd(); 75985 const src = this.#parts 75986 .map(p => { 75987 const [re, _, hasMagic, uflag] = typeof p === 'string' 75988 ? AST.#parseGlob(p, this.#hasMagic, noEmpty) 75989 : p.toRegExpSource(allowDot); 75990 this.#hasMagic = this.#hasMagic || hasMagic; 75991 this.#uflag = this.#uflag || uflag; 75992 return re; 75993 }) 75994 .join(''); 75995 let start = ''; 75996 if (this.isStart()) { 75997 if (typeof this.#parts[0] === 'string') { 75998 // this is the string that will match the start of the pattern, 75999 // so we need to protect against dots and such. 76000 // '.' and '..' cannot match unless the pattern is that exactly, 76001 // even if it starts with . or dot:true is set. 76002 const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]); 76003 if (!dotTravAllowed) { 76004 const aps = addPatternStart; 76005 // check if we have a possibility of matching . or .., 76006 // and prevent that. 76007 const needNoTrav = 76008 // dots are allowed, and the pattern starts with [ or . 76009 (dot && aps.has(src.charAt(0))) || 76010 // the pattern starts with \., and then [ or . 76011 (src.startsWith('\\.') && aps.has(src.charAt(2))) || 76012 // the pattern starts with \.\., and then [ or . 76013 (src.startsWith('\\.\\.') && aps.has(src.charAt(4))); 76014 // no need to prevent dots if it can't match a dot, or if a 76015 // sub-pattern will be preventing it anyway. 76016 const needNoDot = !dot && !allowDot && aps.has(src.charAt(0)); 76017 start = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : ''; 76018 } 76019 } 76020 } 76021 // append the "end of path portion" pattern to negation tails 76022 let end = ''; 76023 if (this.isEnd() && 76024 this.#root.#filledNegs && 76025 this.#parent?.type === '!') { 76026 end = '(?:$|\\/)'; 76027 } 76028 const final = start + src + end; 76029 return [ 76030 final, 76031 (0, unescape_js_1.unescape)(src), 76032 (this.#hasMagic = !!this.#hasMagic), 76033 this.#uflag, 76034 ]; 76035 } 76036 // We need to calculate the body *twice* if it's a repeat pattern 76037 // at the start, once in nodot mode, then again in dot mode, so a 76038 // pattern like *(?) can match 'x.y' 76039 const repeated = this.type === '*' || this.type === '+'; 76040 // some kind of extglob 76041 const start = this.type === '!' ? '(?:(?!(?:' : '(?:'; 76042 let body = this.#partsToRegExp(dot); 76043 if (this.isStart() && this.isEnd() && !body && this.type !== '!') { 76044 // invalid extglob, has to at least be *something* present, if it's 76045 // the entire path portion. 76046 const s = this.toString(); 76047 this.#parts = [s]; 76048 this.type = null; 76049 this.#hasMagic = undefined; 76050 return [s, (0, unescape_js_1.unescape)(this.toString()), false, false]; 76051 } 76052 // XXX abstract out this map method 76053 let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot 76054 ? '' 76055 : this.#partsToRegExp(true); 76056 if (bodyDotAllowed === body) { 76057 bodyDotAllowed = ''; 76058 } 76059 if (bodyDotAllowed) { 76060 body = `(?:${body})(?:${bodyDotAllowed})*?`; 76061 } 76062 // an empty !() is exactly equivalent to a starNoEmpty 76063 let final = ''; 76064 if (this.type === '!' && this.#emptyExt) { 76065 final = (this.isStart() && !dot ? startNoDot : '') + starNoEmpty; 76066 } 76067 else { 76068 const close = this.type === '!' 76069 ? // !() must match something,but !(x) can match '' 76070 '))' + 76071 (this.isStart() && !dot && !allowDot ? startNoDot : '') + 76072 star + 76073 ')' 76074 : this.type === '@' 76075 ? ')' 76076 : this.type === '?' 76077 ? ')?' 76078 : this.type === '+' && bodyDotAllowed 76079 ? ')' 76080 : this.type === '*' && bodyDotAllowed 76081 ? `)?` 76082 : `)${this.type}`; 76083 final = start + body + close; 76084 } 76085 return [ 76086 final, 76087 (0, unescape_js_1.unescape)(body), 76088 (this.#hasMagic = !!this.#hasMagic), 76089 this.#uflag, 76090 ]; 76091 } 76092 #partsToRegExp(dot) { 76093 return this.#parts 76094 .map(p => { 76095 // extglob ASTs should only contain parent ASTs 76096 /* c8 ignore start */ 76097 if (typeof p === 'string') { 76098 throw new Error('string type in extglob ast??'); 76099 } 76100 /* c8 ignore stop */ 76101 // can ignore hasMagic, because extglobs are already always magic 76102 const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot); 76103 this.#uflag = this.#uflag || uflag; 76104 return re; 76105 }) 76106 .filter(p => !(this.isStart() && this.isEnd()) || !!p) 76107 .join('|'); 76108 } 76109 static #parseGlob(glob, hasMagic, noEmpty = false) { 76110 let escaping = false; 76111 let re = ''; 76112 let uflag = false; 76113 for (let i = 0; i < glob.length; i++) { 76114 const c = glob.charAt(i); 76115 if (escaping) { 76116 escaping = false; 76117 re += (reSpecials.has(c) ? '\\' : '') + c; 76118 continue; 76119 } 76120 if (c === '\\') { 76121 if (i === glob.length - 1) { 76122 re += '\\\\'; 76123 } 76124 else { 76125 escaping = true; 76126 } 76127 continue; 76128 } 76129 if (c === '[') { 76130 const [src, needUflag, consumed, magic] = (0, brace_expressions_js_1.parseClass)(glob, i); 76131 if (consumed) { 76132 re += src; 76133 uflag = uflag || needUflag; 76134 i += consumed - 1; 76135 hasMagic = hasMagic || magic; 76136 continue; 76137 } 76138 } 76139 if (c === '*') { 76140 if (noEmpty && glob === '*') 76141 re += starNoEmpty; 76142 else 76143 re += star; 76144 hasMagic = true; 76145 continue; 76146 } 76147 if (c === '?') { 76148 re += qmark; 76149 hasMagic = true; 76150 continue; 76151 } 76152 re += regExpEscape(c); 76153 } 76154 return [re, (0, unescape_js_1.unescape)(glob), !!hasMagic, uflag]; 76155 } 76156 } 76157 exports.AST = AST; 76158 //# sourceMappingURL=ast.js.map 76159 76160 /***/ }), 76161 76162 /***/ 33542: 76163 /***/ ((__unused_webpack_module, exports) => { 76164 76165 "use strict"; 76166 76167 // translate the various posix character classes into unicode properties 76168 // this works across all unicode locales 76169 Object.defineProperty(exports, "__esModule", ({ value: true })); 76170 exports.parseClass = void 0; 76171 // { <posix class>: [<translation>, /u flag required, negated] 76172 const posixClasses = { 76173 '[:alnum:]': ['\\p{L}\\p{Nl}\\p{Nd}', true], 76174 '[:alpha:]': ['\\p{L}\\p{Nl}', true], 76175 '[:ascii:]': ['\\x' + '00-\\x' + '7f', false], 76176 '[:blank:]': ['\\p{Zs}\\t', true], 76177 '[:cntrl:]': ['\\p{Cc}', true], 76178 '[:digit:]': ['\\p{Nd}', true], 76179 '[:graph:]': ['\\p{Z}\\p{C}', true, true], 76180 '[:lower:]': ['\\p{Ll}', true], 76181 '[:print:]': ['\\p{C}', true], 76182 '[:punct:]': ['\\p{P}', true], 76183 '[:space:]': ['\\p{Z}\\t\\r\\n\\v\\f', true], 76184 '[:upper:]': ['\\p{Lu}', true], 76185 '[:word:]': ['\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}', true], 76186 '[:xdigit:]': ['A-Fa-f0-9', false], 76187 }; 76188 // only need to escape a few things inside of brace expressions 76189 // escapes: [ \ ] - 76190 const braceEscape = (s) => s.replace(/[[\]\\-]/g, '\\$&'); 76191 // escape all regexp magic characters 76192 const regexpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); 76193 // everything has already been escaped, we just have to join 76194 const rangesToString = (ranges) => ranges.join(''); 76195 // takes a glob string at a posix brace expression, and returns 76196 // an equivalent regular expression source, and boolean indicating 76197 // whether the /u flag needs to be applied, and the number of chars 76198 // consumed to parse the character class. 76199 // This also removes out of order ranges, and returns ($.) if the 76200 // entire class just no good. 76201 const parseClass = (glob, position) => { 76202 const pos = position; 76203 /* c8 ignore start */ 76204 if (glob.charAt(pos) !== '[') { 76205 throw new Error('not in a brace expression'); 76206 } 76207 /* c8 ignore stop */ 76208 const ranges = []; 76209 const negs = []; 76210 let i = pos + 1; 76211 let sawStart = false; 76212 let uflag = false; 76213 let escaping = false; 76214 let negate = false; 76215 let endPos = pos; 76216 let rangeStart = ''; 76217 WHILE: while (i < glob.length) { 76218 const c = glob.charAt(i); 76219 if ((c === '!' || c === '^') && i === pos + 1) { 76220 negate = true; 76221 i++; 76222 continue; 76223 } 76224 if (c === ']' && sawStart && !escaping) { 76225 endPos = i + 1; 76226 break; 76227 } 76228 sawStart = true; 76229 if (c === '\\') { 76230 if (!escaping) { 76231 escaping = true; 76232 i++; 76233 continue; 76234 } 76235 // escaped \ char, fall through and treat like normal char 76236 } 76237 if (c === '[' && !escaping) { 76238 // either a posix class, a collation equivalent, or just a [ 76239 for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) { 76240 if (glob.startsWith(cls, i)) { 76241 // invalid, [a-[] is fine, but not [a-[:alpha]] 76242 if (rangeStart) { 76243 return ['$.', false, glob.length - pos, true]; 76244 } 76245 i += cls.length; 76246 if (neg) 76247 negs.push(unip); 76248 else 76249 ranges.push(unip); 76250 uflag = uflag || u; 76251 continue WHILE; 76252 } 76253 } 76254 } 76255 // now it's just a normal character, effectively 76256 escaping = false; 76257 if (rangeStart) { 76258 // throw this range away if it's not valid, but others 76259 // can still match. 76260 if (c > rangeStart) { 76261 ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c)); 76262 } 76263 else if (c === rangeStart) { 76264 ranges.push(braceEscape(c)); 76265 } 76266 rangeStart = ''; 76267 i++; 76268 continue; 76269 } 76270 // now might be the start of a range. 76271 // can be either c-d or c-] or c<more...>] or c] at this point 76272 if (glob.startsWith('-]', i + 1)) { 76273 ranges.push(braceEscape(c + '-')); 76274 i += 2; 76275 continue; 76276 } 76277 if (glob.startsWith('-', i + 1)) { 76278 rangeStart = c; 76279 i += 2; 76280 continue; 76281 } 76282 // not the start of a range, just a single character 76283 ranges.push(braceEscape(c)); 76284 i++; 76285 } 76286 if (endPos < i) { 76287 // didn't see the end of the class, not a valid class, 76288 // but might still be valid as a literal match. 76289 return ['', false, 0, false]; 76290 } 76291 // if we got no ranges and no negates, then we have a range that 76292 // cannot possibly match anything, and that poisons the whole glob 76293 if (!ranges.length && !negs.length) { 76294 return ['$.', false, glob.length - pos, true]; 76295 } 76296 // if we got one positive range, and it's a single character, then that's 76297 // not actually a magic pattern, it's just that one literal character. 76298 // we should not treat that as "magic", we should just return the literal 76299 // character. [_] is a perfectly valid way to escape glob magic chars. 76300 if (negs.length === 0 && 76301 ranges.length === 1 && 76302 /^\\?.$/.test(ranges[0]) && 76303 !negate) { 76304 const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0]; 76305 return [regexpEscape(r), false, endPos - pos, false]; 76306 } 76307 const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']'; 76308 const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']'; 76309 const comb = ranges.length && negs.length 76310 ? '(' + sranges + '|' + snegs + ')' 76311 : ranges.length 76312 ? sranges 76313 : snegs; 76314 return [comb, uflag, endPos - pos, true]; 76315 }; 76316 exports.parseClass = parseClass; 76317 //# sourceMappingURL=brace-expressions.js.map 76318 76319 /***/ }), 76320 76321 /***/ 76636: 76322 /***/ ((__unused_webpack_module, exports) => { 76323 76324 "use strict"; 76325 76326 Object.defineProperty(exports, "__esModule", ({ value: true })); 76327 exports.escape = void 0; 76328 /** 76329 * Escape all magic characters in a glob pattern. 76330 * 76331 * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape} 76332 * option is used, then characters are escaped by wrapping in `[]`, because 76333 * a magic character wrapped in a character class can only be satisfied by 76334 * that exact character. In this mode, `\` is _not_ escaped, because it is 76335 * not interpreted as a magic character, but instead as a path separator. 76336 */ 76337 const escape = (s, { windowsPathsNoEscape = false, } = {}) => { 76338 // don't need to escape +@! because we escape the parens 76339 // that make those magic, and escaping ! as [!] isn't valid, 76340 // because [!]] is a valid glob class meaning not ']'. 76341 return windowsPathsNoEscape 76342 ? s.replace(/[?*()[\]]/g, '[$&]') 76343 : s.replace(/[?*()[\]\\]/g, '\\$&'); 76344 }; 76345 exports.escape = escape; 76346 //# sourceMappingURL=escape.js.map 76347 76348 /***/ }), 76349 76350 /***/ 7111: 76351 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 76352 76353 "use strict"; 76354 76355 var __importDefault = (this && this.__importDefault) || function (mod) { 76356 return (mod && mod.__esModule) ? mod : { "default": mod }; 76357 }; 76358 Object.defineProperty(exports, "__esModule", ({ value: true })); 76359 exports.unescape = exports.escape = exports.AST = exports.Minimatch = exports.match = exports.makeRe = exports.braceExpand = exports.defaults = exports.filter = exports.GLOBSTAR = exports.sep = exports.minimatch = void 0; 76360 const brace_expansion_1 = __importDefault(__nccwpck_require__(42443)); 76361 const assert_valid_pattern_js_1 = __nccwpck_require__(43691); 76362 const ast_js_1 = __nccwpck_require__(99262); 76363 const escape_js_1 = __nccwpck_require__(76636); 76364 const unescape_js_1 = __nccwpck_require__(13704); 76365 const minimatch = (p, pattern, options = {}) => { 76366 (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); 76367 // shortcut: comments match nothing. 76368 if (!options.nocomment && pattern.charAt(0) === '#') { 76369 return false; 76370 } 76371 return new Minimatch(pattern, options).match(p); 76372 }; 76373 exports.minimatch = minimatch; 76374 // Optimized checking for the most common glob patterns. 76375 const starDotExtRE = /^\*+([^+@!?\*\[\(]*)$/; 76376 const starDotExtTest = (ext) => (f) => !f.startsWith('.') && f.endsWith(ext); 76377 const starDotExtTestDot = (ext) => (f) => f.endsWith(ext); 76378 const starDotExtTestNocase = (ext) => { 76379 ext = ext.toLowerCase(); 76380 return (f) => !f.startsWith('.') && f.toLowerCase().endsWith(ext); 76381 }; 76382 const starDotExtTestNocaseDot = (ext) => { 76383 ext = ext.toLowerCase(); 76384 return (f) => f.toLowerCase().endsWith(ext); 76385 }; 76386 const starDotStarRE = /^\*+\.\*+$/; 76387 const starDotStarTest = (f) => !f.startsWith('.') && f.includes('.'); 76388 const starDotStarTestDot = (f) => f !== '.' && f !== '..' && f.includes('.'); 76389 const dotStarRE = /^\.\*+$/; 76390 const dotStarTest = (f) => f !== '.' && f !== '..' && f.startsWith('.'); 76391 const starRE = /^\*+$/; 76392 const starTest = (f) => f.length !== 0 && !f.startsWith('.'); 76393 const starTestDot = (f) => f.length !== 0 && f !== '.' && f !== '..'; 76394 const qmarksRE = /^\?+([^+@!?\*\[\(]*)?$/; 76395 const qmarksTestNocase = ([$0, ext = '']) => { 76396 const noext = qmarksTestNoExt([$0]); 76397 if (!ext) 76398 return noext; 76399 ext = ext.toLowerCase(); 76400 return (f) => noext(f) && f.toLowerCase().endsWith(ext); 76401 }; 76402 const qmarksTestNocaseDot = ([$0, ext = '']) => { 76403 const noext = qmarksTestNoExtDot([$0]); 76404 if (!ext) 76405 return noext; 76406 ext = ext.toLowerCase(); 76407 return (f) => noext(f) && f.toLowerCase().endsWith(ext); 76408 }; 76409 const qmarksTestDot = ([$0, ext = '']) => { 76410 const noext = qmarksTestNoExtDot([$0]); 76411 return !ext ? noext : (f) => noext(f) && f.endsWith(ext); 76412 }; 76413 const qmarksTest = ([$0, ext = '']) => { 76414 const noext = qmarksTestNoExt([$0]); 76415 return !ext ? noext : (f) => noext(f) && f.endsWith(ext); 76416 }; 76417 const qmarksTestNoExt = ([$0]) => { 76418 const len = $0.length; 76419 return (f) => f.length === len && !f.startsWith('.'); 76420 }; 76421 const qmarksTestNoExtDot = ([$0]) => { 76422 const len = $0.length; 76423 return (f) => f.length === len && f !== '.' && f !== '..'; 76424 }; 76425 /* c8 ignore start */ 76426 const defaultPlatform = (typeof process === 'object' && process 76427 ? (typeof process.env === 'object' && 76428 process.env && 76429 process.env.__MINIMATCH_TESTING_PLATFORM__) || 76430 process.platform 76431 : 'posix'); 76432 const path = { 76433 win32: { sep: '\\' }, 76434 posix: { sep: '/' }, 76435 }; 76436 /* c8 ignore stop */ 76437 exports.sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep; 76438 exports.minimatch.sep = exports.sep; 76439 exports.GLOBSTAR = Symbol('globstar **'); 76440 exports.minimatch.GLOBSTAR = exports.GLOBSTAR; 76441 // any single thing other than / 76442 // don't need to escape / when using new RegExp() 76443 const qmark = '[^/]'; 76444 // * => any number of characters 76445 const star = qmark + '*?'; 76446 // ** when dots are allowed. Anything goes, except .. and . 76447 // not (^ or / followed by one or two dots followed by $ or /), 76448 // followed by anything, any number of times. 76449 const twoStarDot = '(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?'; 76450 // not a ^ or / followed by a dot, 76451 // followed by anything, any number of times. 76452 const twoStarNoDot = '(?:(?!(?:\\/|^)\\.).)*?'; 76453 const filter = (pattern, options = {}) => (p) => (0, exports.minimatch)(p, pattern, options); 76454 exports.filter = filter; 76455 exports.minimatch.filter = exports.filter; 76456 const ext = (a, b = {}) => Object.assign({}, a, b); 76457 const defaults = (def) => { 76458 if (!def || typeof def !== 'object' || !Object.keys(def).length) { 76459 return exports.minimatch; 76460 } 76461 const orig = exports.minimatch; 76462 const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options)); 76463 return Object.assign(m, { 76464 Minimatch: class Minimatch extends orig.Minimatch { 76465 constructor(pattern, options = {}) { 76466 super(pattern, ext(def, options)); 76467 } 76468 static defaults(options) { 76469 return orig.defaults(ext(def, options)).Minimatch; 76470 } 76471 }, 76472 AST: class AST extends orig.AST { 76473 /* c8 ignore start */ 76474 constructor(type, parent, options = {}) { 76475 super(type, parent, ext(def, options)); 76476 } 76477 /* c8 ignore stop */ 76478 static fromGlob(pattern, options = {}) { 76479 return orig.AST.fromGlob(pattern, ext(def, options)); 76480 } 76481 }, 76482 unescape: (s, options = {}) => orig.unescape(s, ext(def, options)), 76483 escape: (s, options = {}) => orig.escape(s, ext(def, options)), 76484 filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)), 76485 defaults: (options) => orig.defaults(ext(def, options)), 76486 makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)), 76487 braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)), 76488 match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)), 76489 sep: orig.sep, 76490 GLOBSTAR: exports.GLOBSTAR, 76491 }); 76492 }; 76493 exports.defaults = defaults; 76494 exports.minimatch.defaults = exports.defaults; 76495 // Brace expansion: 76496 // a{b,c}d -> abd acd 76497 // a{b,}c -> abc ac 76498 // a{0..3}d -> a0d a1d a2d a3d 76499 // a{b,c{d,e}f}g -> abg acdfg acefg 76500 // a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg 76501 // 76502 // Invalid sets are not expanded. 76503 // a{2..}b -> a{2..}b 76504 // a{b}c -> a{b}c 76505 const braceExpand = (pattern, options = {}) => { 76506 (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); 76507 // Thanks to Yeting Li <https://github.com/yetingli> for 76508 // improving this regexp to avoid a ReDOS vulnerability. 76509 if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) { 76510 // shortcut. no need to expand. 76511 return [pattern]; 76512 } 76513 return (0, brace_expansion_1.default)(pattern); 76514 }; 76515 exports.braceExpand = braceExpand; 76516 exports.minimatch.braceExpand = exports.braceExpand; 76517 // parse a component of the expanded set. 76518 // At this point, no pattern may contain "/" in it 76519 // so we're going to return a 2d array, where each entry is the full 76520 // pattern, split on '/', and then turned into a regular expression. 76521 // A regexp is made at the end which joins each array with an 76522 // escaped /, and another full one which joins each regexp with |. 76523 // 76524 // Following the lead of Bash 4.1, note that "**" only has special meaning 76525 // when it is the *only* thing in a path portion. Otherwise, any series 76526 // of * is equivalent to a single *. Globstar behavior is enabled by 76527 // default, and can be disabled by setting options.noglobstar. 76528 const makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe(); 76529 exports.makeRe = makeRe; 76530 exports.minimatch.makeRe = exports.makeRe; 76531 const match = (list, pattern, options = {}) => { 76532 const mm = new Minimatch(pattern, options); 76533 list = list.filter(f => mm.match(f)); 76534 if (mm.options.nonull && !list.length) { 76535 list.push(pattern); 76536 } 76537 return list; 76538 }; 76539 exports.match = match; 76540 exports.minimatch.match = exports.match; 76541 // replace stuff like \* with * 76542 const globMagic = /[?*]|[+@!]\(.*?\)|\[|\]/; 76543 const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); 76544 class Minimatch { 76545 options; 76546 set; 76547 pattern; 76548 windowsPathsNoEscape; 76549 nonegate; 76550 negate; 76551 comment; 76552 empty; 76553 preserveMultipleSlashes; 76554 partial; 76555 globSet; 76556 globParts; 76557 nocase; 76558 isWindows; 76559 platform; 76560 windowsNoMagicRoot; 76561 regexp; 76562 constructor(pattern, options = {}) { 76563 (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); 76564 options = options || {}; 76565 this.options = options; 76566 this.pattern = pattern; 76567 this.platform = options.platform || defaultPlatform; 76568 this.isWindows = this.platform === 'win32'; 76569 this.windowsPathsNoEscape = 76570 !!options.windowsPathsNoEscape || options.allowWindowsEscape === false; 76571 if (this.windowsPathsNoEscape) { 76572 this.pattern = this.pattern.replace(/\\/g, '/'); 76573 } 76574 this.preserveMultipleSlashes = !!options.preserveMultipleSlashes; 76575 this.regexp = null; 76576 this.negate = false; 76577 this.nonegate = !!options.nonegate; 76578 this.comment = false; 76579 this.empty = false; 76580 this.partial = !!options.partial; 76581 this.nocase = !!this.options.nocase; 76582 this.windowsNoMagicRoot = 76583 options.windowsNoMagicRoot !== undefined 76584 ? options.windowsNoMagicRoot 76585 : !!(this.isWindows && this.nocase); 76586 this.globSet = []; 76587 this.globParts = []; 76588 this.set = []; 76589 // make the set of regexps etc. 76590 this.make(); 76591 } 76592 hasMagic() { 76593 if (this.options.magicalBraces && this.set.length > 1) { 76594 return true; 76595 } 76596 for (const pattern of this.set) { 76597 for (const part of pattern) { 76598 if (typeof part !== 'string') 76599 return true; 76600 } 76601 } 76602 return false; 76603 } 76604 debug(..._) { } 76605 make() { 76606 const pattern = this.pattern; 76607 const options = this.options; 76608 // empty patterns and comments match nothing. 76609 if (!options.nocomment && pattern.charAt(0) === '#') { 76610 this.comment = true; 76611 return; 76612 } 76613 if (!pattern) { 76614 this.empty = true; 76615 return; 76616 } 76617 // step 1: figure out negation, etc. 76618 this.parseNegate(); 76619 // step 2: expand braces 76620 this.globSet = [...new Set(this.braceExpand())]; 76621 if (options.debug) { 76622 this.debug = (...args) => console.error(...args); 76623 } 76624 this.debug(this.pattern, this.globSet); 76625 // step 3: now we have a set, so turn each one into a series of 76626 // path-portion matching patterns. 76627 // These will be regexps, except in the case of "**", which is 76628 // set to the GLOBSTAR object for globstar behavior, 76629 // and will not contain any / characters 76630 // 76631 // First, we preprocess to make the glob pattern sets a bit simpler 76632 // and deduped. There are some perf-killing patterns that can cause 76633 // problems with a glob walk, but we can simplify them down a bit. 76634 const rawGlobParts = this.globSet.map(s => this.slashSplit(s)); 76635 this.globParts = this.preprocess(rawGlobParts); 76636 this.debug(this.pattern, this.globParts); 76637 // glob --> regexps 76638 let set = this.globParts.map((s, _, __) => { 76639 if (this.isWindows && this.windowsNoMagicRoot) { 76640 // check if it's a drive or unc path. 76641 const isUNC = s[0] === '' && 76642 s[1] === '' && 76643 (s[2] === '?' || !globMagic.test(s[2])) && 76644 !globMagic.test(s[3]); 76645 const isDrive = /^[a-z]:/i.test(s[0]); 76646 if (isUNC) { 76647 return [...s.slice(0, 4), ...s.slice(4).map(ss => this.parse(ss))]; 76648 } 76649 else if (isDrive) { 76650 return [s[0], ...s.slice(1).map(ss => this.parse(ss))]; 76651 } 76652 } 76653 return s.map(ss => this.parse(ss)); 76654 }); 76655 this.debug(this.pattern, set); 76656 // filter out everything that didn't compile properly. 76657 this.set = set.filter(s => s.indexOf(false) === -1); 76658 // do not treat the ? in UNC paths as magic 76659 if (this.isWindows) { 76660 for (let i = 0; i < this.set.length; i++) { 76661 const p = this.set[i]; 76662 if (p[0] === '' && 76663 p[1] === '' && 76664 this.globParts[i][2] === '?' && 76665 typeof p[3] === 'string' && 76666 /^[a-z]:$/i.test(p[3])) { 76667 p[2] = '?'; 76668 } 76669 } 76670 } 76671 this.debug(this.pattern, this.set); 76672 } 76673 // various transforms to equivalent pattern sets that are 76674 // faster to process in a filesystem walk. The goal is to 76675 // eliminate what we can, and push all ** patterns as far 76676 // to the right as possible, even if it increases the number 76677 // of patterns that we have to process. 76678 preprocess(globParts) { 76679 // if we're not in globstar mode, then turn all ** into * 76680 if (this.options.noglobstar) { 76681 for (let i = 0; i < globParts.length; i++) { 76682 for (let j = 0; j < globParts[i].length; j++) { 76683 if (globParts[i][j] === '**') { 76684 globParts[i][j] = '*'; 76685 } 76686 } 76687 } 76688 } 76689 const { optimizationLevel = 1 } = this.options; 76690 if (optimizationLevel >= 2) { 76691 // aggressive optimization for the purpose of fs walking 76692 globParts = this.firstPhasePreProcess(globParts); 76693 globParts = this.secondPhasePreProcess(globParts); 76694 } 76695 else if (optimizationLevel >= 1) { 76696 // just basic optimizations to remove some .. parts 76697 globParts = this.levelOneOptimize(globParts); 76698 } 76699 else { 76700 globParts = this.adjascentGlobstarOptimize(globParts); 76701 } 76702 return globParts; 76703 } 76704 // just get rid of adjascent ** portions 76705 adjascentGlobstarOptimize(globParts) { 76706 return globParts.map(parts => { 76707 let gs = -1; 76708 while (-1 !== (gs = parts.indexOf('**', gs + 1))) { 76709 let i = gs; 76710 while (parts[i + 1] === '**') { 76711 i++; 76712 } 76713 if (i !== gs) { 76714 parts.splice(gs, i - gs); 76715 } 76716 } 76717 return parts; 76718 }); 76719 } 76720 // get rid of adjascent ** and resolve .. portions 76721 levelOneOptimize(globParts) { 76722 return globParts.map(parts => { 76723 parts = parts.reduce((set, part) => { 76724 const prev = set[set.length - 1]; 76725 if (part === '**' && prev === '**') { 76726 return set; 76727 } 76728 if (part === '..') { 76729 if (prev && prev !== '..' && prev !== '.' && prev !== '**') { 76730 set.pop(); 76731 return set; 76732 } 76733 } 76734 set.push(part); 76735 return set; 76736 }, []); 76737 return parts.length === 0 ? [''] : parts; 76738 }); 76739 } 76740 levelTwoFileOptimize(parts) { 76741 if (!Array.isArray(parts)) { 76742 parts = this.slashSplit(parts); 76743 } 76744 let didSomething = false; 76745 do { 76746 didSomething = false; 76747 // <pre>/<e>/<rest> -> <pre>/<rest> 76748 if (!this.preserveMultipleSlashes) { 76749 for (let i = 1; i < parts.length - 1; i++) { 76750 const p = parts[i]; 76751 // don't squeeze out UNC patterns 76752 if (i === 1 && p === '' && parts[0] === '') 76753 continue; 76754 if (p === '.' || p === '') { 76755 didSomething = true; 76756 parts.splice(i, 1); 76757 i--; 76758 } 76759 } 76760 if (parts[0] === '.' && 76761 parts.length === 2 && 76762 (parts[1] === '.' || parts[1] === '')) { 76763 didSomething = true; 76764 parts.pop(); 76765 } 76766 } 76767 // <pre>/<p>/../<rest> -> <pre>/<rest> 76768 let dd = 0; 76769 while (-1 !== (dd = parts.indexOf('..', dd + 1))) { 76770 const p = parts[dd - 1]; 76771 if (p && p !== '.' && p !== '..' && p !== '**') { 76772 didSomething = true; 76773 parts.splice(dd - 1, 2); 76774 dd -= 2; 76775 } 76776 } 76777 } while (didSomething); 76778 return parts.length === 0 ? [''] : parts; 76779 } 76780 // First phase: single-pattern processing 76781 // <pre> is 1 or more portions 76782 // <rest> is 1 or more portions 76783 // <p> is any portion other than ., .., '', or ** 76784 // <e> is . or '' 76785 // 76786 // **/.. is *brutal* for filesystem walking performance, because 76787 // it effectively resets the recursive walk each time it occurs, 76788 // and ** cannot be reduced out by a .. pattern part like a regexp 76789 // or most strings (other than .., ., and '') can be. 76790 // 76791 // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>} 76792 // <pre>/<e>/<rest> -> <pre>/<rest> 76793 // <pre>/<p>/../<rest> -> <pre>/<rest> 76794 // **/**/<rest> -> **/<rest> 76795 // 76796 // **/*/<rest> -> */**/<rest> <== not valid because ** doesn't follow 76797 // this WOULD be allowed if ** did follow symlinks, or * didn't 76798 firstPhasePreProcess(globParts) { 76799 let didSomething = false; 76800 do { 76801 didSomething = false; 76802 // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>} 76803 for (let parts of globParts) { 76804 let gs = -1; 76805 while (-1 !== (gs = parts.indexOf('**', gs + 1))) { 76806 let gss = gs; 76807 while (parts[gss + 1] === '**') { 76808 // <pre>/**/**/<rest> -> <pre>/**/<rest> 76809 gss++; 76810 } 76811 // eg, if gs is 2 and gss is 4, that means we have 3 ** 76812 // parts, and can remove 2 of them. 76813 if (gss > gs) { 76814 parts.splice(gs + 1, gss - gs); 76815 } 76816 let next = parts[gs + 1]; 76817 const p = parts[gs + 2]; 76818 const p2 = parts[gs + 3]; 76819 if (next !== '..') 76820 continue; 76821 if (!p || 76822 p === '.' || 76823 p === '..' || 76824 !p2 || 76825 p2 === '.' || 76826 p2 === '..') { 76827 continue; 76828 } 76829 didSomething = true; 76830 // edit parts in place, and push the new one 76831 parts.splice(gs, 1); 76832 const other = parts.slice(0); 76833 other[gs] = '**'; 76834 globParts.push(other); 76835 gs--; 76836 } 76837 // <pre>/<e>/<rest> -> <pre>/<rest> 76838 if (!this.preserveMultipleSlashes) { 76839 for (let i = 1; i < parts.length - 1; i++) { 76840 const p = parts[i]; 76841 // don't squeeze out UNC patterns 76842 if (i === 1 && p === '' && parts[0] === '') 76843 continue; 76844 if (p === '.' || p === '') { 76845 didSomething = true; 76846 parts.splice(i, 1); 76847 i--; 76848 } 76849 } 76850 if (parts[0] === '.' && 76851 parts.length === 2 && 76852 (parts[1] === '.' || parts[1] === '')) { 76853 didSomething = true; 76854 parts.pop(); 76855 } 76856 } 76857 // <pre>/<p>/../<rest> -> <pre>/<rest> 76858 let dd = 0; 76859 while (-1 !== (dd = parts.indexOf('..', dd + 1))) { 76860 const p = parts[dd - 1]; 76861 if (p && p !== '.' && p !== '..' && p !== '**') { 76862 didSomething = true; 76863 const needDot = dd === 1 && parts[dd + 1] === '**'; 76864 const splin = needDot ? ['.'] : []; 76865 parts.splice(dd - 1, 2, ...splin); 76866 if (parts.length === 0) 76867 parts.push(''); 76868 dd -= 2; 76869 } 76870 } 76871 } 76872 } while (didSomething); 76873 return globParts; 76874 } 76875 // second phase: multi-pattern dedupes 76876 // {<pre>/*/<rest>,<pre>/<p>/<rest>} -> <pre>/*/<rest> 76877 // {<pre>/<rest>,<pre>/<rest>} -> <pre>/<rest> 76878 // {<pre>/**/<rest>,<pre>/<rest>} -> <pre>/**/<rest> 76879 // 76880 // {<pre>/**/<rest>,<pre>/**/<p>/<rest>} -> <pre>/**/<rest> 76881 // ^-- not valid because ** doens't follow symlinks 76882 secondPhasePreProcess(globParts) { 76883 for (let i = 0; i < globParts.length - 1; i++) { 76884 for (let j = i + 1; j < globParts.length; j++) { 76885 const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes); 76886 if (!matched) 76887 continue; 76888 globParts[i] = matched; 76889 globParts[j] = []; 76890 } 76891 } 76892 return globParts.filter(gs => gs.length); 76893 } 76894 partsMatch(a, b, emptyGSMatch = false) { 76895 let ai = 0; 76896 let bi = 0; 76897 let result = []; 76898 let which = ''; 76899 while (ai < a.length && bi < b.length) { 76900 if (a[ai] === b[bi]) { 76901 result.push(which === 'b' ? b[bi] : a[ai]); 76902 ai++; 76903 bi++; 76904 } 76905 else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) { 76906 result.push(a[ai]); 76907 ai++; 76908 } 76909 else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) { 76910 result.push(b[bi]); 76911 bi++; 76912 } 76913 else if (a[ai] === '*' && 76914 b[bi] && 76915 (this.options.dot || !b[bi].startsWith('.')) && 76916 b[bi] !== '**') { 76917 if (which === 'b') 76918 return false; 76919 which = 'a'; 76920 result.push(a[ai]); 76921 ai++; 76922 bi++; 76923 } 76924 else if (b[bi] === '*' && 76925 a[ai] && 76926 (this.options.dot || !a[ai].startsWith('.')) && 76927 a[ai] !== '**') { 76928 if (which === 'a') 76929 return false; 76930 which = 'b'; 76931 result.push(b[bi]); 76932 ai++; 76933 bi++; 76934 } 76935 else { 76936 return false; 76937 } 76938 } 76939 // if we fall out of the loop, it means they two are identical 76940 // as long as their lengths match 76941 return a.length === b.length && result; 76942 } 76943 parseNegate() { 76944 if (this.nonegate) 76945 return; 76946 const pattern = this.pattern; 76947 let negate = false; 76948 let negateOffset = 0; 76949 for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) { 76950 negate = !negate; 76951 negateOffset++; 76952 } 76953 if (negateOffset) 76954 this.pattern = pattern.slice(negateOffset); 76955 this.negate = negate; 76956 } 76957 // set partial to true to test if, for example, 76958 // "/a/b" matches the start of "/*/b/*/d" 76959 // Partial means, if you run out of file before you run 76960 // out of pattern, then that's fine, as long as all 76961 // the parts match. 76962 matchOne(file, pattern, partial = false) { 76963 const options = this.options; 76964 // UNC paths like //?/X:/... can match X:/... and vice versa 76965 // Drive letters in absolute drive or unc paths are always compared 76966 // case-insensitively. 76967 if (this.isWindows) { 76968 const fileDrive = typeof file[0] === 'string' && /^[a-z]:$/i.test(file[0]); 76969 const fileUNC = !fileDrive && 76970 file[0] === '' && 76971 file[1] === '' && 76972 file[2] === '?' && 76973 /^[a-z]:$/i.test(file[3]); 76974 const patternDrive = typeof pattern[0] === 'string' && /^[a-z]:$/i.test(pattern[0]); 76975 const patternUNC = !patternDrive && 76976 pattern[0] === '' && 76977 pattern[1] === '' && 76978 pattern[2] === '?' && 76979 typeof pattern[3] === 'string' && 76980 /^[a-z]:$/i.test(pattern[3]); 76981 const fdi = fileUNC ? 3 : fileDrive ? 0 : undefined; 76982 const pdi = patternUNC ? 3 : patternDrive ? 0 : undefined; 76983 if (typeof fdi === 'number' && typeof pdi === 'number') { 76984 const [fd, pd] = [file[fdi], pattern[pdi]]; 76985 if (fd.toLowerCase() === pd.toLowerCase()) { 76986 pattern[pdi] = fd; 76987 if (pdi > fdi) { 76988 pattern = pattern.slice(pdi); 76989 } 76990 else if (fdi > pdi) { 76991 file = file.slice(fdi); 76992 } 76993 } 76994 } 76995 } 76996 // resolve and reduce . and .. portions in the file as well. 76997 // dont' need to do the second phase, because it's only one string[] 76998 const { optimizationLevel = 1 } = this.options; 76999 if (optimizationLevel >= 2) { 77000 file = this.levelTwoFileOptimize(file); 77001 } 77002 this.debug('matchOne', this, { file, pattern }); 77003 this.debug('matchOne', file.length, pattern.length); 77004 for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) { 77005 this.debug('matchOne loop'); 77006 var p = pattern[pi]; 77007 var f = file[fi]; 77008 this.debug(pattern, p, f); 77009 // should be impossible. 77010 // some invalid regexp stuff in the set. 77011 /* c8 ignore start */ 77012 if (p === false) { 77013 return false; 77014 } 77015 /* c8 ignore stop */ 77016 if (p === exports.GLOBSTAR) { 77017 this.debug('GLOBSTAR', [pattern, p, f]); 77018 // "**" 77019 // a/**/b/**/c would match the following: 77020 // a/b/x/y/z/c 77021 // a/x/y/z/b/c 77022 // a/b/x/b/x/c 77023 // a/b/c 77024 // To do this, take the rest of the pattern after 77025 // the **, and see if it would match the file remainder. 77026 // If so, return success. 77027 // If not, the ** "swallows" a segment, and try again. 77028 // This is recursively awful. 77029 // 77030 // a/**/b/**/c matching a/b/x/y/z/c 77031 // - a matches a 77032 // - doublestar 77033 // - matchOne(b/x/y/z/c, b/**/c) 77034 // - b matches b 77035 // - doublestar 77036 // - matchOne(x/y/z/c, c) -> no 77037 // - matchOne(y/z/c, c) -> no 77038 // - matchOne(z/c, c) -> no 77039 // - matchOne(c, c) yes, hit 77040 var fr = fi; 77041 var pr = pi + 1; 77042 if (pr === pl) { 77043 this.debug('** at the end'); 77044 // a ** at the end will just swallow the rest. 77045 // We have found a match. 77046 // however, it will not swallow /.x, unless 77047 // options.dot is set. 77048 // . and .. are *never* matched by **, for explosively 77049 // exponential reasons. 77050 for (; fi < fl; fi++) { 77051 if (file[fi] === '.' || 77052 file[fi] === '..' || 77053 (!options.dot && file[fi].charAt(0) === '.')) 77054 return false; 77055 } 77056 return true; 77057 } 77058 // ok, let's see if we can swallow whatever we can. 77059 while (fr < fl) { 77060 var swallowee = file[fr]; 77061 this.debug('\nglobstar while', file, fr, pattern, pr, swallowee); 77062 // XXX remove this slice. Just pass the start index. 77063 if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { 77064 this.debug('globstar found match!', fr, fl, swallowee); 77065 // found a match. 77066 return true; 77067 } 77068 else { 77069 // can't swallow "." or ".." ever. 77070 // can only swallow ".foo" when explicitly asked. 77071 if (swallowee === '.' || 77072 swallowee === '..' || 77073 (!options.dot && swallowee.charAt(0) === '.')) { 77074 this.debug('dot detected!', file, fr, pattern, pr); 77075 break; 77076 } 77077 // ** swallows a segment, and continue. 77078 this.debug('globstar swallow a segment, and continue'); 77079 fr++; 77080 } 77081 } 77082 // no match was found. 77083 // However, in partial mode, we can't say this is necessarily over. 77084 /* c8 ignore start */ 77085 if (partial) { 77086 // ran out of file 77087 this.debug('\n>>> no match, partial?', file, fr, pattern, pr); 77088 if (fr === fl) { 77089 return true; 77090 } 77091 } 77092 /* c8 ignore stop */ 77093 return false; 77094 } 77095 // something other than ** 77096 // non-magic patterns just have to match exactly 77097 // patterns with magic have been turned into regexps. 77098 let hit; 77099 if (typeof p === 'string') { 77100 hit = f === p; 77101 this.debug('string match', p, f, hit); 77102 } 77103 else { 77104 hit = p.test(f); 77105 this.debug('pattern match', p, f, hit); 77106 } 77107 if (!hit) 77108 return false; 77109 } 77110 // Note: ending in / means that we'll get a final "" 77111 // at the end of the pattern. This can only match a 77112 // corresponding "" at the end of the file. 77113 // If the file ends in /, then it can only match a 77114 // a pattern that ends in /, unless the pattern just 77115 // doesn't have any more for it. But, a/b/ should *not* 77116 // match "a/b/*", even though "" matches against the 77117 // [^/]*? pattern, except in partial mode, where it might 77118 // simply not be reached yet. 77119 // However, a/b/ should still satisfy a/* 77120 // now either we fell off the end of the pattern, or we're done. 77121 if (fi === fl && pi === pl) { 77122 // ran out of pattern and filename at the same time. 77123 // an exact hit! 77124 return true; 77125 } 77126 else if (fi === fl) { 77127 // ran out of file, but still had pattern left. 77128 // this is ok if we're doing the match as part of 77129 // a glob fs traversal. 77130 return partial; 77131 } 77132 else if (pi === pl) { 77133 // ran out of pattern, still have file left. 77134 // this is only acceptable if we're on the very last 77135 // empty segment of a file with a trailing slash. 77136 // a/* should match a/b/ 77137 return fi === fl - 1 && file[fi] === ''; 77138 /* c8 ignore start */ 77139 } 77140 else { 77141 // should be unreachable. 77142 throw new Error('wtf?'); 77143 } 77144 /* c8 ignore stop */ 77145 } 77146 braceExpand() { 77147 return (0, exports.braceExpand)(this.pattern, this.options); 77148 } 77149 parse(pattern) { 77150 (0, assert_valid_pattern_js_1.assertValidPattern)(pattern); 77151 const options = this.options; 77152 // shortcuts 77153 if (pattern === '**') 77154 return exports.GLOBSTAR; 77155 if (pattern === '') 77156 return ''; 77157 // far and away, the most common glob pattern parts are 77158 // *, *.*, and *.<ext> Add a fast check method for those. 77159 let m; 77160 let fastTest = null; 77161 if ((m = pattern.match(starRE))) { 77162 fastTest = options.dot ? starTestDot : starTest; 77163 } 77164 else if ((m = pattern.match(starDotExtRE))) { 77165 fastTest = (options.nocase 77166 ? options.dot 77167 ? starDotExtTestNocaseDot 77168 : starDotExtTestNocase 77169 : options.dot 77170 ? starDotExtTestDot 77171 : starDotExtTest)(m[1]); 77172 } 77173 else if ((m = pattern.match(qmarksRE))) { 77174 fastTest = (options.nocase 77175 ? options.dot 77176 ? qmarksTestNocaseDot 77177 : qmarksTestNocase 77178 : options.dot 77179 ? qmarksTestDot 77180 : qmarksTest)(m); 77181 } 77182 else if ((m = pattern.match(starDotStarRE))) { 77183 fastTest = options.dot ? starDotStarTestDot : starDotStarTest; 77184 } 77185 else if ((m = pattern.match(dotStarRE))) { 77186 fastTest = dotStarTest; 77187 } 77188 const re = ast_js_1.AST.fromGlob(pattern, this.options).toMMPattern(); 77189 return fastTest ? Object.assign(re, { test: fastTest }) : re; 77190 } 77191 makeRe() { 77192 if (this.regexp || this.regexp === false) 77193 return this.regexp; 77194 // at this point, this.set is a 2d array of partial 77195 // pattern strings, or "**". 77196 // 77197 // It's better to use .match(). This function shouldn't 77198 // be used, really, but it's pretty convenient sometimes, 77199 // when you just want to work with a regex. 77200 const set = this.set; 77201 if (!set.length) { 77202 this.regexp = false; 77203 return this.regexp; 77204 } 77205 const options = this.options; 77206 const twoStar = options.noglobstar 77207 ? star 77208 : options.dot 77209 ? twoStarDot 77210 : twoStarNoDot; 77211 const flags = new Set(options.nocase ? ['i'] : []); 77212 // regexpify non-globstar patterns 77213 // if ** is only item, then we just do one twoStar 77214 // if ** is first, and there are more, prepend (\/|twoStar\/)? to next 77215 // if ** is last, append (\/twoStar|) to previous 77216 // if ** is in the middle, append (\/|\/twoStar\/) to previous 77217 // then filter out GLOBSTAR symbols 77218 let re = set 77219 .map(pattern => { 77220 const pp = pattern.map(p => { 77221 if (p instanceof RegExp) { 77222 for (const f of p.flags.split('')) 77223 flags.add(f); 77224 } 77225 return typeof p === 'string' 77226 ? regExpEscape(p) 77227 : p === exports.GLOBSTAR 77228 ? exports.GLOBSTAR 77229 : p._src; 77230 }); 77231 pp.forEach((p, i) => { 77232 const next = pp[i + 1]; 77233 const prev = pp[i - 1]; 77234 if (p !== exports.GLOBSTAR || prev === exports.GLOBSTAR) { 77235 return; 77236 } 77237 if (prev === undefined) { 77238 if (next !== undefined && next !== exports.GLOBSTAR) { 77239 pp[i + 1] = '(?:\\/|' + twoStar + '\\/)?' + next; 77240 } 77241 else { 77242 pp[i] = twoStar; 77243 } 77244 } 77245 else if (next === undefined) { 77246 pp[i - 1] = prev + '(?:\\/|' + twoStar + ')?'; 77247 } 77248 else if (next !== exports.GLOBSTAR) { 77249 pp[i - 1] = prev + '(?:\\/|\\/' + twoStar + '\\/)' + next; 77250 pp[i + 1] = exports.GLOBSTAR; 77251 } 77252 }); 77253 return pp.filter(p => p !== exports.GLOBSTAR).join('/'); 77254 }) 77255 .join('|'); 77256 // need to wrap in parens if we had more than one thing with |, 77257 // otherwise only the first will be anchored to ^ and the last to $ 77258 const [open, close] = set.length > 1 ? ['(?:', ')'] : ['', '']; 77259 // must match entire pattern 77260 // ending in a * or ** will make it less strict. 77261 re = '^' + open + re + close + '$'; 77262 // can match anything, as long as it's not this. 77263 if (this.negate) 77264 re = '^(?!' + re + ').+$'; 77265 try { 77266 this.regexp = new RegExp(re, [...flags].join('')); 77267 /* c8 ignore start */ 77268 } 77269 catch (ex) { 77270 // should be impossible 77271 this.regexp = false; 77272 } 77273 /* c8 ignore stop */ 77274 return this.regexp; 77275 } 77276 slashSplit(p) { 77277 // if p starts with // on windows, we preserve that 77278 // so that UNC paths aren't broken. Otherwise, any number of 77279 // / characters are coalesced into one, unless 77280 // preserveMultipleSlashes is set to true. 77281 if (this.preserveMultipleSlashes) { 77282 return p.split('/'); 77283 } 77284 else if (this.isWindows && /^\/\/[^\/]+/.test(p)) { 77285 // add an extra '' for the one we lose 77286 return ['', ...p.split(/\/+/)]; 77287 } 77288 else { 77289 return p.split(/\/+/); 77290 } 77291 } 77292 match(f, partial = this.partial) { 77293 this.debug('match', f, this.pattern); 77294 // short-circuit in the case of busted things. 77295 // comments, etc. 77296 if (this.comment) { 77297 return false; 77298 } 77299 if (this.empty) { 77300 return f === ''; 77301 } 77302 if (f === '/' && partial) { 77303 return true; 77304 } 77305 const options = this.options; 77306 // windows: need to use /, not \ 77307 if (this.isWindows) { 77308 f = f.split('\\').join('/'); 77309 } 77310 // treat the test path as a set of pathparts. 77311 const ff = this.slashSplit(f); 77312 this.debug(this.pattern, 'split', ff); 77313 // just ONE of the pattern sets in this.set needs to match 77314 // in order for it to be valid. If negating, then just one 77315 // match means that we have failed. 77316 // Either way, return on the first hit. 77317 const set = this.set; 77318 this.debug(this.pattern, 'set', set); 77319 // Find the basename of the path by looking for the last non-empty segment 77320 let filename = ff[ff.length - 1]; 77321 if (!filename) { 77322 for (let i = ff.length - 2; !filename && i >= 0; i--) { 77323 filename = ff[i]; 77324 } 77325 } 77326 for (let i = 0; i < set.length; i++) { 77327 const pattern = set[i]; 77328 let file = ff; 77329 if (options.matchBase && pattern.length === 1) { 77330 file = [filename]; 77331 } 77332 const hit = this.matchOne(file, pattern, partial); 77333 if (hit) { 77334 if (options.flipNegate) { 77335 return true; 77336 } 77337 return !this.negate; 77338 } 77339 } 77340 // didn't get any hits. this is success if it's a negative 77341 // pattern, failure otherwise. 77342 if (options.flipNegate) { 77343 return false; 77344 } 77345 return this.negate; 77346 } 77347 static defaults(def) { 77348 return exports.minimatch.defaults(def).Minimatch; 77349 } 77350 } 77351 exports.Minimatch = Minimatch; 77352 /* c8 ignore start */ 77353 var ast_js_2 = __nccwpck_require__(99262); 77354 Object.defineProperty(exports, "AST", ({ enumerable: true, get: function () { return ast_js_2.AST; } })); 77355 var escape_js_2 = __nccwpck_require__(76636); 77356 Object.defineProperty(exports, "escape", ({ enumerable: true, get: function () { return escape_js_2.escape; } })); 77357 var unescape_js_2 = __nccwpck_require__(13704); 77358 Object.defineProperty(exports, "unescape", ({ enumerable: true, get: function () { return unescape_js_2.unescape; } })); 77359 /* c8 ignore stop */ 77360 exports.minimatch.AST = ast_js_1.AST; 77361 exports.minimatch.Minimatch = Minimatch; 77362 exports.minimatch.escape = escape_js_1.escape; 77363 exports.minimatch.unescape = unescape_js_1.unescape; 77364 //# sourceMappingURL=index.js.map 77365 77366 /***/ }), 77367 77368 /***/ 13704: 77369 /***/ ((__unused_webpack_module, exports) => { 77370 77371 "use strict"; 77372 77373 Object.defineProperty(exports, "__esModule", ({ value: true })); 77374 exports.unescape = void 0; 77375 /** 77376 * Un-escape a string that has been escaped with {@link escape}. 77377 * 77378 * If the {@link windowsPathsNoEscape} option is used, then square-brace 77379 * escapes are removed, but not backslash escapes. For example, it will turn 77380 * the string `'[*]'` into `*`, but it will not turn `'\\*'` into `'*'`, 77381 * becuase `\` is a path separator in `windowsPathsNoEscape` mode. 77382 * 77383 * When `windowsPathsNoEscape` is not set, then both brace escapes and 77384 * backslash escapes are removed. 77385 * 77386 * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped 77387 * or unescaped. 77388 */ 77389 const unescape = (s, { windowsPathsNoEscape = false, } = {}) => { 77390 return windowsPathsNoEscape 77391 ? s.replace(/\[([^\/\\])\]/g, '$1') 77392 : s.replace(/((?!\\).|^)\[([^\/\\])\]/g, '$1$2').replace(/\\([^\/])/g, '$1'); 77393 }; 77394 exports.unescape = unescape; 77395 //# sourceMappingURL=unescape.js.map 77396 77397 /***/ }), 77398 77399 /***/ 14968: 77400 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 77401 77402 "use strict"; 77403 77404 var __importDefault = (this && this.__importDefault) || function (mod) { 77405 return (mod && mod.__esModule) ? mod : { "default": mod }; 77406 }; 77407 Object.defineProperty(exports, "__esModule", ({ value: true })); 77408 exports.Minipass = exports.isWritable = exports.isReadable = exports.isStream = void 0; 77409 const proc = typeof process === 'object' && process 77410 ? process 77411 : { 77412 stdout: null, 77413 stderr: null, 77414 }; 77415 const events_1 = __nccwpck_require__(82361); 77416 const stream_1 = __importDefault(__nccwpck_require__(12781)); 77417 const string_decoder_1 = __nccwpck_require__(71576); 77418 /** 77419 * Return true if the argument is a Minipass stream, Node stream, or something 77420 * else that Minipass can interact with. 77421 */ 77422 const isStream = (s) => !!s && 77423 typeof s === 'object' && 77424 (s instanceof Minipass || 77425 s instanceof stream_1.default || 77426 (0, exports.isReadable)(s) || 77427 (0, exports.isWritable)(s)); 77428 exports.isStream = isStream; 77429 /** 77430 * Return true if the argument is a valid {@link Minipass.Readable} 77431 */ 77432 const isReadable = (s) => !!s && 77433 typeof s === 'object' && 77434 s instanceof events_1.EventEmitter && 77435 typeof s.pipe === 'function' && 77436 // node core Writable streams have a pipe() method, but it throws 77437 s.pipe !== stream_1.default.Writable.prototype.pipe; 77438 exports.isReadable = isReadable; 77439 /** 77440 * Return true if the argument is a valid {@link Minipass.Writable} 77441 */ 77442 const isWritable = (s) => !!s && 77443 typeof s === 'object' && 77444 s instanceof events_1.EventEmitter && 77445 typeof s.write === 'function' && 77446 typeof s.end === 'function'; 77447 exports.isWritable = isWritable; 77448 const EOF = Symbol('EOF'); 77449 const MAYBE_EMIT_END = Symbol('maybeEmitEnd'); 77450 const EMITTED_END = Symbol('emittedEnd'); 77451 const EMITTING_END = Symbol('emittingEnd'); 77452 const EMITTED_ERROR = Symbol('emittedError'); 77453 const CLOSED = Symbol('closed'); 77454 const READ = Symbol('read'); 77455 const FLUSH = Symbol('flush'); 77456 const FLUSHCHUNK = Symbol('flushChunk'); 77457 const ENCODING = Symbol('encoding'); 77458 const DECODER = Symbol('decoder'); 77459 const FLOWING = Symbol('flowing'); 77460 const PAUSED = Symbol('paused'); 77461 const RESUME = Symbol('resume'); 77462 const BUFFER = Symbol('buffer'); 77463 const PIPES = Symbol('pipes'); 77464 const BUFFERLENGTH = Symbol('bufferLength'); 77465 const BUFFERPUSH = Symbol('bufferPush'); 77466 const BUFFERSHIFT = Symbol('bufferShift'); 77467 const OBJECTMODE = Symbol('objectMode'); 77468 // internal event when stream is destroyed 77469 const DESTROYED = Symbol('destroyed'); 77470 // internal event when stream has an error 77471 const ERROR = Symbol('error'); 77472 const EMITDATA = Symbol('emitData'); 77473 const EMITEND = Symbol('emitEnd'); 77474 const EMITEND2 = Symbol('emitEnd2'); 77475 const ASYNC = Symbol('async'); 77476 const ABORT = Symbol('abort'); 77477 const ABORTED = Symbol('aborted'); 77478 const SIGNAL = Symbol('signal'); 77479 const DATALISTENERS = Symbol('dataListeners'); 77480 const DISCARDED = Symbol('discarded'); 77481 const defer = (fn) => Promise.resolve().then(fn); 77482 const nodefer = (fn) => fn(); 77483 const isEndish = (ev) => ev === 'end' || ev === 'finish' || ev === 'prefinish'; 77484 const isArrayBufferLike = (b) => b instanceof ArrayBuffer || 77485 (!!b && 77486 typeof b === 'object' && 77487 b.constructor && 77488 b.constructor.name === 'ArrayBuffer' && 77489 b.byteLength >= 0); 77490 const isArrayBufferView = (b) => !Buffer.isBuffer(b) && ArrayBuffer.isView(b); 77491 /** 77492 * Internal class representing a pipe to a destination stream. 77493 * 77494 * @internal 77495 */ 77496 class Pipe { 77497 src; 77498 dest; 77499 opts; 77500 ondrain; 77501 constructor(src, dest, opts) { 77502 this.src = src; 77503 this.dest = dest; 77504 this.opts = opts; 77505 this.ondrain = () => src[RESUME](); 77506 this.dest.on('drain', this.ondrain); 77507 } 77508 unpipe() { 77509 this.dest.removeListener('drain', this.ondrain); 77510 } 77511 // only here for the prototype 77512 /* c8 ignore start */ 77513 proxyErrors(_er) { } 77514 /* c8 ignore stop */ 77515 end() { 77516 this.unpipe(); 77517 if (this.opts.end) 77518 this.dest.end(); 77519 } 77520 } 77521 /** 77522 * Internal class representing a pipe to a destination stream where 77523 * errors are proxied. 77524 * 77525 * @internal 77526 */ 77527 class PipeProxyErrors extends Pipe { 77528 unpipe() { 77529 this.src.removeListener('error', this.proxyErrors); 77530 super.unpipe(); 77531 } 77532 constructor(src, dest, opts) { 77533 super(src, dest, opts); 77534 this.proxyErrors = er => dest.emit('error', er); 77535 src.on('error', this.proxyErrors); 77536 } 77537 } 77538 const isObjectModeOptions = (o) => !!o.objectMode; 77539 const isEncodingOptions = (o) => !o.objectMode && !!o.encoding && o.encoding !== 'buffer'; 77540 /** 77541 * Main export, the Minipass class 77542 * 77543 * `RType` is the type of data emitted, defaults to Buffer 77544 * 77545 * `WType` is the type of data to be written, if RType is buffer or string, 77546 * then any {@link Minipass.ContiguousData} is allowed. 77547 * 77548 * `Events` is the set of event handler signatures that this object 77549 * will emit, see {@link Minipass.Events} 77550 */ 77551 class Minipass extends events_1.EventEmitter { 77552 [FLOWING] = false; 77553 [PAUSED] = false; 77554 [PIPES] = []; 77555 [BUFFER] = []; 77556 [OBJECTMODE]; 77557 [ENCODING]; 77558 [ASYNC]; 77559 [DECODER]; 77560 [EOF] = false; 77561 [EMITTED_END] = false; 77562 [EMITTING_END] = false; 77563 [CLOSED] = false; 77564 [EMITTED_ERROR] = null; 77565 [BUFFERLENGTH] = 0; 77566 [DESTROYED] = false; 77567 [SIGNAL]; 77568 [ABORTED] = false; 77569 [DATALISTENERS] = 0; 77570 [DISCARDED] = false; 77571 /** 77572 * true if the stream can be written 77573 */ 77574 writable = true; 77575 /** 77576 * true if the stream can be read 77577 */ 77578 readable = true; 77579 /** 77580 * If `RType` is Buffer, then options do not need to be provided. 77581 * Otherwise, an options object must be provided to specify either 77582 * {@link Minipass.SharedOptions.objectMode} or 77583 * {@link Minipass.SharedOptions.encoding}, as appropriate. 77584 */ 77585 constructor(...args) { 77586 const options = (args[0] || 77587 {}); 77588 super(); 77589 if (options.objectMode && typeof options.encoding === 'string') { 77590 throw new TypeError('Encoding and objectMode may not be used together'); 77591 } 77592 if (isObjectModeOptions(options)) { 77593 this[OBJECTMODE] = true; 77594 this[ENCODING] = null; 77595 } 77596 else if (isEncodingOptions(options)) { 77597 this[ENCODING] = options.encoding; 77598 this[OBJECTMODE] = false; 77599 } 77600 else { 77601 this[OBJECTMODE] = false; 77602 this[ENCODING] = null; 77603 } 77604 this[ASYNC] = !!options.async; 77605 this[DECODER] = this[ENCODING] 77606 ? new string_decoder_1.StringDecoder(this[ENCODING]) 77607 : null; 77608 //@ts-ignore - private option for debugging and testing 77609 if (options && options.debugExposeBuffer === true) { 77610 Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] }); 77611 } 77612 //@ts-ignore - private option for debugging and testing 77613 if (options && options.debugExposePipes === true) { 77614 Object.defineProperty(this, 'pipes', { get: () => this[PIPES] }); 77615 } 77616 const { signal } = options; 77617 if (signal) { 77618 this[SIGNAL] = signal; 77619 if (signal.aborted) { 77620 this[ABORT](); 77621 } 77622 else { 77623 signal.addEventListener('abort', () => this[ABORT]()); 77624 } 77625 } 77626 } 77627 /** 77628 * The amount of data stored in the buffer waiting to be read. 77629 * 77630 * For Buffer strings, this will be the total byte length. 77631 * For string encoding streams, this will be the string character length, 77632 * according to JavaScript's `string.length` logic. 77633 * For objectMode streams, this is a count of the items waiting to be 77634 * emitted. 77635 */ 77636 get bufferLength() { 77637 return this[BUFFERLENGTH]; 77638 } 77639 /** 77640 * The `BufferEncoding` currently in use, or `null` 77641 */ 77642 get encoding() { 77643 return this[ENCODING]; 77644 } 77645 /** 77646 * @deprecated - This is a read only property 77647 */ 77648 set encoding(_enc) { 77649 throw new Error('Encoding must be set at instantiation time'); 77650 } 77651 /** 77652 * @deprecated - Encoding may only be set at instantiation time 77653 */ 77654 setEncoding(_enc) { 77655 throw new Error('Encoding must be set at instantiation time'); 77656 } 77657 /** 77658 * True if this is an objectMode stream 77659 */ 77660 get objectMode() { 77661 return this[OBJECTMODE]; 77662 } 77663 /** 77664 * @deprecated - This is a read-only property 77665 */ 77666 set objectMode(_om) { 77667 throw new Error('objectMode must be set at instantiation time'); 77668 } 77669 /** 77670 * true if this is an async stream 77671 */ 77672 get ['async']() { 77673 return this[ASYNC]; 77674 } 77675 /** 77676 * Set to true to make this stream async. 77677 * 77678 * Once set, it cannot be unset, as this would potentially cause incorrect 77679 * behavior. Ie, a sync stream can be made async, but an async stream 77680 * cannot be safely made sync. 77681 */ 77682 set ['async'](a) { 77683 this[ASYNC] = this[ASYNC] || !!a; 77684 } 77685 // drop everything and get out of the flow completely 77686 [ABORT]() { 77687 this[ABORTED] = true; 77688 this.emit('abort', this[SIGNAL]?.reason); 77689 this.destroy(this[SIGNAL]?.reason); 77690 } 77691 /** 77692 * True if the stream has been aborted. 77693 */ 77694 get aborted() { 77695 return this[ABORTED]; 77696 } 77697 /** 77698 * No-op setter. Stream aborted status is set via the AbortSignal provided 77699 * in the constructor options. 77700 */ 77701 set aborted(_) { } 77702 write(chunk, encoding, cb) { 77703 if (this[ABORTED]) 77704 return false; 77705 if (this[EOF]) 77706 throw new Error('write after end'); 77707 if (this[DESTROYED]) { 77708 this.emit('error', Object.assign(new Error('Cannot call write after a stream was destroyed'), { code: 'ERR_STREAM_DESTROYED' })); 77709 return true; 77710 } 77711 if (typeof encoding === 'function') { 77712 cb = encoding; 77713 encoding = 'utf8'; 77714 } 77715 if (!encoding) 77716 encoding = 'utf8'; 77717 const fn = this[ASYNC] ? defer : nodefer; 77718 // convert array buffers and typed array views into buffers 77719 // at some point in the future, we may want to do the opposite! 77720 // leave strings and buffers as-is 77721 // anything is only allowed if in object mode, so throw 77722 if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) { 77723 if (isArrayBufferView(chunk)) { 77724 //@ts-ignore - sinful unsafe type changing 77725 chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength); 77726 } 77727 else if (isArrayBufferLike(chunk)) { 77728 //@ts-ignore - sinful unsafe type changing 77729 chunk = Buffer.from(chunk); 77730 } 77731 else if (typeof chunk !== 'string') { 77732 throw new Error('Non-contiguous data written to non-objectMode stream'); 77733 } 77734 } 77735 // handle object mode up front, since it's simpler 77736 // this yields better performance, fewer checks later. 77737 if (this[OBJECTMODE]) { 77738 // maybe impossible? 77739 /* c8 ignore start */ 77740 if (this[FLOWING] && this[BUFFERLENGTH] !== 0) 77741 this[FLUSH](true); 77742 /* c8 ignore stop */ 77743 if (this[FLOWING]) 77744 this.emit('data', chunk); 77745 else 77746 this[BUFFERPUSH](chunk); 77747 if (this[BUFFERLENGTH] !== 0) 77748 this.emit('readable'); 77749 if (cb) 77750 fn(cb); 77751 return this[FLOWING]; 77752 } 77753 // at this point the chunk is a buffer or string 77754 // don't buffer it up or send it to the decoder 77755 if (!chunk.length) { 77756 if (this[BUFFERLENGTH] !== 0) 77757 this.emit('readable'); 77758 if (cb) 77759 fn(cb); 77760 return this[FLOWING]; 77761 } 77762 // fast-path writing strings of same encoding to a stream with 77763 // an empty buffer, skipping the buffer/decoder dance 77764 if (typeof chunk === 'string' && 77765 // unless it is a string already ready for us to use 77766 !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)) { 77767 //@ts-ignore - sinful unsafe type change 77768 chunk = Buffer.from(chunk, encoding); 77769 } 77770 if (Buffer.isBuffer(chunk) && this[ENCODING]) { 77771 //@ts-ignore - sinful unsafe type change 77772 chunk = this[DECODER].write(chunk); 77773 } 77774 // Note: flushing CAN potentially switch us into not-flowing mode 77775 if (this[FLOWING] && this[BUFFERLENGTH] !== 0) 77776 this[FLUSH](true); 77777 if (this[FLOWING]) 77778 this.emit('data', chunk); 77779 else 77780 this[BUFFERPUSH](chunk); 77781 if (this[BUFFERLENGTH] !== 0) 77782 this.emit('readable'); 77783 if (cb) 77784 fn(cb); 77785 return this[FLOWING]; 77786 } 77787 /** 77788 * Low-level explicit read method. 77789 * 77790 * In objectMode, the argument is ignored, and one item is returned if 77791 * available. 77792 * 77793 * `n` is the number of bytes (or in the case of encoding streams, 77794 * characters) to consume. If `n` is not provided, then the entire buffer 77795 * is returned, or `null` is returned if no data is available. 77796 * 77797 * If `n` is greater that the amount of data in the internal buffer, 77798 * then `null` is returned. 77799 */ 77800 read(n) { 77801 if (this[DESTROYED]) 77802 return null; 77803 this[DISCARDED] = false; 77804 if (this[BUFFERLENGTH] === 0 || 77805 n === 0 || 77806 (n && n > this[BUFFERLENGTH])) { 77807 this[MAYBE_EMIT_END](); 77808 return null; 77809 } 77810 if (this[OBJECTMODE]) 77811 n = null; 77812 if (this[BUFFER].length > 1 && !this[OBJECTMODE]) { 77813 // not object mode, so if we have an encoding, then RType is string 77814 // otherwise, must be Buffer 77815 this[BUFFER] = [ 77816 (this[ENCODING] 77817 ? this[BUFFER].join('') 77818 : Buffer.concat(this[BUFFER], this[BUFFERLENGTH])), 77819 ]; 77820 } 77821 const ret = this[READ](n || null, this[BUFFER][0]); 77822 this[MAYBE_EMIT_END](); 77823 return ret; 77824 } 77825 [READ](n, chunk) { 77826 if (this[OBJECTMODE]) 77827 this[BUFFERSHIFT](); 77828 else { 77829 const c = chunk; 77830 if (n === c.length || n === null) 77831 this[BUFFERSHIFT](); 77832 else if (typeof c === 'string') { 77833 this[BUFFER][0] = c.slice(n); 77834 chunk = c.slice(0, n); 77835 this[BUFFERLENGTH] -= n; 77836 } 77837 else { 77838 this[BUFFER][0] = c.subarray(n); 77839 chunk = c.subarray(0, n); 77840 this[BUFFERLENGTH] -= n; 77841 } 77842 } 77843 this.emit('data', chunk); 77844 if (!this[BUFFER].length && !this[EOF]) 77845 this.emit('drain'); 77846 return chunk; 77847 } 77848 end(chunk, encoding, cb) { 77849 if (typeof chunk === 'function') { 77850 cb = chunk; 77851 chunk = undefined; 77852 } 77853 if (typeof encoding === 'function') { 77854 cb = encoding; 77855 encoding = 'utf8'; 77856 } 77857 if (chunk !== undefined) 77858 this.write(chunk, encoding); 77859 if (cb) 77860 this.once('end', cb); 77861 this[EOF] = true; 77862 this.writable = false; 77863 // if we haven't written anything, then go ahead and emit, 77864 // even if we're not reading. 77865 // we'll re-emit if a new 'end' listener is added anyway. 77866 // This makes MP more suitable to write-only use cases. 77867 if (this[FLOWING] || !this[PAUSED]) 77868 this[MAYBE_EMIT_END](); 77869 return this; 77870 } 77871 // don't let the internal resume be overwritten 77872 [RESUME]() { 77873 if (this[DESTROYED]) 77874 return; 77875 if (!this[DATALISTENERS] && !this[PIPES].length) { 77876 this[DISCARDED] = true; 77877 } 77878 this[PAUSED] = false; 77879 this[FLOWING] = true; 77880 this.emit('resume'); 77881 if (this[BUFFER].length) 77882 this[FLUSH](); 77883 else if (this[EOF]) 77884 this[MAYBE_EMIT_END](); 77885 else 77886 this.emit('drain'); 77887 } 77888 /** 77889 * Resume the stream if it is currently in a paused state 77890 * 77891 * If called when there are no pipe destinations or `data` event listeners, 77892 * this will place the stream in a "discarded" state, where all data will 77893 * be thrown away. The discarded state is removed if a pipe destination or 77894 * data handler is added, if pause() is called, or if any synchronous or 77895 * asynchronous iteration is started. 77896 */ 77897 resume() { 77898 return this[RESUME](); 77899 } 77900 /** 77901 * Pause the stream 77902 */ 77903 pause() { 77904 this[FLOWING] = false; 77905 this[PAUSED] = true; 77906 this[DISCARDED] = false; 77907 } 77908 /** 77909 * true if the stream has been forcibly destroyed 77910 */ 77911 get destroyed() { 77912 return this[DESTROYED]; 77913 } 77914 /** 77915 * true if the stream is currently in a flowing state, meaning that 77916 * any writes will be immediately emitted. 77917 */ 77918 get flowing() { 77919 return this[FLOWING]; 77920 } 77921 /** 77922 * true if the stream is currently in a paused state 77923 */ 77924 get paused() { 77925 return this[PAUSED]; 77926 } 77927 [BUFFERPUSH](chunk) { 77928 if (this[OBJECTMODE]) 77929 this[BUFFERLENGTH] += 1; 77930 else 77931 this[BUFFERLENGTH] += chunk.length; 77932 this[BUFFER].push(chunk); 77933 } 77934 [BUFFERSHIFT]() { 77935 if (this[OBJECTMODE]) 77936 this[BUFFERLENGTH] -= 1; 77937 else 77938 this[BUFFERLENGTH] -= this[BUFFER][0].length; 77939 return this[BUFFER].shift(); 77940 } 77941 [FLUSH](noDrain = false) { 77942 do { } while (this[FLUSHCHUNK](this[BUFFERSHIFT]()) && 77943 this[BUFFER].length); 77944 if (!noDrain && !this[BUFFER].length && !this[EOF]) 77945 this.emit('drain'); 77946 } 77947 [FLUSHCHUNK](chunk) { 77948 this.emit('data', chunk); 77949 return this[FLOWING]; 77950 } 77951 /** 77952 * Pipe all data emitted by this stream into the destination provided. 77953 * 77954 * Triggers the flow of data. 77955 */ 77956 pipe(dest, opts) { 77957 if (this[DESTROYED]) 77958 return dest; 77959 this[DISCARDED] = false; 77960 const ended = this[EMITTED_END]; 77961 opts = opts || {}; 77962 if (dest === proc.stdout || dest === proc.stderr) 77963 opts.end = false; 77964 else 77965 opts.end = opts.end !== false; 77966 opts.proxyErrors = !!opts.proxyErrors; 77967 // piping an ended stream ends immediately 77968 if (ended) { 77969 if (opts.end) 77970 dest.end(); 77971 } 77972 else { 77973 // "as" here just ignores the WType, which pipes don't care about, 77974 // since they're only consuming from us, and writing to the dest 77975 this[PIPES].push(!opts.proxyErrors 77976 ? new Pipe(this, dest, opts) 77977 : new PipeProxyErrors(this, dest, opts)); 77978 if (this[ASYNC]) 77979 defer(() => this[RESUME]()); 77980 else 77981 this[RESUME](); 77982 } 77983 return dest; 77984 } 77985 /** 77986 * Fully unhook a piped destination stream. 77987 * 77988 * If the destination stream was the only consumer of this stream (ie, 77989 * there are no other piped destinations or `'data'` event listeners) 77990 * then the flow of data will stop until there is another consumer or 77991 * {@link Minipass#resume} is explicitly called. 77992 */ 77993 unpipe(dest) { 77994 const p = this[PIPES].find(p => p.dest === dest); 77995 if (p) { 77996 if (this[PIPES].length === 1) { 77997 if (this[FLOWING] && this[DATALISTENERS] === 0) { 77998 this[FLOWING] = false; 77999 } 78000 this[PIPES] = []; 78001 } 78002 else 78003 this[PIPES].splice(this[PIPES].indexOf(p), 1); 78004 p.unpipe(); 78005 } 78006 } 78007 /** 78008 * Alias for {@link Minipass#on} 78009 */ 78010 addListener(ev, handler) { 78011 return this.on(ev, handler); 78012 } 78013 /** 78014 * Mostly identical to `EventEmitter.on`, with the following 78015 * behavior differences to prevent data loss and unnecessary hangs: 78016 * 78017 * - Adding a 'data' event handler will trigger the flow of data 78018 * 78019 * - Adding a 'readable' event handler when there is data waiting to be read 78020 * will cause 'readable' to be emitted immediately. 78021 * 78022 * - Adding an 'endish' event handler ('end', 'finish', etc.) which has 78023 * already passed will cause the event to be emitted immediately and all 78024 * handlers removed. 78025 * 78026 * - Adding an 'error' event handler after an error has been emitted will 78027 * cause the event to be re-emitted immediately with the error previously 78028 * raised. 78029 */ 78030 on(ev, handler) { 78031 const ret = super.on(ev, handler); 78032 if (ev === 'data') { 78033 this[DISCARDED] = false; 78034 this[DATALISTENERS]++; 78035 if (!this[PIPES].length && !this[FLOWING]) { 78036 this[RESUME](); 78037 } 78038 } 78039 else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) { 78040 super.emit('readable'); 78041 } 78042 else if (isEndish(ev) && this[EMITTED_END]) { 78043 super.emit(ev); 78044 this.removeAllListeners(ev); 78045 } 78046 else if (ev === 'error' && this[EMITTED_ERROR]) { 78047 const h = handler; 78048 if (this[ASYNC]) 78049 defer(() => h.call(this, this[EMITTED_ERROR])); 78050 else 78051 h.call(this, this[EMITTED_ERROR]); 78052 } 78053 return ret; 78054 } 78055 /** 78056 * Alias for {@link Minipass#off} 78057 */ 78058 removeListener(ev, handler) { 78059 return this.off(ev, handler); 78060 } 78061 /** 78062 * Mostly identical to `EventEmitter.off` 78063 * 78064 * If a 'data' event handler is removed, and it was the last consumer 78065 * (ie, there are no pipe destinations or other 'data' event listeners), 78066 * then the flow of data will stop until there is another consumer or 78067 * {@link Minipass#resume} is explicitly called. 78068 */ 78069 off(ev, handler) { 78070 const ret = super.off(ev, handler); 78071 // if we previously had listeners, and now we don't, and we don't 78072 // have any pipes, then stop the flow, unless it's been explicitly 78073 // put in a discarded flowing state via stream.resume(). 78074 if (ev === 'data') { 78075 this[DATALISTENERS] = this.listeners('data').length; 78076 if (this[DATALISTENERS] === 0 && 78077 !this[DISCARDED] && 78078 !this[PIPES].length) { 78079 this[FLOWING] = false; 78080 } 78081 } 78082 return ret; 78083 } 78084 /** 78085 * Mostly identical to `EventEmitter.removeAllListeners` 78086 * 78087 * If all 'data' event handlers are removed, and they were the last consumer 78088 * (ie, there are no pipe destinations), then the flow of data will stop 78089 * until there is another consumer or {@link Minipass#resume} is explicitly 78090 * called. 78091 */ 78092 removeAllListeners(ev) { 78093 const ret = super.removeAllListeners(ev); 78094 if (ev === 'data' || ev === undefined) { 78095 this[DATALISTENERS] = 0; 78096 if (!this[DISCARDED] && !this[PIPES].length) { 78097 this[FLOWING] = false; 78098 } 78099 } 78100 return ret; 78101 } 78102 /** 78103 * true if the 'end' event has been emitted 78104 */ 78105 get emittedEnd() { 78106 return this[EMITTED_END]; 78107 } 78108 [MAYBE_EMIT_END]() { 78109 if (!this[EMITTING_END] && 78110 !this[EMITTED_END] && 78111 !this[DESTROYED] && 78112 this[BUFFER].length === 0 && 78113 this[EOF]) { 78114 this[EMITTING_END] = true; 78115 this.emit('end'); 78116 this.emit('prefinish'); 78117 this.emit('finish'); 78118 if (this[CLOSED]) 78119 this.emit('close'); 78120 this[EMITTING_END] = false; 78121 } 78122 } 78123 /** 78124 * Mostly identical to `EventEmitter.emit`, with the following 78125 * behavior differences to prevent data loss and unnecessary hangs: 78126 * 78127 * If the stream has been destroyed, and the event is something other 78128 * than 'close' or 'error', then `false` is returned and no handlers 78129 * are called. 78130 * 78131 * If the event is 'end', and has already been emitted, then the event 78132 * is ignored. If the stream is in a paused or non-flowing state, then 78133 * the event will be deferred until data flow resumes. If the stream is 78134 * async, then handlers will be called on the next tick rather than 78135 * immediately. 78136 * 78137 * If the event is 'close', and 'end' has not yet been emitted, then 78138 * the event will be deferred until after 'end' is emitted. 78139 * 78140 * If the event is 'error', and an AbortSignal was provided for the stream, 78141 * and there are no listeners, then the event is ignored, matching the 78142 * behavior of node core streams in the presense of an AbortSignal. 78143 * 78144 * If the event is 'finish' or 'prefinish', then all listeners will be 78145 * removed after emitting the event, to prevent double-firing. 78146 */ 78147 emit(ev, ...args) { 78148 const data = args[0]; 78149 // error and close are only events allowed after calling destroy() 78150 if (ev !== 'error' && 78151 ev !== 'close' && 78152 ev !== DESTROYED && 78153 this[DESTROYED]) { 78154 return false; 78155 } 78156 else if (ev === 'data') { 78157 return !this[OBJECTMODE] && !data 78158 ? false 78159 : this[ASYNC] 78160 ? (defer(() => this[EMITDATA](data)), true) 78161 : this[EMITDATA](data); 78162 } 78163 else if (ev === 'end') { 78164 return this[EMITEND](); 78165 } 78166 else if (ev === 'close') { 78167 this[CLOSED] = true; 78168 // don't emit close before 'end' and 'finish' 78169 if (!this[EMITTED_END] && !this[DESTROYED]) 78170 return false; 78171 const ret = super.emit('close'); 78172 this.removeAllListeners('close'); 78173 return ret; 78174 } 78175 else if (ev === 'error') { 78176 this[EMITTED_ERROR] = data; 78177 super.emit(ERROR, data); 78178 const ret = !this[SIGNAL] || this.listeners('error').length 78179 ? super.emit('error', data) 78180 : false; 78181 this[MAYBE_EMIT_END](); 78182 return ret; 78183 } 78184 else if (ev === 'resume') { 78185 const ret = super.emit('resume'); 78186 this[MAYBE_EMIT_END](); 78187 return ret; 78188 } 78189 else if (ev === 'finish' || ev === 'prefinish') { 78190 const ret = super.emit(ev); 78191 this.removeAllListeners(ev); 78192 return ret; 78193 } 78194 // Some other unknown event 78195 const ret = super.emit(ev, ...args); 78196 this[MAYBE_EMIT_END](); 78197 return ret; 78198 } 78199 [EMITDATA](data) { 78200 for (const p of this[PIPES]) { 78201 if (p.dest.write(data) === false) 78202 this.pause(); 78203 } 78204 const ret = this[DISCARDED] ? false : super.emit('data', data); 78205 this[MAYBE_EMIT_END](); 78206 return ret; 78207 } 78208 [EMITEND]() { 78209 if (this[EMITTED_END]) 78210 return false; 78211 this[EMITTED_END] = true; 78212 this.readable = false; 78213 return this[ASYNC] 78214 ? (defer(() => this[EMITEND2]()), true) 78215 : this[EMITEND2](); 78216 } 78217 [EMITEND2]() { 78218 if (this[DECODER]) { 78219 const data = this[DECODER].end(); 78220 if (data) { 78221 for (const p of this[PIPES]) { 78222 p.dest.write(data); 78223 } 78224 if (!this[DISCARDED]) 78225 super.emit('data', data); 78226 } 78227 } 78228 for (const p of this[PIPES]) { 78229 p.end(); 78230 } 78231 const ret = super.emit('end'); 78232 this.removeAllListeners('end'); 78233 return ret; 78234 } 78235 /** 78236 * Return a Promise that resolves to an array of all emitted data once 78237 * the stream ends. 78238 */ 78239 async collect() { 78240 const buf = Object.assign([], { 78241 dataLength: 0, 78242 }); 78243 if (!this[OBJECTMODE]) 78244 buf.dataLength = 0; 78245 // set the promise first, in case an error is raised 78246 // by triggering the flow here. 78247 const p = this.promise(); 78248 this.on('data', c => { 78249 buf.push(c); 78250 if (!this[OBJECTMODE]) 78251 buf.dataLength += c.length; 78252 }); 78253 await p; 78254 return buf; 78255 } 78256 /** 78257 * Return a Promise that resolves to the concatenation of all emitted data 78258 * once the stream ends. 78259 * 78260 * Not allowed on objectMode streams. 78261 */ 78262 async concat() { 78263 if (this[OBJECTMODE]) { 78264 throw new Error('cannot concat in objectMode'); 78265 } 78266 const buf = await this.collect(); 78267 return (this[ENCODING] 78268 ? buf.join('') 78269 : Buffer.concat(buf, buf.dataLength)); 78270 } 78271 /** 78272 * Return a void Promise that resolves once the stream ends. 78273 */ 78274 async promise() { 78275 return new Promise((resolve, reject) => { 78276 this.on(DESTROYED, () => reject(new Error('stream destroyed'))); 78277 this.on('error', er => reject(er)); 78278 this.on('end', () => resolve()); 78279 }); 78280 } 78281 /** 78282 * Asynchronous `for await of` iteration. 78283 * 78284 * This will continue emitting all chunks until the stream terminates. 78285 */ 78286 [Symbol.asyncIterator]() { 78287 // set this up front, in case the consumer doesn't call next() 78288 // right away. 78289 this[DISCARDED] = false; 78290 let stopped = false; 78291 const stop = async () => { 78292 this.pause(); 78293 stopped = true; 78294 return { value: undefined, done: true }; 78295 }; 78296 const next = () => { 78297 if (stopped) 78298 return stop(); 78299 const res = this.read(); 78300 if (res !== null) 78301 return Promise.resolve({ done: false, value: res }); 78302 if (this[EOF]) 78303 return stop(); 78304 let resolve; 78305 let reject; 78306 const onerr = (er) => { 78307 this.off('data', ondata); 78308 this.off('end', onend); 78309 this.off(DESTROYED, ondestroy); 78310 stop(); 78311 reject(er); 78312 }; 78313 const ondata = (value) => { 78314 this.off('error', onerr); 78315 this.off('end', onend); 78316 this.off(DESTROYED, ondestroy); 78317 this.pause(); 78318 resolve({ value, done: !!this[EOF] }); 78319 }; 78320 const onend = () => { 78321 this.off('error', onerr); 78322 this.off('data', ondata); 78323 this.off(DESTROYED, ondestroy); 78324 stop(); 78325 resolve({ done: true, value: undefined }); 78326 }; 78327 const ondestroy = () => onerr(new Error('stream destroyed')); 78328 return new Promise((res, rej) => { 78329 reject = rej; 78330 resolve = res; 78331 this.once(DESTROYED, ondestroy); 78332 this.once('error', onerr); 78333 this.once('end', onend); 78334 this.once('data', ondata); 78335 }); 78336 }; 78337 return { 78338 next, 78339 throw: stop, 78340 return: stop, 78341 [Symbol.asyncIterator]() { 78342 return this; 78343 }, 78344 }; 78345 } 78346 /** 78347 * Synchronous `for of` iteration. 78348 * 78349 * The iteration will terminate when the internal buffer runs out, even 78350 * if the stream has not yet terminated. 78351 */ 78352 [Symbol.iterator]() { 78353 // set this up front, in case the consumer doesn't call next() 78354 // right away. 78355 this[DISCARDED] = false; 78356 let stopped = false; 78357 const stop = () => { 78358 this.pause(); 78359 this.off(ERROR, stop); 78360 this.off(DESTROYED, stop); 78361 this.off('end', stop); 78362 stopped = true; 78363 return { done: true, value: undefined }; 78364 }; 78365 const next = () => { 78366 if (stopped) 78367 return stop(); 78368 const value = this.read(); 78369 return value === null ? stop() : { done: false, value }; 78370 }; 78371 this.once('end', stop); 78372 this.once(ERROR, stop); 78373 this.once(DESTROYED, stop); 78374 return { 78375 next, 78376 throw: stop, 78377 return: stop, 78378 [Symbol.iterator]() { 78379 return this; 78380 }, 78381 }; 78382 } 78383 /** 78384 * Destroy a stream, preventing it from being used for any further purpose. 78385 * 78386 * If the stream has a `close()` method, then it will be called on 78387 * destruction. 78388 * 78389 * After destruction, any attempt to write data, read data, or emit most 78390 * events will be ignored. 78391 * 78392 * If an error argument is provided, then it will be emitted in an 78393 * 'error' event. 78394 */ 78395 destroy(er) { 78396 if (this[DESTROYED]) { 78397 if (er) 78398 this.emit('error', er); 78399 else 78400 this.emit(DESTROYED); 78401 return this; 78402 } 78403 this[DESTROYED] = true; 78404 this[DISCARDED] = true; 78405 // throw away all buffered data, it's never coming out 78406 this[BUFFER].length = 0; 78407 this[BUFFERLENGTH] = 0; 78408 const wc = this; 78409 if (typeof wc.close === 'function' && !this[CLOSED]) 78410 wc.close(); 78411 if (er) 78412 this.emit('error', er); 78413 // if no error to emit, still reject pending promises 78414 else 78415 this.emit(DESTROYED); 78416 return this; 78417 } 78418 /** 78419 * Alias for {@link isStream} 78420 * 78421 * Former export location, maintained for backwards compatibility. 78422 * 78423 * @deprecated 78424 */ 78425 static get isStream() { 78426 return exports.isStream; 78427 } 78428 } 78429 exports.Minipass = Minipass; 78430 //# sourceMappingURL=index.js.map 78431 78432 /***/ }), 78433 78434 /***/ 51081: 78435 /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { 78436 78437 "use strict"; 78438 78439 var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 78440 if (k2 === undefined) k2 = k; 78441 var desc = Object.getOwnPropertyDescriptor(m, k); 78442 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 78443 desc = { enumerable: true, get: function() { return m[k]; } }; 78444 } 78445 Object.defineProperty(o, k2, desc); 78446 }) : (function(o, m, k, k2) { 78447 if (k2 === undefined) k2 = k; 78448 o[k2] = m[k]; 78449 })); 78450 var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 78451 Object.defineProperty(o, "default", { enumerable: true, value: v }); 78452 }) : function(o, v) { 78453 o["default"] = v; 78454 }); 78455 var __importStar = (this && this.__importStar) || function (mod) { 78456 if (mod && mod.__esModule) return mod; 78457 var result = {}; 78458 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 78459 __setModuleDefault(result, mod); 78460 return result; 78461 }; 78462 Object.defineProperty(exports, "__esModule", ({ value: true })); 78463 exports.PathScurry = exports.Path = exports.PathScurryDarwin = exports.PathScurryPosix = exports.PathScurryWin32 = exports.PathScurryBase = exports.PathPosix = exports.PathWin32 = exports.PathBase = exports.ChildrenCache = exports.ResolveCache = void 0; 78464 const lru_cache_1 = __nccwpck_require__(66091); 78465 const path_1 = __nccwpck_require__(71017); 78466 const url_1 = __nccwpck_require__(57310); 78467 const actualFS = __importStar(__nccwpck_require__(57147)); 78468 const fs_1 = __nccwpck_require__(57147); 78469 const realpathSync = fs_1.realpathSync.native; 78470 // TODO: test perf of fs/promises realpath vs realpathCB, 78471 // since the promises one uses realpath.native 78472 const promises_1 = __nccwpck_require__(73292); 78473 const minipass_1 = __nccwpck_require__(14968); 78474 const defaultFS = { 78475 lstatSync: fs_1.lstatSync, 78476 readdir: fs_1.readdir, 78477 readdirSync: fs_1.readdirSync, 78478 readlinkSync: fs_1.readlinkSync, 78479 realpathSync, 78480 promises: { 78481 lstat: promises_1.lstat, 78482 readdir: promises_1.readdir, 78483 readlink: promises_1.readlink, 78484 realpath: promises_1.realpath, 78485 }, 78486 }; 78487 // if they just gave us require('fs') then use our default 78488 const fsFromOption = (fsOption) => !fsOption || fsOption === defaultFS || fsOption === actualFS 78489 ? defaultFS 78490 : { 78491 ...defaultFS, 78492 ...fsOption, 78493 promises: { 78494 ...defaultFS.promises, 78495 ...(fsOption.promises || {}), 78496 }, 78497 }; 78498 // turn something like //?/c:/ into c:\ 78499 const uncDriveRegexp = /^\\\\\?\\([a-z]:)\\?$/i; 78500 const uncToDrive = (rootPath) => rootPath.replace(/\//g, '\\').replace(uncDriveRegexp, '$1\\'); 78501 // windows paths are separated by either / or \ 78502 const eitherSep = /[\\\/]/; 78503 const UNKNOWN = 0; // may not even exist, for all we know 78504 const IFIFO = 0b0001; 78505 const IFCHR = 0b0010; 78506 const IFDIR = 0b0100; 78507 const IFBLK = 0b0110; 78508 const IFREG = 0b1000; 78509 const IFLNK = 0b1010; 78510 const IFSOCK = 0b1100; 78511 const IFMT = 0b1111; 78512 // mask to unset low 4 bits 78513 const IFMT_UNKNOWN = ~IFMT; 78514 // set after successfully calling readdir() and getting entries. 78515 const READDIR_CALLED = 0b0000_0001_0000; 78516 // set after a successful lstat() 78517 const LSTAT_CALLED = 0b0000_0010_0000; 78518 // set if an entry (or one of its parents) is definitely not a dir 78519 const ENOTDIR = 0b0000_0100_0000; 78520 // set if an entry (or one of its parents) does not exist 78521 // (can also be set on lstat errors like EACCES or ENAMETOOLONG) 78522 const ENOENT = 0b0000_1000_0000; 78523 // cannot have child entries -- also verify &IFMT is either IFDIR or IFLNK 78524 // set if we fail to readlink 78525 const ENOREADLINK = 0b0001_0000_0000; 78526 // set if we know realpath() will fail 78527 const ENOREALPATH = 0b0010_0000_0000; 78528 const ENOCHILD = ENOTDIR | ENOENT | ENOREALPATH; 78529 const TYPEMASK = 0b0011_1111_1111; 78530 const entToType = (s) => s.isFile() 78531 ? IFREG 78532 : s.isDirectory() 78533 ? IFDIR 78534 : s.isSymbolicLink() 78535 ? IFLNK 78536 : s.isCharacterDevice() 78537 ? IFCHR 78538 : s.isBlockDevice() 78539 ? IFBLK 78540 : s.isSocket() 78541 ? IFSOCK 78542 : s.isFIFO() 78543 ? IFIFO 78544 : UNKNOWN; 78545 // normalize unicode path names 78546 const normalizeCache = new Map(); 78547 const normalize = (s) => { 78548 const c = normalizeCache.get(s); 78549 if (c) 78550 return c; 78551 const n = s.normalize('NFKD'); 78552 normalizeCache.set(s, n); 78553 return n; 78554 }; 78555 const normalizeNocaseCache = new Map(); 78556 const normalizeNocase = (s) => { 78557 const c = normalizeNocaseCache.get(s); 78558 if (c) 78559 return c; 78560 const n = normalize(s.toLowerCase()); 78561 normalizeNocaseCache.set(s, n); 78562 return n; 78563 }; 78564 /** 78565 * An LRUCache for storing resolved path strings or Path objects. 78566 * @internal 78567 */ 78568 class ResolveCache extends lru_cache_1.LRUCache { 78569 constructor() { 78570 super({ max: 256 }); 78571 } 78572 } 78573 exports.ResolveCache = ResolveCache; 78574 // In order to prevent blowing out the js heap by allocating hundreds of 78575 // thousands of Path entries when walking extremely large trees, the "children" 78576 // in this tree are represented by storing an array of Path entries in an 78577 // LRUCache, indexed by the parent. At any time, Path.children() may return an 78578 // empty array, indicating that it doesn't know about any of its children, and 78579 // thus has to rebuild that cache. This is fine, it just means that we don't 78580 // benefit as much from having the cached entries, but huge directory walks 78581 // don't blow out the stack, and smaller ones are still as fast as possible. 78582 // 78583 //It does impose some complexity when building up the readdir data, because we 78584 //need to pass a reference to the children array that we started with. 78585 /** 78586 * an LRUCache for storing child entries. 78587 * @internal 78588 */ 78589 class ChildrenCache extends lru_cache_1.LRUCache { 78590 constructor(maxSize = 16 * 1024) { 78591 super({ 78592 maxSize, 78593 // parent + children 78594 sizeCalculation: a => a.length + 1, 78595 }); 78596 } 78597 } 78598 exports.ChildrenCache = ChildrenCache; 78599 const setAsCwd = Symbol('PathScurry setAsCwd'); 78600 /** 78601 * Path objects are sort of like a super-powered 78602 * {@link https://nodejs.org/docs/latest/api/fs.html#class-fsdirent fs.Dirent} 78603 * 78604 * Each one represents a single filesystem entry on disk, which may or may not 78605 * exist. It includes methods for reading various types of information via 78606 * lstat, readlink, and readdir, and caches all information to the greatest 78607 * degree possible. 78608 * 78609 * Note that fs operations that would normally throw will instead return an 78610 * "empty" value. This is in order to prevent excessive overhead from error 78611 * stack traces. 78612 */ 78613 class PathBase { 78614 /** 78615 * the basename of this path 78616 * 78617 * **Important**: *always* test the path name against any test string 78618 * usingthe {@link isNamed} method, and not by directly comparing this 78619 * string. Otherwise, unicode path strings that the system sees as identical 78620 * will not be properly treated as the same path, leading to incorrect 78621 * behavior and possible security issues. 78622 */ 78623 name; 78624 /** 78625 * the Path entry corresponding to the path root. 78626 * 78627 * @internal 78628 */ 78629 root; 78630 /** 78631 * All roots found within the current PathScurry family 78632 * 78633 * @internal 78634 */ 78635 roots; 78636 /** 78637 * a reference to the parent path, or undefined in the case of root entries 78638 * 78639 * @internal 78640 */ 78641 parent; 78642 /** 78643 * boolean indicating whether paths are compared case-insensitively 78644 * @internal 78645 */ 78646 nocase; 78647 // potential default fs override 78648 #fs; 78649 // Stats fields 78650 #dev; 78651 get dev() { 78652 return this.#dev; 78653 } 78654 #mode; 78655 get mode() { 78656 return this.#mode; 78657 } 78658 #nlink; 78659 get nlink() { 78660 return this.#nlink; 78661 } 78662 #uid; 78663 get uid() { 78664 return this.#uid; 78665 } 78666 #gid; 78667 get gid() { 78668 return this.#gid; 78669 } 78670 #rdev; 78671 get rdev() { 78672 return this.#rdev; 78673 } 78674 #blksize; 78675 get blksize() { 78676 return this.#blksize; 78677 } 78678 #ino; 78679 get ino() { 78680 return this.#ino; 78681 } 78682 #size; 78683 get size() { 78684 return this.#size; 78685 } 78686 #blocks; 78687 get blocks() { 78688 return this.#blocks; 78689 } 78690 #atimeMs; 78691 get atimeMs() { 78692 return this.#atimeMs; 78693 } 78694 #mtimeMs; 78695 get mtimeMs() { 78696 return this.#mtimeMs; 78697 } 78698 #ctimeMs; 78699 get ctimeMs() { 78700 return this.#ctimeMs; 78701 } 78702 #birthtimeMs; 78703 get birthtimeMs() { 78704 return this.#birthtimeMs; 78705 } 78706 #atime; 78707 get atime() { 78708 return this.#atime; 78709 } 78710 #mtime; 78711 get mtime() { 78712 return this.#mtime; 78713 } 78714 #ctime; 78715 get ctime() { 78716 return this.#ctime; 78717 } 78718 #birthtime; 78719 get birthtime() { 78720 return this.#birthtime; 78721 } 78722 #matchName; 78723 #depth; 78724 #fullpath; 78725 #fullpathPosix; 78726 #relative; 78727 #relativePosix; 78728 #type; 78729 #children; 78730 #linkTarget; 78731 #realpath; 78732 /** 78733 * This property is for compatibility with the Dirent class as of 78734 * Node v20, where Dirent['path'] refers to the path of the directory 78735 * that was passed to readdir. So, somewhat counterintuitively, this 78736 * property refers to the *parent* path, not the path object itself. 78737 * For root entries, it's the path to the entry itself. 78738 */ 78739 get path() { 78740 return (this.parent || this).fullpath(); 78741 } 78742 /** 78743 * Do not create new Path objects directly. They should always be accessed 78744 * via the PathScurry class or other methods on the Path class. 78745 * 78746 * @internal 78747 */ 78748 constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) { 78749 this.name = name; 78750 this.#matchName = nocase ? normalizeNocase(name) : normalize(name); 78751 this.#type = type & TYPEMASK; 78752 this.nocase = nocase; 78753 this.roots = roots; 78754 this.root = root || this; 78755 this.#children = children; 78756 this.#fullpath = opts.fullpath; 78757 this.#relative = opts.relative; 78758 this.#relativePosix = opts.relativePosix; 78759 this.parent = opts.parent; 78760 if (this.parent) { 78761 this.#fs = this.parent.#fs; 78762 } 78763 else { 78764 this.#fs = fsFromOption(opts.fs); 78765 } 78766 } 78767 /** 78768 * Returns the depth of the Path object from its root. 78769 * 78770 * For example, a path at `/foo/bar` would have a depth of 2. 78771 */ 78772 depth() { 78773 if (this.#depth !== undefined) 78774 return this.#depth; 78775 if (!this.parent) 78776 return (this.#depth = 0); 78777 return (this.#depth = this.parent.depth() + 1); 78778 } 78779 /** 78780 * @internal 78781 */ 78782 childrenCache() { 78783 return this.#children; 78784 } 78785 /** 78786 * Get the Path object referenced by the string path, resolved from this Path 78787 */ 78788 resolve(path) { 78789 if (!path) { 78790 return this; 78791 } 78792 const rootPath = this.getRootString(path); 78793 const dir = path.substring(rootPath.length); 78794 const dirParts = dir.split(this.splitSep); 78795 const result = rootPath 78796 ? this.getRoot(rootPath).#resolveParts(dirParts) 78797 : this.#resolveParts(dirParts); 78798 return result; 78799 } 78800 #resolveParts(dirParts) { 78801 let p = this; 78802 for (const part of dirParts) { 78803 p = p.child(part); 78804 } 78805 return p; 78806 } 78807 /** 78808 * Returns the cached children Path objects, if still available. If they 78809 * have fallen out of the cache, then returns an empty array, and resets the 78810 * READDIR_CALLED bit, so that future calls to readdir() will require an fs 78811 * lookup. 78812 * 78813 * @internal 78814 */ 78815 children() { 78816 const cached = this.#children.get(this); 78817 if (cached) { 78818 return cached; 78819 } 78820 const children = Object.assign([], { provisional: 0 }); 78821 this.#children.set(this, children); 78822 this.#type &= ~READDIR_CALLED; 78823 return children; 78824 } 78825 /** 78826 * Resolves a path portion and returns or creates the child Path. 78827 * 78828 * Returns `this` if pathPart is `''` or `'.'`, or `parent` if pathPart is 78829 * `'..'`. 78830 * 78831 * This should not be called directly. If `pathPart` contains any path 78832 * separators, it will lead to unsafe undefined behavior. 78833 * 78834 * Use `Path.resolve()` instead. 78835 * 78836 * @internal 78837 */ 78838 child(pathPart, opts) { 78839 if (pathPart === '' || pathPart === '.') { 78840 return this; 78841 } 78842 if (pathPart === '..') { 78843 return this.parent || this; 78844 } 78845 // find the child 78846 const children = this.children(); 78847 const name = this.nocase 78848 ? normalizeNocase(pathPart) 78849 : normalize(pathPart); 78850 for (const p of children) { 78851 if (p.#matchName === name) { 78852 return p; 78853 } 78854 } 78855 // didn't find it, create provisional child, since it might not 78856 // actually exist. If we know the parent isn't a dir, then 78857 // in fact it CAN'T exist. 78858 const s = this.parent ? this.sep : ''; 78859 const fullpath = this.#fullpath 78860 ? this.#fullpath + s + pathPart 78861 : undefined; 78862 const pchild = this.newChild(pathPart, UNKNOWN, { 78863 ...opts, 78864 parent: this, 78865 fullpath, 78866 }); 78867 if (!this.canReaddir()) { 78868 pchild.#type |= ENOENT; 78869 } 78870 // don't have to update provisional, because if we have real children, 78871 // then provisional is set to children.length, otherwise a lower number 78872 children.push(pchild); 78873 return pchild; 78874 } 78875 /** 78876 * The relative path from the cwd. If it does not share an ancestor with 78877 * the cwd, then this ends up being equivalent to the fullpath() 78878 */ 78879 relative() { 78880 if (this.#relative !== undefined) { 78881 return this.#relative; 78882 } 78883 const name = this.name; 78884 const p = this.parent; 78885 if (!p) { 78886 return (this.#relative = this.name); 78887 } 78888 const pv = p.relative(); 78889 return pv + (!pv || !p.parent ? '' : this.sep) + name; 78890 } 78891 /** 78892 * The relative path from the cwd, using / as the path separator. 78893 * If it does not share an ancestor with 78894 * the cwd, then this ends up being equivalent to the fullpathPosix() 78895 * On posix systems, this is identical to relative(). 78896 */ 78897 relativePosix() { 78898 if (this.sep === '/') 78899 return this.relative(); 78900 if (this.#relativePosix !== undefined) 78901 return this.#relativePosix; 78902 const name = this.name; 78903 const p = this.parent; 78904 if (!p) { 78905 return (this.#relativePosix = this.fullpathPosix()); 78906 } 78907 const pv = p.relativePosix(); 78908 return pv + (!pv || !p.parent ? '' : '/') + name; 78909 } 78910 /** 78911 * The fully resolved path string for this Path entry 78912 */ 78913 fullpath() { 78914 if (this.#fullpath !== undefined) { 78915 return this.#fullpath; 78916 } 78917 const name = this.name; 78918 const p = this.parent; 78919 if (!p) { 78920 return (this.#fullpath = this.name); 78921 } 78922 const pv = p.fullpath(); 78923 const fp = pv + (!p.parent ? '' : this.sep) + name; 78924 return (this.#fullpath = fp); 78925 } 78926 /** 78927 * On platforms other than windows, this is identical to fullpath. 78928 * 78929 * On windows, this is overridden to return the forward-slash form of the 78930 * full UNC path. 78931 */ 78932 fullpathPosix() { 78933 if (this.#fullpathPosix !== undefined) 78934 return this.#fullpathPosix; 78935 if (this.sep === '/') 78936 return (this.#fullpathPosix = this.fullpath()); 78937 if (!this.parent) { 78938 const p = this.fullpath().replace(/\\/g, '/'); 78939 if (/^[a-z]:\//i.test(p)) { 78940 return (this.#fullpathPosix = `//?/${p}`); 78941 } 78942 else { 78943 return (this.#fullpathPosix = p); 78944 } 78945 } 78946 const p = this.parent; 78947 const pfpp = p.fullpathPosix(); 78948 const fpp = pfpp + (!pfpp || !p.parent ? '' : '/') + this.name; 78949 return (this.#fullpathPosix = fpp); 78950 } 78951 /** 78952 * Is the Path of an unknown type? 78953 * 78954 * Note that we might know *something* about it if there has been a previous 78955 * filesystem operation, for example that it does not exist, or is not a 78956 * link, or whether it has child entries. 78957 */ 78958 isUnknown() { 78959 return (this.#type & IFMT) === UNKNOWN; 78960 } 78961 isType(type) { 78962 return this[`is${type}`](); 78963 } 78964 getType() { 78965 return this.isUnknown() 78966 ? 'Unknown' 78967 : this.isDirectory() 78968 ? 'Directory' 78969 : this.isFile() 78970 ? 'File' 78971 : this.isSymbolicLink() 78972 ? 'SymbolicLink' 78973 : this.isFIFO() 78974 ? 'FIFO' 78975 : this.isCharacterDevice() 78976 ? 'CharacterDevice' 78977 : this.isBlockDevice() 78978 ? 'BlockDevice' 78979 : /* c8 ignore start */ this.isSocket() 78980 ? 'Socket' 78981 : 'Unknown'; 78982 /* c8 ignore stop */ 78983 } 78984 /** 78985 * Is the Path a regular file? 78986 */ 78987 isFile() { 78988 return (this.#type & IFMT) === IFREG; 78989 } 78990 /** 78991 * Is the Path a directory? 78992 */ 78993 isDirectory() { 78994 return (this.#type & IFMT) === IFDIR; 78995 } 78996 /** 78997 * Is the path a character device? 78998 */ 78999 isCharacterDevice() { 79000 return (this.#type & IFMT) === IFCHR; 79001 } 79002 /** 79003 * Is the path a block device? 79004 */ 79005 isBlockDevice() { 79006 return (this.#type & IFMT) === IFBLK; 79007 } 79008 /** 79009 * Is the path a FIFO pipe? 79010 */ 79011 isFIFO() { 79012 return (this.#type & IFMT) === IFIFO; 79013 } 79014 /** 79015 * Is the path a socket? 79016 */ 79017 isSocket() { 79018 return (this.#type & IFMT) === IFSOCK; 79019 } 79020 /** 79021 * Is the path a symbolic link? 79022 */ 79023 isSymbolicLink() { 79024 return (this.#type & IFLNK) === IFLNK; 79025 } 79026 /** 79027 * Return the entry if it has been subject of a successful lstat, or 79028 * undefined otherwise. 79029 * 79030 * Does not read the filesystem, so an undefined result *could* simply 79031 * mean that we haven't called lstat on it. 79032 */ 79033 lstatCached() { 79034 return this.#type & LSTAT_CALLED ? this : undefined; 79035 } 79036 /** 79037 * Return the cached link target if the entry has been the subject of a 79038 * successful readlink, or undefined otherwise. 79039 * 79040 * Does not read the filesystem, so an undefined result *could* just mean we 79041 * don't have any cached data. Only use it if you are very sure that a 79042 * readlink() has been called at some point. 79043 */ 79044 readlinkCached() { 79045 return this.#linkTarget; 79046 } 79047 /** 79048 * Returns the cached realpath target if the entry has been the subject 79049 * of a successful realpath, or undefined otherwise. 79050 * 79051 * Does not read the filesystem, so an undefined result *could* just mean we 79052 * don't have any cached data. Only use it if you are very sure that a 79053 * realpath() has been called at some point. 79054 */ 79055 realpathCached() { 79056 return this.#realpath; 79057 } 79058 /** 79059 * Returns the cached child Path entries array if the entry has been the 79060 * subject of a successful readdir(), or [] otherwise. 79061 * 79062 * Does not read the filesystem, so an empty array *could* just mean we 79063 * don't have any cached data. Only use it if you are very sure that a 79064 * readdir() has been called recently enough to still be valid. 79065 */ 79066 readdirCached() { 79067 const children = this.children(); 79068 return children.slice(0, children.provisional); 79069 } 79070 /** 79071 * Return true if it's worth trying to readlink. Ie, we don't (yet) have 79072 * any indication that readlink will definitely fail. 79073 * 79074 * Returns false if the path is known to not be a symlink, if a previous 79075 * readlink failed, or if the entry does not exist. 79076 */ 79077 canReadlink() { 79078 if (this.#linkTarget) 79079 return true; 79080 if (!this.parent) 79081 return false; 79082 // cases where it cannot possibly succeed 79083 const ifmt = this.#type & IFMT; 79084 return !((ifmt !== UNKNOWN && ifmt !== IFLNK) || 79085 this.#type & ENOREADLINK || 79086 this.#type & ENOENT); 79087 } 79088 /** 79089 * Return true if readdir has previously been successfully called on this 79090 * path, indicating that cachedReaddir() is likely valid. 79091 */ 79092 calledReaddir() { 79093 return !!(this.#type & READDIR_CALLED); 79094 } 79095 /** 79096 * Returns true if the path is known to not exist. That is, a previous lstat 79097 * or readdir failed to verify its existence when that would have been 79098 * expected, or a parent entry was marked either enoent or enotdir. 79099 */ 79100 isENOENT() { 79101 return !!(this.#type & ENOENT); 79102 } 79103 /** 79104 * Return true if the path is a match for the given path name. This handles 79105 * case sensitivity and unicode normalization. 79106 * 79107 * Note: even on case-sensitive systems, it is **not** safe to test the 79108 * equality of the `.name` property to determine whether a given pathname 79109 * matches, due to unicode normalization mismatches. 79110 * 79111 * Always use this method instead of testing the `path.name` property 79112 * directly. 79113 */ 79114 isNamed(n) { 79115 return !this.nocase 79116 ? this.#matchName === normalize(n) 79117 : this.#matchName === normalizeNocase(n); 79118 } 79119 /** 79120 * Return the Path object corresponding to the target of a symbolic link. 79121 * 79122 * If the Path is not a symbolic link, or if the readlink call fails for any 79123 * reason, `undefined` is returned. 79124 * 79125 * Result is cached, and thus may be outdated if the filesystem is mutated. 79126 */ 79127 async readlink() { 79128 const target = this.#linkTarget; 79129 if (target) { 79130 return target; 79131 } 79132 if (!this.canReadlink()) { 79133 return undefined; 79134 } 79135 /* c8 ignore start */ 79136 // already covered by the canReadlink test, here for ts grumples 79137 if (!this.parent) { 79138 return undefined; 79139 } 79140 /* c8 ignore stop */ 79141 try { 79142 const read = await this.#fs.promises.readlink(this.fullpath()); 79143 const linkTarget = (await this.parent.realpath())?.resolve(read); 79144 if (linkTarget) { 79145 return (this.#linkTarget = linkTarget); 79146 } 79147 } 79148 catch (er) { 79149 this.#readlinkFail(er.code); 79150 return undefined; 79151 } 79152 } 79153 /** 79154 * Synchronous {@link PathBase.readlink} 79155 */ 79156 readlinkSync() { 79157 const target = this.#linkTarget; 79158 if (target) { 79159 return target; 79160 } 79161 if (!this.canReadlink()) { 79162 return undefined; 79163 } 79164 /* c8 ignore start */ 79165 // already covered by the canReadlink test, here for ts grumples 79166 if (!this.parent) { 79167 return undefined; 79168 } 79169 /* c8 ignore stop */ 79170 try { 79171 const read = this.#fs.readlinkSync(this.fullpath()); 79172 const linkTarget = (this.parent.realpathSync())?.resolve(read); 79173 if (linkTarget) { 79174 return (this.#linkTarget = linkTarget); 79175 } 79176 } 79177 catch (er) { 79178 this.#readlinkFail(er.code); 79179 return undefined; 79180 } 79181 } 79182 #readdirSuccess(children) { 79183 // succeeded, mark readdir called bit 79184 this.#type |= READDIR_CALLED; 79185 // mark all remaining provisional children as ENOENT 79186 for (let p = children.provisional; p < children.length; p++) { 79187 const c = children[p]; 79188 if (c) 79189 c.#markENOENT(); 79190 } 79191 } 79192 #markENOENT() { 79193 // mark as UNKNOWN and ENOENT 79194 if (this.#type & ENOENT) 79195 return; 79196 this.#type = (this.#type | ENOENT) & IFMT_UNKNOWN; 79197 this.#markChildrenENOENT(); 79198 } 79199 #markChildrenENOENT() { 79200 // all children are provisional and do not exist 79201 const children = this.children(); 79202 children.provisional = 0; 79203 for (const p of children) { 79204 p.#markENOENT(); 79205 } 79206 } 79207 #markENOREALPATH() { 79208 this.#type |= ENOREALPATH; 79209 this.#markENOTDIR(); 79210 } 79211 // save the information when we know the entry is not a dir 79212 #markENOTDIR() { 79213 // entry is not a directory, so any children can't exist. 79214 // this *should* be impossible, since any children created 79215 // after it's been marked ENOTDIR should be marked ENOENT, 79216 // so it won't even get to this point. 79217 /* c8 ignore start */ 79218 if (this.#type & ENOTDIR) 79219 return; 79220 /* c8 ignore stop */ 79221 let t = this.#type; 79222 // this could happen if we stat a dir, then delete it, 79223 // then try to read it or one of its children. 79224 if ((t & IFMT) === IFDIR) 79225 t &= IFMT_UNKNOWN; 79226 this.#type = t | ENOTDIR; 79227 this.#markChildrenENOENT(); 79228 } 79229 #readdirFail(code = '') { 79230 // markENOTDIR and markENOENT also set provisional=0 79231 if (code === 'ENOTDIR' || code === 'EPERM') { 79232 this.#markENOTDIR(); 79233 } 79234 else if (code === 'ENOENT') { 79235 this.#markENOENT(); 79236 } 79237 else { 79238 this.children().provisional = 0; 79239 } 79240 } 79241 #lstatFail(code = '') { 79242 // Windows just raises ENOENT in this case, disable for win CI 79243 /* c8 ignore start */ 79244 if (code === 'ENOTDIR') { 79245 // already know it has a parent by this point 79246 const p = this.parent; 79247 p.#markENOTDIR(); 79248 } 79249 else if (code === 'ENOENT') { 79250 /* c8 ignore stop */ 79251 this.#markENOENT(); 79252 } 79253 } 79254 #readlinkFail(code = '') { 79255 let ter = this.#type; 79256 ter |= ENOREADLINK; 79257 if (code === 'ENOENT') 79258 ter |= ENOENT; 79259 // windows gets a weird error when you try to readlink a file 79260 if (code === 'EINVAL' || code === 'UNKNOWN') { 79261 // exists, but not a symlink, we don't know WHAT it is, so remove 79262 // all IFMT bits. 79263 ter &= IFMT_UNKNOWN; 79264 } 79265 this.#type = ter; 79266 // windows just gets ENOENT in this case. We do cover the case, 79267 // just disabled because it's impossible on Windows CI 79268 /* c8 ignore start */ 79269 if (code === 'ENOTDIR' && this.parent) { 79270 this.parent.#markENOTDIR(); 79271 } 79272 /* c8 ignore stop */ 79273 } 79274 #readdirAddChild(e, c) { 79275 return (this.#readdirMaybePromoteChild(e, c) || 79276 this.#readdirAddNewChild(e, c)); 79277 } 79278 #readdirAddNewChild(e, c) { 79279 // alloc new entry at head, so it's never provisional 79280 const type = entToType(e); 79281 const child = this.newChild(e.name, type, { parent: this }); 79282 const ifmt = child.#type & IFMT; 79283 if (ifmt !== IFDIR && ifmt !== IFLNK && ifmt !== UNKNOWN) { 79284 child.#type |= ENOTDIR; 79285 } 79286 c.unshift(child); 79287 c.provisional++; 79288 return child; 79289 } 79290 #readdirMaybePromoteChild(e, c) { 79291 for (let p = c.provisional; p < c.length; p++) { 79292 const pchild = c[p]; 79293 const name = this.nocase 79294 ? normalizeNocase(e.name) 79295 : normalize(e.name); 79296 if (name !== pchild.#matchName) { 79297 continue; 79298 } 79299 return this.#readdirPromoteChild(e, pchild, p, c); 79300 } 79301 } 79302 #readdirPromoteChild(e, p, index, c) { 79303 const v = p.name; 79304 // retain any other flags, but set ifmt from dirent 79305 p.#type = (p.#type & IFMT_UNKNOWN) | entToType(e); 79306 // case sensitivity fixing when we learn the true name. 79307 if (v !== e.name) 79308 p.name = e.name; 79309 // just advance provisional index (potentially off the list), 79310 // otherwise we have to splice/pop it out and re-insert at head 79311 if (index !== c.provisional) { 79312 if (index === c.length - 1) 79313 c.pop(); 79314 else 79315 c.splice(index, 1); 79316 c.unshift(p); 79317 } 79318 c.provisional++; 79319 return p; 79320 } 79321 /** 79322 * Call lstat() on this Path, and update all known information that can be 79323 * determined. 79324 * 79325 * Note that unlike `fs.lstat()`, the returned value does not contain some 79326 * information, such as `mode`, `dev`, `nlink`, and `ino`. If that 79327 * information is required, you will need to call `fs.lstat` yourself. 79328 * 79329 * If the Path refers to a nonexistent file, or if the lstat call fails for 79330 * any reason, `undefined` is returned. Otherwise the updated Path object is 79331 * returned. 79332 * 79333 * Results are cached, and thus may be out of date if the filesystem is 79334 * mutated. 79335 */ 79336 async lstat() { 79337 if ((this.#type & ENOENT) === 0) { 79338 try { 79339 this.#applyStat(await this.#fs.promises.lstat(this.fullpath())); 79340 return this; 79341 } 79342 catch (er) { 79343 this.#lstatFail(er.code); 79344 } 79345 } 79346 } 79347 /** 79348 * synchronous {@link PathBase.lstat} 79349 */ 79350 lstatSync() { 79351 if ((this.#type & ENOENT) === 0) { 79352 try { 79353 this.#applyStat(this.#fs.lstatSync(this.fullpath())); 79354 return this; 79355 } 79356 catch (er) { 79357 this.#lstatFail(er.code); 79358 } 79359 } 79360 } 79361 #applyStat(st) { 79362 const { atime, atimeMs, birthtime, birthtimeMs, blksize, blocks, ctime, ctimeMs, dev, gid, ino, mode, mtime, mtimeMs, nlink, rdev, size, uid, } = st; 79363 this.#atime = atime; 79364 this.#atimeMs = atimeMs; 79365 this.#birthtime = birthtime; 79366 this.#birthtimeMs = birthtimeMs; 79367 this.#blksize = blksize; 79368 this.#blocks = blocks; 79369 this.#ctime = ctime; 79370 this.#ctimeMs = ctimeMs; 79371 this.#dev = dev; 79372 this.#gid = gid; 79373 this.#ino = ino; 79374 this.#mode = mode; 79375 this.#mtime = mtime; 79376 this.#mtimeMs = mtimeMs; 79377 this.#nlink = nlink; 79378 this.#rdev = rdev; 79379 this.#size = size; 79380 this.#uid = uid; 79381 const ifmt = entToType(st); 79382 // retain any other flags, but set the ifmt 79383 this.#type = (this.#type & IFMT_UNKNOWN) | ifmt | LSTAT_CALLED; 79384 if (ifmt !== UNKNOWN && ifmt !== IFDIR && ifmt !== IFLNK) { 79385 this.#type |= ENOTDIR; 79386 } 79387 } 79388 #onReaddirCB = []; 79389 #readdirCBInFlight = false; 79390 #callOnReaddirCB(children) { 79391 this.#readdirCBInFlight = false; 79392 const cbs = this.#onReaddirCB.slice(); 79393 this.#onReaddirCB.length = 0; 79394 cbs.forEach(cb => cb(null, children)); 79395 } 79396 /** 79397 * Standard node-style callback interface to get list of directory entries. 79398 * 79399 * If the Path cannot or does not contain any children, then an empty array 79400 * is returned. 79401 * 79402 * Results are cached, and thus may be out of date if the filesystem is 79403 * mutated. 79404 * 79405 * @param cb The callback called with (er, entries). Note that the `er` 79406 * param is somewhat extraneous, as all readdir() errors are handled and 79407 * simply result in an empty set of entries being returned. 79408 * @param allowZalgo Boolean indicating that immediately known results should 79409 * *not* be deferred with `queueMicrotask`. Defaults to `false`. Release 79410 * zalgo at your peril, the dark pony lord is devious and unforgiving. 79411 */ 79412 readdirCB(cb, allowZalgo = false) { 79413 if (!this.canReaddir()) { 79414 if (allowZalgo) 79415 cb(null, []); 79416 else 79417 queueMicrotask(() => cb(null, [])); 79418 return; 79419 } 79420 const children = this.children(); 79421 if (this.calledReaddir()) { 79422 const c = children.slice(0, children.provisional); 79423 if (allowZalgo) 79424 cb(null, c); 79425 else 79426 queueMicrotask(() => cb(null, c)); 79427 return; 79428 } 79429 // don't have to worry about zalgo at this point. 79430 this.#onReaddirCB.push(cb); 79431 if (this.#readdirCBInFlight) { 79432 return; 79433 } 79434 this.#readdirCBInFlight = true; 79435 // else read the directory, fill up children 79436 // de-provisionalize any provisional children. 79437 const fullpath = this.fullpath(); 79438 this.#fs.readdir(fullpath, { withFileTypes: true }, (er, entries) => { 79439 if (er) { 79440 this.#readdirFail(er.code); 79441 children.provisional = 0; 79442 } 79443 else { 79444 // if we didn't get an error, we always get entries. 79445 //@ts-ignore 79446 for (const e of entries) { 79447 this.#readdirAddChild(e, children); 79448 } 79449 this.#readdirSuccess(children); 79450 } 79451 this.#callOnReaddirCB(children.slice(0, children.provisional)); 79452 return; 79453 }); 79454 } 79455 #asyncReaddirInFlight; 79456 /** 79457 * Return an array of known child entries. 79458 * 79459 * If the Path cannot or does not contain any children, then an empty array 79460 * is returned. 79461 * 79462 * Results are cached, and thus may be out of date if the filesystem is 79463 * mutated. 79464 */ 79465 async readdir() { 79466 if (!this.canReaddir()) { 79467 return []; 79468 } 79469 const children = this.children(); 79470 if (this.calledReaddir()) { 79471 return children.slice(0, children.provisional); 79472 } 79473 // else read the directory, fill up children 79474 // de-provisionalize any provisional children. 79475 const fullpath = this.fullpath(); 79476 if (this.#asyncReaddirInFlight) { 79477 await this.#asyncReaddirInFlight; 79478 } 79479 else { 79480 /* c8 ignore start */ 79481 let resolve = () => { }; 79482 /* c8 ignore stop */ 79483 this.#asyncReaddirInFlight = new Promise(res => (resolve = res)); 79484 try { 79485 for (const e of await this.#fs.promises.readdir(fullpath, { 79486 withFileTypes: true, 79487 })) { 79488 this.#readdirAddChild(e, children); 79489 } 79490 this.#readdirSuccess(children); 79491 } 79492 catch (er) { 79493 this.#readdirFail(er.code); 79494 children.provisional = 0; 79495 } 79496 this.#asyncReaddirInFlight = undefined; 79497 resolve(); 79498 } 79499 return children.slice(0, children.provisional); 79500 } 79501 /** 79502 * synchronous {@link PathBase.readdir} 79503 */ 79504 readdirSync() { 79505 if (!this.canReaddir()) { 79506 return []; 79507 } 79508 const children = this.children(); 79509 if (this.calledReaddir()) { 79510 return children.slice(0, children.provisional); 79511 } 79512 // else read the directory, fill up children 79513 // de-provisionalize any provisional children. 79514 const fullpath = this.fullpath(); 79515 try { 79516 for (const e of this.#fs.readdirSync(fullpath, { 79517 withFileTypes: true, 79518 })) { 79519 this.#readdirAddChild(e, children); 79520 } 79521 this.#readdirSuccess(children); 79522 } 79523 catch (er) { 79524 this.#readdirFail(er.code); 79525 children.provisional = 0; 79526 } 79527 return children.slice(0, children.provisional); 79528 } 79529 canReaddir() { 79530 if (this.#type & ENOCHILD) 79531 return false; 79532 const ifmt = IFMT & this.#type; 79533 // we always set ENOTDIR when setting IFMT, so should be impossible 79534 /* c8 ignore start */ 79535 if (!(ifmt === UNKNOWN || ifmt === IFDIR || ifmt === IFLNK)) { 79536 return false; 79537 } 79538 /* c8 ignore stop */ 79539 return true; 79540 } 79541 shouldWalk(dirs, walkFilter) { 79542 return ((this.#type & IFDIR) === IFDIR && 79543 !(this.#type & ENOCHILD) && 79544 !dirs.has(this) && 79545 (!walkFilter || walkFilter(this))); 79546 } 79547 /** 79548 * Return the Path object corresponding to path as resolved 79549 * by realpath(3). 79550 * 79551 * If the realpath call fails for any reason, `undefined` is returned. 79552 * 79553 * Result is cached, and thus may be outdated if the filesystem is mutated. 79554 * On success, returns a Path object. 79555 */ 79556 async realpath() { 79557 if (this.#realpath) 79558 return this.#realpath; 79559 if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type) 79560 return undefined; 79561 try { 79562 const rp = await this.#fs.promises.realpath(this.fullpath()); 79563 return (this.#realpath = this.resolve(rp)); 79564 } 79565 catch (_) { 79566 this.#markENOREALPATH(); 79567 } 79568 } 79569 /** 79570 * Synchronous {@link realpath} 79571 */ 79572 realpathSync() { 79573 if (this.#realpath) 79574 return this.#realpath; 79575 if ((ENOREALPATH | ENOREADLINK | ENOENT) & this.#type) 79576 return undefined; 79577 try { 79578 const rp = this.#fs.realpathSync(this.fullpath()); 79579 return (this.#realpath = this.resolve(rp)); 79580 } 79581 catch (_) { 79582 this.#markENOREALPATH(); 79583 } 79584 } 79585 /** 79586 * Internal method to mark this Path object as the scurry cwd, 79587 * called by {@link PathScurry#chdir} 79588 * 79589 * @internal 79590 */ 79591 [setAsCwd](oldCwd) { 79592 if (oldCwd === this) 79593 return; 79594 const changed = new Set([]); 79595 let rp = []; 79596 let p = this; 79597 while (p && p.parent) { 79598 changed.add(p); 79599 p.#relative = rp.join(this.sep); 79600 p.#relativePosix = rp.join('/'); 79601 p = p.parent; 79602 rp.push('..'); 79603 } 79604 // now un-memoize parents of old cwd 79605 p = oldCwd; 79606 while (p && p.parent && !changed.has(p)) { 79607 p.#relative = undefined; 79608 p.#relativePosix = undefined; 79609 p = p.parent; 79610 } 79611 } 79612 } 79613 exports.PathBase = PathBase; 79614 /** 79615 * Path class used on win32 systems 79616 * 79617 * Uses `'\\'` as the path separator for returned paths, either `'\\'` or `'/'` 79618 * as the path separator for parsing paths. 79619 */ 79620 class PathWin32 extends PathBase { 79621 /** 79622 * Separator for generating path strings. 79623 */ 79624 sep = '\\'; 79625 /** 79626 * Separator for parsing path strings. 79627 */ 79628 splitSep = eitherSep; 79629 /** 79630 * Do not create new Path objects directly. They should always be accessed 79631 * via the PathScurry class or other methods on the Path class. 79632 * 79633 * @internal 79634 */ 79635 constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) { 79636 super(name, type, root, roots, nocase, children, opts); 79637 } 79638 /** 79639 * @internal 79640 */ 79641 newChild(name, type = UNKNOWN, opts = {}) { 79642 return new PathWin32(name, type, this.root, this.roots, this.nocase, this.childrenCache(), opts); 79643 } 79644 /** 79645 * @internal 79646 */ 79647 getRootString(path) { 79648 return path_1.win32.parse(path).root; 79649 } 79650 /** 79651 * @internal 79652 */ 79653 getRoot(rootPath) { 79654 rootPath = uncToDrive(rootPath.toUpperCase()); 79655 if (rootPath === this.root.name) { 79656 return this.root; 79657 } 79658 // ok, not that one, check if it matches another we know about 79659 for (const [compare, root] of Object.entries(this.roots)) { 79660 if (this.sameRoot(rootPath, compare)) { 79661 return (this.roots[rootPath] = root); 79662 } 79663 } 79664 // otherwise, have to create a new one. 79665 return (this.roots[rootPath] = new PathScurryWin32(rootPath, this).root); 79666 } 79667 /** 79668 * @internal 79669 */ 79670 sameRoot(rootPath, compare = this.root.name) { 79671 // windows can (rarely) have case-sensitive filesystem, but 79672 // UNC and drive letters are always case-insensitive, and canonically 79673 // represented uppercase. 79674 rootPath = rootPath 79675 .toUpperCase() 79676 .replace(/\//g, '\\') 79677 .replace(uncDriveRegexp, '$1\\'); 79678 return rootPath === compare; 79679 } 79680 } 79681 exports.PathWin32 = PathWin32; 79682 /** 79683 * Path class used on all posix systems. 79684 * 79685 * Uses `'/'` as the path separator. 79686 */ 79687 class PathPosix extends PathBase { 79688 /** 79689 * separator for parsing path strings 79690 */ 79691 splitSep = '/'; 79692 /** 79693 * separator for generating path strings 79694 */ 79695 sep = '/'; 79696 /** 79697 * Do not create new Path objects directly. They should always be accessed 79698 * via the PathScurry class or other methods on the Path class. 79699 * 79700 * @internal 79701 */ 79702 constructor(name, type = UNKNOWN, root, roots, nocase, children, opts) { 79703 super(name, type, root, roots, nocase, children, opts); 79704 } 79705 /** 79706 * @internal 79707 */ 79708 getRootString(path) { 79709 return path.startsWith('/') ? '/' : ''; 79710 } 79711 /** 79712 * @internal 79713 */ 79714 getRoot(_rootPath) { 79715 return this.root; 79716 } 79717 /** 79718 * @internal 79719 */ 79720 newChild(name, type = UNKNOWN, opts = {}) { 79721 return new PathPosix(name, type, this.root, this.roots, this.nocase, this.childrenCache(), opts); 79722 } 79723 } 79724 exports.PathPosix = PathPosix; 79725 /** 79726 * The base class for all PathScurry classes, providing the interface for path 79727 * resolution and filesystem operations. 79728 * 79729 * Typically, you should *not* instantiate this class directly, but rather one 79730 * of the platform-specific classes, or the exported {@link PathScurry} which 79731 * defaults to the current platform. 79732 */ 79733 class PathScurryBase { 79734 /** 79735 * The root Path entry for the current working directory of this Scurry 79736 */ 79737 root; 79738 /** 79739 * The string path for the root of this Scurry's current working directory 79740 */ 79741 rootPath; 79742 /** 79743 * A collection of all roots encountered, referenced by rootPath 79744 */ 79745 roots; 79746 /** 79747 * The Path entry corresponding to this PathScurry's current working directory. 79748 */ 79749 cwd; 79750 #resolveCache; 79751 #resolvePosixCache; 79752 #children; 79753 /** 79754 * Perform path comparisons case-insensitively. 79755 * 79756 * Defaults true on Darwin and Windows systems, false elsewhere. 79757 */ 79758 nocase; 79759 #fs; 79760 /** 79761 * This class should not be instantiated directly. 79762 * 79763 * Use PathScurryWin32, PathScurryDarwin, PathScurryPosix, or PathScurry 79764 * 79765 * @internal 79766 */ 79767 constructor(cwd = process.cwd(), pathImpl, sep, { nocase, childrenCacheSize = 16 * 1024, fs = defaultFS, } = {}) { 79768 this.#fs = fsFromOption(fs); 79769 if (cwd instanceof URL || cwd.startsWith('file://')) { 79770 cwd = (0, url_1.fileURLToPath)(cwd); 79771 } 79772 // resolve and split root, and then add to the store. 79773 // this is the only time we call path.resolve() 79774 const cwdPath = pathImpl.resolve(cwd); 79775 this.roots = Object.create(null); 79776 this.rootPath = this.parseRootPath(cwdPath); 79777 this.#resolveCache = new ResolveCache(); 79778 this.#resolvePosixCache = new ResolveCache(); 79779 this.#children = new ChildrenCache(childrenCacheSize); 79780 const split = cwdPath.substring(this.rootPath.length).split(sep); 79781 // resolve('/') leaves '', splits to [''], we don't want that. 79782 if (split.length === 1 && !split[0]) { 79783 split.pop(); 79784 } 79785 /* c8 ignore start */ 79786 if (nocase === undefined) { 79787 throw new TypeError('must provide nocase setting to PathScurryBase ctor'); 79788 } 79789 /* c8 ignore stop */ 79790 this.nocase = nocase; 79791 this.root = this.newRoot(this.#fs); 79792 this.roots[this.rootPath] = this.root; 79793 let prev = this.root; 79794 let len = split.length - 1; 79795 const joinSep = pathImpl.sep; 79796 let abs = this.rootPath; 79797 let sawFirst = false; 79798 for (const part of split) { 79799 const l = len--; 79800 prev = prev.child(part, { 79801 relative: new Array(l).fill('..').join(joinSep), 79802 relativePosix: new Array(l).fill('..').join('/'), 79803 fullpath: (abs += (sawFirst ? '' : joinSep) + part), 79804 }); 79805 sawFirst = true; 79806 } 79807 this.cwd = prev; 79808 } 79809 /** 79810 * Get the depth of a provided path, string, or the cwd 79811 */ 79812 depth(path = this.cwd) { 79813 if (typeof path === 'string') { 79814 path = this.cwd.resolve(path); 79815 } 79816 return path.depth(); 79817 } 79818 /** 79819 * Return the cache of child entries. Exposed so subclasses can create 79820 * child Path objects in a platform-specific way. 79821 * 79822 * @internal 79823 */ 79824 childrenCache() { 79825 return this.#children; 79826 } 79827 /** 79828 * Resolve one or more path strings to a resolved string 79829 * 79830 * Same interface as require('path').resolve. 79831 * 79832 * Much faster than path.resolve() when called multiple times for the same 79833 * path, because the resolved Path objects are cached. Much slower 79834 * otherwise. 79835 */ 79836 resolve(...paths) { 79837 // first figure out the minimum number of paths we have to test 79838 // we always start at cwd, but any absolutes will bump the start 79839 let r = ''; 79840 for (let i = paths.length - 1; i >= 0; i--) { 79841 const p = paths[i]; 79842 if (!p || p === '.') 79843 continue; 79844 r = r ? `${p}/${r}` : p; 79845 if (this.isAbsolute(p)) { 79846 break; 79847 } 79848 } 79849 const cached = this.#resolveCache.get(r); 79850 if (cached !== undefined) { 79851 return cached; 79852 } 79853 const result = this.cwd.resolve(r).fullpath(); 79854 this.#resolveCache.set(r, result); 79855 return result; 79856 } 79857 /** 79858 * Resolve one or more path strings to a resolved string, returning 79859 * the posix path. Identical to .resolve() on posix systems, but on 79860 * windows will return a forward-slash separated UNC path. 79861 * 79862 * Same interface as require('path').resolve. 79863 * 79864 * Much faster than path.resolve() when called multiple times for the same 79865 * path, because the resolved Path objects are cached. Much slower 79866 * otherwise. 79867 */ 79868 resolvePosix(...paths) { 79869 // first figure out the minimum number of paths we have to test 79870 // we always start at cwd, but any absolutes will bump the start 79871 let r = ''; 79872 for (let i = paths.length - 1; i >= 0; i--) { 79873 const p = paths[i]; 79874 if (!p || p === '.') 79875 continue; 79876 r = r ? `${p}/${r}` : p; 79877 if (this.isAbsolute(p)) { 79878 break; 79879 } 79880 } 79881 const cached = this.#resolvePosixCache.get(r); 79882 if (cached !== undefined) { 79883 return cached; 79884 } 79885 const result = this.cwd.resolve(r).fullpathPosix(); 79886 this.#resolvePosixCache.set(r, result); 79887 return result; 79888 } 79889 /** 79890 * find the relative path from the cwd to the supplied path string or entry 79891 */ 79892 relative(entry = this.cwd) { 79893 if (typeof entry === 'string') { 79894 entry = this.cwd.resolve(entry); 79895 } 79896 return entry.relative(); 79897 } 79898 /** 79899 * find the relative path from the cwd to the supplied path string or 79900 * entry, using / as the path delimiter, even on Windows. 79901 */ 79902 relativePosix(entry = this.cwd) { 79903 if (typeof entry === 'string') { 79904 entry = this.cwd.resolve(entry); 79905 } 79906 return entry.relativePosix(); 79907 } 79908 /** 79909 * Return the basename for the provided string or Path object 79910 */ 79911 basename(entry = this.cwd) { 79912 if (typeof entry === 'string') { 79913 entry = this.cwd.resolve(entry); 79914 } 79915 return entry.name; 79916 } 79917 /** 79918 * Return the dirname for the provided string or Path object 79919 */ 79920 dirname(entry = this.cwd) { 79921 if (typeof entry === 'string') { 79922 entry = this.cwd.resolve(entry); 79923 } 79924 return (entry.parent || entry).fullpath(); 79925 } 79926 async readdir(entry = this.cwd, opts = { 79927 withFileTypes: true, 79928 }) { 79929 if (typeof entry === 'string') { 79930 entry = this.cwd.resolve(entry); 79931 } 79932 else if (!(entry instanceof PathBase)) { 79933 opts = entry; 79934 entry = this.cwd; 79935 } 79936 const { withFileTypes } = opts; 79937 if (!entry.canReaddir()) { 79938 return []; 79939 } 79940 else { 79941 const p = await entry.readdir(); 79942 return withFileTypes ? p : p.map(e => e.name); 79943 } 79944 } 79945 readdirSync(entry = this.cwd, opts = { 79946 withFileTypes: true, 79947 }) { 79948 if (typeof entry === 'string') { 79949 entry = this.cwd.resolve(entry); 79950 } 79951 else if (!(entry instanceof PathBase)) { 79952 opts = entry; 79953 entry = this.cwd; 79954 } 79955 const { withFileTypes = true } = opts; 79956 if (!entry.canReaddir()) { 79957 return []; 79958 } 79959 else if (withFileTypes) { 79960 return entry.readdirSync(); 79961 } 79962 else { 79963 return entry.readdirSync().map(e => e.name); 79964 } 79965 } 79966 /** 79967 * Call lstat() on the string or Path object, and update all known 79968 * information that can be determined. 79969 * 79970 * Note that unlike `fs.lstat()`, the returned value does not contain some 79971 * information, such as `mode`, `dev`, `nlink`, and `ino`. If that 79972 * information is required, you will need to call `fs.lstat` yourself. 79973 * 79974 * If the Path refers to a nonexistent file, or if the lstat call fails for 79975 * any reason, `undefined` is returned. Otherwise the updated Path object is 79976 * returned. 79977 * 79978 * Results are cached, and thus may be out of date if the filesystem is 79979 * mutated. 79980 */ 79981 async lstat(entry = this.cwd) { 79982 if (typeof entry === 'string') { 79983 entry = this.cwd.resolve(entry); 79984 } 79985 return entry.lstat(); 79986 } 79987 /** 79988 * synchronous {@link PathScurryBase.lstat} 79989 */ 79990 lstatSync(entry = this.cwd) { 79991 if (typeof entry === 'string') { 79992 entry = this.cwd.resolve(entry); 79993 } 79994 return entry.lstatSync(); 79995 } 79996 async readlink(entry = this.cwd, { withFileTypes } = { 79997 withFileTypes: false, 79998 }) { 79999 if (typeof entry === 'string') { 80000 entry = this.cwd.resolve(entry); 80001 } 80002 else if (!(entry instanceof PathBase)) { 80003 withFileTypes = entry.withFileTypes; 80004 entry = this.cwd; 80005 } 80006 const e = await entry.readlink(); 80007 return withFileTypes ? e : e?.fullpath(); 80008 } 80009 readlinkSync(entry = this.cwd, { withFileTypes } = { 80010 withFileTypes: false, 80011 }) { 80012 if (typeof entry === 'string') { 80013 entry = this.cwd.resolve(entry); 80014 } 80015 else if (!(entry instanceof PathBase)) { 80016 withFileTypes = entry.withFileTypes; 80017 entry = this.cwd; 80018 } 80019 const e = entry.readlinkSync(); 80020 return withFileTypes ? e : e?.fullpath(); 80021 } 80022 async realpath(entry = this.cwd, { withFileTypes } = { 80023 withFileTypes: false, 80024 }) { 80025 if (typeof entry === 'string') { 80026 entry = this.cwd.resolve(entry); 80027 } 80028 else if (!(entry instanceof PathBase)) { 80029 withFileTypes = entry.withFileTypes; 80030 entry = this.cwd; 80031 } 80032 const e = await entry.realpath(); 80033 return withFileTypes ? e : e?.fullpath(); 80034 } 80035 realpathSync(entry = this.cwd, { withFileTypes } = { 80036 withFileTypes: false, 80037 }) { 80038 if (typeof entry === 'string') { 80039 entry = this.cwd.resolve(entry); 80040 } 80041 else if (!(entry instanceof PathBase)) { 80042 withFileTypes = entry.withFileTypes; 80043 entry = this.cwd; 80044 } 80045 const e = entry.realpathSync(); 80046 return withFileTypes ? e : e?.fullpath(); 80047 } 80048 async walk(entry = this.cwd, opts = {}) { 80049 if (typeof entry === 'string') { 80050 entry = this.cwd.resolve(entry); 80051 } 80052 else if (!(entry instanceof PathBase)) { 80053 opts = entry; 80054 entry = this.cwd; 80055 } 80056 const { withFileTypes = true, follow = false, filter, walkFilter, } = opts; 80057 const results = []; 80058 if (!filter || filter(entry)) { 80059 results.push(withFileTypes ? entry : entry.fullpath()); 80060 } 80061 const dirs = new Set(); 80062 const walk = (dir, cb) => { 80063 dirs.add(dir); 80064 dir.readdirCB((er, entries) => { 80065 /* c8 ignore start */ 80066 if (er) { 80067 return cb(er); 80068 } 80069 /* c8 ignore stop */ 80070 let len = entries.length; 80071 if (!len) 80072 return cb(); 80073 const next = () => { 80074 if (--len === 0) { 80075 cb(); 80076 } 80077 }; 80078 for (const e of entries) { 80079 if (!filter || filter(e)) { 80080 results.push(withFileTypes ? e : e.fullpath()); 80081 } 80082 if (follow && e.isSymbolicLink()) { 80083 e.realpath() 80084 .then(r => (r?.isUnknown() ? r.lstat() : r)) 80085 .then(r => r?.shouldWalk(dirs, walkFilter) ? walk(r, next) : next()); 80086 } 80087 else { 80088 if (e.shouldWalk(dirs, walkFilter)) { 80089 walk(e, next); 80090 } 80091 else { 80092 next(); 80093 } 80094 } 80095 } 80096 }, true); // zalgooooooo 80097 }; 80098 const start = entry; 80099 return new Promise((res, rej) => { 80100 walk(start, er => { 80101 /* c8 ignore start */ 80102 if (er) 80103 return rej(er); 80104 /* c8 ignore stop */ 80105 res(results); 80106 }); 80107 }); 80108 } 80109 walkSync(entry = this.cwd, opts = {}) { 80110 if (typeof entry === 'string') { 80111 entry = this.cwd.resolve(entry); 80112 } 80113 else if (!(entry instanceof PathBase)) { 80114 opts = entry; 80115 entry = this.cwd; 80116 } 80117 const { withFileTypes = true, follow = false, filter, walkFilter, } = opts; 80118 const results = []; 80119 if (!filter || filter(entry)) { 80120 results.push(withFileTypes ? entry : entry.fullpath()); 80121 } 80122 const dirs = new Set([entry]); 80123 for (const dir of dirs) { 80124 const entries = dir.readdirSync(); 80125 for (const e of entries) { 80126 if (!filter || filter(e)) { 80127 results.push(withFileTypes ? e : e.fullpath()); 80128 } 80129 let r = e; 80130 if (e.isSymbolicLink()) { 80131 if (!(follow && (r = e.realpathSync()))) 80132 continue; 80133 if (r.isUnknown()) 80134 r.lstatSync(); 80135 } 80136 if (r.shouldWalk(dirs, walkFilter)) { 80137 dirs.add(r); 80138 } 80139 } 80140 } 80141 return results; 80142 } 80143 /** 80144 * Support for `for await` 80145 * 80146 * Alias for {@link PathScurryBase.iterate} 80147 * 80148 * Note: As of Node 19, this is very slow, compared to other methods of 80149 * walking. Consider using {@link PathScurryBase.stream} if memory overhead 80150 * and backpressure are concerns, or {@link PathScurryBase.walk} if not. 80151 */ 80152 [Symbol.asyncIterator]() { 80153 return this.iterate(); 80154 } 80155 iterate(entry = this.cwd, options = {}) { 80156 // iterating async over the stream is significantly more performant, 80157 // especially in the warm-cache scenario, because it buffers up directory 80158 // entries in the background instead of waiting for a yield for each one. 80159 if (typeof entry === 'string') { 80160 entry = this.cwd.resolve(entry); 80161 } 80162 else if (!(entry instanceof PathBase)) { 80163 options = entry; 80164 entry = this.cwd; 80165 } 80166 return this.stream(entry, options)[Symbol.asyncIterator](); 80167 } 80168 /** 80169 * Iterating over a PathScurry performs a synchronous walk. 80170 * 80171 * Alias for {@link PathScurryBase.iterateSync} 80172 */ 80173 [Symbol.iterator]() { 80174 return this.iterateSync(); 80175 } 80176 *iterateSync(entry = this.cwd, opts = {}) { 80177 if (typeof entry === 'string') { 80178 entry = this.cwd.resolve(entry); 80179 } 80180 else if (!(entry instanceof PathBase)) { 80181 opts = entry; 80182 entry = this.cwd; 80183 } 80184 const { withFileTypes = true, follow = false, filter, walkFilter, } = opts; 80185 if (!filter || filter(entry)) { 80186 yield withFileTypes ? entry : entry.fullpath(); 80187 } 80188 const dirs = new Set([entry]); 80189 for (const dir of dirs) { 80190 const entries = dir.readdirSync(); 80191 for (const e of entries) { 80192 if (!filter || filter(e)) { 80193 yield withFileTypes ? e : e.fullpath(); 80194 } 80195 let r = e; 80196 if (e.isSymbolicLink()) { 80197 if (!(follow && (r = e.realpathSync()))) 80198 continue; 80199 if (r.isUnknown()) 80200 r.lstatSync(); 80201 } 80202 if (r.shouldWalk(dirs, walkFilter)) { 80203 dirs.add(r); 80204 } 80205 } 80206 } 80207 } 80208 stream(entry = this.cwd, opts = {}) { 80209 if (typeof entry === 'string') { 80210 entry = this.cwd.resolve(entry); 80211 } 80212 else if (!(entry instanceof PathBase)) { 80213 opts = entry; 80214 entry = this.cwd; 80215 } 80216 const { withFileTypes = true, follow = false, filter, walkFilter, } = opts; 80217 const results = new minipass_1.Minipass({ objectMode: true }); 80218 if (!filter || filter(entry)) { 80219 results.write(withFileTypes ? entry : entry.fullpath()); 80220 } 80221 const dirs = new Set(); 80222 const queue = [entry]; 80223 let processing = 0; 80224 const process = () => { 80225 let paused = false; 80226 while (!paused) { 80227 const dir = queue.shift(); 80228 if (!dir) { 80229 if (processing === 0) 80230 results.end(); 80231 return; 80232 } 80233 processing++; 80234 dirs.add(dir); 80235 const onReaddir = (er, entries, didRealpaths = false) => { 80236 /* c8 ignore start */ 80237 if (er) 80238 return results.emit('error', er); 80239 /* c8 ignore stop */ 80240 if (follow && !didRealpaths) { 80241 const promises = []; 80242 for (const e of entries) { 80243 if (e.isSymbolicLink()) { 80244 promises.push(e 80245 .realpath() 80246 .then((r) => r?.isUnknown() ? r.lstat() : r)); 80247 } 80248 } 80249 if (promises.length) { 80250 Promise.all(promises).then(() => onReaddir(null, entries, true)); 80251 return; 80252 } 80253 } 80254 for (const e of entries) { 80255 if (e && (!filter || filter(e))) { 80256 if (!results.write(withFileTypes ? e : e.fullpath())) { 80257 paused = true; 80258 } 80259 } 80260 } 80261 processing--; 80262 for (const e of entries) { 80263 const r = e.realpathCached() || e; 80264 if (r.shouldWalk(dirs, walkFilter)) { 80265 queue.push(r); 80266 } 80267 } 80268 if (paused && !results.flowing) { 80269 results.once('drain', process); 80270 } 80271 else if (!sync) { 80272 process(); 80273 } 80274 }; 80275 // zalgo containment 80276 let sync = true; 80277 dir.readdirCB(onReaddir, true); 80278 sync = false; 80279 } 80280 }; 80281 process(); 80282 return results; 80283 } 80284 streamSync(entry = this.cwd, opts = {}) { 80285 if (typeof entry === 'string') { 80286 entry = this.cwd.resolve(entry); 80287 } 80288 else if (!(entry instanceof PathBase)) { 80289 opts = entry; 80290 entry = this.cwd; 80291 } 80292 const { withFileTypes = true, follow = false, filter, walkFilter, } = opts; 80293 const results = new minipass_1.Minipass({ objectMode: true }); 80294 const dirs = new Set(); 80295 if (!filter || filter(entry)) { 80296 results.write(withFileTypes ? entry : entry.fullpath()); 80297 } 80298 const queue = [entry]; 80299 let processing = 0; 80300 const process = () => { 80301 let paused = false; 80302 while (!paused) { 80303 const dir = queue.shift(); 80304 if (!dir) { 80305 if (processing === 0) 80306 results.end(); 80307 return; 80308 } 80309 processing++; 80310 dirs.add(dir); 80311 const entries = dir.readdirSync(); 80312 for (const e of entries) { 80313 if (!filter || filter(e)) { 80314 if (!results.write(withFileTypes ? e : e.fullpath())) { 80315 paused = true; 80316 } 80317 } 80318 } 80319 processing--; 80320 for (const e of entries) { 80321 let r = e; 80322 if (e.isSymbolicLink()) { 80323 if (!(follow && (r = e.realpathSync()))) 80324 continue; 80325 if (r.isUnknown()) 80326 r.lstatSync(); 80327 } 80328 if (r.shouldWalk(dirs, walkFilter)) { 80329 queue.push(r); 80330 } 80331 } 80332 } 80333 if (paused && !results.flowing) 80334 results.once('drain', process); 80335 }; 80336 process(); 80337 return results; 80338 } 80339 chdir(path = this.cwd) { 80340 const oldCwd = this.cwd; 80341 this.cwd = typeof path === 'string' ? this.cwd.resolve(path) : path; 80342 this.cwd[setAsCwd](oldCwd); 80343 } 80344 } 80345 exports.PathScurryBase = PathScurryBase; 80346 /** 80347 * Windows implementation of {@link PathScurryBase} 80348 * 80349 * Defaults to case insensitve, uses `'\\'` to generate path strings. Uses 80350 * {@link PathWin32} for Path objects. 80351 */ 80352 class PathScurryWin32 extends PathScurryBase { 80353 /** 80354 * separator for generating path strings 80355 */ 80356 sep = '\\'; 80357 constructor(cwd = process.cwd(), opts = {}) { 80358 const { nocase = true } = opts; 80359 super(cwd, path_1.win32, '\\', { ...opts, nocase }); 80360 this.nocase = nocase; 80361 for (let p = this.cwd; p; p = p.parent) { 80362 p.nocase = this.nocase; 80363 } 80364 } 80365 /** 80366 * @internal 80367 */ 80368 parseRootPath(dir) { 80369 // if the path starts with a single separator, it's not a UNC, and we'll 80370 // just get separator as the root, and driveFromUNC will return \ 80371 // In that case, mount \ on the root from the cwd. 80372 return path_1.win32.parse(dir).root.toUpperCase(); 80373 } 80374 /** 80375 * @internal 80376 */ 80377 newRoot(fs) { 80378 return new PathWin32(this.rootPath, IFDIR, undefined, this.roots, this.nocase, this.childrenCache(), { fs }); 80379 } 80380 /** 80381 * Return true if the provided path string is an absolute path 80382 */ 80383 isAbsolute(p) { 80384 return (p.startsWith('/') || p.startsWith('\\') || /^[a-z]:(\/|\\)/i.test(p)); 80385 } 80386 } 80387 exports.PathScurryWin32 = PathScurryWin32; 80388 /** 80389 * {@link PathScurryBase} implementation for all posix systems other than Darwin. 80390 * 80391 * Defaults to case-sensitive matching, uses `'/'` to generate path strings. 80392 * 80393 * Uses {@link PathPosix} for Path objects. 80394 */ 80395 class PathScurryPosix extends PathScurryBase { 80396 /** 80397 * separator for generating path strings 80398 */ 80399 sep = '/'; 80400 constructor(cwd = process.cwd(), opts = {}) { 80401 const { nocase = false } = opts; 80402 super(cwd, path_1.posix, '/', { ...opts, nocase }); 80403 this.nocase = nocase; 80404 } 80405 /** 80406 * @internal 80407 */ 80408 parseRootPath(_dir) { 80409 return '/'; 80410 } 80411 /** 80412 * @internal 80413 */ 80414 newRoot(fs) { 80415 return new PathPosix(this.rootPath, IFDIR, undefined, this.roots, this.nocase, this.childrenCache(), { fs }); 80416 } 80417 /** 80418 * Return true if the provided path string is an absolute path 80419 */ 80420 isAbsolute(p) { 80421 return p.startsWith('/'); 80422 } 80423 } 80424 exports.PathScurryPosix = PathScurryPosix; 80425 /** 80426 * {@link PathScurryBase} implementation for Darwin (macOS) systems. 80427 * 80428 * Defaults to case-insensitive matching, uses `'/'` for generating path 80429 * strings. 80430 * 80431 * Uses {@link PathPosix} for Path objects. 80432 */ 80433 class PathScurryDarwin extends PathScurryPosix { 80434 constructor(cwd = process.cwd(), opts = {}) { 80435 const { nocase = true } = opts; 80436 super(cwd, { ...opts, nocase }); 80437 } 80438 } 80439 exports.PathScurryDarwin = PathScurryDarwin; 80440 /** 80441 * Default {@link PathBase} implementation for the current platform. 80442 * 80443 * {@link PathWin32} on Windows systems, {@link PathPosix} on all others. 80444 */ 80445 exports.Path = process.platform === 'win32' ? PathWin32 : PathPosix; 80446 /** 80447 * Default {@link PathScurryBase} implementation for the current platform. 80448 * 80449 * {@link PathScurryWin32} on Windows systems, {@link PathScurryDarwin} on 80450 * Darwin (macOS) systems, {@link PathScurryPosix} on all others. 80451 */ 80452 exports.PathScurry = process.platform === 'win32' 80453 ? PathScurryWin32 80454 : process.platform === 'darwin' 80455 ? PathScurryDarwin 80456 : PathScurryPosix; 80457 //# sourceMappingURL=index.js.map 80458 80459 /***/ }), 80460 80461 /***/ 66091: 80462 /***/ ((__unused_webpack_module, exports) => { 80463 80464 "use strict"; 80465 80466 /** 80467 * @module LRUCache 80468 */ 80469 Object.defineProperty(exports, "__esModule", ({ value: true })); 80470 exports.LRUCache = void 0; 80471 const perf = typeof performance === 'object' && 80472 performance && 80473 typeof performance.now === 'function' 80474 ? performance 80475 : Date; 80476 const warned = new Set(); 80477 /* c8 ignore start */ 80478 const PROCESS = (typeof process === 'object' && !!process ? process : {}); 80479 /* c8 ignore start */ 80480 const emitWarning = (msg, type, code, fn) => { 80481 typeof PROCESS.emitWarning === 'function' 80482 ? PROCESS.emitWarning(msg, type, code, fn) 80483 : console.error(`[${code}] ${type}: ${msg}`); 80484 }; 80485 let AC = globalThis.AbortController; 80486 let AS = globalThis.AbortSignal; 80487 /* c8 ignore start */ 80488 if (typeof AC === 'undefined') { 80489 //@ts-ignore 80490 AS = class AbortSignal { 80491 onabort; 80492 _onabort = []; 80493 reason; 80494 aborted = false; 80495 addEventListener(_, fn) { 80496 this._onabort.push(fn); 80497 } 80498 }; 80499 //@ts-ignore 80500 AC = class AbortController { 80501 constructor() { 80502 warnACPolyfill(); 80503 } 80504 signal = new AS(); 80505 abort(reason) { 80506 if (this.signal.aborted) 80507 return; 80508 //@ts-ignore 80509 this.signal.reason = reason; 80510 //@ts-ignore 80511 this.signal.aborted = true; 80512 //@ts-ignore 80513 for (const fn of this.signal._onabort) { 80514 fn(reason); 80515 } 80516 this.signal.onabort?.(reason); 80517 } 80518 }; 80519 let printACPolyfillWarning = PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1'; 80520 const warnACPolyfill = () => { 80521 if (!printACPolyfillWarning) 80522 return; 80523 printACPolyfillWarning = false; 80524 emitWarning('AbortController is not defined. If using lru-cache in ' + 80525 'node 14, load an AbortController polyfill from the ' + 80526 '`node-abort-controller` package. A minimal polyfill is ' + 80527 'provided for use by LRUCache.fetch(), but it should not be ' + 80528 'relied upon in other contexts (eg, passing it to other APIs that ' + 80529 'use AbortController/AbortSignal might have undesirable effects). ' + 80530 'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.', 'NO_ABORT_CONTROLLER', 'ENOTSUP', warnACPolyfill); 80531 }; 80532 } 80533 /* c8 ignore stop */ 80534 const shouldWarn = (code) => !warned.has(code); 80535 const TYPE = Symbol('type'); 80536 const isPosInt = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n); 80537 /* c8 ignore start */ 80538 // This is a little bit ridiculous, tbh. 80539 // The maximum array length is 2^32-1 or thereabouts on most JS impls. 80540 // And well before that point, you're caching the entire world, I mean, 80541 // that's ~32GB of just integers for the next/prev links, plus whatever 80542 // else to hold that many keys and values. Just filling the memory with 80543 // zeroes at init time is brutal when you get that big. 80544 // But why not be complete? 80545 // Maybe in the future, these limits will have expanded. 80546 const getUintArray = (max) => !isPosInt(max) 80547 ? null 80548 : max <= Math.pow(2, 8) 80549 ? Uint8Array 80550 : max <= Math.pow(2, 16) 80551 ? Uint16Array 80552 : max <= Math.pow(2, 32) 80553 ? Uint32Array 80554 : max <= Number.MAX_SAFE_INTEGER 80555 ? ZeroArray 80556 : null; 80557 /* c8 ignore stop */ 80558 class ZeroArray extends Array { 80559 constructor(size) { 80560 super(size); 80561 this.fill(0); 80562 } 80563 } 80564 class Stack { 80565 heap; 80566 length; 80567 // private constructor 80568 static #constructing = false; 80569 static create(max) { 80570 const HeapCls = getUintArray(max); 80571 if (!HeapCls) 80572 return []; 80573 Stack.#constructing = true; 80574 const s = new Stack(max, HeapCls); 80575 Stack.#constructing = false; 80576 return s; 80577 } 80578 constructor(max, HeapCls) { 80579 /* c8 ignore start */ 80580 if (!Stack.#constructing) { 80581 throw new TypeError('instantiate Stack using Stack.create(n)'); 80582 } 80583 /* c8 ignore stop */ 80584 this.heap = new HeapCls(max); 80585 this.length = 0; 80586 } 80587 push(n) { 80588 this.heap[this.length++] = n; 80589 } 80590 pop() { 80591 return this.heap[--this.length]; 80592 } 80593 } 80594 /** 80595 * Default export, the thing you're using this module to get. 80596 * 80597 * All properties from the options object (with the exception of 80598 * {@link OptionsBase.max} and {@link OptionsBase.maxSize}) are added as 80599 * normal public members. (`max` and `maxBase` are read-only getters.) 80600 * Changing any of these will alter the defaults for subsequent method calls, 80601 * but is otherwise safe. 80602 */ 80603 class LRUCache { 80604 // properties coming in from the options of these, only max and maxSize 80605 // really *need* to be protected. The rest can be modified, as they just 80606 // set defaults for various methods. 80607 #max; 80608 #maxSize; 80609 #dispose; 80610 #disposeAfter; 80611 #fetchMethod; 80612 /** 80613 * {@link LRUCache.OptionsBase.ttl} 80614 */ 80615 ttl; 80616 /** 80617 * {@link LRUCache.OptionsBase.ttlResolution} 80618 */ 80619 ttlResolution; 80620 /** 80621 * {@link LRUCache.OptionsBase.ttlAutopurge} 80622 */ 80623 ttlAutopurge; 80624 /** 80625 * {@link LRUCache.OptionsBase.updateAgeOnGet} 80626 */ 80627 updateAgeOnGet; 80628 /** 80629 * {@link LRUCache.OptionsBase.updateAgeOnHas} 80630 */ 80631 updateAgeOnHas; 80632 /** 80633 * {@link LRUCache.OptionsBase.allowStale} 80634 */ 80635 allowStale; 80636 /** 80637 * {@link LRUCache.OptionsBase.noDisposeOnSet} 80638 */ 80639 noDisposeOnSet; 80640 /** 80641 * {@link LRUCache.OptionsBase.noUpdateTTL} 80642 */ 80643 noUpdateTTL; 80644 /** 80645 * {@link LRUCache.OptionsBase.maxEntrySize} 80646 */ 80647 maxEntrySize; 80648 /** 80649 * {@link LRUCache.OptionsBase.sizeCalculation} 80650 */ 80651 sizeCalculation; 80652 /** 80653 * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection} 80654 */ 80655 noDeleteOnFetchRejection; 80656 /** 80657 * {@link LRUCache.OptionsBase.noDeleteOnStaleGet} 80658 */ 80659 noDeleteOnStaleGet; 80660 /** 80661 * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort} 80662 */ 80663 allowStaleOnFetchAbort; 80664 /** 80665 * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection} 80666 */ 80667 allowStaleOnFetchRejection; 80668 /** 80669 * {@link LRUCache.OptionsBase.ignoreFetchAbort} 80670 */ 80671 ignoreFetchAbort; 80672 // computed properties 80673 #size; 80674 #calculatedSize; 80675 #keyMap; 80676 #keyList; 80677 #valList; 80678 #next; 80679 #prev; 80680 #head; 80681 #tail; 80682 #free; 80683 #disposed; 80684 #sizes; 80685 #starts; 80686 #ttls; 80687 #hasDispose; 80688 #hasFetchMethod; 80689 #hasDisposeAfter; 80690 /** 80691 * Do not call this method unless you need to inspect the 80692 * inner workings of the cache. If anything returned by this 80693 * object is modified in any way, strange breakage may occur. 80694 * 80695 * These fields are private for a reason! 80696 * 80697 * @internal 80698 */ 80699 static unsafeExposeInternals(c) { 80700 return { 80701 // properties 80702 starts: c.#starts, 80703 ttls: c.#ttls, 80704 sizes: c.#sizes, 80705 keyMap: c.#keyMap, 80706 keyList: c.#keyList, 80707 valList: c.#valList, 80708 next: c.#next, 80709 prev: c.#prev, 80710 get head() { 80711 return c.#head; 80712 }, 80713 get tail() { 80714 return c.#tail; 80715 }, 80716 free: c.#free, 80717 // methods 80718 isBackgroundFetch: (p) => c.#isBackgroundFetch(p), 80719 backgroundFetch: (k, index, options, context) => c.#backgroundFetch(k, index, options, context), 80720 moveToTail: (index) => c.#moveToTail(index), 80721 indexes: (options) => c.#indexes(options), 80722 rindexes: (options) => c.#rindexes(options), 80723 isStale: (index) => c.#isStale(index), 80724 }; 80725 } 80726 // Protected read-only members 80727 /** 80728 * {@link LRUCache.OptionsBase.max} (read-only) 80729 */ 80730 get max() { 80731 return this.#max; 80732 } 80733 /** 80734 * {@link LRUCache.OptionsBase.maxSize} (read-only) 80735 */ 80736 get maxSize() { 80737 return this.#maxSize; 80738 } 80739 /** 80740 * The total computed size of items in the cache (read-only) 80741 */ 80742 get calculatedSize() { 80743 return this.#calculatedSize; 80744 } 80745 /** 80746 * The number of items stored in the cache (read-only) 80747 */ 80748 get size() { 80749 return this.#size; 80750 } 80751 /** 80752 * {@link LRUCache.OptionsBase.fetchMethod} (read-only) 80753 */ 80754 get fetchMethod() { 80755 return this.#fetchMethod; 80756 } 80757 /** 80758 * {@link LRUCache.OptionsBase.dispose} (read-only) 80759 */ 80760 get dispose() { 80761 return this.#dispose; 80762 } 80763 /** 80764 * {@link LRUCache.OptionsBase.disposeAfter} (read-only) 80765 */ 80766 get disposeAfter() { 80767 return this.#disposeAfter; 80768 } 80769 constructor(options) { 80770 const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort, } = options; 80771 if (max !== 0 && !isPosInt(max)) { 80772 throw new TypeError('max option must be a nonnegative integer'); 80773 } 80774 const UintArray = max ? getUintArray(max) : Array; 80775 if (!UintArray) { 80776 throw new Error('invalid max value: ' + max); 80777 } 80778 this.#max = max; 80779 this.#maxSize = maxSize; 80780 this.maxEntrySize = maxEntrySize || this.#maxSize; 80781 this.sizeCalculation = sizeCalculation; 80782 if (this.sizeCalculation) { 80783 if (!this.#maxSize && !this.maxEntrySize) { 80784 throw new TypeError('cannot set sizeCalculation without setting maxSize or maxEntrySize'); 80785 } 80786 if (typeof this.sizeCalculation !== 'function') { 80787 throw new TypeError('sizeCalculation set to non-function'); 80788 } 80789 } 80790 if (fetchMethod !== undefined && 80791 typeof fetchMethod !== 'function') { 80792 throw new TypeError('fetchMethod must be a function if specified'); 80793 } 80794 this.#fetchMethod = fetchMethod; 80795 this.#hasFetchMethod = !!fetchMethod; 80796 this.#keyMap = new Map(); 80797 this.#keyList = new Array(max).fill(undefined); 80798 this.#valList = new Array(max).fill(undefined); 80799 this.#next = new UintArray(max); 80800 this.#prev = new UintArray(max); 80801 this.#head = 0; 80802 this.#tail = 0; 80803 this.#free = Stack.create(max); 80804 this.#size = 0; 80805 this.#calculatedSize = 0; 80806 if (typeof dispose === 'function') { 80807 this.#dispose = dispose; 80808 } 80809 if (typeof disposeAfter === 'function') { 80810 this.#disposeAfter = disposeAfter; 80811 this.#disposed = []; 80812 } 80813 else { 80814 this.#disposeAfter = undefined; 80815 this.#disposed = undefined; 80816 } 80817 this.#hasDispose = !!this.#dispose; 80818 this.#hasDisposeAfter = !!this.#disposeAfter; 80819 this.noDisposeOnSet = !!noDisposeOnSet; 80820 this.noUpdateTTL = !!noUpdateTTL; 80821 this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection; 80822 this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection; 80823 this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort; 80824 this.ignoreFetchAbort = !!ignoreFetchAbort; 80825 // NB: maxEntrySize is set to maxSize if it's set 80826 if (this.maxEntrySize !== 0) { 80827 if (this.#maxSize !== 0) { 80828 if (!isPosInt(this.#maxSize)) { 80829 throw new TypeError('maxSize must be a positive integer if specified'); 80830 } 80831 } 80832 if (!isPosInt(this.maxEntrySize)) { 80833 throw new TypeError('maxEntrySize must be a positive integer if specified'); 80834 } 80835 this.#initializeSizeTracking(); 80836 } 80837 this.allowStale = !!allowStale; 80838 this.noDeleteOnStaleGet = !!noDeleteOnStaleGet; 80839 this.updateAgeOnGet = !!updateAgeOnGet; 80840 this.updateAgeOnHas = !!updateAgeOnHas; 80841 this.ttlResolution = 80842 isPosInt(ttlResolution) || ttlResolution === 0 80843 ? ttlResolution 80844 : 1; 80845 this.ttlAutopurge = !!ttlAutopurge; 80846 this.ttl = ttl || 0; 80847 if (this.ttl) { 80848 if (!isPosInt(this.ttl)) { 80849 throw new TypeError('ttl must be a positive integer if specified'); 80850 } 80851 this.#initializeTTLTracking(); 80852 } 80853 // do not allow completely unbounded caches 80854 if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) { 80855 throw new TypeError('At least one of max, maxSize, or ttl is required'); 80856 } 80857 if (!this.ttlAutopurge && !this.#max && !this.#maxSize) { 80858 const code = 'LRU_CACHE_UNBOUNDED'; 80859 if (shouldWarn(code)) { 80860 warned.add(code); 80861 const msg = 'TTL caching without ttlAutopurge, max, or maxSize can ' + 80862 'result in unbounded memory consumption.'; 80863 emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache); 80864 } 80865 } 80866 } 80867 /** 80868 * Return the remaining TTL time for a given entry key 80869 */ 80870 getRemainingTTL(key) { 80871 return this.#keyMap.has(key) ? Infinity : 0; 80872 } 80873 #initializeTTLTracking() { 80874 const ttls = new ZeroArray(this.#max); 80875 const starts = new ZeroArray(this.#max); 80876 this.#ttls = ttls; 80877 this.#starts = starts; 80878 this.#setItemTTL = (index, ttl, start = perf.now()) => { 80879 starts[index] = ttl !== 0 ? start : 0; 80880 ttls[index] = ttl; 80881 if (ttl !== 0 && this.ttlAutopurge) { 80882 const t = setTimeout(() => { 80883 if (this.#isStale(index)) { 80884 this.delete(this.#keyList[index]); 80885 } 80886 }, ttl + 1); 80887 // unref() not supported on all platforms 80888 /* c8 ignore start */ 80889 if (t.unref) { 80890 t.unref(); 80891 } 80892 /* c8 ignore stop */ 80893 } 80894 }; 80895 this.#updateItemAge = index => { 80896 starts[index] = ttls[index] !== 0 ? perf.now() : 0; 80897 }; 80898 this.#statusTTL = (status, index) => { 80899 if (ttls[index]) { 80900 const ttl = ttls[index]; 80901 const start = starts[index]; 80902 /* c8 ignore next */ 80903 if (!ttl || !start) 80904 return; 80905 status.ttl = ttl; 80906 status.start = start; 80907 status.now = cachedNow || getNow(); 80908 const age = status.now - start; 80909 status.remainingTTL = ttl - age; 80910 } 80911 }; 80912 // debounce calls to perf.now() to 1s so we're not hitting 80913 // that costly call repeatedly. 80914 let cachedNow = 0; 80915 const getNow = () => { 80916 const n = perf.now(); 80917 if (this.ttlResolution > 0) { 80918 cachedNow = n; 80919 const t = setTimeout(() => (cachedNow = 0), this.ttlResolution); 80920 // not available on all platforms 80921 /* c8 ignore start */ 80922 if (t.unref) { 80923 t.unref(); 80924 } 80925 /* c8 ignore stop */ 80926 } 80927 return n; 80928 }; 80929 this.getRemainingTTL = key => { 80930 const index = this.#keyMap.get(key); 80931 if (index === undefined) { 80932 return 0; 80933 } 80934 const ttl = ttls[index]; 80935 const start = starts[index]; 80936 if (!ttl || !start) { 80937 return Infinity; 80938 } 80939 const age = (cachedNow || getNow()) - start; 80940 return ttl - age; 80941 }; 80942 this.#isStale = index => { 80943 const s = starts[index]; 80944 const t = ttls[index]; 80945 return !!t && !!s && (cachedNow || getNow()) - s > t; 80946 }; 80947 } 80948 // conditionally set private methods related to TTL 80949 #updateItemAge = () => { }; 80950 #statusTTL = () => { }; 80951 #setItemTTL = () => { }; 80952 /* c8 ignore stop */ 80953 #isStale = () => false; 80954 #initializeSizeTracking() { 80955 const sizes = new ZeroArray(this.#max); 80956 this.#calculatedSize = 0; 80957 this.#sizes = sizes; 80958 this.#removeItemSize = index => { 80959 this.#calculatedSize -= sizes[index]; 80960 sizes[index] = 0; 80961 }; 80962 this.#requireSize = (k, v, size, sizeCalculation) => { 80963 // provisionally accept background fetches. 80964 // actual value size will be checked when they return. 80965 if (this.#isBackgroundFetch(v)) { 80966 return 0; 80967 } 80968 if (!isPosInt(size)) { 80969 if (sizeCalculation) { 80970 if (typeof sizeCalculation !== 'function') { 80971 throw new TypeError('sizeCalculation must be a function'); 80972 } 80973 size = sizeCalculation(v, k); 80974 if (!isPosInt(size)) { 80975 throw new TypeError('sizeCalculation return invalid (expect positive integer)'); 80976 } 80977 } 80978 else { 80979 throw new TypeError('invalid size value (must be positive integer). ' + 80980 'When maxSize or maxEntrySize is used, sizeCalculation ' + 80981 'or size must be set.'); 80982 } 80983 } 80984 return size; 80985 }; 80986 this.#addItemSize = (index, size, status) => { 80987 sizes[index] = size; 80988 if (this.#maxSize) { 80989 const maxSize = this.#maxSize - sizes[index]; 80990 while (this.#calculatedSize > maxSize) { 80991 this.#evict(true); 80992 } 80993 } 80994 this.#calculatedSize += sizes[index]; 80995 if (status) { 80996 status.entrySize = size; 80997 status.totalCalculatedSize = this.#calculatedSize; 80998 } 80999 }; 81000 } 81001 #removeItemSize = _i => { }; 81002 #addItemSize = (_i, _s, _st) => { }; 81003 #requireSize = (_k, _v, size, sizeCalculation) => { 81004 if (size || sizeCalculation) { 81005 throw new TypeError('cannot set size without setting maxSize or maxEntrySize on cache'); 81006 } 81007 return 0; 81008 }; 81009 *#indexes({ allowStale = this.allowStale } = {}) { 81010 if (this.#size) { 81011 for (let i = this.#tail; true;) { 81012 if (!this.#isValidIndex(i)) { 81013 break; 81014 } 81015 if (allowStale || !this.#isStale(i)) { 81016 yield i; 81017 } 81018 if (i === this.#head) { 81019 break; 81020 } 81021 else { 81022 i = this.#prev[i]; 81023 } 81024 } 81025 } 81026 } 81027 *#rindexes({ allowStale = this.allowStale } = {}) { 81028 if (this.#size) { 81029 for (let i = this.#head; true;) { 81030 if (!this.#isValidIndex(i)) { 81031 break; 81032 } 81033 if (allowStale || !this.#isStale(i)) { 81034 yield i; 81035 } 81036 if (i === this.#tail) { 81037 break; 81038 } 81039 else { 81040 i = this.#next[i]; 81041 } 81042 } 81043 } 81044 } 81045 #isValidIndex(index) { 81046 return (index !== undefined && 81047 this.#keyMap.get(this.#keyList[index]) === index); 81048 } 81049 /** 81050 * Return a generator yielding `[key, value]` pairs, 81051 * in order from most recently used to least recently used. 81052 */ 81053 *entries() { 81054 for (const i of this.#indexes()) { 81055 if (this.#valList[i] !== undefined && 81056 this.#keyList[i] !== undefined && 81057 !this.#isBackgroundFetch(this.#valList[i])) { 81058 yield [this.#keyList[i], this.#valList[i]]; 81059 } 81060 } 81061 } 81062 /** 81063 * Inverse order version of {@link LRUCache.entries} 81064 * 81065 * Return a generator yielding `[key, value]` pairs, 81066 * in order from least recently used to most recently used. 81067 */ 81068 *rentries() { 81069 for (const i of this.#rindexes()) { 81070 if (this.#valList[i] !== undefined && 81071 this.#keyList[i] !== undefined && 81072 !this.#isBackgroundFetch(this.#valList[i])) { 81073 yield [this.#keyList[i], this.#valList[i]]; 81074 } 81075 } 81076 } 81077 /** 81078 * Return a generator yielding the keys in the cache, 81079 * in order from most recently used to least recently used. 81080 */ 81081 *keys() { 81082 for (const i of this.#indexes()) { 81083 const k = this.#keyList[i]; 81084 if (k !== undefined && 81085 !this.#isBackgroundFetch(this.#valList[i])) { 81086 yield k; 81087 } 81088 } 81089 } 81090 /** 81091 * Inverse order version of {@link LRUCache.keys} 81092 * 81093 * Return a generator yielding the keys in the cache, 81094 * in order from least recently used to most recently used. 81095 */ 81096 *rkeys() { 81097 for (const i of this.#rindexes()) { 81098 const k = this.#keyList[i]; 81099 if (k !== undefined && 81100 !this.#isBackgroundFetch(this.#valList[i])) { 81101 yield k; 81102 } 81103 } 81104 } 81105 /** 81106 * Return a generator yielding the values in the cache, 81107 * in order from most recently used to least recently used. 81108 */ 81109 *values() { 81110 for (const i of this.#indexes()) { 81111 const v = this.#valList[i]; 81112 if (v !== undefined && 81113 !this.#isBackgroundFetch(this.#valList[i])) { 81114 yield this.#valList[i]; 81115 } 81116 } 81117 } 81118 /** 81119 * Inverse order version of {@link LRUCache.values} 81120 * 81121 * Return a generator yielding the values in the cache, 81122 * in order from least recently used to most recently used. 81123 */ 81124 *rvalues() { 81125 for (const i of this.#rindexes()) { 81126 const v = this.#valList[i]; 81127 if (v !== undefined && 81128 !this.#isBackgroundFetch(this.#valList[i])) { 81129 yield this.#valList[i]; 81130 } 81131 } 81132 } 81133 /** 81134 * Iterating over the cache itself yields the same results as 81135 * {@link LRUCache.entries} 81136 */ 81137 [Symbol.iterator]() { 81138 return this.entries(); 81139 } 81140 /** 81141 * A String value that is used in the creation of the default string description of an object. 81142 * Called by the built-in method Object.prototype.toString. 81143 */ 81144 [Symbol.toStringTag] = 'LRUCache'; 81145 /** 81146 * Find a value for which the supplied fn method returns a truthy value, 81147 * similar to Array.find(). fn is called as fn(value, key, cache). 81148 */ 81149 find(fn, getOptions = {}) { 81150 for (const i of this.#indexes()) { 81151 const v = this.#valList[i]; 81152 const value = this.#isBackgroundFetch(v) 81153 ? v.__staleWhileFetching 81154 : v; 81155 if (value === undefined) 81156 continue; 81157 if (fn(value, this.#keyList[i], this)) { 81158 return this.get(this.#keyList[i], getOptions); 81159 } 81160 } 81161 } 81162 /** 81163 * Call the supplied function on each item in the cache, in order from 81164 * most recently used to least recently used. fn is called as 81165 * fn(value, key, cache). Does not update age or recenty of use. 81166 * Does not iterate over stale values. 81167 */ 81168 forEach(fn, thisp = this) { 81169 for (const i of this.#indexes()) { 81170 const v = this.#valList[i]; 81171 const value = this.#isBackgroundFetch(v) 81172 ? v.__staleWhileFetching 81173 : v; 81174 if (value === undefined) 81175 continue; 81176 fn.call(thisp, value, this.#keyList[i], this); 81177 } 81178 } 81179 /** 81180 * The same as {@link LRUCache.forEach} but items are iterated over in 81181 * reverse order. (ie, less recently used items are iterated over first.) 81182 */ 81183 rforEach(fn, thisp = this) { 81184 for (const i of this.#rindexes()) { 81185 const v = this.#valList[i]; 81186 const value = this.#isBackgroundFetch(v) 81187 ? v.__staleWhileFetching 81188 : v; 81189 if (value === undefined) 81190 continue; 81191 fn.call(thisp, value, this.#keyList[i], this); 81192 } 81193 } 81194 /** 81195 * Delete any stale entries. Returns true if anything was removed, 81196 * false otherwise. 81197 */ 81198 purgeStale() { 81199 let deleted = false; 81200 for (const i of this.#rindexes({ allowStale: true })) { 81201 if (this.#isStale(i)) { 81202 this.delete(this.#keyList[i]); 81203 deleted = true; 81204 } 81205 } 81206 return deleted; 81207 } 81208 /** 81209 * Get the extended info about a given entry, to get its value, size, and 81210 * TTL info simultaneously. Like {@link LRUCache#dump}, but just for a 81211 * single key. Always returns stale values, if their info is found in the 81212 * cache, so be sure to check for expired TTLs if relevant. 81213 */ 81214 info(key) { 81215 const i = this.#keyMap.get(key); 81216 if (i === undefined) 81217 return undefined; 81218 const v = this.#valList[i]; 81219 const value = this.#isBackgroundFetch(v) 81220 ? v.__staleWhileFetching 81221 : v; 81222 if (value === undefined) 81223 return undefined; 81224 const entry = { value }; 81225 if (this.#ttls && this.#starts) { 81226 const ttl = this.#ttls[i]; 81227 const start = this.#starts[i]; 81228 if (ttl && start) { 81229 const remain = ttl - (perf.now() - start); 81230 entry.ttl = remain; 81231 entry.start = Date.now(); 81232 } 81233 } 81234 if (this.#sizes) { 81235 entry.size = this.#sizes[i]; 81236 } 81237 return entry; 81238 } 81239 /** 81240 * Return an array of [key, {@link LRUCache.Entry}] tuples which can be 81241 * passed to cache.load() 81242 */ 81243 dump() { 81244 const arr = []; 81245 for (const i of this.#indexes({ allowStale: true })) { 81246 const key = this.#keyList[i]; 81247 const v = this.#valList[i]; 81248 const value = this.#isBackgroundFetch(v) 81249 ? v.__staleWhileFetching 81250 : v; 81251 if (value === undefined || key === undefined) 81252 continue; 81253 const entry = { value }; 81254 if (this.#ttls && this.#starts) { 81255 entry.ttl = this.#ttls[i]; 81256 // always dump the start relative to a portable timestamp 81257 // it's ok for this to be a bit slow, it's a rare operation. 81258 const age = perf.now() - this.#starts[i]; 81259 entry.start = Math.floor(Date.now() - age); 81260 } 81261 if (this.#sizes) { 81262 entry.size = this.#sizes[i]; 81263 } 81264 arr.unshift([key, entry]); 81265 } 81266 return arr; 81267 } 81268 /** 81269 * Reset the cache and load in the items in entries in the order listed. 81270 * Note that the shape of the resulting cache may be different if the 81271 * same options are not used in both caches. 81272 */ 81273 load(arr) { 81274 this.clear(); 81275 for (const [key, entry] of arr) { 81276 if (entry.start) { 81277 // entry.start is a portable timestamp, but we may be using 81278 // node's performance.now(), so calculate the offset, so that 81279 // we get the intended remaining TTL, no matter how long it's 81280 // been on ice. 81281 // 81282 // it's ok for this to be a bit slow, it's a rare operation. 81283 const age = Date.now() - entry.start; 81284 entry.start = perf.now() - age; 81285 } 81286 this.set(key, entry.value, entry); 81287 } 81288 } 81289 /** 81290 * Add a value to the cache. 81291 * 81292 * Note: if `undefined` is specified as a value, this is an alias for 81293 * {@link LRUCache#delete} 81294 */ 81295 set(k, v, setOptions = {}) { 81296 if (v === undefined) { 81297 this.delete(k); 81298 return this; 81299 } 81300 const { ttl = this.ttl, start, noDisposeOnSet = this.noDisposeOnSet, sizeCalculation = this.sizeCalculation, status, } = setOptions; 81301 let { noUpdateTTL = this.noUpdateTTL } = setOptions; 81302 const size = this.#requireSize(k, v, setOptions.size || 0, sizeCalculation); 81303 // if the item doesn't fit, don't do anything 81304 // NB: maxEntrySize set to maxSize by default 81305 if (this.maxEntrySize && size > this.maxEntrySize) { 81306 if (status) { 81307 status.set = 'miss'; 81308 status.maxEntrySizeExceeded = true; 81309 } 81310 // have to delete, in case something is there already. 81311 this.delete(k); 81312 return this; 81313 } 81314 let index = this.#size === 0 ? undefined : this.#keyMap.get(k); 81315 if (index === undefined) { 81316 // addition 81317 index = (this.#size === 0 81318 ? this.#tail 81319 : this.#free.length !== 0 81320 ? this.#free.pop() 81321 : this.#size === this.#max 81322 ? this.#evict(false) 81323 : this.#size); 81324 this.#keyList[index] = k; 81325 this.#valList[index] = v; 81326 this.#keyMap.set(k, index); 81327 this.#next[this.#tail] = index; 81328 this.#prev[index] = this.#tail; 81329 this.#tail = index; 81330 this.#size++; 81331 this.#addItemSize(index, size, status); 81332 if (status) 81333 status.set = 'add'; 81334 noUpdateTTL = false; 81335 } 81336 else { 81337 // update 81338 this.#moveToTail(index); 81339 const oldVal = this.#valList[index]; 81340 if (v !== oldVal) { 81341 if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) { 81342 oldVal.__abortController.abort(new Error('replaced')); 81343 const { __staleWhileFetching: s } = oldVal; 81344 if (s !== undefined && !noDisposeOnSet) { 81345 if (this.#hasDispose) { 81346 this.#dispose?.(s, k, 'set'); 81347 } 81348 if (this.#hasDisposeAfter) { 81349 this.#disposed?.push([s, k, 'set']); 81350 } 81351 } 81352 } 81353 else if (!noDisposeOnSet) { 81354 if (this.#hasDispose) { 81355 this.#dispose?.(oldVal, k, 'set'); 81356 } 81357 if (this.#hasDisposeAfter) { 81358 this.#disposed?.push([oldVal, k, 'set']); 81359 } 81360 } 81361 this.#removeItemSize(index); 81362 this.#addItemSize(index, size, status); 81363 this.#valList[index] = v; 81364 if (status) { 81365 status.set = 'replace'; 81366 const oldValue = oldVal && this.#isBackgroundFetch(oldVal) 81367 ? oldVal.__staleWhileFetching 81368 : oldVal; 81369 if (oldValue !== undefined) 81370 status.oldValue = oldValue; 81371 } 81372 } 81373 else if (status) { 81374 status.set = 'update'; 81375 } 81376 } 81377 if (ttl !== 0 && !this.#ttls) { 81378 this.#initializeTTLTracking(); 81379 } 81380 if (this.#ttls) { 81381 if (!noUpdateTTL) { 81382 this.#setItemTTL(index, ttl, start); 81383 } 81384 if (status) 81385 this.#statusTTL(status, index); 81386 } 81387 if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) { 81388 const dt = this.#disposed; 81389 let task; 81390 while ((task = dt?.shift())) { 81391 this.#disposeAfter?.(...task); 81392 } 81393 } 81394 return this; 81395 } 81396 /** 81397 * Evict the least recently used item, returning its value or 81398 * `undefined` if cache is empty. 81399 */ 81400 pop() { 81401 try { 81402 while (this.#size) { 81403 const val = this.#valList[this.#head]; 81404 this.#evict(true); 81405 if (this.#isBackgroundFetch(val)) { 81406 if (val.__staleWhileFetching) { 81407 return val.__staleWhileFetching; 81408 } 81409 } 81410 else if (val !== undefined) { 81411 return val; 81412 } 81413 } 81414 } 81415 finally { 81416 if (this.#hasDisposeAfter && this.#disposed) { 81417 const dt = this.#disposed; 81418 let task; 81419 while ((task = dt?.shift())) { 81420 this.#disposeAfter?.(...task); 81421 } 81422 } 81423 } 81424 } 81425 #evict(free) { 81426 const head = this.#head; 81427 const k = this.#keyList[head]; 81428 const v = this.#valList[head]; 81429 if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) { 81430 v.__abortController.abort(new Error('evicted')); 81431 } 81432 else if (this.#hasDispose || this.#hasDisposeAfter) { 81433 if (this.#hasDispose) { 81434 this.#dispose?.(v, k, 'evict'); 81435 } 81436 if (this.#hasDisposeAfter) { 81437 this.#disposed?.push([v, k, 'evict']); 81438 } 81439 } 81440 this.#removeItemSize(head); 81441 // if we aren't about to use the index, then null these out 81442 if (free) { 81443 this.#keyList[head] = undefined; 81444 this.#valList[head] = undefined; 81445 this.#free.push(head); 81446 } 81447 if (this.#size === 1) { 81448 this.#head = this.#tail = 0; 81449 this.#free.length = 0; 81450 } 81451 else { 81452 this.#head = this.#next[head]; 81453 } 81454 this.#keyMap.delete(k); 81455 this.#size--; 81456 return head; 81457 } 81458 /** 81459 * Check if a key is in the cache, without updating the recency of use. 81460 * Will return false if the item is stale, even though it is technically 81461 * in the cache. 81462 * 81463 * Will not update item age unless 81464 * {@link LRUCache.OptionsBase.updateAgeOnHas} is set. 81465 */ 81466 has(k, hasOptions = {}) { 81467 const { updateAgeOnHas = this.updateAgeOnHas, status } = hasOptions; 81468 const index = this.#keyMap.get(k); 81469 if (index !== undefined) { 81470 const v = this.#valList[index]; 81471 if (this.#isBackgroundFetch(v) && 81472 v.__staleWhileFetching === undefined) { 81473 return false; 81474 } 81475 if (!this.#isStale(index)) { 81476 if (updateAgeOnHas) { 81477 this.#updateItemAge(index); 81478 } 81479 if (status) { 81480 status.has = 'hit'; 81481 this.#statusTTL(status, index); 81482 } 81483 return true; 81484 } 81485 else if (status) { 81486 status.has = 'stale'; 81487 this.#statusTTL(status, index); 81488 } 81489 } 81490 else if (status) { 81491 status.has = 'miss'; 81492 } 81493 return false; 81494 } 81495 /** 81496 * Like {@link LRUCache#get} but doesn't update recency or delete stale 81497 * items. 81498 * 81499 * Returns `undefined` if the item is stale, unless 81500 * {@link LRUCache.OptionsBase.allowStale} is set. 81501 */ 81502 peek(k, peekOptions = {}) { 81503 const { allowStale = this.allowStale } = peekOptions; 81504 const index = this.#keyMap.get(k); 81505 if (index === undefined || 81506 (!allowStale && this.#isStale(index))) { 81507 return; 81508 } 81509 const v = this.#valList[index]; 81510 // either stale and allowed, or forcing a refresh of non-stale value 81511 return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v; 81512 } 81513 #backgroundFetch(k, index, options, context) { 81514 const v = index === undefined ? undefined : this.#valList[index]; 81515 if (this.#isBackgroundFetch(v)) { 81516 return v; 81517 } 81518 const ac = new AC(); 81519 const { signal } = options; 81520 // when/if our AC signals, then stop listening to theirs. 81521 signal?.addEventListener('abort', () => ac.abort(signal.reason), { 81522 signal: ac.signal, 81523 }); 81524 const fetchOpts = { 81525 signal: ac.signal, 81526 options, 81527 context, 81528 }; 81529 const cb = (v, updateCache = false) => { 81530 const { aborted } = ac.signal; 81531 const ignoreAbort = options.ignoreFetchAbort && v !== undefined; 81532 if (options.status) { 81533 if (aborted && !updateCache) { 81534 options.status.fetchAborted = true; 81535 options.status.fetchError = ac.signal.reason; 81536 if (ignoreAbort) 81537 options.status.fetchAbortIgnored = true; 81538 } 81539 else { 81540 options.status.fetchResolved = true; 81541 } 81542 } 81543 if (aborted && !ignoreAbort && !updateCache) { 81544 return fetchFail(ac.signal.reason); 81545 } 81546 // either we didn't abort, and are still here, or we did, and ignored 81547 const bf = p; 81548 if (this.#valList[index] === p) { 81549 if (v === undefined) { 81550 if (bf.__staleWhileFetching) { 81551 this.#valList[index] = bf.__staleWhileFetching; 81552 } 81553 else { 81554 this.delete(k); 81555 } 81556 } 81557 else { 81558 if (options.status) 81559 options.status.fetchUpdated = true; 81560 this.set(k, v, fetchOpts.options); 81561 } 81562 } 81563 return v; 81564 }; 81565 const eb = (er) => { 81566 if (options.status) { 81567 options.status.fetchRejected = true; 81568 options.status.fetchError = er; 81569 } 81570 return fetchFail(er); 81571 }; 81572 const fetchFail = (er) => { 81573 const { aborted } = ac.signal; 81574 const allowStaleAborted = aborted && options.allowStaleOnFetchAbort; 81575 const allowStale = allowStaleAborted || options.allowStaleOnFetchRejection; 81576 const noDelete = allowStale || options.noDeleteOnFetchRejection; 81577 const bf = p; 81578 if (this.#valList[index] === p) { 81579 // if we allow stale on fetch rejections, then we need to ensure that 81580 // the stale value is not removed from the cache when the fetch fails. 81581 const del = !noDelete || bf.__staleWhileFetching === undefined; 81582 if (del) { 81583 this.delete(k); 81584 } 81585 else if (!allowStaleAborted) { 81586 // still replace the *promise* with the stale value, 81587 // since we are done with the promise at this point. 81588 // leave it untouched if we're still waiting for an 81589 // aborted background fetch that hasn't yet returned. 81590 this.#valList[index] = bf.__staleWhileFetching; 81591 } 81592 } 81593 if (allowStale) { 81594 if (options.status && bf.__staleWhileFetching !== undefined) { 81595 options.status.returnedStale = true; 81596 } 81597 return bf.__staleWhileFetching; 81598 } 81599 else if (bf.__returned === bf) { 81600 throw er; 81601 } 81602 }; 81603 const pcall = (res, rej) => { 81604 const fmp = this.#fetchMethod?.(k, v, fetchOpts); 81605 if (fmp && fmp instanceof Promise) { 81606 fmp.then(v => res(v === undefined ? undefined : v), rej); 81607 } 81608 // ignored, we go until we finish, regardless. 81609 // defer check until we are actually aborting, 81610 // so fetchMethod can override. 81611 ac.signal.addEventListener('abort', () => { 81612 if (!options.ignoreFetchAbort || 81613 options.allowStaleOnFetchAbort) { 81614 res(undefined); 81615 // when it eventually resolves, update the cache. 81616 if (options.allowStaleOnFetchAbort) { 81617 res = v => cb(v, true); 81618 } 81619 } 81620 }); 81621 }; 81622 if (options.status) 81623 options.status.fetchDispatched = true; 81624 const p = new Promise(pcall).then(cb, eb); 81625 const bf = Object.assign(p, { 81626 __abortController: ac, 81627 __staleWhileFetching: v, 81628 __returned: undefined, 81629 }); 81630 if (index === undefined) { 81631 // internal, don't expose status. 81632 this.set(k, bf, { ...fetchOpts.options, status: undefined }); 81633 index = this.#keyMap.get(k); 81634 } 81635 else { 81636 this.#valList[index] = bf; 81637 } 81638 return bf; 81639 } 81640 #isBackgroundFetch(p) { 81641 if (!this.#hasFetchMethod) 81642 return false; 81643 const b = p; 81644 return (!!b && 81645 b instanceof Promise && 81646 b.hasOwnProperty('__staleWhileFetching') && 81647 b.__abortController instanceof AC); 81648 } 81649 async fetch(k, fetchOptions = {}) { 81650 const { 81651 // get options 81652 allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, 81653 // set options 81654 ttl = this.ttl, noDisposeOnSet = this.noDisposeOnSet, size = 0, sizeCalculation = this.sizeCalculation, noUpdateTTL = this.noUpdateTTL, 81655 // fetch exclusive options 81656 noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, allowStaleOnFetchRejection = this.allowStaleOnFetchRejection, ignoreFetchAbort = this.ignoreFetchAbort, allowStaleOnFetchAbort = this.allowStaleOnFetchAbort, context, forceRefresh = false, status, signal, } = fetchOptions; 81657 if (!this.#hasFetchMethod) { 81658 if (status) 81659 status.fetch = 'get'; 81660 return this.get(k, { 81661 allowStale, 81662 updateAgeOnGet, 81663 noDeleteOnStaleGet, 81664 status, 81665 }); 81666 } 81667 const options = { 81668 allowStale, 81669 updateAgeOnGet, 81670 noDeleteOnStaleGet, 81671 ttl, 81672 noDisposeOnSet, 81673 size, 81674 sizeCalculation, 81675 noUpdateTTL, 81676 noDeleteOnFetchRejection, 81677 allowStaleOnFetchRejection, 81678 allowStaleOnFetchAbort, 81679 ignoreFetchAbort, 81680 status, 81681 signal, 81682 }; 81683 let index = this.#keyMap.get(k); 81684 if (index === undefined) { 81685 if (status) 81686 status.fetch = 'miss'; 81687 const p = this.#backgroundFetch(k, index, options, context); 81688 return (p.__returned = p); 81689 } 81690 else { 81691 // in cache, maybe already fetching 81692 const v = this.#valList[index]; 81693 if (this.#isBackgroundFetch(v)) { 81694 const stale = allowStale && v.__staleWhileFetching !== undefined; 81695 if (status) { 81696 status.fetch = 'inflight'; 81697 if (stale) 81698 status.returnedStale = true; 81699 } 81700 return stale ? v.__staleWhileFetching : (v.__returned = v); 81701 } 81702 // if we force a refresh, that means do NOT serve the cached value, 81703 // unless we are already in the process of refreshing the cache. 81704 const isStale = this.#isStale(index); 81705 if (!forceRefresh && !isStale) { 81706 if (status) 81707 status.fetch = 'hit'; 81708 this.#moveToTail(index); 81709 if (updateAgeOnGet) { 81710 this.#updateItemAge(index); 81711 } 81712 if (status) 81713 this.#statusTTL(status, index); 81714 return v; 81715 } 81716 // ok, it is stale or a forced refresh, and not already fetching. 81717 // refresh the cache. 81718 const p = this.#backgroundFetch(k, index, options, context); 81719 const hasStale = p.__staleWhileFetching !== undefined; 81720 const staleVal = hasStale && allowStale; 81721 if (status) { 81722 status.fetch = isStale ? 'stale' : 'refresh'; 81723 if (staleVal && isStale) 81724 status.returnedStale = true; 81725 } 81726 return staleVal ? p.__staleWhileFetching : (p.__returned = p); 81727 } 81728 } 81729 /** 81730 * Return a value from the cache. Will update the recency of the cache 81731 * entry found. 81732 * 81733 * If the key is not found, get() will return `undefined`. 81734 */ 81735 get(k, getOptions = {}) { 81736 const { allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, status, } = getOptions; 81737 const index = this.#keyMap.get(k); 81738 if (index !== undefined) { 81739 const value = this.#valList[index]; 81740 const fetching = this.#isBackgroundFetch(value); 81741 if (status) 81742 this.#statusTTL(status, index); 81743 if (this.#isStale(index)) { 81744 if (status) 81745 status.get = 'stale'; 81746 // delete only if not an in-flight background fetch 81747 if (!fetching) { 81748 if (!noDeleteOnStaleGet) { 81749 this.delete(k); 81750 } 81751 if (status && allowStale) 81752 status.returnedStale = true; 81753 return allowStale ? value : undefined; 81754 } 81755 else { 81756 if (status && 81757 allowStale && 81758 value.__staleWhileFetching !== undefined) { 81759 status.returnedStale = true; 81760 } 81761 return allowStale ? value.__staleWhileFetching : undefined; 81762 } 81763 } 81764 else { 81765 if (status) 81766 status.get = 'hit'; 81767 // if we're currently fetching it, we don't actually have it yet 81768 // it's not stale, which means this isn't a staleWhileRefetching. 81769 // If it's not stale, and fetching, AND has a __staleWhileFetching 81770 // value, then that means the user fetched with {forceRefresh:true}, 81771 // so it's safe to return that value. 81772 if (fetching) { 81773 return value.__staleWhileFetching; 81774 } 81775 this.#moveToTail(index); 81776 if (updateAgeOnGet) { 81777 this.#updateItemAge(index); 81778 } 81779 return value; 81780 } 81781 } 81782 else if (status) { 81783 status.get = 'miss'; 81784 } 81785 } 81786 #connect(p, n) { 81787 this.#prev[n] = p; 81788 this.#next[p] = n; 81789 } 81790 #moveToTail(index) { 81791 // if tail already, nothing to do 81792 // if head, move head to next[index] 81793 // else 81794 // move next[prev[index]] to next[index] (head has no prev) 81795 // move prev[next[index]] to prev[index] 81796 // prev[index] = tail 81797 // next[tail] = index 81798 // tail = index 81799 if (index !== this.#tail) { 81800 if (index === this.#head) { 81801 this.#head = this.#next[index]; 81802 } 81803 else { 81804 this.#connect(this.#prev[index], this.#next[index]); 81805 } 81806 this.#connect(this.#tail, index); 81807 this.#tail = index; 81808 } 81809 } 81810 /** 81811 * Deletes a key out of the cache. 81812 * Returns true if the key was deleted, false otherwise. 81813 */ 81814 delete(k) { 81815 let deleted = false; 81816 if (this.#size !== 0) { 81817 const index = this.#keyMap.get(k); 81818 if (index !== undefined) { 81819 deleted = true; 81820 if (this.#size === 1) { 81821 this.clear(); 81822 } 81823 else { 81824 this.#removeItemSize(index); 81825 const v = this.#valList[index]; 81826 if (this.#isBackgroundFetch(v)) { 81827 v.__abortController.abort(new Error('deleted')); 81828 } 81829 else if (this.#hasDispose || this.#hasDisposeAfter) { 81830 if (this.#hasDispose) { 81831 this.#dispose?.(v, k, 'delete'); 81832 } 81833 if (this.#hasDisposeAfter) { 81834 this.#disposed?.push([v, k, 'delete']); 81835 } 81836 } 81837 this.#keyMap.delete(k); 81838 this.#keyList[index] = undefined; 81839 this.#valList[index] = undefined; 81840 if (index === this.#tail) { 81841 this.#tail = this.#prev[index]; 81842 } 81843 else if (index === this.#head) { 81844 this.#head = this.#next[index]; 81845 } 81846 else { 81847 const pi = this.#prev[index]; 81848 this.#next[pi] = this.#next[index]; 81849 const ni = this.#next[index]; 81850 this.#prev[ni] = this.#prev[index]; 81851 } 81852 this.#size--; 81853 this.#free.push(index); 81854 } 81855 } 81856 } 81857 if (this.#hasDisposeAfter && this.#disposed?.length) { 81858 const dt = this.#disposed; 81859 let task; 81860 while ((task = dt?.shift())) { 81861 this.#disposeAfter?.(...task); 81862 } 81863 } 81864 return deleted; 81865 } 81866 /** 81867 * Clear the cache entirely, throwing away all values. 81868 */ 81869 clear() { 81870 for (const index of this.#rindexes({ allowStale: true })) { 81871 const v = this.#valList[index]; 81872 if (this.#isBackgroundFetch(v)) { 81873 v.__abortController.abort(new Error('deleted')); 81874 } 81875 else { 81876 const k = this.#keyList[index]; 81877 if (this.#hasDispose) { 81878 this.#dispose?.(v, k, 'delete'); 81879 } 81880 if (this.#hasDisposeAfter) { 81881 this.#disposed?.push([v, k, 'delete']); 81882 } 81883 } 81884 } 81885 this.#keyMap.clear(); 81886 this.#valList.fill(undefined); 81887 this.#keyList.fill(undefined); 81888 if (this.#ttls && this.#starts) { 81889 this.#ttls.fill(0); 81890 this.#starts.fill(0); 81891 } 81892 if (this.#sizes) { 81893 this.#sizes.fill(0); 81894 } 81895 this.#head = 0; 81896 this.#tail = 0; 81897 this.#free.length = 0; 81898 this.#calculatedSize = 0; 81899 this.#size = 0; 81900 if (this.#hasDisposeAfter && this.#disposed) { 81901 const dt = this.#disposed; 81902 let task; 81903 while ((task = dt?.shift())) { 81904 this.#disposeAfter?.(...task); 81905 } 81906 } 81907 } 81908 } 81909 exports.LRUCache = LRUCache; 81910 //# sourceMappingURL=index.js.map 81911 81912 /***/ }), 81913 81914 /***/ 78992: 81915 /***/ ((module) => { 81916 81917 "use strict"; 81918 module.exports = {"i8":"2.3.1"}; 81919 81920 /***/ }), 81921 81922 /***/ 84998: 81923 /***/ ((module) => { 81924 81925 "use strict"; 81926 module.exports = JSON.parse('{"https://tuf-repo-cdn.sigstore.dev":{"root.json":"ewoJInNpZ25lZCI6IHsKCQkiX3R5cGUiOiAicm9vdCIsCgkJInNwZWNfdmVyc2lvbiI6ICIxLjAiLAoJCSJ2ZXJzaW9uIjogOSwKCQkiZXhwaXJlcyI6ICIyMDI0LTA5LTEyVDA2OjUzOjEwWiIsCgkJImtleXMiOiB7CgkJCSIxZTFkNjVjZTk4YjEwYWRkYWQ0NzY0ZmViZjdkZGEyZDA0MzZiM2QzYTM4OTM1NzljMGRkZGFlYTIwZTU0ODQ5IjogewoJCQkJImtleXR5cGUiOiAiZWNkc2EiLAoJCQkJInNjaGVtZSI6ICJlY2RzYS1zaGEyLW5pc3RwMjU2IiwKCQkJCSJrZXlpZF9oYXNoX2FsZ29yaXRobXMiOiBbCgkJCQkJInNoYTI1NiIsCgkJCQkJInNoYTUxMiIKCQkJCV0sCgkJCQkia2V5dmFsIjogewoJCQkJCSJwdWJsaWMiOiAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXpCelZPbUhDUG9qTVZMU0kzNjRXaWlWOE5QckRcbjZJZ1J4Vmxpc2t6L3YreTNKRVI1bWNWR2NPTmxpRGNXTUM1SjJsZkhtalBOUGhiNEg3eG04THpmU0E9PVxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iCgkJCQl9CgkJCX0sCgkJCSIyMzBlMjEyNjE2Mjc0YTQxOTVjZGMyOGU5ZmNlNzgyYzIwZTZjNzIwZjFhODExYjQwZjk4MjI4Mzc2YmRkM2FjIjogewoJCQkJImtleXR5cGUiOiAiZWNkc2EiLAoJCQkJInNjaGVtZSI6ICJlY2RzYS1zaGEyLW5pc3RwMjU2IiwKCQkJCSJrZXlpZF9oYXNoX2FsZ29yaXRobXMiOiBbCgkJCQkJInNoYTI1NiIsCgkJCQkJInNoYTUxMiIKCQkJCV0sCgkJCQkia2V5dmFsIjogewoJCQkJCSJwdWJsaWMiOiAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUxyV3ZOdDk0djRSMDg1RUxlZUNNeEhwN1BsZEZcbjAvVDFHeHVrVWgyT0R1Z2dMR0pFMHBjMWU4Q1NCZjZDUzkxRndvOUZVT3VSc2pCVWxkK1ZxU3lDZFE9PVxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iCgkJCQl9CgkJCX0sCgkJCSIzYzM0NGFhMDY4ZmQ0Y2M0ZTg3ZGM1MGI2MTJjMDI0MzFmYmM3NzFlOTUwMDM5OTM2ODNhMmIwYmYyNjBjZjBlIjogewoJCQkJImtleXR5cGUiOiAiZWNkc2EiLAoJCQkJInNjaGVtZSI6ICJlY2RzYS1zaGEyLW5pc3RwMjU2IiwKCQkJCSJrZXlpZF9oYXNoX2FsZ29yaXRobXMiOiBbCgkJCQkJInNoYTI1NiIsCgkJCQkJInNoYTUxMiIKCQkJCV0sCgkJCQkia2V5dmFsIjogewoJCQkJCSJwdWJsaWMiOiAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRXk4WEtzbWhCWURJOEpjMEd3ekJ4ZUtheDBjbTVcblNUS0VVNjVIUEZ1blVuNDFzVDhwaTBGak00SWtIei9ZVW13bUxVTzBXdDdseGhqNkJrTElLNHFZQXc9PVxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iCgkJCQl9CgkJCX0sCgkJCSI5MjNiYjM5ZTYwZGQ2ZmEyYzMxZTZlYTU1NDczYWE5M2I2NGRkNGU1M2UxNmZiZTQyZjZhMjA3ZDNmOTdkZTJkIjogewoJCQkJImtleXR5cGUiOiAiZWNkc2EiLAoJCQkJInNjaGVtZSI6ICJlY2RzYS1zaGEyLW5pc3RwMjU2IiwKCQkJCSJrZXlpZF9oYXNoX2FsZ29yaXRobXMiOiBbCgkJCQkJInNoYTI1NiIsCgkJCQkJInNoYTUxMiIKCQkJCV0sCgkJCQkia2V5dmFsIjogewoJCQkJCSJwdWJsaWMiOiAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRVdSaUdyNStqKzNKNVNzSCtadHI1bkUySDJ3TzdcbkJWK25PM3M5M2dMY2ExOHFUT3pIWTFvV3lBR0R5a01Tc0dUVUJTdDlEK0FuMEtmS3NEMm1mU000MlE9PVxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iCgkJCQl9CgkJCX0sCgkJCSJlMmY1OWFjYjk0ODg1MTk0MDdlMThjYmZjOTMyOTUxMGJlMDNjMDRhY2E5OTI5ZDJmMDMwMTM0M2ZlYzg1NTIzIjogewoJCQkJImtleXR5cGUiOiAiZWNkc2EiLAoJCQkJInNjaGVtZSI6ICJlY2RzYS1zaGEyLW5pc3RwMjU2IiwKCQkJCSJrZXlpZF9oYXNoX2FsZ29yaXRobXMiOiBbCgkJCQkJInNoYTI1NiIsCgkJCQkJInNoYTUxMiIKCQkJCV0sCgkJCQkia2V5dmFsIjogewoJCQkJCSJwdWJsaWMiOiAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRWluaWtTc0FRbVlrTmVINWVZcS9Dbkl6TGFhY09cbnhsU2Fhd1FET3dxS3kvdENxeHE1eHhQU0pjMjFLNFdJaHM5R3lPa0tmenVlWTNHSUx6Y01KWjRjV3c9PVxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iCgkJCQl9CgkJCX0sCgkJCSJlYzgxNjY5NzM0ZTAxNzk5NmM1Yjg1ZjNkMDJjM2RlMWRkNDYzN2ExNTIwMTlmZTFhZjEyNWQyZjkzNjhiOTVlIjogewoJCQkJImtleXR5cGUiOiAiZWNkc2EiLAoJCQkJInNjaGVtZSI6ICJlY2RzYS1zaGEyLW5pc3RwMjU2IiwKCQkJCSJrZXlpZF9oYXNoX2FsZ29yaXRobXMiOiBbCgkJCQkJInNoYTI1NiIsCgkJCQkJInNoYTUxMiIKCQkJCV0sCgkJCQkia2V5dmFsIjogewoJCQkJCSJwdWJsaWMiOiAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRUVYc3ozU1pYRmI4ak1WNDJqNnBKbHlqYmpSOEtcbk4zQndvY2V4cTZMTUliNXFzV0tPUXZMTjE2TlVlZkxjNEhzd09vdW1Sc1ZWYWFqU3BRUzZmb2JrUnc9PVxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iCgkJCQl9CgkJCX0sCgkJCSJmZGZhODNhMDdiNWE4MzU4OWI4N2RlZDQxZjc3ZjM5ZDIzMmFkOTFmN2NjZTUyODY4ZGFjZDA2YmEwODk4NDlmIjogewoJCQkJImtleXR5cGUiOiAiZWNkc2EiLAoJCQkJInNjaGVtZSI6ICJlY2RzYS1zaGEyLW5pc3RwMjU2IiwKCQkJCSJrZXlpZF9oYXNoX2FsZ29yaXRobXMiOiBbCgkJCQkJInNoYTI1NiIsCgkJCQkJInNoYTUxMiIKCQkJCV0sCgkJCQkia2V5dmFsIjogewoJCQkJCSJwdWJsaWMiOiAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTBnaHJoOTJMdzFZcjNpZEdWNVdxQ3RNREI4Q3hcbitEOGhkQzR3MlpMTklwbFZSb1ZHTHNrWWEzZ2hlTXlPamlKOGtQaTE1YVEyLy83UCtvajdVdkpQR3c9PVxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iCgkJCQl9CgkJCX0KCQl9LAoJCSJyb2xlcyI6IHsKCQkJInJvb3QiOiB7CgkJCQkia2V5aWRzIjogWwoJCQkJCSIzYzM0NGFhMDY4ZmQ0Y2M0ZTg3ZGM1MGI2MTJjMDI0MzFmYmM3NzFlOTUwMDM5OTM2ODNhMmIwYmYyNjBjZjBlIiwKCQkJCQkiZWM4MTY2OTczNGUwMTc5OTZjNWI4NWYzZDAyYzNkZTFkZDQ2MzdhMTUyMDE5ZmUxYWYxMjVkMmY5MzY4Yjk1ZSIsCgkJCQkJIjFlMWQ2NWNlOThiMTBhZGRhZDQ3NjRmZWJmN2RkYTJkMDQzNmIzZDNhMzg5MzU3OWMwZGRkYWVhMjBlNTQ4NDkiLAoJCQkJCSJlMmY1OWFjYjk0ODg1MTk0MDdlMThjYmZjOTMyOTUxMGJlMDNjMDRhY2E5OTI5ZDJmMDMwMTM0M2ZlYzg1NTIzIiwKCQkJCQkiZmRmYTgzYTA3YjVhODM1ODliODdkZWQ0MWY3N2YzOWQyMzJhZDkxZjdjY2U1Mjg2OGRhY2QwNmJhMDg5ODQ5ZiIKCQkJCV0sCgkJCQkidGhyZXNob2xkIjogMwoJCQl9LAoJCQkic25hcHNob3QiOiB7CgkJCQkia2V5aWRzIjogWwoJCQkJCSIyMzBlMjEyNjE2Mjc0YTQxOTVjZGMyOGU5ZmNlNzgyYzIwZTZjNzIwZjFhODExYjQwZjk4MjI4Mzc2YmRkM2FjIgoJCQkJXSwKCQkJCSJ0aHJlc2hvbGQiOiAxCgkJCX0sCgkJCSJ0YXJnZXRzIjogewoJCQkJImtleWlkcyI6IFsKCQkJCQkiM2MzNDRhYTA2OGZkNGNjNGU4N2RjNTBiNjEyYzAyNDMxZmJjNzcxZTk1MDAzOTkzNjgzYTJiMGJmMjYwY2YwZSIsCgkJCQkJImVjODE2Njk3MzRlMDE3OTk2YzViODVmM2QwMmMzZGUxZGQ0NjM3YTE1MjAxOWZlMWFmMTI1ZDJmOTM2OGI5NWUiLAoJCQkJCSIxZTFkNjVjZTk4YjEwYWRkYWQ0NzY0ZmViZjdkZGEyZDA0MzZiM2QzYTM4OTM1NzljMGRkZGFlYTIwZTU0ODQ5IiwKCQkJCQkiZTJmNTlhY2I5NDg4NTE5NDA3ZTE4Y2JmYzkzMjk1MTBiZTAzYzA0YWNhOTkyOWQyZjAzMDEzNDNmZWM4NTUyMyIsCgkJCQkJImZkZmE4M2EwN2I1YTgzNTg5Yjg3ZGVkNDFmNzdmMzlkMjMyYWQ5MWY3Y2NlNTI4NjhkYWNkMDZiYTA4OTg0OWYiCgkJCQldLAoJCQkJInRocmVzaG9sZCI6IDMKCQkJfSwKCQkJInRpbWVzdGFtcCI6IHsKCQkJCSJrZXlpZHMiOiBbCgkJCQkJIjkyM2JiMzllNjBkZDZmYTJjMzFlNmVhNTU0NzNhYTkzYjY0ZGQ0ZTUzZTE2ZmJlNDJmNmEyMDdkM2Y5N2RlMmQiCgkJCQldLAoJCQkJInRocmVzaG9sZCI6IDEKCQkJfQoJCX0sCgkJImNvbnNpc3RlbnRfc25hcHNob3QiOiB0cnVlCgl9LAoJInNpZ25hdHVyZXMiOiBbCgkJewoJCQkia2V5aWQiOiAiZmY1MWUxN2ZjZjI1MzExOWI3MDMzZjZmNTc1MTI2MzFkYTRhMDk2OTQ0MmFmY2Y5ZmM4YjE0MWM3ZjJiZTk5YyIsCgkJCSJzaWciOiAiMzA0NTAyMjEwMDhiNzhmODk0YzNjZmVkM2JkNDg2Mzc5YzRlMGUwZGZiM2U3ZGQ4Y2JjNGQ1NTk4ZDI4MThlZWExYmEzYzc1NTAwMjIwMjlkM2QwNmU4OWQwNGQzNzg0OTk4NWRjNDZjMGUxMGRjNWIxZmM2OGRjNzBhZjFlYzk5MTAzMDNhMWYzZWUyZiIKCQl9LAoJCXsKCQkJImtleWlkIjogIjI1YTBlYjQ1MGZkM2VlMmJkNzkyMThjOTYzZGNlM2YxY2M2MTE4YmFkZjI1MWJmMTQ5ZjBiZDA3ZDVjYWJlOTkiLAoJCQkic2lnIjogIjMwNDUwMjIxMDA5ZTZiOTBiOTM1ZTA5YjgzN2E5MGQ0NDAyZWFhMjdkNWVhMjZlYjc4OTE5NDhiYTBlZDcwOTA4NDEyNDhmNDM2MDIyMDAzZGMyMjUxYzRkNGE3OTk5YjkxZTlhZDA4Njg3NjVhZTA5YWM3MjY5Mjc5ZjJhNzg5OWJhZmVmN2EyZDkyNjAiCgkJfSwKCQl7CgkJCSJrZXlpZCI6ICJmNTMxMmY1NDJjMjEyNzNkOTQ4NWE0OTM5NDM4NmM0NTc1ODA0NzcwNjY3ZjJkZGI1OWIzYmYwNjY5ZmRkZDJmIiwKCQkJInNpZyI6ICIzMDQ0MDIyMDA5OWU5MDdkY2Y5MGI3YjZlMTA5ZmQxZDZlNDQyMDA2ZmNjYmI0ODg5NGFhYWZmNDdhYjgyNGIwM2ZiMzVkMGQwMjIwMmFhMGEwNmMyMWE0MjMzZjM3OTAwYTQ4YmM4Nzc3ZDNiNDdmNTllM2EzODYxNmNlNjMxYTA0ZGY1N2Y5NjczNiIKCQl9LAoJCXsKCQkJImtleWlkIjogIjNjMzQ0YWEwNjhmZDRjYzRlODdkYzUwYjYxMmMwMjQzMWZiYzc3MWU5NTAwMzk5MzY4M2EyYjBiZjI2MGNmMGUiLAoJCQkic2lnIjogIjMwNDUwMjIxMDA4Yjc4Zjg5NGMzY2ZlZDNiZDQ4NjM3OWM0ZTBlMGRmYjNlN2RkOGNiYzRkNTU5OGQyODE4ZWVhMWJhM2M3NTUwMDIyMDI5ZDNkMDZlODlkMDRkMzc4NDk5ODVkYzQ2YzBlMTBkYzViMWZjNjhkYzcwYWYxZWM5OTEwMzAzYTFmM2VlMmYiCgkJfSwKCQl7CgkJCSJrZXlpZCI6ICJlYzgxNjY5NzM0ZTAxNzk5NmM1Yjg1ZjNkMDJjM2RlMWRkNDYzN2ExNTIwMTlmZTFhZjEyNWQyZjkzNjhiOTVlIiwKCQkJInNpZyI6ICIzMDQ1MDIyMTAwOWU2YjkwYjkzNWUwOWI4MzdhOTBkNDQwMmVhYTI3ZDVlYTI2ZWI3ODkxOTQ4YmEwZWQ3MDkwODQxMjQ4ZjQzNjAyMjAwM2RjMjI1MWM0ZDRhNzk5OWI5MWU5YWQwODY4NzY1YWUwOWFjNzI2OTI3OWYyYTc4OTliYWZlZjdhMmQ5MjYwIgoJCX0sCgkJewoJCQkia2V5aWQiOiAiZTJmNTlhY2I5NDg4NTE5NDA3ZTE4Y2JmYzkzMjk1MTBiZTAzYzA0YWNhOTkyOWQyZjAzMDEzNDNmZWM4NTUyMyIsCgkJCSJzaWciOiAiMzA0NTAyMjAwZTU2MTNiOTAxZTBmM2UwOGVjZWFiZGRjNzNmOThiNTBkZGY4OTJlOTk4ZDBiMzY5YzZlM2Q0NTFhYzQ4ODc1MDIyMTAwOTQwY2Y5MmQxZjQzZWUyZTVjZGJiMjI1NzJiYjUyOTI1ZWQzODYzYTY4OGY3ZmZkZDRiZDJlMmU1NmYwMjhiMyIKCQl9LAoJCXsKCQkJImtleWlkIjogIjJlNjFjZDBjYmY0YThmNDU4MDliZGE5ZjdmNzhjMGQzM2FkMTE4NDJmZjk0YWUzNDA4NzNlMjY2NGRjODQzZGUiLAoJCQkic2lnIjogIjMwNDUwMjIwMmNmZjQ0ZjIyMTVkN2E0N2IyOGI4ZjVmNTgwYzJjZmJiZDFiZmNmY2JiZTc4ZGUzMjMwNDViMmMwYmFkYzVlOTAyMjEwMGM3NDM5NDllYjNmNGVhNWE0YjlhZTI3YWM2ZWRkZWExZjBmZjliZmQwMDRmOGE5YTlkMThjNmU0MTQyYjZlNzUiCgkJfSwKCQl7CgkJCSJrZXlpZCI6ICIxZTFkNjVjZTk4YjEwYWRkYWQ0NzY0ZmViZjdkZGEyZDA0MzZiM2QzYTM4OTM1NzljMGRkZGFlYTIwZTU0ODQ5IiwKCQkJInNpZyI6ICIzMDQ0MDIyMDA5OWU5MDdkY2Y5MGI3YjZlMTA5ZmQxZDZlNDQyMDA2ZmNjYmI0ODg5NGFhYWZmNDdhYjgyNGIwM2ZiMzVkMGQwMjIwMmFhMGEwNmMyMWE0MjMzZjM3OTAwYTQ4YmM4Nzc3ZDNiNDdmNTllM2EzODYxNmNlNjMxYTA0ZGY1N2Y5NjczNiIKCQl9LAoJCXsKCQkJImtleWlkIjogImZkZmE4M2EwN2I1YTgzNTg5Yjg3ZGVkNDFmNzdmMzlkMjMyYWQ5MWY3Y2NlNTI4NjhkYWNkMDZiYTA4OTg0OWYiLAoJCQkic2lnIjogIjMwNDUwMjIwMmNmZjQ0ZjIyMTVkN2E0N2IyOGI4ZjVmNTgwYzJjZmJiZDFiZmNmY2JiZTc4ZGUzMjMwNDViMmMwYmFkYzVlOTAyMjEwMGM3NDM5NDllYjNmNGVhNWE0YjlhZTI3YWM2ZWRkZWExZjBmZjliZmQwMDRmOGE5YTlkMThjNmU0MTQyYjZlNzUiCgkJfSwKCQl7CgkJCSJrZXlpZCI6ICI3Zjc1MTNiMjU0MjlhNjQ0NzNlMTBjZTNhZDJmM2RhMzcyYmJkZDE0YjY1ZDA3YmJhZjU0N2U3YzhiYmJlNjJiIiwKCQkJInNpZyI6ICIzMDQ1MDIyMDBlNTYxM2I5MDFlMGYzZTA4ZWNlYWJkZGM3M2Y5OGI1MGRkZjg5MmU5OThkMGIzNjljNmUzZDQ1MWFjNDg4NzUwMjIxMDA5NDBjZjkyZDFmNDNlZTJlNWNkYmIyMjU3MmJiNTI5MjVlZDM4NjNhNjg4ZjdmZmRkNGJkMmUyZTU2ZjAyOGIzIgoJCX0KCV0KfQ==","targets":{"trusted_root.json":"ewogICJtZWRpYVR5cGUiOiAiYXBwbGljYXRpb24vdm5kLmRldi5zaWdzdG9yZS50cnVzdGVkcm9vdCtqc29uO3ZlcnNpb249MC4xIiwKICAidGxvZ3MiOiBbCiAgICB7CiAgICAgICJiYXNlVXJsIjogImh0dHBzOi8vcmVrb3Iuc2lnc3RvcmUuZGV2IiwKICAgICAgImhhc2hBbGdvcml0aG0iOiAiU0hBMl8yNTYiLAogICAgICAicHVibGljS2V5IjogewogICAgICAgICJyYXdCeXRlcyI6ICJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUyRzJZKzJ0YWJkVFY1QmNHaUJJeDBhOWZBRndya0JibUxTR3RrczRMM3FYNnlZWTB6dWZCbmhDOFVyL2l5NTVHaFdQLzlBL2JZMkxoQzMwTTkrUll0dz09IiwKICAgICAgICAia2V5RGV0YWlscyI6ICJQS0lYX0VDRFNBX1AyNTZfU0hBXzI1NiIsCiAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgInN0YXJ0IjogIjIwMjEtMDEtMTJUMTE6NTM6MjcuMDAwWiIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICJsb2dJZCI6IHsKICAgICAgICAia2V5SWQiOiAid05JOWF0UUdseitWV2ZPNkxSeWdINFFVZlkvOFc0UkZ3aVQ1aTVXUmdCMD0iCiAgICAgIH0KICAgIH0KICBdLAogICJjZXJ0aWZpY2F0ZUF1dGhvcml0aWVzIjogWwogICAgewogICAgICAic3ViamVjdCI6IHsKICAgICAgICAib3JnYW5pemF0aW9uIjogInNpZ3N0b3JlLmRldiIsCiAgICAgICAgImNvbW1vbk5hbWUiOiAic2lnc3RvcmUiCiAgICAgIH0sCiAgICAgICJ1cmkiOiAiaHR0cHM6Ly9mdWxjaW8uc2lnc3RvcmUuZGV2IiwKICAgICAgImNlcnRDaGFpbiI6IHsKICAgICAgICAiY2VydGlmaWNhdGVzIjogWwogICAgICAgICAgewogICAgICAgICAgICAicmF3Qnl0ZXMiOiAiTUlJQitEQ0NBWDZnQXdJQkFnSVROVmtEWm9DaW9mUERzeTdkZm02Z2VMYnVoekFLQmdncWhrak9QUVFEQXpBcU1SVXdFd1lEVlFRS0V3eHphV2R6ZEc5eVpTNWtaWFl4RVRBUEJnTlZCQU1UQ0hOcFozTjBiM0psTUI0WERUSXhNRE13TnpBek1qQXlPVm9YRFRNeE1ESXlNekF6TWpBeU9Wb3dLakVWTUJNR0ExVUVDaE1NYzJsbmMzUnZjbVV1WkdWMk1SRXdEd1lEVlFRREV3aHphV2R6ZEc5eVpUQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQkxTeUE3SWk1aytwTk84WkVXWTB5bGVtV0Rvd09rTmEza0wrR1pFNVo1R1dlaEw5L0E5YlJOQTNSYnJzWjVpMEpjYXN0YVJMN1NwNWZwL2pENWR4cWMvVWRUVm5sdlMxNmFuKzJZZnN3ZS9RdUxvbFJVQ3JjT0UyKzJpQTUrdHpkNk5tTUdRd0RnWURWUjBQQVFIL0JBUURBZ0VHTUJJR0ExVWRFd0VCL3dRSU1BWUJBZjhDQVFFd0hRWURWUjBPQkJZRUZNakZIUUJCbWlRcE1sRWs2dzJ1U3UxS0J0UHNNQjhHQTFVZEl3UVlNQmFBRk1qRkhRQkJtaVFwTWxFazZ3MnVTdTFLQnRQc01Bb0dDQ3FHU000OUJBTURBMmdBTUdVQ01IOGxpV0pmTXVpNnZYWEJoakRnWTRNd3NsbU4vVEp4VmUvODNXckZvbXdtTmYwNTZ5MVg0OEY5YzRtM2Ezb3pYQUl4QUtqUmF5NS9hai9qc0tLR0lrbVFhdGpJOHV1cEhyLytDeEZ2YUpXbXBZcU5rTERHUlUrOW9yemg1aEkyUnJjdWFRPT0iCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9LAogICAgICAidmFsaWRGb3IiOiB7CiAgICAgICAgInN0YXJ0IjogIjIwMjEtMDMtMDdUMDM6MjA6MjkuMDAwWiIsCiAgICAgICAgImVuZCI6ICIyMDIyLTEyLTMxVDIzOjU5OjU5Ljk5OVoiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJzdWJqZWN0IjogewogICAgICAgICJvcmdhbml6YXRpb24iOiAic2lnc3RvcmUuZGV2IiwKICAgICAgICAiY29tbW9uTmFtZSI6ICJzaWdzdG9yZSIKICAgICAgfSwKICAgICAgInVyaSI6ICJodHRwczovL2Z1bGNpby5zaWdzdG9yZS5kZXYiLAogICAgICAiY2VydENoYWluIjogewogICAgICAgICJjZXJ0aWZpY2F0ZXMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJyYXdCeXRlcyI6ICJNSUlDR2pDQ0FhR2dBd0lCQWdJVUFMblZpVmZuVTBickphc21Sa0hybi9VbmZhUXdDZ1lJS29aSXpqMEVBd013S2pFVk1CTUdBMVVFQ2hNTWMybG5jM1J2Y21VdVpHVjJNUkV3RHdZRFZRUURFd2h6YVdkemRHOXlaVEFlRncweU1qQTBNVE15TURBMk1UVmFGdzB6TVRFd01EVXhNelUyTlRoYU1EY3hGVEFUQmdOVkJBb1RESE5wWjNOMGIzSmxMbVJsZGpFZU1Cd0dBMVVFQXhNVmMybG5jM1J2Y21VdGFXNTBaWEp0WldScFlYUmxNSFl3RUFZSEtvWkl6ajBDQVFZRks0RUVBQ0lEWWdBRThSVlMveXNIK05PdnVEWnlQSVp0aWxnVUY5TmxhcllwQWQ5SFAxdkJCSDFVNUNWNzdMU1M3czBaaUg0bkU3SHY3cHRTNkx2dlIvU1RrNzk4TFZnTXpMbEo0SGVJZkYzdEhTYWV4TGNZcFNBU3Ixa1MwTi9SZ0JKei85aldDaVhubzNzd2VUQU9CZ05WSFE4QkFmOEVCQU1DQVFZd0V3WURWUjBsQkF3d0NnWUlLd1lCQlFVSEF3TXdFZ1lEVlIwVEFRSC9CQWd3QmdFQi93SUJBREFkQmdOVkhRNEVGZ1FVMzlQcHoxWWtFWmI1cU5qcEtGV2l4aTRZWkQ4d0h3WURWUjBqQkJnd0ZvQVVXTUFlWDVGRnBXYXBlc3lRb1pNaTBDckZ4Zm93Q2dZSUtvWkl6ajBFQXdNRFp3QXdaQUl3UENzUUs0RFlpWllEUElhRGk1SEZLbmZ4WHg2QVNTVm1FUmZzeW5ZQmlYMlg2U0pSblpVODQvOURaZG5GdnZ4bUFqQk90NlFwQmxjNEovMER4dmtUQ3FwY2x2emlMNkJDQ1BuamRsSUIzUHUzQnhzUG15Z1VZN0lpMnpiZENkbGlpb3c9IgogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgInJhd0J5dGVzIjogIk1JSUI5ekNDQVh5Z0F3SUJBZ0lVQUxaTkFQRmR4SFB3amVEbG9Ed3lZQ2hBTy80d0NnWUlLb1pJemowRUF3TXdLakVWTUJNR0ExVUVDaE1NYzJsbmMzUnZjbVV1WkdWMk1SRXdEd1lEVlFRREV3aHphV2R6ZEc5eVpUQWVGdzB5TVRFd01EY3hNelUyTlRsYUZ3MHpNVEV3TURVeE16VTJOVGhhTUNveEZUQVRCZ05WQkFvVERITnBaM04wYjNKbExtUmxkakVSTUE4R0ExVUVBeE1JYzJsbmMzUnZjbVV3ZGpBUUJnY3Foa2pPUFFJQkJnVXJnUVFBSWdOaUFBVDdYZUZUNHJiM1BRR3dTNElhanRMazMvT2xucGdhbmdhQmNsWXBzWUJyNWkrNHluQjA3Y2ViM0xQME9JT1pkeGV4WDY5YzVpVnV5SlJRK0h6MDV5aStVRjN1QldBbEhwaVM1c2gwK0gyR0hFN1NYcmsxRUM1bTFUcjE5TDlnZzkyall6QmhNQTRHQTFVZER3RUIvd1FFQXdJQkJqQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01CMEdBMVVkRGdRV0JCUll3QjVma1VXbFpxbDZ6SkNoa3lMUUtzWEYrakFmQmdOVkhTTUVHREFXZ0JSWXdCNWZrVVdsWnFsNnpKQ2hreUxRS3NYRitqQUtCZ2dxaGtqT1BRUURBd05wQURCbUFqRUFqMW5IZVhacCsxM05XQk5hK0VEc0RQOEcxV1dnMXRDTVdQL1dIUHFwYVZvMGpoc3dlTkZaZ1NzMGVFN3dZSTRxQWpFQTJXQjlvdDk4c0lrb0YzdlpZZGQzL1Z0V0I1YjlUTk1lYTdJeC9zdEo1VGZjTExlQUJMRTRCTkpPc1E0dm5CSEoiCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9LAogICAgICAidmFsaWRGb3IiOiB7CiAgICAgICAgInN0YXJ0IjogIjIwMjItMDQtMTNUMjA6MDY6MTUuMDAwWiIKICAgICAgfQogICAgfQogIF0sCiAgImN0bG9ncyI6IFsKICAgIHsKICAgICAgImJhc2VVcmwiOiAiaHR0cHM6Ly9jdGZlLnNpZ3N0b3JlLmRldi90ZXN0IiwKICAgICAgImhhc2hBbGdvcml0aG0iOiAiU0hBMl8yNTYiLAogICAgICAicHVibGljS2V5IjogewogICAgICAgICJyYXdCeXRlcyI6ICJNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUViZndSK1JKdWRYc2NnUkJScEtYMVhGRHkzUHl1ZER4ei9TZm5SaTFmVDhla3BmQmQyTzF1b3o3anIzWjhuS3p4QTY5RVVRK2VGQ0ZJM3pldWJQV1U3dz09IiwKICAgICAgICAia2V5RGV0YWlscyI6ICJQS0lYX0VDRFNBX1AyNTZfU0hBXzI1NiIsCiAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgInN0YXJ0IjogIjIwMjEtMDMtMTRUMDA6MDA6MDAuMDAwWiIsCiAgICAgICAgICAiZW5kIjogIjIwMjItMTAtMzFUMjM6NTk6NTkuOTk5WiIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICJsb2dJZCI6IHsKICAgICAgICAia2V5SWQiOiAiQ0dDUzhDaFMvMmhGMGRGcko0U2NSV2NZckJZOXd6alNiZWE4SWdZMmIzST0iCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJiYXNlVXJsIjogImh0dHBzOi8vY3RmZS5zaWdzdG9yZS5kZXYvMjAyMiIsCiAgICAgICJoYXNoQWxnb3JpdGhtIjogIlNIQTJfMjU2IiwKICAgICAgInB1YmxpY0tleSI6IHsKICAgICAgICAicmF3Qnl0ZXMiOiAiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaVBTbEZpMENtRlRmRWpDVXFGOUh1Q0VjWVhOS0FhWWFsSUptQlo4eXllelBqVHFoeHJLQnBNbmFvY1Z0TEpCSTFlTTN1WG5RelFHQUpkSjRnczlGeXc9PSIsCiAgICAgICAgImtleURldGFpbHMiOiAiUEtJWF9FQ0RTQV9QMjU2X1NIQV8yNTYiLAogICAgICAgICJ2YWxpZEZvciI6IHsKICAgICAgICAgICJzdGFydCI6ICIyMDIyLTEwLTIwVDAwOjAwOjAwLjAwMFoiCiAgICAgICAgfQogICAgICB9LAogICAgICAibG9nSWQiOiB7CiAgICAgICAgImtleUlkIjogIjNUMHdhc2JIRVRKakdSNGNtV2MzQXFKS1hyamVQSzMvaDRweWdDOHA3bzQ9IgogICAgICB9CiAgICB9CiAgXSwKICAidGltZXN0YW1wQXV0aG9yaXRpZXMiOiBbCiAgICB7CiAgICAgICJzdWJqZWN0IjogewogICAgICAgICJvcmdhbml6YXRpb24iOiAiR2l0SHViLCBJbmMuIiwKICAgICAgICAiY29tbW9uTmFtZSI6ICJJbnRlcm5hbCBTZXJ2aWNlcyBSb290IgogICAgICB9LAogICAgICAiY2VydENoYWluIjogewogICAgICAgICJjZXJ0aWZpY2F0ZXMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJyYXdCeXRlcyI6ICJNSUlCM0RDQ0FXS2dBd0lCQWdJVWNoa05zSDM2WGEwNGIxTHFJYytxcjlEVmVjTXdDZ1lJS29aSXpqMEVBd013TWpFVk1CTUdBMVVFQ2hNTVIybDBTSFZpTENCSmJtTXVNUmt3RndZRFZRUURFeEJVVTBFZ2FXNTBaWEp0WldScFlYUmxNQjRYRFRJek1EUXhOREF3TURBd01Gb1hEVEkwTURReE16QXdNREF3TUZvd01qRVZNQk1HQTFVRUNoTU1SMmwwU0hWaUxDQkpibU11TVJrd0Z3WURWUVFERXhCVVUwRWdWR2x0WlhOMFlXMXdhVzVuTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFVUQ1Wk5iU3FZTWQ2cjhxcE9PRVg5aWJHblpUOUdzdVhPaHIvZjhVOUZKdWdCR0V4S1lwNDBPVUxTMGVyalpXN3hWOXhWNTJObkpmNU9lRHE0ZTVaS3FOV01GUXdEZ1lEVlIwUEFRSC9CQVFEQWdlQU1CTUdBMVVkSlFRTU1Bb0dDQ3NHQVFVRkJ3TUlNQXdHQTFVZEV3RUIvd1FDTUFBd0h3WURWUjBqQkJnd0ZvQVVhVzFSdWRPZ1Z0MGxlcVkwV0tZYnVQcjQ3d0F3Q2dZSUtvWkl6ajBFQXdNRGFBQXdaUUl3YlVIOUh2RDRlakNaSk9XUW5xQWxrcVVSbGx2dTlNOCtWcUxiaVJLK3pTZlpDWndzaWxqUm44TVFRUlNrWEVFNUFqRUFnK1Z4cXRvamZWZnU4RGh6emhDeDlHS0VUYkpIYjE5aVY3Mm1NS1ViREFGbXpaNmJROGI1NFpiOHRpZHk1YVdlIgogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgInJhd0J5dGVzIjogIk1JSUNFRENDQVpXZ0F3SUJBZ0lVWDhaTzVRWFA3dk40ZE1RNWU5c1UzbnViOE9nd0NnWUlLb1pJemowRUF3TXdPREVWTUJNR0ExVUVDaE1NUjJsMFNIVmlMQ0JKYm1NdU1SOHdIUVlEVlFRREV4WkpiblJsY201aGJDQlRaWEoyYVdObGN5QlNiMjkwTUI0WERUSXpNRFF4TkRBd01EQXdNRm9YRFRJNE1EUXhNakF3TURBd01Gb3dNakVWTUJNR0ExVUVDaE1NUjJsMFNIVmlMQ0JKYm1NdU1Sa3dGd1lEVlFRREV4QlVVMEVnYVc1MFpYSnRaV1JwWVhSbE1IWXdFQVlIS29aSXpqMENBUVlGSzRFRUFDSURZZ0FFdk1MWS9kVFZidklKWUFOQXVzekV3Sm5RRTFsbGZ0eW55TUtJTWhoNDhIbXFiVnI1eWd5YnpzTFJMVktiQldPZFoyMWFlSnorZ1ppeXRaZXRxY3lGOVdsRVI1TkVNZjZKVjdaTm9qUXB4SHE0UkhHb0dTY2VRdi9xdlRpWnhFREtvMll3WkRBT0JnTlZIUThCQWY4RUJBTUNBUVl3RWdZRFZSMFRBUUgvQkFnd0JnRUIvd0lCQURBZEJnTlZIUTRFRmdRVWFXMVJ1ZE9nVnQwbGVxWTBXS1lidVByNDd3QXdId1lEVlIwakJCZ3dGb0FVOU5ZWWxvYm5BRzRjMC9xanh5SC9scS93eitRd0NnWUlLb1pJemowRUF3TURhUUF3WmdJeEFLMUIxODV5Z0NySVlGbElzM0dqc3dqbndTTUc2TFk4d29MVmRha0tEWnhWYThmOGNxTXMxRGhjeEowKzA5dzk1UUl4QU8rdEJ6Wms3dmpVSjlpSmdENFI2WldUeFFXS3FObTc0ak85OW8rbzlzdjRGSS9TWlRaVEZ5TW4wSUpFSGRObXlBPT0iCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAicmF3Qnl0ZXMiOiAiTUlJQjlEQ0NBWHFnQXdJQkFnSVVhL0pBa2RVaks0SlV3c3F0YWlSSkdXaHFMU293Q2dZSUtvWkl6ajBFQXdNd09ERVZNQk1HQTFVRUNoTU1SMmwwU0hWaUxDQkpibU11TVI4d0hRWURWUVFERXhaSmJuUmxjbTVoYkNCVFpYSjJhV05sY3lCU2IyOTBNQjRYRFRJek1EUXhOREF3TURBd01Gb1hEVE16TURReE1UQXdNREF3TUZvd09ERVZNQk1HQTFVRUNoTU1SMmwwU0hWaUxDQkpibU11TVI4d0hRWURWUVFERXhaSmJuUmxjbTVoYkNCVFpYSjJhV05sY3lCU2IyOTBNSFl3RUFZSEtvWkl6ajBDQVFZRks0RUVBQ0lEWWdBRWY5akZBWHh6NGt4NjhBSFJNT2tGQmhmbERjTVR2emFYejR4L0ZDY1hqSi8xcUVLb24vcVBJR25hVVJza0R0eU5iTkRPcGVKVERERnF0NDhpTVBybnpweDZJWndxZW1mVUpONHhCRVpmemErcFl0L2l5b2QrOXRacjIwUlJXU3YvbzBVd1F6QU9CZ05WSFE4QkFmOEVCQU1DQVFZd0VnWURWUjBUQVFIL0JBZ3dCZ0VCL3dJQkFqQWRCZ05WSFE0RUZnUVU5TllZbG9ibkFHNGMwL3FqeHlIL2xxL3d6K1F3Q2dZSUtvWkl6ajBFQXdNRGFBQXdaUUl4QUxaTFo4QmdSWHpLeExNTU45VklsTytlNGhyQm5OQmdGN3R6N0hucm93djJOZXRaRXJJQUNLRnltQmx2V0R2dE1BSXdaTytraTZzc1ExYnNabzk4TzhtRUFmMk5aN2lpQ2dERFUwVndqZWNvNnp5ZWgwekJUczkvN2dWNkFITlE1M3hEIgogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSwKICAgICAgInZhbGlkRm9yIjogewogICAgICAgICJzdGFydCI6ICIyMDIzLTA0LTE0VDAwOjAwOjAwLjAwMFoiCiAgICAgIH0KICAgIH0KICBdCn0K","registry.npmjs.org%2Fkeys.json":"ewogICAgImtleXMiOiBbCiAgICAgICAgewogICAgICAgICAgICAia2V5SWQiOiAiU0hBMjU2OmpsM2J3c3d1ODBQampva0NnaDBvMnc1YzJVNExoUUFFNTdnajljejFrekEiLAogICAgICAgICAgICAia2V5VXNhZ2UiOiAibnBtOnNpZ25hdHVyZXMiLAogICAgICAgICAgICAicHVibGljS2V5IjogewogICAgICAgICAgICAgICAgInJhd0J5dGVzIjogIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTFPbGIzek1BRkZ4WEtIaUlrUU81Y0ozWWhsNWk2VVBwK0lodXRlQkpidUhjQTVVb2dLbzBFV3RsV3dXNktTYUtvVE5FWUw3SmxDUWlWbmtoQmt0VWdnPT0iLAogICAgICAgICAgICAgICAgImtleURldGFpbHMiOiAiUEtJWF9FQ0RTQV9QMjU2X1NIQV8yNTYiLAogICAgICAgICAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgICAgICAgICAgICJzdGFydCI6ICIxOTk5LTAxLTAxVDAwOjAwOjAwLjAwMFoiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgImtleUlkIjogIlNIQTI1NjpqbDNid3N3dTgwUGpqb2tDZ2gwbzJ3NWMyVTRMaFFBRTU3Z2o5Y3oxa3pBIiwKICAgICAgICAgICAgImtleVVzYWdlIjogIm5wbTphdHRlc3RhdGlvbnMiLAogICAgICAgICAgICAicHVibGljS2V5IjogewogICAgICAgICAgICAgICAgInJhd0J5dGVzIjogIk1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEUWdBRTFPbGIzek1BRkZ4WEtIaUlrUU81Y0ozWWhsNWk2VVBwK0lodXRlQkpidUhjQTVVb2dLbzBFV3RsV3dXNktTYUtvVE5FWUw3SmxDUWlWbmtoQmt0VWdnPT0iLAogICAgICAgICAgICAgICAgImtleURldGFpbHMiOiAiUEtJWF9FQ0RTQV9QMjU2X1NIQV8yNTYiLAogICAgICAgICAgICAgICAgInZhbGlkRm9yIjogewogICAgICAgICAgICAgICAgICAgICJzdGFydCI6ICIyMDIyLTEyLTAxVDAwOjAwOjAwLjAwMFoiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICBdCn0K"}}}'); 81927 81928 /***/ }), 81929 81930 /***/ 51526: 81931 /***/ ((module) => { 81932 81933 "use strict"; 81934 module.exports = JSON.parse('{"Jw":{"k":"2","K":"5"}}'); 81935 81936 /***/ }), 81937 81938 /***/ 63480: 81939 /***/ ((module) => { 81940 81941 "use strict"; 81942 module.exports = JSON.parse('[["8740","䏰䰲䘃䖦䕸𧉧䵷䖳𧲱䳢𧳅㮕䜶䝄䱇䱀𤊿𣘗𧍒𦺋𧃒䱗𪍑䝏䗚䲅𧱬䴇䪤䚡𦬣爥𥩔𡩣𣸆𣽡晍囻"],["8767","綕夝𨮹㷴霴𧯯寛𡵞媤㘥𩺰嫑宷峼杮薓𩥅瑡璝㡵𡵓𣚞𦀡㻬"],["87a1","𥣞㫵竼龗𤅡𨤍𣇪𠪊𣉞䌊蒄龖鐯䤰蘓墖靊鈘秐稲晠権袝瑌篅枂稬剏遆㓦珄𥶹瓆鿇垳䤯呌䄱𣚎堘穲𧭥讏䚮𦺈䆁𥶙箮𢒼鿈𢓁𢓉𢓌鿉蔄𣖻䂴鿊䓡𪷿拁灮鿋"],["8840","㇀",4,"𠄌㇅𠃑𠃍㇆㇇𠃋𡿨㇈𠃊㇉㇊㇋㇌𠄎㇍㇎ĀÁǍÀĒÉĚÈŌÓǑÒÊ̄ẾÊ̌ỀÊāáǎàɑēéěèīíǐìōóǒòūúǔùǖǘǚ"],["88a1","ǜüê̄ếê̌ềêɡ⏚⏛"],["8940","𪎩𡅅"],["8943","攊"],["8946","丽滝鵎釟"],["894c","𧜵撑会伨侨兖兴农凤务动医华发变团声处备夲头学实実岚庆总斉柾栄桥济炼电纤纬纺织经统缆缷艺苏药视设询车轧轮"],["89a1","琑糼緍楆竉刧"],["89ab","醌碸酞肼"],["89b0","贋胶𠧧"],["89b5","肟黇䳍鷉鸌䰾𩷶𧀎鸊𪄳㗁"],["89c1","溚舾甙"],["89c5","䤑马骏龙禇𨑬𡷊𠗐𢫦两亁亀亇亿仫伷㑌侽㹈倃傈㑽㒓㒥円夅凛凼刅争剹劐匧㗇厩㕑厰㕓参吣㕭㕲㚁咓咣咴咹哐哯唘唣唨㖘唿㖥㖿嗗㗅"],["8a40","𧶄唥"],["8a43","𠱂𠴕𥄫喐𢳆㧬𠍁蹆𤶸𩓥䁓𨂾睺𢰸㨴䟕𨅝𦧲𤷪擝𠵼𠾴𠳕𡃴撍蹾𠺖𠰋𠽤𢲩𨉖𤓓"],["8a64","𠵆𩩍𨃩䟴𤺧𢳂骲㩧𩗴㿭㔆𥋇𩟔𧣈𢵄鵮頕"],["8a76","䏙𦂥撴哣𢵌𢯊𡁷㧻𡁯"],["8aa1","𦛚𦜖𧦠擪𥁒𠱃蹨𢆡𨭌𠜱"],["8aac","䠋𠆩㿺塳𢶍"],["8ab2","𤗈𠓼𦂗𠽌𠶖啹䂻䎺"],["8abb","䪴𢩦𡂝膪飵𠶜捹㧾𢝵跀嚡摼㹃"],["8ac9","𪘁𠸉𢫏𢳉"],["8ace","𡃈𣧂㦒㨆𨊛㕸𥹉𢃇噒𠼱𢲲𩜠㒼氽𤸻"],["8adf","𧕴𢺋𢈈𪙛𨳍𠹺𠰴𦠜羓𡃏𢠃𢤹㗻𥇣𠺌𠾍𠺪㾓𠼰𠵇𡅏𠹌"],["8af6","𠺫𠮩𠵈𡃀𡄽㿹𢚖搲𠾭"],["8b40","𣏴𧘹𢯎𠵾𠵿𢱑𢱕㨘𠺘𡃇𠼮𪘲𦭐𨳒𨶙𨳊閪哌苄喹"],["8b55","𩻃鰦骶𧝞𢷮煀腭胬尜𦕲脴㞗卟𨂽醶𠻺𠸏𠹷𠻻㗝𤷫㘉𠳖嚯𢞵𡃉𠸐𠹸𡁸𡅈𨈇𡑕𠹹𤹐𢶤婔𡀝𡀞𡃵𡃶垜𠸑"],["8ba1","𧚔𨋍𠾵𠹻𥅾㜃𠾶𡆀𥋘𪊽𤧚𡠺𤅷𨉼墙剨㘚𥜽箲孨䠀䬬鼧䧧鰟鮍𥭴𣄽嗻㗲嚉丨夂𡯁屮靑𠂆乛亻㔾尣彑忄㣺扌攵歺氵氺灬爫丬犭𤣩罒礻糹罓𦉪㓁"],["8bde","𦍋耂肀𦘒𦥑卝衤见𧢲讠贝钅镸长门𨸏韦页风飞饣𩠐鱼鸟黄歯龜丷𠂇阝户钢"],["8c40","倻淾𩱳龦㷉袏𤅎灷峵䬠𥇍㕙𥴰愢𨨲辧釶熑朙玺𣊁𪄇㲋𡦀䬐磤琂冮𨜏䀉橣𪊺䈣蘏𠩯稪𩥇𨫪靕灍匤𢁾鏴盙𨧣龧矝亣俰傼丯众龨吴綋墒壐𡶶庒庙忂𢜒斋"],["8ca1","𣏹椙橃𣱣泿"],["8ca7","爀𤔅玌㻛𤨓嬕璹讃𥲤𥚕窓篬糃繬苸薗龩袐龪躹龫迏蕟駠鈡龬𨶹𡐿䁱䊢娚"],["8cc9","顨杫䉶圽"],["8cce","藖𤥻芿𧄍䲁𦵴嵻𦬕𦾾龭龮宖龯曧繛湗秊㶈䓃𣉖𢞖䎚䔶"],["8ce6","峕𣬚諹屸㴒𣕑嵸龲煗䕘𤃬𡸣䱷㥸㑊𠆤𦱁諌侴𠈹妿腬顖𩣺弻"],["8d40","𠮟"],["8d42","𢇁𨥭䄂䚻𩁹㼇龳𪆵䃸㟖䛷𦱆䅼𨚲𧏿䕭㣔𥒚䕡䔛䶉䱻䵶䗪㿈𤬏㙡䓞䒽䇭崾嵈嵖㷼㠏嶤嶹㠠㠸幂庽弥徃㤈㤔㤿㥍惗愽峥㦉憷憹懏㦸戬抐拥挘㧸嚱"],["8da1","㨃揢揻搇摚㩋擀崕嘡龟㪗斆㪽旿晓㫲暒㬢朖㭂枤栀㭘桊梄㭲㭱㭻椉楃牜楤榟榅㮼槖㯝橥橴橱檂㯬檙㯲檫檵櫔櫶殁毁毪汵沪㳋洂洆洦涁㳯涤涱渕渘温溆𨧀溻滢滚齿滨滩漤漴㵆𣽁澁澾㵪㵵熷岙㶊瀬㶑灐灔灯灿炉𠌥䏁㗱𠻘"],["8e40","𣻗垾𦻓焾𥟠㙎榢𨯩孴穉𥣡𩓙穥穽𥦬窻窰竂竃燑𦒍䇊竚竝竪䇯咲𥰁笋筕笩𥌎𥳾箢筯莜𥮴𦱿篐萡箒箸𥴠㶭𥱥蒒篺簆簵𥳁籄粃𤢂粦晽𤕸糉糇糦籴糳糵糎"],["8ea1","繧䔝𦹄絝𦻖璍綉綫焵綳緒𤁗𦀩緤㴓緵𡟹緥𨍭縝𦄡𦅚繮纒䌫鑬縧罀罁罇礶𦋐駡羗𦍑羣𡙡𠁨䕜𣝦䔃𨌺翺𦒉者耈耝耨耯𪂇𦳃耻耼聡𢜔䦉𦘦𣷣𦛨朥肧𨩈脇脚墰𢛶汿𦒘𤾸擧𡒊舘𡡞橓𤩥𤪕䑺舩𠬍𦩒𣵾俹𡓽蓢荢𦬊𤦧𣔰𡝳𣷸芪椛芳䇛"],["8f40","蕋苐茚𠸖𡞴㛁𣅽𣕚艻苢茘𣺋𦶣𦬅𦮗𣗎㶿茝嗬莅䔋𦶥莬菁菓㑾𦻔橗蕚㒖𦹂𢻯葘𥯤葱㷓䓤檧葊𣲵祘蒨𦮖𦹷𦹃蓞萏莑䒠蒓蓤𥲑䉀𥳀䕃蔴嫲𦺙䔧蕳䔖枿蘖"],["8fa1","𨘥𨘻藁𧂈蘂𡖂𧃍䕫䕪蘨㙈𡢢号𧎚虾蝱𪃸蟮𢰧螱蟚蠏噡虬桖䘏衅衆𧗠𣶹𧗤衞袜䙛袴袵揁装睷𧜏覇覊覦覩覧覼𨨥觧𧤤𧪽誜瞓釾誐𧩙竩𧬺𣾏䜓𧬸煼謌謟𥐰𥕥謿譌譍誩𤩺讐讛誯𡛟䘕衏貛𧵔𧶏貫㜥𧵓賖𧶘𧶽贒贃𡤐賛灜贑𤳉㻐起"],["9040","趩𨀂𡀔𤦊㭼𨆼𧄌竧躭躶軃鋔輙輭𨍥𨐒辥錃𪊟𠩐辳䤪𨧞𨔽𣶻廸𣉢迹𪀔𨚼𨔁𢌥㦀𦻗逷𨔼𧪾遡𨕬𨘋邨𨜓郄𨛦邮都酧㫰醩釄粬𨤳𡺉鈎沟鉁鉢𥖹銹𨫆𣲛𨬌𥗛"],["90a1","𠴱錬鍫𨫡𨯫炏嫃𨫢𨫥䥥鉄𨯬𨰹𨯿鍳鑛躼閅閦鐦閠濶䊹𢙺𨛘𡉼𣸮䧟氜陻隖䅬隣𦻕懚隶磵𨫠隽双䦡𦲸𠉴𦐐𩂯𩃥𤫑𡤕𣌊霱虂霶䨏䔽䖅𤫩灵孁霛靜𩇕靗孊𩇫靟鐥僐𣂷𣂼鞉鞟鞱鞾韀韒韠𥑬韮琜𩐳響韵𩐝𧥺䫑頴頳顋顦㬎𧅵㵑𠘰𤅜"],["9140","𥜆飊颷飈飇䫿𦴧𡛓喰飡飦飬鍸餹𤨩䭲𩡗𩤅駵騌騻騐驘𥜥㛄𩂱𩯕髠髢𩬅髴䰎鬔鬭𨘀倴鬴𦦨㣃𣁽魐魀𩴾婅𡡣鮎𤉋鰂鯿鰌𩹨鷔𩾷𪆒𪆫𪃡𪄣𪇟鵾鶃𪄴鸎梈"],["91a1","鷄𢅛𪆓𪈠𡤻𪈳鴹𪂹𪊴麐麕麞麢䴴麪麯𤍤黁㭠㧥㴝伲㞾𨰫鼂鼈䮖鐤𦶢鼗鼖鼹嚟嚊齅馸𩂋韲葿齢齩竜龎爖䮾𤥵𤦻煷𤧸𤍈𤩑玞𨯚𡣺禟𨥾𨸶鍩鏳𨩄鋬鎁鏋𨥬𤒹爗㻫睲穃烐𤑳𤏸煾𡟯炣𡢾𣖙㻇𡢅𥐯𡟸㜢𡛻𡠹㛡𡝴𡣑𥽋㜣𡛀坛𤨥𡏾𡊨"],["9240","𡏆𡒶蔃𣚦蔃葕𤦔𧅥𣸱𥕜𣻻𧁒䓴𣛮𩦝𦼦柹㜳㰕㷧塬𡤢栐䁗𣜿𤃡𤂋𤄏𦰡哋嚞𦚱嚒𠿟𠮨𠸍鏆𨬓鎜仸儫㠙𤐶亼𠑥𠍿佋侊𥙑婨𠆫𠏋㦙𠌊𠐔㐵伩𠋀𨺳𠉵諚𠈌亘"],["92a1","働儍侢伃𤨎𣺊佂倮偬傁俌俥偘僼兙兛兝兞湶𣖕𣸹𣺿浲𡢄𣺉冨凃𠗠䓝𠒣𠒒𠒑赺𨪜𠜎剙劤𠡳勡鍮䙺熌𤎌𠰠𤦬𡃤槑𠸝瑹㻞璙琔瑖玘䮎𤪼𤂍叐㖄爏𤃉喴𠍅响𠯆圝鉝雴鍦埝垍坿㘾壋媙𨩆𡛺𡝯𡜐娬妸銏婾嫏娒𥥆𡧳𡡡𤊕㛵洅瑃娡𥺃"],["9340","媁𨯗𠐓鏠璌𡌃焅䥲鐈𨧻鎽㞠尞岞幞幈𡦖𡥼𣫮廍孏𡤃𡤄㜁𡢠㛝𡛾㛓脪𨩇𡶺𣑲𨦨弌弎𡤧𡞫婫𡜻孄蘔𧗽衠恾𢡠𢘫忛㺸𢖯𢖾𩂈𦽳懀𠀾𠁆𢘛憙憘恵𢲛𢴇𤛔𩅍"],["93a1","摱𤙥𢭪㨩𢬢𣑐𩣪𢹸挷𪑛撶挱揑𤧣𢵧护𢲡搻敫楲㯴𣂎𣊭𤦉𣊫唍𣋠𡣙𩐿曎𣊉𣆳㫠䆐𥖄𨬢𥖏𡛼𥕛𥐥磮𣄃𡠪𣈴㑤𣈏𣆂𤋉暎𦴤晫䮓昰𧡰𡷫晣𣋒𣋡昞𥡲㣑𣠺𣞼㮙𣞢𣏾瓐㮖枏𤘪梶栞㯄檾㡣𣟕𤒇樳橒櫉欅𡤒攑梘橌㯗橺歗𣿀𣲚鎠鋲𨯪𨫋"],["9440","銉𨀞𨧜鑧涥漋𤧬浧𣽿㶏渄𤀼娽渊塇洤硂焻𤌚𤉶烱牐犇犔𤞏𤜥兹𤪤𠗫瑺𣻸𣙟𤩊𤤗𥿡㼆㺱𤫟𨰣𣼵悧㻳瓌琼鎇琷䒟𦷪䕑疃㽣𤳙𤴆㽘畕癳𪗆㬙瑨𨫌𤦫𤦎㫻"],["94a1","㷍𤩎㻿𤧅𤣳釺圲鍂𨫣𡡤僟𥈡𥇧睸𣈲眎眏睻𤚗𣞁㩞𤣰琸璛㺿𤪺𤫇䃈𤪖𦆮錇𥖁砞碍碈磒珐祙𧝁𥛣䄎禛蒖禥樭𣻺稺秴䅮𡛦䄲鈵秱𠵌𤦌𠊙𣶺𡝮㖗啫㕰㚪𠇔𠰍竢婙𢛵𥪯𥪜娍𠉛磰娪𥯆竾䇹籝籭䈑𥮳𥺼𥺦糍𤧹𡞰粎籼粮檲緜縇緓罎𦉡"],["9540","𦅜𧭈綗𥺂䉪𦭵𠤖柖𠁎𣗏埄𦐒𦏸𤥢翝笧𠠬𥫩𥵃笌𥸎駦虅驣樜𣐿㧢𤧷𦖭騟𦖠蒀𧄧𦳑䓪脷䐂胆脉腂𦞴飃𦩂艢艥𦩑葓𦶧蘐𧈛媆䅿𡡀嬫𡢡嫤𡣘蚠蜨𣶏蠭𧐢娂"],["95a1","衮佅袇袿裦襥襍𥚃襔𧞅𧞄𨯵𨯙𨮜𨧹㺭蒣䛵䛏㟲訽訜𩑈彍鈫𤊄旔焩烄𡡅鵭貟賩𧷜妚矃姰䍮㛔踪躧𤰉輰轊䋴汘澻𢌡䢛潹溋𡟚鯩㚵𤤯邻邗啱䤆醻鐄𨩋䁢𨫼鐧𨰝𨰻蓥訫閙閧閗閖𨴴瑅㻂𤣿𤩂𤏪㻧𣈥随𨻧𨹦𨹥㻌𤧭𤩸𣿮琒瑫㻼靁𩂰"],["9640","桇䨝𩂓𥟟靝鍨𨦉𨰦𨬯𦎾銺嬑譩䤼珹𤈛鞛靱餸𠼦巁𨯅𤪲頟𩓚鋶𩗗釥䓀𨭐𤩧𨭤飜𨩅㼀鈪䤥萔餻饍𧬆㷽馛䭯馪驜𨭥𥣈檏騡嫾騯𩣱䮐𩥈馼䮽䮗鍽塲𡌂堢𤦸"],["96a1","𡓨硄𢜟𣶸棅㵽鑘㤧慐𢞁𢥫愇鱏鱓鱻鰵鰐魿鯏𩸭鮟𪇵𪃾鴡䲮𤄄鸘䲰鴌𪆴𪃭𪃳𩤯鶥蒽𦸒𦿟𦮂藼䔳𦶤𦺄𦷰萠藮𦸀𣟗𦁤秢𣖜𣙀䤭𤧞㵢鏛銾鍈𠊿碹鉷鑍俤㑀遤𥕝砽硔碶硋𡝗𣇉𤥁㚚佲濚濙瀞瀞吔𤆵垻壳垊鴖埗焴㒯𤆬燫𦱀𤾗嬨𡞵𨩉"],["9740","愌嫎娋䊼𤒈㜬䭻𨧼鎻鎸𡣖𠼝葲𦳀𡐓𤋺𢰦𤏁妔𣶷𦝁綨𦅛𦂤𤦹𤦋𨧺鋥珢㻩璴𨭣𡢟㻡𤪳櫘珳珻㻖𤨾𤪔𡟙𤩦𠎧𡐤𤧥瑈𤤖炥𤥶銄珦鍟𠓾錱𨫎𨨖鎆𨯧𥗕䤵𨪂煫"],["97a1","𤥃𠳿嚤𠘚𠯫𠲸唂秄𡟺緾𡛂𤩐𡡒䔮鐁㜊𨫀𤦭妰𡢿𡢃𧒄媡㛢𣵛㚰鉟婹𨪁𡡢鍴㳍𠪴䪖㦊僴㵩㵌𡎜煵䋻𨈘渏𩃤䓫浗𧹏灧沯㳖𣿭𣸭渂漌㵯𠏵畑㚼㓈䚀㻚䡱姄鉮䤾轁𨰜𦯀堒埈㛖𡑒烾𤍢𤩱𢿣𡊰𢎽梹楧𡎘𣓥𧯴𣛟𨪃𣟖𣏺𤲟樚𣚭𦲷萾䓟䓎"],["9840","𦴦𦵑𦲂𦿞漗𧄉茽𡜺菭𦲀𧁓𡟛妉媂𡞳婡婱𡤅𤇼㜭姯𡜼㛇熎鎐暚𤊥婮娫𤊓樫𣻹𧜶𤑛𤋊焝𤉙𨧡侰𦴨峂𤓎𧹍𤎽樌𤉖𡌄炦焳𤏩㶥泟勇𤩏繥姫崯㷳彜𤩝𡟟綤萦"],["98a1","咅𣫺𣌀𠈔坾𠣕𠘙㿥𡾞𪊶瀃𩅛嵰玏糓𨩙𩐠俈翧狍猐𧫴猸猹𥛶獁獈㺩𧬘遬燵𤣲珡臶㻊県㻑沢国琙琞琟㻢㻰㻴㻺瓓㼎㽓畂畭畲疍㽼痈痜㿀癍㿗癴㿜発𤽜熈嘣覀塩䀝睃䀹条䁅㗛瞘䁪䁯属瞾矋売砘点砜䂨砹硇硑硦葈𥔵礳栃礲䄃"],["9940","䄉禑禙辻稆込䅧窑䆲窼艹䇄竏竛䇏両筢筬筻簒簛䉠䉺类粜䊌粸䊔糭输烀𠳏総緔緐緽羮羴犟䎗耠耥笹耮耱联㷌垴炠肷胩䏭脌猪脎脒畠脔䐁㬹腖腙腚"],["99a1","䐓堺腼膄䐥膓䐭膥埯臁臤艔䒏芦艶苊苘苿䒰荗险榊萅烵葤惣蒈䔄蒾蓡蓸蔐蔸蕒䔻蕯蕰藠䕷虲蚒蚲蛯际螋䘆䘗袮裿褤襇覑𧥧訩訸誔誴豑賔賲贜䞘塟跃䟭仮踺嗘坔蹱嗵躰䠷軎転軤軭軲辷迁迊迌逳駄䢭飠鈓䤞鈨鉘鉫銱銮銿"],["9a40","鋣鋫鋳鋴鋽鍃鎄鎭䥅䥑麿鐗匁鐝鐭鐾䥪鑔鑹锭関䦧间阳䧥枠䨤靀䨵鞲韂噔䫤惨颹䬙飱塄餎餙冴餜餷饂饝饢䭰駅䮝騼鬏窃魩鮁鯝鯱鯴䱭鰠㝯𡯂鵉鰺"],["9aa1","黾噐鶓鶽鷀鷼银辶鹻麬麱麽黆铜黢黱黸竈齄𠂔𠊷𠎠椚铃妬𠓗塀铁㞹𠗕𠘕𠙶𡚺块煳𠫂𠫍𠮿呪吆𠯋咞𠯻𠰻𠱓𠱥𠱼惧𠲍噺𠲵𠳝𠳭𠵯𠶲𠷈楕鰯螥𠸄𠸎𠻗𠾐𠼭𠹳尠𠾼帋𡁜𡁏𡁶朞𡁻𡂈𡂖㙇𡂿𡃓𡄯𡄻卤蒭𡋣𡍵𡌶讁𡕷𡘙𡟃𡟇乸炻𡠭𡥪"],["9b40","𡨭𡩅𡰪𡱰𡲬𡻈拃𡻕𡼕熘桕𢁅槩㛈𢉼𢏗𢏺𢜪𢡱𢥏苽𢥧𢦓𢫕覥𢫨辠𢬎鞸𢬿顇骽𢱌"],["9b62","𢲈𢲷𥯨𢴈𢴒𢶷𢶕𢹂𢽴𢿌𣀳𣁦𣌟𣏞徱晈暿𧩹𣕧𣗳爁𤦺矗𣘚𣜖纇𠍆墵朎"],["9ba1","椘𣪧𧙗𥿢𣸑𣺹𧗾𢂚䣐䪸𤄙𨪚𤋮𤌍𤀻𤌴𤎖𤩅𠗊凒𠘑妟𡺨㮾𣳿𤐄𤓖垈𤙴㦛𤜯𨗨𩧉㝢𢇃譞𨭎駖𤠒𤣻𤨕爉𤫀𠱸奥𤺥𤾆𠝹軚𥀬劏圿煱𥊙𥐙𣽊𤪧喼𥑆𥑮𦭒釔㑳𥔿𧘲𥕞䜘𥕢𥕦𥟇𤤿𥡝偦㓻𣏌惞𥤃䝼𨥈𥪮𥮉𥰆𡶐垡煑澶𦄂𧰒遖𦆲𤾚譢𦐂𦑊"],["9c40","嵛𦯷輶𦒄𡤜諪𤧶𦒈𣿯𦔒䯀𦖿𦚵𢜛鑥𥟡憕娧晉侻嚹𤔡𦛼乪𤤴陖涏𦲽㘘襷𦞙𦡮𦐑𦡞營𦣇筂𩃀𠨑𦤦鄄𦤹穅鷰𦧺騦𦨭㙟𦑩𠀡禃𦨴𦭛崬𣔙菏𦮝䛐𦲤画补𦶮墶"],["9ca1","㜜𢖍𧁋𧇍㱔𧊀𧊅銁𢅺𧊋錰𧋦𤧐氹钟𧑐𠻸蠧裵𢤦𨑳𡞱溸𤨪𡠠㦤㚹尐秣䔿暶𩲭𩢤襃𧟌𧡘囖䃟𡘊㦡𣜯𨃨𡏅熭荦𧧝𩆨婧䲷𧂯𨦫𧧽𧨊𧬋𧵦𤅺筃祾𨀉澵𪋟樃𨌘厢𦸇鎿栶靝𨅯𨀣𦦵𡏭𣈯𨁈嶅𨰰𨂃圕頣𨥉嶫𤦈斾槕叒𤪥𣾁㰑朶𨂐𨃴𨄮𡾡𨅏"],["9d40","𨆉𨆯𨈚𨌆𨌯𨎊㗊𨑨𨚪䣺揦𨥖砈鉕𨦸䏲𨧧䏟𨧨𨭆𨯔姸𨰉輋𨿅𩃬筑𩄐𩄼㷷𩅞𤫊运犏嚋𩓧𩗩𩖰𩖸𩜲𩣑𩥉𩥪𩧃𩨨𩬎𩵚𩶛纟𩻸𩼣䲤镇𪊓熢𪋿䶑递𪗋䶜𠲜达嗁"],["9da1","辺𢒰边𤪓䔉繿潖檱仪㓤𨬬𧢝㜺躀𡟵𨀤𨭬𨮙𧨾𦚯㷫𧙕𣲷𥘵𥥖亚𥺁𦉘嚿𠹭踎孭𣺈𤲞揞拐𡟶𡡻攰嘭𥱊吚𥌑㷆𩶘䱽嘢嘞罉𥻘奵𣵀蝰东𠿪𠵉𣚺脗鵞贘瘻鱅癎瞹鍅吲腈苷嘥脲萘肽嗪祢噃吖𠺝㗎嘅嗱曱𨋢㘭甴嗰喺咗啲𠱁𠲖廐𥅈𠹶𢱢"],["9e40","𠺢麫絚嗞𡁵抝靭咔賍燶酶揼掹揾啩𢭃鱲𢺳冚㓟𠶧冧呍唞唓癦踭𦢊疱肶蠄螆裇膶萜𡃁䓬猄𤜆宐茋𦢓噻𢛴𧴯𤆣𧵳𦻐𧊶酰𡇙鈈𣳼𪚩𠺬𠻹牦𡲢䝎𤿂𧿹𠿫䃺"],["9ea1","鱝攟𢶠䣳𤟠𩵼𠿬𠸊恢𧖣𠿭"],["9ead","𦁈𡆇熣纎鵐业丄㕷嬍沲卧㚬㧜卽㚥𤘘墚𤭮舭呋垪𥪕𠥹"],["9ec5","㩒𢑥獴𩺬䴉鯭𣳾𩼰䱛𤾩𩖞𩿞葜𣶶𧊲𦞳𣜠挮紥𣻷𣸬㨪逈勌㹴㙺䗩𠒎癀嫰𠺶硺𧼮墧䂿噼鮋嵴癔𪐴麅䳡痹㟻愙𣃚𤏲"],["9ef5","噝𡊩垧𤥣𩸆刴𧂮㖭汊鵼"],["9f40","籖鬹埞𡝬屓擓𩓐𦌵𧅤蚭𠴨𦴢𤫢𠵱"],["9f4f","凾𡼏嶎霃𡷑麁遌笟鬂峑箣扨挵髿篏鬪籾鬮籂粆鰕篼鬉鼗鰛𤤾齚啳寃俽麘俲剠㸆勑坧偖妷帒韈鶫轜呩鞴饀鞺匬愰"],["9fa1","椬叚鰊鴂䰻陁榀傦畆𡝭駚剳"],["9fae","酙隁酜"],["9fb2","酑𨺗捿𦴣櫊嘑醎畺抅𠏼獏籰𥰡𣳽"],["9fc1","𤤙盖鮝个𠳔莾衂"],["9fc9","届槀僭坺刟巵从氱𠇲伹咜哚劚趂㗾弌㗳"],["9fdb","歒酼龥鮗頮颴骺麨麄煺笔"],["9fe7","毺蠘罸"],["9feb","嘠𪙊蹷齓"],["9ff0","跔蹏鸜踁抂𨍽踨蹵竓𤩷稾磘泪詧瘇"],["a040","𨩚鼦泎蟖痃𪊲硓咢贌狢獱謭猂瓱賫𤪻蘯徺袠䒷"],["a055","𡠻𦸅"],["a058","詾𢔛"],["a05b","惽癧髗鵄鍮鮏蟵"],["a063","蠏賷猬霡鮰㗖犲䰇籑饊𦅙慙䰄麖慽"],["a073","坟慯抦戹拎㩜懢厪𣏵捤栂㗒"],["a0a1","嵗𨯂迚𨸹"],["a0a6","僙𡵆礆匲阸𠼻䁥"],["a0ae","矾"],["a0b0","糂𥼚糚稭聦聣絍甅瓲覔舚朌聢𧒆聛瓰脃眤覉𦟌畓𦻑螩蟎臈螌詉貭譃眫瓸蓚㘵榲趦"],["a0d4","覩瑨涹蟁𤀑瓧㷛煶悤憜㳑煢恷"],["a0e2","罱𨬭牐惩䭾删㰘𣳇𥻗𧙖𥔱𡥄𡋾𩤃𦷜𧂭峁𦆭𨨏𣙷𠃮𦡆𤼎䕢嬟𦍌齐麦𦉫"],["a3c0","␀",31,"␡"],["c6a1","①",9,"⑴",9,"ⅰ",9,"丶丿亅亠冂冖冫勹匸卩厶夊宀巛⼳广廴彐彡攴无疒癶辵隶¨ˆヽヾゝゞ〃仝々〆〇ー[]✽ぁ",23],["c740","す",58,"ァアィイ"],["c7a1","ゥ",81,"А",5,"ЁЖ",4],["c840","Л",26,"ёж",25,"⇧↸↹㇏𠃌乚𠂊刂䒑"],["c8a1","龰冈龱𧘇"],["c8cd","¬¦'"㈱№℡゛゜⺀⺄⺆⺇⺈⺊⺌⺍⺕⺜⺝⺥⺧⺪⺬⺮⺶⺼⺾⻆⻊⻌⻍⻏⻖⻗⻞⻣"],["c8f5","ʃɐɛɔɵœøŋʊɪ"],["f9fe","■"],["fa40","𠕇鋛𠗟𣿅蕌䊵珯况㙉𤥂𨧤鍄𡧛苮𣳈砼杄拟𤤳𨦪𠊠𦮳𡌅侫𢓭倈𦴩𧪄𣘀𤪱𢔓倩𠍾徤𠎀𠍇滛𠐟偽儁㑺儎顬㝃萖𤦤𠒇兠𣎴兪𠯿𢃼𠋥𢔰𠖎𣈳𡦃宂蝽𠖳𣲙冲冸"],["faa1","鴴凉减凑㳜凓𤪦决凢卂凭菍椾𣜭彻刋刦刼劵剗劔効勅簕蕂勠蘍𦬓包𨫞啉滙𣾀𠥔𣿬匳卄𠯢泋𡜦栛珕恊㺪㣌𡛨燝䒢卭却𨚫卾卿𡖖𡘓矦厓𨪛厠厫厮玧𥝲㽙玜叁叅汉义埾叙㪫𠮏叠𣿫𢶣叶𠱷吓灹唫晗浛呭𦭓𠵴啝咏咤䞦𡜍𠻝㶴𠵍"],["fb40","𨦼𢚘啇䳭启琗喆喩嘅𡣗𤀺䕒𤐵暳𡂴嘷曍𣊊暤暭噍噏磱囱鞇叾圀囯园𨭦㘣𡉏坆𤆥汮炋坂㚱𦱾埦𡐖堃𡑔𤍣堦𤯵塜墪㕡壠壜𡈼壻寿坃𪅐𤉸鏓㖡够梦㛃湙"],["fba1","𡘾娤啓𡚒蔅姉𠵎𦲁𦴪𡟜姙𡟻𡞲𦶦浱𡠨𡛕姹𦹅媫婣㛦𤦩婷㜈媖瑥嫓𦾡𢕔㶅𡤑㜲𡚸広勐孶斈孼𧨎䀄䡝𠈄寕慠𡨴𥧌𠖥寳宝䴐尅𡭄尓珎尔𡲥𦬨屉䣝岅峩峯嶋𡷹𡸷崐崘嵆𡺤岺巗苼㠭𤤁𢁉𢅳芇㠶㯂帮檊幵幺𤒼𠳓厦亷廐厨𡝱帉廴𨒂"],["fc40","廹廻㢠廼栾鐛弍𠇁弢㫞䢮𡌺强𦢈𢏐彘𢑱彣鞽𦹮彲鍀𨨶徧嶶㵟𥉐𡽪𧃸𢙨釖𠊞𨨩怱暅𡡷㥣㷇㘹垐𢞴祱㹀悞悤悳𤦂𤦏𧩓璤僡媠慤萤慂慈𦻒憁凴𠙖憇宪𣾷"],["fca1","𢡟懓𨮝𩥝懐㤲𢦀𢣁怣慜攞掋𠄘担𡝰拕𢸍捬𤧟㨗搸揸𡎎𡟼撐澊𢸶頔𤂌𥜝擡擥鑻㩦携㩗敍漖𤨨𤨣斅敭敟𣁾斵𤥀䬷旑䃘𡠩无旣忟𣐀昘𣇷𣇸晄𣆤𣆥晋𠹵晧𥇦晳晴𡸽𣈱𨗴𣇈𥌓矅𢣷馤朂𤎜𤨡㬫槺𣟂杞杧杢𤇍𩃭柗䓩栢湐鈼栁𣏦𦶠桝"],["fd40","𣑯槡樋𨫟楳棃𣗍椁椀㴲㨁𣘼㮀枬楡𨩊䋼椶榘㮡𠏉荣傐槹𣙙𢄪橅𣜃檝㯳枱櫈𩆜㰍欝𠤣惞欵歴𢟍溵𣫛𠎵𡥘㝀吡𣭚毡𣻼毜氷𢒋𤣱𦭑汚舦汹𣶼䓅𣶽𤆤𤤌𤤀"],["fda1","𣳉㛥㳫𠴲鮃𣇹𢒑羏样𦴥𦶡𦷫涖浜湼漄𤥿𤂅𦹲蔳𦽴凇沜渝萮𨬡港𣸯瑓𣾂秌湏媑𣁋濸㜍澝𣸰滺𡒗𤀽䕕鏰潄潜㵎潴𩅰㴻澟𤅄濓𤂑𤅕𤀹𣿰𣾴𤄿凟𤅖𤅗𤅀𦇝灋灾炧炁烌烕烖烟䄄㷨熴熖𤉷焫煅媈煊煮岜𤍥煏鍢𤋁焬𤑚𤨧𤨢熺𨯨炽爎"],["fe40","鑂爕夑鑃爤鍁𥘅爮牀𤥴梽牕牗㹕𣁄栍漽犂猪猫𤠣𨠫䣭𨠄猨献珏玪𠰺𦨮珉瑉𤇢𡛧𤨤昣㛅𤦷𤦍𤧻珷琕椃𤨦琹𠗃㻗瑜𢢭瑠𨺲瑇珤瑶莹瑬㜰瑴鏱樬璂䥓𤪌"],["fea1","𤅟𤩹𨮏孆𨰃𡢞瓈𡦈甎瓩甞𨻙𡩋寗𨺬鎅畍畊畧畮𤾂㼄𤴓疎瑝疞疴瘂瘬癑癏癯癶𦏵皐臯㟸𦤑𦤎皡皥皷盌𦾟葢𥂝𥅽𡸜眞眦着撯𥈠睘𣊬瞯𨥤𨥨𡛁矴砉𡍶𤨒棊碯磇磓隥礮𥗠磗礴碱𧘌辸袄𨬫𦂃𢘜禆褀椂禀𥡗禝𧬹礼禩渪𧄦㺨秆𩄍秔"]]'); 81943 81944 /***/ }), 81945 81946 /***/ 13336: 81947 /***/ ((module) => { 81948 81949 "use strict"; 81950 module.exports = JSON.parse('[["0","\\u0000",127,"€"],["8140","丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪",5,"乲乴",9,"乿",6,"亇亊"],["8180","亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂",6,"伋伌伒",4,"伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾",4,"佄佅佇",5,"佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢"],["8240","侤侫侭侰",4,"侶",8,"俀俁係俆俇俈俉俋俌俍俒",4,"俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿",11],["8280","個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯",10,"倻倽倿偀偁偂偄偅偆偉偊偋偍偐",4,"偖偗偘偙偛偝",7,"偦",5,"偭",8,"偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎",20,"傤傦傪傫傭",4,"傳",6,"傼"],["8340","傽",17,"僐",5,"僗僘僙僛",10,"僨僩僪僫僯僰僱僲僴僶",4,"僼",9,"儈"],["8380","儉儊儌",5,"儓",13,"儢",28,"兂兇兊兌兎兏児兒兓兗兘兙兛兝",4,"兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦",4,"冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒",5],["8440","凘凙凚凜凞凟凢凣凥",5,"凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄",5,"剋剎剏剒剓剕剗剘"],["8480","剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳",9,"剾劀劃",4,"劉",6,"劑劒劔",6,"劜劤劥劦劧劮劯劰労",9,"勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務",5,"勠勡勢勣勥",10,"勱",7,"勻勼勽匁匂匃匄匇匉匊匋匌匎"],["8540","匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯",9,"匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏"],["8580","厐",4,"厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯",6,"厷厸厹厺厼厽厾叀參",4,"収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝",4,"呣呥呧呩",7,"呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡"],["8640","咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠",4,"哫哬哯哰哱哴",5,"哻哾唀唂唃唄唅唈唊",4,"唒唓唕",5,"唜唝唞唟唡唥唦"],["8680","唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋",4,"啑啒啓啔啗",4,"啝啞啟啠啢啣啨啩啫啯",5,"啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠",6,"喨",8,"喲喴営喸喺喼喿",4,"嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗",4,"嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸",4,"嗿嘂嘃嘄嘅"],["8740","嘆嘇嘊嘋嘍嘐",7,"嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀",11,"噏",4,"噕噖噚噛噝",4],["8780","噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽",7,"嚇",6,"嚐嚑嚒嚔",14,"嚤",10,"嚰",6,"嚸嚹嚺嚻嚽",12,"囋",8,"囕囖囘囙囜団囥",5,"囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國",6],["8840","園",9,"圝圞圠圡圢圤圥圦圧圫圱圲圴",4,"圼圽圿坁坃坄坅坆坈坉坋坒",4,"坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀"],["8880","垁垇垈垉垊垍",4,"垔",6,"垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹",8,"埄",6,"埌埍埐埑埓埖埗埛埜埞埡埢埣埥",7,"埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥",4,"堫",4,"報堲堳場堶",7],["8940","堾",5,"塅",6,"塎塏塐塒塓塕塖塗塙",4,"塟",5,"塦",4,"塭",16,"塿墂墄墆墇墈墊墋墌"],["8980","墍",4,"墔",4,"墛墜墝墠",7,"墪",17,"墽墾墿壀壂壃壄壆",10,"壒壓壔壖",13,"壥",5,"壭壯壱売壴壵壷壸壺",7,"夃夅夆夈",4,"夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻"],["8a40","夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛",4,"奡奣奤奦",12,"奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦"],["8a80","妧妬妭妰妱妳",5,"妺妼妽妿",6,"姇姈姉姌姍姎姏姕姖姙姛姞",4,"姤姦姧姩姪姫姭",11,"姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪",6,"娳娵娷",4,"娽娾娿婁",4,"婇婈婋",9,"婖婗婘婙婛",5],["8b40","婡婣婤婥婦婨婩婫",8,"婸婹婻婼婽婾媀",17,"媓",6,"媜",13,"媫媬"],["8b80","媭",4,"媴媶媷媹",4,"媿嫀嫃",5,"嫊嫋嫍",4,"嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬",4,"嫲",22,"嬊",11,"嬘",25,"嬳嬵嬶嬸",7,"孁",6],["8c40","孈",7,"孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏"],["8c80","寑寔",8,"寠寢寣實寧審",4,"寯寱",6,"寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧",6,"屰屲",6,"屻屼屽屾岀岃",4,"岉岊岋岎岏岒岓岕岝",4,"岤",4],["8d40","岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅",5,"峌",5,"峓",5,"峚",6,"峢峣峧峩峫峬峮峯峱",9,"峼",4],["8d80","崁崄崅崈",5,"崏",4,"崕崗崘崙崚崜崝崟",4,"崥崨崪崫崬崯",4,"崵",7,"崿",7,"嵈嵉嵍",10,"嵙嵚嵜嵞",10,"嵪嵭嵮嵰嵱嵲嵳嵵",12,"嶃",21,"嶚嶛嶜嶞嶟嶠"],["8e40","嶡",21,"嶸",12,"巆",6,"巎",12,"巜巟巠巣巤巪巬巭"],["8e80","巰巵巶巸",4,"巿帀帄帇帉帊帋帍帎帒帓帗帞",7,"帨",4,"帯帰帲",4,"帹帺帾帿幀幁幃幆",5,"幍",6,"幖",4,"幜幝幟幠幣",14,"幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨",4,"庮",4,"庴庺庻庼庽庿",6],["8f40","廆廇廈廋",5,"廔廕廗廘廙廚廜",11,"廩廫",8,"廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤"],["8f80","弨弫弬弮弰弲",6,"弻弽弾弿彁",14,"彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢",5,"復徫徬徯",5,"徶徸徹徺徻徾",4,"忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇"],["9040","怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰",4,"怶",4,"怽怾恀恄",6,"恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀"],["9080","悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽",7,"惇惈惉惌",4,"惒惓惔惖惗惙惛惞惡",4,"惪惱惲惵惷惸惻",4,"愂愃愄愅愇愊愋愌愐",4,"愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬",18,"慀",6],["9140","慇慉態慍慏慐慒慓慔慖",6,"慞慟慠慡慣慤慥慦慩",6,"慱慲慳慴慶慸",18,"憌憍憏",4,"憕"],["9180","憖",6,"憞",8,"憪憫憭",9,"憸",5,"憿懀懁懃",4,"應懌",4,"懓懕",16,"懧",13,"懶",8,"戀",5,"戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸",4,"扂扄扅扆扊"],["9240","扏扐払扖扗扙扚扜",6,"扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋",5,"抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁"],["9280","拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳",5,"挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖",7,"捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙",6,"採掤掦掫掯掱掲掵掶掹掻掽掿揀"],["9340","揁揂揃揅揇揈揊揋揌揑揓揔揕揗",6,"揟揢揤",4,"揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆",4,"損搎搑搒搕",5,"搝搟搢搣搤"],["9380","搥搧搨搩搫搮",5,"搵",4,"搻搼搾摀摂摃摉摋",6,"摓摕摖摗摙",4,"摟",7,"摨摪摫摬摮",9,"摻",6,"撃撆撈",8,"撓撔撗撘撚撛撜撝撟",4,"撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆",6,"擏擑擓擔擕擖擙據"],["9440","擛擜擝擟擠擡擣擥擧",24,"攁",7,"攊",7,"攓",4,"攙",8],["9480","攢攣攤攦",4,"攬攭攰攱攲攳攷攺攼攽敀",4,"敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數",14,"斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱",7,"斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘",7,"旡旣旤旪旫"],["9540","旲旳旴旵旸旹旻",4,"昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷",4,"昽昿晀時晄",6,"晍晎晐晑晘"],["9580","晙晛晜晝晞晠晢晣晥晧晩",4,"晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘",4,"暞",8,"暩",4,"暯",4,"暵暶暷暸暺暻暼暽暿",25,"曚曞",7,"曧曨曪",5,"曱曵曶書曺曻曽朁朂會"],["9640","朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠",5,"朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗",4,"杝杢杣杤杦杧杫杬杮東杴杶"],["9680","杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹",7,"柂柅",9,"柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵",7,"柾栁栂栃栄栆栍栐栒栔栕栘",4,"栞栟栠栢",6,"栫",6,"栴栵栶栺栻栿桇桋桍桏桒桖",5],["9740","桜桝桞桟桪桬",7,"桵桸",8,"梂梄梇",7,"梐梑梒梔梕梖梘",9,"梣梤梥梩梪梫梬梮梱梲梴梶梷梸"],["9780","梹",6,"棁棃",5,"棊棌棎棏棐棑棓棔棖棗棙棛",4,"棡棢棤",9,"棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆",4,"椌椏椑椓",11,"椡椢椣椥",7,"椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃",16,"楕楖楘楙楛楜楟"],["9840","楡楢楤楥楧楨楩楪楬業楯楰楲",4,"楺楻楽楾楿榁榃榅榊榋榌榎",5,"榖榗榙榚榝",9,"榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽"],["9880","榾榿槀槂",7,"構槍槏槑槒槓槕",5,"槜槝槞槡",11,"槮槯槰槱槳",9,"槾樀",9,"樋",11,"標",5,"樠樢",5,"権樫樬樭樮樰樲樳樴樶",6,"樿",4,"橅橆橈",7,"橑",6,"橚"],["9940","橜",4,"橢橣橤橦",10,"橲",6,"橺橻橽橾橿檁檂檃檅",8,"檏檒",4,"檘",7,"檡",5],["9980","檧檨檪檭",114,"欥欦欨",6],["9a40","欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍",11,"歚",7,"歨歩歫",13,"歺歽歾歿殀殅殈"],["9a80","殌殎殏殐殑殔殕殗殘殙殜",4,"殢",7,"殫",7,"殶殸",6,"毀毃毄毆",4,"毌毎毐毑毘毚毜",4,"毢",7,"毬毭毮毰毱毲毴毶毷毸毺毻毼毾",6,"氈",4,"氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋",4,"汑汒汓汖汘"],["9b40","汙汚汢汣汥汦汧汫",4,"汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘"],["9b80","泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟",5,"洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽",4,"涃涄涆涇涊涋涍涏涐涒涖",4,"涜涢涥涬涭涰涱涳涴涶涷涹",5,"淁淂淃淈淉淊"],["9c40","淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽",7,"渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵"],["9c80","渶渷渹渻",7,"湅",7,"湏湐湑湒湕湗湙湚湜湝湞湠",10,"湬湭湯",14,"満溁溂溄溇溈溊",4,"溑",6,"溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪",5],["9d40","滰滱滲滳滵滶滷滸滺",7,"漃漄漅漇漈漊",4,"漐漑漒漖",9,"漡漢漣漥漦漧漨漬漮漰漲漴漵漷",6,"漿潀潁潂"],["9d80","潃潄潅潈潉潊潌潎",9,"潙潚潛潝潟潠潡潣潤潥潧",5,"潯潰潱潳潵潶潷潹潻潽",6,"澅澆澇澊澋澏",12,"澝澞澟澠澢",4,"澨",10,"澴澵澷澸澺",5,"濁濃",5,"濊",6,"濓",10,"濟濢濣濤濥"],["9e40","濦",7,"濰",32,"瀒",7,"瀜",6,"瀤",6],["9e80","瀫",9,"瀶瀷瀸瀺",17,"灍灎灐",13,"灟",11,"灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞",12,"炰炲炴炵炶為炾炿烄烅烆烇烉烋",12,"烚"],["9f40","烜烝烞烠烡烢烣烥烪烮烰",6,"烸烺烻烼烾",10,"焋",4,"焑焒焔焗焛",10,"焧",7,"焲焳焴"],["9f80","焵焷",13,"煆煇煈煉煋煍煏",12,"煝煟",4,"煥煩",4,"煯煰煱煴煵煶煷煹煻煼煾",5,"熅",4,"熋熌熍熎熐熑熒熓熕熖熗熚",4,"熡",6,"熩熪熫熭",5,"熴熶熷熸熺",8,"燄",9,"燏",4],["a040","燖",9,"燡燢燣燤燦燨",5,"燯",9,"燺",11,"爇",19],["a080","爛爜爞",9,"爩爫爭爮爯爲爳爴爺爼爾牀",6,"牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅",4,"犌犎犐犑犓",11,"犠",11,"犮犱犲犳犵犺",6,"狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛"],["a1a1"," 、。·ˉˇ¨〃々—~‖…‘’“”〔〕〈",7,"〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓"],["a2a1","ⅰ",9],["a2b1","⒈",19,"⑴",19,"①",9],["a2e5","㈠",9],["a2f1","Ⅰ",11],["a3a1","!"#¥%",88," ̄"],["a4a1","ぁ",82],["a5a1","ァ",85],["a6a1","Α",16,"Σ",6],["a6c1","α",16,"σ",6],["a6e0","︵︶︹︺︿﹀︽︾﹁﹂﹃﹄"],["a6ee","︻︼︷︸︱"],["a6f4","︳︴"],["a7a1","А",5,"ЁЖ",25],["a7d1","а",5,"ёж",25],["a840","ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═",35,"▁",6],["a880","█",7,"▓▔▕▼▽◢◣◤◥☉⊕〒〝〞"],["a8a1","āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ"],["a8bd","ńň"],["a8c0","ɡ"],["a8c5","ㄅ",36],["a940","〡",8,"㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰¬¦"],["a959","℡㈱"],["a95c","‐"],["a960","ー゛゜ヽヾ〆ゝゞ﹉",9,"﹔﹕﹖﹗﹙",8],["a980","﹢",4,"﹨﹩﹪﹫"],["a996","〇"],["a9a4","─",75],["aa40","狜狝狟狢",5,"狪狫狵狶狹狽狾狿猀猂猄",5,"猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀",8],["aa80","獉獊獋獌獎獏獑獓獔獕獖獘",7,"獡",10,"獮獰獱"],["ab40","獲",11,"獿",4,"玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣",5,"玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃",4],["ab80","珋珌珎珒",6,"珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳",4],["ac40","珸",10,"琄琇琈琋琌琍琎琑",8,"琜",5,"琣琤琧琩琫琭琯琱琲琷",4,"琽琾琿瑀瑂",11],["ac80","瑎",6,"瑖瑘瑝瑠",12,"瑮瑯瑱",4,"瑸瑹瑺"],["ad40","瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑",10,"璝璟",7,"璪",15,"璻",12],["ad80","瓈",9,"瓓",8,"瓝瓟瓡瓥瓧",6,"瓰瓱瓲"],["ae40","瓳瓵瓸",6,"甀甁甂甃甅",7,"甎甐甒甔甕甖甗甛甝甞甠",4,"甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘"],["ae80","畝",7,"畧畨畩畫",6,"畳畵當畷畺",4,"疀疁疂疄疅疇"],["af40","疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦",4,"疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇"],["af80","瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄"],["b040","癅",6,"癎",5,"癕癗",4,"癝癟癠癡癢癤",6,"癬癭癮癰",7,"癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛"],["b080","皜",7,"皥",8,"皯皰皳皵",9,"盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥"],["b140","盄盇盉盋盌盓盕盙盚盜盝盞盠",4,"盦",7,"盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎",10,"眛眜眝眞眡眣眤眥眧眪眫"],["b180","眬眮眰",4,"眹眻眽眾眿睂睄睅睆睈",7,"睒",7,"睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳"],["b240","睝睞睟睠睤睧睩睪睭",11,"睺睻睼瞁瞂瞃瞆",5,"瞏瞐瞓",11,"瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶",4],["b280","瞼瞾矀",12,"矎",8,"矘矙矚矝",4,"矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖"],["b340","矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃",5,"砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚"],["b380","硛硜硞",11,"硯",7,"硸硹硺硻硽",6,"场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚"],["b440","碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨",7,"碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚",9],["b480","磤磥磦磧磩磪磫磭",4,"磳磵磶磸磹磻",5,"礂礃礄礆",6,"础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮"],["b540","礍",5,"礔",9,"礟",4,"礥",14,"礵",4,"礽礿祂祃祄祅祇祊",8,"祔祕祘祙祡祣"],["b580","祤祦祩祪祫祬祮祰",6,"祹祻",4,"禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠"],["b640","禓",6,"禛",11,"禨",10,"禴",4,"禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙",5,"秠秡秢秥秨秪"],["b680","秬秮秱",6,"秹秺秼秾秿稁稄稅稇稈稉稊稌稏",4,"稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二"],["b740","稝稟稡稢稤",14,"稴稵稶稸稺稾穀",5,"穇",9,"穒",4,"穘",16],["b780","穩",6,"穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服"],["b840","窣窤窧窩窪窫窮",4,"窴",10,"竀",10,"竌",9,"竗竘竚竛竜竝竡竢竤竧",5,"竮竰竱竲竳"],["b880","竴",4,"竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹"],["b940","笯笰笲笴笵笶笷笹笻笽笿",5,"筆筈筊筍筎筓筕筗筙筜筞筟筡筣",10,"筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆",6,"箎箏"],["b980","箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹",7,"篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈"],["ba40","篅篈築篊篋篍篎篏篐篒篔",4,"篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲",4,"篸篹篺篻篽篿",7,"簈簉簊簍簎簐",5,"簗簘簙"],["ba80","簚",4,"簠",5,"簨簩簫",12,"簹",5,"籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖"],["bb40","籃",9,"籎",36,"籵",5,"籾",9],["bb80","粈粊",6,"粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴",4,"粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕"],["bc40","粿糀糂糃糄糆糉糋糎",6,"糘糚糛糝糞糡",6,"糩",5,"糰",7,"糹糺糼",13,"紋",5],["bc80","紑",14,"紡紣紤紥紦紨紩紪紬紭紮細",6,"肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件"],["bd40","紷",54,"絯",7],["bd80","絸",32,"健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸"],["be40","継",12,"綧",6,"綯",42],["be80","線",32,"尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻"],["bf40","緻",62],["bf80","縺縼",4,"繂",4,"繈",21,"俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀"],["c040","繞",35,"纃",23,"纜纝纞"],["c080","纮纴纻纼绖绤绬绹缊缐缞缷缹缻",6,"罃罆",9,"罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐"],["c140","罖罙罛罜罝罞罠罣",4,"罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂",7,"羋羍羏",4,"羕",4,"羛羜羠羢羣羥羦羨",6,"羱"],["c180","羳",4,"羺羻羾翀翂翃翄翆翇翈翉翋翍翏",4,"翖翗翙",5,"翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿"],["c240","翤翧翨翪翫翬翭翯翲翴",6,"翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫",5,"耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗"],["c280","聙聛",13,"聫",5,"聲",11,"隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫"],["c340","聾肁肂肅肈肊肍",5,"肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇",4,"胏",6,"胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋"],["c380","脌脕脗脙脛脜脝脟",12,"脭脮脰脳脴脵脷脹",4,"脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸"],["c440","腀",5,"腇腉腍腎腏腒腖腗腘腛",4,"腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃",4,"膉膋膌膍膎膐膒",5,"膙膚膞",4,"膤膥"],["c480","膧膩膫",7,"膴",5,"膼膽膾膿臄臅臇臈臉臋臍",6,"摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁"],["c540","臔",14,"臤臥臦臨臩臫臮",4,"臵",5,"臽臿舃與",4,"舎舏舑舓舕",5,"舝舠舤舥舦舧舩舮舲舺舼舽舿"],["c580","艀艁艂艃艅艆艈艊艌艍艎艐",7,"艙艛艜艝艞艠",7,"艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗"],["c640","艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸"],["c680","苺苼",4,"茊茋茍茐茒茓茖茘茙茝",9,"茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐"],["c740","茾茿荁荂荄荅荈荊",4,"荓荕",4,"荝荢荰",6,"荹荺荾",6,"莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡",6,"莬莭莮"],["c780","莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠"],["c840","菮華菳",4,"菺菻菼菾菿萀萂萅萇萈萉萊萐萒",5,"萙萚萛萞",5,"萩",7,"萲",5,"萹萺萻萾",7,"葇葈葉"],["c880","葊",6,"葒",4,"葘葝葞葟葠葢葤",4,"葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁"],["c940","葽",4,"蒃蒄蒅蒆蒊蒍蒏",7,"蒘蒚蒛蒝蒞蒟蒠蒢",12,"蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗"],["c980","蓘",4,"蓞蓡蓢蓤蓧",4,"蓭蓮蓯蓱",10,"蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳"],["ca40","蔃",8,"蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢",8,"蔭",9,"蔾",4,"蕄蕅蕆蕇蕋",10],["ca80","蕗蕘蕚蕛蕜蕝蕟",4,"蕥蕦蕧蕩",8,"蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱"],["cb40","薂薃薆薈",6,"薐",10,"薝",6,"薥薦薧薩薫薬薭薱",5,"薸薺",6,"藂",6,"藊",4,"藑藒"],["cb80","藔藖",5,"藝",6,"藥藦藧藨藪",14,"恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔"],["cc40","藹藺藼藽藾蘀",4,"蘆",10,"蘒蘓蘔蘕蘗",15,"蘨蘪",13,"蘹蘺蘻蘽蘾蘿虀"],["cc80","虁",11,"虒虓處",4,"虛虜虝號虠虡虣",7,"獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃"],["cd40","虭虯虰虲",6,"蚃",6,"蚎",4,"蚔蚖",5,"蚞",4,"蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻",4,"蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜"],["cd80","蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威"],["ce40","蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀",6,"蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚",5,"蝡蝢蝦",7,"蝯蝱蝲蝳蝵"],["ce80","蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎",4,"螔螕螖螘",6,"螠",4,"巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺"],["cf40","螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁",4,"蟇蟈蟉蟌",4,"蟔",6,"蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯",9],["cf80","蟺蟻蟼蟽蟿蠀蠁蠂蠄",5,"蠋",7,"蠔蠗蠘蠙蠚蠜",4,"蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓"],["d040","蠤",13,"蠳",5,"蠺蠻蠽蠾蠿衁衂衃衆",5,"衎",5,"衕衖衘衚",6,"衦衧衪衭衯衱衳衴衵衶衸衹衺"],["d080","衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗",4,"袝",4,"袣袥",5,"小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄"],["d140","袬袮袯袰袲",4,"袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚",4,"裠裡裦裧裩",6,"裲裵裶裷裺裻製裿褀褁褃",5],["d180","褉褋",4,"褑褔",4,"褜",4,"褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶"],["d240","褸",8,"襂襃襅",24,"襠",5,"襧",19,"襼"],["d280","襽襾覀覂覄覅覇",26,"摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐"],["d340","覢",30,"觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴",6],["d380","觻",4,"訁",5,"計",21,"印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉"],["d440","訞",31,"訿",8,"詉",21],["d480","詟",25,"詺",6,"浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧"],["d540","誁",7,"誋",7,"誔",46],["d580","諃",32,"铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政"],["d640","諤",34,"謈",27],["d680","謤謥謧",30,"帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑"],["d740","譆",31,"譧",4,"譭",25],["d780","讇",24,"讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座"],["d840","谸",8,"豂豃豄豅豈豊豋豍",7,"豖豗豘豙豛",5,"豣",6,"豬",6,"豴豵豶豷豻",6,"貃貄貆貇"],["d880","貈貋貍",6,"貕貖貗貙",20,"亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝"],["d940","貮",62],["d980","賭",32,"佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼"],["da40","贎",14,"贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸",8,"趂趃趆趇趈趉趌",4,"趒趓趕",9,"趠趡"],["da80","趢趤",12,"趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺"],["db40","跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾",6,"踆踇踈踋踍踎踐踑踒踓踕",7,"踠踡踤",4,"踫踭踰踲踳踴踶踷踸踻踼踾"],["db80","踿蹃蹅蹆蹌",4,"蹓",5,"蹚",11,"蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝"],["dc40","蹳蹵蹷",4,"蹽蹾躀躂躃躄躆躈",6,"躑躒躓躕",6,"躝躟",11,"躭躮躰躱躳",6,"躻",7],["dc80","軃",10,"軏",21,"堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥"],["dd40","軥",62],["dd80","輤",32,"荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺"],["de40","轅",32,"轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆"],["de80","迉",4,"迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖"],["df40","這逜連逤逥逧",5,"逰",4,"逷逹逺逽逿遀遃遅遆遈",4,"過達違遖遙遚遜",5,"遤遦遧適遪遫遬遯",4,"遶",6,"遾邁"],["df80","還邅邆邇邉邊邌",4,"邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼"],["e040","郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅",19,"鄚鄛鄜"],["e080","鄝鄟鄠鄡鄤",10,"鄰鄲",6,"鄺",8,"酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼"],["e140","酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀",4,"醆醈醊醎醏醓",6,"醜",5,"醤",5,"醫醬醰醱醲醳醶醷醸醹醻"],["e180","醼",10,"釈釋釐釒",9,"針",8,"帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺"],["e240","釦",62],["e280","鈥",32,"狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧",5,"饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂"],["e340","鉆",45,"鉵",16],["e380","銆",7,"銏",24,"恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾"],["e440","銨",5,"銯",24,"鋉",31],["e480","鋩",32,"洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑"],["e540","錊",51,"錿",10],["e580","鍊",31,"鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣"],["e640","鍬",34,"鎐",27],["e680","鎬",29,"鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩"],["e740","鏎",7,"鏗",54],["e780","鐎",32,"纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡",6,"缪缫缬缭缯",4,"缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬"],["e840","鐯",14,"鐿",43,"鑬鑭鑮鑯"],["e880","鑰",20,"钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹"],["e940","锧锳锽镃镈镋镕镚镠镮镴镵長",7,"門",42],["e980","閫",32,"椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋"],["ea40","闌",27,"闬闿阇阓阘阛阞阠阣",6,"阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗"],["ea80","陘陙陚陜陝陞陠陣陥陦陫陭",4,"陳陸",12,"隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰"],["eb40","隌階隑隒隓隕隖隚際隝",9,"隨",7,"隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖",9,"雡",6,"雫"],["eb80","雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗",4,"霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻"],["ec40","霡",8,"霫霬霮霯霱霳",4,"霺霻霼霽霿",18,"靔靕靗靘靚靜靝靟靣靤靦靧靨靪",7],["ec80","靲靵靷",4,"靽",7,"鞆",4,"鞌鞎鞏鞐鞓鞕鞖鞗鞙",4,"臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐"],["ed40","鞞鞟鞡鞢鞤",6,"鞬鞮鞰鞱鞳鞵",46],["ed80","韤韥韨韮",4,"韴韷",23,"怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨"],["ee40","頏",62],["ee80","顎",32,"睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶",4,"钼钽钿铄铈",6,"铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪"],["ef40","顯",5,"颋颎颒颕颙颣風",37,"飏飐飔飖飗飛飜飝飠",4],["ef80","飥飦飩",30,"铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒",4,"锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤",8,"镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔"],["f040","餈",4,"餎餏餑",28,"餯",26],["f080","饊",9,"饖",12,"饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨",4,"鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦",6,"鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙"],["f140","馌馎馚",10,"馦馧馩",47],["f180","駙",32,"瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃"],["f240","駺",62],["f280","騹",32,"颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒"],["f340","驚",17,"驲骃骉骍骎骔骕骙骦骩",6,"骲骳骴骵骹骻骽骾骿髃髄髆",4,"髍髎髏髐髒體髕髖髗髙髚髛髜"],["f380","髝髞髠髢髣髤髥髧髨髩髪髬髮髰",8,"髺髼",6,"鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋"],["f440","鬇鬉",5,"鬐鬑鬒鬔",10,"鬠鬡鬢鬤",10,"鬰鬱鬳",7,"鬽鬾鬿魀魆魊魋魌魎魐魒魓魕",5],["f480","魛",32,"簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤"],["f540","魼",62],["f580","鮻",32,"酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜"],["f640","鯜",62],["f680","鰛",32,"觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅",5,"龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞",5,"鲥",4,"鲫鲭鲮鲰",7,"鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋"],["f740","鰼",62],["f780","鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾",4,"鳈鳉鳑鳒鳚鳛鳠鳡鳌",4,"鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄"],["f840","鳣",62],["f880","鴢",32],["f940","鵃",62],["f980","鶂",32],["fa40","鶣",62],["fa80","鷢",32],["fb40","鸃",27,"鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴",9,"麀"],["fb80","麁麃麄麅麆麉麊麌",5,"麔",8,"麞麠",5,"麧麨麩麪"],["fc40","麫",8,"麵麶麷麹麺麼麿",4,"黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰",8,"黺黽黿",6],["fc80","鼆",4,"鼌鼏鼑鼒鼔鼕鼖鼘鼚",5,"鼡鼣",8,"鼭鼮鼰鼱"],["fd40","鼲",4,"鼸鼺鼼鼿",4,"齅",10,"齒",38],["fd80","齹",5,"龁龂龍",11,"龜龝龞龡",4,"郎凉秊裏隣"],["fe40","兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩"]]'); 81951 81952 /***/ }), 81953 81954 /***/ 77348: 81955 /***/ ((module) => { 81956 81957 "use strict"; 81958 module.exports = JSON.parse('[["0","\\u0000",127],["8141","갂갃갅갆갋",4,"갘갞갟갡갢갣갥",6,"갮갲갳갴"],["8161","갵갶갷갺갻갽갾갿걁",9,"걌걎",5,"걕"],["8181","걖걗걙걚걛걝",18,"걲걳걵걶걹걻",4,"겂겇겈겍겎겏겑겒겓겕",6,"겞겢",5,"겫겭겮겱",6,"겺겾겿곀곂곃곅곆곇곉곊곋곍",7,"곖곘",7,"곢곣곥곦곩곫곭곮곲곴곷",4,"곾곿괁괂괃괅괇",4,"괎괐괒괓"],["8241","괔괕괖괗괙괚괛괝괞괟괡",7,"괪괫괮",5],["8261","괶괷괹괺괻괽",6,"굆굈굊",5,"굑굒굓굕굖굗"],["8281","굙",7,"굢굤",7,"굮굯굱굲굷굸굹굺굾궀궃",4,"궊궋궍궎궏궑",10,"궞",5,"궥",17,"궸",7,"귂귃귅귆귇귉",6,"귒귔",7,"귝귞귟귡귢귣귥",18],["8341","귺귻귽귾긂",5,"긊긌긎",5,"긕",7],["8361","긝",18,"긲긳긵긶긹긻긼"],["8381","긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗",4,"깞깢깣깤깦깧깪깫깭깮깯깱",6,"깺깾",5,"꺆",5,"꺍",46,"꺿껁껂껃껅",6,"껎껒",5,"껚껛껝",8],["8441","껦껧껩껪껬껮",5,"껵껶껷껹껺껻껽",8],["8461","꼆꼉꼊꼋꼌꼎꼏꼑",18],["8481","꼤",7,"꼮꼯꼱꼳꼵",6,"꼾꽀꽄꽅꽆꽇꽊",5,"꽑",10,"꽞",5,"꽦",18,"꽺",5,"꾁꾂꾃꾅꾆꾇꾉",6,"꾒꾓꾔꾖",5,"꾝",26,"꾺꾻꾽꾾"],["8541","꾿꿁",5,"꿊꿌꿏",4,"꿕",6,"꿝",4],["8561","꿢",5,"꿪",5,"꿲꿳꿵꿶꿷꿹",6,"뀂뀃"],["8581","뀅",6,"뀍뀎뀏뀑뀒뀓뀕",6,"뀞",9,"뀩",26,"끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞",29,"끾끿낁낂낃낅",6,"낎낐낒",5,"낛낝낞낣낤"],["8641","낥낦낧낪낰낲낶낷낹낺낻낽",6,"냆냊",5,"냒"],["8661","냓냕냖냗냙",6,"냡냢냣냤냦",10],["8681","냱",22,"넊넍넎넏넑넔넕넖넗넚넞",4,"넦넧넩넪넫넭",6,"넶넺",5,"녂녃녅녆녇녉",6,"녒녓녖녗녙녚녛녝녞녟녡",22,"녺녻녽녾녿놁놃",4,"놊놌놎놏놐놑놕놖놗놙놚놛놝"],["8741","놞",9,"놩",15],["8761","놹",18,"뇍뇎뇏뇑뇒뇓뇕"],["8781","뇖",5,"뇞뇠",7,"뇪뇫뇭뇮뇯뇱",7,"뇺뇼뇾",5,"눆눇눉눊눍",6,"눖눘눚",5,"눡",18,"눵",6,"눽",26,"뉙뉚뉛뉝뉞뉟뉡",6,"뉪",4],["8841","뉯",4,"뉶",5,"뉽",6,"늆늇늈늊",4],["8861","늏늒늓늕늖늗늛",4,"늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷"],["8881","늸",15,"닊닋닍닎닏닑닓",4,"닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉",6,"댒댖",5,"댝",54,"덗덙덚덝덠덡덢덣"],["8941","덦덨덪덬덭덯덲덳덵덶덷덹",6,"뎂뎆",5,"뎍"],["8961","뎎뎏뎑뎒뎓뎕",10,"뎢",5,"뎩뎪뎫뎭"],["8981","뎮",21,"돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩",18,"돽",18,"됑",6,"됙됚됛됝됞됟됡",6,"됪됬",7,"됵",15],["8a41","둅",10,"둒둓둕둖둗둙",6,"둢둤둦"],["8a61","둧",4,"둭",18,"뒁뒂"],["8a81","뒃",4,"뒉",19,"뒞",5,"뒥뒦뒧뒩뒪뒫뒭",7,"뒶뒸뒺",5,"듁듂듃듅듆듇듉",6,"듑듒듓듔듖",5,"듞듟듡듢듥듧",4,"듮듰듲",5,"듹",26,"딖딗딙딚딝"],["8b41","딞",5,"딦딫",4,"딲딳딵딶딷딹",6,"땂땆"],["8b61","땇땈땉땊땎땏땑땒땓땕",6,"땞땢",8],["8b81","땫",52,"떢떣떥떦떧떩떬떭떮떯떲떶",4,"떾떿뗁뗂뗃뗅",6,"뗎뗒",5,"뗙",18,"뗭",18],["8c41","똀",15,"똒똓똕똖똗똙",4],["8c61","똞",6,"똦",5,"똭",6,"똵",5],["8c81","똻",12,"뙉",26,"뙥뙦뙧뙩",50,"뚞뚟뚡뚢뚣뚥",5,"뚭뚮뚯뚰뚲",16],["8d41","뛃",16,"뛕",8],["8d61","뛞",17,"뛱뛲뛳뛵뛶뛷뛹뛺"],["8d81","뛻",4,"뜂뜃뜄뜆",33,"뜪뜫뜭뜮뜱",6,"뜺뜼",7,"띅띆띇띉띊띋띍",6,"띖",9,"띡띢띣띥띦띧띩",6,"띲띴띶",5,"띾띿랁랂랃랅",6,"랎랓랔랕랚랛랝랞"],["8e41","랟랡",6,"랪랮",5,"랶랷랹",8],["8e61","럂",4,"럈럊",19],["8e81","럞",13,"럮럯럱럲럳럵",6,"럾렂",4,"렊렋렍렎렏렑",6,"렚렜렞",5,"렦렧렩렪렫렭",6,"렶렺",5,"롁롂롃롅",11,"롒롔",7,"롞롟롡롢롣롥",6,"롮롰롲",5,"롹롺롻롽",7],["8f41","뢅",7,"뢎",17],["8f61","뢠",7,"뢩",6,"뢱뢲뢳뢵뢶뢷뢹",4],["8f81","뢾뢿룂룄룆",5,"룍룎룏룑룒룓룕",7,"룞룠룢",5,"룪룫룭룮룯룱",6,"룺룼룾",5,"뤅",18,"뤙",6,"뤡",26,"뤾뤿륁륂륃륅",6,"륍륎륐륒",5],["9041","륚륛륝륞륟륡",6,"륪륬륮",5,"륶륷륹륺륻륽"],["9061","륾",5,"릆릈릋릌릏",15],["9081","릟",12,"릮릯릱릲릳릵",6,"릾맀맂",5,"맊맋맍맓",4,"맚맜맟맠맢맦맧맩맪맫맭",6,"맶맻",4,"먂",5,"먉",11,"먖",33,"먺먻먽먾먿멁멃멄멅멆"],["9141","멇멊멌멏멐멑멒멖멗멙멚멛멝",6,"멦멪",5],["9161","멲멳멵멶멷멹",9,"몆몈몉몊몋몍",5],["9181","몓",20,"몪몭몮몯몱몳",4,"몺몼몾",5,"뫅뫆뫇뫉",14,"뫚",33,"뫽뫾뫿묁묂묃묅",7,"묎묐묒",5,"묙묚묛묝묞묟묡",6],["9241","묨묪묬",7,"묷묹묺묿",4,"뭆뭈뭊뭋뭌뭎뭑뭒"],["9261","뭓뭕뭖뭗뭙",7,"뭢뭤",7,"뭭",4],["9281","뭲",21,"뮉뮊뮋뮍뮎뮏뮑",18,"뮥뮦뮧뮩뮪뮫뮭",6,"뮵뮶뮸",7,"믁믂믃믅믆믇믉",6,"믑믒믔",35,"믺믻믽믾밁"],["9341","밃",4,"밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵"],["9361","밶밷밹",6,"뱂뱆뱇뱈뱊뱋뱎뱏뱑",8],["9381","뱚뱛뱜뱞",37,"벆벇벉벊벍벏",4,"벖벘벛",4,"벢벣벥벦벩",6,"벲벶",5,"벾벿볁볂볃볅",7,"볎볒볓볔볖볗볙볚볛볝",22,"볷볹볺볻볽"],["9441","볾",5,"봆봈봊",5,"봑봒봓봕",8],["9461","봞",5,"봥",6,"봭",12],["9481","봺",5,"뵁",6,"뵊뵋뵍뵎뵏뵑",6,"뵚",9,"뵥뵦뵧뵩",22,"붂붃붅붆붋",4,"붒붔붖붗붘붛붝",6,"붥",10,"붱",6,"붹",24],["9541","뷒뷓뷖뷗뷙뷚뷛뷝",11,"뷪",5,"뷱"],["9561","뷲뷳뷵뷶뷷뷹",6,"븁븂븄븆",5,"븎븏븑븒븓"],["9581","븕",6,"븞븠",35,"빆빇빉빊빋빍빏",4,"빖빘빜빝빞빟빢빣빥빦빧빩빫",4,"빲빶",4,"빾빿뺁뺂뺃뺅",6,"뺎뺒",5,"뺚",13,"뺩",14],["9641","뺸",23,"뻒뻓"],["9661","뻕뻖뻙",6,"뻡뻢뻦",5,"뻭",8],["9681","뻶",10,"뼂",5,"뼊",13,"뼚뼞",33,"뽂뽃뽅뽆뽇뽉",6,"뽒뽓뽔뽖",44],["9741","뾃",16,"뾕",8],["9761","뾞",17,"뾱",7],["9781","뾹",11,"뿆",5,"뿎뿏뿑뿒뿓뿕",6,"뿝뿞뿠뿢",89,"쀽쀾쀿"],["9841","쁀",16,"쁒",5,"쁙쁚쁛"],["9861","쁝쁞쁟쁡",6,"쁪",15],["9881","쁺",21,"삒삓삕삖삗삙",6,"삢삤삦",5,"삮삱삲삷",4,"삾샂샃샄샆샇샊샋샍샎샏샑",6,"샚샞",5,"샦샧샩샪샫샭",6,"샶샸샺",5,"섁섂섃섅섆섇섉",6,"섑섒섓섔섖",5,"섡섢섥섨섩섪섫섮"],["9941","섲섳섴섵섷섺섻섽섾섿셁",6,"셊셎",5,"셖셗"],["9961","셙셚셛셝",6,"셦셪",5,"셱셲셳셵셶셷셹셺셻"],["9981","셼",8,"솆",5,"솏솑솒솓솕솗",4,"솞솠솢솣솤솦솧솪솫솭솮솯솱",11,"솾",5,"쇅쇆쇇쇉쇊쇋쇍",6,"쇕쇖쇙",6,"쇡쇢쇣쇥쇦쇧쇩",6,"쇲쇴",7,"쇾쇿숁숂숃숅",6,"숎숐숒",5,"숚숛숝숞숡숢숣"],["9a41","숤숥숦숧숪숬숮숰숳숵",16],["9a61","쉆쉇쉉",6,"쉒쉓쉕쉖쉗쉙",6,"쉡쉢쉣쉤쉦"],["9a81","쉧",4,"쉮쉯쉱쉲쉳쉵",6,"쉾슀슂",5,"슊",5,"슑",6,"슙슚슜슞",5,"슦슧슩슪슫슮",5,"슶슸슺",33,"싞싟싡싢싥",5,"싮싰싲싳싴싵싷싺싽싾싿쌁",6,"쌊쌋쌎쌏"],["9b41","쌐쌑쌒쌖쌗쌙쌚쌛쌝",6,"쌦쌧쌪",8],["9b61","쌳",17,"썆",7],["9b81","썎",25,"썪썫썭썮썯썱썳",4,"썺썻썾",5,"쎅쎆쎇쎉쎊쎋쎍",50,"쏁",22,"쏚"],["9c41","쏛쏝쏞쏡쏣",4,"쏪쏫쏬쏮",5,"쏶쏷쏹",5],["9c61","쏿",8,"쐉",6,"쐑",9],["9c81","쐛",8,"쐥",6,"쐭쐮쐯쐱쐲쐳쐵",6,"쐾",9,"쑉",26,"쑦쑧쑩쑪쑫쑭",6,"쑶쑷쑸쑺",5,"쒁",18,"쒕",6,"쒝",12],["9d41","쒪",13,"쒹쒺쒻쒽",8],["9d61","쓆",25],["9d81","쓠",8,"쓪",5,"쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂",9,"씍씎씏씑씒씓씕",6,"씝",10,"씪씫씭씮씯씱",6,"씺씼씾",5,"앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩",6,"앲앶",5,"앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔"],["9e41","얖얙얚얛얝얞얟얡",7,"얪",9,"얶"],["9e61","얷얺얿",4,"엋엍엏엒엓엕엖엗엙",6,"엢엤엦엧"],["9e81","엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑",6,"옚옝",6,"옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉",6,"왒왖",5,"왞왟왡",10,"왭왮왰왲",5,"왺왻왽왾왿욁",6,"욊욌욎",5,"욖욗욙욚욛욝",6,"욦"],["9f41","욨욪",5,"욲욳욵욶욷욻",4,"웂웄웆",5,"웎"],["9f61","웏웑웒웓웕",6,"웞웟웢",5,"웪웫웭웮웯웱웲"],["9f81","웳",4,"웺웻웼웾",5,"윆윇윉윊윋윍",6,"윖윘윚",5,"윢윣윥윦윧윩",6,"윲윴윶윸윹윺윻윾윿읁읂읃읅",4,"읋읎읐읙읚읛읝읞읟읡",6,"읩읪읬",7,"읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛",4,"잢잧",4,"잮잯잱잲잳잵잶잷"],["a041","잸잹잺잻잾쟂",5,"쟊쟋쟍쟏쟑",6,"쟙쟚쟛쟜"],["a061","쟞",5,"쟥쟦쟧쟩쟪쟫쟭",13],["a081","쟻",4,"젂젃젅젆젇젉젋",4,"젒젔젗",4,"젞젟젡젢젣젥",6,"젮젰젲",5,"젹젺젻젽젾젿졁",6,"졊졋졎",5,"졕",26,"졲졳졵졶졷졹졻",4,"좂좄좈좉좊좎",5,"좕",7,"좞좠좢좣좤"],["a141","좥좦좧좩",18,"좾좿죀죁"],["a161","죂죃죅죆죇죉죊죋죍",6,"죖죘죚",5,"죢죣죥"],["a181","죦",14,"죶",5,"죾죿줁줂줃줇",4,"줎 、。·‥…¨〃―∥\∼‘’“”〔〕〈",9,"±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬"],["a241","줐줒",5,"줙",18],["a261","줭",6,"줵",18],["a281","쥈",7,"쥒쥓쥕쥖쥗쥙",6,"쥢쥤",7,"쥭쥮쥯⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®"],["a341","쥱쥲쥳쥵",6,"쥽",10,"즊즋즍즎즏"],["a361","즑",6,"즚즜즞",16],["a381","즯",16,"짂짃짅짆짉짋",4,"짒짔짗짘짛!",58,"₩]",32," ̄"],["a441","짞짟짡짣짥짦짨짩짪짫짮짲",5,"짺짻짽짾짿쨁쨂쨃쨄"],["a461","쨅쨆쨇쨊쨎",5,"쨕쨖쨗쨙",12],["a481","쨦쨧쨨쨪",28,"ㄱ",93],["a541","쩇",4,"쩎쩏쩑쩒쩓쩕",6,"쩞쩢",5,"쩩쩪"],["a561","쩫",17,"쩾",5,"쪅쪆"],["a581","쪇",16,"쪙",14,"ⅰ",9],["a5b0","Ⅰ",9],["a5c1","Α",16,"Σ",6],["a5e1","α",16,"σ",6],["a641","쪨",19,"쪾쪿쫁쫂쫃쫅"],["a661","쫆",5,"쫎쫐쫒쫔쫕쫖쫗쫚",5,"쫡",6],["a681","쫨쫩쫪쫫쫭",6,"쫵",18,"쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃",7],["a741","쬋",4,"쬑쬒쬓쬕쬖쬗쬙",6,"쬢",7],["a761","쬪",22,"쭂쭃쭄"],["a781","쭅쭆쭇쭊쭋쭍쭎쭏쭑",6,"쭚쭛쭜쭞",5,"쭥",7,"㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙",9,"㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰",9,"㎀",4,"㎺",5,"㎐",4,"Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆"],["a841","쭭",10,"쭺",14],["a861","쮉",18,"쮝",6],["a881","쮤",19,"쮹",11,"ÆÐªĦ"],["a8a6","IJ"],["a8a8","ĿŁØŒºÞŦŊ"],["a8b1","㉠",27,"ⓐ",25,"①",14,"½⅓⅔¼¾⅛⅜⅝⅞"],["a941","쯅",14,"쯕",10],["a961","쯠쯡쯢쯣쯥쯦쯨쯪",18],["a981","쯽",14,"찎찏찑찒찓찕",6,"찞찟찠찣찤æđðħıijĸŀłøœßþŧŋʼn㈀",27,"⒜",25,"⑴",14,"¹²³⁴ⁿ₁₂₃₄"],["aa41","찥찦찪찫찭찯찱",6,"찺찿",4,"챆챇챉챊챋챍챎"],["aa61","챏",4,"챖챚",5,"챡챢챣챥챧챩",6,"챱챲"],["aa81","챳챴챶",29,"ぁ",82],["ab41","첔첕첖첗첚첛첝첞첟첡",6,"첪첮",5,"첶첷첹"],["ab61","첺첻첽",6,"쳆쳈쳊",5,"쳑쳒쳓쳕",5],["ab81","쳛",8,"쳥",6,"쳭쳮쳯쳱",12,"ァ",85],["ac41","쳾쳿촀촂",5,"촊촋촍촎촏촑",6,"촚촜촞촟촠"],["ac61","촡촢촣촥촦촧촩촪촫촭",11,"촺",4],["ac81","촿",28,"쵝쵞쵟А",5,"ЁЖ",25],["acd1","а",5,"ёж",25],["ad41","쵡쵢쵣쵥",6,"쵮쵰쵲",5,"쵹",7],["ad61","춁",6,"춉",10,"춖춗춙춚춛춝춞춟"],["ad81","춠춡춢춣춦춨춪",5,"춱",18,"췅"],["ae41","췆",5,"췍췎췏췑",16],["ae61","췢",5,"췩췪췫췭췮췯췱",6,"췺췼췾",4],["ae81","츃츅츆츇츉츊츋츍",6,"츕츖츗츘츚",5,"츢츣츥츦츧츩츪츫"],["af41","츬츭츮츯츲츴츶",19],["af61","칊",13,"칚칛칝칞칢",5,"칪칬"],["af81","칮",5,"칶칷칹칺칻칽",6,"캆캈캊",5,"캒캓캕캖캗캙"],["b041","캚",5,"캢캦",5,"캮",12],["b061","캻",5,"컂",19],["b081","컖",13,"컦컧컩컪컭",6,"컶컺",5,"가각간갇갈갉갊감",7,"같",4,"갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆"],["b141","켂켃켅켆켇켉",6,"켒켔켖",5,"켝켞켟켡켢켣"],["b161","켥",6,"켮켲",5,"켹",11],["b181","콅",14,"콖콗콙콚콛콝",6,"콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸"],["b241","콭콮콯콲콳콵콶콷콹",6,"쾁쾂쾃쾄쾆",5,"쾍"],["b261","쾎",18,"쾢",5,"쾩"],["b281","쾪",5,"쾱",18,"쿅",6,"깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙"],["b341","쿌",19,"쿢쿣쿥쿦쿧쿩"],["b361","쿪",5,"쿲쿴쿶",5,"쿽쿾쿿퀁퀂퀃퀅",5],["b381","퀋",5,"퀒",5,"퀙",19,"끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫",4,"낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝"],["b441","퀮",5,"퀶퀷퀹퀺퀻퀽",6,"큆큈큊",5],["b461","큑큒큓큕큖큗큙",6,"큡",10,"큮큯"],["b481","큱큲큳큵",6,"큾큿킀킂",18,"뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫",4,"닳담답닷",4,"닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥"],["b541","킕",14,"킦킧킩킪킫킭",5],["b561","킳킶킸킺",5,"탂탃탅탆탇탊",5,"탒탖",4],["b581","탛탞탟탡탢탣탥",6,"탮탲",5,"탹",11,"덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸"],["b641","턅",7,"턎",17],["b661","턠",15,"턲턳턵턶턷턹턻턼턽턾"],["b681","턿텂텆",5,"텎텏텑텒텓텕",6,"텞텠텢",5,"텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗"],["b741","텮",13,"텽",6,"톅톆톇톉톊"],["b761","톋",20,"톢톣톥톦톧"],["b781","톩",6,"톲톴톶톷톸톹톻톽톾톿퇁",14,"래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩"],["b841","퇐",7,"퇙",17],["b861","퇫",8,"퇵퇶퇷퇹",13],["b881","툈툊",5,"툑",24,"륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많",4,"맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼"],["b941","툪툫툮툯툱툲툳툵",6,"툾퉀퉂",5,"퉉퉊퉋퉌"],["b961","퉍",14,"퉝",6,"퉥퉦퉧퉨"],["b981","퉩",22,"튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바",4,"받",4,"밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗"],["ba41","튍튎튏튒튓튔튖",5,"튝튞튟튡튢튣튥",6,"튭"],["ba61","튮튯튰튲",5,"튺튻튽튾틁틃",4,"틊틌",5],["ba81","틒틓틕틖틗틙틚틛틝",6,"틦",9,"틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤"],["bb41","틻",4,"팂팄팆",5,"팏팑팒팓팕팗",4,"팞팢팣"],["bb61","팤팦팧팪팫팭팮팯팱",6,"팺팾",5,"퍆퍇퍈퍉"],["bb81","퍊",31,"빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤"],["bc41","퍪",17,"퍾퍿펁펂펃펅펆펇"],["bc61","펈펉펊펋펎펒",5,"펚펛펝펞펟펡",6,"펪펬펮"],["bc81","펯",4,"펵펶펷펹펺펻펽",6,"폆폇폊",5,"폑",5,"샥샨샬샴샵샷샹섀섄섈섐섕서",4,"섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭"],["bd41","폗폙",7,"폢폤",7,"폮폯폱폲폳폵폶폷"],["bd61","폸폹폺폻폾퐀퐂",5,"퐉",13],["bd81","퐗",5,"퐞",25,"숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰"],["be41","퐸",7,"푁푂푃푅",14],["be61","푔",7,"푝푞푟푡푢푣푥",7,"푮푰푱푲"],["be81","푳",4,"푺푻푽푾풁풃",4,"풊풌풎",5,"풕",8,"쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄",6,"엌엎"],["bf41","풞",10,"풪",14],["bf61","풹",18,"퓍퓎퓏퓑퓒퓓퓕"],["bf81","퓖",5,"퓝퓞퓠",7,"퓩퓪퓫퓭퓮퓯퓱",6,"퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염",5,"옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨"],["c041","퓾",5,"픅픆픇픉픊픋픍",6,"픖픘",5],["c061","픞",25],["c081","픸픹픺픻픾픿핁핂핃핅",6,"핎핐핒",5,"핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응",7,"읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊"],["c141","핤핦핧핪핬핮",5,"핶핷핹핺핻핽",6,"햆햊햋"],["c161","햌햍햎햏햑",19,"햦햧"],["c181","햨",31,"점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓"],["c241","헊헋헍헎헏헑헓",4,"헚헜헞",5,"헦헧헩헪헫헭헮"],["c261","헯",4,"헶헸헺",5,"혂혃혅혆혇혉",6,"혒"],["c281","혖",5,"혝혞혟혡혢혣혥",7,"혮",9,"혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻"],["c341","혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝",4],["c361","홢",4,"홨홪",5,"홲홳홵",11],["c381","횁횂횄횆",5,"횎횏횑횒횓횕",7,"횞횠횢",5,"횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층"],["c441","횫횭횮횯횱",7,"횺횼",7,"훆훇훉훊훋"],["c461","훍훎훏훐훒훓훕훖훘훚",5,"훡훢훣훥훦훧훩",4],["c481","훮훯훱훲훳훴훶",5,"훾훿휁휂휃휅",11,"휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼"],["c541","휕휖휗휚휛휝휞휟휡",6,"휪휬휮",5,"휶휷휹"],["c561","휺휻휽",6,"흅흆흈흊",5,"흒흓흕흚",4],["c581","흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵",6,"흾흿힀힂",5,"힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜"],["c641","힍힎힏힑",6,"힚힜힞",5],["c6a1","퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁"],["c7a1","퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠"],["c8a1","혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝"],["caa1","伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕"],["cba1","匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢"],["cca1","瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械"],["cda1","棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜"],["cea1","科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾"],["cfa1","區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴"],["d0a1","鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣"],["d1a1","朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩",5,"那樂",4,"諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉"],["d2a1","納臘蠟衲囊娘廊",4,"乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧",5,"駑魯",10,"濃籠聾膿農惱牢磊腦賂雷尿壘",7,"嫩訥杻紐勒",5,"能菱陵尼泥匿溺多茶"],["d3a1","丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃"],["d4a1","棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅"],["d5a1","蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣"],["d6a1","煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼"],["d7a1","遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬"],["d8a1","立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅"],["d9a1","蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文"],["daa1","汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑"],["dba1","發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖"],["dca1","碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦"],["dda1","孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥"],["dea1","脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索"],["dfa1","傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署"],["e0a1","胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬"],["e1a1","聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁"],["e2a1","戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧"],["e3a1","嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁"],["e4a1","沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額"],["e5a1","櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬"],["e6a1","旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒"],["e7a1","簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳"],["e8a1","烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療"],["e9a1","窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓"],["eaa1","運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜"],["eba1","濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼"],["eca1","議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄"],["eda1","立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長"],["eea1","障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱"],["efa1","煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖"],["f0a1","靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫"],["f1a1","踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只"],["f2a1","咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯"],["f3a1","鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策"],["f4a1","責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢"],["f5a1","椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃"],["f6a1","贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託"],["f7a1","鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑"],["f8a1","阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃"],["f9a1","品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航"],["faa1","行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型"],["fba1","形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵"],["fca1","禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆"],["fda1","爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰"]]'); 81959 81960 /***/ }), 81961 81962 /***/ 74284: 81963 /***/ ((module) => { 81964 81965 "use strict"; 81966 module.exports = JSON.parse('[["0","\\u0000",127],["a140"," ,、。.‧;:?!︰…‥﹐﹑﹒·﹔﹕﹖﹗|–︱—︳╴︴﹏()︵︶{}︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚"],["a1a1","﹛﹜﹝﹞‘’“”〝〞‵′#&*※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯ ̄_ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡+-×÷±√<>=≦≧≠∞≒≡﹢",4,"~∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣/"],["a240","\∕﹨$¥〒¢£%@℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁",7,"▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭"],["a2a1","╮╰╯═╞╪╡◢◣◥◤╱╲╳0",9,"Ⅰ",9,"〡",8,"十卄卅A",25,"a",21],["a340","wxyzΑ",16,"Σ",6,"α",16,"σ",6,"ㄅ",10],["a3a1","ㄐ",25,"˙ˉˊˇˋ"],["a3e1","€"],["a440","一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才"],["a4a1","丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙"],["a540","世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外"],["a5a1","央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全"],["a640","共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年"],["a6a1","式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣"],["a740","作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍"],["a7a1","均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠"],["a840","杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒"],["a8a1","芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵"],["a940","咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居"],["a9a1","屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊"],["aa40","昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠"],["aaa1","炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附"],["ab40","陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品"],["aba1","哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷"],["ac40","拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗"],["aca1","活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄"],["ad40","耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥"],["ada1","迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪"],["ae40","哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙"],["aea1","恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓"],["af40","浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷"],["afa1","砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃"],["b040","虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡"],["b0a1","陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀"],["b140","娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽"],["b1a1","情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺"],["b240","毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶"],["b2a1","瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼"],["b340","莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途"],["b3a1","部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠"],["b440","婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍"],["b4a1","插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋"],["b540","溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘"],["b5a1","窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁"],["b640","詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑"],["b6a1","間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼"],["b740","媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業"],["b7a1","楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督"],["b840","睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫"],["b8a1","腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊"],["b940","辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴"],["b9a1","飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇"],["ba40","愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢"],["baa1","滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬"],["bb40","罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤"],["bba1","說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜"],["bc40","劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂"],["bca1","慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃"],["bd40","瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯"],["bda1","翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞"],["be40","輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉"],["bea1","鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡"],["bf40","濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊"],["bfa1","縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚"],["c040","錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇"],["c0a1","嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬"],["c140","瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪"],["c1a1","薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁"],["c240","駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘"],["c2a1","癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦"],["c340","鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸"],["c3a1","獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類"],["c440","願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼"],["c4a1","纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴"],["c540","護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬"],["c5a1","禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒"],["c640","讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲"],["c940","乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕"],["c9a1","氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋"],["ca40","汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘"],["caa1","吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇"],["cb40","杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓"],["cba1","芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢"],["cc40","坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋"],["cca1","怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲"],["cd40","泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺"],["cda1","矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏"],["ce40","哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛"],["cea1","峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺"],["cf40","柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂"],["cfa1","洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀"],["d040","穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪"],["d0a1","苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱"],["d140","唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧"],["d1a1","恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤"],["d240","毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸"],["d2a1","牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐"],["d340","笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢"],["d3a1","荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐"],["d440","酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅"],["d4a1","唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏"],["d540","崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟"],["d5a1","捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉"],["d640","淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏"],["d6a1","痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟"],["d740","耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷"],["d7a1","蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪"],["d840","釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷"],["d8a1","堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔"],["d940","惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒"],["d9a1","晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞"],["da40","湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖"],["daa1","琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥"],["db40","罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳"],["dba1","菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺"],["dc40","軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈"],["dca1","隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆"],["dd40","媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤"],["dda1","搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼"],["de40","毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓"],["dea1","煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓"],["df40","稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯"],["dfa1","腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤"],["e040","觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿"],["e0a1","遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠"],["e140","凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠"],["e1a1","寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉"],["e240","榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊"],["e2a1","漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓"],["e340","禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞"],["e3a1","耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻"],["e440","裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍"],["e4a1","銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘"],["e540","噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉"],["e5a1","憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒"],["e640","澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙"],["e6a1","獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟"],["e740","膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢"],["e7a1","蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧"],["e840","踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓"],["e8a1","銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮"],["e940","噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺"],["e9a1","憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸"],["ea40","澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙"],["eaa1","瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘"],["eb40","蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠"],["eba1","諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌"],["ec40","錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕"],["eca1","魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎"],["ed40","檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶"],["eda1","瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞"],["ee40","蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞"],["eea1","謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜"],["ef40","鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰"],["efa1","鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶"],["f040","璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒"],["f0a1","臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧"],["f140","蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪"],["f1a1","鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰"],["f240","徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛"],["f2a1","礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕"],["f340","譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦"],["f3a1","鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲"],["f440","嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩"],["f4a1","禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿"],["f540","鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛"],["f5a1","鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥"],["f640","蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺"],["f6a1","騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚"],["f740","糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊"],["f7a1","驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾"],["f840","讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏"],["f8a1","齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚"],["f940","纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊"],["f9a1","龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓"]]'); 81967 81968 /***/ }), 81969 81970 /***/ 31532: 81971 /***/ ((module) => { 81972 81973 "use strict"; 81974 module.exports = JSON.parse('[["0","\\u0000",127],["8ea1","。",62],["a1a1"," 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈",9,"+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇"],["a2a1","◆□■△▲▽▼※〒→←↑↓〓"],["a2ba","∈∋⊆⊇⊂⊃∪∩"],["a2ca","∧∨¬⇒⇔∀∃"],["a2dc","∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬"],["a2f2","ʼn♯♭♪†‡¶"],["a2fe","◯"],["a3b0","0",9],["a3c1","A",25],["a3e1","a",25],["a4a1","ぁ",82],["a5a1","ァ",85],["a6a1","Α",16,"Σ",6],["a6c1","α",16,"σ",6],["a7a1","А",5,"ЁЖ",25],["a7d1","а",5,"ёж",25],["a8a1","─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂"],["ada1","①",19,"Ⅰ",9],["adc0","㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡"],["addf","㍻〝〟№㏍℡㊤",4,"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪"],["b0a1","亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭"],["b1a1","院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応"],["b2a1","押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改"],["b3a1","魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱"],["b4a1","粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄"],["b5a1","機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京"],["b6a1","供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈"],["b7a1","掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲"],["b8a1","検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向"],["b9a1","后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込"],["baa1","此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷"],["bba1","察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時"],["bca1","次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周"],["bda1","宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償"],["bea1","勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾"],["bfa1","拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾"],["c0a1","澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線"],["c1a1","繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎"],["c2a1","臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只"],["c3a1","叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵"],["c4a1","帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓"],["c5a1","邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到"],["c6a1","董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入"],["c7a1","如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦"],["c8a1","函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美"],["c9a1","鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服"],["caa1","福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋"],["cba1","法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満"],["cca1","漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒"],["cda1","諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃"],["cea1","痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯"],["cfa1","蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕"],["d0a1","弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲"],["d1a1","僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨"],["d2a1","辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨"],["d3a1","咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉"],["d4a1","圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩"],["d5a1","奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓"],["d6a1","屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏"],["d7a1","廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚"],["d8a1","悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛"],["d9a1","戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼"],["daa1","據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼"],["dba1","曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍"],["dca1","棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣"],["dda1","檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾"],["dea1","沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌"],["dfa1","漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼"],["e0a1","燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱"],["e1a1","瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰"],["e2a1","癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"],["e3a1","磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐"],["e4a1","筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆"],["e5a1","紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺"],["e6a1","罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋"],["e7a1","隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙"],["e8a1","茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"],["e9a1","蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙"],["eaa1","蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞"],["eba1","襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫"],["eca1","譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊"],["eda1","蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸"],["eea1","遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮"],["efa1","錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞"],["f0a1","陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰"],["f1a1","顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷"],["f2a1","髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈"],["f3a1","鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠"],["f4a1","堯槇遙瑤凜熙"],["f9a1","纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德"],["faa1","忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱"],["fba1","犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚"],["fca1","釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"],["fcf1","ⅰ",9,"¬¦'""],["8fa2af","˘ˇ¸˙˝¯˛˚~΄΅"],["8fa2c2","¡¦¿"],["8fa2eb","ºª©®™¤№"],["8fa6e1","ΆΈΉΊΪ"],["8fa6e7","Ό"],["8fa6e9","ΎΫ"],["8fa6ec","Ώ"],["8fa6f1","άέήίϊΐόςύϋΰώ"],["8fa7c2","Ђ",10,"ЎЏ"],["8fa7f2","ђ",10,"ўџ"],["8fa9a1","ÆĐ"],["8fa9a4","Ħ"],["8fa9a6","IJ"],["8fa9a8","ŁĿ"],["8fa9ab","ŊØŒ"],["8fa9af","ŦÞ"],["8fa9c1","æđðħıijĸłŀʼnŋøœßŧþ"],["8faaa1","ÁÀÄÂĂǍĀĄÅÃĆĈČÇĊĎÉÈËÊĚĖĒĘ"],["8faaba","ĜĞĢĠĤÍÌÏÎǏİĪĮĨĴĶĹĽĻŃŇŅÑÓÒÖÔǑŐŌÕŔŘŖŚŜŠŞŤŢÚÙÜÛŬǓŰŪŲŮŨǗǛǙǕŴÝŸŶŹŽŻ"],["8faba1","áàäâăǎāąåãćĉčçċďéèëêěėēęǵĝğ"],["8fabbd","ġĥíìïîǐ"],["8fabc5","īįĩĵķĺľļńňņñóòöôǒőōõŕřŗśŝšşťţúùüûŭǔűūųůũǘǜǚǖŵýÿŷźžż"],["8fb0a1","丂丄丅丌丒丟丣两丨丫丮丯丰丵乀乁乄乇乑乚乜乣乨乩乴乵乹乿亍亖亗亝亯亹仃仐仚仛仠仡仢仨仯仱仳仵份仾仿伀伂伃伈伋伌伒伕伖众伙伮伱你伳伵伷伹伻伾佀佂佈佉佋佌佒佔佖佘佟佣佪佬佮佱佷佸佹佺佽佾侁侂侄"],["8fb1a1","侅侉侊侌侎侐侒侓侔侗侙侚侞侟侲侷侹侻侼侽侾俀俁俅俆俈俉俋俌俍俏俒俜俠俢俰俲俼俽俿倀倁倄倇倊倌倎倐倓倗倘倛倜倝倞倢倧倮倰倲倳倵偀偁偂偅偆偊偌偎偑偒偓偗偙偟偠偢偣偦偧偪偭偰偱倻傁傃傄傆傊傎傏傐"],["8fb2a1","傒傓傔傖傛傜傞",4,"傪傯傰傹傺傽僀僃僄僇僌僎僐僓僔僘僜僝僟僢僤僦僨僩僯僱僶僺僾儃儆儇儈儋儌儍儎僲儐儗儙儛儜儝儞儣儧儨儬儭儯儱儳儴儵儸儹兂兊兏兓兕兗兘兟兤兦兾冃冄冋冎冘冝冡冣冭冸冺冼冾冿凂"],["8fb3a1","凈减凑凒凓凕凘凞凢凥凮凲凳凴凷刁刂刅划刓刕刖刘刢刨刱刲刵刼剅剉剕剗剘剚剜剟剠剡剦剮剷剸剹劀劂劅劊劌劓劕劖劗劘劚劜劤劥劦劧劯劰劶劷劸劺劻劽勀勄勆勈勌勏勑勔勖勛勜勡勥勨勩勪勬勰勱勴勶勷匀匃匊匋"],["8fb4a1","匌匑匓匘匛匜匞匟匥匧匨匩匫匬匭匰匲匵匼匽匾卂卌卋卙卛卡卣卥卬卭卲卹卾厃厇厈厎厓厔厙厝厡厤厪厫厯厲厴厵厷厸厺厽叀叅叏叒叓叕叚叝叞叠另叧叵吂吓吚吡吧吨吪启吱吴吵呃呄呇呍呏呞呢呤呦呧呩呫呭呮呴呿"],["8fb5a1","咁咃咅咈咉咍咑咕咖咜咟咡咦咧咩咪咭咮咱咷咹咺咻咿哆哊响哎哠哪哬哯哶哼哾哿唀唁唅唈唉唌唍唎唕唪唫唲唵唶唻唼唽啁啇啉啊啍啐啑啘啚啛啞啠啡啤啦啿喁喂喆喈喎喏喑喒喓喔喗喣喤喭喲喿嗁嗃嗆嗉嗋嗌嗎嗑嗒"],["8fb6a1","嗓嗗嗘嗛嗞嗢嗩嗶嗿嘅嘈嘊嘍",5,"嘙嘬嘰嘳嘵嘷嘹嘻嘼嘽嘿噀噁噃噄噆噉噋噍噏噔噞噠噡噢噣噦噩噭噯噱噲噵嚄嚅嚈嚋嚌嚕嚙嚚嚝嚞嚟嚦嚧嚨嚩嚫嚬嚭嚱嚳嚷嚾囅囉囊囋囏囐囌囍囙囜囝囟囡囤",4,"囱囫园"],["8fb7a1","囶囷圁圂圇圊圌圑圕圚圛圝圠圢圣圤圥圩圪圬圮圯圳圴圽圾圿坅坆坌坍坒坢坥坧坨坫坭",4,"坳坴坵坷坹坺坻坼坾垁垃垌垔垗垙垚垜垝垞垟垡垕垧垨垩垬垸垽埇埈埌埏埕埝埞埤埦埧埩埭埰埵埶埸埽埾埿堃堄堈堉埡"],["8fb8a1","堌堍堛堞堟堠堦堧堭堲堹堿塉塌塍塏塐塕塟塡塤塧塨塸塼塿墀墁墇墈墉墊墌墍墏墐墔墖墝墠墡墢墦墩墱墲壄墼壂壈壍壎壐壒壔壖壚壝壡壢壩壳夅夆夋夌夒夓夔虁夝夡夣夤夨夯夰夳夵夶夿奃奆奒奓奙奛奝奞奟奡奣奫奭"],["8fb9a1","奯奲奵奶她奻奼妋妌妎妒妕妗妟妤妧妭妮妯妰妳妷妺妼姁姃姄姈姊姍姒姝姞姟姣姤姧姮姯姱姲姴姷娀娄娌娍娎娒娓娞娣娤娧娨娪娭娰婄婅婇婈婌婐婕婞婣婥婧婭婷婺婻婾媋媐媓媖媙媜媞媟媠媢媧媬媱媲媳媵媸媺媻媿"],["8fbaa1","嫄嫆嫈嫏嫚嫜嫠嫥嫪嫮嫵嫶嫽嬀嬁嬈嬗嬴嬙嬛嬝嬡嬥嬭嬸孁孋孌孒孖孞孨孮孯孼孽孾孿宁宄宆宊宎宐宑宓宔宖宨宩宬宭宯宱宲宷宺宼寀寁寍寏寖",4,"寠寯寱寴寽尌尗尞尟尣尦尩尫尬尮尰尲尵尶屙屚屜屢屣屧屨屩"],["8fbba1","屭屰屴屵屺屻屼屽岇岈岊岏岒岝岟岠岢岣岦岪岲岴岵岺峉峋峒峝峗峮峱峲峴崁崆崍崒崫崣崤崦崧崱崴崹崽崿嵂嵃嵆嵈嵕嵑嵙嵊嵟嵠嵡嵢嵤嵪嵭嵰嵹嵺嵾嵿嶁嶃嶈嶊嶒嶓嶔嶕嶙嶛嶟嶠嶧嶫嶰嶴嶸嶹巃巇巋巐巎巘巙巠巤"],["8fbca1","巩巸巹帀帇帍帒帔帕帘帟帠帮帨帲帵帾幋幐幉幑幖幘幛幜幞幨幪",4,"幰庀庋庎庢庤庥庨庪庬庱庳庽庾庿廆廌廋廎廑廒廔廕廜廞廥廫异弆弇弈弎弙弜弝弡弢弣弤弨弫弬弮弰弴弶弻弽弿彀彄彅彇彍彐彔彘彛彠彣彤彧"],["8fbda1","彯彲彴彵彸彺彽彾徉徍徏徖徜徝徢徧徫徤徬徯徰徱徸忄忇忈忉忋忐",4,"忞忡忢忨忩忪忬忭忮忯忲忳忶忺忼怇怊怍怓怔怗怘怚怟怤怭怳怵恀恇恈恉恌恑恔恖恗恝恡恧恱恾恿悂悆悈悊悎悑悓悕悘悝悞悢悤悥您悰悱悷"],["8fbea1","悻悾惂惄惈惉惊惋惎惏惔惕惙惛惝惞惢惥惲惵惸惼惽愂愇愊愌愐",4,"愖愗愙愜愞愢愪愫愰愱愵愶愷愹慁慅慆慉慞慠慬慲慸慻慼慿憀憁憃憄憋憍憒憓憗憘憜憝憟憠憥憨憪憭憸憹憼懀懁懂懎懏懕懜懝懞懟懡懢懧懩懥"],["8fbfa1","懬懭懯戁戃戄戇戓戕戜戠戢戣戧戩戫戹戽扂扃扄扆扌扐扑扒扔扖扚扜扤扭扯扳扺扽抍抎抏抐抦抨抳抶抷抺抾抿拄拎拕拖拚拪拲拴拼拽挃挄挊挋挍挐挓挖挘挩挪挭挵挶挹挼捁捂捃捄捆捊捋捎捒捓捔捘捛捥捦捬捭捱捴捵"],["8fc0a1","捸捼捽捿掂掄掇掊掐掔掕掙掚掞掤掦掭掮掯掽揁揅揈揎揑揓揔揕揜揠揥揪揬揲揳揵揸揹搉搊搐搒搔搘搞搠搢搤搥搩搪搯搰搵搽搿摋摏摑摒摓摔摚摛摜摝摟摠摡摣摭摳摴摻摽撅撇撏撐撑撘撙撛撝撟撡撣撦撨撬撳撽撾撿"],["8fc1a1","擄擉擊擋擌擎擐擑擕擗擤擥擩擪擭擰擵擷擻擿攁攄攈攉攊攏攓攔攖攙攛攞攟攢攦攩攮攱攺攼攽敃敇敉敐敒敔敟敠敧敫敺敽斁斅斊斒斕斘斝斠斣斦斮斲斳斴斿旂旈旉旎旐旔旖旘旟旰旲旴旵旹旾旿昀昄昈昉昍昑昒昕昖昝"],["8fc2a1","昞昡昢昣昤昦昩昪昫昬昮昰昱昳昹昷晀晅晆晊晌晑晎晗晘晙晛晜晠晡曻晪晫晬晾晳晵晿晷晸晹晻暀晼暋暌暍暐暒暙暚暛暜暟暠暤暭暱暲暵暻暿曀曂曃曈曌曎曏曔曛曟曨曫曬曮曺朅朇朎朓朙朜朠朢朳朾杅杇杈杌杔杕杝"],["8fc3a1","杦杬杮杴杶杻极构枎枏枑枓枖枘枙枛枰枱枲枵枻枼枽柹柀柂柃柅柈柉柒柗柙柜柡柦柰柲柶柷桒栔栙栝栟栨栧栬栭栯栰栱栳栻栿桄桅桊桌桕桗桘桛桫桮",4,"桵桹桺桻桼梂梄梆梈梖梘梚梜梡梣梥梩梪梮梲梻棅棈棌棏"],["8fc4a1","棐棑棓棖棙棜棝棥棨棪棫棬棭棰棱棵棶棻棼棽椆椉椊椐椑椓椖椗椱椳椵椸椻楂楅楉楎楗楛楣楤楥楦楨楩楬楰楱楲楺楻楿榀榍榒榖榘榡榥榦榨榫榭榯榷榸榺榼槅槈槑槖槗槢槥槮槯槱槳槵槾樀樁樃樏樑樕樚樝樠樤樨樰樲"],["8fc5a1","樴樷樻樾樿橅橆橉橊橎橐橑橒橕橖橛橤橧橪橱橳橾檁檃檆檇檉檋檑檛檝檞檟檥檫檯檰檱檴檽檾檿櫆櫉櫈櫌櫐櫔櫕櫖櫜櫝櫤櫧櫬櫰櫱櫲櫼櫽欂欃欆欇欉欏欐欑欗欛欞欤欨欫欬欯欵欶欻欿歆歊歍歒歖歘歝歠歧歫歮歰歵歽"],["8fc6a1","歾殂殅殗殛殟殠殢殣殨殩殬殭殮殰殸殹殽殾毃毄毉毌毖毚毡毣毦毧毮毱毷毹毿氂氄氅氉氍氎氐氒氙氟氦氧氨氬氮氳氵氶氺氻氿汊汋汍汏汒汔汙汛汜汫汭汯汴汶汸汹汻沅沆沇沉沔沕沗沘沜沟沰沲沴泂泆泍泏泐泑泒泔泖"],["8fc7a1","泚泜泠泧泩泫泬泮泲泴洄洇洊洎洏洑洓洚洦洧洨汧洮洯洱洹洼洿浗浞浟浡浥浧浯浰浼涂涇涑涒涔涖涗涘涪涬涴涷涹涽涿淄淈淊淎淏淖淛淝淟淠淢淥淩淯淰淴淶淼渀渄渞渢渧渲渶渹渻渼湄湅湈湉湋湏湑湒湓湔湗湜湝湞"],["8fc8a1","湢湣湨湳湻湽溍溓溙溠溧溭溮溱溳溻溿滀滁滃滇滈滊滍滎滏滫滭滮滹滻滽漄漈漊漌漍漖漘漚漛漦漩漪漯漰漳漶漻漼漭潏潑潒潓潗潙潚潝潞潡潢潨潬潽潾澃澇澈澋澌澍澐澒澓澔澖澚澟澠澥澦澧澨澮澯澰澵澶澼濅濇濈濊"],["8fc9a1","濚濞濨濩濰濵濹濼濽瀀瀅瀆瀇瀍瀗瀠瀣瀯瀴瀷瀹瀼灃灄灈灉灊灋灔灕灝灞灎灤灥灬灮灵灶灾炁炅炆炔",4,"炛炤炫炰炱炴炷烊烑烓烔烕烖烘烜烤烺焃",4,"焋焌焏焞焠焫焭焯焰焱焸煁煅煆煇煊煋煐煒煗煚煜煞煠"],["8fcaa1","煨煹熀熅熇熌熒熚熛熠熢熯熰熲熳熺熿燀燁燄燋燌燓燖燙燚燜燸燾爀爇爈爉爓爗爚爝爟爤爫爯爴爸爹牁牂牃牅牎牏牐牓牕牖牚牜牞牠牣牨牫牮牯牱牷牸牻牼牿犄犉犍犎犓犛犨犭犮犱犴犾狁狇狉狌狕狖狘狟狥狳狴狺狻"],["8fcba1","狾猂猄猅猇猋猍猒猓猘猙猞猢猤猧猨猬猱猲猵猺猻猽獃獍獐獒獖獘獝獞獟獠獦獧獩獫獬獮獯獱獷獹獼玀玁玃玅玆玎玐玓玕玗玘玜玞玟玠玢玥玦玪玫玭玵玷玹玼玽玿珅珆珉珋珌珏珒珓珖珙珝珡珣珦珧珩珴珵珷珹珺珻珽"],["8fcca1","珿琀琁琄琇琊琑琚琛琤琦琨",9,"琹瑀瑃瑄瑆瑇瑋瑍瑑瑒瑗瑝瑢瑦瑧瑨瑫瑭瑮瑱瑲璀璁璅璆璇璉璏璐璑璒璘璙璚璜璟璠璡璣璦璨璩璪璫璮璯璱璲璵璹璻璿瓈瓉瓌瓐瓓瓘瓚瓛瓞瓟瓤瓨瓪瓫瓯瓴瓺瓻瓼瓿甆"],["8fcda1","甒甖甗甠甡甤甧甩甪甯甶甹甽甾甿畀畃畇畈畎畐畒畗畞畟畡畯畱畹",5,"疁疅疐疒疓疕疙疜疢疤疴疺疿痀痁痄痆痌痎痏痗痜痟痠痡痤痧痬痮痯痱痹瘀瘂瘃瘄瘇瘈瘊瘌瘏瘒瘓瘕瘖瘙瘛瘜瘝瘞瘣瘥瘦瘩瘭瘲瘳瘵瘸瘹"],["8fcea1","瘺瘼癊癀癁癃癄癅癉癋癕癙癟癤癥癭癮癯癱癴皁皅皌皍皕皛皜皝皟皠皢",6,"皪皭皽盁盅盉盋盌盎盔盙盠盦盨盬盰盱盶盹盼眀眆眊眎眒眔眕眗眙眚眜眢眨眭眮眯眴眵眶眹眽眾睂睅睆睊睍睎睏睒睖睗睜睞睟睠睢"],["8fcfa1","睤睧睪睬睰睲睳睴睺睽瞀瞄瞌瞍瞔瞕瞖瞚瞟瞢瞧瞪瞮瞯瞱瞵瞾矃矉矑矒矕矙矞矟矠矤矦矪矬矰矱矴矸矻砅砆砉砍砎砑砝砡砢砣砭砮砰砵砷硃硄硇硈硌硎硒硜硞硠硡硣硤硨硪确硺硾碊碏碔碘碡碝碞碟碤碨碬碭碰碱碲碳"],["8fd0a1","碻碽碿磇磈磉磌磎磒磓磕磖磤磛磟磠磡磦磪磲磳礀磶磷磺磻磿礆礌礐礚礜礞礟礠礥礧礩礭礱礴礵礻礽礿祄祅祆祊祋祏祑祔祘祛祜祧祩祫祲祹祻祼祾禋禌禑禓禔禕禖禘禛禜禡禨禩禫禯禱禴禸离秂秄秇秈秊秏秔秖秚秝秞"],["8fd1a1","秠秢秥秪秫秭秱秸秼稂稃稇稉稊稌稑稕稛稞稡稧稫稭稯稰稴稵稸稹稺穄穅穇穈穌穕穖穙穜穝穟穠穥穧穪穭穵穸穾窀窂窅窆窊窋窐窑窔窞窠窣窬窳窵窹窻窼竆竉竌竎竑竛竨竩竫竬竱竴竻竽竾笇笔笟笣笧笩笪笫笭笮笯笰"],["8fd2a1","笱笴笽笿筀筁筇筎筕筠筤筦筩筪筭筯筲筳筷箄箉箎箐箑箖箛箞箠箥箬箯箰箲箵箶箺箻箼箽篂篅篈篊篔篖篗篙篚篛篨篪篲篴篵篸篹篺篼篾簁簂簃簄簆簉簋簌簎簏簙簛簠簥簦簨簬簱簳簴簶簹簺籆籊籕籑籒籓籙",5],["8fd3a1","籡籣籧籩籭籮籰籲籹籼籽粆粇粏粔粞粠粦粰粶粷粺粻粼粿糄糇糈糉糍糏糓糔糕糗糙糚糝糦糩糫糵紃紇紈紉紏紑紒紓紖紝紞紣紦紪紭紱紼紽紾絀絁絇絈絍絑絓絗絙絚絜絝絥絧絪絰絸絺絻絿綁綂綃綅綆綈綋綌綍綑綖綗綝"],["8fd4a1","綞綦綧綪綳綶綷綹緂",4,"緌緍緎緗緙縀緢緥緦緪緫緭緱緵緶緹緺縈縐縑縕縗縜縝縠縧縨縬縭縯縳縶縿繄繅繇繎繐繒繘繟繡繢繥繫繮繯繳繸繾纁纆纇纊纍纑纕纘纚纝纞缼缻缽缾缿罃罄罇罏罒罓罛罜罝罡罣罤罥罦罭"],["8fd5a1","罱罽罾罿羀羋羍羏羐羑羖羗羜羡羢羦羪羭羴羼羿翀翃翈翎翏翛翟翣翥翨翬翮翯翲翺翽翾翿耇耈耊耍耎耏耑耓耔耖耝耞耟耠耤耦耬耮耰耴耵耷耹耺耼耾聀聄聠聤聦聭聱聵肁肈肎肜肞肦肧肫肸肹胈胍胏胒胔胕胗胘胠胭胮"],["8fd6a1","胰胲胳胶胹胺胾脃脋脖脗脘脜脞脠脤脧脬脰脵脺脼腅腇腊腌腒腗腠腡腧腨腩腭腯腷膁膐膄膅膆膋膎膖膘膛膞膢膮膲膴膻臋臃臅臊臎臏臕臗臛臝臞臡臤臫臬臰臱臲臵臶臸臹臽臿舀舃舏舓舔舙舚舝舡舢舨舲舴舺艃艄艅艆"],["8fd7a1","艋艎艏艑艖艜艠艣艧艭艴艻艽艿芀芁芃芄芇芉芊芎芑芔芖芘芚芛芠芡芣芤芧芨芩芪芮芰芲芴芷芺芼芾芿苆苐苕苚苠苢苤苨苪苭苯苶苷苽苾茀茁茇茈茊茋荔茛茝茞茟茡茢茬茭茮茰茳茷茺茼茽荂荃荄荇荍荎荑荕荖荗荰荸"],["8fd8a1","荽荿莀莂莄莆莍莒莔莕莘莙莛莜莝莦莧莩莬莾莿菀菇菉菏菐菑菔菝荓菨菪菶菸菹菼萁萆萊萏萑萕萙莭萯萹葅葇葈葊葍葏葑葒葖葘葙葚葜葠葤葥葧葪葰葳葴葶葸葼葽蒁蒅蒒蒓蒕蒞蒦蒨蒩蒪蒯蒱蒴蒺蒽蒾蓀蓂蓇蓈蓌蓏蓓"],["8fd9a1","蓜蓧蓪蓯蓰蓱蓲蓷蔲蓺蓻蓽蔂蔃蔇蔌蔎蔐蔜蔞蔢蔣蔤蔥蔧蔪蔫蔯蔳蔴蔶蔿蕆蕏",4,"蕖蕙蕜",6,"蕤蕫蕯蕹蕺蕻蕽蕿薁薅薆薉薋薌薏薓薘薝薟薠薢薥薧薴薶薷薸薼薽薾薿藂藇藊藋藎薭藘藚藟藠藦藨藭藳藶藼"],["8fdaa1","藿蘀蘄蘅蘍蘎蘐蘑蘒蘘蘙蘛蘞蘡蘧蘩蘶蘸蘺蘼蘽虀虂虆虒虓虖虗虘虙虝虠",4,"虩虬虯虵虶虷虺蚍蚑蚖蚘蚚蚜蚡蚦蚧蚨蚭蚱蚳蚴蚵蚷蚸蚹蚿蛀蛁蛃蛅蛑蛒蛕蛗蛚蛜蛠蛣蛥蛧蚈蛺蛼蛽蜄蜅蜇蜋蜎蜏蜐蜓蜔蜙蜞蜟蜡蜣"],["8fdba1","蜨蜮蜯蜱蜲蜹蜺蜼蜽蜾蝀蝃蝅蝍蝘蝝蝡蝤蝥蝯蝱蝲蝻螃",6,"螋螌螐螓螕螗螘螙螞螠螣螧螬螭螮螱螵螾螿蟁蟈蟉蟊蟎蟕蟖蟙蟚蟜蟟蟢蟣蟤蟪蟫蟭蟱蟳蟸蟺蟿蠁蠃蠆蠉蠊蠋蠐蠙蠒蠓蠔蠘蠚蠛蠜蠞蠟蠨蠭蠮蠰蠲蠵"],["8fdca1","蠺蠼衁衃衅衈衉衊衋衎衑衕衖衘衚衜衟衠衤衩衱衹衻袀袘袚袛袜袟袠袨袪袺袽袾裀裊",4,"裑裒裓裛裞裧裯裰裱裵裷褁褆褍褎褏褕褖褘褙褚褜褠褦褧褨褰褱褲褵褹褺褾襀襂襅襆襉襏襒襗襚襛襜襡襢襣襫襮襰襳襵襺"],["8fdda1","襻襼襽覉覍覐覔覕覛覜覟覠覥覰覴覵覶覷覼觔",4,"觥觩觫觭觱觳觶觹觽觿訄訅訇訏訑訒訔訕訞訠訢訤訦訫訬訯訵訷訽訾詀詃詅詇詉詍詎詓詖詗詘詜詝詡詥詧詵詶詷詹詺詻詾詿誀誃誆誋誏誐誒誖誗誙誟誧誩誮誯誳"],["8fdea1","誶誷誻誾諃諆諈諉諊諑諓諔諕諗諝諟諬諰諴諵諶諼諿謅謆謋謑謜謞謟謊謭謰謷謼譂",4,"譈譒譓譔譙譍譞譣譭譶譸譹譼譾讁讄讅讋讍讏讔讕讜讞讟谸谹谽谾豅豇豉豋豏豑豓豔豗豘豛豝豙豣豤豦豨豩豭豳豵豶豻豾貆"],["8fdfa1","貇貋貐貒貓貙貛貜貤貹貺賅賆賉賋賏賖賕賙賝賡賨賬賯賰賲賵賷賸賾賿贁贃贉贒贗贛赥赩赬赮赿趂趄趈趍趐趑趕趞趟趠趦趫趬趯趲趵趷趹趻跀跅跆跇跈跊跎跑跔跕跗跙跤跥跧跬跰趼跱跲跴跽踁踄踅踆踋踑踔踖踠踡踢"],["8fe0a1","踣踦踧踱踳踶踷踸踹踽蹀蹁蹋蹍蹎蹏蹔蹛蹜蹝蹞蹡蹢蹩蹬蹭蹯蹰蹱蹹蹺蹻躂躃躉躐躒躕躚躛躝躞躢躧躩躭躮躳躵躺躻軀軁軃軄軇軏軑軔軜軨軮軰軱軷軹軺軭輀輂輇輈輏輐輖輗輘輞輠輡輣輥輧輨輬輭輮輴輵輶輷輺轀轁"],["8fe1a1","轃轇轏轑",4,"轘轝轞轥辝辠辡辤辥辦辵辶辸达迀迁迆迊迋迍运迒迓迕迠迣迤迨迮迱迵迶迻迾适逄逈逌逘逛逨逩逯逪逬逭逳逴逷逿遃遄遌遛遝遢遦遧遬遰遴遹邅邈邋邌邎邐邕邗邘邙邛邠邡邢邥邰邲邳邴邶邽郌邾郃"],["8fe2a1","郄郅郇郈郕郗郘郙郜郝郟郥郒郶郫郯郰郴郾郿鄀鄄鄅鄆鄈鄍鄐鄔鄖鄗鄘鄚鄜鄞鄠鄥鄢鄣鄧鄩鄮鄯鄱鄴鄶鄷鄹鄺鄼鄽酃酇酈酏酓酗酙酚酛酡酤酧酭酴酹酺酻醁醃醅醆醊醎醑醓醔醕醘醞醡醦醨醬醭醮醰醱醲醳醶醻醼醽醿"],["8fe3a1","釂釃釅釓釔釗釙釚釞釤釥釩釪釬",5,"釷釹釻釽鈀鈁鈄鈅鈆鈇鈉鈊鈌鈐鈒鈓鈖鈘鈜鈝鈣鈤鈥鈦鈨鈮鈯鈰鈳鈵鈶鈸鈹鈺鈼鈾鉀鉂鉃鉆鉇鉊鉍鉎鉏鉑鉘鉙鉜鉝鉠鉡鉥鉧鉨鉩鉮鉯鉰鉵",4,"鉻鉼鉽鉿銈銉銊銍銎銒銗"],["8fe4a1","銙銟銠銤銥銧銨銫銯銲銶銸銺銻銼銽銿",4,"鋅鋆鋇鋈鋋鋌鋍鋎鋐鋓鋕鋗鋘鋙鋜鋝鋟鋠鋡鋣鋥鋧鋨鋬鋮鋰鋹鋻鋿錀錂錈錍錑錔錕錜錝錞錟錡錤錥錧錩錪錳錴錶錷鍇鍈鍉鍐鍑鍒鍕鍗鍘鍚鍞鍤鍥鍧鍩鍪鍭鍯鍰鍱鍳鍴鍶"],["8fe5a1","鍺鍽鍿鎀鎁鎂鎈鎊鎋鎍鎏鎒鎕鎘鎛鎞鎡鎣鎤鎦鎨鎫鎴鎵鎶鎺鎩鏁鏄鏅鏆鏇鏉",4,"鏓鏙鏜鏞鏟鏢鏦鏧鏹鏷鏸鏺鏻鏽鐁鐂鐄鐈鐉鐍鐎鐏鐕鐖鐗鐟鐮鐯鐱鐲鐳鐴鐻鐿鐽鑃鑅鑈鑊鑌鑕鑙鑜鑟鑡鑣鑨鑫鑭鑮鑯鑱鑲钄钃镸镹"],["8fe6a1","镾閄閈閌閍閎閝閞閟閡閦閩閫閬閴閶閺閽閿闆闈闉闋闐闑闒闓闙闚闝闞闟闠闤闦阝阞阢阤阥阦阬阱阳阷阸阹阺阼阽陁陒陔陖陗陘陡陮陴陻陼陾陿隁隂隃隄隉隑隖隚隝隟隤隥隦隩隮隯隳隺雊雒嶲雘雚雝雞雟雩雯雱雺霂"],["8fe7a1","霃霅霉霚霛霝霡霢霣霨霱霳靁靃靊靎靏靕靗靘靚靛靣靧靪靮靳靶靷靸靻靽靿鞀鞉鞕鞖鞗鞙鞚鞞鞟鞢鞬鞮鞱鞲鞵鞶鞸鞹鞺鞼鞾鞿韁韄韅韇韉韊韌韍韎韐韑韔韗韘韙韝韞韠韛韡韤韯韱韴韷韸韺頇頊頙頍頎頔頖頜頞頠頣頦"],["8fe8a1","頫頮頯頰頲頳頵頥頾顄顇顊顑顒顓顖顗顙顚顢顣顥顦顪顬颫颭颮颰颴颷颸颺颻颿飂飅飈飌飡飣飥飦飧飪飳飶餂餇餈餑餕餖餗餚餛餜餟餢餦餧餫餱",4,"餹餺餻餼饀饁饆饇饈饍饎饔饘饙饛饜饞饟饠馛馝馟馦馰馱馲馵"],["8fe9a1","馹馺馽馿駃駉駓駔駙駚駜駞駧駪駫駬駰駴駵駹駽駾騂騃騄騋騌騐騑騖騞騠騢騣騤騧騭騮騳騵騶騸驇驁驄驊驋驌驎驑驔驖驝骪骬骮骯骲骴骵骶骹骻骾骿髁髃髆髈髎髐髒髕髖髗髛髜髠髤髥髧髩髬髲髳髵髹髺髽髿",4],["8feaa1","鬄鬅鬈鬉鬋鬌鬍鬎鬐鬒鬖鬙鬛鬜鬠鬦鬫鬭鬳鬴鬵鬷鬹鬺鬽魈魋魌魕魖魗魛魞魡魣魥魦魨魪",4,"魳魵魷魸魹魿鮀鮄鮅鮆鮇鮉鮊鮋鮍鮏鮐鮔鮚鮝鮞鮦鮧鮩鮬鮰鮱鮲鮷鮸鮻鮼鮾鮿鯁鯇鯈鯎鯐鯗鯘鯝鯟鯥鯧鯪鯫鯯鯳鯷鯸"],["8feba1","鯹鯺鯽鯿鰀鰂鰋鰏鰑鰖鰘鰙鰚鰜鰞鰢鰣鰦",4,"鰱鰵鰶鰷鰽鱁鱃鱄鱅鱉鱊鱎鱏鱐鱓鱔鱖鱘鱛鱝鱞鱟鱣鱩鱪鱜鱫鱨鱮鱰鱲鱵鱷鱻鳦鳲鳷鳹鴋鴂鴑鴗鴘鴜鴝鴞鴯鴰鴲鴳鴴鴺鴼鵅鴽鵂鵃鵇鵊鵓鵔鵟鵣鵢鵥鵩鵪鵫鵰鵶鵷鵻"],["8feca1","鵼鵾鶃鶄鶆鶊鶍鶎鶒鶓鶕鶖鶗鶘鶡鶪鶬鶮鶱鶵鶹鶼鶿鷃鷇鷉鷊鷔鷕鷖鷗鷚鷞鷟鷠鷥鷧鷩鷫鷮鷰鷳鷴鷾鸊鸂鸇鸎鸐鸑鸒鸕鸖鸙鸜鸝鹺鹻鹼麀麂麃麄麅麇麎麏麖麘麛麞麤麨麬麮麯麰麳麴麵黆黈黋黕黟黤黧黬黭黮黰黱黲黵"],["8feda1","黸黿鼂鼃鼉鼏鼐鼑鼒鼔鼖鼗鼙鼚鼛鼟鼢鼦鼪鼫鼯鼱鼲鼴鼷鼹鼺鼼鼽鼿齁齃",4,"齓齕齖齗齘齚齝齞齨齩齭",4,"齳齵齺齽龏龐龑龒龔龖龗龞龡龢龣龥"]]'); 81975 81976 /***/ }), 81977 81978 /***/ 83121: 81979 /***/ ((module) => { 81980 81981 "use strict"; 81982 module.exports = JSON.parse('{"uChars":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],"gbChars":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]}'); 81983 81984 /***/ }), 81985 81986 /***/ 44346: 81987 /***/ ((module) => { 81988 81989 "use strict"; 81990 module.exports = JSON.parse('[["a140","",62],["a180","",32],["a240","",62],["a280","",32],["a2ab","",5],["a2e3","€"],["a2ef",""],["a2fd",""],["a340","",62],["a380","",31," "],["a440","",62],["a480","",32],["a4f4","",10],["a540","",62],["a580","",32],["a5f7","",7],["a640","",62],["a680","",32],["a6b9","",7],["a6d9","",6],["a6ec",""],["a6f3",""],["a6f6","",8],["a740","",62],["a780","",32],["a7c2","",14],["a7f2","",12],["a896","",10],["a8bc","ḿ"],["a8bf","ǹ"],["a8c1",""],["a8ea","",20],["a958",""],["a95b",""],["a95d",""],["a989","〾⿰",11],["a997","",12],["a9f0","",14],["aaa1","",93],["aba1","",93],["aca1","",93],["ada1","",93],["aea1","",93],["afa1","",93],["d7fa","",4],["f8a1","",93],["f9a1","",93],["faa1","",93],["fba1","",93],["fca1","",93],["fda1","",93],["fe50","⺁⺄㑳㑇⺈⺋㖞㘚㘎⺌⺗㥮㤘㧏㧟㩳㧐㭎㱮㳠⺧⺪䁖䅟⺮䌷⺳⺶⺷䎱䎬⺻䏝䓖䙡䙌"],["fe80","䜣䜩䝼䞍⻊䥇䥺䥽䦂䦃䦅䦆䦟䦛䦷䦶䲣䲟䲠䲡䱷䲢䴓",6,"䶮",93],["8135f437",""]]'); 81991 81992 /***/ }), 81993 81994 /***/ 27014: 81995 /***/ ((module) => { 81996 81997 "use strict"; 81998 module.exports = JSON.parse('[["0","\\u0000",128],["a1","。",62],["8140"," 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈",9,"+-±×"],["8180","÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓"],["81b8","∈∋⊆⊇⊂⊃∪∩"],["81c8","∧∨¬⇒⇔∀∃"],["81da","∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬"],["81f0","ʼn♯♭♪†‡¶"],["81fc","◯"],["824f","0",9],["8260","A",25],["8281","a",25],["829f","ぁ",82],["8340","ァ",62],["8380","ム",22],["839f","Α",16,"Σ",6],["83bf","α",16,"σ",6],["8440","А",5,"ЁЖ",25],["8470","а",5,"ёж",7],["8480","о",17],["849f","─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂"],["8740","①",19,"Ⅰ",9],["875f","㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡"],["877e","㍻"],["8780","〝〟№㏍℡㊤",4,"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪"],["889f","亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭"],["8940","院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円"],["8980","園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改"],["8a40","魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫"],["8a80","橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄"],["8b40","機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救"],["8b80","朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈"],["8c40","掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨"],["8c80","劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向"],["8d40","后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降"],["8d80","項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷"],["8e40","察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止"],["8e80","死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周"],["8f40","宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳"],["8f80","準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾"],["9040","拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨"],["9080","逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線"],["9140","繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻"],["9180","操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只"],["9240","叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄"],["9280","逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓"],["9340","邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬"],["9380","凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入"],["9440","如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅"],["9480","楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美"],["9540","鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷"],["9580","斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋"],["9640","法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆"],["9680","摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒"],["9740","諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲"],["9780","沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯"],["9840","蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕"],["989f","弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲"],["9940","僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭"],["9980","凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨"],["9a40","咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸"],["9a80","噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩"],["9b40","奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀"],["9b80","它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏"],["9c40","廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠"],["9c80","怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛"],["9d40","戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫"],["9d80","捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼"],["9e40","曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎"],["9e80","梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣"],["9f40","檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯"],["9f80","麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌"],["e040","漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝"],["e080","烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱"],["e140","瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿"],["e180","痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"],["e240","磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰"],["e280","窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆"],["e340","紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷"],["e380","縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋"],["e440","隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤"],["e480","艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"],["e540","蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬"],["e580","蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞"],["e640","襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧"],["e680","諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊"],["e740","蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜"],["e780","轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮"],["e840","錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙"],["e880","閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰"],["e940","顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃"],["e980","騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈"],["ea40","鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯"],["ea80","黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙"],["ed40","纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏"],["ed80","塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱"],["ee40","犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙"],["ee80","蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"],["eeef","ⅰ",9,"¬¦'""],["f040","",62],["f080","",124],["f140","",62],["f180","",124],["f240","",62],["f280","",124],["f340","",62],["f380","",124],["f440","",62],["f480","",124],["f540","",62],["f580","",124],["f640","",62],["f680","",124],["f740","",62],["f780","",124],["f840","",62],["f880","",124],["f940",""],["fa40","ⅰ",9,"Ⅰ",9,"¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊"],["fa80","兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯"],["fb40","涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神"],["fb80","祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙"],["fc40","髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"]]'); 81999 82000 /***/ }), 82001 82002 /***/ 80557: 82003 /***/ ((module) => { 82004 82005 "use strict"; 82006 module.exports = JSON.parse('{"name":"make-fetch-happen","version":"13.0.1","description":"Opinionated, caching, retrying fetch client","main":"lib/index.js","files":["bin/","lib/"],"scripts":{"test":"tap","posttest":"npm run lint","eslint":"eslint","lint":"eslint \\"**/*.{js,cjs,ts,mjs,jsx,tsx}\\"","lintfix":"npm run lint -- --fix","postlint":"template-oss-check","snap":"tap","template-oss-apply":"template-oss-apply --force"},"repository":{"type":"git","url":"https://github.com/npm/make-fetch-happen.git"},"keywords":["http","request","fetch","mean girls","caching","cache","subresource integrity"],"author":"GitHub Inc.","license":"ISC","dependencies":{"@npmcli/agent":"^2.0.0","cacache":"^18.0.0","http-cache-semantics":"^4.1.1","is-lambda":"^1.0.1","minipass":"^7.0.2","minipass-fetch":"^3.0.0","minipass-flush":"^1.0.5","minipass-pipeline":"^1.2.4","negotiator":"^0.6.3","proc-log":"^4.2.0","promise-retry":"^2.0.1","ssri":"^10.0.0"},"devDependencies":{"@npmcli/eslint-config":"^4.0.0","@npmcli/template-oss":"4.21.4","nock":"^13.2.4","safe-buffer":"^5.2.1","standard-version":"^9.3.2","tap":"^16.0.0"},"engines":{"node":"^16.14.0 || >=18.0.0"},"tap":{"color":1,"files":"test/*.js","check-coverage":true,"timeout":60,"nyc-arg":["--exclude","tap-snapshots/**"]},"templateOSS":{"//@npmcli/template-oss":"This file is partially managed by @npmcli/template-oss. Edits may be overwritten.","version":"4.21.4","publish":"true"}}'); 82007 82008 /***/ }), 82009 82010 /***/ 40500: 82011 /***/ ((module) => { 82012 82013 "use strict"; 82014 module.exports = {"i8":"3.0.4"}; 82015 82016 /***/ }) 82017 82018 /******/ }); 82019 /************************************************************************/ 82020 /******/ // The module cache 82021 /******/ var __webpack_module_cache__ = {}; 82022 /******/ 82023 /******/ // The require function 82024 /******/ function __nccwpck_require__(moduleId) { 82025 /******/ // Check if module is in cache 82026 /******/ var cachedModule = __webpack_module_cache__[moduleId]; 82027 /******/ if (cachedModule !== undefined) { 82028 /******/ return cachedModule.exports; 82029 /******/ } 82030 /******/ // Create a new module (and put it into the cache) 82031 /******/ var module = __webpack_module_cache__[moduleId] = { 82032 /******/ // no module.id needed 82033 /******/ // no module.loaded needed 82034 /******/ exports: {} 82035 /******/ }; 82036 /******/ 82037 /******/ // Execute the module function 82038 /******/ var threw = true; 82039 /******/ try { 82040 /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __nccwpck_require__); 82041 /******/ threw = false; 82042 /******/ } finally { 82043 /******/ if(threw) delete __webpack_module_cache__[moduleId]; 82044 /******/ } 82045 /******/ 82046 /******/ // Return the exports of the module 82047 /******/ return module.exports; 82048 /******/ } 82049 /******/ 82050 /************************************************************************/ 82051 /******/ /* webpack/runtime/compat */ 82052 /******/ 82053 /******/ if (typeof __nccwpck_require__ !== 'undefined') __nccwpck_require__.ab = __dirname + "/"; 82054 /******/ 82055 /************************************************************************/ 82056 /******/ 82057 /******/ // startup 82058 /******/ // Load entry module and return exports 82059 /******/ // This entry module is referenced by other modules so it can't be inlined 82060 /******/ var __webpack_exports__ = __nccwpck_require__(3109); 82061 /******/ module.exports = __webpack_exports__; 82062 /******/ 82063 /******/ })() 82064 ; 82065 //# sourceMappingURL=index.js.map