diff --git a/dist/index.js b/dist/index.js
index 9791d35..f40a1d9 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -1750,1475 +1750,6 @@ function checkBypass(reqUrl) {
exports.checkBypass = checkBypass;
//# sourceMappingURL=proxy.js.map
-/***/ }),
-
-/***/ 7678:
-/***/ ((module, exports) => {
-
-
-///
-///
-///
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const typedArrayTypeNames = [
- 'Int8Array',
- 'Uint8Array',
- 'Uint8ClampedArray',
- 'Int16Array',
- 'Uint16Array',
- 'Int32Array',
- 'Uint32Array',
- 'Float32Array',
- 'Float64Array',
- 'BigInt64Array',
- 'BigUint64Array'
-];
-function isTypedArrayName(name) {
- return typedArrayTypeNames.includes(name);
-}
-const objectTypeNames = [
- 'Function',
- 'Generator',
- 'AsyncGenerator',
- 'GeneratorFunction',
- 'AsyncGeneratorFunction',
- 'AsyncFunction',
- 'Observable',
- 'Array',
- 'Buffer',
- 'Object',
- 'RegExp',
- 'Date',
- 'Error',
- 'Map',
- 'Set',
- 'WeakMap',
- 'WeakSet',
- 'ArrayBuffer',
- 'SharedArrayBuffer',
- 'DataView',
- 'Promise',
- 'URL',
- 'HTMLElement',
- ...typedArrayTypeNames
-];
-function isObjectTypeName(name) {
- return objectTypeNames.includes(name);
-}
-const primitiveTypeNames = [
- 'null',
- 'undefined',
- 'string',
- 'number',
- 'bigint',
- 'boolean',
- 'symbol'
-];
-function isPrimitiveTypeName(name) {
- return primitiveTypeNames.includes(name);
-}
-// eslint-disable-next-line @typescript-eslint/ban-types
-function isOfType(type) {
- return (value) => typeof value === type;
-}
-const { toString } = Object.prototype;
-const getObjectType = (value) => {
- const objectTypeName = toString.call(value).slice(8, -1);
- if (/HTML\w+Element/.test(objectTypeName) && is.domElement(value)) {
- return 'HTMLElement';
- }
- if (isObjectTypeName(objectTypeName)) {
- return objectTypeName;
- }
- return undefined;
-};
-const isObjectOfType = (type) => (value) => getObjectType(value) === type;
-function is(value) {
- if (value === null) {
- return 'null';
- }
- switch (typeof value) {
- case 'undefined':
- return 'undefined';
- case 'string':
- return 'string';
- case 'number':
- return 'number';
- case 'boolean':
- return 'boolean';
- case 'function':
- return 'Function';
- case 'bigint':
- return 'bigint';
- case 'symbol':
- return 'symbol';
- default:
- }
- if (is.observable(value)) {
- return 'Observable';
- }
- if (is.array(value)) {
- return 'Array';
- }
- if (is.buffer(value)) {
- return 'Buffer';
- }
- const tagType = getObjectType(value);
- if (tagType) {
- return tagType;
- }
- if (value instanceof String || value instanceof Boolean || value instanceof Number) {
- throw new TypeError('Please don\'t use object wrappers for primitive types');
- }
- return 'Object';
-}
-is.undefined = isOfType('undefined');
-is.string = isOfType('string');
-const isNumberType = isOfType('number');
-is.number = (value) => isNumberType(value) && !is.nan(value);
-is.bigint = isOfType('bigint');
-// eslint-disable-next-line @typescript-eslint/ban-types
-is.function_ = isOfType('function');
-is.null_ = (value) => value === null;
-is.class_ = (value) => is.function_(value) && value.toString().startsWith('class ');
-is.boolean = (value) => value === true || value === false;
-is.symbol = isOfType('symbol');
-is.numericString = (value) => is.string(value) && !is.emptyStringOrWhitespace(value) && !Number.isNaN(Number(value));
-is.array = (value, assertion) => {
- if (!Array.isArray(value)) {
- return false;
- }
- if (!is.function_(assertion)) {
- return true;
- }
- return value.every(assertion);
-};
-is.buffer = (value) => { var _a, _b, _c, _d; return (_d = (_c = (_b = (_a = value) === null || _a === void 0 ? void 0 : _a.constructor) === null || _b === void 0 ? void 0 : _b.isBuffer) === null || _c === void 0 ? void 0 : _c.call(_b, value)) !== null && _d !== void 0 ? _d : false; };
-is.nullOrUndefined = (value) => is.null_(value) || is.undefined(value);
-is.object = (value) => !is.null_(value) && (typeof value === 'object' || is.function_(value));
-is.iterable = (value) => { var _a; return is.function_((_a = value) === null || _a === void 0 ? void 0 : _a[Symbol.iterator]); };
-is.asyncIterable = (value) => { var _a; return is.function_((_a = value) === null || _a === void 0 ? void 0 : _a[Symbol.asyncIterator]); };
-is.generator = (value) => is.iterable(value) && is.function_(value.next) && is.function_(value.throw);
-is.asyncGenerator = (value) => is.asyncIterable(value) && is.function_(value.next) && is.function_(value.throw);
-is.nativePromise = (value) => isObjectOfType('Promise')(value);
-const hasPromiseAPI = (value) => {
- var _a, _b;
- return is.function_((_a = value) === null || _a === void 0 ? void 0 : _a.then) &&
- is.function_((_b = value) === null || _b === void 0 ? void 0 : _b.catch);
-};
-is.promise = (value) => is.nativePromise(value) || hasPromiseAPI(value);
-is.generatorFunction = isObjectOfType('GeneratorFunction');
-is.asyncGeneratorFunction = (value) => getObjectType(value) === 'AsyncGeneratorFunction';
-is.asyncFunction = (value) => getObjectType(value) === 'AsyncFunction';
-// eslint-disable-next-line no-prototype-builtins, @typescript-eslint/ban-types
-is.boundFunction = (value) => is.function_(value) && !value.hasOwnProperty('prototype');
-is.regExp = isObjectOfType('RegExp');
-is.date = isObjectOfType('Date');
-is.error = isObjectOfType('Error');
-is.map = (value) => isObjectOfType('Map')(value);
-is.set = (value) => isObjectOfType('Set')(value);
-is.weakMap = (value) => isObjectOfType('WeakMap')(value);
-is.weakSet = (value) => isObjectOfType('WeakSet')(value);
-is.int8Array = isObjectOfType('Int8Array');
-is.uint8Array = isObjectOfType('Uint8Array');
-is.uint8ClampedArray = isObjectOfType('Uint8ClampedArray');
-is.int16Array = isObjectOfType('Int16Array');
-is.uint16Array = isObjectOfType('Uint16Array');
-is.int32Array = isObjectOfType('Int32Array');
-is.uint32Array = isObjectOfType('Uint32Array');
-is.float32Array = isObjectOfType('Float32Array');
-is.float64Array = isObjectOfType('Float64Array');
-is.bigInt64Array = isObjectOfType('BigInt64Array');
-is.bigUint64Array = isObjectOfType('BigUint64Array');
-is.arrayBuffer = isObjectOfType('ArrayBuffer');
-is.sharedArrayBuffer = isObjectOfType('SharedArrayBuffer');
-is.dataView = isObjectOfType('DataView');
-is.directInstanceOf = (instance, class_) => Object.getPrototypeOf(instance) === class_.prototype;
-is.urlInstance = (value) => isObjectOfType('URL')(value);
-is.urlString = (value) => {
- if (!is.string(value)) {
- return false;
- }
- try {
- new URL(value); // eslint-disable-line no-new
- return true;
- }
- catch (_a) {
- return false;
- }
-};
-// TODO: Use the `not` operator with a type guard here when it's available.
-// Example: `is.truthy = (value: unknown): value is (not false | not 0 | not '' | not undefined | not null) => Boolean(value);`
-is.truthy = (value) => Boolean(value);
-// Example: `is.falsy = (value: unknown): value is (not true | 0 | '' | undefined | null) => Boolean(value);`
-is.falsy = (value) => !value;
-is.nan = (value) => Number.isNaN(value);
-is.primitive = (value) => is.null_(value) || isPrimitiveTypeName(typeof value);
-is.integer = (value) => Number.isInteger(value);
-is.safeInteger = (value) => Number.isSafeInteger(value);
-is.plainObject = (value) => {
- // From: https://github.com/sindresorhus/is-plain-obj/blob/master/index.js
- if (toString.call(value) !== '[object Object]') {
- return false;
- }
- const prototype = Object.getPrototypeOf(value);
- return prototype === null || prototype === Object.getPrototypeOf({});
-};
-is.typedArray = (value) => isTypedArrayName(getObjectType(value));
-const isValidLength = (value) => is.safeInteger(value) && value >= 0;
-is.arrayLike = (value) => !is.nullOrUndefined(value) && !is.function_(value) && isValidLength(value.length);
-is.inRange = (value, range) => {
- if (is.number(range)) {
- return value >= Math.min(0, range) && value <= Math.max(range, 0);
- }
- if (is.array(range) && range.length === 2) {
- return value >= Math.min(...range) && value <= Math.max(...range);
- }
- throw new TypeError(`Invalid range: ${JSON.stringify(range)}`);
-};
-const NODE_TYPE_ELEMENT = 1;
-const DOM_PROPERTIES_TO_CHECK = [
- 'innerHTML',
- 'ownerDocument',
- 'style',
- 'attributes',
- 'nodeValue'
-];
-is.domElement = (value) => {
- return is.object(value) &&
- value.nodeType === NODE_TYPE_ELEMENT &&
- is.string(value.nodeName) &&
- !is.plainObject(value) &&
- DOM_PROPERTIES_TO_CHECK.every(property => property in value);
-};
-is.observable = (value) => {
- var _a, _b, _c, _d;
- if (!value) {
- return false;
- }
- // eslint-disable-next-line no-use-extend-native/no-use-extend-native
- if (value === ((_b = (_a = value)[Symbol.observable]) === null || _b === void 0 ? void 0 : _b.call(_a))) {
- return true;
- }
- if (value === ((_d = (_c = value)['@@observable']) === null || _d === void 0 ? void 0 : _d.call(_c))) {
- return true;
- }
- return false;
-};
-is.nodeStream = (value) => is.object(value) && is.function_(value.pipe) && !is.observable(value);
-is.infinite = (value) => value === Infinity || value === -Infinity;
-const isAbsoluteMod2 = (remainder) => (value) => is.integer(value) && Math.abs(value % 2) === remainder;
-is.evenInteger = isAbsoluteMod2(0);
-is.oddInteger = isAbsoluteMod2(1);
-is.emptyArray = (value) => is.array(value) && value.length === 0;
-is.nonEmptyArray = (value) => is.array(value) && value.length > 0;
-is.emptyString = (value) => is.string(value) && value.length === 0;
-// TODO: Use `not ''` when the `not` operator is available.
-is.nonEmptyString = (value) => is.string(value) && value.length > 0;
-const isWhiteSpaceString = (value) => is.string(value) && !/\S/.test(value);
-is.emptyStringOrWhitespace = (value) => is.emptyString(value) || isWhiteSpaceString(value);
-is.emptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length === 0;
-// TODO: Use `not` operator here to remove `Map` and `Set` from type guard:
-// - https://github.com/Microsoft/TypeScript/pull/29317
-is.nonEmptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length > 0;
-is.emptySet = (value) => is.set(value) && value.size === 0;
-is.nonEmptySet = (value) => is.set(value) && value.size > 0;
-is.emptyMap = (value) => is.map(value) && value.size === 0;
-is.nonEmptyMap = (value) => is.map(value) && value.size > 0;
-const predicateOnArray = (method, predicate, values) => {
- if (!is.function_(predicate)) {
- throw new TypeError(`Invalid predicate: ${JSON.stringify(predicate)}`);
- }
- if (values.length === 0) {
- throw new TypeError('Invalid number of values');
- }
- return method.call(values, predicate);
-};
-is.any = (predicate, ...values) => {
- const predicates = is.array(predicate) ? predicate : [predicate];
- return predicates.some(singlePredicate => predicateOnArray(Array.prototype.some, singlePredicate, values));
-};
-is.all = (predicate, ...values) => predicateOnArray(Array.prototype.every, predicate, values);
-const assertType = (condition, description, value) => {
- if (!condition) {
- throw new TypeError(`Expected value which is \`${description}\`, received value of type \`${is(value)}\`.`);
- }
-};
-exports.assert = {
- // Unknowns.
- undefined: (value) => assertType(is.undefined(value), 'undefined', value),
- string: (value) => assertType(is.string(value), 'string', value),
- number: (value) => assertType(is.number(value), 'number', value),
- bigint: (value) => assertType(is.bigint(value), 'bigint', value),
- // eslint-disable-next-line @typescript-eslint/ban-types
- function_: (value) => assertType(is.function_(value), 'Function', value),
- null_: (value) => assertType(is.null_(value), 'null', value),
- class_: (value) => assertType(is.class_(value), "Class" /* class_ */, value),
- boolean: (value) => assertType(is.boolean(value), 'boolean', value),
- symbol: (value) => assertType(is.symbol(value), 'symbol', value),
- numericString: (value) => assertType(is.numericString(value), "string with a number" /* numericString */, value),
- array: (value, assertion) => {
- const assert = assertType;
- assert(is.array(value), 'Array', value);
- if (assertion) {
- value.forEach(assertion);
- }
- },
- buffer: (value) => assertType(is.buffer(value), 'Buffer', value),
- nullOrUndefined: (value) => assertType(is.nullOrUndefined(value), "null or undefined" /* nullOrUndefined */, value),
- object: (value) => assertType(is.object(value), 'Object', value),
- iterable: (value) => assertType(is.iterable(value), "Iterable" /* iterable */, value),
- asyncIterable: (value) => assertType(is.asyncIterable(value), "AsyncIterable" /* asyncIterable */, value),
- generator: (value) => assertType(is.generator(value), 'Generator', value),
- asyncGenerator: (value) => assertType(is.asyncGenerator(value), 'AsyncGenerator', value),
- nativePromise: (value) => assertType(is.nativePromise(value), "native Promise" /* nativePromise */, value),
- promise: (value) => assertType(is.promise(value), 'Promise', value),
- generatorFunction: (value) => assertType(is.generatorFunction(value), 'GeneratorFunction', value),
- asyncGeneratorFunction: (value) => assertType(is.asyncGeneratorFunction(value), 'AsyncGeneratorFunction', value),
- // eslint-disable-next-line @typescript-eslint/ban-types
- asyncFunction: (value) => assertType(is.asyncFunction(value), 'AsyncFunction', value),
- // eslint-disable-next-line @typescript-eslint/ban-types
- boundFunction: (value) => assertType(is.boundFunction(value), 'Function', value),
- regExp: (value) => assertType(is.regExp(value), 'RegExp', value),
- date: (value) => assertType(is.date(value), 'Date', value),
- error: (value) => assertType(is.error(value), 'Error', value),
- map: (value) => assertType(is.map(value), 'Map', value),
- set: (value) => assertType(is.set(value), 'Set', value),
- weakMap: (value) => assertType(is.weakMap(value), 'WeakMap', value),
- weakSet: (value) => assertType(is.weakSet(value), 'WeakSet', value),
- int8Array: (value) => assertType(is.int8Array(value), 'Int8Array', value),
- uint8Array: (value) => assertType(is.uint8Array(value), 'Uint8Array', value),
- uint8ClampedArray: (value) => assertType(is.uint8ClampedArray(value), 'Uint8ClampedArray', value),
- int16Array: (value) => assertType(is.int16Array(value), 'Int16Array', value),
- uint16Array: (value) => assertType(is.uint16Array(value), 'Uint16Array', value),
- int32Array: (value) => assertType(is.int32Array(value), 'Int32Array', value),
- uint32Array: (value) => assertType(is.uint32Array(value), 'Uint32Array', value),
- float32Array: (value) => assertType(is.float32Array(value), 'Float32Array', value),
- float64Array: (value) => assertType(is.float64Array(value), 'Float64Array', value),
- bigInt64Array: (value) => assertType(is.bigInt64Array(value), 'BigInt64Array', value),
- bigUint64Array: (value) => assertType(is.bigUint64Array(value), 'BigUint64Array', value),
- arrayBuffer: (value) => assertType(is.arrayBuffer(value), 'ArrayBuffer', value),
- sharedArrayBuffer: (value) => assertType(is.sharedArrayBuffer(value), 'SharedArrayBuffer', value),
- dataView: (value) => assertType(is.dataView(value), 'DataView', value),
- urlInstance: (value) => assertType(is.urlInstance(value), 'URL', value),
- urlString: (value) => assertType(is.urlString(value), "string with a URL" /* urlString */, value),
- truthy: (value) => assertType(is.truthy(value), "truthy" /* truthy */, value),
- falsy: (value) => assertType(is.falsy(value), "falsy" /* falsy */, value),
- nan: (value) => assertType(is.nan(value), "NaN" /* nan */, value),
- primitive: (value) => assertType(is.primitive(value), "primitive" /* primitive */, value),
- integer: (value) => assertType(is.integer(value), "integer" /* integer */, value),
- safeInteger: (value) => assertType(is.safeInteger(value), "integer" /* safeInteger */, value),
- plainObject: (value) => assertType(is.plainObject(value), "plain object" /* plainObject */, value),
- typedArray: (value) => assertType(is.typedArray(value), "TypedArray" /* typedArray */, value),
- arrayLike: (value) => assertType(is.arrayLike(value), "array-like" /* arrayLike */, value),
- domElement: (value) => assertType(is.domElement(value), "HTMLElement" /* domElement */, value),
- observable: (value) => assertType(is.observable(value), 'Observable', value),
- nodeStream: (value) => assertType(is.nodeStream(value), "Node.js Stream" /* nodeStream */, value),
- infinite: (value) => assertType(is.infinite(value), "infinite number" /* infinite */, value),
- emptyArray: (value) => assertType(is.emptyArray(value), "empty array" /* emptyArray */, value),
- nonEmptyArray: (value) => assertType(is.nonEmptyArray(value), "non-empty array" /* nonEmptyArray */, value),
- emptyString: (value) => assertType(is.emptyString(value), "empty string" /* emptyString */, value),
- nonEmptyString: (value) => assertType(is.nonEmptyString(value), "non-empty string" /* nonEmptyString */, value),
- emptyStringOrWhitespace: (value) => assertType(is.emptyStringOrWhitespace(value), "empty string or whitespace" /* emptyStringOrWhitespace */, value),
- emptyObject: (value) => assertType(is.emptyObject(value), "empty object" /* emptyObject */, value),
- nonEmptyObject: (value) => assertType(is.nonEmptyObject(value), "non-empty object" /* nonEmptyObject */, value),
- emptySet: (value) => assertType(is.emptySet(value), "empty set" /* emptySet */, value),
- nonEmptySet: (value) => assertType(is.nonEmptySet(value), "non-empty set" /* nonEmptySet */, value),
- emptyMap: (value) => assertType(is.emptyMap(value), "empty map" /* emptyMap */, value),
- nonEmptyMap: (value) => assertType(is.nonEmptyMap(value), "non-empty map" /* nonEmptyMap */, value),
- // Numbers.
- evenInteger: (value) => assertType(is.evenInteger(value), "even integer" /* evenInteger */, value),
- oddInteger: (value) => assertType(is.oddInteger(value), "odd integer" /* oddInteger */, value),
- // Two arguments.
- directInstanceOf: (instance, class_) => assertType(is.directInstanceOf(instance, class_), "T" /* directInstanceOf */, instance),
- inRange: (value, range) => assertType(is.inRange(value, range), "in range" /* inRange */, value),
- // Variadic functions.
- any: (predicate, ...values) => assertType(is.any(predicate, ...values), "predicate returns truthy for any value" /* any */, values),
- all: (predicate, ...values) => assertType(is.all(predicate, ...values), "predicate returns truthy for all values" /* all */, values)
-};
-// Some few keywords are reserved, but we'll populate them for Node.js users
-// See https://github.com/Microsoft/TypeScript/issues/2536
-Object.defineProperties(is, {
- class: {
- value: is.class_
- },
- function: {
- value: is.function_
- },
- null: {
- value: is.null_
- }
-});
-Object.defineProperties(exports.assert, {
- class: {
- value: exports.assert.class_
- },
- function: {
- value: exports.assert.function_
- },
- null: {
- value: exports.assert.null_
- }
-});
-exports["default"] = is;
-// For CommonJS default export support
-module.exports = is;
-module.exports["default"] = is;
-module.exports.assert = exports.assert;
-
-
-/***/ }),
-
-/***/ 8097:
-/***/ ((module, exports, __nccwpck_require__) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const defer_to_connect_1 = __nccwpck_require__(6214);
-const nodejsMajorVersion = Number(process.versions.node.split('.')[0]);
-const timer = (request) => {
- const timings = {
- start: Date.now(),
- socket: undefined,
- lookup: undefined,
- connect: undefined,
- secureConnect: undefined,
- upload: undefined,
- response: undefined,
- end: undefined,
- error: undefined,
- abort: undefined,
- phases: {
- wait: undefined,
- dns: undefined,
- tcp: undefined,
- tls: undefined,
- request: undefined,
- firstByte: undefined,
- download: undefined,
- total: undefined
- }
- };
- request.timings = timings;
- const handleError = (origin) => {
- const emit = origin.emit.bind(origin);
- origin.emit = (event, ...args) => {
- // Catches the `error` event
- if (event === 'error') {
- timings.error = Date.now();
- timings.phases.total = timings.error - timings.start;
- origin.emit = emit;
- }
- // Saves the original behavior
- return emit(event, ...args);
- };
- };
- handleError(request);
- request.prependOnceListener('abort', () => {
- timings.abort = Date.now();
- // Let the `end` response event be responsible for setting the total phase,
- // unless the Node.js major version is >= 13.
- if (!timings.response || nodejsMajorVersion >= 13) {
- timings.phases.total = Date.now() - timings.start;
- }
- });
- const onSocket = (socket) => {
- timings.socket = Date.now();
- timings.phases.wait = timings.socket - timings.start;
- const lookupListener = () => {
- timings.lookup = Date.now();
- timings.phases.dns = timings.lookup - timings.socket;
- };
- socket.prependOnceListener('lookup', lookupListener);
- defer_to_connect_1.default(socket, {
- connect: () => {
- timings.connect = Date.now();
- if (timings.lookup === undefined) {
- socket.removeListener('lookup', lookupListener);
- timings.lookup = timings.connect;
- timings.phases.dns = timings.lookup - timings.socket;
- }
- timings.phases.tcp = timings.connect - timings.lookup;
- // This callback is called before flushing any data,
- // so we don't need to set `timings.phases.request` here.
- },
- secureConnect: () => {
- timings.secureConnect = Date.now();
- timings.phases.tls = timings.secureConnect - timings.connect;
- }
- });
- };
- if (request.socket) {
- onSocket(request.socket);
- }
- else {
- request.prependOnceListener('socket', onSocket);
- }
- const onUpload = () => {
- var _a;
- timings.upload = Date.now();
- timings.phases.request = timings.upload - (_a = timings.secureConnect, (_a !== null && _a !== void 0 ? _a : timings.connect));
- };
- const writableFinished = () => {
- if (typeof request.writableFinished === 'boolean') {
- return request.writableFinished;
- }
- // Node.js doesn't have `request.writableFinished` property
- return request.finished && request.outputSize === 0 && (!request.socket || request.socket.writableLength === 0);
- };
- if (writableFinished()) {
- onUpload();
- }
- else {
- request.prependOnceListener('finish', onUpload);
- }
- request.prependOnceListener('response', (response) => {
- timings.response = Date.now();
- timings.phases.firstByte = timings.response - timings.upload;
- response.timings = timings;
- handleError(response);
- response.prependOnceListener('end', () => {
- timings.end = Date.now();
- timings.phases.download = timings.end - timings.response;
- timings.phases.total = timings.end - timings.start;
- });
- });
- return timings;
-};
-exports["default"] = timer;
-// For CommonJS default export support
-module.exports = timer;
-module.exports["default"] = timer;
-
-
-/***/ }),
-
-/***/ 2286:
-/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-
-
-const {
- V4MAPPED,
- ADDRCONFIG,
- ALL,
- promises: {
- Resolver: AsyncResolver
- },
- lookup: dnsLookup
-} = __nccwpck_require__(9523);
-const {promisify} = __nccwpck_require__(3837);
-const os = __nccwpck_require__(2037);
-
-const kCacheableLookupCreateConnection = Symbol('cacheableLookupCreateConnection');
-const kCacheableLookupInstance = Symbol('cacheableLookupInstance');
-const kExpires = Symbol('expires');
-
-const supportsALL = typeof ALL === 'number';
-
-const verifyAgent = agent => {
- if (!(agent && typeof agent.createConnection === 'function')) {
- throw new Error('Expected an Agent instance as the first argument');
- }
-};
-
-const map4to6 = entries => {
- for (const entry of entries) {
- if (entry.family === 6) {
- continue;
- }
-
- entry.address = `::ffff:${entry.address}`;
- entry.family = 6;
- }
-};
-
-const getIfaceInfo = () => {
- let has4 = false;
- let has6 = false;
-
- for (const device of Object.values(os.networkInterfaces())) {
- for (const iface of device) {
- if (iface.internal) {
- continue;
- }
-
- if (iface.family === 'IPv6') {
- has6 = true;
- } else {
- has4 = true;
- }
-
- if (has4 && has6) {
- return {has4, has6};
- }
- }
- }
-
- return {has4, has6};
-};
-
-const isIterable = map => {
- return Symbol.iterator in map;
-};
-
-const ttl = {ttl: true};
-const all = {all: true};
-
-class CacheableLookup {
- constructor({
- cache = new Map(),
- maxTtl = Infinity,
- fallbackDuration = 3600,
- errorTtl = 0.15,
- resolver = new AsyncResolver(),
- lookup = dnsLookup
- } = {}) {
- this.maxTtl = maxTtl;
- this.errorTtl = errorTtl;
-
- this._cache = cache;
- this._resolver = resolver;
- this._dnsLookup = promisify(lookup);
-
- if (this._resolver instanceof AsyncResolver) {
- this._resolve4 = this._resolver.resolve4.bind(this._resolver);
- this._resolve6 = this._resolver.resolve6.bind(this._resolver);
- } else {
- this._resolve4 = promisify(this._resolver.resolve4.bind(this._resolver));
- this._resolve6 = promisify(this._resolver.resolve6.bind(this._resolver));
- }
-
- this._iface = getIfaceInfo();
-
- this._pending = {};
- this._nextRemovalTime = false;
- this._hostnamesToFallback = new Set();
-
- if (fallbackDuration < 1) {
- this._fallback = false;
- } else {
- this._fallback = true;
-
- const interval = setInterval(() => {
- this._hostnamesToFallback.clear();
- }, fallbackDuration * 1000);
-
- /* istanbul ignore next: There is no `interval.unref()` when running inside an Electron renderer */
- if (interval.unref) {
- interval.unref();
- }
- }
-
- this.lookup = this.lookup.bind(this);
- this.lookupAsync = this.lookupAsync.bind(this);
- }
-
- set servers(servers) {
- this.clear();
-
- this._resolver.setServers(servers);
- }
-
- get servers() {
- return this._resolver.getServers();
- }
-
- lookup(hostname, options, callback) {
- if (typeof options === 'function') {
- callback = options;
- options = {};
- } else if (typeof options === 'number') {
- options = {
- family: options
- };
- }
-
- if (!callback) {
- throw new Error('Callback must be a function.');
- }
-
- // eslint-disable-next-line promise/prefer-await-to-then
- this.lookupAsync(hostname, options).then(result => {
- if (options.all) {
- callback(null, result);
- } else {
- callback(null, result.address, result.family, result.expires, result.ttl);
- }
- }, callback);
- }
-
- async lookupAsync(hostname, options = {}) {
- if (typeof options === 'number') {
- options = {
- family: options
- };
- }
-
- let cached = await this.query(hostname);
-
- if (options.family === 6) {
- const filtered = cached.filter(entry => entry.family === 6);
-
- if (options.hints & V4MAPPED) {
- if ((supportsALL && options.hints & ALL) || filtered.length === 0) {
- map4to6(cached);
- } else {
- cached = filtered;
- }
- } else {
- cached = filtered;
- }
- } else if (options.family === 4) {
- cached = cached.filter(entry => entry.family === 4);
- }
-
- if (options.hints & ADDRCONFIG) {
- const {_iface} = this;
- cached = cached.filter(entry => entry.family === 6 ? _iface.has6 : _iface.has4);
- }
-
- if (cached.length === 0) {
- const error = new Error(`cacheableLookup ENOTFOUND ${hostname}`);
- error.code = 'ENOTFOUND';
- error.hostname = hostname;
-
- throw error;
- }
-
- if (options.all) {
- return cached;
- }
-
- return cached[0];
- }
-
- async query(hostname) {
- let cached = await this._cache.get(hostname);
-
- if (!cached) {
- const pending = this._pending[hostname];
-
- if (pending) {
- cached = await pending;
- } else {
- const newPromise = this.queryAndCache(hostname);
- this._pending[hostname] = newPromise;
-
- try {
- cached = await newPromise;
- } finally {
- delete this._pending[hostname];
- }
- }
- }
-
- cached = cached.map(entry => {
- return {...entry};
- });
-
- return cached;
- }
-
- async _resolve(hostname) {
- const wrap = async promise => {
- try {
- return await promise;
- } catch (error) {
- if (error.code === 'ENODATA' || error.code === 'ENOTFOUND') {
- return [];
- }
-
- throw error;
- }
- };
-
- // ANY is unsafe as it doesn't trigger new queries in the underlying server.
- const [A, AAAA] = await Promise.all([
- this._resolve4(hostname, ttl),
- this._resolve6(hostname, ttl)
- ].map(promise => wrap(promise)));
-
- let aTtl = 0;
- let aaaaTtl = 0;
- let cacheTtl = 0;
-
- const now = Date.now();
-
- for (const entry of A) {
- entry.family = 4;
- entry.expires = now + (entry.ttl * 1000);
-
- aTtl = Math.max(aTtl, entry.ttl);
- }
-
- for (const entry of AAAA) {
- entry.family = 6;
- entry.expires = now + (entry.ttl * 1000);
-
- aaaaTtl = Math.max(aaaaTtl, entry.ttl);
- }
-
- if (A.length > 0) {
- if (AAAA.length > 0) {
- cacheTtl = Math.min(aTtl, aaaaTtl);
- } else {
- cacheTtl = aTtl;
- }
- } else {
- cacheTtl = aaaaTtl;
- }
-
- return {
- entries: [
- ...A,
- ...AAAA
- ],
- cacheTtl
- };
- }
-
- async _lookup(hostname) {
- try {
- const entries = await this._dnsLookup(hostname, {
- all: true
- });
-
- return {
- entries,
- cacheTtl: 0
- };
- } catch (_) {
- return {
- entries: [],
- cacheTtl: 0
- };
- }
- }
-
- async _set(hostname, data, cacheTtl) {
- if (this.maxTtl > 0 && cacheTtl > 0) {
- cacheTtl = Math.min(cacheTtl, this.maxTtl) * 1000;
- data[kExpires] = Date.now() + cacheTtl;
-
- try {
- await this._cache.set(hostname, data, cacheTtl);
- } catch (error) {
- this.lookupAsync = async () => {
- const cacheError = new Error('Cache Error. Please recreate the CacheableLookup instance.');
- cacheError.cause = error;
-
- throw cacheError;
- };
- }
-
- if (isIterable(this._cache)) {
- this._tick(cacheTtl);
- }
- }
- }
-
- async queryAndCache(hostname) {
- if (this._hostnamesToFallback.has(hostname)) {
- return this._dnsLookup(hostname, all);
- }
-
- let query = await this._resolve(hostname);
-
- if (query.entries.length === 0 && this._fallback) {
- query = await this._lookup(hostname);
-
- if (query.entries.length !== 0) {
- // Use `dns.lookup(...)` for that particular hostname
- this._hostnamesToFallback.add(hostname);
- }
- }
-
- const cacheTtl = query.entries.length === 0 ? this.errorTtl : query.cacheTtl;
- await this._set(hostname, query.entries, cacheTtl);
-
- return query.entries;
- }
-
- _tick(ms) {
- const nextRemovalTime = this._nextRemovalTime;
-
- if (!nextRemovalTime || ms < nextRemovalTime) {
- clearTimeout(this._removalTimeout);
-
- this._nextRemovalTime = ms;
-
- this._removalTimeout = setTimeout(() => {
- this._nextRemovalTime = false;
-
- let nextExpiry = Infinity;
-
- const now = Date.now();
-
- for (const [hostname, entries] of this._cache) {
- const expires = entries[kExpires];
-
- if (now >= expires) {
- this._cache.delete(hostname);
- } else if (expires < nextExpiry) {
- nextExpiry = expires;
- }
- }
-
- if (nextExpiry !== Infinity) {
- this._tick(nextExpiry - now);
- }
- }, ms);
-
- /* istanbul ignore next: There is no `timeout.unref()` when running inside an Electron renderer */
- if (this._removalTimeout.unref) {
- this._removalTimeout.unref();
- }
- }
- }
-
- install(agent) {
- verifyAgent(agent);
-
- if (kCacheableLookupCreateConnection in agent) {
- throw new Error('CacheableLookup has been already installed');
- }
-
- agent[kCacheableLookupCreateConnection] = agent.createConnection;
- agent[kCacheableLookupInstance] = this;
-
- agent.createConnection = (options, callback) => {
- if (!('lookup' in options)) {
- options.lookup = this.lookup;
- }
-
- return agent[kCacheableLookupCreateConnection](options, callback);
- };
- }
-
- uninstall(agent) {
- verifyAgent(agent);
-
- if (agent[kCacheableLookupCreateConnection]) {
- if (agent[kCacheableLookupInstance] !== this) {
- throw new Error('The agent is not owned by this CacheableLookup instance');
- }
-
- agent.createConnection = agent[kCacheableLookupCreateConnection];
-
- delete agent[kCacheableLookupCreateConnection];
- delete agent[kCacheableLookupInstance];
- }
- }
-
- updateInterfaceInfo() {
- const {_iface} = this;
-
- this._iface = getIfaceInfo();
-
- if ((_iface.has4 && !this._iface.has4) || (_iface.has6 && !this._iface.has6)) {
- this._cache.clear();
- }
- }
-
- clear(hostname) {
- if (hostname) {
- this._cache.delete(hostname);
- return;
- }
-
- this._cache.clear();
- }
-}
-
-module.exports = CacheableLookup;
-module.exports["default"] = CacheableLookup;
-
-
-/***/ }),
-
-/***/ 4340:
-/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-
-
-const {PassThrough: PassThroughStream} = __nccwpck_require__(2781);
-
-module.exports = options => {
- options = {...options};
-
- const {array} = options;
- let {encoding} = options;
- const isBuffer = encoding === 'buffer';
- let objectMode = false;
-
- if (array) {
- objectMode = !(encoding || isBuffer);
- } else {
- encoding = encoding || 'utf8';
- }
-
- if (isBuffer) {
- encoding = null;
- }
-
- const stream = new PassThroughStream({objectMode});
-
- if (encoding) {
- stream.setEncoding(encoding);
- }
-
- let length = 0;
- const chunks = [];
-
- stream.on('data', chunk => {
- chunks.push(chunk);
-
- if (objectMode) {
- length = chunks.length;
- } else {
- length += chunk.length;
- }
- });
-
- stream.getBufferedValue = () => {
- if (array) {
- return chunks;
- }
-
- return isBuffer ? Buffer.concat(chunks, length) : chunks.join('');
- };
-
- stream.getBufferedLength = () => length;
-
- return stream;
-};
-
-
-/***/ }),
-
-/***/ 7040:
-/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-
-
-const {constants: BufferConstants} = __nccwpck_require__(4300);
-const pump = __nccwpck_require__(8341);
-const bufferStream = __nccwpck_require__(4340);
-
-class MaxBufferError extends Error {
- constructor() {
- super('maxBuffer exceeded');
- this.name = 'MaxBufferError';
- }
-}
-
-async function getStream(inputStream, options) {
- if (!inputStream) {
- return Promise.reject(new Error('Expected a stream'));
- }
-
- options = {
- maxBuffer: Infinity,
- ...options
- };
-
- const {maxBuffer} = options;
-
- let stream;
- await new Promise((resolve, reject) => {
- const rejectPromise = error => {
- // Don't retrieve an oversized buffer.
- if (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {
- error.bufferedData = stream.getBufferedValue();
- }
-
- reject(error);
- };
-
- stream = pump(inputStream, bufferStream(options), error => {
- if (error) {
- rejectPromise(error);
- return;
- }
-
- resolve();
- });
-
- stream.on('data', () => {
- if (stream.getBufferedLength() > maxBuffer) {
- rejectPromise(new MaxBufferError());
- }
- });
- });
-
- return stream.getBufferedValue();
-}
-
-module.exports = getStream;
-// TODO: Remove this for the next major release
-module.exports["default"] = getStream;
-module.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'});
-module.exports.array = (stream, options) => getStream(stream, {...options, array: true});
-module.exports.MaxBufferError = MaxBufferError;
-
-
-/***/ }),
-
-/***/ 8116:
-/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-
-
-
-const EventEmitter = __nccwpck_require__(2361);
-const urlLib = __nccwpck_require__(7310);
-const normalizeUrl = __nccwpck_require__(7952);
-const getStream = __nccwpck_require__(7040);
-const CachePolicy = __nccwpck_require__(1002);
-const Response = __nccwpck_require__(9004);
-const lowercaseKeys = __nccwpck_require__(9662);
-const cloneResponse = __nccwpck_require__(1312);
-const Keyv = __nccwpck_require__(1531);
-
-class CacheableRequest {
- constructor(request, cacheAdapter) {
- if (typeof request !== 'function') {
- throw new TypeError('Parameter `request` must be a function');
- }
-
- this.cache = new Keyv({
- uri: typeof cacheAdapter === 'string' && cacheAdapter,
- store: typeof cacheAdapter !== 'string' && cacheAdapter,
- namespace: 'cacheable-request'
- });
-
- return this.createCacheableRequest(request);
- }
-
- createCacheableRequest(request) {
- return (opts, cb) => {
- let url;
- if (typeof opts === 'string') {
- url = normalizeUrlObject(urlLib.parse(opts));
- opts = {};
- } else if (opts instanceof urlLib.URL) {
- url = normalizeUrlObject(urlLib.parse(opts.toString()));
- opts = {};
- } else {
- const [pathname, ...searchParts] = (opts.path || '').split('?');
- const search = searchParts.length > 0 ?
- `?${searchParts.join('?')}` :
- '';
- url = normalizeUrlObject({ ...opts, pathname, search });
- }
-
- opts = {
- headers: {},
- method: 'GET',
- cache: true,
- strictTtl: false,
- automaticFailover: false,
- ...opts,
- ...urlObjectToRequestOptions(url)
- };
- opts.headers = lowercaseKeys(opts.headers);
-
- const ee = new EventEmitter();
- const normalizedUrlString = normalizeUrl(
- urlLib.format(url),
- {
- stripWWW: false,
- removeTrailingSlash: false,
- stripAuthentication: false
- }
- );
- const key = `${opts.method}:${normalizedUrlString}`;
- let revalidate = false;
- let madeRequest = false;
-
- const makeRequest = opts => {
- madeRequest = true;
- let requestErrored = false;
- let requestErrorCallback;
-
- const requestErrorPromise = new Promise(resolve => {
- requestErrorCallback = () => {
- if (!requestErrored) {
- requestErrored = true;
- resolve();
- }
- };
- });
-
- const handler = response => {
- if (revalidate && !opts.forceRefresh) {
- response.status = response.statusCode;
- const revalidatedPolicy = CachePolicy.fromObject(revalidate.cachePolicy).revalidatedPolicy(opts, response);
- if (!revalidatedPolicy.modified) {
- const headers = revalidatedPolicy.policy.responseHeaders();
- response = new Response(revalidate.statusCode, headers, revalidate.body, revalidate.url);
- response.cachePolicy = revalidatedPolicy.policy;
- response.fromCache = true;
- }
- }
-
- if (!response.fromCache) {
- response.cachePolicy = new CachePolicy(opts, response, opts);
- response.fromCache = false;
- }
-
- let clonedResponse;
- if (opts.cache && response.cachePolicy.storable()) {
- clonedResponse = cloneResponse(response);
-
- (async () => {
- try {
- const bodyPromise = getStream.buffer(response);
-
- await Promise.race([
- requestErrorPromise,
- new Promise(resolve => response.once('end', resolve))
- ]);
-
- if (requestErrored) {
- return;
- }
-
- const body = await bodyPromise;
-
- const value = {
- cachePolicy: response.cachePolicy.toObject(),
- url: response.url,
- statusCode: response.fromCache ? revalidate.statusCode : response.statusCode,
- body
- };
-
- let ttl = opts.strictTtl ? response.cachePolicy.timeToLive() : undefined;
- if (opts.maxTtl) {
- ttl = ttl ? Math.min(ttl, opts.maxTtl) : opts.maxTtl;
- }
-
- await this.cache.set(key, value, ttl);
- } catch (error) {
- ee.emit('error', new CacheableRequest.CacheError(error));
- }
- })();
- } else if (opts.cache && revalidate) {
- (async () => {
- try {
- await this.cache.delete(key);
- } catch (error) {
- ee.emit('error', new CacheableRequest.CacheError(error));
- }
- })();
- }
-
- ee.emit('response', clonedResponse || response);
- if (typeof cb === 'function') {
- cb(clonedResponse || response);
- }
- };
-
- try {
- const req = request(opts, handler);
- req.once('error', requestErrorCallback);
- req.once('abort', requestErrorCallback);
- ee.emit('request', req);
- } catch (error) {
- ee.emit('error', new CacheableRequest.RequestError(error));
- }
- };
-
- (async () => {
- const get = async opts => {
- await Promise.resolve();
-
- const cacheEntry = opts.cache ? await this.cache.get(key) : undefined;
- if (typeof cacheEntry === 'undefined') {
- return makeRequest(opts);
- }
-
- const policy = CachePolicy.fromObject(cacheEntry.cachePolicy);
- if (policy.satisfiesWithoutRevalidation(opts) && !opts.forceRefresh) {
- const headers = policy.responseHeaders();
- const response = new Response(cacheEntry.statusCode, headers, cacheEntry.body, cacheEntry.url);
- response.cachePolicy = policy;
- response.fromCache = true;
-
- ee.emit('response', response);
- if (typeof cb === 'function') {
- cb(response);
- }
- } else {
- revalidate = cacheEntry;
- opts.headers = policy.revalidationHeaders(opts);
- makeRequest(opts);
- }
- };
-
- const errorHandler = error => ee.emit('error', new CacheableRequest.CacheError(error));
- this.cache.once('error', errorHandler);
- ee.on('response', () => this.cache.removeListener('error', errorHandler));
-
- try {
- await get(opts);
- } catch (error) {
- if (opts.automaticFailover && !madeRequest) {
- makeRequest(opts);
- }
-
- ee.emit('error', new CacheableRequest.CacheError(error));
- }
- })();
-
- return ee;
- };
- }
-}
-
-function urlObjectToRequestOptions(url) {
- const options = { ...url };
- options.path = `${url.pathname || '/'}${url.search || ''}`;
- delete options.pathname;
- delete options.search;
- return options;
-}
-
-function normalizeUrlObject(url) {
- // If url was parsed by url.parse or new URL:
- // - hostname will be set
- // - host will be hostname[:port]
- // - port will be set if it was explicit in the parsed string
- // Otherwise, url was from request options:
- // - hostname or host may be set
- // - host shall not have port encoded
- return {
- protocol: url.protocol,
- auth: url.auth,
- hostname: url.hostname || url.host || 'localhost',
- port: url.port,
- pathname: url.pathname,
- search: url.search
- };
-}
-
-CacheableRequest.RequestError = class extends Error {
- constructor(error) {
- super(error.message);
- this.name = 'RequestError';
- Object.assign(this, error);
- }
-};
-
-CacheableRequest.CacheError = class extends Error {
- constructor(error) {
- super(error.message);
- this.name = 'CacheError';
- Object.assign(this, error);
- }
-};
-
-module.exports = CacheableRequest;
-
-
-/***/ }),
-
-/***/ 1312:
-/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-
-
-
-const PassThrough = (__nccwpck_require__(2781).PassThrough);
-const mimicResponse = __nccwpck_require__(2610);
-
-const cloneResponse = response => {
- if (!(response && response.pipe)) {
- throw new TypeError('Parameter `response` must be a response stream.');
- }
-
- const clone = new PassThrough();
- mimicResponse(response, clone);
-
- return response.pipe(clone);
-};
-
-module.exports = cloneResponse;
-
-
-/***/ }),
-
-/***/ 5728:
-/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-
-
-
-const { promisify } = __nccwpck_require__(3837)
-const JSONB = __nccwpck_require__(2820)
-const zlib = __nccwpck_require__(9796)
-
-const mergeOptions = __nccwpck_require__(4968)
-
-const compress = promisify(zlib.brotliCompress)
-
-const decompress = promisify(zlib.brotliDecompress)
-
-const identity = val => val
-
-const createCompress = ({
- enable = true,
- serialize = JSONB.stringify,
- deserialize = JSONB.parse,
- compressOptions,
- decompressOptions
-} = {}) => {
- if (!enable) {
- return { serialize, deserialize, decompress: identity, compress: identity }
- }
-
- return {
- serialize,
- deserialize,
- compress: async (data, options = {}) => {
- if (data === undefined) return data
- const serializedData = serialize(data)
- return compress(serializedData, mergeOptions(compressOptions, options))
- },
- decompress: async (data, options = {}) => {
- if (data === undefined) return data
- return deserialize(
- await decompress(data, mergeOptions(decompressOptions, options))
- )
- }
- }
-}
-
-module.exports = createCompress
-module.exports.stringify = JSONB.stringify
-module.exports.parse = JSONB.parse
-
-
-/***/ }),
-
-/***/ 4968:
-/***/ ((module) => {
-
-
-
-module.exports = (defaultOptions = {}, options = {}) => {
- const params = {
- ...(defaultOptions.params || {}),
- ...(options.params || {})
- }
-
- return {
- ...defaultOptions,
- ...options,
- ...(Object.keys(params).length
- ? {
- params
- }
- : {})
- }
-}
-
-
/***/ }),
/***/ 2391:
@@ -3424,2884 +1955,129 @@ module.exports["default"] = deferToConnect;
/***/ }),
-/***/ 1205:
+/***/ 1585:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-var once = __nccwpck_require__(1223);
-var noop = function() {};
+const {PassThrough: PassThroughStream} = __nccwpck_require__(2781);
-var isRequest = function(stream) {
- return stream.setHeader && typeof stream.abort === 'function';
-};
+module.exports = options => {
+ options = {...options};
-var isChildProcess = function(stream) {
- return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3
-};
+ const {array} = options;
+ let {encoding} = options;
+ const isBuffer = encoding === 'buffer';
+ let objectMode = false;
-var eos = function(stream, opts, callback) {
- if (typeof opts === 'function') return eos(stream, null, opts);
- if (!opts) opts = {};
-
- callback = once(callback || noop);
-
- var ws = stream._writableState;
- var rs = stream._readableState;
- var readable = opts.readable || (opts.readable !== false && stream.readable);
- var writable = opts.writable || (opts.writable !== false && stream.writable);
-
- var onlegacyfinish = function() {
- if (!stream.writable) onfinish();
- };
-
- var onfinish = function() {
- writable = false;
- if (!readable) callback.call(stream);
- };
-
- var onend = function() {
- readable = false;
- if (!writable) callback.call(stream);
- };
-
- var onexit = function(exitCode) {
- callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);
- };
-
- var onerror = function(err) {
- callback.call(stream, err);
- };
-
- var onclose = function() {
- if (readable && !(rs && rs.ended)) return callback.call(stream, new Error('premature close'));
- if (writable && !(ws && ws.ended)) return callback.call(stream, new Error('premature close'));
- };
-
- var onrequest = function() {
- stream.req.on('finish', onfinish);
- };
-
- if (isRequest(stream)) {
- stream.on('complete', onfinish);
- stream.on('abort', onclose);
- if (stream.req) onrequest();
- else stream.on('request', onrequest);
- } else if (writable && !ws) { // legacy streams
- stream.on('end', onlegacyfinish);
- stream.on('close', onlegacyfinish);
+ if (array) {
+ objectMode = !(encoding || isBuffer);
+ } else {
+ encoding = encoding || 'utf8';
}
- if (isChildProcess(stream)) stream.on('exit', onexit);
+ if (isBuffer) {
+ encoding = null;
+ }
- stream.on('end', onend);
- stream.on('finish', onfinish);
- if (opts.error !== false) stream.on('error', onerror);
- stream.on('close', onclose);
+ const stream = new PassThroughStream({objectMode});
- return function() {
- stream.removeListener('complete', onfinish);
- stream.removeListener('abort', onclose);
- stream.removeListener('request', onrequest);
- if (stream.req) stream.req.removeListener('finish', onfinish);
- stream.removeListener('end', onlegacyfinish);
- stream.removeListener('close', onlegacyfinish);
- stream.removeListener('finish', onfinish);
- stream.removeListener('exit', onexit);
- stream.removeListener('end', onend);
- stream.removeListener('error', onerror);
- stream.removeListener('close', onclose);
+ if (encoding) {
+ stream.setEncoding(encoding);
+ }
+
+ let length = 0;
+ const chunks = [];
+
+ stream.on('data', chunk => {
+ chunks.push(chunk);
+
+ if (objectMode) {
+ length = chunks.length;
+ } else {
+ length += chunk.length;
+ }
+ });
+
+ stream.getBufferedValue = () => {
+ if (array) {
+ return chunks;
+ }
+
+ return isBuffer ? Buffer.concat(chunks, length) : chunks.join('');
};
-};
-module.exports = eos;
+ stream.getBufferedLength = () => length;
+
+ return stream;
+};
/***/ }),
-/***/ 6457:
-/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+/***/ 1766:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const types_1 = __nccwpck_require__(4597);
-function createRejection(error, ...beforeErrorGroups) {
- const promise = (async () => {
- if (error instanceof types_1.RequestError) {
- try {
- for (const hooks of beforeErrorGroups) {
- if (hooks) {
- for (const hook of hooks) {
- // eslint-disable-next-line no-await-in-loop
- error = await hook(error);
- }
- }
- }
- }
- catch (error_) {
- error = error_;
- }
- }
- throw error;
- })();
- const returnPromise = () => promise;
- promise.json = returnPromise;
- promise.text = returnPromise;
- promise.buffer = returnPromise;
- promise.on = returnPromise;
- return promise;
+const {constants: BufferConstants} = __nccwpck_require__(4300);
+const stream = __nccwpck_require__(2781);
+const {promisify} = __nccwpck_require__(3837);
+const bufferStream = __nccwpck_require__(1585);
+
+const streamPipelinePromisified = promisify(stream.pipeline);
+
+class MaxBufferError extends Error {
+ constructor() {
+ super('maxBuffer exceeded');
+ this.name = 'MaxBufferError';
+ }
}
-exports["default"] = createRejection;
+async function getStream(inputStream, options) {
+ if (!inputStream) {
+ throw new Error('Expected a stream');
+ }
-/***/ }),
+ options = {
+ maxBuffer: Infinity,
+ ...options
+ };
-/***/ 6056:
-/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+ const {maxBuffer} = options;
+ const stream = bufferStream(options);
+ await new Promise((resolve, reject) => {
+ const rejectPromise = error => {
+ // Don't retrieve an oversized buffer.
+ if (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {
+ error.bufferedData = stream.getBufferedValue();
+ }
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __exportStar = (this && this.__exportStar) || function(m, exports) {
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const events_1 = __nccwpck_require__(2361);
-const is_1 = __nccwpck_require__(7678);
-const PCancelable = __nccwpck_require__(9072);
-const types_1 = __nccwpck_require__(4597);
-const parse_body_1 = __nccwpck_require__(8220);
-const core_1 = __nccwpck_require__(94);
-const proxy_events_1 = __nccwpck_require__(3021);
-const get_buffer_1 = __nccwpck_require__(4500);
-const is_response_ok_1 = __nccwpck_require__(9298);
-const proxiedRequestEvents = [
- 'request',
- 'response',
- 'redirect',
- 'uploadProgress',
- 'downloadProgress'
-];
-function asPromise(normalizedOptions) {
- let globalRequest;
- let globalResponse;
- const emitter = new events_1.EventEmitter();
- const promise = new PCancelable((resolve, reject, onCancel) => {
- const makeRequest = (retryCount) => {
- const request = new core_1.default(undefined, normalizedOptions);
- request.retryCount = retryCount;
- request._noPipe = true;
- onCancel(() => request.destroy());
- onCancel.shouldReject = false;
- onCancel(() => reject(new types_1.CancelError(request)));
- globalRequest = request;
- request.once('response', async (response) => {
- var _a;
- response.retryCount = retryCount;
- if (response.request.aborted) {
- // Canceled while downloading - will throw a `CancelError` or `TimeoutError` error
- return;
- }
- // Download body
- let rawBody;
- try {
- rawBody = await get_buffer_1.default(request);
- response.rawBody = rawBody;
- }
- catch (_b) {
- // The same error is caught below.
- // See request.once('error')
- return;
- }
- if (request._isAboutToError) {
- return;
- }
- // Parse body
- const contentEncoding = ((_a = response.headers['content-encoding']) !== null && _a !== void 0 ? _a : '').toLowerCase();
- const isCompressed = ['gzip', 'deflate', 'br'].includes(contentEncoding);
- const { options } = request;
- if (isCompressed && !options.decompress) {
- response.body = rawBody;
- }
- else {
- try {
- response.body = parse_body_1.default(response, options.responseType, options.parseJson, options.encoding);
- }
- catch (error) {
- // Fallback to `utf8`
- response.body = rawBody.toString();
- if (is_response_ok_1.isResponseOk(response)) {
- request._beforeError(error);
- return;
- }
- }
- }
- try {
- for (const [index, hook] of options.hooks.afterResponse.entries()) {
- // @ts-expect-error TS doesn't notice that CancelableRequest is a Promise
- // eslint-disable-next-line no-await-in-loop
- response = await hook(response, async (updatedOptions) => {
- const typedOptions = core_1.default.normalizeArguments(undefined, {
- ...updatedOptions,
- retry: {
- calculateDelay: () => 0
- },
- throwHttpErrors: false,
- resolveBodyOnly: false
- }, options);
- // Remove any further hooks for that request, because we'll call them anyway.
- // The loop continues. We don't want duplicates (asPromise recursion).
- typedOptions.hooks.afterResponse = typedOptions.hooks.afterResponse.slice(0, index);
- for (const hook of typedOptions.hooks.beforeRetry) {
- // eslint-disable-next-line no-await-in-loop
- await hook(typedOptions);
- }
- const promise = asPromise(typedOptions);
- onCancel(() => {
- promise.catch(() => { });
- promise.cancel();
- });
- return promise;
- });
- }
- }
- catch (error) {
- request._beforeError(new types_1.RequestError(error.message, error, request));
- return;
- }
- globalResponse = response;
- if (!is_response_ok_1.isResponseOk(response)) {
- request._beforeError(new types_1.HTTPError(response));
- return;
- }
- request.destroy();
- resolve(request.options.resolveBodyOnly ? response.body : response);
- });
- const onError = (error) => {
- if (promise.isCanceled) {
- return;
- }
- const { options } = request;
- if (error instanceof types_1.HTTPError && !options.throwHttpErrors) {
- const { response } = error;
- resolve(request.options.resolveBodyOnly ? response.body : response);
- return;
- }
- reject(error);
- };
- request.once('error', onError);
- const previousBody = request.options.body;
- request.once('retry', (newRetryCount, error) => {
- var _a, _b;
- if (previousBody === ((_a = error.request) === null || _a === void 0 ? void 0 : _a.options.body) && is_1.default.nodeStream((_b = error.request) === null || _b === void 0 ? void 0 : _b.options.body)) {
- onError(error);
- return;
- }
- makeRequest(newRetryCount);
- });
- proxy_events_1.default(request, emitter, proxiedRequestEvents);
- };
- makeRequest(0);
- });
- promise.on = (event, fn) => {
- emitter.on(event, fn);
- return promise;
- };
- const shortcut = (responseType) => {
- const newPromise = (async () => {
- // Wait until downloading has ended
- await promise;
- const { options } = globalResponse.request;
- return parse_body_1.default(globalResponse, responseType, options.parseJson, options.encoding);
- })();
- Object.defineProperties(newPromise, Object.getOwnPropertyDescriptors(promise));
- return newPromise;
- };
- promise.json = () => {
- const { headers } = globalRequest.options;
- if (!globalRequest.writableFinished && headers.accept === undefined) {
- headers.accept = 'application/json';
- }
- return shortcut('json');
- };
- promise.buffer = () => shortcut('buffer');
- promise.text = () => shortcut('text');
- return promise;
+ reject(error);
+ };
+
+ (async () => {
+ try {
+ await streamPipelinePromisified(inputStream, stream);
+ resolve();
+ } catch (error) {
+ rejectPromise(error);
+ }
+ })();
+
+ stream.on('data', () => {
+ if (stream.getBufferedLength() > maxBuffer) {
+ rejectPromise(new MaxBufferError());
+ }
+ });
+ });
+
+ return stream.getBufferedValue();
}
-exports["default"] = asPromise;
-__exportStar(__nccwpck_require__(4597), exports);
-
-/***/ }),
-
-/***/ 1048:
-/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const is_1 = __nccwpck_require__(7678);
-const normalizeArguments = (options, defaults) => {
- if (is_1.default.null_(options.encoding)) {
- throw new TypeError('To get a Buffer, set `options.responseType` to `buffer` instead');
- }
- is_1.assert.any([is_1.default.string, is_1.default.undefined], options.encoding);
- is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.resolveBodyOnly);
- is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.methodRewriting);
- is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.isStream);
- is_1.assert.any([is_1.default.string, is_1.default.undefined], options.responseType);
- // `options.responseType`
- if (options.responseType === undefined) {
- options.responseType = 'text';
- }
- // `options.retry`
- const { retry } = options;
- if (defaults) {
- options.retry = { ...defaults.retry };
- }
- else {
- options.retry = {
- calculateDelay: retryObject => retryObject.computedValue,
- limit: 0,
- methods: [],
- statusCodes: [],
- errorCodes: [],
- maxRetryAfter: undefined
- };
- }
- if (is_1.default.object(retry)) {
- options.retry = {
- ...options.retry,
- ...retry
- };
- options.retry.methods = [...new Set(options.retry.methods.map(method => method.toUpperCase()))];
- options.retry.statusCodes = [...new Set(options.retry.statusCodes)];
- options.retry.errorCodes = [...new Set(options.retry.errorCodes)];
- }
- else if (is_1.default.number(retry)) {
- options.retry.limit = retry;
- }
- if (is_1.default.undefined(options.retry.maxRetryAfter)) {
- options.retry.maxRetryAfter = Math.min(
- // TypeScript is not smart enough to handle `.filter(x => is.number(x))`.
- // eslint-disable-next-line unicorn/no-fn-reference-in-iterator
- ...[options.timeout.request, options.timeout.connect].filter(is_1.default.number));
- }
- // `options.pagination`
- if (is_1.default.object(options.pagination)) {
- if (defaults) {
- options.pagination = {
- ...defaults.pagination,
- ...options.pagination
- };
- }
- const { pagination } = options;
- if (!is_1.default.function_(pagination.transform)) {
- throw new Error('`options.pagination.transform` must be implemented');
- }
- if (!is_1.default.function_(pagination.shouldContinue)) {
- throw new Error('`options.pagination.shouldContinue` must be implemented');
- }
- if (!is_1.default.function_(pagination.filter)) {
- throw new TypeError('`options.pagination.filter` must be implemented');
- }
- if (!is_1.default.function_(pagination.paginate)) {
- throw new Error('`options.pagination.paginate` must be implemented');
- }
- }
- // JSON mode
- if (options.responseType === 'json' && options.headers.accept === undefined) {
- options.headers.accept = 'application/json';
- }
- return options;
-};
-exports["default"] = normalizeArguments;
-
-
-/***/ }),
-
-/***/ 8220:
-/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const types_1 = __nccwpck_require__(4597);
-const parseBody = (response, responseType, parseJson, encoding) => {
- const { rawBody } = response;
- try {
- if (responseType === 'text') {
- return rawBody.toString(encoding);
- }
- if (responseType === 'json') {
- return rawBody.length === 0 ? '' : parseJson(rawBody.toString());
- }
- if (responseType === 'buffer') {
- return rawBody;
- }
- throw new types_1.ParseError({
- message: `Unknown body type '${responseType}'`,
- name: 'Error'
- }, response);
- }
- catch (error) {
- throw new types_1.ParseError(error, response);
- }
-};
-exports["default"] = parseBody;
-
-
-/***/ }),
-
-/***/ 4597:
-/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
-
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __exportStar = (this && this.__exportStar) || function(m, exports) {
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.CancelError = exports.ParseError = void 0;
-const core_1 = __nccwpck_require__(94);
-/**
-An error to be thrown when server response code is 2xx, and parsing body fails.
-Includes a `response` property.
-*/
-class ParseError extends core_1.RequestError {
- constructor(error, response) {
- const { options } = response.request;
- super(`${error.message} in "${options.url.toString()}"`, error, response.request);
- this.name = 'ParseError';
- this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_BODY_PARSE_FAILURE' : this.code;
- }
-}
-exports.ParseError = ParseError;
-/**
-An error to be thrown when the request is aborted with `.cancel()`.
-*/
-class CancelError extends core_1.RequestError {
- constructor(request) {
- super('Promise was canceled', {}, request);
- this.name = 'CancelError';
- this.code = 'ERR_CANCELED';
- }
- get isCanceled() {
- return true;
- }
-}
-exports.CancelError = CancelError;
-__exportStar(__nccwpck_require__(94), exports);
-
-
-/***/ }),
-
-/***/ 3462:
-/***/ ((__unused_webpack_module, exports) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.retryAfterStatusCodes = void 0;
-exports.retryAfterStatusCodes = new Set([413, 429, 503]);
-const calculateRetryDelay = ({ attemptCount, retryOptions, error, retryAfter }) => {
- if (attemptCount > retryOptions.limit) {
- return 0;
- }
- const hasMethod = retryOptions.methods.includes(error.options.method);
- const hasErrorCode = retryOptions.errorCodes.includes(error.code);
- const hasStatusCode = error.response && retryOptions.statusCodes.includes(error.response.statusCode);
- if (!hasMethod || (!hasErrorCode && !hasStatusCode)) {
- return 0;
- }
- if (error.response) {
- if (retryAfter) {
- if (retryOptions.maxRetryAfter === undefined || retryAfter > retryOptions.maxRetryAfter) {
- return 0;
- }
- return retryAfter;
- }
- if (error.response.statusCode === 413) {
- return 0;
- }
- }
- const noise = Math.random() * 100;
- return ((2 ** (attemptCount - 1)) * 1000) + noise;
-};
-exports["default"] = calculateRetryDelay;
-
-
-/***/ }),
-
-/***/ 94:
-/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.UnsupportedProtocolError = exports.ReadError = exports.TimeoutError = exports.UploadError = exports.CacheError = exports.HTTPError = exports.MaxRedirectsError = exports.RequestError = exports.setNonEnumerableProperties = exports.knownHookEvents = exports.withoutBody = exports.kIsNormalizedAlready = void 0;
-const util_1 = __nccwpck_require__(3837);
-const stream_1 = __nccwpck_require__(2781);
-const fs_1 = __nccwpck_require__(7147);
-const url_1 = __nccwpck_require__(7310);
-const http = __nccwpck_require__(3685);
-const http_1 = __nccwpck_require__(3685);
-const https = __nccwpck_require__(5687);
-const http_timer_1 = __nccwpck_require__(8097);
-const cacheable_lookup_1 = __nccwpck_require__(2286);
-const CacheableRequest = __nccwpck_require__(8116);
-const decompressResponse = __nccwpck_require__(2391);
-// @ts-expect-error Missing types
-const http2wrapper = __nccwpck_require__(4645);
-const lowercaseKeys = __nccwpck_require__(9662);
-const is_1 = __nccwpck_require__(7678);
-const get_body_size_1 = __nccwpck_require__(4564);
-const is_form_data_1 = __nccwpck_require__(40);
-const proxy_events_1 = __nccwpck_require__(3021);
-const timed_out_1 = __nccwpck_require__(2454);
-const url_to_options_1 = __nccwpck_require__(8026);
-const options_to_url_1 = __nccwpck_require__(9219);
-const weakable_map_1 = __nccwpck_require__(7288);
-const get_buffer_1 = __nccwpck_require__(4500);
-const dns_ip_version_1 = __nccwpck_require__(4993);
-const is_response_ok_1 = __nccwpck_require__(9298);
-const deprecation_warning_1 = __nccwpck_require__(397);
-const normalize_arguments_1 = __nccwpck_require__(1048);
-const calculate_retry_delay_1 = __nccwpck_require__(3462);
-let globalDnsCache;
-const kRequest = Symbol('request');
-const kResponse = Symbol('response');
-const kResponseSize = Symbol('responseSize');
-const kDownloadedSize = Symbol('downloadedSize');
-const kBodySize = Symbol('bodySize');
-const kUploadedSize = Symbol('uploadedSize');
-const kServerResponsesPiped = Symbol('serverResponsesPiped');
-const kUnproxyEvents = Symbol('unproxyEvents');
-const kIsFromCache = Symbol('isFromCache');
-const kCancelTimeouts = Symbol('cancelTimeouts');
-const kStartedReading = Symbol('startedReading');
-const kStopReading = Symbol('stopReading');
-const kTriggerRead = Symbol('triggerRead');
-const kBody = Symbol('body');
-const kJobs = Symbol('jobs');
-const kOriginalResponse = Symbol('originalResponse');
-const kRetryTimeout = Symbol('retryTimeout');
-exports.kIsNormalizedAlready = Symbol('isNormalizedAlready');
-const supportsBrotli = is_1.default.string(process.versions.brotli);
-exports.withoutBody = new Set(['GET', 'HEAD']);
-exports.knownHookEvents = [
- 'init',
- 'beforeRequest',
- 'beforeRedirect',
- 'beforeError',
- 'beforeRetry',
- // Promise-Only
- 'afterResponse'
-];
-function validateSearchParameters(searchParameters) {
- // eslint-disable-next-line guard-for-in
- for (const key in searchParameters) {
- const value = searchParameters[key];
- if (!is_1.default.string(value) && !is_1.default.number(value) && !is_1.default.boolean(value) && !is_1.default.null_(value) && !is_1.default.undefined(value)) {
- throw new TypeError(`The \`searchParams\` value '${String(value)}' must be a string, number, boolean or null`);
- }
- }
-}
-function isClientRequest(clientRequest) {
- return is_1.default.object(clientRequest) && !('statusCode' in clientRequest);
-}
-const cacheableStore = new weakable_map_1.default();
-const waitForOpenFile = async (file) => new Promise((resolve, reject) => {
- const onError = (error) => {
- reject(error);
- };
- // Node.js 12 has incomplete types
- if (!file.pending) {
- resolve();
- }
- file.once('error', onError);
- file.once('ready', () => {
- file.off('error', onError);
- resolve();
- });
-});
-const redirectCodes = new Set([300, 301, 302, 303, 304, 307, 308]);
-const nonEnumerableProperties = [
- 'context',
- 'body',
- 'json',
- 'form'
-];
-exports.setNonEnumerableProperties = (sources, to) => {
- // Non enumerable properties shall not be merged
- const properties = {};
- for (const source of sources) {
- if (!source) {
- continue;
- }
- for (const name of nonEnumerableProperties) {
- if (!(name in source)) {
- continue;
- }
- properties[name] = {
- writable: true,
- configurable: true,
- enumerable: false,
- // @ts-expect-error TS doesn't see the check above
- value: source[name]
- };
- }
- }
- Object.defineProperties(to, properties);
-};
-/**
-An error to be thrown when a request fails.
-Contains a `code` property with error class code, like `ECONNREFUSED`.
-*/
-class RequestError extends Error {
- constructor(message, error, self) {
- var _a, _b;
- super(message);
- Error.captureStackTrace(this, this.constructor);
- this.name = 'RequestError';
- this.code = (_a = error.code) !== null && _a !== void 0 ? _a : 'ERR_GOT_REQUEST_ERROR';
- if (self instanceof Request) {
- Object.defineProperty(this, 'request', {
- enumerable: false,
- value: self
- });
- Object.defineProperty(this, 'response', {
- enumerable: false,
- value: self[kResponse]
- });
- Object.defineProperty(this, 'options', {
- // This fails because of TS 3.7.2 useDefineForClassFields
- // Ref: https://github.com/microsoft/TypeScript/issues/34972
- enumerable: false,
- value: self.options
- });
- }
- else {
- Object.defineProperty(this, 'options', {
- // This fails because of TS 3.7.2 useDefineForClassFields
- // Ref: https://github.com/microsoft/TypeScript/issues/34972
- enumerable: false,
- value: self
- });
- }
- this.timings = (_b = this.request) === null || _b === void 0 ? void 0 : _b.timings;
- // Recover the original stacktrace
- if (is_1.default.string(error.stack) && is_1.default.string(this.stack)) {
- const indexOfMessage = this.stack.indexOf(this.message) + this.message.length;
- const thisStackTrace = this.stack.slice(indexOfMessage).split('\n').reverse();
- const errorStackTrace = error.stack.slice(error.stack.indexOf(error.message) + error.message.length).split('\n').reverse();
- // Remove duplicated traces
- while (errorStackTrace.length !== 0 && errorStackTrace[0] === thisStackTrace[0]) {
- thisStackTrace.shift();
- }
- this.stack = `${this.stack.slice(0, indexOfMessage)}${thisStackTrace.reverse().join('\n')}${errorStackTrace.reverse().join('\n')}`;
- }
- }
-}
-exports.RequestError = RequestError;
-/**
-An error to be thrown when the server redirects you more than ten times.
-Includes a `response` property.
-*/
-class MaxRedirectsError extends RequestError {
- constructor(request) {
- super(`Redirected ${request.options.maxRedirects} times. Aborting.`, {}, request);
- this.name = 'MaxRedirectsError';
- this.code = 'ERR_TOO_MANY_REDIRECTS';
- }
-}
-exports.MaxRedirectsError = MaxRedirectsError;
-/**
-An error to be thrown when the server response code is not 2xx nor 3xx if `options.followRedirect` is `true`, but always except for 304.
-Includes a `response` property.
-*/
-class HTTPError extends RequestError {
- constructor(response) {
- super(`Response code ${response.statusCode} (${response.statusMessage})`, {}, response.request);
- this.name = 'HTTPError';
- this.code = 'ERR_NON_2XX_3XX_RESPONSE';
- }
-}
-exports.HTTPError = HTTPError;
-/**
-An error to be thrown when a cache method fails.
-For example, if the database goes down or there's a filesystem error.
-*/
-class CacheError extends RequestError {
- constructor(error, request) {
- super(error.message, error, request);
- this.name = 'CacheError';
- this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_CACHE_ACCESS' : this.code;
- }
-}
-exports.CacheError = CacheError;
-/**
-An error to be thrown when the request body is a stream and an error occurs while reading from that stream.
-*/
-class UploadError extends RequestError {
- constructor(error, request) {
- super(error.message, error, request);
- this.name = 'UploadError';
- this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_UPLOAD' : this.code;
- }
-}
-exports.UploadError = UploadError;
-/**
-An error to be thrown when the request is aborted due to a timeout.
-Includes an `event` and `timings` property.
-*/
-class TimeoutError extends RequestError {
- constructor(error, timings, request) {
- super(error.message, error, request);
- this.name = 'TimeoutError';
- this.event = error.event;
- this.timings = timings;
- }
-}
-exports.TimeoutError = TimeoutError;
-/**
-An error to be thrown when reading from response stream fails.
-*/
-class ReadError extends RequestError {
- constructor(error, request) {
- super(error.message, error, request);
- this.name = 'ReadError';
- this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_READING_RESPONSE_STREAM' : this.code;
- }
-}
-exports.ReadError = ReadError;
-/**
-An error to be thrown when given an unsupported protocol.
-*/
-class UnsupportedProtocolError extends RequestError {
- constructor(options) {
- super(`Unsupported protocol "${options.url.protocol}"`, {}, options);
- this.name = 'UnsupportedProtocolError';
- this.code = 'ERR_UNSUPPORTED_PROTOCOL';
- }
-}
-exports.UnsupportedProtocolError = UnsupportedProtocolError;
-const proxiedRequestEvents = [
- 'socket',
- 'connect',
- 'continue',
- 'information',
- 'upgrade',
- 'timeout'
-];
-class Request extends stream_1.Duplex {
- constructor(url, options = {}, defaults) {
- super({
- // This must be false, to enable throwing after destroy
- // It is used for retry logic in Promise API
- autoDestroy: false,
- // It needs to be zero because we're just proxying the data to another stream
- highWaterMark: 0
- });
- this[kDownloadedSize] = 0;
- this[kUploadedSize] = 0;
- this.requestInitialized = false;
- this[kServerResponsesPiped] = new Set();
- this.redirects = [];
- this[kStopReading] = false;
- this[kTriggerRead] = false;
- this[kJobs] = [];
- this.retryCount = 0;
- // TODO: Remove this when targeting Node.js >= 12
- this._progressCallbacks = [];
- const unlockWrite = () => this._unlockWrite();
- const lockWrite = () => this._lockWrite();
- this.on('pipe', (source) => {
- source.prependListener('data', unlockWrite);
- source.on('data', lockWrite);
- source.prependListener('end', unlockWrite);
- source.on('end', lockWrite);
- });
- this.on('unpipe', (source) => {
- source.off('data', unlockWrite);
- source.off('data', lockWrite);
- source.off('end', unlockWrite);
- source.off('end', lockWrite);
- });
- this.on('pipe', source => {
- if (source instanceof http_1.IncomingMessage) {
- this.options.headers = {
- ...source.headers,
- ...this.options.headers
- };
- }
- });
- const { json, body, form } = options;
- if (json || body || form) {
- this._lockWrite();
- }
- if (exports.kIsNormalizedAlready in options) {
- this.options = options;
- }
- else {
- try {
- // @ts-expect-error Common TypeScript bug saying that `this.constructor` is not accessible
- this.options = this.constructor.normalizeArguments(url, options, defaults);
- }
- catch (error) {
- // TODO: Move this to `_destroy()`
- if (is_1.default.nodeStream(options.body)) {
- options.body.destroy();
- }
- this.destroy(error);
- return;
- }
- }
- (async () => {
- var _a;
- try {
- if (this.options.body instanceof fs_1.ReadStream) {
- await waitForOpenFile(this.options.body);
- }
- const { url: normalizedURL } = this.options;
- if (!normalizedURL) {
- throw new TypeError('Missing `url` property');
- }
- this.requestUrl = normalizedURL.toString();
- decodeURI(this.requestUrl);
- await this._finalizeBody();
- await this._makeRequest();
- if (this.destroyed) {
- (_a = this[kRequest]) === null || _a === void 0 ? void 0 : _a.destroy();
- return;
- }
- // Queued writes etc.
- for (const job of this[kJobs]) {
- job();
- }
- // Prevent memory leak
- this[kJobs].length = 0;
- this.requestInitialized = true;
- }
- catch (error) {
- if (error instanceof RequestError) {
- this._beforeError(error);
- return;
- }
- // This is a workaround for https://github.com/nodejs/node/issues/33335
- if (!this.destroyed) {
- this.destroy(error);
- }
- }
- })();
- }
- static normalizeArguments(url, options, defaults) {
- var _a, _b, _c, _d, _e;
- const rawOptions = options;
- if (is_1.default.object(url) && !is_1.default.urlInstance(url)) {
- options = { ...defaults, ...url, ...options };
- }
- else {
- if (url && options && options.url !== undefined) {
- throw new TypeError('The `url` option is mutually exclusive with the `input` argument');
- }
- options = { ...defaults, ...options };
- if (url !== undefined) {
- options.url = url;
- }
- if (is_1.default.urlInstance(options.url)) {
- options.url = new url_1.URL(options.url.toString());
- }
- }
- // TODO: Deprecate URL options in Got 12.
- // Support extend-specific options
- if (options.cache === false) {
- options.cache = undefined;
- }
- if (options.dnsCache === false) {
- options.dnsCache = undefined;
- }
- // Nice type assertions
- is_1.assert.any([is_1.default.string, is_1.default.undefined], options.method);
- is_1.assert.any([is_1.default.object, is_1.default.undefined], options.headers);
- is_1.assert.any([is_1.default.string, is_1.default.urlInstance, is_1.default.undefined], options.prefixUrl);
- is_1.assert.any([is_1.default.object, is_1.default.undefined], options.cookieJar);
- is_1.assert.any([is_1.default.object, is_1.default.string, is_1.default.undefined], options.searchParams);
- is_1.assert.any([is_1.default.object, is_1.default.string, is_1.default.undefined], options.cache);
- is_1.assert.any([is_1.default.object, is_1.default.number, is_1.default.undefined], options.timeout);
- is_1.assert.any([is_1.default.object, is_1.default.undefined], options.context);
- is_1.assert.any([is_1.default.object, is_1.default.undefined], options.hooks);
- is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.decompress);
- is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.ignoreInvalidCookies);
- is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.followRedirect);
- is_1.assert.any([is_1.default.number, is_1.default.undefined], options.maxRedirects);
- is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.throwHttpErrors);
- is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.http2);
- is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.allowGetBody);
- is_1.assert.any([is_1.default.string, is_1.default.undefined], options.localAddress);
- is_1.assert.any([dns_ip_version_1.isDnsLookupIpVersion, is_1.default.undefined], options.dnsLookupIpVersion);
- is_1.assert.any([is_1.default.object, is_1.default.undefined], options.https);
- is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.rejectUnauthorized);
- if (options.https) {
- is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.https.rejectUnauthorized);
- is_1.assert.any([is_1.default.function_, is_1.default.undefined], options.https.checkServerIdentity);
- is_1.assert.any([is_1.default.string, is_1.default.object, is_1.default.array, is_1.default.undefined], options.https.certificateAuthority);
- is_1.assert.any([is_1.default.string, is_1.default.object, is_1.default.array, is_1.default.undefined], options.https.key);
- is_1.assert.any([is_1.default.string, is_1.default.object, is_1.default.array, is_1.default.undefined], options.https.certificate);
- is_1.assert.any([is_1.default.string, is_1.default.undefined], options.https.passphrase);
- is_1.assert.any([is_1.default.string, is_1.default.buffer, is_1.default.array, is_1.default.undefined], options.https.pfx);
- }
- is_1.assert.any([is_1.default.object, is_1.default.undefined], options.cacheOptions);
- // `options.method`
- if (is_1.default.string(options.method)) {
- options.method = options.method.toUpperCase();
- }
- else {
- options.method = 'GET';
- }
- // `options.headers`
- if (options.headers === (defaults === null || defaults === void 0 ? void 0 : defaults.headers)) {
- options.headers = { ...options.headers };
- }
- else {
- options.headers = lowercaseKeys({ ...(defaults === null || defaults === void 0 ? void 0 : defaults.headers), ...options.headers });
- }
- // Disallow legacy `url.Url`
- if ('slashes' in options) {
- throw new TypeError('The legacy `url.Url` has been deprecated. Use `URL` instead.');
- }
- // `options.auth`
- if ('auth' in options) {
- throw new TypeError('Parameter `auth` is deprecated. Use `username` / `password` instead.');
- }
- // `options.searchParams`
- if ('searchParams' in options) {
- if (options.searchParams && options.searchParams !== (defaults === null || defaults === void 0 ? void 0 : defaults.searchParams)) {
- let searchParameters;
- if (is_1.default.string(options.searchParams) || (options.searchParams instanceof url_1.URLSearchParams)) {
- searchParameters = new url_1.URLSearchParams(options.searchParams);
- }
- else {
- validateSearchParameters(options.searchParams);
- searchParameters = new url_1.URLSearchParams();
- // eslint-disable-next-line guard-for-in
- for (const key in options.searchParams) {
- const value = options.searchParams[key];
- if (value === null) {
- searchParameters.append(key, '');
- }
- else if (value !== undefined) {
- searchParameters.append(key, value);
- }
- }
- }
- // `normalizeArguments()` is also used to merge options
- (_a = defaults === null || defaults === void 0 ? void 0 : defaults.searchParams) === null || _a === void 0 ? void 0 : _a.forEach((value, key) => {
- // Only use default if one isn't already defined
- if (!searchParameters.has(key)) {
- searchParameters.append(key, value);
- }
- });
- options.searchParams = searchParameters;
- }
- }
- // `options.username` & `options.password`
- options.username = (_b = options.username) !== null && _b !== void 0 ? _b : '';
- options.password = (_c = options.password) !== null && _c !== void 0 ? _c : '';
- // `options.prefixUrl` & `options.url`
- if (is_1.default.undefined(options.prefixUrl)) {
- options.prefixUrl = (_d = defaults === null || defaults === void 0 ? void 0 : defaults.prefixUrl) !== null && _d !== void 0 ? _d : '';
- }
- else {
- options.prefixUrl = options.prefixUrl.toString();
- if (options.prefixUrl !== '' && !options.prefixUrl.endsWith('/')) {
- options.prefixUrl += '/';
- }
- }
- if (is_1.default.string(options.url)) {
- if (options.url.startsWith('/')) {
- throw new Error('`input` must not start with a slash when using `prefixUrl`');
- }
- options.url = options_to_url_1.default(options.prefixUrl + options.url, options);
- }
- else if ((is_1.default.undefined(options.url) && options.prefixUrl !== '') || options.protocol) {
- options.url = options_to_url_1.default(options.prefixUrl, options);
- }
- if (options.url) {
- if ('port' in options) {
- delete options.port;
- }
- // Make it possible to change `options.prefixUrl`
- let { prefixUrl } = options;
- Object.defineProperty(options, 'prefixUrl', {
- set: (value) => {
- const url = options.url;
- if (!url.href.startsWith(value)) {
- throw new Error(`Cannot change \`prefixUrl\` from ${prefixUrl} to ${value}: ${url.href}`);
- }
- options.url = new url_1.URL(value + url.href.slice(prefixUrl.length));
- prefixUrl = value;
- },
- get: () => prefixUrl
- });
- // Support UNIX sockets
- let { protocol } = options.url;
- if (protocol === 'unix:') {
- protocol = 'http:';
- options.url = new url_1.URL(`http://unix${options.url.pathname}${options.url.search}`);
- }
- // Set search params
- if (options.searchParams) {
- // eslint-disable-next-line @typescript-eslint/no-base-to-string
- options.url.search = options.searchParams.toString();
- }
- // Protocol check
- if (protocol !== 'http:' && protocol !== 'https:') {
- throw new UnsupportedProtocolError(options);
- }
- // Update `username`
- if (options.username === '') {
- options.username = options.url.username;
- }
- else {
- options.url.username = options.username;
- }
- // Update `password`
- if (options.password === '') {
- options.password = options.url.password;
- }
- else {
- options.url.password = options.password;
- }
- }
- // `options.cookieJar`
- const { cookieJar } = options;
- if (cookieJar) {
- let { setCookie, getCookieString } = cookieJar;
- is_1.assert.function_(setCookie);
- is_1.assert.function_(getCookieString);
- /* istanbul ignore next: Horrible `tough-cookie` v3 check */
- if (setCookie.length === 4 && getCookieString.length === 0) {
- setCookie = util_1.promisify(setCookie.bind(options.cookieJar));
- getCookieString = util_1.promisify(getCookieString.bind(options.cookieJar));
- options.cookieJar = {
- setCookie,
- getCookieString: getCookieString
- };
- }
- }
- // `options.cache`
- const { cache } = options;
- if (cache) {
- if (!cacheableStore.has(cache)) {
- cacheableStore.set(cache, new CacheableRequest(((requestOptions, handler) => {
- const result = requestOptions[kRequest](requestOptions, handler);
- // TODO: remove this when `cacheable-request` supports async request functions.
- if (is_1.default.promise(result)) {
- // @ts-expect-error
- // We only need to implement the error handler in order to support HTTP2 caching.
- // The result will be a promise anyway.
- result.once = (event, handler) => {
- if (event === 'error') {
- result.catch(handler);
- }
- else if (event === 'abort') {
- // The empty catch is needed here in case when
- // it rejects before it's `await`ed in `_makeRequest`.
- (async () => {
- try {
- const request = (await result);
- request.once('abort', handler);
- }
- catch (_a) { }
- })();
- }
- else {
- /* istanbul ignore next: safety check */
- throw new Error(`Unknown HTTP2 promise event: ${event}`);
- }
- return result;
- };
- }
- return result;
- }), cache));
- }
- }
- // `options.cacheOptions`
- options.cacheOptions = { ...options.cacheOptions };
- // `options.dnsCache`
- if (options.dnsCache === true) {
- if (!globalDnsCache) {
- globalDnsCache = new cacheable_lookup_1.default();
- }
- options.dnsCache = globalDnsCache;
- }
- else if (!is_1.default.undefined(options.dnsCache) && !options.dnsCache.lookup) {
- throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${is_1.default(options.dnsCache)}`);
- }
- // `options.timeout`
- if (is_1.default.number(options.timeout)) {
- options.timeout = { request: options.timeout };
- }
- else if (defaults && options.timeout !== defaults.timeout) {
- options.timeout = {
- ...defaults.timeout,
- ...options.timeout
- };
- }
- else {
- options.timeout = { ...options.timeout };
- }
- // `options.context`
- if (!options.context) {
- options.context = {};
- }
- // `options.hooks`
- const areHooksDefault = options.hooks === (defaults === null || defaults === void 0 ? void 0 : defaults.hooks);
- options.hooks = { ...options.hooks };
- for (const event of exports.knownHookEvents) {
- if (event in options.hooks) {
- if (is_1.default.array(options.hooks[event])) {
- // See https://github.com/microsoft/TypeScript/issues/31445#issuecomment-576929044
- options.hooks[event] = [...options.hooks[event]];
- }
- else {
- throw new TypeError(`Parameter \`${event}\` must be an Array, got ${is_1.default(options.hooks[event])}`);
- }
- }
- else {
- options.hooks[event] = [];
- }
- }
- if (defaults && !areHooksDefault) {
- for (const event of exports.knownHookEvents) {
- const defaultHooks = defaults.hooks[event];
- if (defaultHooks.length > 0) {
- // See https://github.com/microsoft/TypeScript/issues/31445#issuecomment-576929044
- options.hooks[event] = [
- ...defaults.hooks[event],
- ...options.hooks[event]
- ];
- }
- }
- }
- // DNS options
- if ('family' in options) {
- deprecation_warning_1.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"');
- }
- // HTTPS options
- if (defaults === null || defaults === void 0 ? void 0 : defaults.https) {
- options.https = { ...defaults.https, ...options.https };
- }
- if ('rejectUnauthorized' in options) {
- deprecation_warning_1.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"');
- }
- if ('checkServerIdentity' in options) {
- deprecation_warning_1.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"');
- }
- if ('ca' in options) {
- deprecation_warning_1.default('"options.ca" was never documented, please use "options.https.certificateAuthority"');
- }
- if ('key' in options) {
- deprecation_warning_1.default('"options.key" was never documented, please use "options.https.key"');
- }
- if ('cert' in options) {
- deprecation_warning_1.default('"options.cert" was never documented, please use "options.https.certificate"');
- }
- if ('passphrase' in options) {
- deprecation_warning_1.default('"options.passphrase" was never documented, please use "options.https.passphrase"');
- }
- if ('pfx' in options) {
- deprecation_warning_1.default('"options.pfx" was never documented, please use "options.https.pfx"');
- }
- // Other options
- if ('followRedirects' in options) {
- throw new TypeError('The `followRedirects` option does not exist. Use `followRedirect` instead.');
- }
- if (options.agent) {
- for (const key in options.agent) {
- if (key !== 'http' && key !== 'https' && key !== 'http2') {
- throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${key}\``);
- }
- }
- }
- options.maxRedirects = (_e = options.maxRedirects) !== null && _e !== void 0 ? _e : 0;
- // Set non-enumerable properties
- exports.setNonEnumerableProperties([defaults, rawOptions], options);
- return normalize_arguments_1.default(options, defaults);
- }
- _lockWrite() {
- const onLockedWrite = () => {
- throw new TypeError('The payload has been already provided');
- };
- this.write = onLockedWrite;
- this.end = onLockedWrite;
- }
- _unlockWrite() {
- this.write = super.write;
- this.end = super.end;
- }
- async _finalizeBody() {
- const { options } = this;
- const { headers } = options;
- const isForm = !is_1.default.undefined(options.form);
- const isJSON = !is_1.default.undefined(options.json);
- const isBody = !is_1.default.undefined(options.body);
- const hasPayload = isForm || isJSON || isBody;
- const cannotHaveBody = exports.withoutBody.has(options.method) && !(options.method === 'GET' && options.allowGetBody);
- this._cannotHaveBody = cannotHaveBody;
- if (hasPayload) {
- if (cannotHaveBody) {
- throw new TypeError(`The \`${options.method}\` method cannot be used with a body`);
- }
- if ([isBody, isForm, isJSON].filter(isTrue => isTrue).length > 1) {
- throw new TypeError('The `body`, `json` and `form` options are mutually exclusive');
- }
- if (isBody &&
- !(options.body instanceof stream_1.Readable) &&
- !is_1.default.string(options.body) &&
- !is_1.default.buffer(options.body) &&
- !is_form_data_1.default(options.body)) {
- throw new TypeError('The `body` option must be a stream.Readable, string or Buffer');
- }
- if (isForm && !is_1.default.object(options.form)) {
- throw new TypeError('The `form` option must be an Object');
- }
- {
- // Serialize body
- const noContentType = !is_1.default.string(headers['content-type']);
- if (isBody) {
- // Special case for https://github.com/form-data/form-data
- if (is_form_data_1.default(options.body) && noContentType) {
- headers['content-type'] = `multipart/form-data; boundary=${options.body.getBoundary()}`;
- }
- this[kBody] = options.body;
- }
- else if (isForm) {
- if (noContentType) {
- headers['content-type'] = 'application/x-www-form-urlencoded';
- }
- this[kBody] = (new url_1.URLSearchParams(options.form)).toString();
- }
- else {
- if (noContentType) {
- headers['content-type'] = 'application/json';
- }
- this[kBody] = options.stringifyJson(options.json);
- }
- const uploadBodySize = await get_body_size_1.default(this[kBody], options.headers);
- // See https://tools.ietf.org/html/rfc7230#section-3.3.2
- // A user agent SHOULD send a Content-Length in a request message when
- // no Transfer-Encoding is sent and the request method defines a meaning
- // for an enclosed payload body. For example, a Content-Length header
- // field is normally sent in a POST request even when the value is 0
- // (indicating an empty payload body). A user agent SHOULD NOT send a
- // Content-Length header field when the request message does not contain
- // a payload body and the method semantics do not anticipate such a
- // body.
- if (is_1.default.undefined(headers['content-length']) && is_1.default.undefined(headers['transfer-encoding'])) {
- if (!cannotHaveBody && !is_1.default.undefined(uploadBodySize)) {
- headers['content-length'] = String(uploadBodySize);
- }
- }
- }
- }
- else if (cannotHaveBody) {
- this._lockWrite();
- }
- else {
- this._unlockWrite();
- }
- this[kBodySize] = Number(headers['content-length']) || undefined;
- }
- async _onResponseBase(response) {
- const { options } = this;
- const { url } = options;
- this[kOriginalResponse] = response;
- if (options.decompress) {
- response = decompressResponse(response);
- }
- const statusCode = response.statusCode;
- const typedResponse = response;
- typedResponse.statusMessage = typedResponse.statusMessage ? typedResponse.statusMessage : http.STATUS_CODES[statusCode];
- typedResponse.url = options.url.toString();
- typedResponse.requestUrl = this.requestUrl;
- typedResponse.redirectUrls = this.redirects;
- typedResponse.request = this;
- typedResponse.isFromCache = response.fromCache || false;
- typedResponse.ip = this.ip;
- typedResponse.retryCount = this.retryCount;
- this[kIsFromCache] = typedResponse.isFromCache;
- this[kResponseSize] = Number(response.headers['content-length']) || undefined;
- this[kResponse] = response;
- response.once('end', () => {
- this[kResponseSize] = this[kDownloadedSize];
- this.emit('downloadProgress', this.downloadProgress);
- });
- response.once('error', (error) => {
- // Force clean-up, because some packages don't do this.
- // TODO: Fix decompress-response
- response.destroy();
- this._beforeError(new ReadError(error, this));
- });
- response.once('aborted', () => {
- this._beforeError(new ReadError({
- name: 'Error',
- message: 'The server aborted pending request',
- code: 'ECONNRESET'
- }, this));
- });
- this.emit('downloadProgress', this.downloadProgress);
- const rawCookies = response.headers['set-cookie'];
- if (is_1.default.object(options.cookieJar) && rawCookies) {
- let promises = rawCookies.map(async (rawCookie) => options.cookieJar.setCookie(rawCookie, url.toString()));
- if (options.ignoreInvalidCookies) {
- promises = promises.map(async (p) => p.catch(() => { }));
- }
- try {
- await Promise.all(promises);
- }
- catch (error) {
- this._beforeError(error);
- return;
- }
- }
- if (options.followRedirect && response.headers.location && redirectCodes.has(statusCode)) {
- // We're being redirected, we don't care about the response.
- // It'd be best to abort the request, but we can't because
- // we would have to sacrifice the TCP connection. We don't want that.
- response.resume();
- if (this[kRequest]) {
- this[kCancelTimeouts]();
- // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
- delete this[kRequest];
- this[kUnproxyEvents]();
- }
- const shouldBeGet = statusCode === 303 && options.method !== 'GET' && options.method !== 'HEAD';
- if (shouldBeGet || !options.methodRewriting) {
- // Server responded with "see other", indicating that the resource exists at another location,
- // and the client should request it from that location via GET or HEAD.
- options.method = 'GET';
- if ('body' in options) {
- delete options.body;
- }
- if ('json' in options) {
- delete options.json;
- }
- if ('form' in options) {
- delete options.form;
- }
- this[kBody] = undefined;
- delete options.headers['content-length'];
- }
- if (this.redirects.length >= options.maxRedirects) {
- this._beforeError(new MaxRedirectsError(this));
- return;
- }
- try {
- // Do not remove. See https://github.com/sindresorhus/got/pull/214
- const redirectBuffer = Buffer.from(response.headers.location, 'binary').toString();
- // Handles invalid URLs. See https://github.com/sindresorhus/got/issues/604
- const redirectUrl = new url_1.URL(redirectBuffer, url);
- const redirectString = redirectUrl.toString();
- decodeURI(redirectString);
- // eslint-disable-next-line no-inner-declarations
- function isUnixSocketURL(url) {
- return url.protocol === 'unix:' || url.hostname === 'unix';
- }
- if (!isUnixSocketURL(url) && isUnixSocketURL(redirectUrl)) {
- this._beforeError(new RequestError('Cannot redirect to UNIX socket', {}, this));
- return;
- }
- // Redirecting to a different site, clear sensitive data.
- if (redirectUrl.hostname !== url.hostname || redirectUrl.port !== url.port) {
- if ('host' in options.headers) {
- delete options.headers.host;
- }
- if ('cookie' in options.headers) {
- delete options.headers.cookie;
- }
- if ('authorization' in options.headers) {
- delete options.headers.authorization;
- }
- if (options.username || options.password) {
- options.username = '';
- options.password = '';
- }
- }
- else {
- redirectUrl.username = options.username;
- redirectUrl.password = options.password;
- }
- this.redirects.push(redirectString);
- options.url = redirectUrl;
- for (const hook of options.hooks.beforeRedirect) {
- // eslint-disable-next-line no-await-in-loop
- await hook(options, typedResponse);
- }
- this.emit('redirect', typedResponse, options);
- await this._makeRequest();
- }
- catch (error) {
- this._beforeError(error);
- return;
- }
- return;
- }
- if (options.isStream && options.throwHttpErrors && !is_response_ok_1.isResponseOk(typedResponse)) {
- this._beforeError(new HTTPError(typedResponse));
- return;
- }
- response.on('readable', () => {
- if (this[kTriggerRead]) {
- this._read();
- }
- });
- this.on('resume', () => {
- response.resume();
- });
- this.on('pause', () => {
- response.pause();
- });
- response.once('end', () => {
- this.push(null);
- });
- this.emit('response', response);
- for (const destination of this[kServerResponsesPiped]) {
- if (destination.headersSent) {
- continue;
- }
- // eslint-disable-next-line guard-for-in
- for (const key in response.headers) {
- const isAllowed = options.decompress ? key !== 'content-encoding' : true;
- const value = response.headers[key];
- if (isAllowed) {
- destination.setHeader(key, value);
- }
- }
- destination.statusCode = statusCode;
- }
- }
- async _onResponse(response) {
- try {
- await this._onResponseBase(response);
- }
- catch (error) {
- /* istanbul ignore next: better safe than sorry */
- this._beforeError(error);
- }
- }
- _onRequest(request) {
- const { options } = this;
- const { timeout, url } = options;
- http_timer_1.default(request);
- this[kCancelTimeouts] = timed_out_1.default(request, timeout, url);
- const responseEventName = options.cache ? 'cacheableResponse' : 'response';
- request.once(responseEventName, (response) => {
- void this._onResponse(response);
- });
- request.once('error', (error) => {
- var _a;
- // Force clean-up, because some packages (e.g. nock) don't do this.
- request.destroy();
- // Node.js <= 12.18.2 mistakenly emits the response `end` first.
- (_a = request.res) === null || _a === void 0 ? void 0 : _a.removeAllListeners('end');
- error = error instanceof timed_out_1.TimeoutError ? new TimeoutError(error, this.timings, this) : new RequestError(error.message, error, this);
- this._beforeError(error);
- });
- this[kUnproxyEvents] = proxy_events_1.default(request, this, proxiedRequestEvents);
- this[kRequest] = request;
- this.emit('uploadProgress', this.uploadProgress);
- // Send body
- const body = this[kBody];
- const currentRequest = this.redirects.length === 0 ? this : request;
- if (is_1.default.nodeStream(body)) {
- body.pipe(currentRequest);
- body.once('error', (error) => {
- this._beforeError(new UploadError(error, this));
- });
- }
- else {
- this._unlockWrite();
- if (!is_1.default.undefined(body)) {
- this._writeRequest(body, undefined, () => { });
- currentRequest.end();
- this._lockWrite();
- }
- else if (this._cannotHaveBody || this._noPipe) {
- currentRequest.end();
- this._lockWrite();
- }
- }
- this.emit('request', request);
- }
- async _createCacheableRequest(url, options) {
- return new Promise((resolve, reject) => {
- // TODO: Remove `utils/url-to-options.ts` when `cacheable-request` is fixed
- Object.assign(options, url_to_options_1.default(url));
- // `http-cache-semantics` checks this
- // TODO: Fix this ignore.
- // @ts-expect-error
- delete options.url;
- let request;
- // This is ugly
- const cacheRequest = cacheableStore.get(options.cache)(options, async (response) => {
- // TODO: Fix `cacheable-response`
- response._readableState.autoDestroy = false;
- if (request) {
- (await request).emit('cacheableResponse', response);
- }
- resolve(response);
- });
- // Restore options
- options.url = url;
- cacheRequest.once('error', reject);
- cacheRequest.once('request', async (requestOrPromise) => {
- request = requestOrPromise;
- resolve(request);
- });
- });
- }
- async _makeRequest() {
- var _a, _b, _c, _d, _e;
- const { options } = this;
- const { headers } = options;
- for (const key in headers) {
- if (is_1.default.undefined(headers[key])) {
- // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
- delete headers[key];
- }
- else if (is_1.default.null_(headers[key])) {
- throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${key}\` header`);
- }
- }
- if (options.decompress && is_1.default.undefined(headers['accept-encoding'])) {
- headers['accept-encoding'] = supportsBrotli ? 'gzip, deflate, br' : 'gzip, deflate';
- }
- // Set cookies
- if (options.cookieJar) {
- const cookieString = await options.cookieJar.getCookieString(options.url.toString());
- if (is_1.default.nonEmptyString(cookieString)) {
- options.headers.cookie = cookieString;
- }
- }
- for (const hook of options.hooks.beforeRequest) {
- // eslint-disable-next-line no-await-in-loop
- const result = await hook(options);
- if (!is_1.default.undefined(result)) {
- // @ts-expect-error Skip the type mismatch to support abstract responses
- options.request = () => result;
- break;
- }
- }
- if (options.body && this[kBody] !== options.body) {
- this[kBody] = options.body;
- }
- const { agent, request, timeout, url } = options;
- if (options.dnsCache && !('lookup' in options)) {
- options.lookup = options.dnsCache.lookup;
- }
- // UNIX sockets
- if (url.hostname === 'unix') {
- const matches = /(?.+?):(?.+)/.exec(`${url.pathname}${url.search}`);
- if (matches === null || matches === void 0 ? void 0 : matches.groups) {
- const { socketPath, path } = matches.groups;
- Object.assign(options, {
- socketPath,
- path,
- host: ''
- });
- }
- }
- const isHttps = url.protocol === 'https:';
- // Fallback function
- let fallbackFn;
- if (options.http2) {
- fallbackFn = http2wrapper.auto;
- }
- else {
- fallbackFn = isHttps ? https.request : http.request;
- }
- const realFn = (_a = options.request) !== null && _a !== void 0 ? _a : fallbackFn;
- // Cache support
- const fn = options.cache ? this._createCacheableRequest : realFn;
- // Pass an agent directly when HTTP2 is disabled
- if (agent && !options.http2) {
- options.agent = agent[isHttps ? 'https' : 'http'];
- }
- // Prepare plain HTTP request options
- options[kRequest] = realFn;
- delete options.request;
- // TODO: Fix this ignore.
- // @ts-expect-error
- delete options.timeout;
- const requestOptions = options;
- requestOptions.shared = (_b = options.cacheOptions) === null || _b === void 0 ? void 0 : _b.shared;
- requestOptions.cacheHeuristic = (_c = options.cacheOptions) === null || _c === void 0 ? void 0 : _c.cacheHeuristic;
- requestOptions.immutableMinTimeToLive = (_d = options.cacheOptions) === null || _d === void 0 ? void 0 : _d.immutableMinTimeToLive;
- requestOptions.ignoreCargoCult = (_e = options.cacheOptions) === null || _e === void 0 ? void 0 : _e.ignoreCargoCult;
- // If `dnsLookupIpVersion` is not present do not override `family`
- if (options.dnsLookupIpVersion !== undefined) {
- try {
- requestOptions.family = dns_ip_version_1.dnsLookupIpVersionToFamily(options.dnsLookupIpVersion);
- }
- catch (_f) {
- throw new Error('Invalid `dnsLookupIpVersion` option value');
- }
- }
- // HTTPS options remapping
- if (options.https) {
- if ('rejectUnauthorized' in options.https) {
- requestOptions.rejectUnauthorized = options.https.rejectUnauthorized;
- }
- if (options.https.checkServerIdentity) {
- requestOptions.checkServerIdentity = options.https.checkServerIdentity;
- }
- if (options.https.certificateAuthority) {
- requestOptions.ca = options.https.certificateAuthority;
- }
- if (options.https.certificate) {
- requestOptions.cert = options.https.certificate;
- }
- if (options.https.key) {
- requestOptions.key = options.https.key;
- }
- if (options.https.passphrase) {
- requestOptions.passphrase = options.https.passphrase;
- }
- if (options.https.pfx) {
- requestOptions.pfx = options.https.pfx;
- }
- }
- try {
- let requestOrResponse = await fn(url, requestOptions);
- if (is_1.default.undefined(requestOrResponse)) {
- requestOrResponse = fallbackFn(url, requestOptions);
- }
- // Restore options
- options.request = request;
- options.timeout = timeout;
- options.agent = agent;
- // HTTPS options restore
- if (options.https) {
- if ('rejectUnauthorized' in options.https) {
- delete requestOptions.rejectUnauthorized;
- }
- if (options.https.checkServerIdentity) {
- // @ts-expect-error - This one will be removed when we remove the alias.
- delete requestOptions.checkServerIdentity;
- }
- if (options.https.certificateAuthority) {
- delete requestOptions.ca;
- }
- if (options.https.certificate) {
- delete requestOptions.cert;
- }
- if (options.https.key) {
- delete requestOptions.key;
- }
- if (options.https.passphrase) {
- delete requestOptions.passphrase;
- }
- if (options.https.pfx) {
- delete requestOptions.pfx;
- }
- }
- if (isClientRequest(requestOrResponse)) {
- this._onRequest(requestOrResponse);
- // Emit the response after the stream has been ended
- }
- else if (this.writable) {
- this.once('finish', () => {
- void this._onResponse(requestOrResponse);
- });
- this._unlockWrite();
- this.end();
- this._lockWrite();
- }
- else {
- void this._onResponse(requestOrResponse);
- }
- }
- catch (error) {
- if (error instanceof CacheableRequest.CacheError) {
- throw new CacheError(error, this);
- }
- throw new RequestError(error.message, error, this);
- }
- }
- async _error(error) {
- try {
- for (const hook of this.options.hooks.beforeError) {
- // eslint-disable-next-line no-await-in-loop
- error = await hook(error);
- }
- }
- catch (error_) {
- error = new RequestError(error_.message, error_, this);
- }
- this.destroy(error);
- }
- _beforeError(error) {
- if (this[kStopReading]) {
- return;
- }
- const { options } = this;
- const retryCount = this.retryCount + 1;
- this[kStopReading] = true;
- if (!(error instanceof RequestError)) {
- error = new RequestError(error.message, error, this);
- }
- const typedError = error;
- const { response } = typedError;
- void (async () => {
- if (response && !response.body) {
- response.setEncoding(this._readableState.encoding);
- try {
- response.rawBody = await get_buffer_1.default(response);
- response.body = response.rawBody.toString();
- }
- catch (_a) { }
- }
- if (this.listenerCount('retry') !== 0) {
- let backoff;
- try {
- let retryAfter;
- if (response && 'retry-after' in response.headers) {
- retryAfter = Number(response.headers['retry-after']);
- if (Number.isNaN(retryAfter)) {
- retryAfter = Date.parse(response.headers['retry-after']) - Date.now();
- if (retryAfter <= 0) {
- retryAfter = 1;
- }
- }
- else {
- retryAfter *= 1000;
- }
- }
- backoff = await options.retry.calculateDelay({
- attemptCount: retryCount,
- retryOptions: options.retry,
- error: typedError,
- retryAfter,
- computedValue: calculate_retry_delay_1.default({
- attemptCount: retryCount,
- retryOptions: options.retry,
- error: typedError,
- retryAfter,
- computedValue: 0
- })
- });
- }
- catch (error_) {
- void this._error(new RequestError(error_.message, error_, this));
- return;
- }
- if (backoff) {
- const retry = async () => {
- try {
- for (const hook of this.options.hooks.beforeRetry) {
- // eslint-disable-next-line no-await-in-loop
- await hook(this.options, typedError, retryCount);
- }
- }
- catch (error_) {
- void this._error(new RequestError(error_.message, error, this));
- return;
- }
- // Something forced us to abort the retry
- if (this.destroyed) {
- return;
- }
- this.destroy();
- this.emit('retry', retryCount, error);
- };
- this[kRetryTimeout] = setTimeout(retry, backoff);
- return;
- }
- }
- void this._error(typedError);
- })();
- }
- _read() {
- this[kTriggerRead] = true;
- const response = this[kResponse];
- if (response && !this[kStopReading]) {
- // We cannot put this in the `if` above
- // because `.read()` also triggers the `end` event
- if (response.readableLength) {
- this[kTriggerRead] = false;
- }
- let data;
- while ((data = response.read()) !== null) {
- this[kDownloadedSize] += data.length;
- this[kStartedReading] = true;
- const progress = this.downloadProgress;
- if (progress.percent < 1) {
- this.emit('downloadProgress', progress);
- }
- this.push(data);
- }
- }
- }
- // Node.js 12 has incorrect types, so the encoding must be a string
- _write(chunk, encoding, callback) {
- const write = () => {
- this._writeRequest(chunk, encoding, callback);
- };
- if (this.requestInitialized) {
- write();
- }
- else {
- this[kJobs].push(write);
- }
- }
- _writeRequest(chunk, encoding, callback) {
- if (this[kRequest].destroyed) {
- // Probably the `ClientRequest` instance will throw
- return;
- }
- this._progressCallbacks.push(() => {
- this[kUploadedSize] += Buffer.byteLength(chunk, encoding);
- const progress = this.uploadProgress;
- if (progress.percent < 1) {
- this.emit('uploadProgress', progress);
- }
- });
- // TODO: What happens if it's from cache? Then this[kRequest] won't be defined.
- this[kRequest].write(chunk, encoding, (error) => {
- if (!error && this._progressCallbacks.length > 0) {
- this._progressCallbacks.shift()();
- }
- callback(error);
- });
- }
- _final(callback) {
- const endRequest = () => {
- // FIX: Node.js 10 calls the write callback AFTER the end callback!
- while (this._progressCallbacks.length !== 0) {
- this._progressCallbacks.shift()();
- }
- // We need to check if `this[kRequest]` is present,
- // because it isn't when we use cache.
- if (!(kRequest in this)) {
- callback();
- return;
- }
- if (this[kRequest].destroyed) {
- callback();
- return;
- }
- this[kRequest].end((error) => {
- if (!error) {
- this[kBodySize] = this[kUploadedSize];
- this.emit('uploadProgress', this.uploadProgress);
- this[kRequest].emit('upload-complete');
- }
- callback(error);
- });
- };
- if (this.requestInitialized) {
- endRequest();
- }
- else {
- this[kJobs].push(endRequest);
- }
- }
- _destroy(error, callback) {
- var _a;
- this[kStopReading] = true;
- // Prevent further retries
- clearTimeout(this[kRetryTimeout]);
- if (kRequest in this) {
- this[kCancelTimeouts]();
- // TODO: Remove the next `if` when these get fixed:
- // - https://github.com/nodejs/node/issues/32851
- if (!((_a = this[kResponse]) === null || _a === void 0 ? void 0 : _a.complete)) {
- this[kRequest].destroy();
- }
- }
- if (error !== null && !is_1.default.undefined(error) && !(error instanceof RequestError)) {
- error = new RequestError(error.message, error, this);
- }
- callback(error);
- }
- get _isAboutToError() {
- return this[kStopReading];
- }
- /**
- The remote IP address.
- */
- get ip() {
- var _a;
- return (_a = this.socket) === null || _a === void 0 ? void 0 : _a.remoteAddress;
- }
- /**
- Indicates whether the request has been aborted or not.
- */
- get aborted() {
- var _a, _b, _c;
- return ((_b = (_a = this[kRequest]) === null || _a === void 0 ? void 0 : _a.destroyed) !== null && _b !== void 0 ? _b : this.destroyed) && !((_c = this[kOriginalResponse]) === null || _c === void 0 ? void 0 : _c.complete);
- }
- get socket() {
- var _a, _b;
- return (_b = (_a = this[kRequest]) === null || _a === void 0 ? void 0 : _a.socket) !== null && _b !== void 0 ? _b : undefined;
- }
- /**
- Progress event for downloading (receiving a response).
- */
- get downloadProgress() {
- let percent;
- if (this[kResponseSize]) {
- percent = this[kDownloadedSize] / this[kResponseSize];
- }
- else if (this[kResponseSize] === this[kDownloadedSize]) {
- percent = 1;
- }
- else {
- percent = 0;
- }
- return {
- percent,
- transferred: this[kDownloadedSize],
- total: this[kResponseSize]
- };
- }
- /**
- Progress event for uploading (sending a request).
- */
- get uploadProgress() {
- let percent;
- if (this[kBodySize]) {
- percent = this[kUploadedSize] / this[kBodySize];
- }
- else if (this[kBodySize] === this[kUploadedSize]) {
- percent = 1;
- }
- else {
- percent = 0;
- }
- return {
- percent,
- transferred: this[kUploadedSize],
- total: this[kBodySize]
- };
- }
- /**
- The object contains the following properties:
-
- - `start` - Time when the request started.
- - `socket` - Time when a socket was assigned to the request.
- - `lookup` - Time when the DNS lookup finished.
- - `connect` - Time when the socket successfully connected.
- - `secureConnect` - Time when the socket securely connected.
- - `upload` - Time when the request finished uploading.
- - `response` - Time when the request fired `response` event.
- - `end` - Time when the response fired `end` event.
- - `error` - Time when the request fired `error` event.
- - `abort` - Time when the request fired `abort` event.
- - `phases`
- - `wait` - `timings.socket - timings.start`
- - `dns` - `timings.lookup - timings.socket`
- - `tcp` - `timings.connect - timings.lookup`
- - `tls` - `timings.secureConnect - timings.connect`
- - `request` - `timings.upload - (timings.secureConnect || timings.connect)`
- - `firstByte` - `timings.response - timings.upload`
- - `download` - `timings.end - timings.response`
- - `total` - `(timings.end || timings.error || timings.abort) - timings.start`
-
- If something has not been measured yet, it will be `undefined`.
-
- __Note__: The time is a `number` representing the milliseconds elapsed since the UNIX epoch.
- */
- get timings() {
- var _a;
- return (_a = this[kRequest]) === null || _a === void 0 ? void 0 : _a.timings;
- }
- /**
- Whether the response was retrieved from the cache.
- */
- get isFromCache() {
- return this[kIsFromCache];
- }
- pipe(destination, options) {
- if (this[kStartedReading]) {
- throw new Error('Failed to pipe. The response has been emitted already.');
- }
- if (destination instanceof http_1.ServerResponse) {
- this[kServerResponsesPiped].add(destination);
- }
- return super.pipe(destination, options);
- }
- unpipe(destination) {
- if (destination instanceof http_1.ServerResponse) {
- this[kServerResponsesPiped].delete(destination);
- }
- super.unpipe(destination);
- return this;
- }
-}
-exports["default"] = Request;
-
-
-/***/ }),
-
-/***/ 4993:
-/***/ ((__unused_webpack_module, exports) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.dnsLookupIpVersionToFamily = exports.isDnsLookupIpVersion = void 0;
-const conversionTable = {
- auto: 0,
- ipv4: 4,
- ipv6: 6
-};
-exports.isDnsLookupIpVersion = (value) => {
- return value in conversionTable;
-};
-exports.dnsLookupIpVersionToFamily = (dnsLookupIpVersion) => {
- if (exports.isDnsLookupIpVersion(dnsLookupIpVersion)) {
- return conversionTable[dnsLookupIpVersion];
- }
- throw new Error('Invalid DNS lookup IP version');
-};
-
-
-/***/ }),
-
-/***/ 4564:
-/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const fs_1 = __nccwpck_require__(7147);
-const util_1 = __nccwpck_require__(3837);
-const is_1 = __nccwpck_require__(7678);
-const is_form_data_1 = __nccwpck_require__(40);
-const statAsync = util_1.promisify(fs_1.stat);
-exports["default"] = async (body, headers) => {
- if (headers && 'content-length' in headers) {
- return Number(headers['content-length']);
- }
- if (!body) {
- return 0;
- }
- if (is_1.default.string(body)) {
- return Buffer.byteLength(body);
- }
- if (is_1.default.buffer(body)) {
- return body.length;
- }
- if (is_form_data_1.default(body)) {
- return util_1.promisify(body.getLength.bind(body))();
- }
- if (body instanceof fs_1.ReadStream) {
- const { size } = await statAsync(body.path);
- if (size === 0) {
- return undefined;
- }
- return size;
- }
- return undefined;
-};
-
-
-/***/ }),
-
-/***/ 4500:
-/***/ ((__unused_webpack_module, exports) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-// TODO: Update https://github.com/sindresorhus/get-stream
-const getBuffer = async (stream) => {
- const chunks = [];
- let length = 0;
- for await (const chunk of stream) {
- chunks.push(chunk);
- length += Buffer.byteLength(chunk);
- }
- if (Buffer.isBuffer(chunks[0])) {
- return Buffer.concat(chunks, length);
- }
- return Buffer.from(chunks.join(''));
-};
-exports["default"] = getBuffer;
-
-
-/***/ }),
-
-/***/ 40:
-/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const is_1 = __nccwpck_require__(7678);
-exports["default"] = (body) => is_1.default.nodeStream(body) && is_1.default.function_(body.getBoundary);
-
-
-/***/ }),
-
-/***/ 9298:
-/***/ ((__unused_webpack_module, exports) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.isResponseOk = void 0;
-exports.isResponseOk = (response) => {
- const { statusCode } = response;
- const limitStatusCode = response.request.options.followRedirect ? 299 : 399;
- return (statusCode >= 200 && statusCode <= limitStatusCode) || statusCode === 304;
-};
-
-
-/***/ }),
-
-/***/ 9219:
-/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-/* istanbul ignore file: deprecated */
-const url_1 = __nccwpck_require__(7310);
-const keys = [
- 'protocol',
- 'host',
- 'hostname',
- 'port',
- 'pathname',
- 'search'
-];
-exports["default"] = (origin, options) => {
- var _a, _b;
- if (options.path) {
- if (options.pathname) {
- throw new TypeError('Parameters `path` and `pathname` are mutually exclusive.');
- }
- if (options.search) {
- throw new TypeError('Parameters `path` and `search` are mutually exclusive.');
- }
- if (options.searchParams) {
- throw new TypeError('Parameters `path` and `searchParams` are mutually exclusive.');
- }
- }
- if (options.search && options.searchParams) {
- throw new TypeError('Parameters `search` and `searchParams` are mutually exclusive.');
- }
- if (!origin) {
- if (!options.protocol) {
- throw new TypeError('No URL protocol specified');
- }
- origin = `${options.protocol}//${(_b = (_a = options.hostname) !== null && _a !== void 0 ? _a : options.host) !== null && _b !== void 0 ? _b : ''}`;
- }
- const url = new url_1.URL(origin);
- if (options.path) {
- const searchIndex = options.path.indexOf('?');
- if (searchIndex === -1) {
- options.pathname = options.path;
- }
- else {
- options.pathname = options.path.slice(0, searchIndex);
- options.search = options.path.slice(searchIndex + 1);
- }
- delete options.path;
- }
- for (const key of keys) {
- if (options[key]) {
- url[key] = options[key].toString();
- }
- }
- return url;
-};
-
-
-/***/ }),
-
-/***/ 3021:
-/***/ ((__unused_webpack_module, exports) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-function default_1(from, to, events) {
- const fns = {};
- for (const event of events) {
- fns[event] = (...args) => {
- to.emit(event, ...args);
- };
- from.on(event, fns[event]);
- }
- return () => {
- for (const event of events) {
- from.off(event, fns[event]);
- }
- };
-}
-exports["default"] = default_1;
-
-
-/***/ }),
-
-/***/ 2454:
-/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.TimeoutError = void 0;
-const net = __nccwpck_require__(1808);
-const unhandle_1 = __nccwpck_require__(1593);
-const reentry = Symbol('reentry');
-const noop = () => { };
-class TimeoutError extends Error {
- constructor(threshold, event) {
- super(`Timeout awaiting '${event}' for ${threshold}ms`);
- this.event = event;
- this.name = 'TimeoutError';
- this.code = 'ETIMEDOUT';
- }
-}
-exports.TimeoutError = TimeoutError;
-exports["default"] = (request, delays, options) => {
- if (reentry in request) {
- return noop;
- }
- request[reentry] = true;
- const cancelers = [];
- const { once, unhandleAll } = unhandle_1.default();
- const addTimeout = (delay, callback, event) => {
- var _a;
- const timeout = setTimeout(callback, delay, delay, event);
- (_a = timeout.unref) === null || _a === void 0 ? void 0 : _a.call(timeout);
- const cancel = () => {
- clearTimeout(timeout);
- };
- cancelers.push(cancel);
- return cancel;
- };
- const { host, hostname } = options;
- const timeoutHandler = (delay, event) => {
- request.destroy(new TimeoutError(delay, event));
- };
- const cancelTimeouts = () => {
- for (const cancel of cancelers) {
- cancel();
- }
- unhandleAll();
- };
- request.once('error', error => {
- cancelTimeouts();
- // Save original behavior
- /* istanbul ignore next */
- if (request.listenerCount('error') === 0) {
- throw error;
- }
- });
- request.once('close', cancelTimeouts);
- once(request, 'response', (response) => {
- once(response, 'end', cancelTimeouts);
- });
- if (typeof delays.request !== 'undefined') {
- addTimeout(delays.request, timeoutHandler, 'request');
- }
- if (typeof delays.socket !== 'undefined') {
- const socketTimeoutHandler = () => {
- timeoutHandler(delays.socket, 'socket');
- };
- request.setTimeout(delays.socket, socketTimeoutHandler);
- // `request.setTimeout(0)` causes a memory leak.
- // We can just remove the listener and forget about the timer - it's unreffed.
- // See https://github.com/sindresorhus/got/issues/690
- cancelers.push(() => {
- request.removeListener('timeout', socketTimeoutHandler);
- });
- }
- once(request, 'socket', (socket) => {
- var _a;
- const { socketPath } = request;
- /* istanbul ignore next: hard to test */
- if (socket.connecting) {
- const hasPath = Boolean(socketPath !== null && socketPath !== void 0 ? socketPath : net.isIP((_a = hostname !== null && hostname !== void 0 ? hostname : host) !== null && _a !== void 0 ? _a : '') !== 0);
- if (typeof delays.lookup !== 'undefined' && !hasPath && typeof socket.address().address === 'undefined') {
- const cancelTimeout = addTimeout(delays.lookup, timeoutHandler, 'lookup');
- once(socket, 'lookup', cancelTimeout);
- }
- if (typeof delays.connect !== 'undefined') {
- const timeConnect = () => addTimeout(delays.connect, timeoutHandler, 'connect');
- if (hasPath) {
- once(socket, 'connect', timeConnect());
- }
- else {
- once(socket, 'lookup', (error) => {
- if (error === null) {
- once(socket, 'connect', timeConnect());
- }
- });
- }
- }
- if (typeof delays.secureConnect !== 'undefined' && options.protocol === 'https:') {
- once(socket, 'connect', () => {
- const cancelTimeout = addTimeout(delays.secureConnect, timeoutHandler, 'secureConnect');
- once(socket, 'secureConnect', cancelTimeout);
- });
- }
- }
- if (typeof delays.send !== 'undefined') {
- const timeRequest = () => addTimeout(delays.send, timeoutHandler, 'send');
- /* istanbul ignore next: hard to test */
- if (socket.connecting) {
- once(socket, 'connect', () => {
- once(request, 'upload-complete', timeRequest());
- });
- }
- else {
- once(request, 'upload-complete', timeRequest());
- }
- }
- });
- if (typeof delays.response !== 'undefined') {
- once(request, 'upload-complete', () => {
- const cancelTimeout = addTimeout(delays.response, timeoutHandler, 'response');
- once(request, 'response', cancelTimeout);
- });
- }
- return cancelTimeouts;
-};
-
-
-/***/ }),
-
-/***/ 1593:
-/***/ ((__unused_webpack_module, exports) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-// When attaching listeners, it's very easy to forget about them.
-// Especially if you do error handling and set timeouts.
-// So instead of checking if it's proper to throw an error on every timeout ever,
-// use this simple tool which will remove all listeners you have attached.
-exports["default"] = () => {
- const handlers = [];
- return {
- once(origin, event, fn) {
- origin.once(event, fn);
- handlers.push({ origin, event, fn });
- },
- unhandleAll() {
- for (const handler of handlers) {
- const { origin, event, fn } = handler;
- origin.removeListener(event, fn);
- }
- handlers.length = 0;
- }
- };
-};
-
-
-/***/ }),
-
-/***/ 8026:
-/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const is_1 = __nccwpck_require__(7678);
-exports["default"] = (url) => {
- // Cast to URL
- url = url;
- const options = {
- protocol: url.protocol,
- hostname: is_1.default.string(url.hostname) && url.hostname.startsWith('[') ? url.hostname.slice(1, -1) : url.hostname,
- host: url.host,
- hash: url.hash,
- search: url.search,
- pathname: url.pathname,
- href: url.href,
- path: `${url.pathname || ''}${url.search || ''}`
- };
- if (is_1.default.string(url.port) && url.port.length > 0) {
- options.port = Number(url.port);
- }
- if (url.username || url.password) {
- options.auth = `${url.username || ''}:${url.password || ''}`;
- }
- return options;
-};
-
-
-/***/ }),
-
-/***/ 7288:
-/***/ ((__unused_webpack_module, exports) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-class WeakableMap {
- constructor() {
- this.weakMap = new WeakMap();
- this.map = new Map();
- }
- set(key, value) {
- if (typeof key === 'object') {
- this.weakMap.set(key, value);
- }
- else {
- this.map.set(key, value);
- }
- }
- get(key) {
- if (typeof key === 'object') {
- return this.weakMap.get(key);
- }
- return this.map.get(key);
- }
- has(key) {
- if (typeof key === 'object') {
- return this.weakMap.has(key);
- }
- return this.map.has(key);
- }
-}
-exports["default"] = WeakableMap;
-
-
-/***/ }),
-
-/***/ 4337:
-/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
-
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __exportStar = (this && this.__exportStar) || function(m, exports) {
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.defaultHandler = void 0;
-const is_1 = __nccwpck_require__(7678);
-const as_promise_1 = __nccwpck_require__(6056);
-const create_rejection_1 = __nccwpck_require__(6457);
-const core_1 = __nccwpck_require__(94);
-const deep_freeze_1 = __nccwpck_require__(285);
-const errors = {
- RequestError: as_promise_1.RequestError,
- CacheError: as_promise_1.CacheError,
- ReadError: as_promise_1.ReadError,
- HTTPError: as_promise_1.HTTPError,
- MaxRedirectsError: as_promise_1.MaxRedirectsError,
- TimeoutError: as_promise_1.TimeoutError,
- ParseError: as_promise_1.ParseError,
- CancelError: as_promise_1.CancelError,
- UnsupportedProtocolError: as_promise_1.UnsupportedProtocolError,
- UploadError: as_promise_1.UploadError
-};
-// The `delay` package weighs 10KB (!)
-const delay = async (ms) => new Promise(resolve => {
- setTimeout(resolve, ms);
-});
-const { normalizeArguments } = core_1.default;
-const mergeOptions = (...sources) => {
- let mergedOptions;
- for (const source of sources) {
- mergedOptions = normalizeArguments(undefined, source, mergedOptions);
- }
- return mergedOptions;
-};
-const getPromiseOrStream = (options) => options.isStream ? new core_1.default(undefined, options) : as_promise_1.default(options);
-const isGotInstance = (value) => ('defaults' in value && 'options' in value.defaults);
-const aliases = [
- 'get',
- 'post',
- 'put',
- 'patch',
- 'head',
- 'delete'
-];
-exports.defaultHandler = (options, next) => next(options);
-const callInitHooks = (hooks, options) => {
- if (hooks) {
- for (const hook of hooks) {
- hook(options);
- }
- }
-};
-const create = (defaults) => {
- // Proxy properties from next handlers
- defaults._rawHandlers = defaults.handlers;
- defaults.handlers = defaults.handlers.map(fn => ((options, next) => {
- // This will be assigned by assigning result
- let root;
- const result = fn(options, newOptions => {
- root = next(newOptions);
- return root;
- });
- if (result !== root && !options.isStream && root) {
- const typedResult = result;
- const { then: promiseThen, catch: promiseCatch, finally: promiseFianlly } = typedResult;
- Object.setPrototypeOf(typedResult, Object.getPrototypeOf(root));
- Object.defineProperties(typedResult, Object.getOwnPropertyDescriptors(root));
- // These should point to the new promise
- // eslint-disable-next-line promise/prefer-await-to-then
- typedResult.then = promiseThen;
- typedResult.catch = promiseCatch;
- typedResult.finally = promiseFianlly;
- }
- return result;
- }));
- // Got interface
- const got = ((url, options = {}, _defaults) => {
- var _a, _b;
- let iteration = 0;
- const iterateHandlers = (newOptions) => {
- return defaults.handlers[iteration++](newOptions, iteration === defaults.handlers.length ? getPromiseOrStream : iterateHandlers);
- };
- // TODO: Remove this in Got 12.
- if (is_1.default.plainObject(url)) {
- const mergedOptions = {
- ...url,
- ...options
- };
- core_1.setNonEnumerableProperties([url, options], mergedOptions);
- options = mergedOptions;
- url = undefined;
- }
- try {
- // Call `init` hooks
- let initHookError;
- try {
- callInitHooks(defaults.options.hooks.init, options);
- callInitHooks((_a = options.hooks) === null || _a === void 0 ? void 0 : _a.init, options);
- }
- catch (error) {
- initHookError = error;
- }
- // Normalize options & call handlers
- const normalizedOptions = normalizeArguments(url, options, _defaults !== null && _defaults !== void 0 ? _defaults : defaults.options);
- normalizedOptions[core_1.kIsNormalizedAlready] = true;
- if (initHookError) {
- throw new as_promise_1.RequestError(initHookError.message, initHookError, normalizedOptions);
- }
- return iterateHandlers(normalizedOptions);
- }
- catch (error) {
- if (options.isStream) {
- throw error;
- }
- else {
- return create_rejection_1.default(error, defaults.options.hooks.beforeError, (_b = options.hooks) === null || _b === void 0 ? void 0 : _b.beforeError);
- }
- }
- });
- got.extend = (...instancesOrOptions) => {
- const optionsArray = [defaults.options];
- let handlers = [...defaults._rawHandlers];
- let isMutableDefaults;
- for (const value of instancesOrOptions) {
- if (isGotInstance(value)) {
- optionsArray.push(value.defaults.options);
- handlers.push(...value.defaults._rawHandlers);
- isMutableDefaults = value.defaults.mutableDefaults;
- }
- else {
- optionsArray.push(value);
- if ('handlers' in value) {
- handlers.push(...value.handlers);
- }
- isMutableDefaults = value.mutableDefaults;
- }
- }
- handlers = handlers.filter(handler => handler !== exports.defaultHandler);
- if (handlers.length === 0) {
- handlers.push(exports.defaultHandler);
- }
- return create({
- options: mergeOptions(...optionsArray),
- handlers,
- mutableDefaults: Boolean(isMutableDefaults)
- });
- };
- // Pagination
- const paginateEach = (async function* (url, options) {
- // TODO: Remove this `@ts-expect-error` when upgrading to TypeScript 4.
- // Error: Argument of type 'Merge> | undefined' is not assignable to parameter of type 'Options | undefined'.
- // @ts-expect-error
- let normalizedOptions = normalizeArguments(url, options, defaults.options);
- normalizedOptions.resolveBodyOnly = false;
- const pagination = normalizedOptions.pagination;
- if (!is_1.default.object(pagination)) {
- throw new TypeError('`options.pagination` must be implemented');
- }
- const all = [];
- let { countLimit } = pagination;
- let numberOfRequests = 0;
- while (numberOfRequests < pagination.requestLimit) {
- if (numberOfRequests !== 0) {
- // eslint-disable-next-line no-await-in-loop
- await delay(pagination.backoff);
- }
- // @ts-expect-error FIXME!
- // TODO: Throw when result is not an instance of Response
- // eslint-disable-next-line no-await-in-loop
- const result = (await got(undefined, undefined, normalizedOptions));
- // eslint-disable-next-line no-await-in-loop
- const parsed = await pagination.transform(result);
- const current = [];
- for (const item of parsed) {
- if (pagination.filter(item, all, current)) {
- if (!pagination.shouldContinue(item, all, current)) {
- return;
- }
- yield item;
- if (pagination.stackAllItems) {
- all.push(item);
- }
- current.push(item);
- if (--countLimit <= 0) {
- return;
- }
- }
- }
- const optionsToMerge = pagination.paginate(result, all, current);
- if (optionsToMerge === false) {
- return;
- }
- if (optionsToMerge === result.request.options) {
- normalizedOptions = result.request.options;
- }
- else if (optionsToMerge !== undefined) {
- normalizedOptions = normalizeArguments(undefined, optionsToMerge, normalizedOptions);
- }
- numberOfRequests++;
- }
- });
- got.paginate = paginateEach;
- got.paginate.all = (async (url, options) => {
- const results = [];
- for await (const item of paginateEach(url, options)) {
- results.push(item);
- }
- return results;
- });
- // For those who like very descriptive names
- got.paginate.each = paginateEach;
- // Stream API
- got.stream = ((url, options) => got(url, { ...options, isStream: true }));
- // Shortcuts
- for (const method of aliases) {
- got[method] = ((url, options) => got(url, { ...options, method }));
- got.stream[method] = ((url, options) => {
- return got(url, { ...options, method, isStream: true });
- });
- }
- Object.assign(got, errors);
- Object.defineProperty(got, 'defaults', {
- value: defaults.mutableDefaults ? defaults : deep_freeze_1.default(defaults),
- writable: defaults.mutableDefaults,
- configurable: defaults.mutableDefaults,
- enumerable: true
- });
- got.mergeOptions = mergeOptions;
- return got;
-};
-exports["default"] = create;
-__exportStar(__nccwpck_require__(2613), exports);
-
-
-/***/ }),
-
-/***/ 3061:
-/***/ (function(module, exports, __nccwpck_require__) {
-
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __exportStar = (this && this.__exportStar) || function(m, exports) {
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const url_1 = __nccwpck_require__(7310);
-const create_1 = __nccwpck_require__(4337);
-const defaults = {
- options: {
- method: 'GET',
- retry: {
- limit: 2,
- methods: [
- 'GET',
- 'PUT',
- 'HEAD',
- 'DELETE',
- 'OPTIONS',
- 'TRACE'
- ],
- statusCodes: [
- 408,
- 413,
- 429,
- 500,
- 502,
- 503,
- 504,
- 521,
- 522,
- 524
- ],
- errorCodes: [
- 'ETIMEDOUT',
- 'ECONNRESET',
- 'EADDRINUSE',
- 'ECONNREFUSED',
- 'EPIPE',
- 'ENOTFOUND',
- 'ENETUNREACH',
- 'EAI_AGAIN'
- ],
- maxRetryAfter: undefined,
- calculateDelay: ({ computedValue }) => computedValue
- },
- timeout: {},
- headers: {
- 'user-agent': 'got (https://github.com/sindresorhus/got)'
- },
- hooks: {
- init: [],
- beforeRequest: [],
- beforeRedirect: [],
- beforeRetry: [],
- beforeError: [],
- afterResponse: []
- },
- cache: undefined,
- dnsCache: undefined,
- decompress: true,
- throwHttpErrors: true,
- followRedirect: true,
- isStream: false,
- responseType: 'text',
- resolveBodyOnly: false,
- maxRedirects: 10,
- prefixUrl: '',
- methodRewriting: true,
- ignoreInvalidCookies: false,
- context: {},
- // TODO: Set this to `true` when Got 12 gets released
- http2: false,
- allowGetBody: false,
- https: undefined,
- pagination: {
- transform: (response) => {
- if (response.request.options.responseType === 'json') {
- return response.body;
- }
- return JSON.parse(response.body);
- },
- paginate: response => {
- if (!Reflect.has(response.headers, 'link')) {
- return false;
- }
- const items = response.headers.link.split(',');
- let next;
- for (const item of items) {
- const parsed = item.split(';');
- if (parsed[1].includes('next')) {
- next = parsed[0].trimStart().trim();
- next = next.slice(1, -1);
- break;
- }
- }
- if (next) {
- const options = {
- url: new url_1.URL(next)
- };
- return options;
- }
- return false;
- },
- filter: () => true,
- shouldContinue: () => true,
- countLimit: Infinity,
- backoff: 0,
- requestLimit: 10000,
- stackAllItems: true
- },
- parseJson: (text) => JSON.parse(text),
- stringifyJson: (object) => JSON.stringify(object),
- cacheOptions: {}
- },
- handlers: [create_1.defaultHandler],
- mutableDefaults: false
-};
-const got = create_1.default(defaults);
-exports["default"] = got;
-// For CommonJS default export support
-module.exports = got;
-module.exports["default"] = got;
-module.exports.__esModule = true; // Workaround for TS issue: https://github.com/sindresorhus/got/pull/1267
-__exportStar(__nccwpck_require__(4337), exports);
-__exportStar(__nccwpck_require__(6056), exports);
-
-
-/***/ }),
-
-/***/ 2613:
-/***/ ((__unused_webpack_module, exports) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-
-
-/***/ }),
-
-/***/ 285:
-/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const is_1 = __nccwpck_require__(7678);
-function deepFreeze(object) {
- for (const value of Object.values(object)) {
- if (is_1.default.plainObject(value) || is_1.default.array(value)) {
- deepFreeze(value);
- }
- }
- return Object.freeze(object);
-}
-exports["default"] = deepFreeze;
-
-
-/***/ }),
-
-/***/ 397:
-/***/ ((__unused_webpack_module, exports) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const alreadyWarned = new Set();
-exports["default"] = (message) => {
- if (alreadyWarned.has(message)) {
- return;
- }
- alreadyWarned.add(message);
- // @ts-expect-error Missing types.
- process.emitWarning(`Got: ${message}`, {
- type: 'DeprecationWarning'
- });
-};
+module.exports = getStream;
+module.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'});
+module.exports.array = (stream, options) => getStream(stream, {...options, array: true});
+module.exports.MaxBufferError = MaxBufferError;
/***/ }),
@@ -6985,185 +2761,78 @@ module.exports = class CachePolicy {
};
-/***/ }),
-
-/***/ 5461:
-/***/ ((module) => {
-
-
-
-class QuickLRU {
- constructor(options = {}) {
- if (!(options.maxSize && options.maxSize > 0)) {
- throw new TypeError('`maxSize` must be a number greater than 0');
- }
-
- this.maxSize = options.maxSize;
- this.onEviction = options.onEviction;
- this.cache = new Map();
- this.oldCache = new Map();
- this._size = 0;
- }
-
- _set(key, value) {
- this.cache.set(key, value);
- this._size++;
-
- if (this._size >= this.maxSize) {
- this._size = 0;
-
- if (typeof this.onEviction === 'function') {
- for (const [key, value] of this.oldCache.entries()) {
- this.onEviction(key, value);
- }
- }
-
- this.oldCache = this.cache;
- this.cache = new Map();
- }
- }
-
- get(key) {
- if (this.cache.has(key)) {
- return this.cache.get(key);
- }
-
- if (this.oldCache.has(key)) {
- const value = this.oldCache.get(key);
- this.oldCache.delete(key);
- this._set(key, value);
- return value;
- }
- }
-
- set(key, value) {
- if (this.cache.has(key)) {
- this.cache.set(key, value);
- } else {
- this._set(key, value);
- }
-
- return this;
- }
-
- has(key) {
- return this.cache.has(key) || this.oldCache.has(key);
- }
-
- peek(key) {
- if (this.cache.has(key)) {
- return this.cache.get(key);
- }
-
- if (this.oldCache.has(key)) {
- return this.oldCache.get(key);
- }
- }
-
- delete(key) {
- const deleted = this.cache.delete(key);
- if (deleted) {
- this._size--;
- }
-
- return this.oldCache.delete(key) || deleted;
- }
-
- clear() {
- this.cache.clear();
- this.oldCache.clear();
- this._size = 0;
- }
-
- * keys() {
- for (const [key] of this) {
- yield key;
- }
- }
-
- * values() {
- for (const [, value] of this) {
- yield value;
- }
- }
-
- * [Symbol.iterator]() {
- for (const item of this.cache) {
- yield item;
- }
-
- for (const item of this.oldCache) {
- const [key] = item;
- if (!this.cache.has(key)) {
- yield item;
- }
- }
- }
-
- get size() {
- let oldCacheSize = 0;
- for (const key of this.oldCache.keys()) {
- if (!this.cache.has(key)) {
- oldCacheSize++;
- }
- }
-
- return Math.min(this._size + oldCacheSize, this.maxSize);
- }
-}
-
-module.exports = QuickLRU;
-
-
/***/ }),
/***/ 9898:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+// See https://github.com/facebook/jest/issues/2549
+// eslint-disable-next-line node/prefer-global/url
+const {URL} = __nccwpck_require__(7310);
const EventEmitter = __nccwpck_require__(2361);
const tls = __nccwpck_require__(4404);
const http2 = __nccwpck_require__(5158);
-const QuickLRU = __nccwpck_require__(5461);
+const QuickLRU = __nccwpck_require__(9273);
+const delayAsyncDestroy = __nccwpck_require__(9237);
-const kCurrentStreamsCount = Symbol('currentStreamsCount');
+const kCurrentStreamCount = Symbol('currentStreamCount');
const kRequest = Symbol('request');
const kOriginSet = Symbol('cachedOriginSet');
const kGracefullyClosing = Symbol('gracefullyClosing');
+const kLength = Symbol('length');
const nameKeys = [
+ // Not an Agent option actually
+ 'createConnection',
+
// `http2.connect()` options
'maxDeflateDynamicTableSize',
+ 'maxSettings',
'maxSessionMemory',
'maxHeaderListPairs',
'maxOutstandingPings',
'maxReservedRemoteStreams',
'maxSendHeaderBlockLength',
'paddingStrategy',
+ 'peerMaxConcurrentStreams',
+ 'settings',
- // `tls.connect()` options
+ // `tls.connect()` source options
+ 'family',
'localAddress',
- 'path',
'rejectUnauthorized',
+
+ // `tls.connect()` secure context options
+ 'pskCallback',
'minDHSize',
+ // `tls.connect()` destination options
+ // - `servername` is automatically validated, skip it
+ // - `host` and `port` just describe the destination server,
+ 'path',
+ 'socket',
+
// `tls.createSecureContext()` options
'ca',
'cert',
- 'clientCertEngine',
+ 'sigalgs',
'ciphers',
- 'key',
- 'pfx',
- 'servername',
- 'minVersion',
- 'maxVersion',
- 'secureProtocol',
+ 'clientCertEngine',
'crl',
- 'honorCipherOrder',
- 'ecdhCurve',
'dhparam',
+ 'ecdhCurve',
+ 'honorCipherOrder',
+ 'key',
+ 'privateKeyEngine',
+ 'privateKeyIdentifier',
+ 'maxVersion',
+ 'minVersion',
+ 'pfx',
'secureOptions',
- 'sessionIdContext'
+ 'secureProtocol',
+ 'sessionIdContext',
+ 'ticketKeys'
];
const getSortedIndex = (array, value, compare) => {
@@ -7173,9 +2842,7 @@ const getSortedIndex = (array, value, compare) => {
while (low < high) {
const mid = (low + high) >>> 1;
- /* istanbul ignore next */
if (compare(array[mid], value)) {
- // This never gets called because we use descending sort. Better to have this anyway.
low = mid + 1;
} else {
high = mid;
@@ -7185,25 +2852,28 @@ const getSortedIndex = (array, value, compare) => {
return low;
};
-const compareSessions = (a, b) => {
- return a.remoteSettings.maxConcurrentStreams > b.remoteSettings.maxConcurrentStreams;
-};
+const compareSessions = (a, b) => a.remoteSettings.maxConcurrentStreams > b.remoteSettings.maxConcurrentStreams;
// See https://tools.ietf.org/html/rfc8336
const closeCoveredSessions = (where, session) => {
// Clients SHOULD NOT emit new requests on any connection whose Origin
// Set is a proper subset of another connection's Origin Set, and they
// SHOULD close it once all outstanding requests are satisfied.
- for (const coveredSession of where) {
+ for (let index = 0; index < where.length; index++) {
+ const coveredSession = where[index];
+
if (
+ // Unfortunately `.every()` returns true for an empty array
+ coveredSession[kOriginSet].length > 0
+
// The set is a proper subset when its length is less than the other set.
- coveredSession[kOriginSet].length < session[kOriginSet].length &&
+ && coveredSession[kOriginSet].length < session[kOriginSet].length
// And the other set includes all elements of the subset.
- coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin)) &&
+ && coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin))
// Makes sure that the session can handle all requests from the covered session.
- coveredSession[kCurrentStreamsCount] + session[kCurrentStreamsCount] <= session.remoteSettings.maxConcurrentStreams
+ && (coveredSession[kCurrentStreamCount] + session[kCurrentStreamCount]) <= session.remoteSettings.maxConcurrentStreams
) {
// This allows pending requests to finish and prevents making new requests.
gracefullyClose(coveredSession);
@@ -7213,62 +2883,45 @@ const closeCoveredSessions = (where, session) => {
// This is basically inverted `closeCoveredSessions(...)`.
const closeSessionIfCovered = (where, coveredSession) => {
- for (const session of where) {
+ for (let index = 0; index < where.length; index++) {
+ const session = where[index];
+
if (
- coveredSession[kOriginSet].length < session[kOriginSet].length &&
- coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin)) &&
- coveredSession[kCurrentStreamsCount] + session[kCurrentStreamsCount] <= session.remoteSettings.maxConcurrentStreams
+ coveredSession[kOriginSet].length > 0
+ && coveredSession[kOriginSet].length < session[kOriginSet].length
+ && coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin))
+ && (coveredSession[kCurrentStreamCount] + session[kCurrentStreamCount]) <= session.remoteSettings.maxConcurrentStreams
) {
gracefullyClose(coveredSession);
- }
- }
-};
-const getSessions = ({agent, isFree}) => {
- const result = {};
-
- // eslint-disable-next-line guard-for-in
- for (const normalizedOptions in agent.sessions) {
- const sessions = agent.sessions[normalizedOptions];
-
- const filtered = sessions.filter(session => {
- const result = session[Agent.kCurrentStreamsCount] < session.remoteSettings.maxConcurrentStreams;
-
- return isFree ? result : !result;
- });
-
- if (filtered.length !== 0) {
- result[normalizedOptions] = filtered;
+ return true;
}
}
- return result;
+ return false;
};
const gracefullyClose = session => {
session[kGracefullyClosing] = true;
- if (session[kCurrentStreamsCount] === 0) {
+ if (session[kCurrentStreamCount] === 0) {
session.close();
}
};
class Agent extends EventEmitter {
- constructor({timeout = 60000, maxSessions = Infinity, maxFreeSessions = 10, maxCachedTlsSessions = 100} = {}) {
+ constructor({timeout = 0, maxSessions = Number.POSITIVE_INFINITY, maxEmptySessions = 10, maxCachedTlsSessions = 100} = {}) {
super();
- // A session is considered busy when its current streams count
- // is equal to or greater than the `maxConcurrentStreams` value.
-
- // A session is considered free when its current streams count
- // is less than the `maxConcurrentStreams` value.
-
// SESSIONS[NORMALIZED_OPTIONS] = [];
this.sessions = {};
// The queue for creating new sessions. It looks like this:
// QUEUE[NORMALIZED_OPTIONS][NORMALIZED_ORIGIN] = ENTRY_FUNCTION
//
+ // It's faster when there are many origins. If there's only one, then QUEUE[`${options}:${origin}`] is faster.
+ // I guess object creation / deletion is causing the slowdown.
+ //
// The entry function has `listeners`, `completed` and `destroyed` properties.
// `listeners` is an array of objects containing `resolve` and `reject` functions.
// `completed` is a boolean. It's set to true after ENTRY_FUNCTION is executed.
@@ -7281,69 +2934,90 @@ class Agent extends EventEmitter {
// Max sessions in total
this.maxSessions = maxSessions;
- // Max free sessions in total
- // TODO: decreasing `maxFreeSessions` should close some sessions
- this.maxFreeSessions = maxFreeSessions;
+ // Max empty sessions in total
+ this.maxEmptySessions = maxEmptySessions;
- this._freeSessionsCount = 0;
- this._sessionsCount = 0;
+ this._emptySessionCount = 0;
+ this._sessionCount = 0;
// We don't support push streams by default.
this.settings = {
- enablePush: false
+ enablePush: false,
+ initialWindowSize: 1024 * 1024 * 32 // 32MB, see https://github.com/nodejs/node/issues/38426
};
// Reusing TLS sessions increases performance.
this.tlsSessionCache = new QuickLRU({maxSize: maxCachedTlsSessions});
}
- static normalizeOrigin(url, servername) {
- if (typeof url === 'string') {
- url = new URL(url);
- }
-
- if (servername && url.hostname !== servername) {
- url.hostname = servername;
- }
-
- return url.origin;
+ get protocol() {
+ return 'https:';
}
normalizeOptions(options) {
let normalized = '';
- if (options) {
- for (const key of nameKeys) {
- if (options[key]) {
- normalized += `:${options[key]}`;
- }
+ for (let index = 0; index < nameKeys.length; index++) {
+ const key = nameKeys[index];
+
+ normalized += ':';
+
+ if (options && options[key] !== undefined) {
+ normalized += options[key];
}
}
return normalized;
}
- _tryToCreateNewSession(normalizedOptions, normalizedOrigin) {
- if (!(normalizedOptions in this.queue) || !(normalizedOrigin in this.queue[normalizedOptions])) {
+ _processQueue() {
+ if (this._sessionCount >= this.maxSessions) {
+ this.closeEmptySessions(this.maxSessions - this._sessionCount + 1);
return;
}
- const item = this.queue[normalizedOptions][normalizedOrigin];
+ // eslint-disable-next-line guard-for-in
+ for (const normalizedOptions in this.queue) {
+ // eslint-disable-next-line guard-for-in
+ for (const normalizedOrigin in this.queue[normalizedOptions]) {
+ const item = this.queue[normalizedOptions][normalizedOrigin];
- // The entry function can be run only once.
- // BUG: The session may be never created when:
- // - the first condition is false AND
- // - this function is never called with the same arguments in the future.
- if (this._sessionsCount < this.maxSessions && !item.completed) {
- item.completed = true;
+ // The entry function can be run only once.
+ if (!item.completed) {
+ item.completed = true;
- item();
+ item();
+ }
+ }
+ }
+ }
+
+ _isBetterSession(thisStreamCount, thatStreamCount) {
+ return thisStreamCount > thatStreamCount;
+ }
+
+ _accept(session, listeners, normalizedOrigin, options) {
+ let index = 0;
+
+ while (index < listeners.length && session[kCurrentStreamCount] < session.remoteSettings.maxConcurrentStreams) {
+ // We assume `resolve(...)` calls `request(...)` *directly*,
+ // otherwise the session will get overloaded.
+ listeners[index].resolve(session);
+
+ index++;
+ }
+
+ listeners.splice(0, index);
+
+ if (listeners.length > 0) {
+ this.getSession(normalizedOrigin, options, listeners);
+ listeners.length = 0;
}
}
getSession(origin, options, listeners) {
return new Promise((resolve, reject) => {
- if (Array.isArray(listeners)) {
+ if (Array.isArray(listeners) && listeners.length > 0) {
listeners = [...listeners];
// Resolve the current promise ASAP, we're just moving the listeners.
@@ -7353,17 +3027,33 @@ class Agent extends EventEmitter {
listeners = [{resolve, reject}];
}
- const normalizedOptions = this.normalizeOptions(options);
- const normalizedOrigin = Agent.normalizeOrigin(origin, options && options.servername);
+ try {
+ // Parse origin
+ if (typeof origin === 'string') {
+ origin = new URL(origin);
+ } else if (!(origin instanceof URL)) {
+ throw new TypeError('The `origin` argument needs to be a string or an URL object');
+ }
- if (normalizedOrigin === undefined) {
- for (const {reject} of listeners) {
- reject(new TypeError('The `origin` argument needs to be a string or an URL object'));
+ if (options) {
+ // Validate servername
+ const {servername} = options;
+ const {hostname} = origin;
+ if (servername && hostname !== servername) {
+ throw new Error(`Origin ${hostname} differs from servername ${servername}`);
+ }
+ }
+ } catch (error) {
+ for (let index = 0; index < listeners.length; index++) {
+ listeners[index].reject(error);
}
return;
}
+ const normalizedOptions = this.normalizeOptions(options);
+ const normalizedOrigin = origin.origin;
+
if (normalizedOptions in this.sessions) {
const sessions = this.sessions[normalizedOptions];
@@ -7373,56 +3063,55 @@ class Agent extends EventEmitter {
// We could just do this.sessions[normalizedOptions].find(...) but that isn't optimal.
// Additionally, we are looking for session which has biggest current pending streams count.
- for (const session of sessions) {
+ //
+ // |------------| |------------| |------------| |------------|
+ // | Session: A | | Session: B | | Session: C | | Session: D |
+ // | Pending: 5 |-| Pending: 8 |-| Pending: 9 |-| Pending: 4 |
+ // | Max: 10 | | Max: 10 | | Max: 9 | | Max: 5 |
+ // |------------| |------------| |------------| |------------|
+ // ^
+ // |
+ // pick this one --
+ //
+ for (let index = 0; index < sessions.length; index++) {
+ const session = sessions[index];
+
const sessionMaxConcurrentStreams = session.remoteSettings.maxConcurrentStreams;
if (sessionMaxConcurrentStreams < maxConcurrentStreams) {
break;
}
- if (session[kOriginSet].includes(normalizedOrigin)) {
- const sessionCurrentStreamsCount = session[kCurrentStreamsCount];
+ if (!session[kOriginSet].includes(normalizedOrigin)) {
+ continue;
+ }
- if (
- sessionCurrentStreamsCount >= sessionMaxConcurrentStreams ||
- session[kGracefullyClosing] ||
- // Unfortunately the `close` event isn't called immediately,
- // so `session.destroyed` is `true`, but `session.closed` is `false`.
- session.destroyed
- ) {
- continue;
- }
+ const sessionCurrentStreamsCount = session[kCurrentStreamCount];
- // We only need set this once.
- if (!optimalSession) {
- maxConcurrentStreams = sessionMaxConcurrentStreams;
- }
+ if (
+ sessionCurrentStreamsCount >= sessionMaxConcurrentStreams
+ || session[kGracefullyClosing]
+ // Unfortunately the `close` event isn't called immediately,
+ // so `session.destroyed` is `true`, but `session.closed` is `false`.
+ || session.destroyed
+ ) {
+ continue;
+ }
- // We're looking for the session which has biggest current pending stream count,
- // in order to minimalize the amount of active sessions.
- if (sessionCurrentStreamsCount > currentStreamsCount) {
- optimalSession = session;
- currentStreamsCount = sessionCurrentStreamsCount;
- }
+ // We only need set this once.
+ if (!optimalSession) {
+ maxConcurrentStreams = sessionMaxConcurrentStreams;
+ }
+
+ // Either get the session which has biggest current stream count or the lowest.
+ if (this._isBetterSession(sessionCurrentStreamsCount, currentStreamsCount)) {
+ optimalSession = session;
+ currentStreamsCount = sessionCurrentStreamsCount;
}
}
if (optimalSession) {
- /* istanbul ignore next: safety check */
- if (listeners.length !== 1) {
- for (const {reject} of listeners) {
- const error = new Error(
- `Expected the length of listeners to be 1, got ${listeners.length}.\n` +
- 'Please report this to https://github.com/szmarczak/http2-wrapper/'
- );
-
- reject(error);
- }
-
- return;
- }
-
- listeners[0].resolve(optimalSession);
+ this._accept(optimalSession, listeners, normalizedOrigin, options);
return;
}
}
@@ -7431,14 +3120,12 @@ class Agent extends EventEmitter {
if (normalizedOrigin in this.queue[normalizedOptions]) {
// There's already an item in the queue, just attach ourselves to it.
this.queue[normalizedOptions][normalizedOrigin].listeners.push(...listeners);
-
- // This shouldn't be executed here.
- // See the comment inside _tryToCreateNewSession.
- this._tryToCreateNewSession(normalizedOptions, normalizedOrigin);
return;
}
} else {
- this.queue[normalizedOptions] = {};
+ this.queue[normalizedOptions] = {
+ [kLength]: 0
+ };
}
// The entry must be removed from the queue IMMEDIATELY when:
@@ -7449,29 +3136,58 @@ class Agent extends EventEmitter {
if (normalizedOptions in this.queue && this.queue[normalizedOptions][normalizedOrigin] === entry) {
delete this.queue[normalizedOptions][normalizedOrigin];
- if (Object.keys(this.queue[normalizedOptions]).length === 0) {
+ if (--this.queue[normalizedOptions][kLength] === 0) {
delete this.queue[normalizedOptions];
}
}
};
// The main logic is here
- const entry = () => {
+ const entry = async () => {
+ this._sessionCount++;
+
const name = `${normalizedOrigin}:${normalizedOptions}`;
let receivedSettings = false;
+ let socket;
try {
- const session = http2.connect(origin, {
- createConnection: this.createConnection,
- settings: this.settings,
- session: this.tlsSessionCache.get(name),
- ...options
- });
- session[kCurrentStreamsCount] = 0;
+ const computedOptions = {...options};
+
+ if (computedOptions.settings === undefined) {
+ computedOptions.settings = this.settings;
+ }
+
+ if (computedOptions.session === undefined) {
+ computedOptions.session = this.tlsSessionCache.get(name);
+ }
+
+ const createConnection = computedOptions.createConnection || this.createConnection;
+
+ // A hacky workaround to enable async `createConnection`
+ socket = await createConnection.call(this, origin, computedOptions);
+ computedOptions.createConnection = () => socket;
+
+ const session = http2.connect(origin, computedOptions);
+ session[kCurrentStreamCount] = 0;
session[kGracefullyClosing] = false;
- const isFree = () => session[kCurrentStreamsCount] < session.remoteSettings.maxConcurrentStreams;
- let wasFree = true;
+ // Node.js return https://false:443 instead of https://1.1.1.1:443
+ const getOriginSet = () => {
+ const {socket} = session;
+
+ let originSet;
+ if (socket.servername === false) {
+ socket.servername = socket.remoteAddress;
+ originSet = session.originSet;
+ socket.servername = false;
+ } else {
+ originSet = session.originSet;
+ }
+
+ return originSet;
+ };
+
+ const isFree = () => session[kCurrentStreamCount] < session.remoteSettings.maxConcurrentStreams;
session.socket.once('session', tlsSession => {
this.tlsSessionCache.set(name, tlsSession);
@@ -7479,8 +3195,8 @@ class Agent extends EventEmitter {
session.once('error', error => {
// Listeners are empty when the session successfully connected.
- for (const {reject} of listeners) {
- reject(error);
+ for (let index = 0; index < listeners.length; index++) {
+ listeners[index].reject(error);
}
// The connection got broken, purge the cache.
@@ -7489,68 +3205,73 @@ class Agent extends EventEmitter {
session.setTimeout(this.timeout, () => {
// Terminates all streams owned by this session.
- // TODO: Maybe the streams should have a "Session timed out" error?
session.destroy();
});
session.once('close', () => {
- if (receivedSettings) {
- // 1. If it wasn't free then no need to decrease because
- // it has been decreased already in session.request().
- // 2. `stream.once('close')` won't increment the count
- // because the session is already closed.
- if (wasFree) {
- this._freeSessionsCount--;
- }
+ this._sessionCount--;
- this._sessionsCount--;
+ if (receivedSettings) {
+ // Assumes session `close` is emitted after request `close`
+ this._emptySessionCount--;
// This cannot be moved to the stream logic,
// because there may be a session that hadn't made a single request.
const where = this.sessions[normalizedOptions];
- where.splice(where.indexOf(session), 1);
- if (where.length === 0) {
+ if (where.length === 1) {
delete this.sessions[normalizedOptions];
+ } else {
+ where.splice(where.indexOf(session), 1);
}
} else {
// Broken connection
+ removeFromQueue();
+
const error = new Error('Session closed without receiving a SETTINGS frame');
error.code = 'HTTP2WRAPPER_NOSETTINGS';
- for (const {reject} of listeners) {
- reject(error);
+ for (let index = 0; index < listeners.length; index++) {
+ listeners[index].reject(error);
}
-
- removeFromQueue();
}
// There may be another session awaiting.
- this._tryToCreateNewSession(normalizedOptions, normalizedOrigin);
+ this._processQueue();
});
// Iterates over the queue and processes listeners.
const processListeners = () => {
- if (!(normalizedOptions in this.queue) || !isFree()) {
+ const queue = this.queue[normalizedOptions];
+ if (!queue) {
return;
}
- for (const origin of session[kOriginSet]) {
- if (origin in this.queue[normalizedOptions]) {
- const {listeners} = this.queue[normalizedOptions][origin];
+ const originSet = session[kOriginSet];
+
+ for (let index = 0; index < originSet.length; index++) {
+ const origin = originSet[index];
+
+ if (origin in queue) {
+ const {listeners, completed} = queue[origin];
+
+ let index = 0;
// Prevents session overloading.
- while (listeners.length !== 0 && isFree()) {
+ while (index < listeners.length && isFree()) {
// We assume `resolve(...)` calls `request(...)` *directly*,
// otherwise the session will get overloaded.
- listeners.shift().resolve(session);
+ listeners[index].resolve(session);
+
+ index++;
}
- const where = this.queue[normalizedOptions];
- if (where[origin].listeners.length === 0) {
- delete where[origin];
+ queue[origin].listeners.splice(0, index);
- if (Object.keys(where).length === 0) {
+ if (queue[origin].listeners.length === 0 && !completed) {
+ delete queue[origin];
+
+ if (--queue[kLength] === 0) {
delete this.queue[normalizedOptions];
break;
}
@@ -7566,39 +3287,59 @@ class Agent extends EventEmitter {
// The Origin Set cannot shrink. No need to check if it suddenly became covered by another one.
session.on('origin', () => {
- session[kOriginSet] = session.originSet;
+ session[kOriginSet] = getOriginSet() || [];
+ session[kGracefullyClosing] = false;
+ closeSessionIfCovered(this.sessions[normalizedOptions], session);
- if (!isFree()) {
- // The session is full.
+ if (session[kGracefullyClosing] || !isFree()) {
return;
}
processListeners();
+ if (!isFree()) {
+ return;
+ }
+
// Close covered sessions (if possible).
closeCoveredSessions(this.sessions[normalizedOptions], session);
});
session.once('remoteSettings', () => {
- // Fix Node.js bug preventing the process from exiting
- session.ref();
- session.unref();
-
- this._sessionsCount++;
-
// The Agent could have been destroyed already.
if (entry.destroyed) {
const error = new Error('Agent has been destroyed');
- for (const listener of listeners) {
- listener.reject(error);
+ for (let index = 0; index < listeners.length; index++) {
+ listeners[index].reject(error);
}
session.destroy();
return;
}
- session[kOriginSet] = session.originSet;
+ // See https://github.com/nodejs/node/issues/38426
+ if (session.setLocalWindowSize) {
+ session.setLocalWindowSize(1024 * 1024 * 4); // 4 MB
+ }
+
+ session[kOriginSet] = getOriginSet() || [];
+
+ if (session.socket.encrypted) {
+ const mainOrigin = session[kOriginSet][0];
+ if (mainOrigin !== normalizedOrigin) {
+ const error = new Error(`Requested origin ${normalizedOrigin} does not match server ${mainOrigin}`);
+
+ for (let index = 0; index < listeners.length; index++) {
+ listeners[index].reject(error);
+ }
+
+ session.destroy();
+ return;
+ }
+ }
+
+ removeFromQueue();
{
const where = this.sessions;
@@ -7611,30 +3352,28 @@ class Agent extends EventEmitter {
}
}
- this._freeSessionsCount += 1;
receivedSettings = true;
+ this._emptySessionCount++;
this.emit('session', session);
+ this._accept(session, listeners, normalizedOrigin, options);
- processListeners();
- removeFromQueue();
-
- // TODO: Close last recently used (or least used?) session
- if (session[kCurrentStreamsCount] === 0 && this._freeSessionsCount > this.maxFreeSessions) {
- session.close();
- }
-
- // Check if we haven't managed to execute all listeners.
- if (listeners.length !== 0) {
- // Request for a new session with predefined listeners.
- this.getSession(normalizedOrigin, options, listeners);
- listeners.length = 0;
+ if (session[kCurrentStreamCount] === 0 && this._emptySessionCount > this.maxEmptySessions) {
+ this.closeEmptySessions(this._emptySessionCount - this.maxEmptySessions);
}
// `session.remoteSettings.maxConcurrentStreams` might get increased
session.on('remoteSettings', () => {
+ if (!isFree()) {
+ return;
+ }
+
processListeners();
+ if (!isFree()) {
+ return;
+ }
+
// In case the Origin Set changes
closeCoveredSessions(this.sessions[normalizedOptions], session);
});
@@ -7652,45 +3391,31 @@ class Agent extends EventEmitter {
// The process won't exit until the session is closed or all requests are gone.
session.ref();
- ++session[kCurrentStreamsCount];
-
- if (session[kCurrentStreamsCount] === session.remoteSettings.maxConcurrentStreams) {
- this._freeSessionsCount--;
+ if (session[kCurrentStreamCount]++ === 0) {
+ this._emptySessionCount--;
}
stream.once('close', () => {
- wasFree = isFree();
+ if (--session[kCurrentStreamCount] === 0) {
+ this._emptySessionCount++;
+ session.unref();
- --session[kCurrentStreamsCount];
+ if (this._emptySessionCount > this.maxEmptySessions || session[kGracefullyClosing]) {
+ session.close();
+ return;
+ }
+ }
- if (!session.destroyed && !session.closed) {
- closeSessionIfCovered(this.sessions[normalizedOptions], session);
+ if (session.destroyed || session.closed) {
+ return;
+ }
- if (isFree() && !session.closed) {
- if (!wasFree) {
- this._freeSessionsCount++;
+ if (isFree() && !closeSessionIfCovered(this.sessions[normalizedOptions], session)) {
+ closeCoveredSessions(this.sessions[normalizedOptions], session);
+ processListeners();
- wasFree = true;
- }
-
- const isEmpty = session[kCurrentStreamsCount] === 0;
-
- if (isEmpty) {
- session.unref();
- }
-
- if (
- isEmpty &&
- (
- this._freeSessionsCount > this.maxFreeSessions ||
- session[kGracefullyClosing]
- )
- ) {
- session.close();
- } else {
- closeCoveredSessions(this.sessions[normalizedOptions], session);
- processListeners();
- }
+ if (session[kCurrentStreamCount] === 0) {
+ this._processQueue();
}
}
});
@@ -7698,11 +3423,12 @@ class Agent extends EventEmitter {
return stream;
};
} catch (error) {
- for (const listener of listeners) {
- listener.reject(error);
- }
-
removeFromQueue();
+ this._sessionCount--;
+
+ for (let index = 0; index < listeners.length; index++) {
+ listeners[index].reject(error);
+ }
}
};
@@ -7711,7 +3437,8 @@ class Agent extends EventEmitter {
entry.destroyed = false;
this.queue[normalizedOptions][normalizedOrigin] = entry;
- this._tryToCreateNewSession(normalizedOptions, normalizedOrigin);
+ this.queue[normalizedOptions][kLength]++;
+ this._processQueue();
});
}
@@ -7721,7 +3448,12 @@ class Agent extends EventEmitter {
reject,
resolve: session => {
try {
- resolve(session.request(headers, streamOptions));
+ const stream = session.request(headers, streamOptions);
+
+ // Do not throw before `request(...)` has been awaited
+ delayAsyncDestroy(stream);
+
+ resolve(stream);
} catch (error) {
reject(error);
}
@@ -7730,7 +3462,7 @@ class Agent extends EventEmitter {
});
}
- createConnection(origin, options) {
+ async createConnection(origin, options) {
return Agent.connect(origin, options);
}
@@ -7738,52 +3470,92 @@ class Agent extends EventEmitter {
options.ALPNProtocols = ['h2'];
const port = origin.port || 443;
- const host = origin.hostname || origin.host;
+ const host = origin.hostname;
if (typeof options.servername === 'undefined') {
options.servername = host;
}
- return tls.connect(port, host, options);
+ const socket = tls.connect(port, host, options);
+
+ if (options.socket) {
+ socket._peername = {
+ family: undefined,
+ address: undefined,
+ port
+ };
+ }
+
+ return socket;
}
- closeFreeSessions() {
- for (const sessions of Object.values(this.sessions)) {
- for (const session of sessions) {
- if (session[kCurrentStreamsCount] === 0) {
+ closeEmptySessions(maxCount = Number.POSITIVE_INFINITY) {
+ let closedCount = 0;
+
+ const {sessions} = this;
+
+ // eslint-disable-next-line guard-for-in
+ for (const key in sessions) {
+ const thisSessions = sessions[key];
+
+ for (let index = 0; index < thisSessions.length; index++) {
+ const session = thisSessions[index];
+
+ if (session[kCurrentStreamCount] === 0) {
+ closedCount++;
session.close();
+
+ if (closedCount >= maxCount) {
+ return closedCount;
+ }
}
}
}
+
+ return closedCount;
}
destroy(reason) {
- for (const sessions of Object.values(this.sessions)) {
- for (const session of sessions) {
- session.destroy(reason);
+ const {sessions, queue} = this;
+
+ // eslint-disable-next-line guard-for-in
+ for (const key in sessions) {
+ const thisSessions = sessions[key];
+
+ for (let index = 0; index < thisSessions.length; index++) {
+ thisSessions[index].destroy(reason);
}
}
- for (const entriesOfAuthority of Object.values(this.queue)) {
- for (const entry of Object.values(entriesOfAuthority)) {
- entry.destroyed = true;
+ // eslint-disable-next-line guard-for-in
+ for (const normalizedOptions in queue) {
+ const entries = queue[normalizedOptions];
+
+ // eslint-disable-next-line guard-for-in
+ for (const normalizedOrigin in entries) {
+ entries[normalizedOrigin].destroyed = true;
}
}
// New requests should NOT attach to destroyed sessions
this.queue = {};
+ this.tlsSessionCache.clear();
}
- get freeSessions() {
- return getSessions({agent: this, isFree: true});
+ get emptySessionCount() {
+ return this._emptySessionCount;
}
- get busySessions() {
- return getSessions({agent: this, isFree: false});
+ get pendingSessionCount() {
+ return this._sessionCount - this._emptySessionCount;
+ }
+
+ get sessionCount() {
+ return this._sessionCount;
}
}
-Agent.kCurrentStreamsCount = kCurrentStreamsCount;
+Agent.kCurrentStreamCount = kCurrentStreamCount;
Agent.kGracefullyClosing = kGracefullyClosing;
module.exports = {
@@ -7798,13 +3570,17 @@ module.exports = {
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+// See https://github.com/facebook/jest/issues/2549
+// eslint-disable-next-line node/prefer-global/url
+const {URL, urlToHttpOptions} = __nccwpck_require__(7310);
const http = __nccwpck_require__(3685);
const https = __nccwpck_require__(5687);
const resolveALPN = __nccwpck_require__(6624);
-const QuickLRU = __nccwpck_require__(5461);
+const QuickLRU = __nccwpck_require__(9273);
+const {Agent, globalAgent} = __nccwpck_require__(9898);
const Http2ClientRequest = __nccwpck_require__(9632);
const calculateServerName = __nccwpck_require__(1982);
-const urlToOptions = __nccwpck_require__(2686);
+const delayAsyncDestroy = __nccwpck_require__(9237);
const cache = new QuickLRU({maxSize: 100});
const queue = new Map();
@@ -7824,10 +3600,24 @@ const installSocket = (agent, socket, options) => {
socket.on('close', onClose);
+ const onTimeout = () => {
+ const {freeSockets} = agent;
+
+ for (const sockets of Object.values(freeSockets)) {
+ if (sockets.includes(socket)) {
+ socket.destroy();
+ return;
+ }
+ }
+ };
+
+ socket.on('timeout', onTimeout);
+
const onRemove = () => {
agent.removeSocket(socket, options);
socket.off('close', onClose);
socket.off('free', onFree);
+ socket.off('timeout', onTimeout);
socket.off('agentRemove', onRemove);
};
@@ -7836,76 +3626,65 @@ const installSocket = (agent, socket, options) => {
agent.emit('free', socket, options);
};
-const resolveProtocol = async options => {
- const name = `${options.host}:${options.port}:${options.ALPNProtocols.sort()}`;
+const createResolveProtocol = (cache, queue = new Map(), connect = undefined) => {
+ return async options => {
+ const name = `${options.host}:${options.port}:${options.ALPNProtocols.sort()}`;
- if (!cache.has(name)) {
- if (queue.has(name)) {
- const result = await queue.get(name);
- return result.alpnProtocol;
- }
-
- const {path, agent} = options;
- options.path = options.socketPath;
-
- const resultPromise = resolveALPN(options);
- queue.set(name, resultPromise);
-
- try {
- const {socket, alpnProtocol} = await resultPromise;
- cache.set(name, alpnProtocol);
-
- options.path = path;
-
- if (alpnProtocol === 'h2') {
- // https://github.com/nodejs/node/issues/33343
- socket.destroy();
- } else {
- const {globalAgent} = https;
- const defaultCreateConnection = https.Agent.prototype.createConnection;
-
- if (agent) {
- if (agent.createConnection === defaultCreateConnection) {
- installSocket(agent, socket, options);
- } else {
- socket.destroy();
- }
- } else if (globalAgent.createConnection === defaultCreateConnection) {
- installSocket(globalAgent, socket, options);
- } else {
- socket.destroy();
- }
+ if (!cache.has(name)) {
+ if (queue.has(name)) {
+ const result = await queue.get(name);
+ return {alpnProtocol: result.alpnProtocol};
}
- queue.delete(name);
+ const {path} = options;
+ options.path = options.socketPath;
- return alpnProtocol;
- } catch (error) {
- queue.delete(name);
+ const resultPromise = resolveALPN(options, connect);
+ queue.set(name, resultPromise);
- throw error;
+ try {
+ const result = await resultPromise;
+
+ cache.set(name, result.alpnProtocol);
+ queue.delete(name);
+
+ options.path = path;
+
+ return result;
+ } catch (error) {
+ queue.delete(name);
+
+ options.path = path;
+
+ throw error;
+ }
}
- }
- return cache.get(name);
+ return {alpnProtocol: cache.get(name)};
+ };
};
+const defaultResolveProtocol = createResolveProtocol(cache, queue);
+
module.exports = async (input, options, callback) => {
- if (typeof input === 'string' || input instanceof URL) {
- input = urlToOptions(new URL(input));
+ if (typeof input === 'string') {
+ input = urlToHttpOptions(new URL(input));
+ } else if (input instanceof URL) {
+ input = urlToHttpOptions(input);
+ } else {
+ input = {...input};
}
- if (typeof options === 'function') {
+ if (typeof options === 'function' || options === undefined) {
+ // (options, callback)
callback = options;
- options = undefined;
+ options = input;
+ } else {
+ // (input, options, callback)
+ options = Object.assign(input, options);
}
- options = {
- ALPNProtocols: ['h2', 'http/1.1'],
- ...input,
- ...options,
- resolveSocket: true
- };
+ options.ALPNProtocols = options.ALPNProtocols || ['h2', 'http/1.1'];
if (!Array.isArray(options.ALPNProtocols) || options.ALPNProtocols.length === 0) {
throw new Error('The `ALPNProtocols` option must be an Array with at least one entry');
@@ -7916,36 +3695,105 @@ module.exports = async (input, options, callback) => {
options.host = options.hostname || options.host || 'localhost';
options.session = options.tlsSession;
- options.servername = options.servername || calculateServerName(options);
+ options.servername = options.servername || calculateServerName((options.headers && options.headers.host) || options.host);
options.port = options.port || (isHttps ? 443 : 80);
options._defaultAgent = isHttps ? https.globalAgent : http.globalAgent;
- const agents = options.agent;
+ const resolveProtocol = options.resolveProtocol || defaultResolveProtocol;
- if (agents) {
- if (agents.addRequest) {
- throw new Error('The `options.agent` object can contain only `http`, `https` or `http2` properties');
- }
+ // Note: We don't support `h2session` here
- options.agent = agents[isHttps ? 'https' : 'http'];
+ let {agent} = options;
+ if (agent !== undefined && agent !== false && agent.constructor.name !== 'Object') {
+ throw new Error('The `options.agent` can be only an object `http`, `https` or `http2` properties');
}
if (isHttps) {
- const protocol = await resolveProtocol(options);
+ options.resolveSocket = true;
- if (protocol === 'h2') {
- if (agents) {
- options.agent = agents.http2;
+ let {socket, alpnProtocol, timeout} = await resolveProtocol(options);
+
+ if (timeout) {
+ if (socket) {
+ socket.destroy();
}
- return new Http2ClientRequest(options, callback);
+ const error = new Error(`Timed out resolving ALPN: ${options.timeout} ms`);
+ error.code = 'ETIMEDOUT';
+ error.ms = options.timeout;
+
+ throw error;
}
+
+ // We can't accept custom `createConnection` because the API is different for HTTP/2
+ if (socket && options.createConnection) {
+ socket.destroy();
+ socket = undefined;
+ }
+
+ delete options.resolveSocket;
+
+ const isHttp2 = alpnProtocol === 'h2';
+
+ if (agent) {
+ agent = isHttp2 ? agent.http2 : agent.https;
+ options.agent = agent;
+ }
+
+ if (agent === undefined) {
+ agent = isHttp2 ? globalAgent : https.globalAgent;
+ }
+
+ if (socket) {
+ if (agent === false) {
+ socket.destroy();
+ } else {
+ const defaultCreateConnection = (isHttp2 ? Agent : https.Agent).prototype.createConnection;
+
+ if (agent.createConnection === defaultCreateConnection) {
+ if (isHttp2) {
+ options._reuseSocket = socket;
+ } else {
+ installSocket(agent, socket, options);
+ }
+ } else {
+ socket.destroy();
+ }
+ }
+ }
+
+ if (isHttp2) {
+ return delayAsyncDestroy(new Http2ClientRequest(options, callback));
+ }
+ } else if (agent) {
+ options.agent = agent.http;
}
- return http.request(options, callback);
+ // If we're sending HTTP/1.1, handle any explicitly set H2 headers in the options:
+ if (options.headers) {
+ options.headers = {...options.headers};
+
+ // :authority is equivalent to the HTTP/1.1 host header
+ if (options.headers[':authority']) {
+ if (!options.headers.host) {
+ options.headers.host = options.headers[':authority'];
+ }
+
+ delete options.headers[':authority'];
+ }
+
+ // Remove other HTTP/2 headers as they have their counterparts in the options
+ delete options.headers[':method'];
+ delete options.headers[':scheme'];
+ delete options.headers[':path'];
+ }
+
+ return delayAsyncDestroy(http.request(options, callback));
};
module.exports.protocolCache = cache;
+module.exports.resolveProtocol = defaultResolveProtocol;
+module.exports.createResolveProtocol = createResolveProtocol;
/***/ }),
@@ -7954,26 +3802,28 @@ module.exports.protocolCache = cache;
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+// See https://github.com/facebook/jest/issues/2549
+// eslint-disable-next-line node/prefer-global/url
+const {URL, urlToHttpOptions} = __nccwpck_require__(7310);
const http2 = __nccwpck_require__(5158);
const {Writable} = __nccwpck_require__(2781);
const {Agent, globalAgent} = __nccwpck_require__(9898);
const IncomingMessage = __nccwpck_require__(2575);
-const urlToOptions = __nccwpck_require__(2686);
const proxyEvents = __nccwpck_require__(1818);
-const isRequestPseudoHeader = __nccwpck_require__(1199);
const {
ERR_INVALID_ARG_TYPE,
ERR_INVALID_PROTOCOL,
- ERR_HTTP_HEADERS_SENT,
- ERR_INVALID_HTTP_TOKEN,
- ERR_HTTP_INVALID_HEADER_VALUE,
- ERR_INVALID_CHAR
+ ERR_HTTP_HEADERS_SENT
} = __nccwpck_require__(7087);
+const validateHeaderName = __nccwpck_require__(4592);
+const validateHeaderValue = __nccwpck_require__(3549);
+const proxySocketHandler = __nccwpck_require__(9404);
const {
HTTP2_HEADER_STATUS,
HTTP2_HEADER_METHOD,
HTTP2_HEADER_PATH,
+ HTTP2_HEADER_AUTHORITY,
HTTP2_METHOD_CONNECT
} = http2.constants;
@@ -7983,59 +3833,66 @@ const kSession = Symbol('session');
const kOptions = Symbol('options');
const kFlushedHeaders = Symbol('flushedHeaders');
const kJobs = Symbol('jobs');
-
-const isValidHttpToken = /^[\^`\-\w!#$%&*+.|~]+$/;
-const isInvalidHeaderValue = /[^\t\u0020-\u007E\u0080-\u00FF]/;
+const kPendingAgentPromise = Symbol('pendingAgentPromise');
class ClientRequest extends Writable {
constructor(input, options, callback) {
super({
- autoDestroy: false
+ autoDestroy: false,
+ emitClose: false
});
- const hasInput = typeof input === 'string' || input instanceof URL;
- if (hasInput) {
- input = urlToOptions(input instanceof URL ? input : new URL(input));
+ if (typeof input === 'string') {
+ input = urlToHttpOptions(new URL(input));
+ } else if (input instanceof URL) {
+ input = urlToHttpOptions(input);
+ } else {
+ input = {...input};
}
if (typeof options === 'function' || options === undefined) {
// (options, callback)
callback = options;
- options = hasInput ? input : {...input};
+ options = input;
} else {
// (input, options, callback)
- options = {...input, ...options};
+ options = Object.assign(input, options);
}
if (options.h2session) {
this[kSession] = options.h2session;
- } else if (options.agent === false) {
- this.agent = new Agent({maxFreeSessions: 0});
- } else if (typeof options.agent === 'undefined' || options.agent === null) {
- if (typeof options.createConnection === 'function') {
- // This is a workaround - we don't have to create the session on our own.
- this.agent = new Agent({maxFreeSessions: 0});
- this.agent.createConnection = options.createConnection;
- } else {
- this.agent = globalAgent;
+
+ if (this[kSession].destroyed) {
+ throw new Error('The session has been closed already');
}
+
+ this.protocol = this[kSession].socket.encrypted ? 'https:' : 'http:';
+ } else if (options.agent === false) {
+ this.agent = new Agent({maxEmptySessions: 0});
+ } else if (typeof options.agent === 'undefined' || options.agent === null) {
+ this.agent = globalAgent;
} else if (typeof options.agent.request === 'function') {
this.agent = options.agent;
} else {
- throw new ERR_INVALID_ARG_TYPE('options.agent', ['Agent-like Object', 'undefined', 'false'], options.agent);
+ throw new ERR_INVALID_ARG_TYPE('options.agent', ['http2wrapper.Agent-like Object', 'undefined', 'false'], options.agent);
}
- if (options.protocol && options.protocol !== 'https:') {
- throw new ERR_INVALID_PROTOCOL(options.protocol, 'https:');
+ if (this.agent) {
+ this.protocol = this.agent.protocol;
}
- const port = options.port || options.defaultPort || (this.agent && this.agent.defaultPort) || 443;
- const host = options.hostname || options.host || 'localhost';
+ if (options.protocol && options.protocol !== this.protocol) {
+ throw new ERR_INVALID_PROTOCOL(options.protocol, this.protocol);
+ }
- // Don't enforce the origin via options. It may be changed in an Agent.
+ if (!options.port) {
+ options.port = options.defaultPort || (this.agent && this.agent.defaultPort) || 443;
+ }
+
+ options.host = options.hostname || options.host || 'localhost';
+
+ // Unused
delete options.hostname;
- delete options.host;
- delete options.port;
const {timeout} = options;
options.timeout = undefined;
@@ -8043,19 +3900,26 @@ class ClientRequest extends Writable {
this[kHeaders] = Object.create(null);
this[kJobs] = [];
+ this[kPendingAgentPromise] = undefined;
+
this.socket = null;
this.connection = null;
this.method = options.method || 'GET';
- this.path = options.path;
+
+ if (!(this.method === 'CONNECT' && (options.path === '/' || options.path === undefined))) {
+ this.path = options.path;
+ }
this.res = null;
this.aborted = false;
this.reusedSocket = false;
- if (options.headers) {
- for (const [header, value] of Object.entries(options.headers)) {
- this.setHeader(header, value);
+ const {headers} = options;
+ if (headers) {
+ // eslint-disable-next-line guard-for-in
+ for (const header in headers) {
+ this.setHeader(header, headers[header]);
}
}
@@ -8069,18 +3933,21 @@ class ClientRequest extends Writable {
this[kOptions] = options;
// Clients that generate HTTP/2 requests directly SHOULD use the :authority pseudo-header field instead of the Host header field.
- if (port === 443) {
- this[kOrigin] = `https://${host}`;
+ this[kOrigin] = new URL(`${this.protocol}//${options.servername || options.host}:${options.port}`);
- if (!(':authority' in this[kHeaders])) {
- this[kHeaders][':authority'] = host;
- }
- } else {
- this[kOrigin] = `https://${host}:${port}`;
+ // A socket is being reused
+ const reuseSocket = options._reuseSocket;
+ if (reuseSocket) {
+ options.createConnection = (...args) => {
+ if (reuseSocket.destroyed) {
+ return this.agent.createConnection(...args);
+ }
- if (!(':authority' in this[kHeaders])) {
- this[kHeaders][':authority'] = `${host}:${port}`;
- }
+ return reuseSocket;
+ };
+
+ // eslint-disable-next-line promise/prefer-await-to-then
+ this.agent.getSession(this[kOrigin], this[kOptions]).catch(() => {});
}
if (timeout) {
@@ -8105,15 +3972,27 @@ class ClientRequest extends Writable {
}
get path() {
- return this[kHeaders][HTTP2_HEADER_PATH];
+ const header = this.method === 'CONNECT' ? HTTP2_HEADER_AUTHORITY : HTTP2_HEADER_PATH;
+
+ return this[kHeaders][header];
}
set path(value) {
if (value) {
- this[kHeaders][HTTP2_HEADER_PATH] = value;
+ const header = this.method === 'CONNECT' ? HTTP2_HEADER_AUTHORITY : HTTP2_HEADER_PATH;
+
+ this[kHeaders][header] = value;
}
}
+ get host() {
+ return this[kOrigin].hostname;
+ }
+
+ set host(_value) {
+ // Do nothing as this is read only.
+ }
+
get _mustNotHaveABody() {
return this.method === 'GET' || this.method === 'HEAD' || this.method === 'DELETE';
}
@@ -8137,15 +4016,11 @@ class ClientRequest extends Writable {
}
_final(callback) {
- if (this.destroyed) {
- return;
- }
-
this.flushHeaders();
const callEnd = () => {
- // For GET, HEAD and DELETE
- if (this._mustNotHaveABody) {
+ // For GET, HEAD and DELETE and CONNECT
+ if (this._mustNotHaveABody || this.method === 'CONNECT') {
callback();
return;
}
@@ -8174,13 +4049,25 @@ class ClientRequest extends Writable {
this.destroy();
}
- _destroy(error, callback) {
+ async _destroy(error, callback) {
if (this.res) {
this.res._dump();
}
if (this._request) {
this._request.destroy();
+ } else {
+ process.nextTick(() => {
+ this.emit('close');
+ });
+ }
+
+ try {
+ await this[kPendingAgentPromise];
+ } catch (internalError) {
+ if (this.aborted) {
+ error = internalError;
+ }
}
callback(error);
@@ -8206,46 +4093,45 @@ class ClientRequest extends Writable {
// Forwards `timeout`, `continue`, `close` and `error` events to this instance.
if (!isConnectMethod) {
- proxyEvents(stream, this, ['timeout', 'continue', 'close', 'error']);
+ // TODO: Should we proxy `close` here?
+ proxyEvents(stream, this, ['timeout', 'continue']);
}
- // Wait for the `finish` event. We don't want to emit the `response` event
- // before `request.end()` is called.
- const waitForEnd = fn => {
- return (...args) => {
- if (!this.writable && !this.destroyed) {
- fn(...args);
- } else {
- this.once('finish', () => {
- fn(...args);
- });
- }
- };
- };
+ stream.once('error', error => {
+ this.destroy(error);
+ });
- // This event tells we are ready to listen for the data.
- stream.once('response', waitForEnd((headers, flags, rawHeaders) => {
+ stream.once('aborted', () => {
+ const {res} = this;
+ if (res) {
+ res.aborted = true;
+ res.emit('aborted');
+ res.destroy();
+ } else {
+ this.destroy(new Error('The server aborted the HTTP/2 stream'));
+ }
+ });
+
+ const onResponse = (headers, flags, rawHeaders) => {
// If we were to emit raw request stream, it would be as fast as the native approach.
// Note that wrapping the raw stream in a Proxy instance won't improve the performance (already tested it).
const response = new IncomingMessage(this.socket, stream.readableHighWaterMark);
this.res = response;
+ // Undocumented, but it is used by `cacheable-request`
+ response.url = `${this[kOrigin].origin}${this.path}`;
+
response.req = this;
response.statusCode = headers[HTTP2_HEADER_STATUS];
response.headers = headers;
response.rawHeaders = rawHeaders;
response.once('end', () => {
- if (this.aborted) {
- response.aborted = true;
- response.emit('aborted');
- } else {
- response.complete = true;
+ response.complete = true;
- // Has no effect, just be consistent with the Node.js behavior
- response.socket = null;
- response.connection = null;
- }
+ // Has no effect, just be consistent with the Node.js behavior
+ response.socket = null;
+ response.connection = null;
});
if (isConnectMethod) {
@@ -8268,7 +4154,9 @@ class ClientRequest extends Writable {
});
stream.once('end', () => {
- response.push(null);
+ if (!this.aborted) {
+ response.push(null);
+ }
});
if (!this.emit('response', response)) {
@@ -8276,50 +4164,123 @@ class ClientRequest extends Writable {
response._dump();
}
}
- }));
+ };
+
+ // This event tells we are ready to listen for the data.
+ stream.once('response', onResponse);
// Emits `information` event
- stream.once('headers', waitForEnd(
- headers => this.emit('information', {statusCode: headers[HTTP2_HEADER_STATUS]})
- ));
+ stream.once('headers', headers => this.emit('information', {statusCode: headers[HTTP2_HEADER_STATUS]}));
- stream.once('trailers', waitForEnd((trailers, flags, rawTrailers) => {
+ stream.once('trailers', (trailers, flags, rawTrailers) => {
const {res} = this;
+ // https://github.com/nodejs/node/issues/41251
+ if (res === null) {
+ onResponse(trailers, flags, rawTrailers);
+ return;
+ }
+
// Assigns trailers to the response object.
res.trailers = trailers;
res.rawTrailers = rawTrailers;
- }));
+ });
- const {socket} = stream.session;
- this.socket = socket;
- this.connection = socket;
+ stream.once('close', () => {
+ const {aborted, res} = this;
+ if (res) {
+ if (aborted) {
+ res.aborted = true;
+ res.emit('aborted');
+ res.destroy();
+ }
+
+ const finish = () => {
+ res.emit('close');
+
+ this.destroy();
+ this.emit('close');
+ };
+
+ if (res.readable) {
+ res.once('end', finish);
+ } else {
+ finish();
+ }
+
+ return;
+ }
+
+ if (!this.destroyed) {
+ this.destroy(new Error('The HTTP/2 stream has been early terminated'));
+ this.emit('close');
+ return;
+ }
+
+ this.destroy();
+ this.emit('close');
+ });
+
+ this.socket = new Proxy(stream, proxySocketHandler);
for (const job of this[kJobs]) {
job();
}
+ this[kJobs].length = 0;
+
this.emit('socket', this.socket);
};
+ if (!(HTTP2_HEADER_AUTHORITY in this[kHeaders]) && !isConnectMethod) {
+ this[kHeaders][HTTP2_HEADER_AUTHORITY] = this[kOrigin].host;
+ }
+
// Makes a HTTP2 request
if (this[kSession]) {
try {
onStream(this[kSession].request(this[kHeaders]));
} catch (error) {
- this.emit('error', error);
+ this.destroy(error);
}
} else {
this.reusedSocket = true;
try {
- onStream(await this.agent.request(this[kOrigin], this[kOptions], this[kHeaders]));
+ const promise = this.agent.request(this[kOrigin], this[kOptions], this[kHeaders]);
+ this[kPendingAgentPromise] = promise;
+
+ onStream(await promise);
+
+ this[kPendingAgentPromise] = false;
} catch (error) {
- this.emit('error', error);
+ this[kPendingAgentPromise] = false;
+
+ this.destroy(error);
}
}
}
+ get connection() {
+ return this.socket;
+ }
+
+ set connection(value) {
+ this.socket = value;
+ }
+
+ getHeaderNames() {
+ return Object.keys(this[kHeaders]);
+ }
+
+ hasHeader(name) {
+ if (typeof name !== 'string') {
+ throw new ERR_INVALID_ARG_TYPE('name', 'string', name);
+ }
+
+ return Boolean(this[kHeaders][name.toLowerCase()]);
+ }
+
getHeader(name) {
if (typeof name !== 'string') {
throw new ERR_INVALID_ARG_TYPE('name', 'string', name);
@@ -8349,19 +4310,24 @@ class ClientRequest extends Writable {
throw new ERR_HTTP_HEADERS_SENT('set');
}
- if (typeof name !== 'string' || (!isValidHttpToken.test(name) && !isRequestPseudoHeader(name))) {
- throw new ERR_INVALID_HTTP_TOKEN('Header name', name);
+ validateHeaderName(name);
+ validateHeaderValue(name, value);
+
+ const lowercased = name.toLowerCase();
+
+ if (lowercased === 'connection') {
+ if (value.toLowerCase() === 'keep-alive') {
+ return;
+ }
+
+ throw new Error(`Invalid 'connection' header: ${value}`);
}
- if (typeof value === 'undefined') {
- throw new ERR_HTTP_INVALID_HEADER_VALUE(value, name);
+ if (lowercased === 'host' && this.method === 'CONNECT') {
+ this[kHeaders][HTTP2_HEADER_AUTHORITY] = value;
+ } else {
+ this[kHeaders][lowercased] = value;
}
-
- if (isInvalidHeaderValue.test(value)) {
- throw new ERR_INVALID_CHAR('header content', name);
- }
-
- this[kHeaders][name.toLowerCase()] = value;
}
setNoDelay() {
@@ -8411,8 +4377,9 @@ const {Readable} = __nccwpck_require__(2781);
class IncomingMessage extends Readable {
constructor(socket, highWaterMark) {
super({
- highWaterMark,
- autoDestroy: false
+ emitClose: false,
+ autoDestroy: true,
+ highWaterMark
});
this.statusCode = null;
@@ -8432,12 +4399,26 @@ class IncomingMessage extends Readable {
this.rawTrailers = [];
this.socket = socket;
- this.connection = socket;
this._dumped = false;
}
- _destroy(error) {
+ get connection() {
+ return this.socket;
+ }
+
+ set connection(value) {
+ this.socket = value;
+ }
+
+ _destroy(error, callback) {
+ if (!this.readableEnded) {
+ this.aborted = true;
+ }
+
+ // See https://github.com/nodejs/node/issues/35303
+ callback();
+
this.req._request.destroy(error);
}
@@ -8472,14 +4453,26 @@ module.exports = IncomingMessage;
const http2 = __nccwpck_require__(5158);
-const agent = __nccwpck_require__(9898);
+const {
+ Agent,
+ globalAgent
+} = __nccwpck_require__(9898);
const ClientRequest = __nccwpck_require__(9632);
const IncomingMessage = __nccwpck_require__(2575);
const auto = __nccwpck_require__(7167);
+const {
+ HttpOverHttp2,
+ HttpsOverHttp2
+} = __nccwpck_require__(8795);
+const Http2OverHttp2 = __nccwpck_require__(8553);
+const {
+ Http2OverHttp,
+ Http2OverHttps
+} = __nccwpck_require__(9794);
+const validateHeaderName = __nccwpck_require__(4592);
+const validateHeaderValue = __nccwpck_require__(3549);
-const request = (url, options, callback) => {
- return new ClientRequest(url, options, callback);
-};
+const request = (url, options, callback) => new ClientRequest(url, options, callback);
const get = (url, options, callback) => {
// eslint-disable-next-line unicorn/prevent-abbreviations
@@ -8493,40 +4486,360 @@ module.exports = {
...http2,
ClientRequest,
IncomingMessage,
- ...agent,
+ Agent,
+ globalAgent,
request,
get,
- auto
+ auto,
+ proxies: {
+ HttpOverHttp2,
+ HttpsOverHttp2,
+ Http2OverHttp2,
+ Http2OverHttp,
+ Http2OverHttps
+ },
+ validateHeaderName,
+ validateHeaderValue
};
+/***/ }),
+
+/***/ 7885:
+/***/ ((module) => {
+
+
+
+module.exports = self => {
+ const {username, password} = self.proxyOptions.url;
+
+ if (username || password) {
+ const data = `${username}:${password}`;
+ const authorization = `Basic ${Buffer.from(data).toString('base64')}`;
+
+ return {
+ 'proxy-authorization': authorization,
+ authorization
+ };
+ }
+
+ return {};
+};
+
+
+/***/ }),
+
+/***/ 8795:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+
+const tls = __nccwpck_require__(4404);
+const http = __nccwpck_require__(3685);
+const https = __nccwpck_require__(5687);
+const JSStreamSocket = __nccwpck_require__(1564);
+const {globalAgent} = __nccwpck_require__(9898);
+const UnexpectedStatusCodeError = __nccwpck_require__(6203);
+const initialize = __nccwpck_require__(1089);
+const getAuthorizationHeaders = __nccwpck_require__(7885);
+
+const createConnection = (self, options, callback) => {
+ (async () => {
+ try {
+ const {proxyOptions} = self;
+ const {url, headers, raw} = proxyOptions;
+
+ const stream = await globalAgent.request(url, proxyOptions, {
+ ...getAuthorizationHeaders(self),
+ ...headers,
+ ':method': 'CONNECT',
+ ':authority': `${options.host}:${options.port}`
+ });
+
+ stream.once('error', callback);
+ stream.once('response', headers => {
+ const statusCode = headers[':status'];
+
+ if (statusCode !== 200) {
+ callback(new UnexpectedStatusCodeError(statusCode, ''));
+ return;
+ }
+
+ const encrypted = self instanceof https.Agent;
+
+ if (raw && encrypted) {
+ options.socket = stream;
+ const secureStream = tls.connect(options);
+
+ secureStream.once('close', () => {
+ stream.destroy();
+ });
+
+ callback(null, secureStream);
+ return;
+ }
+
+ const socket = new JSStreamSocket(stream);
+ socket.encrypted = false;
+ socket._handle.getpeername = out => {
+ out.family = undefined;
+ out.address = undefined;
+ out.port = undefined;
+ };
+
+ callback(null, socket);
+ });
+ } catch (error) {
+ callback(error);
+ }
+ })();
+};
+
+class HttpOverHttp2 extends http.Agent {
+ constructor(options) {
+ super(options);
+
+ initialize(this, options.proxyOptions);
+ }
+
+ createConnection(options, callback) {
+ createConnection(this, options, callback);
+ }
+}
+
+class HttpsOverHttp2 extends https.Agent {
+ constructor(options) {
+ super(options);
+
+ initialize(this, options.proxyOptions);
+ }
+
+ createConnection(options, callback) {
+ createConnection(this, options, callback);
+ }
+}
+
+module.exports = {
+ HttpOverHttp2,
+ HttpsOverHttp2
+};
+
+
+/***/ }),
+
+/***/ 9794:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+
+const http = __nccwpck_require__(3685);
+const https = __nccwpck_require__(5687);
+const Http2OverHttpX = __nccwpck_require__(1857);
+const getAuthorizationHeaders = __nccwpck_require__(7885);
+
+const getStream = request => new Promise((resolve, reject) => {
+ const onConnect = (response, socket, head) => {
+ socket.unshift(head);
+
+ request.off('error', reject);
+ resolve([socket, response.statusCode, response.statusMessage]);
+ };
+
+ request.once('error', reject);
+ request.once('connect', onConnect);
+});
+
+class Http2OverHttp extends Http2OverHttpX {
+ async _getProxyStream(authority) {
+ const {proxyOptions} = this;
+ const {url, headers} = this.proxyOptions;
+
+ const network = url.protocol === 'https:' ? https : http;
+
+ // `new URL('https://localhost/httpbin.org:443')` results in
+ // a `/httpbin.org:443` path, which has an invalid leading slash.
+ const request = network.request({
+ ...proxyOptions,
+ hostname: url.hostname,
+ port: url.port,
+ path: authority,
+ headers: {
+ ...getAuthorizationHeaders(this),
+ ...headers,
+ host: authority
+ },
+ method: 'CONNECT'
+ }).end();
+
+ return getStream(request);
+ }
+}
+
+module.exports = {
+ Http2OverHttp,
+ Http2OverHttps: Http2OverHttp
+};
+
+
+/***/ }),
+
+/***/ 8553:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+
+const {globalAgent} = __nccwpck_require__(9898);
+const Http2OverHttpX = __nccwpck_require__(1857);
+const getAuthorizationHeaders = __nccwpck_require__(7885);
+
+const getStatusCode = stream => new Promise((resolve, reject) => {
+ stream.once('error', reject);
+ stream.once('response', headers => {
+ stream.off('error', reject);
+ resolve(headers[':status']);
+ });
+});
+
+class Http2OverHttp2 extends Http2OverHttpX {
+ async _getProxyStream(authority) {
+ const {proxyOptions} = this;
+
+ const headers = {
+ ...getAuthorizationHeaders(this),
+ ...proxyOptions.headers,
+ ':method': 'CONNECT',
+ ':authority': authority
+ };
+
+ const stream = await globalAgent.request(proxyOptions.url, proxyOptions, headers);
+ const statusCode = await getStatusCode(stream);
+
+ return [stream, statusCode, ''];
+ }
+}
+
+module.exports = Http2OverHttp2;
+
+
+/***/ }),
+
+/***/ 1857:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+
+const {Agent} = __nccwpck_require__(9898);
+const JSStreamSocket = __nccwpck_require__(1564);
+const UnexpectedStatusCodeError = __nccwpck_require__(6203);
+const initialize = __nccwpck_require__(1089);
+
+class Http2OverHttpX extends Agent {
+ constructor(options) {
+ super(options);
+
+ initialize(this, options.proxyOptions);
+ }
+
+ async createConnection(origin, options) {
+ const authority = `${origin.hostname}:${origin.port || 443}`;
+
+ const [stream, statusCode, statusMessage] = await this._getProxyStream(authority);
+ if (statusCode !== 200) {
+ throw new UnexpectedStatusCodeError(statusCode, statusMessage);
+ }
+
+ if (this.proxyOptions.raw) {
+ options.socket = stream;
+ } else {
+ const socket = new JSStreamSocket(stream);
+ socket.encrypted = false;
+ socket._handle.getpeername = out => {
+ out.family = undefined;
+ out.address = undefined;
+ out.port = undefined;
+ };
+
+ return socket;
+ }
+
+ return super.createConnection(origin, options);
+ }
+}
+
+module.exports = Http2OverHttpX;
+
+
+/***/ }),
+
+/***/ 1089:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+
+// See https://github.com/facebook/jest/issues/2549
+// eslint-disable-next-line node/prefer-global/url
+const {URL} = __nccwpck_require__(7310);
+const checkType = __nccwpck_require__(3453);
+
+module.exports = (self, proxyOptions) => {
+ checkType('proxyOptions', proxyOptions, ['object']);
+ checkType('proxyOptions.headers', proxyOptions.headers, ['object', 'undefined']);
+ checkType('proxyOptions.raw', proxyOptions.raw, ['boolean', 'undefined']);
+ checkType('proxyOptions.url', proxyOptions.url, [URL, 'string']);
+
+ const url = new URL(proxyOptions.url);
+
+ self.proxyOptions = {
+ raw: true,
+ ...proxyOptions,
+ headers: {...proxyOptions.headers},
+ url
+ };
+};
+
+
+/***/ }),
+
+/***/ 6203:
+/***/ ((module) => {
+
+
+
+class UnexpectedStatusCodeError extends Error {
+ constructor(statusCode, statusMessage = '') {
+ super(`The proxy server rejected the request with status code ${statusCode} (${statusMessage || 'empty status message'})`);
+ this.statusCode = statusCode;
+ this.statusMessage = statusMessage;
+ }
+}
+
+module.exports = UnexpectedStatusCodeError;
+
+
/***/ }),
/***/ 1982:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-const net = __nccwpck_require__(1808);
-/* istanbul ignore file: https://github.com/nodejs/node/blob/v13.0.1/lib/_http_agent.js */
+const {isIP} = __nccwpck_require__(1808);
+const assert = __nccwpck_require__(9491);
-module.exports = options => {
- let servername = options.host;
- const hostHeader = options.headers && options.headers.host;
+const getHost = host => {
+ if (host[0] === '[') {
+ const idx = host.indexOf(']');
- if (hostHeader) {
- if (hostHeader.startsWith('[')) {
- const index = hostHeader.indexOf(']');
- if (index === -1) {
- servername = hostHeader;
- } else {
- servername = hostHeader.slice(1, -1);
- }
- } else {
- servername = hostHeader.split(':', 1)[0];
- }
+ assert(idx !== -1);
+ return host.slice(1, idx);
}
- if (net.isIP(servername)) {
+ const idx = host.indexOf(':');
+ if (idx === -1) {
+ return host;
+ }
+
+ return host.slice(0, idx);
+};
+
+module.exports = host => {
+ const servername = getHost(host);
+
+ if (isIP(servername)) {
return '';
}
@@ -8534,6 +4847,73 @@ module.exports = options => {
};
+/***/ }),
+
+/***/ 3453:
+/***/ ((module) => {
+
+
+
+const checkType = (name, value, types) => {
+ const valid = types.some(type => {
+ const typeofType = typeof type;
+ if (typeofType === 'string') {
+ return typeof value === type;
+ }
+
+ return value instanceof type;
+ });
+
+ if (!valid) {
+ const names = types.map(type => typeof type === 'string' ? type : type.name);
+
+ throw new TypeError(`Expected '${name}' to be a type of ${names.join(' or ')}, got ${typeof value}`);
+ }
+};
+
+module.exports = checkType;
+
+
+/***/ }),
+
+/***/ 9237:
+/***/ ((module) => {
+
+
+
+module.exports = stream => {
+ if (stream.listenerCount('error') !== 0) {
+ return stream;
+ }
+
+ stream.__destroy = stream._destroy;
+ stream._destroy = (...args) => {
+ const callback = args.pop();
+
+ stream.__destroy(...args, async error => {
+ await Promise.resolve();
+ callback(error);
+ });
+ };
+
+ const onError = error => {
+ // eslint-disable-next-line promise/prefer-await-to-then
+ Promise.resolve().then(() => {
+ stream.emit('error', error);
+ });
+ };
+
+ stream.once('error', onError);
+
+ // eslint-disable-next-line promise/prefer-await-to-then
+ Promise.resolve().then(() => {
+ stream.off('error', onError);
+ });
+
+ return stream;
+};
+
+
/***/ }),
/***/ 7087:
@@ -8565,25 +4945,31 @@ makeError(TypeError, 'ERR_INVALID_ARG_TYPE', args => {
return `The "${args[0]}" ${type} must be ${isManyTypes ? 'one of' : 'of'} type ${valid}. Received ${typeof args[2]}`;
});
-makeError(TypeError, 'ERR_INVALID_PROTOCOL', args => {
- return `Protocol "${args[0]}" not supported. Expected "${args[1]}"`;
-});
+makeError(TypeError, 'ERR_INVALID_PROTOCOL', args =>
+ `Protocol "${args[0]}" not supported. Expected "${args[1]}"`
+);
-makeError(Error, 'ERR_HTTP_HEADERS_SENT', args => {
- return `Cannot ${args[0]} headers after they are sent to the client`;
-});
+makeError(Error, 'ERR_HTTP_HEADERS_SENT', args =>
+ `Cannot ${args[0]} headers after they are sent to the client`
+);
-makeError(TypeError, 'ERR_INVALID_HTTP_TOKEN', args => {
- return `${args[0]} must be a valid HTTP token [${args[1]}]`;
-});
+makeError(TypeError, 'ERR_INVALID_HTTP_TOKEN', args =>
+ `${args[0]} must be a valid HTTP token [${args[1]}]`
+);
-makeError(TypeError, 'ERR_HTTP_INVALID_HEADER_VALUE', args => {
- return `Invalid value "${args[0]} for header "${args[1]}"`;
-});
+makeError(TypeError, 'ERR_HTTP_INVALID_HEADER_VALUE', args =>
+ `Invalid value "${args[0]} for header "${args[1]}"`
+);
-makeError(TypeError, 'ERR_INVALID_CHAR', args => {
- return `Invalid character in ${args[0]} [${args[1]}]`;
-});
+makeError(TypeError, 'ERR_INVALID_CHAR', args =>
+ `Invalid character in ${args[0]} [${args[1]}]`
+);
+
+makeError(
+ Error,
+ 'ERR_HTTP2_NO_SOCKET_MANIPULATION',
+ 'HTTP/2 sockets should not be directly manipulated (e.g. read and written)'
+);
/***/ }),
@@ -8606,6 +4992,21 @@ module.exports = header => {
};
+/***/ }),
+
+/***/ 1564:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+
+const stream = __nccwpck_require__(2781);
+const tls = __nccwpck_require__(4404);
+
+// Really awesome hack.
+const JSStreamSocket = (new tls.TLSSocket(new stream.PassThrough()))._handle._parentWrap.constructor;
+
+module.exports = JSStreamSocket;
+
+
/***/ }),
/***/ 1818:
@@ -8622,33 +5023,152 @@ module.exports = (from, to, events) => {
/***/ }),
-/***/ 2686:
-/***/ ((module) => {
+/***/ 9404:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-/* istanbul ignore file: https://github.com/nodejs/node/blob/a91293d4d9ab403046ab5eb022332e4e3d249bd3/lib/internal/url.js#L1257 */
+const {ERR_HTTP2_NO_SOCKET_MANIPULATION} = __nccwpck_require__(7087);
-module.exports = url => {
- const options = {
- protocol: url.protocol,
- hostname: typeof url.hostname === 'string' && url.hostname.startsWith('[') ? url.hostname.slice(1, -1) : url.hostname,
- host: url.host,
- hash: url.hash,
- search: url.search,
- pathname: url.pathname,
- href: url.href,
- path: `${url.pathname || ''}${url.search || ''}`
- };
+/* istanbul ignore file */
+/* https://github.com/nodejs/node/blob/6eec858f34a40ffa489c1ec54bb24da72a28c781/lib/internal/http2/compat.js#L195-L272 */
- if (typeof url.port === 'string' && url.port.length !== 0) {
- options.port = Number(url.port);
+const proxySocketHandler = {
+ has(stream, property) {
+ // Replaced [kSocket] with .socket
+ const reference = stream.session === undefined ? stream : stream.session.socket;
+ return (property in stream) || (property in reference);
+ },
+
+ get(stream, property) {
+ switch (property) {
+ case 'on':
+ case 'once':
+ case 'end':
+ case 'emit':
+ case 'destroy':
+ return stream[property].bind(stream);
+ case 'writable':
+ case 'destroyed':
+ return stream[property];
+ case 'readable':
+ if (stream.destroyed) {
+ return false;
+ }
+
+ return stream.readable;
+ case 'setTimeout': {
+ const {session} = stream;
+ if (session !== undefined) {
+ return session.setTimeout.bind(session);
+ }
+
+ return stream.setTimeout.bind(stream);
+ }
+
+ case 'write':
+ case 'read':
+ case 'pause':
+ case 'resume':
+ throw new ERR_HTTP2_NO_SOCKET_MANIPULATION();
+ default: {
+ // Replaced [kSocket] with .socket
+ const reference = stream.session === undefined ? stream : stream.session.socket;
+ const value = reference[property];
+
+ return typeof value === 'function' ? value.bind(reference) : value;
+ }
+ }
+ },
+
+ getPrototypeOf(stream) {
+ if (stream.session !== undefined) {
+ // Replaced [kSocket] with .socket
+ return Reflect.getPrototypeOf(stream.session.socket);
+ }
+
+ return Reflect.getPrototypeOf(stream);
+ },
+
+ set(stream, property, value) {
+ switch (property) {
+ case 'writable':
+ case 'readable':
+ case 'destroyed':
+ case 'on':
+ case 'once':
+ case 'end':
+ case 'emit':
+ case 'destroy':
+ stream[property] = value;
+ return true;
+ case 'setTimeout': {
+ const {session} = stream;
+ if (session === undefined) {
+ stream.setTimeout = value;
+ } else {
+ session.setTimeout = value;
+ }
+
+ return true;
+ }
+
+ case 'write':
+ case 'read':
+ case 'pause':
+ case 'resume':
+ throw new ERR_HTTP2_NO_SOCKET_MANIPULATION();
+ default: {
+ // Replaced [kSocket] with .socket
+ const reference = stream.session === undefined ? stream : stream.session.socket;
+ reference[property] = value;
+ return true;
+ }
+ }
+ }
+};
+
+module.exports = proxySocketHandler;
+
+
+/***/ }),
+
+/***/ 4592:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+
+const {ERR_INVALID_HTTP_TOKEN} = __nccwpck_require__(7087);
+const isRequestPseudoHeader = __nccwpck_require__(1199);
+
+const isValidHttpToken = /^[\^`\-\w!#$%&*+.|~]+$/;
+
+module.exports = name => {
+ if (typeof name !== 'string' || (!isValidHttpToken.test(name) && !isRequestPseudoHeader(name))) {
+ throw new ERR_INVALID_HTTP_TOKEN('Header name', name);
+ }
+};
+
+
+/***/ }),
+
+/***/ 3549:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+
+const {
+ ERR_HTTP_INVALID_HEADER_VALUE,
+ ERR_INVALID_CHAR
+} = __nccwpck_require__(7087);
+
+const isInvalidHeaderValue = /[^\t\u0020-\u007E\u0080-\u00FF]/;
+
+module.exports = (name, value) => {
+ if (typeof value === 'undefined') {
+ throw new ERR_HTTP_INVALID_HEADER_VALUE(value, name);
}
- if (url.username || url.password) {
- options.auth = `${url.username || ''}:${url.password || ''}`;
+ if (isInvalidHeaderValue.test(value)) {
+ throw new ERR_INVALID_CHAR('header content', name);
}
-
- return options;
};
@@ -9082,7 +5602,6 @@ __webpack_unused_export__ = VERSION_FULL;
const EventEmitter = __nccwpck_require__(2361);
const JSONB = __nccwpck_require__(2820);
-const compressBrotli = __nccwpck_require__(5728);
const loadStore = options => {
const adapters = {
@@ -9131,13 +5650,10 @@ class Keyv extends EventEmitter {
this.opts.store = loadStore(adapterOptions);
}
- if (this.opts.compress) {
- const brotli = compressBrotli(this.opts.compress.opts);
- this.opts.serialize = async ({value, expires}) => brotli.serialize({value: await brotli.compress(value), expires});
- this.opts.deserialize = async data => {
- const {value, expires} = brotli.deserialize(data);
- return {value: await brotli.decompress(value), expires};
- };
+ if (this.opts.compression) {
+ const compression = this.opts.compression;
+ this.opts.serialize = compression.serialize.bind(compression);
+ this.opts.deserialize = compression.deserialize.bind(compression);
}
if (typeof this.opts.store.on === 'function' && emitErrors) {
@@ -9150,7 +5666,7 @@ class Keyv extends EventEmitter {
for await (const [key, raw] of typeof iterator === 'function'
? iterator(this.opts.store.namespace)
: iterator) {
- const data = this.opts.deserialize(raw);
+ const data = await this.opts.deserialize(raw);
if (this.opts.store.namespace && !key.includes(this.opts.store.namespace)) {
continue;
}
@@ -9202,7 +5718,7 @@ class Keyv extends EventEmitter {
for (const key of keyPrefixed) {
promises.push(Promise.resolve()
.then(() => store.get(key))
- .then(data => (typeof data === 'string') ? this.opts.deserialize(data) : data)
+ .then(data => (typeof data === 'string') ? this.opts.deserialize(data) : (this.opts.compression ? this.opts.deserialize(data) : data))
.then(data => {
if (data === undefined || data === null) {
return undefined;
@@ -9224,44 +5740,35 @@ class Keyv extends EventEmitter {
data.push(value.value);
}
- return data.every(x => x === undefined) ? [] : data;
+ return data;
});
}
return Promise.resolve()
.then(() => isArray ? store.getMany(keyPrefixed) : store.get(keyPrefixed))
- .then(data => (typeof data === 'string') ? this.opts.deserialize(data) : data)
+ .then(data => (typeof data === 'string') ? this.opts.deserialize(data) : (this.opts.compression ? this.opts.deserialize(data) : data))
.then(data => {
if (data === undefined || data === null) {
return undefined;
}
if (isArray) {
- const result = [];
-
- if (data.length === 0) {
- return [];
- }
-
- for (let row of data) {
+ return data.map((row, index) => {
if ((typeof row === 'string')) {
row = this.opts.deserialize(row);
}
if (row === undefined || row === null) {
- result.push(undefined);
- continue;
+ return undefined;
}
if (typeof row.expires === 'number' && Date.now() > row.expires) {
- this.delete(key).then(() => undefined);
- result.push(undefined);
- } else {
- result.push((options && options.raw) ? row : row.value);
+ this.delete(key[index]).then(() => undefined);
+ return undefined;
}
- }
- return result.every(x => x === undefined) ? [] : result;
+ return (options && options.raw) ? row : row.value;
+ });
}
if (typeof data.expires === 'number' && Date.now() > data.expires) {
@@ -9354,533 +5861,132 @@ module.exports = Keyv;
/***/ }),
-/***/ 9662:
-/***/ ((module) => {
-
-
-module.exports = object => {
- const result = {};
-
- for (const [key, value] of Object.entries(object)) {
- result[key.toLowerCase()] = value;
- }
-
- return result;
-};
-
-
-/***/ }),
-
-/***/ 2610:
+/***/ 9273:
/***/ ((module) => {
-// We define these manually to ensure they're always copied
-// even if they would move up the prototype chain
-// https://nodejs.org/api/http.html#http_class_http_incomingmessage
-const knownProps = [
- 'destroy',
- 'setTimeout',
- 'socket',
- 'headers',
- 'trailers',
- 'rawHeaders',
- 'statusCode',
- 'httpVersion',
- 'httpVersionMinor',
- 'httpVersionMajor',
- 'rawTrailers',
- 'statusMessage'
-];
-
-module.exports = (fromStream, toStream) => {
- const fromProps = new Set(Object.keys(fromStream).concat(knownProps));
-
- for (const prop of fromProps) {
- // Don't overwrite existing properties
- if (prop in toStream) {
- continue;
+class QuickLRU {
+ constructor(options = {}) {
+ if (!(options.maxSize && options.maxSize > 0)) {
+ throw new TypeError('`maxSize` must be a number greater than 0');
}
- toStream[prop] = typeof fromStream[prop] === 'function' ? fromStream[prop].bind(fromStream) : fromStream[prop];
- }
-};
-
-
-/***/ }),
-
-/***/ 7952:
-/***/ ((module) => {
-
-
-
-// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
-const DATA_URL_DEFAULT_MIME_TYPE = 'text/plain';
-const DATA_URL_DEFAULT_CHARSET = 'us-ascii';
-
-const testParameter = (name, filters) => {
- return filters.some(filter => filter instanceof RegExp ? filter.test(name) : filter === name);
-};
-
-const normalizeDataURL = (urlString, {stripHash}) => {
- const match = /^data:(?[^,]*?),(?[^#]*?)(?:#(?.*))?$/.exec(urlString);
-
- if (!match) {
- throw new Error(`Invalid URL: ${urlString}`);
+ this.maxSize = options.maxSize;
+ this.onEviction = options.onEviction;
+ this.cache = new Map();
+ this.oldCache = new Map();
+ this._size = 0;
}
- let {type, data, hash} = match.groups;
- const mediaType = type.split(';');
- hash = stripHash ? '' : hash;
+ _set(key, value) {
+ this.cache.set(key, value);
+ this._size++;
- let isBase64 = false;
- if (mediaType[mediaType.length - 1] === 'base64') {
- mediaType.pop();
- isBase64 = true;
- }
+ if (this._size >= this.maxSize) {
+ this._size = 0;
- // Lowercase MIME type
- const mimeType = (mediaType.shift() || '').toLowerCase();
- const attributes = mediaType
- .map(attribute => {
- let [key, value = ''] = attribute.split('=').map(string => string.trim());
-
- // Lowercase `charset`
- if (key === 'charset') {
- value = value.toLowerCase();
-
- if (value === DATA_URL_DEFAULT_CHARSET) {
- return '';
+ if (typeof this.onEviction === 'function') {
+ for (const [key, value] of this.oldCache.entries()) {
+ this.onEviction(key, value);
}
}
- return `${key}${value ? `=${value}` : ''}`;
- })
- .filter(Boolean);
-
- const normalizedMediaType = [
- ...attributes
- ];
-
- if (isBase64) {
- normalizedMediaType.push('base64');
- }
-
- if (normalizedMediaType.length !== 0 || (mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE)) {
- normalizedMediaType.unshift(mimeType);
- }
-
- return `data:${normalizedMediaType.join(';')},${isBase64 ? data.trim() : data}${hash ? `#${hash}` : ''}`;
-};
-
-const normalizeUrl = (urlString, options) => {
- options = {
- defaultProtocol: 'http:',
- normalizeProtocol: true,
- forceHttp: false,
- forceHttps: false,
- stripAuthentication: true,
- stripHash: false,
- stripTextFragment: true,
- stripWWW: true,
- removeQueryParameters: [/^utm_\w+/i],
- removeTrailingSlash: true,
- removeSingleSlash: true,
- removeDirectoryIndex: false,
- sortQueryParameters: true,
- ...options
- };
-
- urlString = urlString.trim();
-
- // Data URL
- if (/^data:/i.test(urlString)) {
- return normalizeDataURL(urlString, options);
- }
-
- if (/^view-source:/i.test(urlString)) {
- throw new Error('`view-source:` is not supported as it is a non-standard protocol');
- }
-
- const hasRelativeProtocol = urlString.startsWith('//');
- const isRelativeUrl = !hasRelativeProtocol && /^\.*\//.test(urlString);
-
- // Prepend protocol
- if (!isRelativeUrl) {
- urlString = urlString.replace(/^(?!(?:\w+:)?\/\/)|^\/\//, options.defaultProtocol);
- }
-
- const urlObj = new URL(urlString);
-
- if (options.forceHttp && options.forceHttps) {
- throw new Error('The `forceHttp` and `forceHttps` options cannot be used together');
- }
-
- if (options.forceHttp && urlObj.protocol === 'https:') {
- urlObj.protocol = 'http:';
- }
-
- if (options.forceHttps && urlObj.protocol === 'http:') {
- urlObj.protocol = 'https:';
- }
-
- // Remove auth
- if (options.stripAuthentication) {
- urlObj.username = '';
- urlObj.password = '';
- }
-
- // Remove hash
- if (options.stripHash) {
- urlObj.hash = '';
- } else if (options.stripTextFragment) {
- urlObj.hash = urlObj.hash.replace(/#?:~:text.*?$/i, '');
- }
-
- // Remove duplicate slashes if not preceded by a protocol
- if (urlObj.pathname) {
- urlObj.pathname = urlObj.pathname.replace(/(? 0) {
- let pathComponents = urlObj.pathname.split('/');
- const lastComponent = pathComponents[pathComponents.length - 1];
-
- if (testParameter(lastComponent, options.removeDirectoryIndex)) {
- pathComponents = pathComponents.slice(0, pathComponents.length - 1);
- urlObj.pathname = pathComponents.slice(1).join('/') + '/';
+ this.oldCache = this.cache;
+ this.cache = new Map();
}
}
- if (urlObj.hostname) {
- // Remove trailing dot
- urlObj.hostname = urlObj.hostname.replace(/\.$/, '');
+ get(key) {
+ if (this.cache.has(key)) {
+ return this.cache.get(key);
+ }
- // Remove `www.`
- if (options.stripWWW && /^www\.(?!www\.)(?:[a-z\-\d]{1,63})\.(?:[a-z.\-\d]{2,63})$/.test(urlObj.hostname)) {
- // Each label should be max 63 at length (min: 1).
- // Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names
- // Each TLD should be up to 63 characters long (min: 2).
- // It is technically possible to have a single character TLD, but none currently exist.
- urlObj.hostname = urlObj.hostname.replace(/^www\./, '');
+ if (this.oldCache.has(key)) {
+ const value = this.oldCache.get(key);
+ this.oldCache.delete(key);
+ this._set(key, value);
+ return value;
}
}
- // Remove query unwanted parameters
- if (Array.isArray(options.removeQueryParameters)) {
- for (const key of [...urlObj.searchParams.keys()]) {
- if (testParameter(key, options.removeQueryParameters)) {
- urlObj.searchParams.delete(key);
+ set(key, value) {
+ if (this.cache.has(key)) {
+ this.cache.set(key, value);
+ } else {
+ this._set(key, value);
+ }
+
+ return this;
+ }
+
+ has(key) {
+ return this.cache.has(key) || this.oldCache.has(key);
+ }
+
+ peek(key) {
+ if (this.cache.has(key)) {
+ return this.cache.get(key);
+ }
+
+ if (this.oldCache.has(key)) {
+ return this.oldCache.get(key);
+ }
+ }
+
+ delete(key) {
+ const deleted = this.cache.delete(key);
+ if (deleted) {
+ this._size--;
+ }
+
+ return this.oldCache.delete(key) || deleted;
+ }
+
+ clear() {
+ this.cache.clear();
+ this.oldCache.clear();
+ this._size = 0;
+ }
+
+ * keys() {
+ for (const [key] of this) {
+ yield key;
+ }
+ }
+
+ * values() {
+ for (const [, value] of this) {
+ yield value;
+ }
+ }
+
+ * [Symbol.iterator]() {
+ for (const item of this.cache) {
+ yield item;
+ }
+
+ for (const item of this.oldCache) {
+ const [key] = item;
+ if (!this.cache.has(key)) {
+ yield item;
}
}
}
- if (options.removeQueryParameters === true) {
- urlObj.search = '';
- }
-
- // Sort query parameters
- if (options.sortQueryParameters) {
- urlObj.searchParams.sort();
- }
-
- if (options.removeTrailingSlash) {
- urlObj.pathname = urlObj.pathname.replace(/\/$/, '');
- }
-
- const oldUrlString = urlString;
-
- // Take advantage of many of the Node `url` normalizations
- urlString = urlObj.toString();
-
- if (!options.removeSingleSlash && urlObj.pathname === '/' && !oldUrlString.endsWith('/') && urlObj.hash === '') {
- urlString = urlString.replace(/\/$/, '');
- }
-
- // Remove ending `/` unless removeSingleSlash is false
- if ((options.removeTrailingSlash || urlObj.pathname === '/') && urlObj.hash === '' && options.removeSingleSlash) {
- urlString = urlString.replace(/\/$/, '');
- }
-
- // Restore relative protocol, if applicable
- if (hasRelativeProtocol && !options.normalizeProtocol) {
- urlString = urlString.replace(/^http:\/\//, '//');
- }
-
- // Remove http/https
- if (options.stripProtocol) {
- urlString = urlString.replace(/^(?:https?:)?\/\//, '');
- }
-
- return urlString;
-};
-
-module.exports = normalizeUrl;
-
-
-/***/ }),
-
-/***/ 1223:
-/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-
-var wrappy = __nccwpck_require__(2940)
-module.exports = wrappy(once)
-module.exports.strict = wrappy(onceStrict)
-
-once.proto = once(function () {
- Object.defineProperty(Function.prototype, 'once', {
- value: function () {
- return once(this)
- },
- configurable: true
- })
-
- Object.defineProperty(Function.prototype, 'onceStrict', {
- value: function () {
- return onceStrict(this)
- },
- configurable: true
- })
-})
-
-function once (fn) {
- var f = function () {
- if (f.called) return f.value
- f.called = true
- return f.value = fn.apply(this, arguments)
- }
- f.called = false
- return f
-}
-
-function onceStrict (fn) {
- var f = function () {
- if (f.called)
- throw new Error(f.onceError)
- f.called = true
- return f.value = fn.apply(this, arguments)
- }
- var name = fn.name || 'Function wrapped with `once`'
- f.onceError = name + " shouldn't be called more than once"
- f.called = false
- return f
-}
-
-
-/***/ }),
-
-/***/ 9072:
-/***/ ((module) => {
-
-
-
-class CancelError extends Error {
- constructor(reason) {
- super(reason || 'Promise was canceled');
- this.name = 'CancelError';
- }
-
- get isCanceled() {
- return true;
- }
-}
-
-class PCancelable {
- static fn(userFn) {
- return (...arguments_) => {
- return new PCancelable((resolve, reject, onCancel) => {
- arguments_.push(onCancel);
- // eslint-disable-next-line promise/prefer-await-to-then
- userFn(...arguments_).then(resolve, reject);
- });
- };
- }
-
- constructor(executor) {
- this._cancelHandlers = [];
- this._isPending = true;
- this._isCanceled = false;
- this._rejectOnCancel = true;
-
- this._promise = new Promise((resolve, reject) => {
- this._reject = reject;
-
- const onResolve = value => {
- this._isPending = false;
- resolve(value);
- };
-
- const onReject = error => {
- this._isPending = false;
- reject(error);
- };
-
- const onCancel = handler => {
- if (!this._isPending) {
- throw new Error('The `onCancel` handler was attached after the promise settled.');
- }
-
- this._cancelHandlers.push(handler);
- };
-
- Object.defineProperties(onCancel, {
- shouldReject: {
- get: () => this._rejectOnCancel,
- set: boolean => {
- this._rejectOnCancel = boolean;
- }
- }
- });
-
- return executor(onResolve, onReject, onCancel);
- });
- }
-
- then(onFulfilled, onRejected) {
- // eslint-disable-next-line promise/prefer-await-to-then
- return this._promise.then(onFulfilled, onRejected);
- }
-
- catch(onRejected) {
- return this._promise.catch(onRejected);
- }
-
- finally(onFinally) {
- return this._promise.finally(onFinally);
- }
-
- cancel(reason) {
- if (!this._isPending || this._isCanceled) {
- return;
- }
-
- if (this._cancelHandlers.length > 0) {
- try {
- for (const handler of this._cancelHandlers) {
- handler();
- }
- } catch (error) {
- this._reject(error);
+ get size() {
+ let oldCacheSize = 0;
+ for (const key of this.oldCache.keys()) {
+ if (!this.cache.has(key)) {
+ oldCacheSize++;
}
}
- this._isCanceled = true;
- if (this._rejectOnCancel) {
- this._reject(new CancelError(reason));
- }
- }
-
- get isCanceled() {
- return this._isCanceled;
+ return Math.min(this._size + oldCacheSize, this.maxSize);
}
}
-Object.setPrototypeOf(PCancelable.prototype, Promise.prototype);
-
-module.exports = PCancelable;
-module.exports.CancelError = CancelError;
-
-
-/***/ }),
-
-/***/ 8341:
-/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-
-var once = __nccwpck_require__(1223)
-var eos = __nccwpck_require__(1205)
-var fs = __nccwpck_require__(7147) // we only need fs to get the ReadStream and WriteStream prototypes
-
-var noop = function () {}
-var ancient = /^v?\.0/.test(process.version)
-
-var isFn = function (fn) {
- return typeof fn === 'function'
-}
-
-var isFS = function (stream) {
- if (!ancient) return false // newer node version do not need to care about fs is a special way
- if (!fs) return false // browser
- return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close)
-}
-
-var isRequest = function (stream) {
- return stream.setHeader && isFn(stream.abort)
-}
-
-var destroyer = function (stream, reading, writing, callback) {
- callback = once(callback)
-
- var closed = false
- stream.on('close', function () {
- closed = true
- })
-
- eos(stream, {readable: reading, writable: writing}, function (err) {
- if (err) return callback(err)
- closed = true
- callback()
- })
-
- var destroyed = false
- return function (err) {
- if (closed) return
- if (destroyed) return
- destroyed = true
-
- if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks
- if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want
-
- if (isFn(stream.destroy)) return stream.destroy()
-
- callback(err || new Error('stream was destroyed'))
- }
-}
-
-var call = function (fn) {
- fn()
-}
-
-var pipe = function (from, to) {
- return from.pipe(to)
-}
-
-var pump = function () {
- var streams = Array.prototype.slice.call(arguments)
- var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop
-
- if (Array.isArray(streams[0])) streams = streams[0]
- if (streams.length < 2) throw new Error('pump requires two streams per minimum')
-
- var error
- var destroys = streams.map(function (stream, i) {
- var reading = i < streams.length - 1
- var writing = i > 0
- return destroyer(stream, reading, writing, function (err) {
- if (!error) error = err
- if (err) destroys.forEach(call)
- if (reading) return
- destroys.forEach(call)
- callback(error)
- })
- })
-
- return streams.reduce(pipe)
-}
-
-module.exports = pump
+module.exports = QuickLRU;
/***/ }),
@@ -9891,62 +5997,48 @@ module.exports = pump
const tls = __nccwpck_require__(4404);
-module.exports = (options = {}) => new Promise((resolve, reject) => {
- const socket = tls.connect(options, () => {
+module.exports = (options = {}, connect = tls.connect) => new Promise((resolve, reject) => {
+ let timeout = false;
+
+ let socket;
+
+ const callback = async () => {
+ await socketPromise;
+
+ socket.off('timeout', onTimeout);
+ socket.off('error', reject);
+
if (options.resolveSocket) {
- socket.off('error', reject);
- resolve({alpnProtocol: socket.alpnProtocol, socket});
+ resolve({alpnProtocol: socket.alpnProtocol, socket, timeout});
+
+ if (timeout) {
+ await Promise.resolve();
+ socket.emit('timeout');
+ }
} else {
socket.destroy();
- resolve({alpnProtocol: socket.alpnProtocol});
+ resolve({alpnProtocol: socket.alpnProtocol, timeout});
}
- });
+ };
- socket.on('error', reject);
+ const onTimeout = async () => {
+ timeout = true;
+ callback();
+ };
+
+ const socketPromise = (async () => {
+ try {
+ socket = await connect(options, callback);
+
+ socket.on('error', reject);
+ socket.once('timeout', onTimeout);
+ } catch (error) {
+ reject(error);
+ }
+ })();
});
-/***/ }),
-
-/***/ 9004:
-/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-
-
-
-const Readable = (__nccwpck_require__(2781).Readable);
-const lowercaseKeys = __nccwpck_require__(9662);
-
-class Response extends Readable {
- constructor(statusCode, headers, body, url) {
- if (typeof statusCode !== 'number') {
- throw new TypeError('Argument `statusCode` should be a number');
- }
- if (typeof headers !== 'object') {
- throw new TypeError('Argument `headers` should be an object');
- }
- if (!(body instanceof Buffer)) {
- throw new TypeError('Argument `body` should be a buffer');
- }
- if (typeof url !== 'string') {
- throw new TypeError('Argument `url` should be a string');
- }
-
- super();
- this.statusCode = statusCode;
- this.headers = lowercaseKeys(headers);
- this.body = body;
- this.url = url;
- }
-
- _read() {
- this.push(this.body);
- this.push(null);
- }
-}
-
-module.exports = Response;
-
-
/***/ }),
/***/ 4294:
@@ -10857,46 +6949,6 @@ function version(uuid) {
var _default = version;
exports["default"] = _default;
-/***/ }),
-
-/***/ 2940:
-/***/ ((module) => {
-
-// Returns a wrapper function that returns a wrapped callback
-// The wrapper function should do some stuff, and return a
-// presumably different callback function.
-// This makes sure that own properties are retained, so that
-// decorations and such are not lost along the way.
-module.exports = wrappy
-function wrappy (fn, cb) {
- if (fn && cb) return wrappy(fn)(cb)
-
- if (typeof fn !== 'function')
- throw new TypeError('need wrapper function')
-
- Object.keys(fn).forEach(function (k) {
- wrapper[k] = fn[k]
- })
-
- return wrapper
-
- function wrapper() {
- var args = new Array(arguments.length)
- for (var i = 0; i < args.length; i++) {
- args[i] = arguments[i]
- }
- var ret = fn.apply(this, args)
- var cb = args[args.length-1]
- if (typeof ret === 'function' && ret !== cb) {
- Object.keys(cb).forEach(function (k) {
- ret[k] = cb[k]
- })
- }
- return ret
- }
-}
-
-
/***/ }),
/***/ 9491:
@@ -10920,13 +6972,6 @@ module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("crypto");
/***/ }),
-/***/ 9523:
-/***/ ((module) => {
-
-module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("dns");
-
-/***/ }),
-
/***/ 2361:
/***/ ((module) => {
@@ -11062,8 +7107,6961 @@ var __webpack_exports__ = {};
// EXTERNAL MODULE: ./node_modules/@actions/core/lib/core.js
var core = __nccwpck_require__(2186);
-// EXTERNAL MODULE: ./node_modules/got/dist/source/index.js
-var source = __nccwpck_require__(3061);
+;// CONCATENATED MODULE: ./node_modules/@sindresorhus/is/dist/index.js
+const typedArrayTypeNames = [
+ 'Int8Array',
+ 'Uint8Array',
+ 'Uint8ClampedArray',
+ 'Int16Array',
+ 'Uint16Array',
+ 'Int32Array',
+ 'Uint32Array',
+ 'Float32Array',
+ 'Float64Array',
+ 'BigInt64Array',
+ 'BigUint64Array',
+];
+function isTypedArrayName(name) {
+ return typedArrayTypeNames.includes(name);
+}
+const objectTypeNames = [
+ 'Function',
+ 'Generator',
+ 'AsyncGenerator',
+ 'GeneratorFunction',
+ 'AsyncGeneratorFunction',
+ 'AsyncFunction',
+ 'Observable',
+ 'Array',
+ 'Buffer',
+ 'Blob',
+ 'Object',
+ 'RegExp',
+ 'Date',
+ 'Error',
+ 'Map',
+ 'Set',
+ 'WeakMap',
+ 'WeakSet',
+ 'WeakRef',
+ 'ArrayBuffer',
+ 'SharedArrayBuffer',
+ 'DataView',
+ 'Promise',
+ 'URL',
+ 'FormData',
+ 'URLSearchParams',
+ 'HTMLElement',
+ 'NaN',
+ ...typedArrayTypeNames,
+];
+function isObjectTypeName(name) {
+ return objectTypeNames.includes(name);
+}
+const primitiveTypeNames = [
+ 'null',
+ 'undefined',
+ 'string',
+ 'number',
+ 'bigint',
+ 'boolean',
+ 'symbol',
+];
+function isPrimitiveTypeName(name) {
+ return primitiveTypeNames.includes(name);
+}
+const assertionTypeDescriptions = [
+ 'positive number',
+ 'negative number',
+ 'Class',
+ 'string with a number',
+ 'null or undefined',
+ 'Iterable',
+ 'AsyncIterable',
+ 'native Promise',
+ 'EnumCase',
+ 'string with a URL',
+ 'truthy',
+ 'falsy',
+ 'primitive',
+ 'integer',
+ 'plain object',
+ 'TypedArray',
+ 'array-like',
+ 'tuple-like',
+ 'Node.js Stream',
+ 'infinite number',
+ 'empty array',
+ 'non-empty array',
+ 'empty string',
+ 'empty string or whitespace',
+ 'non-empty string',
+ 'non-empty string and not whitespace',
+ 'empty object',
+ 'non-empty object',
+ 'empty set',
+ 'non-empty set',
+ 'empty map',
+ 'non-empty map',
+ 'PropertyKey',
+ 'even integer',
+ 'odd integer',
+ 'T',
+ 'in range',
+ 'predicate returns truthy for any value',
+ 'predicate returns truthy for all values',
+ 'valid Date',
+ 'valid length',
+ 'whitespace string',
+ ...objectTypeNames,
+ ...primitiveTypeNames,
+];
+const getObjectType = (value) => {
+ const objectTypeName = Object.prototype.toString.call(value).slice(8, -1);
+ if (/HTML\w+Element/.test(objectTypeName) && isHtmlElement(value)) {
+ return 'HTMLElement';
+ }
+ if (isObjectTypeName(objectTypeName)) {
+ return objectTypeName;
+ }
+ return undefined;
+};
+function detect(value) {
+ if (value === null) {
+ return 'null';
+ }
+ switch (typeof value) {
+ case 'undefined': {
+ return 'undefined';
+ }
+ case 'string': {
+ return 'string';
+ }
+ case 'number': {
+ return Number.isNaN(value) ? 'NaN' : 'number';
+ }
+ case 'boolean': {
+ return 'boolean';
+ }
+ case 'function': {
+ return 'Function';
+ }
+ case 'bigint': {
+ return 'bigint';
+ }
+ case 'symbol': {
+ return 'symbol';
+ }
+ default:
+ }
+ if (isObservable(value)) {
+ return 'Observable';
+ }
+ if (isArray(value)) {
+ return 'Array';
+ }
+ if (isBuffer(value)) {
+ return 'Buffer';
+ }
+ const tagType = getObjectType(value);
+ if (tagType) {
+ return tagType;
+ }
+ if (value instanceof String || value instanceof Boolean || value instanceof Number) {
+ throw new TypeError('Please don\'t use object wrappers for primitive types');
+ }
+ return 'Object';
+}
+function hasPromiseApi(value) {
+ return isFunction(value?.then) && isFunction(value?.catch);
+}
+const is = Object.assign(detect, {
+ all: isAll,
+ any: isAny,
+ array: isArray,
+ arrayBuffer: isArrayBuffer,
+ arrayLike: isArrayLike,
+ asyncFunction: isAsyncFunction,
+ asyncGenerator: isAsyncGenerator,
+ asyncGeneratorFunction: isAsyncGeneratorFunction,
+ asyncIterable: isAsyncIterable,
+ bigint: isBigint,
+ bigInt64Array: isBigInt64Array,
+ bigUint64Array: isBigUint64Array,
+ blob: isBlob,
+ boolean: isBoolean,
+ boundFunction: isBoundFunction,
+ buffer: isBuffer,
+ class: isClass,
+ /** @deprecated Renamed to `class`. */
+ class_: isClass,
+ dataView: isDataView,
+ date: isDate,
+ detect,
+ directInstanceOf: isDirectInstanceOf,
+ /** @deprecated Renamed to `htmlElement` */
+ domElement: isHtmlElement,
+ emptyArray: isEmptyArray,
+ emptyMap: isEmptyMap,
+ emptyObject: isEmptyObject,
+ emptySet: isEmptySet,
+ emptyString: isEmptyString,
+ emptyStringOrWhitespace: isEmptyStringOrWhitespace,
+ enumCase: isEnumCase,
+ error: isError,
+ evenInteger: isEvenInteger,
+ falsy: isFalsy,
+ float32Array: isFloat32Array,
+ float64Array: isFloat64Array,
+ formData: isFormData,
+ function: isFunction,
+ /** @deprecated Renamed to `function`. */
+ function_: isFunction,
+ generator: isGenerator,
+ generatorFunction: isGeneratorFunction,
+ htmlElement: isHtmlElement,
+ infinite: isInfinite,
+ inRange: isInRange,
+ int16Array: isInt16Array,
+ int32Array: isInt32Array,
+ int8Array: isInt8Array,
+ integer: isInteger,
+ iterable: isIterable,
+ map: isMap,
+ nan: isNan,
+ nativePromise: isNativePromise,
+ negativeNumber: isNegativeNumber,
+ nodeStream: isNodeStream,
+ nonEmptyArray: isNonEmptyArray,
+ nonEmptyMap: isNonEmptyMap,
+ nonEmptyObject: isNonEmptyObject,
+ nonEmptySet: isNonEmptySet,
+ nonEmptyString: isNonEmptyString,
+ nonEmptyStringAndNotWhitespace: isNonEmptyStringAndNotWhitespace,
+ null: isNull,
+ /** @deprecated Renamed to `null`. */
+ null_: isNull,
+ nullOrUndefined: isNullOrUndefined,
+ number: isNumber,
+ numericString: isNumericString,
+ object: isObject,
+ observable: isObservable,
+ oddInteger: isOddInteger,
+ plainObject: isPlainObject,
+ positiveNumber: isPositiveNumber,
+ primitive: isPrimitive,
+ promise: isPromise,
+ propertyKey: isPropertyKey,
+ regExp: isRegExp,
+ safeInteger: isSafeInteger,
+ set: isSet,
+ sharedArrayBuffer: isSharedArrayBuffer,
+ string: isString,
+ symbol: isSymbol,
+ truthy: isTruthy,
+ tupleLike: isTupleLike,
+ typedArray: isTypedArray,
+ uint16Array: isUint16Array,
+ uint32Array: isUint32Array,
+ uint8Array: isUint8Array,
+ uint8ClampedArray: isUint8ClampedArray,
+ undefined: isUndefined,
+ urlInstance: isUrlInstance,
+ urlSearchParams: isUrlSearchParams,
+ urlString: isUrlString,
+ validDate: isValidDate,
+ validLength: isValidLength,
+ weakMap: isWeakMap,
+ weakRef: isWeakRef,
+ weakSet: isWeakSet,
+ whitespaceString: isWhitespaceString,
+});
+function isAbsoluteMod2(remainder) {
+ return (value) => isInteger(value) && Math.abs(value % 2) === remainder;
+}
+function isAll(predicate, ...values) {
+ return predicateOnArray(Array.prototype.every, predicate, values);
+}
+function isAny(predicate, ...values) {
+ const predicates = isArray(predicate) ? predicate : [predicate];
+ return predicates.some(singlePredicate => predicateOnArray(Array.prototype.some, singlePredicate, values));
+}
+function isArray(value, assertion) {
+ if (!Array.isArray(value)) {
+ return false;
+ }
+ if (!isFunction(assertion)) {
+ return true;
+ }
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
+ return value.every(element => assertion(element));
+}
+function isArrayBuffer(value) {
+ return getObjectType(value) === 'ArrayBuffer';
+}
+function isArrayLike(value) {
+ return !isNullOrUndefined(value) && !isFunction(value) && isValidLength(value.length);
+}
+function isAsyncFunction(value) {
+ return getObjectType(value) === 'AsyncFunction';
+}
+function isAsyncGenerator(value) {
+ return isAsyncIterable(value) && isFunction(value.next) && isFunction(value.throw);
+}
+function isAsyncGeneratorFunction(value) {
+ return getObjectType(value) === 'AsyncGeneratorFunction';
+}
+function isAsyncIterable(value) {
+ return isFunction(value?.[Symbol.asyncIterator]);
+}
+function isBigint(value) {
+ return typeof value === 'bigint';
+}
+function isBigInt64Array(value) {
+ return getObjectType(value) === 'BigInt64Array';
+}
+function isBigUint64Array(value) {
+ return getObjectType(value) === 'BigUint64Array';
+}
+function isBlob(value) {
+ return getObjectType(value) === 'Blob';
+}
+function isBoolean(value) {
+ return value === true || value === false;
+}
+// eslint-disable-next-line @typescript-eslint/ban-types
+function isBoundFunction(value) {
+ return isFunction(value) && !Object.prototype.hasOwnProperty.call(value, 'prototype');
+}
+function isBuffer(value) {
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call
+ return value?.constructor?.isBuffer?.(value) ?? false;
+}
+function isClass(value) {
+ return isFunction(value) && value.toString().startsWith('class ');
+}
+function isDataView(value) {
+ return getObjectType(value) === 'DataView';
+}
+function isDate(value) {
+ return getObjectType(value) === 'Date';
+}
+function isDirectInstanceOf(instance, class_) {
+ if (instance === undefined || instance === null) {
+ return false;
+ }
+ return Object.getPrototypeOf(instance) === class_.prototype;
+}
+function isEmptyArray(value) {
+ return isArray(value) && value.length === 0;
+}
+function isEmptyMap(value) {
+ return isMap(value) && value.size === 0;
+}
+function isEmptyObject(value) {
+ return isObject(value) && !isMap(value) && !isSet(value) && Object.keys(value).length === 0;
+}
+function isEmptySet(value) {
+ return isSet(value) && value.size === 0;
+}
+function isEmptyString(value) {
+ return isString(value) && value.length === 0;
+}
+function isEmptyStringOrWhitespace(value) {
+ return isEmptyString(value) || isWhitespaceString(value);
+}
+function isEnumCase(value, targetEnum) {
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
+ return Object.values(targetEnum).includes(value);
+}
+function isError(value) {
+ return getObjectType(value) === 'Error';
+}
+function isEvenInteger(value) {
+ return isAbsoluteMod2(0)(value);
+}
+// Example: `is.falsy = (value: unknown): value is (not true | 0 | '' | undefined | null) => Boolean(value);`
+function isFalsy(value) {
+ return !value;
+}
+function isFloat32Array(value) {
+ return getObjectType(value) === 'Float32Array';
+}
+function isFloat64Array(value) {
+ return getObjectType(value) === 'Float64Array';
+}
+function isFormData(value) {
+ return getObjectType(value) === 'FormData';
+}
+// eslint-disable-next-line @typescript-eslint/ban-types
+function isFunction(value) {
+ return typeof value === 'function';
+}
+function isGenerator(value) {
+ return isIterable(value) && isFunction(value?.next) && isFunction(value?.throw);
+}
+function isGeneratorFunction(value) {
+ return getObjectType(value) === 'GeneratorFunction';
+}
+// eslint-disable-next-line @typescript-eslint/naming-convention
+const NODE_TYPE_ELEMENT = 1;
+// eslint-disable-next-line @typescript-eslint/naming-convention
+const DOM_PROPERTIES_TO_CHECK = [
+ 'innerHTML',
+ 'ownerDocument',
+ 'style',
+ 'attributes',
+ 'nodeValue',
+];
+function isHtmlElement(value) {
+ return isObject(value)
+ && value.nodeType === NODE_TYPE_ELEMENT
+ && isString(value.nodeName)
+ && !isPlainObject(value)
+ && DOM_PROPERTIES_TO_CHECK.every(property => property in value);
+}
+function isInfinite(value) {
+ return value === Number.POSITIVE_INFINITY || value === Number.NEGATIVE_INFINITY;
+}
+function isInRange(value, range) {
+ if (isNumber(range)) {
+ return value >= Math.min(0, range) && value <= Math.max(range, 0);
+ }
+ if (isArray(range) && range.length === 2) {
+ return value >= Math.min(...range) && value <= Math.max(...range);
+ }
+ throw new TypeError(`Invalid range: ${JSON.stringify(range)}`);
+}
+function isInt16Array(value) {
+ return getObjectType(value) === 'Int16Array';
+}
+function isInt32Array(value) {
+ return getObjectType(value) === 'Int32Array';
+}
+function isInt8Array(value) {
+ return getObjectType(value) === 'Int8Array';
+}
+function isInteger(value) {
+ return Number.isInteger(value);
+}
+function isIterable(value) {
+ return isFunction(value?.[Symbol.iterator]);
+}
+function isMap(value) {
+ return getObjectType(value) === 'Map';
+}
+function isNan(value) {
+ return Number.isNaN(value);
+}
+function isNativePromise(value) {
+ return getObjectType(value) === 'Promise';
+}
+function isNegativeNumber(value) {
+ return isNumber(value) && value < 0;
+}
+function isNodeStream(value) {
+ return isObject(value) && isFunction(value.pipe) && !isObservable(value);
+}
+function isNonEmptyArray(value) {
+ return isArray(value) && value.length > 0;
+}
+function isNonEmptyMap(value) {
+ return isMap(value) && value.size > 0;
+}
+// TODO: Use `not` operator here to remove `Map` and `Set` from type guard:
+// - https://github.com/Microsoft/TypeScript/pull/29317
+function isNonEmptyObject(value) {
+ return isObject(value) && !isMap(value) && !isSet(value) && Object.keys(value).length > 0;
+}
+function isNonEmptySet(value) {
+ return isSet(value) && value.size > 0;
+}
+// TODO: Use `not ''` when the `not` operator is available.
+function isNonEmptyString(value) {
+ return isString(value) && value.length > 0;
+}
+// TODO: Use `not ''` when the `not` operator is available.
+function isNonEmptyStringAndNotWhitespace(value) {
+ return isString(value) && !isEmptyStringOrWhitespace(value);
+}
+// eslint-disable-next-line @typescript-eslint/ban-types
+function isNull(value) {
+ return value === null;
+}
+// eslint-disable-next-line @typescript-eslint/ban-types
+function isNullOrUndefined(value) {
+ return isNull(value) || isUndefined(value);
+}
+function isNumber(value) {
+ return typeof value === 'number' && !Number.isNaN(value);
+}
+function isNumericString(value) {
+ return isString(value) && !isEmptyStringOrWhitespace(value) && !Number.isNaN(Number(value));
+}
+// eslint-disable-next-line @typescript-eslint/ban-types
+function isObject(value) {
+ return !isNull(value) && (typeof value === 'object' || isFunction(value));
+}
+function isObservable(value) {
+ if (!value) {
+ return false;
+ }
+ // eslint-disable-next-line no-use-extend-native/no-use-extend-native, @typescript-eslint/no-unsafe-call
+ if (value === value[Symbol.observable]?.()) {
+ return true;
+ }
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
+ if (value === value['@@observable']?.()) {
+ return true;
+ }
+ return false;
+}
+function isOddInteger(value) {
+ return isAbsoluteMod2(1)(value);
+}
+function isPlainObject(value) {
+ // From: https://github.com/sindresorhus/is-plain-obj/blob/main/index.js
+ if (typeof value !== 'object' || value === null) {
+ return false;
+ }
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
+ const prototype = Object.getPrototypeOf(value);
+ return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);
+}
+function isPositiveNumber(value) {
+ return isNumber(value) && value > 0;
+}
+function isPrimitive(value) {
+ return isNull(value) || isPrimitiveTypeName(typeof value);
+}
+function isPromise(value) {
+ return isNativePromise(value) || hasPromiseApi(value);
+}
+// `PropertyKey` is any value that can be used as an object key (string, number, or symbol)
+function isPropertyKey(value) {
+ return isAny([isString, isNumber, isSymbol], value);
+}
+function isRegExp(value) {
+ return getObjectType(value) === 'RegExp';
+}
+function isSafeInteger(value) {
+ return Number.isSafeInteger(value);
+}
+function isSet(value) {
+ return getObjectType(value) === 'Set';
+}
+function isSharedArrayBuffer(value) {
+ return getObjectType(value) === 'SharedArrayBuffer';
+}
+function isString(value) {
+ return typeof value === 'string';
+}
+function isSymbol(value) {
+ return typeof value === 'symbol';
+}
+// Example: `is.truthy = (value: unknown): value is (not false | not 0 | not '' | not undefined | not null) => Boolean(value);`
+// eslint-disable-next-line unicorn/prefer-native-coercion-functions
+function isTruthy(value) {
+ return Boolean(value);
+}
+function isTupleLike(value, guards) {
+ if (isArray(guards) && isArray(value) && guards.length === value.length) {
+ return guards.every((guard, index) => guard(value[index]));
+ }
+ return false;
+}
+function isTypedArray(value) {
+ return isTypedArrayName(getObjectType(value));
+}
+function isUint16Array(value) {
+ return getObjectType(value) === 'Uint16Array';
+}
+function isUint32Array(value) {
+ return getObjectType(value) === 'Uint32Array';
+}
+function isUint8Array(value) {
+ return getObjectType(value) === 'Uint8Array';
+}
+function isUint8ClampedArray(value) {
+ return getObjectType(value) === 'Uint8ClampedArray';
+}
+function isUndefined(value) {
+ return value === undefined;
+}
+function isUrlInstance(value) {
+ return getObjectType(value) === 'URL';
+}
+// eslint-disable-next-line unicorn/prevent-abbreviations
+function isUrlSearchParams(value) {
+ return getObjectType(value) === 'URLSearchParams';
+}
+function isUrlString(value) {
+ if (!isString(value)) {
+ return false;
+ }
+ try {
+ new URL(value); // eslint-disable-line no-new
+ return true;
+ }
+ catch {
+ return false;
+ }
+}
+function isValidDate(value) {
+ return isDate(value) && !isNan(Number(value));
+}
+function isValidLength(value) {
+ return isSafeInteger(value) && value >= 0;
+}
+// eslint-disable-next-line @typescript-eslint/ban-types
+function isWeakMap(value) {
+ return getObjectType(value) === 'WeakMap';
+}
+// eslint-disable-next-line @typescript-eslint/ban-types
+function isWeakRef(value) {
+ return getObjectType(value) === 'WeakRef';
+}
+// eslint-disable-next-line @typescript-eslint/ban-types
+function isWeakSet(value) {
+ return getObjectType(value) === 'WeakSet';
+}
+function isWhitespaceString(value) {
+ return isString(value) && /^\s+$/.test(value);
+}
+function predicateOnArray(method, predicate, values) {
+ if (!isFunction(predicate)) {
+ throw new TypeError(`Invalid predicate: ${JSON.stringify(predicate)}`);
+ }
+ if (values.length === 0) {
+ throw new TypeError('Invalid number of values');
+ }
+ return method.call(values, predicate);
+}
+function typeErrorMessage(description, value) {
+ return `Expected value which is \`${description}\`, received value of type \`${is(value)}\`.`;
+}
+function unique(values) {
+ // eslint-disable-next-line unicorn/prefer-spread
+ return Array.from(new Set(values));
+}
+const andFormatter = new Intl.ListFormat('en', { style: 'long', type: 'conjunction' });
+const orFormatter = new Intl.ListFormat('en', { style: 'long', type: 'disjunction' });
+function typeErrorMessageMultipleValues(expectedType, values) {
+ const uniqueExpectedTypes = unique((isArray(expectedType) ? expectedType : [expectedType]).map(value => `\`${value}\``));
+ const uniqueValueTypes = unique(values.map(value => `\`${is(value)}\``));
+ return `Expected values which are ${orFormatter.format(uniqueExpectedTypes)}. Received values of type${uniqueValueTypes.length > 1 ? 's' : ''} ${andFormatter.format(uniqueValueTypes)}.`;
+}
+const assert = {
+ all: assertAll,
+ any: assertAny,
+ array: assertArray,
+ arrayBuffer: assertArrayBuffer,
+ arrayLike: assertArrayLike,
+ asyncFunction: assertAsyncFunction,
+ asyncGenerator: assertAsyncGenerator,
+ asyncGeneratorFunction: assertAsyncGeneratorFunction,
+ asyncIterable: assertAsyncIterable,
+ bigint: assertBigint,
+ bigInt64Array: assertBigInt64Array,
+ bigUint64Array: assertBigUint64Array,
+ blob: assertBlob,
+ boolean: assertBoolean,
+ boundFunction: assertBoundFunction,
+ buffer: assertBuffer,
+ class: assertClass,
+ class_: assertClass,
+ dataView: assertDataView,
+ date: assertDate,
+ directInstanceOf: assertDirectInstanceOf,
+ domElement: assertHtmlElement,
+ emptyArray: assertEmptyArray,
+ emptyMap: assertEmptyMap,
+ emptyObject: assertEmptyObject,
+ emptySet: assertEmptySet,
+ emptyString: assertEmptyString,
+ emptyStringOrWhitespace: assertEmptyStringOrWhitespace,
+ enumCase: assertEnumCase,
+ error: assertError,
+ evenInteger: assertEvenInteger,
+ falsy: assertFalsy,
+ float32Array: assertFloat32Array,
+ float64Array: assertFloat64Array,
+ formData: assertFormData,
+ function: assertFunction,
+ function_: assertFunction,
+ generator: assertGenerator,
+ generatorFunction: assertGeneratorFunction,
+ htmlElement: assertHtmlElement,
+ infinite: assertInfinite,
+ inRange: assertInRange,
+ int16Array: assertInt16Array,
+ int32Array: assertInt32Array,
+ int8Array: assertInt8Array,
+ integer: assertInteger,
+ iterable: assertIterable,
+ map: assertMap,
+ nan: assertNan,
+ nativePromise: assertNativePromise,
+ negativeNumber: assertNegativeNumber,
+ nodeStream: assertNodeStream,
+ nonEmptyArray: assertNonEmptyArray,
+ nonEmptyMap: assertNonEmptyMap,
+ nonEmptyObject: assertNonEmptyObject,
+ nonEmptySet: assertNonEmptySet,
+ nonEmptyString: assertNonEmptyString,
+ nonEmptyStringAndNotWhitespace: assertNonEmptyStringAndNotWhitespace,
+ null: assertNull,
+ null_: assertNull,
+ nullOrUndefined: assertNullOrUndefined,
+ number: assertNumber,
+ numericString: assertNumericString,
+ object: assertObject,
+ observable: assertObservable,
+ oddInteger: assertOddInteger,
+ plainObject: assertPlainObject,
+ positiveNumber: assertPositiveNumber,
+ primitive: assertPrimitive,
+ promise: assertPromise,
+ propertyKey: assertPropertyKey,
+ regExp: assertRegExp,
+ safeInteger: assertSafeInteger,
+ set: assertSet,
+ sharedArrayBuffer: assertSharedArrayBuffer,
+ string: assertString,
+ symbol: assertSymbol,
+ truthy: assertTruthy,
+ tupleLike: assertTupleLike,
+ typedArray: assertTypedArray,
+ uint16Array: assertUint16Array,
+ uint32Array: assertUint32Array,
+ uint8Array: assertUint8Array,
+ uint8ClampedArray: assertUint8ClampedArray,
+ undefined: assertUndefined,
+ urlInstance: assertUrlInstance,
+ urlSearchParams: assertUrlSearchParams,
+ urlString: assertUrlString,
+ validDate: assertValidDate,
+ validLength: assertValidLength,
+ weakMap: assertWeakMap,
+ weakRef: assertWeakRef,
+ weakSet: assertWeakSet,
+ whitespaceString: assertWhitespaceString,
+};
+const methodTypeMap = {
+ isArray: 'Array',
+ isArrayBuffer: 'ArrayBuffer',
+ isArrayLike: 'array-like',
+ isAsyncFunction: 'AsyncFunction',
+ isAsyncGenerator: 'AsyncGenerator',
+ isAsyncGeneratorFunction: 'AsyncGeneratorFunction',
+ isAsyncIterable: 'AsyncIterable',
+ isBigint: 'bigint',
+ isBigInt64Array: 'BigInt64Array',
+ isBigUint64Array: 'BigUint64Array',
+ isBlob: 'Blob',
+ isBoolean: 'boolean',
+ isBoundFunction: 'Function',
+ isBuffer: 'Buffer',
+ isClass: 'Class',
+ isDataView: 'DataView',
+ isDate: 'Date',
+ isDirectInstanceOf: 'T',
+ /** @deprecated */
+ isDomElement: 'HTMLElement',
+ isEmptyArray: 'empty array',
+ isEmptyMap: 'empty map',
+ isEmptyObject: 'empty object',
+ isEmptySet: 'empty set',
+ isEmptyString: 'empty string',
+ isEmptyStringOrWhitespace: 'empty string or whitespace',
+ isEnumCase: 'EnumCase',
+ isError: 'Error',
+ isEvenInteger: 'even integer',
+ isFalsy: 'falsy',
+ isFloat32Array: 'Float32Array',
+ isFloat64Array: 'Float64Array',
+ isFormData: 'FormData',
+ isFunction: 'Function',
+ isGenerator: 'Generator',
+ isGeneratorFunction: 'GeneratorFunction',
+ isHtmlElement: 'HTMLElement',
+ isInfinite: 'infinite number',
+ isInRange: 'in range',
+ isInt16Array: 'Int16Array',
+ isInt32Array: 'Int32Array',
+ isInt8Array: 'Int8Array',
+ isInteger: 'integer',
+ isIterable: 'Iterable',
+ isMap: 'Map',
+ isNan: 'NaN',
+ isNativePromise: 'native Promise',
+ isNegativeNumber: 'negative number',
+ isNodeStream: 'Node.js Stream',
+ isNonEmptyArray: 'non-empty array',
+ isNonEmptyMap: 'non-empty map',
+ isNonEmptyObject: 'non-empty object',
+ isNonEmptySet: 'non-empty set',
+ isNonEmptyString: 'non-empty string',
+ isNonEmptyStringAndNotWhitespace: 'non-empty string and not whitespace',
+ isNull: 'null',
+ isNullOrUndefined: 'null or undefined',
+ isNumber: 'number',
+ isNumericString: 'string with a number',
+ isObject: 'Object',
+ isObservable: 'Observable',
+ isOddInteger: 'odd integer',
+ isPlainObject: 'plain object',
+ isPositiveNumber: 'positive number',
+ isPrimitive: 'primitive',
+ isPromise: 'Promise',
+ isPropertyKey: 'PropertyKey',
+ isRegExp: 'RegExp',
+ isSafeInteger: 'integer',
+ isSet: 'Set',
+ isSharedArrayBuffer: 'SharedArrayBuffer',
+ isString: 'string',
+ isSymbol: 'symbol',
+ isTruthy: 'truthy',
+ isTupleLike: 'tuple-like',
+ isTypedArray: 'TypedArray',
+ isUint16Array: 'Uint16Array',
+ isUint32Array: 'Uint32Array',
+ isUint8Array: 'Uint8Array',
+ isUint8ClampedArray: 'Uint8ClampedArray',
+ isUndefined: 'undefined',
+ isUrlInstance: 'URL',
+ isUrlSearchParams: 'URLSearchParams',
+ isUrlString: 'string with a URL',
+ isValidDate: 'valid Date',
+ isValidLength: 'valid length',
+ isWeakMap: 'WeakMap',
+ isWeakRef: 'WeakRef',
+ isWeakSet: 'WeakSet',
+ isWhitespaceString: 'whitespace string',
+};
+function keysOf(value) {
+ return Object.keys(value);
+}
+const isMethodNames = keysOf(methodTypeMap);
+function isIsMethodName(value) {
+ return isMethodNames.includes(value);
+}
+function assertAll(predicate, ...values) {
+ if (!isAll(predicate, ...values)) {
+ const expectedType = isIsMethodName(predicate.name) ? methodTypeMap[predicate.name] : 'predicate returns truthy for all values';
+ throw new TypeError(typeErrorMessageMultipleValues(expectedType, values));
+ }
+}
+function assertAny(predicate, ...values) {
+ if (!isAny(predicate, ...values)) {
+ const predicates = isArray(predicate) ? predicate : [predicate];
+ const expectedTypes = predicates.map(predicate => isIsMethodName(predicate.name) ? methodTypeMap[predicate.name] : 'predicate returns truthy for any value');
+ throw new TypeError(typeErrorMessageMultipleValues(expectedTypes, values));
+ }
+}
+function assertArray(value, assertion) {
+ if (!isArray(value)) {
+ throw new TypeError(typeErrorMessage('Array', value));
+ }
+ if (assertion) {
+ // eslint-disable-next-line unicorn/no-array-for-each, unicorn/no-array-callback-reference
+ value.forEach(assertion);
+ }
+}
+function assertArrayBuffer(value) {
+ if (!isArrayBuffer(value)) {
+ throw new TypeError(typeErrorMessage('ArrayBuffer', value));
+ }
+}
+function assertArrayLike(value) {
+ if (!isArrayLike(value)) {
+ throw new TypeError(typeErrorMessage('array-like', value));
+ }
+}
+// eslint-disable-next-line @typescript-eslint/ban-types
+function assertAsyncFunction(value) {
+ if (!isAsyncFunction(value)) {
+ throw new TypeError(typeErrorMessage('AsyncFunction', value));
+ }
+}
+function assertAsyncGenerator(value) {
+ if (!isAsyncGenerator(value)) {
+ throw new TypeError(typeErrorMessage('AsyncGenerator', value));
+ }
+}
+function assertAsyncGeneratorFunction(value) {
+ if (!isAsyncGeneratorFunction(value)) {
+ throw new TypeError(typeErrorMessage('AsyncGeneratorFunction', value));
+ }
+}
+function assertAsyncIterable(value) {
+ if (!isAsyncIterable(value)) {
+ throw new TypeError(typeErrorMessage('AsyncIterable', value));
+ }
+}
+function assertBigint(value) {
+ if (!isBigint(value)) {
+ throw new TypeError(typeErrorMessage('bigint', value));
+ }
+}
+function assertBigInt64Array(value) {
+ if (!isBigInt64Array(value)) {
+ throw new TypeError(typeErrorMessage('BigInt64Array', value));
+ }
+}
+function assertBigUint64Array(value) {
+ if (!isBigUint64Array(value)) {
+ throw new TypeError(typeErrorMessage('BigUint64Array', value));
+ }
+}
+function assertBlob(value) {
+ if (!isBlob(value)) {
+ throw new TypeError(typeErrorMessage('Blob', value));
+ }
+}
+function assertBoolean(value) {
+ if (!isBoolean(value)) {
+ throw new TypeError(typeErrorMessage('boolean', value));
+ }
+}
+// eslint-disable-next-line @typescript-eslint/ban-types
+function assertBoundFunction(value) {
+ if (!isBoundFunction(value)) {
+ throw new TypeError(typeErrorMessage('Function', value));
+ }
+}
+function assertBuffer(value) {
+ if (!isBuffer(value)) {
+ throw new TypeError(typeErrorMessage('Buffer', value));
+ }
+}
+function assertClass(value) {
+ if (!isClass(value)) {
+ throw new TypeError(typeErrorMessage('Class', value));
+ }
+}
+function assertDataView(value) {
+ if (!isDataView(value)) {
+ throw new TypeError(typeErrorMessage('DataView', value));
+ }
+}
+function assertDate(value) {
+ if (!isDate(value)) {
+ throw new TypeError(typeErrorMessage('Date', value));
+ }
+}
+function assertDirectInstanceOf(instance, class_) {
+ if (!isDirectInstanceOf(instance, class_)) {
+ throw new TypeError(typeErrorMessage('T', instance));
+ }
+}
+function assertEmptyArray(value) {
+ if (!isEmptyArray(value)) {
+ throw new TypeError(typeErrorMessage('empty array', value));
+ }
+}
+function assertEmptyMap(value) {
+ if (!isEmptyMap(value)) {
+ throw new TypeError(typeErrorMessage('empty map', value));
+ }
+}
+function assertEmptyObject(value) {
+ if (!isEmptyObject(value)) {
+ throw new TypeError(typeErrorMessage('empty object', value));
+ }
+}
+function assertEmptySet(value) {
+ if (!isEmptySet(value)) {
+ throw new TypeError(typeErrorMessage('empty set', value));
+ }
+}
+function assertEmptyString(value) {
+ if (!isEmptyString(value)) {
+ throw new TypeError(typeErrorMessage('empty string', value));
+ }
+}
+function assertEmptyStringOrWhitespace(value) {
+ if (!isEmptyStringOrWhitespace(value)) {
+ throw new TypeError(typeErrorMessage('empty string or whitespace', value));
+ }
+}
+function assertEnumCase(value, targetEnum) {
+ if (!isEnumCase(value, targetEnum)) {
+ throw new TypeError(typeErrorMessage('EnumCase', value));
+ }
+}
+function assertError(value) {
+ if (!isError(value)) {
+ throw new TypeError(typeErrorMessage('Error', value));
+ }
+}
+function assertEvenInteger(value) {
+ if (!isEvenInteger(value)) {
+ throw new TypeError(typeErrorMessage('even integer', value));
+ }
+}
+function assertFalsy(value) {
+ if (!isFalsy(value)) {
+ throw new TypeError(typeErrorMessage('falsy', value));
+ }
+}
+function assertFloat32Array(value) {
+ if (!isFloat32Array(value)) {
+ throw new TypeError(typeErrorMessage('Float32Array', value));
+ }
+}
+function assertFloat64Array(value) {
+ if (!isFloat64Array(value)) {
+ throw new TypeError(typeErrorMessage('Float64Array', value));
+ }
+}
+function assertFormData(value) {
+ if (!isFormData(value)) {
+ throw new TypeError(typeErrorMessage('FormData', value));
+ }
+}
+// eslint-disable-next-line @typescript-eslint/ban-types
+function assertFunction(value) {
+ if (!isFunction(value)) {
+ throw new TypeError(typeErrorMessage('Function', value));
+ }
+}
+function assertGenerator(value) {
+ if (!isGenerator(value)) {
+ throw new TypeError(typeErrorMessage('Generator', value));
+ }
+}
+function assertGeneratorFunction(value) {
+ if (!isGeneratorFunction(value)) {
+ throw new TypeError(typeErrorMessage('GeneratorFunction', value));
+ }
+}
+function assertHtmlElement(value) {
+ if (!isHtmlElement(value)) {
+ throw new TypeError(typeErrorMessage('HTMLElement', value));
+ }
+}
+function assertInfinite(value) {
+ if (!isInfinite(value)) {
+ throw new TypeError(typeErrorMessage('infinite number', value));
+ }
+}
+function assertInRange(value, range) {
+ if (!isInRange(value, range)) {
+ throw new TypeError(typeErrorMessage('in range', value));
+ }
+}
+function assertInt16Array(value) {
+ if (!isInt16Array(value)) {
+ throw new TypeError(typeErrorMessage('Int16Array', value));
+ }
+}
+function assertInt32Array(value) {
+ if (!isInt32Array(value)) {
+ throw new TypeError(typeErrorMessage('Int32Array', value));
+ }
+}
+function assertInt8Array(value) {
+ if (!isInt8Array(value)) {
+ throw new TypeError(typeErrorMessage('Int8Array', value));
+ }
+}
+function assertInteger(value) {
+ if (!isInteger(value)) {
+ throw new TypeError(typeErrorMessage('integer', value));
+ }
+}
+function assertIterable(value) {
+ if (!isIterable(value)) {
+ throw new TypeError(typeErrorMessage('Iterable', value));
+ }
+}
+function assertMap(value) {
+ if (!isMap(value)) {
+ throw new TypeError(typeErrorMessage('Map', value));
+ }
+}
+function assertNan(value) {
+ if (!isNan(value)) {
+ throw new TypeError(typeErrorMessage('NaN', value));
+ }
+}
+function assertNativePromise(value) {
+ if (!isNativePromise(value)) {
+ throw new TypeError(typeErrorMessage('native Promise', value));
+ }
+}
+function assertNegativeNumber(value) {
+ if (!isNegativeNumber(value)) {
+ throw new TypeError(typeErrorMessage('negative number', value));
+ }
+}
+function assertNodeStream(value) {
+ if (!isNodeStream(value)) {
+ throw new TypeError(typeErrorMessage('Node.js Stream', value));
+ }
+}
+function assertNonEmptyArray(value) {
+ if (!isNonEmptyArray(value)) {
+ throw new TypeError(typeErrorMessage('non-empty array', value));
+ }
+}
+function assertNonEmptyMap(value) {
+ if (!isNonEmptyMap(value)) {
+ throw new TypeError(typeErrorMessage('non-empty map', value));
+ }
+}
+function assertNonEmptyObject(value) {
+ if (!isNonEmptyObject(value)) {
+ throw new TypeError(typeErrorMessage('non-empty object', value));
+ }
+}
+function assertNonEmptySet(value) {
+ if (!isNonEmptySet(value)) {
+ throw new TypeError(typeErrorMessage('non-empty set', value));
+ }
+}
+function assertNonEmptyString(value) {
+ if (!isNonEmptyString(value)) {
+ throw new TypeError(typeErrorMessage('non-empty string', value));
+ }
+}
+function assertNonEmptyStringAndNotWhitespace(value) {
+ if (!isNonEmptyStringAndNotWhitespace(value)) {
+ throw new TypeError(typeErrorMessage('non-empty string and not whitespace', value));
+ }
+}
+// eslint-disable-next-line @typescript-eslint/ban-types
+function assertNull(value) {
+ if (!isNull(value)) {
+ throw new TypeError(typeErrorMessage('null', value));
+ }
+}
+// eslint-disable-next-line @typescript-eslint/ban-types
+function assertNullOrUndefined(value) {
+ if (!isNullOrUndefined(value)) {
+ throw new TypeError(typeErrorMessage('null or undefined', value));
+ }
+}
+function assertNumber(value) {
+ if (!isNumber(value)) {
+ throw new TypeError(typeErrorMessage('number', value));
+ }
+}
+function assertNumericString(value) {
+ if (!isNumericString(value)) {
+ throw new TypeError(typeErrorMessage('string with a number', value));
+ }
+}
+// eslint-disable-next-line @typescript-eslint/ban-types
+function assertObject(value) {
+ if (!isObject(value)) {
+ throw new TypeError(typeErrorMessage('Object', value));
+ }
+}
+function assertObservable(value) {
+ if (!isObservable(value)) {
+ throw new TypeError(typeErrorMessage('Observable', value));
+ }
+}
+function assertOddInteger(value) {
+ if (!isOddInteger(value)) {
+ throw new TypeError(typeErrorMessage('odd integer', value));
+ }
+}
+function assertPlainObject(value) {
+ if (!isPlainObject(value)) {
+ throw new TypeError(typeErrorMessage('plain object', value));
+ }
+}
+function assertPositiveNumber(value) {
+ if (!isPositiveNumber(value)) {
+ throw new TypeError(typeErrorMessage('positive number', value));
+ }
+}
+function assertPrimitive(value) {
+ if (!isPrimitive(value)) {
+ throw new TypeError(typeErrorMessage('primitive', value));
+ }
+}
+function assertPromise(value) {
+ if (!isPromise(value)) {
+ throw new TypeError(typeErrorMessage('Promise', value));
+ }
+}
+function assertPropertyKey(value) {
+ if (!isPropertyKey(value)) {
+ throw new TypeError(typeErrorMessage('PropertyKey', value));
+ }
+}
+function assertRegExp(value) {
+ if (!isRegExp(value)) {
+ throw new TypeError(typeErrorMessage('RegExp', value));
+ }
+}
+function assertSafeInteger(value) {
+ if (!isSafeInteger(value)) {
+ throw new TypeError(typeErrorMessage('integer', value));
+ }
+}
+function assertSet(value) {
+ if (!isSet(value)) {
+ throw new TypeError(typeErrorMessage('Set', value));
+ }
+}
+function assertSharedArrayBuffer(value) {
+ if (!isSharedArrayBuffer(value)) {
+ throw new TypeError(typeErrorMessage('SharedArrayBuffer', value));
+ }
+}
+function assertString(value) {
+ if (!isString(value)) {
+ throw new TypeError(typeErrorMessage('string', value));
+ }
+}
+function assertSymbol(value) {
+ if (!isSymbol(value)) {
+ throw new TypeError(typeErrorMessage('symbol', value));
+ }
+}
+function assertTruthy(value) {
+ if (!isTruthy(value)) {
+ throw new TypeError(typeErrorMessage('truthy', value));
+ }
+}
+function assertTupleLike(value, guards) {
+ if (!isTupleLike(value, guards)) {
+ throw new TypeError(typeErrorMessage('tuple-like', value));
+ }
+}
+function assertTypedArray(value) {
+ if (!isTypedArray(value)) {
+ throw new TypeError(typeErrorMessage('TypedArray', value));
+ }
+}
+function assertUint16Array(value) {
+ if (!isUint16Array(value)) {
+ throw new TypeError(typeErrorMessage('Uint16Array', value));
+ }
+}
+function assertUint32Array(value) {
+ if (!isUint32Array(value)) {
+ throw new TypeError(typeErrorMessage('Uint32Array', value));
+ }
+}
+function assertUint8Array(value) {
+ if (!isUint8Array(value)) {
+ throw new TypeError(typeErrorMessage('Uint8Array', value));
+ }
+}
+function assertUint8ClampedArray(value) {
+ if (!isUint8ClampedArray(value)) {
+ throw new TypeError(typeErrorMessage('Uint8ClampedArray', value));
+ }
+}
+function assertUndefined(value) {
+ if (!isUndefined(value)) {
+ throw new TypeError(typeErrorMessage('undefined', value));
+ }
+}
+function assertUrlInstance(value) {
+ if (!isUrlInstance(value)) {
+ throw new TypeError(typeErrorMessage('URL', value));
+ }
+}
+// eslint-disable-next-line unicorn/prevent-abbreviations
+function assertUrlSearchParams(value) {
+ if (!isUrlSearchParams(value)) {
+ throw new TypeError(typeErrorMessage('URLSearchParams', value));
+ }
+}
+function assertUrlString(value) {
+ if (!isUrlString(value)) {
+ throw new TypeError(typeErrorMessage('string with a URL', value));
+ }
+}
+function assertValidDate(value) {
+ if (!isValidDate(value)) {
+ throw new TypeError(typeErrorMessage('valid Date', value));
+ }
+}
+function assertValidLength(value) {
+ if (!isValidLength(value)) {
+ throw new TypeError(typeErrorMessage('valid length', value));
+ }
+}
+// eslint-disable-next-line @typescript-eslint/ban-types
+function assertWeakMap(value) {
+ if (!isWeakMap(value)) {
+ throw new TypeError(typeErrorMessage('WeakMap', value));
+ }
+}
+// eslint-disable-next-line @typescript-eslint/ban-types
+function assertWeakRef(value) {
+ if (!isWeakRef(value)) {
+ throw new TypeError(typeErrorMessage('WeakRef', value));
+ }
+}
+// eslint-disable-next-line @typescript-eslint/ban-types
+function assertWeakSet(value) {
+ if (!isWeakSet(value)) {
+ throw new TypeError(typeErrorMessage('WeakSet', value));
+ }
+}
+function assertWhitespaceString(value) {
+ if (!isWhitespaceString(value)) {
+ throw new TypeError(typeErrorMessage('whitespace string', value));
+ }
+}
+/* harmony default export */ const dist = (is);
+
+;// CONCATENATED MODULE: external "node:events"
+const external_node_events_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:events");
+;// CONCATENATED MODULE: ./node_modules/p-cancelable/index.js
+class CancelError extends Error {
+ constructor(reason) {
+ super(reason || 'Promise was canceled');
+ this.name = 'CancelError';
+ }
+
+ get isCanceled() {
+ return true;
+ }
+}
+
+const promiseState = Object.freeze({
+ pending: Symbol('pending'),
+ canceled: Symbol('canceled'),
+ resolved: Symbol('resolved'),
+ rejected: Symbol('rejected'),
+});
+
+class PCancelable {
+ static fn(userFunction) {
+ return (...arguments_) => new PCancelable((resolve, reject, onCancel) => {
+ arguments_.push(onCancel);
+ userFunction(...arguments_).then(resolve, reject);
+ });
+ }
+
+ #cancelHandlers = [];
+ #rejectOnCancel = true;
+ #state = promiseState.pending;
+ #promise;
+ #reject;
+
+ constructor(executor) {
+ this.#promise = new Promise((resolve, reject) => {
+ this.#reject = reject;
+
+ const onResolve = value => {
+ if (this.#state !== promiseState.canceled || !onCancel.shouldReject) {
+ resolve(value);
+ this.#setState(promiseState.resolved);
+ }
+ };
+
+ const onReject = error => {
+ if (this.#state !== promiseState.canceled || !onCancel.shouldReject) {
+ reject(error);
+ this.#setState(promiseState.rejected);
+ }
+ };
+
+ const onCancel = handler => {
+ if (this.#state !== promiseState.pending) {
+ throw new Error(`The \`onCancel\` handler was attached after the promise ${this.#state.description}.`);
+ }
+
+ this.#cancelHandlers.push(handler);
+ };
+
+ Object.defineProperties(onCancel, {
+ shouldReject: {
+ get: () => this.#rejectOnCancel,
+ set: boolean => {
+ this.#rejectOnCancel = boolean;
+ },
+ },
+ });
+
+ executor(onResolve, onReject, onCancel);
+ });
+ }
+
+ // eslint-disable-next-line unicorn/no-thenable
+ then(onFulfilled, onRejected) {
+ return this.#promise.then(onFulfilled, onRejected);
+ }
+
+ catch(onRejected) {
+ return this.#promise.catch(onRejected);
+ }
+
+ finally(onFinally) {
+ return this.#promise.finally(onFinally);
+ }
+
+ cancel(reason) {
+ if (this.#state !== promiseState.pending) {
+ return;
+ }
+
+ this.#setState(promiseState.canceled);
+
+ if (this.#cancelHandlers.length > 0) {
+ try {
+ for (const handler of this.#cancelHandlers) {
+ handler();
+ }
+ } catch (error) {
+ this.#reject(error);
+ return;
+ }
+ }
+
+ if (this.#rejectOnCancel) {
+ this.#reject(new CancelError(reason));
+ }
+ }
+
+ get isCanceled() {
+ return this.#state === promiseState.canceled;
+ }
+
+ #setState(state) {
+ if (this.#state === promiseState.pending) {
+ this.#state = state;
+ }
+ }
+}
+
+Object.setPrototypeOf(PCancelable.prototype, Promise.prototype);
+
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/errors.js
+
+// A hacky check to prevent circular references.
+function isRequest(x) {
+ return dist.object(x) && '_onResponse' in x;
+}
+/**
+An error to be thrown when a request fails.
+Contains a `code` property with error class code, like `ECONNREFUSED`.
+*/
+class RequestError extends Error {
+ input;
+ code;
+ stack;
+ response;
+ request;
+ timings;
+ constructor(message, error, self) {
+ super(message, { cause: error });
+ Error.captureStackTrace(this, this.constructor);
+ this.name = 'RequestError';
+ this.code = error.code ?? 'ERR_GOT_REQUEST_ERROR';
+ this.input = error.input;
+ if (isRequest(self)) {
+ Object.defineProperty(this, 'request', {
+ enumerable: false,
+ value: self,
+ });
+ Object.defineProperty(this, 'response', {
+ enumerable: false,
+ value: self.response,
+ });
+ this.options = self.options;
+ }
+ else {
+ this.options = self;
+ }
+ this.timings = this.request?.timings;
+ // Recover the original stacktrace
+ if (dist.string(error.stack) && dist.string(this.stack)) {
+ const indexOfMessage = this.stack.indexOf(this.message) + this.message.length;
+ const thisStackTrace = this.stack.slice(indexOfMessage).split('\n').reverse();
+ const errorStackTrace = error.stack.slice(error.stack.indexOf(error.message) + error.message.length).split('\n').reverse();
+ // Remove duplicated traces
+ while (errorStackTrace.length > 0 && errorStackTrace[0] === thisStackTrace[0]) {
+ thisStackTrace.shift();
+ }
+ this.stack = `${this.stack.slice(0, indexOfMessage)}${thisStackTrace.reverse().join('\n')}${errorStackTrace.reverse().join('\n')}`;
+ }
+ }
+}
+/**
+An error to be thrown when the server redirects you more than ten times.
+Includes a `response` property.
+*/
+class MaxRedirectsError extends RequestError {
+ constructor(request) {
+ super(`Redirected ${request.options.maxRedirects} times. Aborting.`, {}, request);
+ this.name = 'MaxRedirectsError';
+ this.code = 'ERR_TOO_MANY_REDIRECTS';
+ }
+}
+/**
+An error to be thrown when the server response code is not 2xx nor 3xx if `options.followRedirect` is `true`, but always except for 304.
+Includes a `response` property.
+*/
+// TODO: Change `HTTPError` to `HTTPError` in the next major version to enforce type usage.
+// eslint-disable-next-line @typescript-eslint/naming-convention
+class HTTPError extends RequestError {
+ constructor(response) {
+ super(`Response code ${response.statusCode} (${response.statusMessage})`, {}, response.request);
+ this.name = 'HTTPError';
+ this.code = 'ERR_NON_2XX_3XX_RESPONSE';
+ }
+}
+/**
+An error to be thrown when a cache method fails.
+For example, if the database goes down or there's a filesystem error.
+*/
+class CacheError extends RequestError {
+ constructor(error, request) {
+ super(error.message, error, request);
+ this.name = 'CacheError';
+ this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_CACHE_ACCESS' : this.code;
+ }
+}
+/**
+An error to be thrown when the request body is a stream and an error occurs while reading from that stream.
+*/
+class UploadError extends RequestError {
+ constructor(error, request) {
+ super(error.message, error, request);
+ this.name = 'UploadError';
+ this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_UPLOAD' : this.code;
+ }
+}
+/**
+An error to be thrown when the request is aborted due to a timeout.
+Includes an `event` and `timings` property.
+*/
+class TimeoutError extends RequestError {
+ timings;
+ event;
+ constructor(error, timings, request) {
+ super(error.message, error, request);
+ this.name = 'TimeoutError';
+ this.event = error.event;
+ this.timings = timings;
+ }
+}
+/**
+An error to be thrown when reading from response stream fails.
+*/
+class ReadError extends RequestError {
+ constructor(error, request) {
+ super(error.message, error, request);
+ this.name = 'ReadError';
+ this.code = this.code === 'ERR_GOT_REQUEST_ERROR' ? 'ERR_READING_RESPONSE_STREAM' : this.code;
+ }
+}
+/**
+An error which always triggers a new retry when thrown.
+*/
+class RetryError extends RequestError {
+ constructor(request) {
+ super('Retrying', {}, request);
+ this.name = 'RetryError';
+ this.code = 'ERR_RETRYING';
+ }
+}
+/**
+An error to be thrown when the request is aborted by AbortController.
+*/
+class AbortError extends RequestError {
+ constructor(request) {
+ super('This operation was aborted.', {}, request);
+ this.code = 'ERR_ABORTED';
+ this.name = 'AbortError';
+ }
+}
+
+;// CONCATENATED MODULE: external "node:process"
+const external_node_process_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:process");
+;// CONCATENATED MODULE: external "node:buffer"
+const external_node_buffer_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:buffer");
+;// CONCATENATED MODULE: external "node:stream"
+const external_node_stream_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:stream");
+;// CONCATENATED MODULE: external "node:http"
+const external_node_http_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:http");
+// EXTERNAL MODULE: external "events"
+var external_events_ = __nccwpck_require__(2361);
+// EXTERNAL MODULE: external "util"
+var external_util_ = __nccwpck_require__(3837);
+// EXTERNAL MODULE: ./node_modules/defer-to-connect/dist/source/index.js
+var source = __nccwpck_require__(6214);
+;// CONCATENATED MODULE: ./node_modules/@szmarczak/http-timer/dist/source/index.js
+
+
+
+const timer = (request) => {
+ if (request.timings) {
+ return request.timings;
+ }
+ const timings = {
+ start: Date.now(),
+ socket: undefined,
+ lookup: undefined,
+ connect: undefined,
+ secureConnect: undefined,
+ upload: undefined,
+ response: undefined,
+ end: undefined,
+ error: undefined,
+ abort: undefined,
+ phases: {
+ wait: undefined,
+ dns: undefined,
+ tcp: undefined,
+ tls: undefined,
+ request: undefined,
+ firstByte: undefined,
+ download: undefined,
+ total: undefined,
+ },
+ };
+ request.timings = timings;
+ const handleError = (origin) => {
+ origin.once(external_events_.errorMonitor, () => {
+ timings.error = Date.now();
+ timings.phases.total = timings.error - timings.start;
+ });
+ };
+ handleError(request);
+ const onAbort = () => {
+ timings.abort = Date.now();
+ timings.phases.total = timings.abort - timings.start;
+ };
+ request.prependOnceListener('abort', onAbort);
+ const onSocket = (socket) => {
+ timings.socket = Date.now();
+ timings.phases.wait = timings.socket - timings.start;
+ if (external_util_.types.isProxy(socket)) {
+ return;
+ }
+ const lookupListener = () => {
+ timings.lookup = Date.now();
+ timings.phases.dns = timings.lookup - timings.socket;
+ };
+ socket.prependOnceListener('lookup', lookupListener);
+ source(socket, {
+ connect: () => {
+ timings.connect = Date.now();
+ if (timings.lookup === undefined) {
+ socket.removeListener('lookup', lookupListener);
+ timings.lookup = timings.connect;
+ timings.phases.dns = timings.lookup - timings.socket;
+ }
+ timings.phases.tcp = timings.connect - timings.lookup;
+ },
+ secureConnect: () => {
+ timings.secureConnect = Date.now();
+ timings.phases.tls = timings.secureConnect - timings.connect;
+ },
+ });
+ };
+ if (request.socket) {
+ onSocket(request.socket);
+ }
+ else {
+ request.prependOnceListener('socket', onSocket);
+ }
+ const onUpload = () => {
+ timings.upload = Date.now();
+ timings.phases.request = timings.upload - (timings.secureConnect ?? timings.connect);
+ };
+ if (request.writableFinished) {
+ onUpload();
+ }
+ else {
+ request.prependOnceListener('finish', onUpload);
+ }
+ request.prependOnceListener('response', (response) => {
+ timings.response = Date.now();
+ timings.phases.firstByte = timings.response - timings.upload;
+ response.timings = timings;
+ handleError(response);
+ response.prependOnceListener('end', () => {
+ request.off('abort', onAbort);
+ response.off('aborted', onAbort);
+ if (timings.phases.total) {
+ // Aborted or errored
+ return;
+ }
+ timings.end = Date.now();
+ timings.phases.download = timings.end - timings.response;
+ timings.phases.total = timings.end - timings.start;
+ });
+ response.prependOnceListener('aborted', onAbort);
+ });
+ return timings;
+};
+/* harmony default export */ const dist_source = (timer);
+
+;// CONCATENATED MODULE: external "node:url"
+const external_node_url_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:url");
+;// CONCATENATED MODULE: external "node:crypto"
+const external_node_crypto_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:crypto");
+;// CONCATENATED MODULE: ./node_modules/normalize-url/index.js
+// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
+const DATA_URL_DEFAULT_MIME_TYPE = 'text/plain';
+const DATA_URL_DEFAULT_CHARSET = 'us-ascii';
+
+const testParameter = (name, filters) => filters.some(filter => filter instanceof RegExp ? filter.test(name) : filter === name);
+
+const supportedProtocols = new Set([
+ 'https:',
+ 'http:',
+ 'file:',
+]);
+
+const hasCustomProtocol = urlString => {
+ try {
+ const {protocol} = new URL(urlString);
+
+ return protocol.endsWith(':')
+ && !protocol.includes('.')
+ && !supportedProtocols.has(protocol);
+ } catch {
+ return false;
+ }
+};
+
+const normalizeDataURL = (urlString, {stripHash}) => {
+ const match = /^data:(?[^,]*?),(?[^#]*?)(?:#(?.*))?$/.exec(urlString);
+
+ if (!match) {
+ throw new Error(`Invalid URL: ${urlString}`);
+ }
+
+ let {type, data, hash} = match.groups;
+ const mediaType = type.split(';');
+ hash = stripHash ? '' : hash;
+
+ let isBase64 = false;
+ if (mediaType[mediaType.length - 1] === 'base64') {
+ mediaType.pop();
+ isBase64 = true;
+ }
+
+ // Lowercase MIME type
+ const mimeType = mediaType.shift()?.toLowerCase() ?? '';
+ const attributes = mediaType
+ .map(attribute => {
+ let [key, value = ''] = attribute.split('=').map(string => string.trim());
+
+ // Lowercase `charset`
+ if (key === 'charset') {
+ value = value.toLowerCase();
+
+ if (value === DATA_URL_DEFAULT_CHARSET) {
+ return '';
+ }
+ }
+
+ return `${key}${value ? `=${value}` : ''}`;
+ })
+ .filter(Boolean);
+
+ const normalizedMediaType = [
+ ...attributes,
+ ];
+
+ if (isBase64) {
+ normalizedMediaType.push('base64');
+ }
+
+ if (normalizedMediaType.length > 0 || (mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE)) {
+ normalizedMediaType.unshift(mimeType);
+ }
+
+ return `data:${normalizedMediaType.join(';')},${isBase64 ? data.trim() : data}${hash ? `#${hash}` : ''}`;
+};
+
+function normalizeUrl(urlString, options) {
+ options = {
+ defaultProtocol: 'http',
+ normalizeProtocol: true,
+ forceHttp: false,
+ forceHttps: false,
+ stripAuthentication: true,
+ stripHash: false,
+ stripTextFragment: true,
+ stripWWW: true,
+ removeQueryParameters: [/^utm_\w+/i],
+ removeTrailingSlash: true,
+ removeSingleSlash: true,
+ removeDirectoryIndex: false,
+ removeExplicitPort: false,
+ sortQueryParameters: true,
+ ...options,
+ };
+
+ // Legacy: Append `:` to the protocol if missing.
+ if (typeof options.defaultProtocol === 'string' && !options.defaultProtocol.endsWith(':')) {
+ options.defaultProtocol = `${options.defaultProtocol}:`;
+ }
+
+ urlString = urlString.trim();
+
+ // Data URL
+ if (/^data:/i.test(urlString)) {
+ return normalizeDataURL(urlString, options);
+ }
+
+ if (hasCustomProtocol(urlString)) {
+ return urlString;
+ }
+
+ const hasRelativeProtocol = urlString.startsWith('//');
+ const isRelativeUrl = !hasRelativeProtocol && /^\.*\//.test(urlString);
+
+ // Prepend protocol
+ if (!isRelativeUrl) {
+ urlString = urlString.replace(/^(?!(?:\w+:)?\/\/)|^\/\//, options.defaultProtocol);
+ }
+
+ const urlObject = new URL(urlString);
+
+ if (options.forceHttp && options.forceHttps) {
+ throw new Error('The `forceHttp` and `forceHttps` options cannot be used together');
+ }
+
+ if (options.forceHttp && urlObject.protocol === 'https:') {
+ urlObject.protocol = 'http:';
+ }
+
+ if (options.forceHttps && urlObject.protocol === 'http:') {
+ urlObject.protocol = 'https:';
+ }
+
+ // Remove auth
+ if (options.stripAuthentication) {
+ urlObject.username = '';
+ urlObject.password = '';
+ }
+
+ // Remove hash
+ if (options.stripHash) {
+ urlObject.hash = '';
+ } else if (options.stripTextFragment) {
+ urlObject.hash = urlObject.hash.replace(/#?:~:text.*?$/i, '');
+ }
+
+ // Remove duplicate slashes if not preceded by a protocol
+ // NOTE: This could be implemented using a single negative lookbehind
+ // regex, but we avoid that to maintain compatibility with older js engines
+ // which do not have support for that feature.
+ if (urlObject.pathname) {
+ // TODO: Replace everything below with `urlObject.pathname = urlObject.pathname.replace(/(? 0) {
+ let pathComponents = urlObject.pathname.split('/');
+ const lastComponent = pathComponents[pathComponents.length - 1];
+
+ if (testParameter(lastComponent, options.removeDirectoryIndex)) {
+ pathComponents = pathComponents.slice(0, -1);
+ urlObject.pathname = pathComponents.slice(1).join('/') + '/';
+ }
+ }
+
+ if (urlObject.hostname) {
+ // Remove trailing dot
+ urlObject.hostname = urlObject.hostname.replace(/\.$/, '');
+
+ // Remove `www.`
+ if (options.stripWWW && /^www\.(?!www\.)[a-z\-\d]{1,63}\.[a-z.\-\d]{2,63}$/.test(urlObject.hostname)) {
+ // Each label should be max 63 at length (min: 1).
+ // Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names
+ // Each TLD should be up to 63 characters long (min: 2).
+ // It is technically possible to have a single character TLD, but none currently exist.
+ urlObject.hostname = urlObject.hostname.replace(/^www\./, '');
+ }
+ }
+
+ // Remove query unwanted parameters
+ if (Array.isArray(options.removeQueryParameters)) {
+ // eslint-disable-next-line unicorn/no-useless-spread -- We are intentionally spreading to get a copy.
+ for (const key of [...urlObject.searchParams.keys()]) {
+ if (testParameter(key, options.removeQueryParameters)) {
+ urlObject.searchParams.delete(key);
+ }
+ }
+ }
+
+ if (!Array.isArray(options.keepQueryParameters) && options.removeQueryParameters === true) {
+ urlObject.search = '';
+ }
+
+ // Keep wanted query parameters
+ if (Array.isArray(options.keepQueryParameters) && options.keepQueryParameters.length > 0) {
+ // eslint-disable-next-line unicorn/no-useless-spread -- We are intentionally spreading to get a copy.
+ for (const key of [...urlObject.searchParams.keys()]) {
+ if (!testParameter(key, options.keepQueryParameters)) {
+ urlObject.searchParams.delete(key);
+ }
+ }
+ }
+
+ // Sort query parameters
+ if (options.sortQueryParameters) {
+ urlObject.searchParams.sort();
+
+ // Calling `.sort()` encodes the search parameters, so we need to decode them again.
+ try {
+ urlObject.search = decodeURIComponent(urlObject.search);
+ } catch {}
+ }
+
+ if (options.removeTrailingSlash) {
+ urlObject.pathname = urlObject.pathname.replace(/\/$/, '');
+ }
+
+ // Remove an explicit port number, excluding a default port number, if applicable
+ if (options.removeExplicitPort && urlObject.port) {
+ urlObject.port = '';
+ }
+
+ const oldUrlString = urlString;
+
+ // Take advantage of many of the Node `url` normalizations
+ urlString = urlObject.toString();
+
+ if (!options.removeSingleSlash && urlObject.pathname === '/' && !oldUrlString.endsWith('/') && urlObject.hash === '') {
+ urlString = urlString.replace(/\/$/, '');
+ }
+
+ // Remove ending `/` unless removeSingleSlash is false
+ if ((options.removeTrailingSlash || urlObject.pathname === '/') && urlObject.hash === '' && options.removeSingleSlash) {
+ urlString = urlString.replace(/\/$/, '');
+ }
+
+ // Restore relative protocol, if applicable
+ if (hasRelativeProtocol && !options.normalizeProtocol) {
+ urlString = urlString.replace(/^http:\/\//, '//');
+ }
+
+ // Remove http/https
+ if (options.stripProtocol) {
+ urlString = urlString.replace(/^(?:https?:)?\/\//, '');
+ }
+
+ return urlString;
+}
+
+// EXTERNAL MODULE: ./node_modules/get-stream/index.js
+var get_stream = __nccwpck_require__(1766);
+// EXTERNAL MODULE: ./node_modules/http-cache-semantics/index.js
+var http_cache_semantics = __nccwpck_require__(1002);
+;// CONCATENATED MODULE: ./node_modules/lowercase-keys/index.js
+function lowercaseKeys(object) {
+ return Object.fromEntries(Object.entries(object).map(([key, value]) => [key.toLowerCase(), value]));
+}
+
+;// CONCATENATED MODULE: ./node_modules/responselike/index.js
+
+
+
+class Response extends external_node_stream_namespaceObject.Readable {
+ statusCode;
+ headers;
+ body;
+ url;
+
+ constructor({statusCode, headers, body, url}) {
+ if (typeof statusCode !== 'number') {
+ throw new TypeError('Argument `statusCode` should be a number');
+ }
+
+ if (typeof headers !== 'object') {
+ throw new TypeError('Argument `headers` should be an object');
+ }
+
+ if (!(body instanceof Uint8Array)) {
+ throw new TypeError('Argument `body` should be a buffer');
+ }
+
+ if (typeof url !== 'string') {
+ throw new TypeError('Argument `url` should be a string');
+ }
+
+ super({
+ read() {
+ this.push(body);
+ this.push(null);
+ },
+ });
+
+ this.statusCode = statusCode;
+ this.headers = lowercaseKeys(headers);
+ this.body = body;
+ this.url = url;
+ }
+}
+
+// EXTERNAL MODULE: ./node_modules/keyv/src/index.js
+var src = __nccwpck_require__(1531);
+;// CONCATENATED MODULE: ./node_modules/mimic-response/index.js
+// We define these manually to ensure they're always copied
+// even if they would move up the prototype chain
+// https://nodejs.org/api/http.html#http_class_http_incomingmessage
+const knownProperties = [
+ 'aborted',
+ 'complete',
+ 'headers',
+ 'httpVersion',
+ 'httpVersionMinor',
+ 'httpVersionMajor',
+ 'method',
+ 'rawHeaders',
+ 'rawTrailers',
+ 'setTimeout',
+ 'socket',
+ 'statusCode',
+ 'statusMessage',
+ 'trailers',
+ 'url',
+];
+
+function mimicResponse(fromStream, toStream) {
+ if (toStream._readableState.autoDestroy) {
+ throw new Error('The second stream must have the `autoDestroy` option set to `false`');
+ }
+
+ const fromProperties = new Set([...Object.keys(fromStream), ...knownProperties]);
+
+ const properties = {};
+
+ for (const property of fromProperties) {
+ // Don't overwrite existing properties.
+ if (property in toStream) {
+ continue;
+ }
+
+ properties[property] = {
+ get() {
+ const value = fromStream[property];
+ const isFunction = typeof value === 'function';
+
+ return isFunction ? value.bind(fromStream) : value;
+ },
+ set(value) {
+ fromStream[property] = value;
+ },
+ enumerable: true,
+ configurable: false,
+ };
+ }
+
+ Object.defineProperties(toStream, properties);
+
+ fromStream.once('aborted', () => {
+ toStream.destroy();
+
+ toStream.emit('aborted');
+ });
+
+ fromStream.once('close', () => {
+ if (fromStream.complete) {
+ if (toStream.readable) {
+ toStream.once('end', () => {
+ toStream.emit('close');
+ });
+ } else {
+ toStream.emit('close');
+ }
+ } else {
+ toStream.emit('close');
+ }
+ });
+
+ return toStream;
+}
+
+;// CONCATENATED MODULE: ./node_modules/cacheable-request/dist/types.js
+// Type definitions for cacheable-request 6.0
+// Project: https://github.com/lukechilds/cacheable-request#readme
+// Definitions by: BendingBender
+// Paul Melnikow
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+// TypeScript Version: 2.3
+class types_RequestError extends Error {
+ constructor(error) {
+ super(error.message);
+ Object.assign(this, error);
+ }
+}
+class types_CacheError extends Error {
+ constructor(error) {
+ super(error.message);
+ Object.assign(this, error);
+ }
+}
+//# sourceMappingURL=types.js.map
+;// CONCATENATED MODULE: ./node_modules/cacheable-request/dist/index.js
+
+
+
+
+
+
+
+
+
+
+
+class CacheableRequest {
+ constructor(cacheRequest, cacheAdapter) {
+ this.hooks = new Map();
+ this.request = () => (options, cb) => {
+ let url;
+ if (typeof options === 'string') {
+ url = normalizeUrlObject(external_node_url_namespaceObject.parse(options));
+ options = {};
+ }
+ else if (options instanceof external_node_url_namespaceObject.URL) {
+ url = normalizeUrlObject(external_node_url_namespaceObject.parse(options.toString()));
+ options = {};
+ }
+ else {
+ const [pathname, ...searchParts] = (options.path ?? '').split('?');
+ const search = searchParts.length > 0
+ ? `?${searchParts.join('?')}`
+ : '';
+ url = normalizeUrlObject({ ...options, pathname, search });
+ }
+ options = {
+ headers: {},
+ method: 'GET',
+ cache: true,
+ strictTtl: false,
+ automaticFailover: false,
+ ...options,
+ ...urlObjectToRequestOptions(url),
+ };
+ options.headers = Object.fromEntries(entries(options.headers).map(([key, value]) => [key.toLowerCase(), value]));
+ const ee = new external_node_events_namespaceObject();
+ const normalizedUrlString = normalizeUrl(external_node_url_namespaceObject.format(url), {
+ stripWWW: false,
+ removeTrailingSlash: false,
+ stripAuthentication: false,
+ });
+ let key = `${options.method}:${normalizedUrlString}`;
+ // POST, PATCH, and PUT requests may be cached, depending on the response
+ // cache-control headers. As a result, the body of the request should be
+ // added to the cache key in order to avoid collisions.
+ if (options.body && options.method !== undefined && ['POST', 'PATCH', 'PUT'].includes(options.method)) {
+ if (options.body instanceof external_node_stream_namespaceObject.Readable) {
+ // Streamed bodies should completely skip the cache because they may
+ // or may not be hashable and in either case the stream would need to
+ // close before the cache key could be generated.
+ options.cache = false;
+ }
+ else {
+ key += `:${external_node_crypto_namespaceObject.createHash('md5').update(options.body).digest('hex')}`;
+ }
+ }
+ let revalidate = false;
+ let madeRequest = false;
+ const makeRequest = (options_) => {
+ madeRequest = true;
+ let requestErrored = false;
+ let requestErrorCallback = () => { };
+ const requestErrorPromise = new Promise(resolve => {
+ requestErrorCallback = () => {
+ if (!requestErrored) {
+ requestErrored = true;
+ resolve();
+ }
+ };
+ });
+ const handler = async (response) => {
+ if (revalidate) {
+ response.status = response.statusCode;
+ const revalidatedPolicy = http_cache_semantics.fromObject(revalidate.cachePolicy).revalidatedPolicy(options_, response);
+ if (!revalidatedPolicy.modified) {
+ response.resume();
+ await new Promise(resolve => {
+ // Skipping 'error' handler cause 'error' event should't be emitted for 304 response
+ response
+ .once('end', resolve);
+ });
+ const headers = convertHeaders(revalidatedPolicy.policy.responseHeaders());
+ response = new Response({ statusCode: revalidate.statusCode, headers, body: revalidate.body, url: revalidate.url });
+ response.cachePolicy = revalidatedPolicy.policy;
+ response.fromCache = true;
+ }
+ }
+ if (!response.fromCache) {
+ response.cachePolicy = new http_cache_semantics(options_, response, options_);
+ response.fromCache = false;
+ }
+ let clonedResponse;
+ if (options_.cache && response.cachePolicy.storable()) {
+ clonedResponse = cloneResponse(response);
+ (async () => {
+ try {
+ const bodyPromise = get_stream.buffer(response);
+ await Promise.race([
+ requestErrorPromise,
+ new Promise(resolve => response.once('end', resolve)),
+ new Promise(resolve => response.once('close', resolve)), // eslint-disable-line no-promise-executor-return
+ ]);
+ const body = await bodyPromise;
+ let value = {
+ url: response.url,
+ statusCode: response.fromCache ? revalidate.statusCode : response.statusCode,
+ body,
+ cachePolicy: response.cachePolicy.toObject(),
+ };
+ let ttl = options_.strictTtl ? response.cachePolicy.timeToLive() : undefined;
+ if (options_.maxTtl) {
+ ttl = ttl ? Math.min(ttl, options_.maxTtl) : options_.maxTtl;
+ }
+ if (this.hooks.size > 0) {
+ /* eslint-disable no-await-in-loop */
+ for (const key_ of this.hooks.keys()) {
+ value = await this.runHook(key_, value, response);
+ }
+ /* eslint-enable no-await-in-loop */
+ }
+ await this.cache.set(key, value, ttl);
+ }
+ catch (error) {
+ ee.emit('error', new types_CacheError(error));
+ }
+ })();
+ }
+ else if (options_.cache && revalidate) {
+ (async () => {
+ try {
+ await this.cache.delete(key);
+ }
+ catch (error) {
+ ee.emit('error', new types_CacheError(error));
+ }
+ })();
+ }
+ ee.emit('response', clonedResponse ?? response);
+ if (typeof cb === 'function') {
+ cb(clonedResponse ?? response);
+ }
+ };
+ try {
+ const request_ = this.cacheRequest(options_, handler);
+ request_.once('error', requestErrorCallback);
+ request_.once('abort', requestErrorCallback);
+ request_.once('destroy', requestErrorCallback);
+ ee.emit('request', request_);
+ }
+ catch (error) {
+ ee.emit('error', new types_RequestError(error));
+ }
+ };
+ (async () => {
+ const get = async (options_) => {
+ await Promise.resolve();
+ const cacheEntry = options_.cache ? await this.cache.get(key) : undefined;
+ if (cacheEntry === undefined && !options_.forceRefresh) {
+ makeRequest(options_);
+ return;
+ }
+ const policy = http_cache_semantics.fromObject(cacheEntry.cachePolicy);
+ if (policy.satisfiesWithoutRevalidation(options_) && !options_.forceRefresh) {
+ const headers = convertHeaders(policy.responseHeaders());
+ const response = new Response({ statusCode: cacheEntry.statusCode, headers, body: cacheEntry.body, url: cacheEntry.url });
+ response.cachePolicy = policy;
+ response.fromCache = true;
+ ee.emit('response', response);
+ if (typeof cb === 'function') {
+ cb(response);
+ }
+ }
+ else if (policy.satisfiesWithoutRevalidation(options_) && Date.now() >= policy.timeToLive() && options_.forceRefresh) {
+ await this.cache.delete(key);
+ options_.headers = policy.revalidationHeaders(options_);
+ makeRequest(options_);
+ }
+ else {
+ revalidate = cacheEntry;
+ options_.headers = policy.revalidationHeaders(options_);
+ makeRequest(options_);
+ }
+ };
+ const errorHandler = (error) => ee.emit('error', new types_CacheError(error));
+ if (this.cache instanceof src) {
+ const cachek = this.cache;
+ cachek.once('error', errorHandler);
+ ee.on('error', () => cachek.removeListener('error', errorHandler));
+ ee.on('response', () => cachek.removeListener('error', errorHandler));
+ }
+ try {
+ await get(options);
+ }
+ catch (error) {
+ if (options.automaticFailover && !madeRequest) {
+ makeRequest(options);
+ }
+ ee.emit('error', new types_CacheError(error));
+ }
+ })();
+ return ee;
+ };
+ this.addHook = (name, fn) => {
+ if (!this.hooks.has(name)) {
+ this.hooks.set(name, fn);
+ }
+ };
+ this.removeHook = (name) => this.hooks.delete(name);
+ this.getHook = (name) => this.hooks.get(name);
+ this.runHook = async (name, ...args) => this.hooks.get(name)?.(...args);
+ if (cacheAdapter instanceof src) {
+ this.cache = cacheAdapter;
+ }
+ else if (typeof cacheAdapter === 'string') {
+ this.cache = new src({
+ uri: cacheAdapter,
+ namespace: 'cacheable-request',
+ });
+ }
+ else {
+ this.cache = new src({
+ store: cacheAdapter,
+ namespace: 'cacheable-request',
+ });
+ }
+ this.request = this.request.bind(this);
+ this.cacheRequest = cacheRequest;
+ }
+}
+const entries = Object.entries;
+const cloneResponse = (response) => {
+ const clone = new external_node_stream_namespaceObject.PassThrough({ autoDestroy: false });
+ mimicResponse(response, clone);
+ return response.pipe(clone);
+};
+const urlObjectToRequestOptions = (url) => {
+ const options = { ...url };
+ options.path = `${url.pathname || '/'}${url.search || ''}`;
+ delete options.pathname;
+ delete options.search;
+ return options;
+};
+const normalizeUrlObject = (url) =>
+// If url was parsed by url.parse or new URL:
+// - hostname will be set
+// - host will be hostname[:port]
+// - port will be set if it was explicit in the parsed string
+// Otherwise, url was from request options:
+// - hostname or host may be set
+// - host shall not have port encoded
+({
+ protocol: url.protocol,
+ auth: url.auth,
+ hostname: url.hostname || url.host || 'localhost',
+ port: url.port,
+ pathname: url.pathname,
+ search: url.search,
+});
+const convertHeaders = (headers) => {
+ const result = [];
+ for (const name of Object.keys(headers)) {
+ result[name.toLowerCase()] = headers[name];
+ }
+ return result;
+};
+/* harmony default export */ const cacheable_request_dist = (CacheableRequest);
+
+const onResponse = 'onResponse';
+//# sourceMappingURL=index.js.map
+// EXTERNAL MODULE: ./node_modules/decompress-response/index.js
+var decompress_response = __nccwpck_require__(2391);
+;// CONCATENATED MODULE: ./node_modules/got/node_modules/get-stream/source/contents.js
+const contents_getStreamContents = async (stream, {init, convertChunk, getSize, truncateChunk, addChunk, getFinalChunk, finalize}, {maxBuffer = Number.POSITIVE_INFINITY} = {}) => {
+ if (!contents_isAsyncIterable(stream)) {
+ throw new Error('The first argument must be a Readable, a ReadableStream, or an async iterable.');
+ }
+
+ const state = init();
+ state.length = 0;
+
+ try {
+ for await (const chunk of stream) {
+ const chunkType = getChunkType(chunk);
+ const convertedChunk = convertChunk[chunkType](chunk, state);
+ appendChunk({convertedChunk, state, getSize, truncateChunk, addChunk, maxBuffer});
+ }
+
+ appendFinalChunk({state, convertChunk, getSize, truncateChunk, addChunk, getFinalChunk, maxBuffer});
+ return finalize(state);
+ } catch (error) {
+ error.bufferedData = finalize(state);
+ throw error;
+ }
+};
+
+const appendFinalChunk = ({state, getSize, truncateChunk, addChunk, getFinalChunk, maxBuffer}) => {
+ const convertedChunk = getFinalChunk(state);
+ if (convertedChunk !== undefined) {
+ appendChunk({convertedChunk, state, getSize, truncateChunk, addChunk, maxBuffer});
+ }
+};
+
+const appendChunk = ({convertedChunk, state, getSize, truncateChunk, addChunk, maxBuffer}) => {
+ const chunkSize = getSize(convertedChunk);
+ const newLength = state.length + chunkSize;
+
+ if (newLength <= maxBuffer) {
+ addNewChunk(convertedChunk, state, addChunk, newLength);
+ return;
+ }
+
+ const truncatedChunk = truncateChunk(convertedChunk, maxBuffer - state.length);
+
+ if (truncatedChunk !== undefined) {
+ addNewChunk(truncatedChunk, state, addChunk, maxBuffer);
+ }
+
+ throw new MaxBufferError();
+};
+
+const addNewChunk = (convertedChunk, state, addChunk, newLength) => {
+ state.contents = addChunk(convertedChunk, state, newLength);
+ state.length = newLength;
+};
+
+const contents_isAsyncIterable = stream => typeof stream === 'object' && stream !== null && typeof stream[Symbol.asyncIterator] === 'function';
+
+const getChunkType = chunk => {
+ const typeOfChunk = typeof chunk;
+
+ if (typeOfChunk === 'string') {
+ return 'string';
+ }
+
+ if (typeOfChunk !== 'object' || chunk === null) {
+ return 'others';
+ }
+
+ // eslint-disable-next-line n/prefer-global/buffer
+ if (globalThis.Buffer?.isBuffer(chunk)) {
+ return 'buffer';
+ }
+
+ const prototypeName = objectToString.call(chunk);
+
+ if (prototypeName === '[object ArrayBuffer]') {
+ return 'arrayBuffer';
+ }
+
+ if (prototypeName === '[object DataView]') {
+ return 'dataView';
+ }
+
+ if (
+ Number.isInteger(chunk.byteLength)
+ && Number.isInteger(chunk.byteOffset)
+ && objectToString.call(chunk.buffer) === '[object ArrayBuffer]'
+ ) {
+ return 'typedArray';
+ }
+
+ return 'others';
+};
+
+const {toString: objectToString} = Object.prototype;
+
+class MaxBufferError extends Error {
+ name = 'MaxBufferError';
+
+ constructor() {
+ super('maxBuffer exceeded');
+ }
+}
+
+;// CONCATENATED MODULE: ./node_modules/got/node_modules/get-stream/source/utils.js
+const identity = value => value;
+
+const noop = () => undefined;
+
+const getContentsProp = ({contents}) => contents;
+
+const throwObjectStream = chunk => {
+ throw new Error(`Streams in object mode are not supported: ${String(chunk)}`);
+};
+
+const getLengthProp = convertedChunk => convertedChunk.length;
+
+;// CONCATENATED MODULE: ./node_modules/got/node_modules/get-stream/source/array.js
+
+
+
+async function getStreamAsArray(stream, options) {
+ return getStreamContents(stream, arrayMethods, options);
+}
+
+const initArray = () => ({contents: []});
+
+const increment = () => 1;
+
+const addArrayChunk = (convertedChunk, {contents}) => {
+ contents.push(convertedChunk);
+ return contents;
+};
+
+const arrayMethods = {
+ init: initArray,
+ convertChunk: {
+ string: identity,
+ buffer: identity,
+ arrayBuffer: identity,
+ dataView: identity,
+ typedArray: identity,
+ others: identity,
+ },
+ getSize: increment,
+ truncateChunk: noop,
+ addChunk: addArrayChunk,
+ getFinalChunk: noop,
+ finalize: getContentsProp,
+};
+
+;// CONCATENATED MODULE: ./node_modules/got/node_modules/get-stream/source/array-buffer.js
+
+
+
+async function getStreamAsArrayBuffer(stream, options) {
+ return contents_getStreamContents(stream, arrayBufferMethods, options);
+}
+
+const initArrayBuffer = () => ({contents: new ArrayBuffer(0)});
+
+const useTextEncoder = chunk => textEncoder.encode(chunk);
+const textEncoder = new TextEncoder();
+
+const useUint8Array = chunk => new Uint8Array(chunk);
+
+const useUint8ArrayWithOffset = chunk => new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength);
+
+const truncateArrayBufferChunk = (convertedChunk, chunkSize) => convertedChunk.slice(0, chunkSize);
+
+// `contents` is an increasingly growing `Uint8Array`.
+const addArrayBufferChunk = (convertedChunk, {contents, length: previousLength}, length) => {
+ const newContents = hasArrayBufferResize() ? resizeArrayBuffer(contents, length) : resizeArrayBufferSlow(contents, length);
+ new Uint8Array(newContents).set(convertedChunk, previousLength);
+ return newContents;
+};
+
+// Without `ArrayBuffer.resize()`, `contents` size is always a power of 2.
+// This means its last bytes are zeroes (not stream data), which need to be
+// trimmed at the end with `ArrayBuffer.slice()`.
+const resizeArrayBufferSlow = (contents, length) => {
+ if (length <= contents.byteLength) {
+ return contents;
+ }
+
+ const arrayBuffer = new ArrayBuffer(getNewContentsLength(length));
+ new Uint8Array(arrayBuffer).set(new Uint8Array(contents), 0);
+ return arrayBuffer;
+};
+
+// With `ArrayBuffer.resize()`, `contents` size matches exactly the size of
+// the stream data. It does not include extraneous zeroes to trim at the end.
+// The underlying `ArrayBuffer` does allocate a number of bytes that is a power
+// of 2, but those bytes are only visible after calling `ArrayBuffer.resize()`.
+const resizeArrayBuffer = (contents, length) => {
+ if (length <= contents.maxByteLength) {
+ contents.resize(length);
+ return contents;
+ }
+
+ const arrayBuffer = new ArrayBuffer(length, {maxByteLength: getNewContentsLength(length)});
+ new Uint8Array(arrayBuffer).set(new Uint8Array(contents), 0);
+ return arrayBuffer;
+};
+
+// Retrieve the closest `length` that is both >= and a power of 2
+const getNewContentsLength = length => SCALE_FACTOR ** Math.ceil(Math.log(length) / Math.log(SCALE_FACTOR));
+
+const SCALE_FACTOR = 2;
+
+const finalizeArrayBuffer = ({contents, length}) => hasArrayBufferResize() ? contents : contents.slice(0, length);
+
+// `ArrayBuffer.slice()` is slow. When `ArrayBuffer.resize()` is available
+// (Node >=20.0.0, Safari >=16.4 and Chrome), we can use it instead.
+// eslint-disable-next-line no-warning-comments
+// TODO: remove after dropping support for Node 20.
+// eslint-disable-next-line no-warning-comments
+// TODO: use `ArrayBuffer.transferToFixedLength()` instead once it is available
+const hasArrayBufferResize = () => 'resize' in ArrayBuffer.prototype;
+
+const arrayBufferMethods = {
+ init: initArrayBuffer,
+ convertChunk: {
+ string: useTextEncoder,
+ buffer: useUint8Array,
+ arrayBuffer: useUint8Array,
+ dataView: useUint8ArrayWithOffset,
+ typedArray: useUint8ArrayWithOffset,
+ others: throwObjectStream,
+ },
+ getSize: getLengthProp,
+ truncateChunk: truncateArrayBufferChunk,
+ addChunk: addArrayBufferChunk,
+ getFinalChunk: noop,
+ finalize: finalizeArrayBuffer,
+};
+
+;// CONCATENATED MODULE: ./node_modules/got/node_modules/get-stream/source/buffer.js
+
+
+async function getStreamAsBuffer(stream, options) {
+ if (!('Buffer' in globalThis)) {
+ throw new Error('getStreamAsBuffer() is only supported in Node.js');
+ }
+
+ try {
+ return arrayBufferToNodeBuffer(await getStreamAsArrayBuffer(stream, options));
+ } catch (error) {
+ if (error.bufferedData !== undefined) {
+ error.bufferedData = arrayBufferToNodeBuffer(error.bufferedData);
+ }
+
+ throw error;
+ }
+}
+
+// eslint-disable-next-line n/prefer-global/buffer
+const arrayBufferToNodeBuffer = arrayBuffer => globalThis.Buffer.from(arrayBuffer);
+
+;// CONCATENATED MODULE: ./node_modules/got/node_modules/get-stream/source/string.js
+
+
+
+async function getStreamAsString(stream, options) {
+ return getStreamContents(stream, stringMethods, options);
+}
+
+const initString = () => ({contents: '', textDecoder: new TextDecoder()});
+
+const useTextDecoder = (chunk, {textDecoder}) => textDecoder.decode(chunk, {stream: true});
+
+const addStringChunk = (convertedChunk, {contents}) => contents + convertedChunk;
+
+const truncateStringChunk = (convertedChunk, chunkSize) => convertedChunk.slice(0, chunkSize);
+
+const getFinalStringChunk = ({textDecoder}) => {
+ const finalChunk = textDecoder.decode();
+ return finalChunk === '' ? undefined : finalChunk;
+};
+
+const stringMethods = {
+ init: initString,
+ convertChunk: {
+ string: identity,
+ buffer: useTextDecoder,
+ arrayBuffer: useTextDecoder,
+ dataView: useTextDecoder,
+ typedArray: useTextDecoder,
+ others: throwObjectStream,
+ },
+ getSize: getLengthProp,
+ truncateChunk: truncateStringChunk,
+ addChunk: addStringChunk,
+ getFinalChunk: getFinalStringChunk,
+ finalize: getContentsProp,
+};
+
+;// CONCATENATED MODULE: ./node_modules/got/node_modules/get-stream/source/index.js
+
+
+
+
+
+
+;// CONCATENATED MODULE: ./node_modules/form-data-encoder/lib/index.js
+var __accessCheck = (obj, member, msg) => {
+ if (!member.has(obj))
+ throw TypeError("Cannot " + msg);
+};
+var __privateGet = (obj, member, getter) => {
+ __accessCheck(obj, member, "read from private field");
+ return getter ? getter.call(obj) : member.get(obj);
+};
+var __privateAdd = (obj, member, value) => {
+ if (member.has(obj))
+ throw TypeError("Cannot add the same private member more than once");
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
+};
+var __privateSet = (obj, member, value, setter) => {
+ __accessCheck(obj, member, "write to private field");
+ setter ? setter.call(obj, value) : member.set(obj, value);
+ return value;
+};
+var __privateMethod = (obj, member, method) => {
+ __accessCheck(obj, member, "access private method");
+ return method;
+};
+
+// src/util/isFunction.ts
+var lib_isFunction = (value) => typeof value === "function";
+
+// src/util/isAsyncIterable.ts
+var lib_isAsyncIterable = (value) => lib_isFunction(value[Symbol.asyncIterator]);
+
+// src/util/chunk.ts
+var MAX_CHUNK_SIZE = 65536;
+function* chunk(value) {
+ if (value.byteLength <= MAX_CHUNK_SIZE) {
+ yield value;
+ return;
+ }
+ let offset = 0;
+ while (offset < value.byteLength) {
+ const size = Math.min(value.byteLength - offset, MAX_CHUNK_SIZE);
+ const buffer = value.buffer.slice(offset, offset + size);
+ offset += buffer.byteLength;
+ yield new Uint8Array(buffer);
+ }
+}
+
+// src/util/getStreamIterator.ts
+async function* readStream(readable) {
+ const reader = readable.getReader();
+ while (true) {
+ const { done, value } = await reader.read();
+ if (done) {
+ break;
+ }
+ yield value;
+ }
+}
+async function* chunkStream(stream) {
+ for await (const value of stream) {
+ yield* chunk(value);
+ }
+}
+var getStreamIterator = (source) => {
+ if (lib_isAsyncIterable(source)) {
+ return chunkStream(source);
+ }
+ if (lib_isFunction(source.getReader)) {
+ return chunkStream(readStream(source));
+ }
+ throw new TypeError(
+ "Unsupported data source: Expected either ReadableStream or async iterable."
+ );
+};
+
+// src/util/createBoundary.ts
+var alphabet = "abcdefghijklmnopqrstuvwxyz0123456789";
+function createBoundary() {
+ let size = 16;
+ let res = "";
+ while (size--) {
+ res += alphabet[Math.random() * alphabet.length << 0];
+ }
+ return res;
+}
+
+// src/util/normalizeValue.ts
+var normalizeValue = (value) => String(value).replace(/\r|\n/g, (match, i, str) => {
+ if (match === "\r" && str[i + 1] !== "\n" || match === "\n" && str[i - 1] !== "\r") {
+ return "\r\n";
+ }
+ return match;
+});
+
+// src/util/isPlainObject.ts
+var getType = (value) => Object.prototype.toString.call(value).slice(8, -1).toLowerCase();
+function lib_isPlainObject(value) {
+ if (getType(value) !== "object") {
+ return false;
+ }
+ const pp = Object.getPrototypeOf(value);
+ if (pp === null || pp === void 0) {
+ return true;
+ }
+ const Ctor = pp.constructor && pp.constructor.toString();
+ return Ctor === Object.toString();
+}
+
+// src/util/proxyHeaders.ts
+function getProperty(target, prop) {
+ if (typeof prop === "string") {
+ for (const [name, value] of Object.entries(target)) {
+ if (prop.toLowerCase() === name.toLowerCase()) {
+ return value;
+ }
+ }
+ }
+ return void 0;
+}
+var proxyHeaders = (object) => new Proxy(
+ object,
+ {
+ get: (target, prop) => getProperty(target, prop),
+ has: (target, prop) => getProperty(target, prop) !== void 0
+ }
+);
+
+// src/util/isFormData.ts
+var lib_isFormData = (value) => Boolean(
+ value && lib_isFunction(value.constructor) && value[Symbol.toStringTag] === "FormData" && lib_isFunction(value.append) && lib_isFunction(value.getAll) && lib_isFunction(value.entries) && lib_isFunction(value[Symbol.iterator])
+);
+
+// src/util/escapeName.ts
+var escapeName = (name) => String(name).replace(/\r/g, "%0D").replace(/\n/g, "%0A").replace(/"/g, "%22");
+
+// src/util/isFile.ts
+var isFile = (value) => Boolean(
+ value && typeof value === "object" && lib_isFunction(value.constructor) && value[Symbol.toStringTag] === "File" && lib_isFunction(value.stream) && value.name != null
+);
+
+// src/FormDataEncoder.ts
+var defaultOptions = {
+ enableAdditionalHeaders: false
+};
+var readonlyProp = { writable: false, configurable: false };
+var _CRLF, _CRLF_BYTES, _CRLF_BYTES_LENGTH, _DASHES, _encoder, _footer, _form, _options, _getFieldHeader, getFieldHeader_fn, _getContentLength, getContentLength_fn;
+var FormDataEncoder = class {
+ constructor(form, boundaryOrOptions, options) {
+ __privateAdd(this, _getFieldHeader);
+ /**
+ * Returns form-data content length
+ */
+ __privateAdd(this, _getContentLength);
+ __privateAdd(this, _CRLF, "\r\n");
+ __privateAdd(this, _CRLF_BYTES, void 0);
+ __privateAdd(this, _CRLF_BYTES_LENGTH, void 0);
+ __privateAdd(this, _DASHES, "-".repeat(2));
+ /**
+ * TextEncoder instance
+ */
+ __privateAdd(this, _encoder, new TextEncoder());
+ /**
+ * Returns form-data footer bytes
+ */
+ __privateAdd(this, _footer, void 0);
+ /**
+ * FormData instance
+ */
+ __privateAdd(this, _form, void 0);
+ /**
+ * Instance options
+ */
+ __privateAdd(this, _options, void 0);
+ if (!lib_isFormData(form)) {
+ throw new TypeError("Expected first argument to be a FormData instance.");
+ }
+ let boundary;
+ if (lib_isPlainObject(boundaryOrOptions)) {
+ options = boundaryOrOptions;
+ } else {
+ boundary = boundaryOrOptions;
+ }
+ if (!boundary) {
+ boundary = createBoundary();
+ }
+ if (typeof boundary !== "string") {
+ throw new TypeError("Expected boundary argument to be a string.");
+ }
+ if (options && !lib_isPlainObject(options)) {
+ throw new TypeError("Expected options argument to be an object.");
+ }
+ __privateSet(this, _form, Array.from(form.entries()));
+ __privateSet(this, _options, { ...defaultOptions, ...options });
+ __privateSet(this, _CRLF_BYTES, __privateGet(this, _encoder).encode(__privateGet(this, _CRLF)));
+ __privateSet(this, _CRLF_BYTES_LENGTH, __privateGet(this, _CRLF_BYTES).byteLength);
+ this.boundary = `form-data-boundary-${boundary}`;
+ this.contentType = `multipart/form-data; boundary=${this.boundary}`;
+ __privateSet(this, _footer, __privateGet(this, _encoder).encode(
+ `${__privateGet(this, _DASHES)}${this.boundary}${__privateGet(this, _DASHES)}${__privateGet(this, _CRLF).repeat(2)}`
+ ));
+ const headers = {
+ "Content-Type": this.contentType
+ };
+ const contentLength = __privateMethod(this, _getContentLength, getContentLength_fn).call(this);
+ if (contentLength) {
+ this.contentLength = contentLength;
+ headers["Content-Length"] = contentLength;
+ }
+ this.headers = proxyHeaders(Object.freeze(headers));
+ Object.defineProperties(this, {
+ boundary: readonlyProp,
+ contentType: readonlyProp,
+ contentLength: readonlyProp,
+ headers: readonlyProp
+ });
+ }
+ /**
+ * Creates an iterator allowing to go through form-data parts (with metadata).
+ * This method **will not** read the files and **will not** split values big into smaller chunks.
+ *
+ * Using this method, you can convert form-data content into Blob:
+ *
+ * @example
+ *
+ * ```ts
+ * import {Readable} from "stream"
+ *
+ * import {FormDataEncoder} from "form-data-encoder"
+ *
+ * import {FormData} from "formdata-polyfill/esm-min.js"
+ * import {fileFrom} from "fetch-blob/form.js"
+ * import {File} from "fetch-blob/file.js"
+ * import {Blob} from "fetch-blob"
+ *
+ * import fetch from "node-fetch"
+ *
+ * const form = new FormData()
+ *
+ * form.set("field", "Just a random string")
+ * form.set("file", new File(["Using files is class amazing"]))
+ * form.set("fileFromPath", await fileFrom("path/to/a/file.txt"))
+ *
+ * const encoder = new FormDataEncoder(form)
+ *
+ * const options = {
+ * method: "post",
+ * body: new Blob(encoder, {type: encoder.contentType})
+ * }
+ *
+ * const response = await fetch("https://httpbin.org/post", options)
+ *
+ * console.log(await response.json())
+ * ```
+ */
+ *values() {
+ for (const [name, raw] of __privateGet(this, _form)) {
+ const value = isFile(raw) ? raw : __privateGet(this, _encoder).encode(
+ normalizeValue(raw)
+ );
+ yield __privateMethod(this, _getFieldHeader, getFieldHeader_fn).call(this, name, value);
+ yield value;
+ yield __privateGet(this, _CRLF_BYTES);
+ }
+ yield __privateGet(this, _footer);
+ }
+ /**
+ * Creates an async iterator allowing to perform the encoding by portions.
+ * This method reads through files and splits big values into smaller pieces (65536 bytes per each).
+ *
+ * @example
+ *
+ * ```ts
+ * import {Readable} from "stream"
+ *
+ * import {FormData, File, fileFromPath} from "formdata-node"
+ * import {FormDataEncoder} from "form-data-encoder"
+ *
+ * import fetch from "node-fetch"
+ *
+ * const form = new FormData()
+ *
+ * form.set("field", "Just a random string")
+ * form.set("file", new File(["Using files is class amazing"], "file.txt"))
+ * form.set("fileFromPath", await fileFromPath("path/to/a/file.txt"))
+ *
+ * const encoder = new FormDataEncoder(form)
+ *
+ * const options = {
+ * method: "post",
+ * headers: encoder.headers,
+ * body: Readable.from(encoder.encode()) // or Readable.from(encoder)
+ * }
+ *
+ * const response = await fetch("https://httpbin.org/post", options)
+ *
+ * console.log(await response.json())
+ * ```
+ */
+ async *encode() {
+ for (const part of this.values()) {
+ if (isFile(part)) {
+ yield* getStreamIterator(part.stream());
+ } else {
+ yield* chunk(part);
+ }
+ }
+ }
+ /**
+ * Creates an iterator allowing to read through the encoder data using for...of loops
+ */
+ [Symbol.iterator]() {
+ return this.values();
+ }
+ /**
+ * Creates an **async** iterator allowing to read through the encoder data using for-await...of loops
+ */
+ [Symbol.asyncIterator]() {
+ return this.encode();
+ }
+};
+_CRLF = new WeakMap();
+_CRLF_BYTES = new WeakMap();
+_CRLF_BYTES_LENGTH = new WeakMap();
+_DASHES = new WeakMap();
+_encoder = new WeakMap();
+_footer = new WeakMap();
+_form = new WeakMap();
+_options = new WeakMap();
+_getFieldHeader = new WeakSet();
+getFieldHeader_fn = function(name, value) {
+ let header = "";
+ header += `${__privateGet(this, _DASHES)}${this.boundary}${__privateGet(this, _CRLF)}`;
+ header += `Content-Disposition: form-data; name="${escapeName(name)}"`;
+ if (isFile(value)) {
+ header += `; filename="${escapeName(value.name)}"${__privateGet(this, _CRLF)}`;
+ header += `Content-Type: ${value.type || "application/octet-stream"}`;
+ }
+ if (__privateGet(this, _options).enableAdditionalHeaders === true) {
+ const size = isFile(value) ? value.size : value.byteLength;
+ if (size != null && !isNaN(size)) {
+ header += `${__privateGet(this, _CRLF)}Content-Length: ${size}`;
+ }
+ }
+ return __privateGet(this, _encoder).encode(`${header}${__privateGet(this, _CRLF).repeat(2)}`);
+};
+_getContentLength = new WeakSet();
+getContentLength_fn = function() {
+ let length = 0;
+ for (const [name, raw] of __privateGet(this, _form)) {
+ const value = isFile(raw) ? raw : __privateGet(this, _encoder).encode(
+ normalizeValue(raw)
+ );
+ const size = isFile(value) ? value.size : value.byteLength;
+ if (size == null || isNaN(size)) {
+ return void 0;
+ }
+ length += __privateMethod(this, _getFieldHeader, getFieldHeader_fn).call(this, name, value).byteLength;
+ length += size;
+ length += __privateGet(this, _CRLF_BYTES_LENGTH);
+ }
+ return String(length + __privateGet(this, _footer).byteLength);
+};
+
+
+;// CONCATENATED MODULE: external "node:util"
+const external_node_util_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:util");
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/is-form-data.js
+
+function is_form_data_isFormData(body) {
+ return dist.nodeStream(body) && dist.function_(body.getBoundary);
+}
+
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/get-body-size.js
+
+
+
+
+async function getBodySize(body, headers) {
+ if (headers && 'content-length' in headers) {
+ return Number(headers['content-length']);
+ }
+ if (!body) {
+ return 0;
+ }
+ if (dist.string(body)) {
+ return external_node_buffer_namespaceObject.Buffer.byteLength(body);
+ }
+ if (dist.buffer(body)) {
+ return body.length;
+ }
+ if (is_form_data_isFormData(body)) {
+ return (0,external_node_util_namespaceObject.promisify)(body.getLength.bind(body))();
+ }
+ return undefined;
+}
+
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/proxy-events.js
+function proxyEvents(from, to, events) {
+ const eventFunctions = {};
+ for (const event of events) {
+ const eventFunction = (...args) => {
+ to.emit(event, ...args);
+ };
+ eventFunctions[event] = eventFunction;
+ from.on(event, eventFunction);
+ }
+ return () => {
+ for (const [event, eventFunction] of Object.entries(eventFunctions)) {
+ from.off(event, eventFunction);
+ }
+ };
+}
+
+;// CONCATENATED MODULE: external "node:net"
+const external_node_net_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:net");
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/unhandle.js
+// When attaching listeners, it's very easy to forget about them.
+// Especially if you do error handling and set timeouts.
+// So instead of checking if it's proper to throw an error on every timeout ever,
+// use this simple tool which will remove all listeners you have attached.
+function unhandle() {
+ const handlers = [];
+ return {
+ once(origin, event, fn) {
+ origin.once(event, fn);
+ handlers.push({ origin, event, fn });
+ },
+ unhandleAll() {
+ for (const handler of handlers) {
+ const { origin, event, fn } = handler;
+ origin.removeListener(event, fn);
+ }
+ handlers.length = 0;
+ },
+ };
+}
+
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/timed-out.js
+
+
+const reentry = Symbol('reentry');
+const timed_out_noop = () => { };
+class timed_out_TimeoutError extends Error {
+ event;
+ code;
+ constructor(threshold, event) {
+ super(`Timeout awaiting '${event}' for ${threshold}ms`);
+ this.event = event;
+ this.name = 'TimeoutError';
+ this.code = 'ETIMEDOUT';
+ }
+}
+function timedOut(request, delays, options) {
+ if (reentry in request) {
+ return timed_out_noop;
+ }
+ request[reentry] = true;
+ const cancelers = [];
+ const { once, unhandleAll } = unhandle();
+ const addTimeout = (delay, callback, event) => {
+ const timeout = setTimeout(callback, delay, delay, event);
+ timeout.unref?.();
+ const cancel = () => {
+ clearTimeout(timeout);
+ };
+ cancelers.push(cancel);
+ return cancel;
+ };
+ const { host, hostname } = options;
+ const timeoutHandler = (delay, event) => {
+ request.destroy(new timed_out_TimeoutError(delay, event));
+ };
+ const cancelTimeouts = () => {
+ for (const cancel of cancelers) {
+ cancel();
+ }
+ unhandleAll();
+ };
+ request.once('error', error => {
+ cancelTimeouts();
+ // Save original behavior
+ /* istanbul ignore next */
+ if (request.listenerCount('error') === 0) {
+ throw error;
+ }
+ });
+ if (delays.request !== undefined) {
+ const cancelTimeout = addTimeout(delays.request, timeoutHandler, 'request');
+ once(request, 'response', (response) => {
+ once(response, 'end', cancelTimeout);
+ });
+ }
+ if (delays.socket !== undefined) {
+ const { socket } = delays;
+ const socketTimeoutHandler = () => {
+ timeoutHandler(socket, 'socket');
+ };
+ request.setTimeout(socket, socketTimeoutHandler);
+ // `request.setTimeout(0)` causes a memory leak.
+ // We can just remove the listener and forget about the timer - it's unreffed.
+ // See https://github.com/sindresorhus/got/issues/690
+ cancelers.push(() => {
+ request.removeListener('timeout', socketTimeoutHandler);
+ });
+ }
+ const hasLookup = delays.lookup !== undefined;
+ const hasConnect = delays.connect !== undefined;
+ const hasSecureConnect = delays.secureConnect !== undefined;
+ const hasSend = delays.send !== undefined;
+ if (hasLookup || hasConnect || hasSecureConnect || hasSend) {
+ once(request, 'socket', (socket) => {
+ const { socketPath } = request;
+ /* istanbul ignore next: hard to test */
+ if (socket.connecting) {
+ const hasPath = Boolean(socketPath ?? external_node_net_namespaceObject.isIP(hostname ?? host ?? '') !== 0);
+ if (hasLookup && !hasPath && socket.address().address === undefined) {
+ const cancelTimeout = addTimeout(delays.lookup, timeoutHandler, 'lookup');
+ once(socket, 'lookup', cancelTimeout);
+ }
+ if (hasConnect) {
+ const timeConnect = () => addTimeout(delays.connect, timeoutHandler, 'connect');
+ if (hasPath) {
+ once(socket, 'connect', timeConnect());
+ }
+ else {
+ once(socket, 'lookup', (error) => {
+ if (error === null) {
+ once(socket, 'connect', timeConnect());
+ }
+ });
+ }
+ }
+ if (hasSecureConnect && options.protocol === 'https:') {
+ once(socket, 'connect', () => {
+ const cancelTimeout = addTimeout(delays.secureConnect, timeoutHandler, 'secureConnect');
+ once(socket, 'secureConnect', cancelTimeout);
+ });
+ }
+ }
+ if (hasSend) {
+ const timeRequest = () => addTimeout(delays.send, timeoutHandler, 'send');
+ /* istanbul ignore next: hard to test */
+ if (socket.connecting) {
+ once(socket, 'connect', () => {
+ once(request, 'upload-complete', timeRequest());
+ });
+ }
+ else {
+ once(request, 'upload-complete', timeRequest());
+ }
+ }
+ });
+ }
+ if (delays.response !== undefined) {
+ once(request, 'upload-complete', () => {
+ const cancelTimeout = addTimeout(delays.response, timeoutHandler, 'response');
+ once(request, 'response', cancelTimeout);
+ });
+ }
+ if (delays.read !== undefined) {
+ once(request, 'response', (response) => {
+ const cancelTimeout = addTimeout(delays.read, timeoutHandler, 'read');
+ once(response, 'end', cancelTimeout);
+ });
+ }
+ return cancelTimeouts;
+}
+
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/url-to-options.js
+
+function urlToOptions(url) {
+ // Cast to URL
+ url = url;
+ const options = {
+ protocol: url.protocol,
+ hostname: dist.string(url.hostname) && url.hostname.startsWith('[') ? url.hostname.slice(1, -1) : url.hostname,
+ host: url.host,
+ hash: url.hash,
+ search: url.search,
+ pathname: url.pathname,
+ href: url.href,
+ path: `${url.pathname || ''}${url.search || ''}`,
+ };
+ if (dist.string(url.port) && url.port.length > 0) {
+ options.port = Number(url.port);
+ }
+ if (url.username || url.password) {
+ options.auth = `${url.username || ''}:${url.password || ''}`;
+ }
+ return options;
+}
+
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/weakable-map.js
+class WeakableMap {
+ weakMap;
+ map;
+ constructor() {
+ this.weakMap = new WeakMap();
+ this.map = new Map();
+ }
+ set(key, value) {
+ if (typeof key === 'object') {
+ this.weakMap.set(key, value);
+ }
+ else {
+ this.map.set(key, value);
+ }
+ }
+ get(key) {
+ if (typeof key === 'object') {
+ return this.weakMap.get(key);
+ }
+ return this.map.get(key);
+ }
+ has(key) {
+ if (typeof key === 'object') {
+ return this.weakMap.has(key);
+ }
+ return this.map.has(key);
+ }
+}
+
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/calculate-retry-delay.js
+const calculateRetryDelay = ({ attemptCount, retryOptions, error, retryAfter, computedValue, }) => {
+ if (error.name === 'RetryError') {
+ return 1;
+ }
+ if (attemptCount > retryOptions.limit) {
+ return 0;
+ }
+ const hasMethod = retryOptions.methods.includes(error.options.method);
+ const hasErrorCode = retryOptions.errorCodes.includes(error.code);
+ const hasStatusCode = error.response && retryOptions.statusCodes.includes(error.response.statusCode);
+ if (!hasMethod || (!hasErrorCode && !hasStatusCode)) {
+ return 0;
+ }
+ if (error.response) {
+ if (retryAfter) {
+ // In this case `computedValue` is `options.request.timeout`
+ if (retryAfter > computedValue) {
+ return 0;
+ }
+ return retryAfter;
+ }
+ if (error.response.statusCode === 413) {
+ return 0;
+ }
+ }
+ const noise = Math.random() * retryOptions.noise;
+ return Math.min(((2 ** (attemptCount - 1)) * 1000), retryOptions.backoffLimit) + noise;
+};
+/* harmony default export */ const calculate_retry_delay = (calculateRetryDelay);
+
+;// CONCATENATED MODULE: external "node:tls"
+const external_node_tls_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:tls");
+;// CONCATENATED MODULE: external "node:https"
+const external_node_https_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:https");
+;// CONCATENATED MODULE: external "node:dns"
+const external_node_dns_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:dns");
+;// CONCATENATED MODULE: external "node:os"
+const external_node_os_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:os");
+;// CONCATENATED MODULE: ./node_modules/cacheable-lookup/source/index.js
+
+
+
+
+const {Resolver: AsyncResolver} = external_node_dns_namespaceObject.promises;
+
+const kCacheableLookupCreateConnection = Symbol('cacheableLookupCreateConnection');
+const kCacheableLookupInstance = Symbol('cacheableLookupInstance');
+const kExpires = Symbol('expires');
+
+const supportsALL = typeof external_node_dns_namespaceObject.ALL === 'number';
+
+const verifyAgent = agent => {
+ if (!(agent && typeof agent.createConnection === 'function')) {
+ throw new Error('Expected an Agent instance as the first argument');
+ }
+};
+
+const map4to6 = entries => {
+ for (const entry of entries) {
+ if (entry.family === 6) {
+ continue;
+ }
+
+ entry.address = `::ffff:${entry.address}`;
+ entry.family = 6;
+ }
+};
+
+const getIfaceInfo = () => {
+ let has4 = false;
+ let has6 = false;
+
+ for (const device of Object.values(external_node_os_namespaceObject.networkInterfaces())) {
+ for (const iface of device) {
+ if (iface.internal) {
+ continue;
+ }
+
+ if (iface.family === 'IPv6') {
+ has6 = true;
+ } else {
+ has4 = true;
+ }
+
+ if (has4 && has6) {
+ return {has4, has6};
+ }
+ }
+ }
+
+ return {has4, has6};
+};
+
+const source_isIterable = map => {
+ return Symbol.iterator in map;
+};
+
+const ignoreNoResultErrors = dnsPromise => {
+ return dnsPromise.catch(error => {
+ if (
+ error.code === 'ENODATA' ||
+ error.code === 'ENOTFOUND' ||
+ error.code === 'ENOENT' // Windows: name exists, but not this record type
+ ) {
+ return [];
+ }
+
+ throw error;
+ });
+};
+
+const ttl = {ttl: true};
+const source_all = {all: true};
+const all4 = {all: true, family: 4};
+const all6 = {all: true, family: 6};
+
+class CacheableLookup {
+ constructor({
+ cache = new Map(),
+ maxTtl = Infinity,
+ fallbackDuration = 3600,
+ errorTtl = 0.15,
+ resolver = new AsyncResolver(),
+ lookup = external_node_dns_namespaceObject.lookup
+ } = {}) {
+ this.maxTtl = maxTtl;
+ this.errorTtl = errorTtl;
+
+ this._cache = cache;
+ this._resolver = resolver;
+ this._dnsLookup = lookup && (0,external_node_util_namespaceObject.promisify)(lookup);
+ this.stats = {
+ cache: 0,
+ query: 0
+ };
+
+ if (this._resolver instanceof AsyncResolver) {
+ this._resolve4 = this._resolver.resolve4.bind(this._resolver);
+ this._resolve6 = this._resolver.resolve6.bind(this._resolver);
+ } else {
+ this._resolve4 = (0,external_node_util_namespaceObject.promisify)(this._resolver.resolve4.bind(this._resolver));
+ this._resolve6 = (0,external_node_util_namespaceObject.promisify)(this._resolver.resolve6.bind(this._resolver));
+ }
+
+ this._iface = getIfaceInfo();
+
+ this._pending = {};
+ this._nextRemovalTime = false;
+ this._hostnamesToFallback = new Set();
+
+ this.fallbackDuration = fallbackDuration;
+
+ if (fallbackDuration > 0) {
+ const interval = setInterval(() => {
+ this._hostnamesToFallback.clear();
+ }, fallbackDuration * 1000);
+
+ /* istanbul ignore next: There is no `interval.unref()` when running inside an Electron renderer */
+ if (interval.unref) {
+ interval.unref();
+ }
+
+ this._fallbackInterval = interval;
+ }
+
+ this.lookup = this.lookup.bind(this);
+ this.lookupAsync = this.lookupAsync.bind(this);
+ }
+
+ set servers(servers) {
+ this.clear();
+
+ this._resolver.setServers(servers);
+ }
+
+ get servers() {
+ return this._resolver.getServers();
+ }
+
+ lookup(hostname, options, callback) {
+ if (typeof options === 'function') {
+ callback = options;
+ options = {};
+ } else if (typeof options === 'number') {
+ options = {
+ family: options
+ };
+ }
+
+ if (!callback) {
+ throw new Error('Callback must be a function.');
+ }
+
+ // eslint-disable-next-line promise/prefer-await-to-then
+ this.lookupAsync(hostname, options).then(result => {
+ if (options.all) {
+ callback(null, result);
+ } else {
+ callback(null, result.address, result.family, result.expires, result.ttl, result.source);
+ }
+ }, callback);
+ }
+
+ async lookupAsync(hostname, options = {}) {
+ if (typeof options === 'number') {
+ options = {
+ family: options
+ };
+ }
+
+ let cached = await this.query(hostname);
+
+ if (options.family === 6) {
+ const filtered = cached.filter(entry => entry.family === 6);
+
+ if (options.hints & external_node_dns_namespaceObject.V4MAPPED) {
+ if ((supportsALL && options.hints & external_node_dns_namespaceObject.ALL) || filtered.length === 0) {
+ map4to6(cached);
+ } else {
+ cached = filtered;
+ }
+ } else {
+ cached = filtered;
+ }
+ } else if (options.family === 4) {
+ cached = cached.filter(entry => entry.family === 4);
+ }
+
+ if (options.hints & external_node_dns_namespaceObject.ADDRCONFIG) {
+ const {_iface} = this;
+ cached = cached.filter(entry => entry.family === 6 ? _iface.has6 : _iface.has4);
+ }
+
+ if (cached.length === 0) {
+ const error = new Error(`cacheableLookup ENOTFOUND ${hostname}`);
+ error.code = 'ENOTFOUND';
+ error.hostname = hostname;
+
+ throw error;
+ }
+
+ if (options.all) {
+ return cached;
+ }
+
+ return cached[0];
+ }
+
+ async query(hostname) {
+ let source = 'cache';
+ let cached = await this._cache.get(hostname);
+
+ if (cached) {
+ this.stats.cache++;
+ }
+
+ if (!cached) {
+ const pending = this._pending[hostname];
+ if (pending) {
+ this.stats.cache++;
+ cached = await pending;
+ } else {
+ source = 'query';
+ const newPromise = this.queryAndCache(hostname);
+ this._pending[hostname] = newPromise;
+ this.stats.query++;
+ try {
+ cached = await newPromise;
+ } finally {
+ delete this._pending[hostname];
+ }
+ }
+ }
+
+ cached = cached.map(entry => {
+ return {...entry, source};
+ });
+
+ return cached;
+ }
+
+ async _resolve(hostname) {
+ // ANY is unsafe as it doesn't trigger new queries in the underlying server.
+ const [A, AAAA] = await Promise.all([
+ ignoreNoResultErrors(this._resolve4(hostname, ttl)),
+ ignoreNoResultErrors(this._resolve6(hostname, ttl))
+ ]);
+
+ let aTtl = 0;
+ let aaaaTtl = 0;
+ let cacheTtl = 0;
+
+ const now = Date.now();
+
+ for (const entry of A) {
+ entry.family = 4;
+ entry.expires = now + (entry.ttl * 1000);
+
+ aTtl = Math.max(aTtl, entry.ttl);
+ }
+
+ for (const entry of AAAA) {
+ entry.family = 6;
+ entry.expires = now + (entry.ttl * 1000);
+
+ aaaaTtl = Math.max(aaaaTtl, entry.ttl);
+ }
+
+ if (A.length > 0) {
+ if (AAAA.length > 0) {
+ cacheTtl = Math.min(aTtl, aaaaTtl);
+ } else {
+ cacheTtl = aTtl;
+ }
+ } else {
+ cacheTtl = aaaaTtl;
+ }
+
+ return {
+ entries: [
+ ...A,
+ ...AAAA
+ ],
+ cacheTtl
+ };
+ }
+
+ async _lookup(hostname) {
+ try {
+ const [A, AAAA] = await Promise.all([
+ // Passing {all: true} doesn't return all IPv4 and IPv6 entries.
+ // See https://github.com/szmarczak/cacheable-lookup/issues/42
+ ignoreNoResultErrors(this._dnsLookup(hostname, all4)),
+ ignoreNoResultErrors(this._dnsLookup(hostname, all6))
+ ]);
+
+ return {
+ entries: [
+ ...A,
+ ...AAAA
+ ],
+ cacheTtl: 0
+ };
+ } catch {
+ return {
+ entries: [],
+ cacheTtl: 0
+ };
+ }
+ }
+
+ async _set(hostname, data, cacheTtl) {
+ if (this.maxTtl > 0 && cacheTtl > 0) {
+ cacheTtl = Math.min(cacheTtl, this.maxTtl) * 1000;
+ data[kExpires] = Date.now() + cacheTtl;
+
+ try {
+ await this._cache.set(hostname, data, cacheTtl);
+ } catch (error) {
+ this.lookupAsync = async () => {
+ const cacheError = new Error('Cache Error. Please recreate the CacheableLookup instance.');
+ cacheError.cause = error;
+
+ throw cacheError;
+ };
+ }
+
+ if (source_isIterable(this._cache)) {
+ this._tick(cacheTtl);
+ }
+ }
+ }
+
+ async queryAndCache(hostname) {
+ if (this._hostnamesToFallback.has(hostname)) {
+ return this._dnsLookup(hostname, source_all);
+ }
+
+ let query = await this._resolve(hostname);
+
+ if (query.entries.length === 0 && this._dnsLookup) {
+ query = await this._lookup(hostname);
+
+ if (query.entries.length !== 0 && this.fallbackDuration > 0) {
+ // Use `dns.lookup(...)` for that particular hostname
+ this._hostnamesToFallback.add(hostname);
+ }
+ }
+
+ const cacheTtl = query.entries.length === 0 ? this.errorTtl : query.cacheTtl;
+ await this._set(hostname, query.entries, cacheTtl);
+
+ return query.entries;
+ }
+
+ _tick(ms) {
+ const nextRemovalTime = this._nextRemovalTime;
+
+ if (!nextRemovalTime || ms < nextRemovalTime) {
+ clearTimeout(this._removalTimeout);
+
+ this._nextRemovalTime = ms;
+
+ this._removalTimeout = setTimeout(() => {
+ this._nextRemovalTime = false;
+
+ let nextExpiry = Infinity;
+
+ const now = Date.now();
+
+ for (const [hostname, entries] of this._cache) {
+ const expires = entries[kExpires];
+
+ if (now >= expires) {
+ this._cache.delete(hostname);
+ } else if (expires < nextExpiry) {
+ nextExpiry = expires;
+ }
+ }
+
+ if (nextExpiry !== Infinity) {
+ this._tick(nextExpiry - now);
+ }
+ }, ms);
+
+ /* istanbul ignore next: There is no `timeout.unref()` when running inside an Electron renderer */
+ if (this._removalTimeout.unref) {
+ this._removalTimeout.unref();
+ }
+ }
+ }
+
+ install(agent) {
+ verifyAgent(agent);
+
+ if (kCacheableLookupCreateConnection in agent) {
+ throw new Error('CacheableLookup has been already installed');
+ }
+
+ agent[kCacheableLookupCreateConnection] = agent.createConnection;
+ agent[kCacheableLookupInstance] = this;
+
+ agent.createConnection = (options, callback) => {
+ if (!('lookup' in options)) {
+ options.lookup = this.lookup;
+ }
+
+ return agent[kCacheableLookupCreateConnection](options, callback);
+ };
+ }
+
+ uninstall(agent) {
+ verifyAgent(agent);
+
+ if (agent[kCacheableLookupCreateConnection]) {
+ if (agent[kCacheableLookupInstance] !== this) {
+ throw new Error('The agent is not owned by this CacheableLookup instance');
+ }
+
+ agent.createConnection = agent[kCacheableLookupCreateConnection];
+
+ delete agent[kCacheableLookupCreateConnection];
+ delete agent[kCacheableLookupInstance];
+ }
+ }
+
+ updateInterfaceInfo() {
+ const {_iface} = this;
+
+ this._iface = getIfaceInfo();
+
+ if ((_iface.has4 && !this._iface.has4) || (_iface.has6 && !this._iface.has6)) {
+ this._cache.clear();
+ }
+ }
+
+ clear(hostname) {
+ if (hostname) {
+ this._cache.delete(hostname);
+ return;
+ }
+
+ this._cache.clear();
+ }
+}
+
+// EXTERNAL MODULE: ./node_modules/http2-wrapper/source/index.js
+var http2_wrapper_source = __nccwpck_require__(4645);
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/parse-link-header.js
+function parseLinkHeader(link) {
+ const parsed = [];
+ const items = link.split(',');
+ for (const item of items) {
+ // https://tools.ietf.org/html/rfc5988#section-5
+ const [rawUriReference, ...rawLinkParameters] = item.split(';');
+ const trimmedUriReference = rawUriReference.trim();
+ // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with
+ if (trimmedUriReference[0] !== '<' || trimmedUriReference.at(-1) !== '>') {
+ throw new Error(`Invalid format of the Link header reference: ${trimmedUriReference}`);
+ }
+ const reference = trimmedUriReference.slice(1, -1);
+ const parameters = {};
+ if (rawLinkParameters.length === 0) {
+ throw new Error(`Unexpected end of Link header parameters: ${rawLinkParameters.join(';')}`);
+ }
+ for (const rawParameter of rawLinkParameters) {
+ const trimmedRawParameter = rawParameter.trim();
+ const center = trimmedRawParameter.indexOf('=');
+ if (center === -1) {
+ throw new Error(`Failed to parse Link header: ${link}`);
+ }
+ const name = trimmedRawParameter.slice(0, center).trim();
+ const value = trimmedRawParameter.slice(center + 1).trim();
+ parameters[name] = value;
+ }
+ parsed.push({
+ reference,
+ parameters,
+ });
+ }
+ return parsed;
+}
+
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/options.js
+
+
+
+// DO NOT use destructuring for `https.request` and `http.request` as it's not compatible with `nock`.
+
+
+
+
+
+
+
+
+const [major, minor] = external_node_process_namespaceObject.versions.node.split('.').map(Number);
+function validateSearchParameters(searchParameters) {
+ // eslint-disable-next-line guard-for-in
+ for (const key in searchParameters) {
+ const value = searchParameters[key];
+ assert.any([dist.string, dist.number, dist.boolean, dist.null_, dist.undefined], value);
+ }
+}
+const globalCache = new Map();
+let globalDnsCache;
+const getGlobalDnsCache = () => {
+ if (globalDnsCache) {
+ return globalDnsCache;
+ }
+ globalDnsCache = new CacheableLookup();
+ return globalDnsCache;
+};
+const defaultInternals = {
+ request: undefined,
+ agent: {
+ http: undefined,
+ https: undefined,
+ http2: undefined,
+ },
+ h2session: undefined,
+ decompress: true,
+ timeout: {
+ connect: undefined,
+ lookup: undefined,
+ read: undefined,
+ request: undefined,
+ response: undefined,
+ secureConnect: undefined,
+ send: undefined,
+ socket: undefined,
+ },
+ prefixUrl: '',
+ body: undefined,
+ form: undefined,
+ json: undefined,
+ cookieJar: undefined,
+ ignoreInvalidCookies: false,
+ searchParams: undefined,
+ dnsLookup: undefined,
+ dnsCache: undefined,
+ context: {},
+ hooks: {
+ init: [],
+ beforeRequest: [],
+ beforeError: [],
+ beforeRedirect: [],
+ beforeRetry: [],
+ afterResponse: [],
+ },
+ followRedirect: true,
+ maxRedirects: 10,
+ cache: undefined,
+ throwHttpErrors: true,
+ username: '',
+ password: '',
+ http2: false,
+ allowGetBody: false,
+ headers: {
+ 'user-agent': 'got (https://github.com/sindresorhus/got)',
+ },
+ methodRewriting: false,
+ dnsLookupIpVersion: undefined,
+ parseJson: JSON.parse,
+ stringifyJson: JSON.stringify,
+ retry: {
+ limit: 2,
+ methods: [
+ 'GET',
+ 'PUT',
+ 'HEAD',
+ 'DELETE',
+ 'OPTIONS',
+ 'TRACE',
+ ],
+ statusCodes: [
+ 408,
+ 413,
+ 429,
+ 500,
+ 502,
+ 503,
+ 504,
+ 521,
+ 522,
+ 524,
+ ],
+ errorCodes: [
+ 'ETIMEDOUT',
+ 'ECONNRESET',
+ 'EADDRINUSE',
+ 'ECONNREFUSED',
+ 'EPIPE',
+ 'ENOTFOUND',
+ 'ENETUNREACH',
+ 'EAI_AGAIN',
+ ],
+ maxRetryAfter: undefined,
+ calculateDelay: ({ computedValue }) => computedValue,
+ backoffLimit: Number.POSITIVE_INFINITY,
+ noise: 100,
+ },
+ localAddress: undefined,
+ method: 'GET',
+ createConnection: undefined,
+ cacheOptions: {
+ shared: undefined,
+ cacheHeuristic: undefined,
+ immutableMinTimeToLive: undefined,
+ ignoreCargoCult: undefined,
+ },
+ https: {
+ alpnProtocols: undefined,
+ rejectUnauthorized: undefined,
+ checkServerIdentity: undefined,
+ certificateAuthority: undefined,
+ key: undefined,
+ certificate: undefined,
+ passphrase: undefined,
+ pfx: undefined,
+ ciphers: undefined,
+ honorCipherOrder: undefined,
+ minVersion: undefined,
+ maxVersion: undefined,
+ signatureAlgorithms: undefined,
+ tlsSessionLifetime: undefined,
+ dhparam: undefined,
+ ecdhCurve: undefined,
+ certificateRevocationLists: undefined,
+ },
+ encoding: undefined,
+ resolveBodyOnly: false,
+ isStream: false,
+ responseType: 'text',
+ url: undefined,
+ pagination: {
+ transform(response) {
+ if (response.request.options.responseType === 'json') {
+ return response.body;
+ }
+ return JSON.parse(response.body);
+ },
+ paginate({ response }) {
+ const rawLinkHeader = response.headers.link;
+ if (typeof rawLinkHeader !== 'string' || rawLinkHeader.trim() === '') {
+ return false;
+ }
+ const parsed = parseLinkHeader(rawLinkHeader);
+ const next = parsed.find(entry => entry.parameters.rel === 'next' || entry.parameters.rel === '"next"');
+ if (next) {
+ return {
+ url: new URL(next.reference, response.url),
+ };
+ }
+ return false;
+ },
+ filter: () => true,
+ shouldContinue: () => true,
+ countLimit: Number.POSITIVE_INFINITY,
+ backoff: 0,
+ requestLimit: 10000,
+ stackAllItems: false,
+ },
+ setHost: true,
+ maxHeaderSize: undefined,
+ signal: undefined,
+ enableUnixSockets: false,
+};
+const cloneInternals = (internals) => {
+ const { hooks, retry } = internals;
+ const result = {
+ ...internals,
+ context: { ...internals.context },
+ cacheOptions: { ...internals.cacheOptions },
+ https: { ...internals.https },
+ agent: { ...internals.agent },
+ headers: { ...internals.headers },
+ retry: {
+ ...retry,
+ errorCodes: [...retry.errorCodes],
+ methods: [...retry.methods],
+ statusCodes: [...retry.statusCodes],
+ },
+ timeout: { ...internals.timeout },
+ hooks: {
+ init: [...hooks.init],
+ beforeRequest: [...hooks.beforeRequest],
+ beforeError: [...hooks.beforeError],
+ beforeRedirect: [...hooks.beforeRedirect],
+ beforeRetry: [...hooks.beforeRetry],
+ afterResponse: [...hooks.afterResponse],
+ },
+ searchParams: internals.searchParams ? new URLSearchParams(internals.searchParams) : undefined,
+ pagination: { ...internals.pagination },
+ };
+ if (result.url !== undefined) {
+ result.prefixUrl = '';
+ }
+ return result;
+};
+const cloneRaw = (raw) => {
+ const { hooks, retry } = raw;
+ const result = { ...raw };
+ if (dist.object(raw.context)) {
+ result.context = { ...raw.context };
+ }
+ if (dist.object(raw.cacheOptions)) {
+ result.cacheOptions = { ...raw.cacheOptions };
+ }
+ if (dist.object(raw.https)) {
+ result.https = { ...raw.https };
+ }
+ if (dist.object(raw.cacheOptions)) {
+ result.cacheOptions = { ...result.cacheOptions };
+ }
+ if (dist.object(raw.agent)) {
+ result.agent = { ...raw.agent };
+ }
+ if (dist.object(raw.headers)) {
+ result.headers = { ...raw.headers };
+ }
+ if (dist.object(retry)) {
+ result.retry = { ...retry };
+ if (dist.array(retry.errorCodes)) {
+ result.retry.errorCodes = [...retry.errorCodes];
+ }
+ if (dist.array(retry.methods)) {
+ result.retry.methods = [...retry.methods];
+ }
+ if (dist.array(retry.statusCodes)) {
+ result.retry.statusCodes = [...retry.statusCodes];
+ }
+ }
+ if (dist.object(raw.timeout)) {
+ result.timeout = { ...raw.timeout };
+ }
+ if (dist.object(hooks)) {
+ result.hooks = {
+ ...hooks,
+ };
+ if (dist.array(hooks.init)) {
+ result.hooks.init = [...hooks.init];
+ }
+ if (dist.array(hooks.beforeRequest)) {
+ result.hooks.beforeRequest = [...hooks.beforeRequest];
+ }
+ if (dist.array(hooks.beforeError)) {
+ result.hooks.beforeError = [...hooks.beforeError];
+ }
+ if (dist.array(hooks.beforeRedirect)) {
+ result.hooks.beforeRedirect = [...hooks.beforeRedirect];
+ }
+ if (dist.array(hooks.beforeRetry)) {
+ result.hooks.beforeRetry = [...hooks.beforeRetry];
+ }
+ if (dist.array(hooks.afterResponse)) {
+ result.hooks.afterResponse = [...hooks.afterResponse];
+ }
+ }
+ // TODO: raw.searchParams
+ if (dist.object(raw.pagination)) {
+ result.pagination = { ...raw.pagination };
+ }
+ return result;
+};
+const getHttp2TimeoutOption = (internals) => {
+ const delays = [internals.timeout.socket, internals.timeout.connect, internals.timeout.lookup, internals.timeout.request, internals.timeout.secureConnect].filter(delay => typeof delay === 'number');
+ if (delays.length > 0) {
+ return Math.min(...delays);
+ }
+ return undefined;
+};
+const init = (options, withOptions, self) => {
+ const initHooks = options.hooks?.init;
+ if (initHooks) {
+ for (const hook of initHooks) {
+ hook(withOptions, self);
+ }
+ }
+};
+class Options {
+ _unixOptions;
+ _internals;
+ _merging;
+ _init;
+ constructor(input, options, defaults) {
+ assert.any([dist.string, dist.urlInstance, dist.object, dist.undefined], input);
+ assert.any([dist.object, dist.undefined], options);
+ assert.any([dist.object, dist.undefined], defaults);
+ if (input instanceof Options || options instanceof Options) {
+ throw new TypeError('The defaults must be passed as the third argument');
+ }
+ this._internals = cloneInternals(defaults?._internals ?? defaults ?? defaultInternals);
+ this._init = [...(defaults?._init ?? [])];
+ this._merging = false;
+ this._unixOptions = undefined;
+ // This rule allows `finally` to be considered more important.
+ // Meaning no matter the error thrown in the `try` block,
+ // if `finally` throws then the `finally` error will be thrown.
+ //
+ // Yes, we want this. If we set `url` first, then the `url.searchParams`
+ // would get merged. Instead we set the `searchParams` first, then
+ // `url.searchParams` is overwritten as expected.
+ //
+ /* eslint-disable no-unsafe-finally */
+ try {
+ if (dist.plainObject(input)) {
+ try {
+ this.merge(input);
+ this.merge(options);
+ }
+ finally {
+ this.url = input.url;
+ }
+ }
+ else {
+ try {
+ this.merge(options);
+ }
+ finally {
+ if (options?.url !== undefined) {
+ if (input === undefined) {
+ this.url = options.url;
+ }
+ else {
+ throw new TypeError('The `url` option is mutually exclusive with the `input` argument');
+ }
+ }
+ else if (input !== undefined) {
+ this.url = input;
+ }
+ }
+ }
+ }
+ catch (error) {
+ error.options = this;
+ throw error;
+ }
+ /* eslint-enable no-unsafe-finally */
+ }
+ merge(options) {
+ if (!options) {
+ return;
+ }
+ if (options instanceof Options) {
+ for (const init of options._init) {
+ this.merge(init);
+ }
+ return;
+ }
+ options = cloneRaw(options);
+ init(this, options, this);
+ init(options, options, this);
+ this._merging = true;
+ // Always merge `isStream` first
+ if ('isStream' in options) {
+ this.isStream = options.isStream;
+ }
+ try {
+ let push = false;
+ for (const key in options) {
+ // `got.extend()` options
+ if (key === 'mutableDefaults' || key === 'handlers') {
+ continue;
+ }
+ // Never merge `url`
+ if (key === 'url') {
+ continue;
+ }
+ if (!(key in this)) {
+ throw new Error(`Unexpected option: ${key}`);
+ }
+ // @ts-expect-error Type 'unknown' is not assignable to type 'never'.
+ const value = options[key];
+ if (value === undefined) {
+ continue;
+ }
+ // @ts-expect-error Type 'unknown' is not assignable to type 'never'.
+ this[key] = value;
+ push = true;
+ }
+ if (push) {
+ this._init.push(options);
+ }
+ }
+ finally {
+ this._merging = false;
+ }
+ }
+ /**
+ Custom request function.
+ The main purpose of this is to [support HTTP2 using a wrapper](https://github.com/szmarczak/http2-wrapper).
+
+ @default http.request | https.request
+ */
+ get request() {
+ return this._internals.request;
+ }
+ set request(value) {
+ assert.any([dist.function_, dist.undefined], value);
+ this._internals.request = value;
+ }
+ /**
+ An object representing `http`, `https` and `http2` keys for [`http.Agent`](https://nodejs.org/api/http.html#http_class_http_agent), [`https.Agent`](https://nodejs.org/api/https.html#https_class_https_agent) and [`http2wrapper.Agent`](https://github.com/szmarczak/http2-wrapper#new-http2agentoptions) instance.
+ This is necessary because a request to one protocol might redirect to another.
+ In such a scenario, Got will switch over to the right protocol agent for you.
+
+ If a key is not present, it will default to a global agent.
+
+ @example
+ ```
+ import got from 'got';
+ import HttpAgent from 'agentkeepalive';
+
+ const {HttpsAgent} = HttpAgent;
+
+ await got('https://sindresorhus.com', {
+ agent: {
+ http: new HttpAgent(),
+ https: new HttpsAgent()
+ }
+ });
+ ```
+ */
+ get agent() {
+ return this._internals.agent;
+ }
+ set agent(value) {
+ assert.plainObject(value);
+ // eslint-disable-next-line guard-for-in
+ for (const key in value) {
+ if (!(key in this._internals.agent)) {
+ throw new TypeError(`Unexpected agent option: ${key}`);
+ }
+ // @ts-expect-error - No idea why `value[key]` doesn't work here.
+ assert.any([dist.object, dist.undefined], value[key]);
+ }
+ if (this._merging) {
+ Object.assign(this._internals.agent, value);
+ }
+ else {
+ this._internals.agent = { ...value };
+ }
+ }
+ get h2session() {
+ return this._internals.h2session;
+ }
+ set h2session(value) {
+ this._internals.h2session = value;
+ }
+ /**
+ Decompress the response automatically.
+
+ This will set the `accept-encoding` header to `gzip, deflate, br` unless you set it yourself.
+
+ If this is disabled, a compressed response is returned as a `Buffer`.
+ This may be useful if you want to handle decompression yourself or stream the raw compressed data.
+
+ @default true
+ */
+ get decompress() {
+ return this._internals.decompress;
+ }
+ set decompress(value) {
+ assert.boolean(value);
+ this._internals.decompress = value;
+ }
+ /**
+ Milliseconds to wait for the server to end the response before aborting the request with `got.TimeoutError` error (a.k.a. `request` property).
+ By default, there's no timeout.
+
+ This also accepts an `object` with the following fields to constrain the duration of each phase of the request lifecycle:
+
+ - `lookup` starts when a socket is assigned and ends when the hostname has been resolved.
+ Does not apply when using a Unix domain socket.
+ - `connect` starts when `lookup` completes (or when the socket is assigned if lookup does not apply to the request) and ends when the socket is connected.
+ - `secureConnect` starts when `connect` completes and ends when the handshaking process completes (HTTPS only).
+ - `socket` starts when the socket is connected. See [request.setTimeout](https://nodejs.org/api/http.html#http_request_settimeout_timeout_callback).
+ - `response` starts when the request has been written to the socket and ends when the response headers are received.
+ - `send` starts when the socket is connected and ends with the request has been written to the socket.
+ - `request` starts when the request is initiated and ends when the response's end event fires.
+ */
+ get timeout() {
+ // We always return `Delays` here.
+ // It has to be `Delays | number`, otherwise TypeScript will error because the getter and the setter have incompatible types.
+ return this._internals.timeout;
+ }
+ set timeout(value) {
+ assert.plainObject(value);
+ // eslint-disable-next-line guard-for-in
+ for (const key in value) {
+ if (!(key in this._internals.timeout)) {
+ throw new Error(`Unexpected timeout option: ${key}`);
+ }
+ // @ts-expect-error - No idea why `value[key]` doesn't work here.
+ assert.any([dist.number, dist.undefined], value[key]);
+ }
+ if (this._merging) {
+ Object.assign(this._internals.timeout, value);
+ }
+ else {
+ this._internals.timeout = { ...value };
+ }
+ }
+ /**
+ When specified, `prefixUrl` will be prepended to `url`.
+ The prefix can be any valid URL, either relative or absolute.
+ A trailing slash `/` is optional - one will be added automatically.
+
+ __Note__: `prefixUrl` will be ignored if the `url` argument is a URL instance.
+
+ __Note__: Leading slashes in `input` are disallowed when using this option to enforce consistency and avoid confusion.
+ For example, when the prefix URL is `https://example.com/foo` and the input is `/bar`, there's ambiguity whether the resulting URL would become `https://example.com/foo/bar` or `https://example.com/bar`.
+ The latter is used by browsers.
+
+ __Tip__: Useful when used with `got.extend()` to create niche-specific Got instances.
+
+ __Tip__: You can change `prefixUrl` using hooks as long as the URL still includes the `prefixUrl`.
+ If the URL doesn't include it anymore, it will throw.
+
+ @example
+ ```
+ import got from 'got';
+
+ await got('unicorn', {prefixUrl: 'https://cats.com'});
+ //=> 'https://cats.com/unicorn'
+
+ const instance = got.extend({
+ prefixUrl: 'https://google.com'
+ });
+
+ await instance('unicorn', {
+ hooks: {
+ beforeRequest: [
+ options => {
+ options.prefixUrl = 'https://cats.com';
+ }
+ ]
+ }
+ });
+ //=> 'https://cats.com/unicorn'
+ ```
+ */
+ get prefixUrl() {
+ // We always return `string` here.
+ // It has to be `string | URL`, otherwise TypeScript will error because the getter and the setter have incompatible types.
+ return this._internals.prefixUrl;
+ }
+ set prefixUrl(value) {
+ assert.any([dist.string, dist.urlInstance], value);
+ if (value === '') {
+ this._internals.prefixUrl = '';
+ return;
+ }
+ value = value.toString();
+ if (!value.endsWith('/')) {
+ value += '/';
+ }
+ if (this._internals.prefixUrl && this._internals.url) {
+ const { href } = this._internals.url;
+ this._internals.url.href = value + href.slice(this._internals.prefixUrl.length);
+ }
+ this._internals.prefixUrl = value;
+ }
+ /**
+ __Note #1__: The `body` option cannot be used with the `json` or `form` option.
+
+ __Note #2__: If you provide this option, `got.stream()` will be read-only.
+
+ __Note #3__: If you provide a payload with the `GET` or `HEAD` method, it will throw a `TypeError` unless the method is `GET` and the `allowGetBody` option is set to `true`.
+
+ __Note #4__: This option is not enumerable and will not be merged with the instance defaults.
+
+ The `content-length` header will be automatically set if `body` is a `string` / `Buffer` / [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData) / [`form-data` instance](https://github.com/form-data/form-data), and `content-length` and `transfer-encoding` are not manually set in `options.headers`.
+
+ Since Got 12, the `content-length` is not automatically set when `body` is a `fs.createReadStream`.
+ */
+ get body() {
+ return this._internals.body;
+ }
+ set body(value) {
+ assert.any([dist.string, dist.buffer, dist.nodeStream, dist.generator, dist.asyncGenerator, lib_isFormData, dist.undefined], value);
+ if (dist.nodeStream(value)) {
+ assert.truthy(value.readable);
+ }
+ if (value !== undefined) {
+ assert.undefined(this._internals.form);
+ assert.undefined(this._internals.json);
+ }
+ this._internals.body = value;
+ }
+ /**
+ The form body is converted to a query string using [`(new URLSearchParams(object)).toString()`](https://nodejs.org/api/url.html#url_constructor_new_urlsearchparams_obj).
+
+ If the `Content-Type` header is not present, it will be set to `application/x-www-form-urlencoded`.
+
+ __Note #1__: If you provide this option, `got.stream()` will be read-only.
+
+ __Note #2__: This option is not enumerable and will not be merged with the instance defaults.
+ */
+ get form() {
+ return this._internals.form;
+ }
+ set form(value) {
+ assert.any([dist.plainObject, dist.undefined], value);
+ if (value !== undefined) {
+ assert.undefined(this._internals.body);
+ assert.undefined(this._internals.json);
+ }
+ this._internals.form = value;
+ }
+ /**
+ JSON body. If the `Content-Type` header is not set, it will be set to `application/json`.
+
+ __Note #1__: If you provide this option, `got.stream()` will be read-only.
+
+ __Note #2__: This option is not enumerable and will not be merged with the instance defaults.
+ */
+ get json() {
+ return this._internals.json;
+ }
+ set json(value) {
+ if (value !== undefined) {
+ assert.undefined(this._internals.body);
+ assert.undefined(this._internals.form);
+ }
+ this._internals.json = value;
+ }
+ /**
+ The URL to request, as a string, a [`https.request` options object](https://nodejs.org/api/https.html#https_https_request_options_callback), or a [WHATWG `URL`](https://nodejs.org/api/url.html#url_class_url).
+
+ Properties from `options` will override properties in the parsed `url`.
+
+ If no protocol is specified, it will throw a `TypeError`.
+
+ __Note__: The query string is **not** parsed as search params.
+
+ @example
+ ```
+ await got('https://example.com/?query=a b'); //=> https://example.com/?query=a%20b
+ await got('https://example.com/', {searchParams: {query: 'a b'}}); //=> https://example.com/?query=a+b
+
+ // The query string is overridden by `searchParams`
+ await got('https://example.com/?query=a b', {searchParams: {query: 'a b'}}); //=> https://example.com/?query=a+b
+ ```
+ */
+ get url() {
+ return this._internals.url;
+ }
+ set url(value) {
+ assert.any([dist.string, dist.urlInstance, dist.undefined], value);
+ if (value === undefined) {
+ this._internals.url = undefined;
+ return;
+ }
+ if (dist.string(value) && value.startsWith('/')) {
+ throw new Error('`url` must not start with a slash');
+ }
+ const urlString = `${this.prefixUrl}${value.toString()}`;
+ const url = new URL(urlString);
+ this._internals.url = url;
+ if (url.protocol === 'unix:') {
+ url.href = `http://unix${url.pathname}${url.search}`;
+ }
+ if (url.protocol !== 'http:' && url.protocol !== 'https:') {
+ const error = new Error(`Unsupported protocol: ${url.protocol}`);
+ error.code = 'ERR_UNSUPPORTED_PROTOCOL';
+ throw error;
+ }
+ if (this._internals.username) {
+ url.username = this._internals.username;
+ this._internals.username = '';
+ }
+ if (this._internals.password) {
+ url.password = this._internals.password;
+ this._internals.password = '';
+ }
+ if (this._internals.searchParams) {
+ url.search = this._internals.searchParams.toString();
+ this._internals.searchParams = undefined;
+ }
+ if (url.hostname === 'unix') {
+ if (!this._internals.enableUnixSockets) {
+ throw new Error('Using UNIX domain sockets but option `enableUnixSockets` is not enabled');
+ }
+ const matches = /(?.+?):(?.+)/.exec(`${url.pathname}${url.search}`);
+ if (matches?.groups) {
+ const { socketPath, path } = matches.groups;
+ this._unixOptions = {
+ socketPath,
+ path,
+ host: '',
+ };
+ }
+ else {
+ this._unixOptions = undefined;
+ }
+ return;
+ }
+ this._unixOptions = undefined;
+ }
+ /**
+ Cookie support. You don't have to care about parsing or how to store them.
+
+ __Note__: If you provide this option, `options.headers.cookie` will be overridden.
+ */
+ get cookieJar() {
+ return this._internals.cookieJar;
+ }
+ set cookieJar(value) {
+ assert.any([dist.object, dist.undefined], value);
+ if (value === undefined) {
+ this._internals.cookieJar = undefined;
+ return;
+ }
+ let { setCookie, getCookieString } = value;
+ assert.function_(setCookie);
+ assert.function_(getCookieString);
+ /* istanbul ignore next: Horrible `tough-cookie` v3 check */
+ if (setCookie.length === 4 && getCookieString.length === 0) {
+ setCookie = (0,external_node_util_namespaceObject.promisify)(setCookie.bind(value));
+ getCookieString = (0,external_node_util_namespaceObject.promisify)(getCookieString.bind(value));
+ this._internals.cookieJar = {
+ setCookie,
+ getCookieString: getCookieString,
+ };
+ }
+ else {
+ this._internals.cookieJar = value;
+ }
+ }
+ /**
+ You can abort the `request` using [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).
+
+ @example
+ ```
+ import got from 'got';
+
+ const abortController = new AbortController();
+
+ const request = got('https://httpbin.org/anything', {
+ signal: abortController.signal
+ });
+
+ setTimeout(() => {
+ abortController.abort();
+ }, 100);
+ ```
+ */
+ get signal() {
+ return this._internals.signal;
+ }
+ set signal(value) {
+ assert.object(value);
+ this._internals.signal = value;
+ }
+ /**
+ Ignore invalid cookies instead of throwing an error.
+ Only useful when the `cookieJar` option has been set. Not recommended.
+
+ @default false
+ */
+ get ignoreInvalidCookies() {
+ return this._internals.ignoreInvalidCookies;
+ }
+ set ignoreInvalidCookies(value) {
+ assert.boolean(value);
+ this._internals.ignoreInvalidCookies = value;
+ }
+ /**
+ Query string that will be added to the request URL.
+ This will override the query string in `url`.
+
+ If you need to pass in an array, you can do it using a `URLSearchParams` instance.
+
+ @example
+ ```
+ import got from 'got';
+
+ const searchParams = new URLSearchParams([['key', 'a'], ['key', 'b']]);
+
+ await got('https://example.com', {searchParams});
+
+ console.log(searchParams.toString());
+ //=> 'key=a&key=b'
+ ```
+ */
+ get searchParams() {
+ if (this._internals.url) {
+ return this._internals.url.searchParams;
+ }
+ if (this._internals.searchParams === undefined) {
+ this._internals.searchParams = new URLSearchParams();
+ }
+ return this._internals.searchParams;
+ }
+ set searchParams(value) {
+ assert.any([dist.string, dist.object, dist.undefined], value);
+ const url = this._internals.url;
+ if (value === undefined) {
+ this._internals.searchParams = undefined;
+ if (url) {
+ url.search = '';
+ }
+ return;
+ }
+ const searchParameters = this.searchParams;
+ let updated;
+ if (dist.string(value)) {
+ updated = new URLSearchParams(value);
+ }
+ else if (value instanceof URLSearchParams) {
+ updated = value;
+ }
+ else {
+ validateSearchParameters(value);
+ updated = new URLSearchParams();
+ // eslint-disable-next-line guard-for-in
+ for (const key in value) {
+ const entry = value[key];
+ if (entry === null) {
+ updated.append(key, '');
+ }
+ else if (entry === undefined) {
+ searchParameters.delete(key);
+ }
+ else {
+ updated.append(key, entry);
+ }
+ }
+ }
+ if (this._merging) {
+ // These keys will be replaced
+ for (const key of updated.keys()) {
+ searchParameters.delete(key);
+ }
+ for (const [key, value] of updated) {
+ searchParameters.append(key, value);
+ }
+ }
+ else if (url) {
+ url.search = searchParameters.toString();
+ }
+ else {
+ this._internals.searchParams = searchParameters;
+ }
+ }
+ get searchParameters() {
+ throw new Error('The `searchParameters` option does not exist. Use `searchParams` instead.');
+ }
+ set searchParameters(_value) {
+ throw new Error('The `searchParameters` option does not exist. Use `searchParams` instead.');
+ }
+ get dnsLookup() {
+ return this._internals.dnsLookup;
+ }
+ set dnsLookup(value) {
+ assert.any([dist.function_, dist.undefined], value);
+ this._internals.dnsLookup = value;
+ }
+ /**
+ An instance of [`CacheableLookup`](https://github.com/szmarczak/cacheable-lookup) used for making DNS lookups.
+ Useful when making lots of requests to different *public* hostnames.
+
+ `CacheableLookup` uses `dns.resolver4(..)` and `dns.resolver6(...)` under the hood and fall backs to `dns.lookup(...)` when the first two fail, which may lead to additional delay.
+
+ __Note__: This should stay disabled when making requests to internal hostnames such as `localhost`, `database.local` etc.
+
+ @default false
+ */
+ get dnsCache() {
+ return this._internals.dnsCache;
+ }
+ set dnsCache(value) {
+ assert.any([dist.object, dist.boolean, dist.undefined], value);
+ if (value === true) {
+ this._internals.dnsCache = getGlobalDnsCache();
+ }
+ else if (value === false) {
+ this._internals.dnsCache = undefined;
+ }
+ else {
+ this._internals.dnsCache = value;
+ }
+ }
+ /**
+ User data. `context` is shallow merged and enumerable. If it contains non-enumerable properties they will NOT be merged.
+
+ @example
+ ```
+ import got from 'got';
+
+ const instance = got.extend({
+ hooks: {
+ beforeRequest: [
+ options => {
+ if (!options.context || !options.context.token) {
+ throw new Error('Token required');
+ }
+
+ options.headers.token = options.context.token;
+ }
+ ]
+ }
+ });
+
+ const context = {
+ token: 'secret'
+ };
+
+ const response = await instance('https://httpbin.org/headers', {context});
+
+ // Let's see the headers
+ console.log(response.body);
+ ```
+ */
+ get context() {
+ return this._internals.context;
+ }
+ set context(value) {
+ assert.object(value);
+ if (this._merging) {
+ Object.assign(this._internals.context, value);
+ }
+ else {
+ this._internals.context = { ...value };
+ }
+ }
+ /**
+ Hooks allow modifications during the request lifecycle.
+ Hook functions may be async and are run serially.
+ */
+ get hooks() {
+ return this._internals.hooks;
+ }
+ set hooks(value) {
+ assert.object(value);
+ // eslint-disable-next-line guard-for-in
+ for (const knownHookEvent in value) {
+ if (!(knownHookEvent in this._internals.hooks)) {
+ throw new Error(`Unexpected hook event: ${knownHookEvent}`);
+ }
+ const typedKnownHookEvent = knownHookEvent;
+ const hooks = value[typedKnownHookEvent];
+ assert.any([dist.array, dist.undefined], hooks);
+ if (hooks) {
+ for (const hook of hooks) {
+ assert.function_(hook);
+ }
+ }
+ if (this._merging) {
+ if (hooks) {
+ // @ts-expect-error FIXME
+ this._internals.hooks[typedKnownHookEvent].push(...hooks);
+ }
+ }
+ else {
+ if (!hooks) {
+ throw new Error(`Missing hook event: ${knownHookEvent}`);
+ }
+ // @ts-expect-error FIXME
+ this._internals.hooks[knownHookEvent] = [...hooks];
+ }
+ }
+ }
+ /**
+ Whether redirect responses should be followed automatically.
+
+ Optionally, pass a function to dynamically decide based on the response object.
+
+ Note that if a `303` is sent by the server in response to any request type (`POST`, `DELETE`, etc.), Got will automatically request the resource pointed to in the location header via `GET`.
+ This is in accordance with [the spec](https://tools.ietf.org/html/rfc7231#section-6.4.4). You can optionally turn on this behavior also for other redirect codes - see `methodRewriting`.
+
+ @default true
+ */
+ get followRedirect() {
+ return this._internals.followRedirect;
+ }
+ set followRedirect(value) {
+ assert.any([dist.boolean, dist.function_], value);
+ this._internals.followRedirect = value;
+ }
+ get followRedirects() {
+ throw new TypeError('The `followRedirects` option does not exist. Use `followRedirect` instead.');
+ }
+ set followRedirects(_value) {
+ throw new TypeError('The `followRedirects` option does not exist. Use `followRedirect` instead.');
+ }
+ /**
+ If exceeded, the request will be aborted and a `MaxRedirectsError` will be thrown.
+
+ @default 10
+ */
+ get maxRedirects() {
+ return this._internals.maxRedirects;
+ }
+ set maxRedirects(value) {
+ assert.number(value);
+ this._internals.maxRedirects = value;
+ }
+ /**
+ A cache adapter instance for storing cached response data.
+
+ @default false
+ */
+ get cache() {
+ return this._internals.cache;
+ }
+ set cache(value) {
+ assert.any([dist.object, dist.string, dist.boolean, dist.undefined], value);
+ if (value === true) {
+ this._internals.cache = globalCache;
+ }
+ else if (value === false) {
+ this._internals.cache = undefined;
+ }
+ else {
+ this._internals.cache = value;
+ }
+ }
+ /**
+ Determines if a `got.HTTPError` is thrown for unsuccessful responses.
+
+ If this is disabled, requests that encounter an error status code will be resolved with the `response` instead of throwing.
+ This may be useful if you are checking for resource availability and are expecting error responses.
+
+ @default true
+ */
+ get throwHttpErrors() {
+ return this._internals.throwHttpErrors;
+ }
+ set throwHttpErrors(value) {
+ assert.boolean(value);
+ this._internals.throwHttpErrors = value;
+ }
+ get username() {
+ const url = this._internals.url;
+ const value = url ? url.username : this._internals.username;
+ return decodeURIComponent(value);
+ }
+ set username(value) {
+ assert.string(value);
+ const url = this._internals.url;
+ const fixedValue = encodeURIComponent(value);
+ if (url) {
+ url.username = fixedValue;
+ }
+ else {
+ this._internals.username = fixedValue;
+ }
+ }
+ get password() {
+ const url = this._internals.url;
+ const value = url ? url.password : this._internals.password;
+ return decodeURIComponent(value);
+ }
+ set password(value) {
+ assert.string(value);
+ const url = this._internals.url;
+ const fixedValue = encodeURIComponent(value);
+ if (url) {
+ url.password = fixedValue;
+ }
+ else {
+ this._internals.password = fixedValue;
+ }
+ }
+ /**
+ If set to `true`, Got will additionally accept HTTP2 requests.
+
+ It will choose either HTTP/1.1 or HTTP/2 depending on the ALPN protocol.
+
+ __Note__: This option requires Node.js 15.10.0 or newer as HTTP/2 support on older Node.js versions is very buggy.
+
+ __Note__: Overriding `options.request` will disable HTTP2 support.
+
+ @default false
+
+ @example
+ ```
+ import got from 'got';
+
+ const {headers} = await got('https://nghttp2.org/httpbin/anything', {http2: true});
+
+ console.log(headers.via);
+ //=> '2 nghttpx'
+ ```
+ */
+ get http2() {
+ return this._internals.http2;
+ }
+ set http2(value) {
+ assert.boolean(value);
+ this._internals.http2 = value;
+ }
+ /**
+ Set this to `true` to allow sending body for the `GET` method.
+ However, the [HTTP/2 specification](https://tools.ietf.org/html/rfc7540#section-8.1.3) says that `An HTTP GET request includes request header fields and no payload body`, therefore when using the HTTP/2 protocol this option will have no effect.
+ This option is only meant to interact with non-compliant servers when you have no other choice.
+
+ __Note__: The [RFC 7231](https://tools.ietf.org/html/rfc7231#section-4.3.1) doesn't specify any particular behavior for the GET method having a payload, therefore __it's considered an [anti-pattern](https://en.wikipedia.org/wiki/Anti-pattern)__.
+
+ @default false
+ */
+ get allowGetBody() {
+ return this._internals.allowGetBody;
+ }
+ set allowGetBody(value) {
+ assert.boolean(value);
+ this._internals.allowGetBody = value;
+ }
+ /**
+ Request headers.
+
+ Existing headers will be overwritten. Headers set to `undefined` will be omitted.
+
+ @default {}
+ */
+ get headers() {
+ return this._internals.headers;
+ }
+ set headers(value) {
+ assert.plainObject(value);
+ if (this._merging) {
+ Object.assign(this._internals.headers, lowercaseKeys(value));
+ }
+ else {
+ this._internals.headers = lowercaseKeys(value);
+ }
+ }
+ /**
+ Specifies if the HTTP request method should be [rewritten as `GET`](https://tools.ietf.org/html/rfc7231#section-6.4) on redirects.
+
+ As the [specification](https://tools.ietf.org/html/rfc7231#section-6.4) prefers to rewrite the HTTP method only on `303` responses, this is Got's default behavior.
+ Setting `methodRewriting` to `true` will also rewrite `301` and `302` responses, as allowed by the spec. This is the behavior followed by `curl` and browsers.
+
+ __Note__: Got never performs method rewriting on `307` and `308` responses, as this is [explicitly prohibited by the specification](https://www.rfc-editor.org/rfc/rfc7231#section-6.4.7).
+
+ @default false
+ */
+ get methodRewriting() {
+ return this._internals.methodRewriting;
+ }
+ set methodRewriting(value) {
+ assert.boolean(value);
+ this._internals.methodRewriting = value;
+ }
+ /**
+ Indicates which DNS record family to use.
+
+ Values:
+ - `undefined`: IPv4 (if present) or IPv6
+ - `4`: Only IPv4
+ - `6`: Only IPv6
+
+ @default undefined
+ */
+ get dnsLookupIpVersion() {
+ return this._internals.dnsLookupIpVersion;
+ }
+ set dnsLookupIpVersion(value) {
+ if (value !== undefined && value !== 4 && value !== 6) {
+ throw new TypeError(`Invalid DNS lookup IP version: ${value}`);
+ }
+ this._internals.dnsLookupIpVersion = value;
+ }
+ /**
+ A function used to parse JSON responses.
+
+ @example
+ ```
+ import got from 'got';
+ import Bourne from '@hapi/bourne';
+
+ const parsed = await got('https://example.com', {
+ parseJson: text => Bourne.parse(text)
+ }).json();
+
+ console.log(parsed);
+ ```
+ */
+ get parseJson() {
+ return this._internals.parseJson;
+ }
+ set parseJson(value) {
+ assert.function_(value);
+ this._internals.parseJson = value;
+ }
+ /**
+ A function used to stringify the body of JSON requests.
+
+ @example
+ ```
+ import got from 'got';
+
+ await got.post('https://example.com', {
+ stringifyJson: object => JSON.stringify(object, (key, value) => {
+ if (key.startsWith('_')) {
+ return;
+ }
+
+ return value;
+ }),
+ json: {
+ some: 'payload',
+ _ignoreMe: 1234
+ }
+ });
+ ```
+
+ @example
+ ```
+ import got from 'got';
+
+ await got.post('https://example.com', {
+ stringifyJson: object => JSON.stringify(object, (key, value) => {
+ if (typeof value === 'number') {
+ return value.toString();
+ }
+
+ return value;
+ }),
+ json: {
+ some: 'payload',
+ number: 1
+ }
+ });
+ ```
+ */
+ get stringifyJson() {
+ return this._internals.stringifyJson;
+ }
+ set stringifyJson(value) {
+ assert.function_(value);
+ this._internals.stringifyJson = value;
+ }
+ /**
+ An object representing `limit`, `calculateDelay`, `methods`, `statusCodes`, `maxRetryAfter` and `errorCodes` fields for maximum retry count, retry handler, allowed methods, allowed status codes, maximum [`Retry-After`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After) time and allowed error codes.
+
+ Delays between retries counts with function `1000 * Math.pow(2, retry) + Math.random() * 100`, where `retry` is attempt number (starts from 1).
+
+ The `calculateDelay` property is a `function` that receives an object with `attemptCount`, `retryOptions`, `error` and `computedValue` properties for current retry count, the retry options, error and default computed value.
+ The function must return a delay in milliseconds (or a Promise resolving with it) (`0` return value cancels retry).
+
+ By default, it retries *only* on the specified methods, status codes, and on these network errors:
+
+ - `ETIMEDOUT`: One of the [timeout](#timeout) limits were reached.
+ - `ECONNRESET`: Connection was forcibly closed by a peer.
+ - `EADDRINUSE`: Could not bind to any free port.
+ - `ECONNREFUSED`: Connection was refused by the server.
+ - `EPIPE`: The remote side of the stream being written has been closed.
+ - `ENOTFOUND`: Couldn't resolve the hostname to an IP address.
+ - `ENETUNREACH`: No internet connection.
+ - `EAI_AGAIN`: DNS lookup timed out.
+
+ __Note__: If `maxRetryAfter` is set to `undefined`, it will use `options.timeout`.
+ __Note__: If [`Retry-After`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After) header is greater than `maxRetryAfter`, it will cancel the request.
+ */
+ get retry() {
+ return this._internals.retry;
+ }
+ set retry(value) {
+ assert.plainObject(value);
+ assert.any([dist.function_, dist.undefined], value.calculateDelay);
+ assert.any([dist.number, dist.undefined], value.maxRetryAfter);
+ assert.any([dist.number, dist.undefined], value.limit);
+ assert.any([dist.array, dist.undefined], value.methods);
+ assert.any([dist.array, dist.undefined], value.statusCodes);
+ assert.any([dist.array, dist.undefined], value.errorCodes);
+ assert.any([dist.number, dist.undefined], value.noise);
+ if (value.noise && Math.abs(value.noise) > 100) {
+ throw new Error(`The maximum acceptable retry noise is +/- 100ms, got ${value.noise}`);
+ }
+ for (const key in value) {
+ if (!(key in this._internals.retry)) {
+ throw new Error(`Unexpected retry option: ${key}`);
+ }
+ }
+ if (this._merging) {
+ Object.assign(this._internals.retry, value);
+ }
+ else {
+ this._internals.retry = { ...value };
+ }
+ const { retry } = this._internals;
+ retry.methods = [...new Set(retry.methods.map(method => method.toUpperCase()))];
+ retry.statusCodes = [...new Set(retry.statusCodes)];
+ retry.errorCodes = [...new Set(retry.errorCodes)];
+ }
+ /**
+ From `http.RequestOptions`.
+
+ The IP address used to send the request from.
+ */
+ get localAddress() {
+ return this._internals.localAddress;
+ }
+ set localAddress(value) {
+ assert.any([dist.string, dist.undefined], value);
+ this._internals.localAddress = value;
+ }
+ /**
+ The HTTP method used to make the request.
+
+ @default 'GET'
+ */
+ get method() {
+ return this._internals.method;
+ }
+ set method(value) {
+ assert.string(value);
+ this._internals.method = value.toUpperCase();
+ }
+ get createConnection() {
+ return this._internals.createConnection;
+ }
+ set createConnection(value) {
+ assert.any([dist.function_, dist.undefined], value);
+ this._internals.createConnection = value;
+ }
+ /**
+ From `http-cache-semantics`
+
+ @default {}
+ */
+ get cacheOptions() {
+ return this._internals.cacheOptions;
+ }
+ set cacheOptions(value) {
+ assert.plainObject(value);
+ assert.any([dist.boolean, dist.undefined], value.shared);
+ assert.any([dist.number, dist.undefined], value.cacheHeuristic);
+ assert.any([dist.number, dist.undefined], value.immutableMinTimeToLive);
+ assert.any([dist.boolean, dist.undefined], value.ignoreCargoCult);
+ for (const key in value) {
+ if (!(key in this._internals.cacheOptions)) {
+ throw new Error(`Cache option \`${key}\` does not exist`);
+ }
+ }
+ if (this._merging) {
+ Object.assign(this._internals.cacheOptions, value);
+ }
+ else {
+ this._internals.cacheOptions = { ...value };
+ }
+ }
+ /**
+ Options for the advanced HTTPS API.
+ */
+ get https() {
+ return this._internals.https;
+ }
+ set https(value) {
+ assert.plainObject(value);
+ assert.any([dist.boolean, dist.undefined], value.rejectUnauthorized);
+ assert.any([dist.function_, dist.undefined], value.checkServerIdentity);
+ assert.any([dist.string, dist.object, dist.array, dist.undefined], value.certificateAuthority);
+ assert.any([dist.string, dist.object, dist.array, dist.undefined], value.key);
+ assert.any([dist.string, dist.object, dist.array, dist.undefined], value.certificate);
+ assert.any([dist.string, dist.undefined], value.passphrase);
+ assert.any([dist.string, dist.buffer, dist.array, dist.undefined], value.pfx);
+ assert.any([dist.array, dist.undefined], value.alpnProtocols);
+ assert.any([dist.string, dist.undefined], value.ciphers);
+ assert.any([dist.string, dist.buffer, dist.undefined], value.dhparam);
+ assert.any([dist.string, dist.undefined], value.signatureAlgorithms);
+ assert.any([dist.string, dist.undefined], value.minVersion);
+ assert.any([dist.string, dist.undefined], value.maxVersion);
+ assert.any([dist.boolean, dist.undefined], value.honorCipherOrder);
+ assert.any([dist.number, dist.undefined], value.tlsSessionLifetime);
+ assert.any([dist.string, dist.undefined], value.ecdhCurve);
+ assert.any([dist.string, dist.buffer, dist.array, dist.undefined], value.certificateRevocationLists);
+ for (const key in value) {
+ if (!(key in this._internals.https)) {
+ throw new Error(`HTTPS option \`${key}\` does not exist`);
+ }
+ }
+ if (this._merging) {
+ Object.assign(this._internals.https, value);
+ }
+ else {
+ this._internals.https = { ...value };
+ }
+ }
+ /**
+ [Encoding](https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings) to be used on `setEncoding` of the response data.
+
+ To get a [`Buffer`](https://nodejs.org/api/buffer.html), you need to set `responseType` to `buffer` instead.
+ Don't set this option to `null`.
+
+ __Note__: This doesn't affect streams! Instead, you need to do `got.stream(...).setEncoding(encoding)`.
+
+ @default 'utf-8'
+ */
+ get encoding() {
+ return this._internals.encoding;
+ }
+ set encoding(value) {
+ if (value === null) {
+ throw new TypeError('To get a Buffer, set `options.responseType` to `buffer` instead');
+ }
+ assert.any([dist.string, dist.undefined], value);
+ this._internals.encoding = value;
+ }
+ /**
+ When set to `true` the promise will return the Response body instead of the Response object.
+
+ @default false
+ */
+ get resolveBodyOnly() {
+ return this._internals.resolveBodyOnly;
+ }
+ set resolveBodyOnly(value) {
+ assert.boolean(value);
+ this._internals.resolveBodyOnly = value;
+ }
+ /**
+ Returns a `Stream` instead of a `Promise`.
+ This is equivalent to calling `got.stream(url, options?)`.
+
+ @default false
+ */
+ get isStream() {
+ return this._internals.isStream;
+ }
+ set isStream(value) {
+ assert.boolean(value);
+ this._internals.isStream = value;
+ }
+ /**
+ The parsing method.
+
+ The promise also has `.text()`, `.json()` and `.buffer()` methods which return another Got promise for the parsed body.
+
+ It's like setting the options to `{responseType: 'json', resolveBodyOnly: true}` but without affecting the main Got promise.
+
+ __Note__: When using streams, this option is ignored.
+
+ @example
+ ```
+ const responsePromise = got(url);
+ const bufferPromise = responsePromise.buffer();
+ const jsonPromise = responsePromise.json();
+
+ const [response, buffer, json] = Promise.all([responsePromise, bufferPromise, jsonPromise]);
+ // `response` is an instance of Got Response
+ // `buffer` is an instance of Buffer
+ // `json` is an object
+ ```
+
+ @example
+ ```
+ // This
+ const body = await got(url).json();
+
+ // is semantically the same as this
+ const body = await got(url, {responseType: 'json', resolveBodyOnly: true});
+ ```
+ */
+ get responseType() {
+ return this._internals.responseType;
+ }
+ set responseType(value) {
+ if (value === undefined) {
+ this._internals.responseType = 'text';
+ return;
+ }
+ if (value !== 'text' && value !== 'buffer' && value !== 'json') {
+ throw new Error(`Invalid \`responseType\` option: ${value}`);
+ }
+ this._internals.responseType = value;
+ }
+ get pagination() {
+ return this._internals.pagination;
+ }
+ set pagination(value) {
+ assert.object(value);
+ if (this._merging) {
+ Object.assign(this._internals.pagination, value);
+ }
+ else {
+ this._internals.pagination = value;
+ }
+ }
+ get auth() {
+ throw new Error('Parameter `auth` is deprecated. Use `username` / `password` instead.');
+ }
+ set auth(_value) {
+ throw new Error('Parameter `auth` is deprecated. Use `username` / `password` instead.');
+ }
+ get setHost() {
+ return this._internals.setHost;
+ }
+ set setHost(value) {
+ assert.boolean(value);
+ this._internals.setHost = value;
+ }
+ get maxHeaderSize() {
+ return this._internals.maxHeaderSize;
+ }
+ set maxHeaderSize(value) {
+ assert.any([dist.number, dist.undefined], value);
+ this._internals.maxHeaderSize = value;
+ }
+ get enableUnixSockets() {
+ return this._internals.enableUnixSockets;
+ }
+ set enableUnixSockets(value) {
+ assert.boolean(value);
+ this._internals.enableUnixSockets = value;
+ }
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ toJSON() {
+ return { ...this._internals };
+ }
+ [Symbol.for('nodejs.util.inspect.custom')](_depth, options) {
+ return (0,external_node_util_namespaceObject.inspect)(this._internals, options);
+ }
+ createNativeRequestOptions() {
+ const internals = this._internals;
+ const url = internals.url;
+ let agent;
+ if (url.protocol === 'https:') {
+ agent = internals.http2 ? internals.agent : internals.agent.https;
+ }
+ else {
+ agent = internals.agent.http;
+ }
+ const { https } = internals;
+ let { pfx } = https;
+ if (dist.array(pfx) && dist.plainObject(pfx[0])) {
+ pfx = pfx.map(object => ({
+ buf: object.buffer,
+ passphrase: object.passphrase,
+ }));
+ }
+ return {
+ ...internals.cacheOptions,
+ ...this._unixOptions,
+ // HTTPS options
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ ALPNProtocols: https.alpnProtocols,
+ ca: https.certificateAuthority,
+ cert: https.certificate,
+ key: https.key,
+ passphrase: https.passphrase,
+ pfx: https.pfx,
+ rejectUnauthorized: https.rejectUnauthorized,
+ checkServerIdentity: https.checkServerIdentity ?? external_node_tls_namespaceObject.checkServerIdentity,
+ ciphers: https.ciphers,
+ honorCipherOrder: https.honorCipherOrder,
+ minVersion: https.minVersion,
+ maxVersion: https.maxVersion,
+ sigalgs: https.signatureAlgorithms,
+ sessionTimeout: https.tlsSessionLifetime,
+ dhparam: https.dhparam,
+ ecdhCurve: https.ecdhCurve,
+ crl: https.certificateRevocationLists,
+ // HTTP options
+ lookup: internals.dnsLookup ?? internals.dnsCache?.lookup,
+ family: internals.dnsLookupIpVersion,
+ agent,
+ setHost: internals.setHost,
+ method: internals.method,
+ maxHeaderSize: internals.maxHeaderSize,
+ localAddress: internals.localAddress,
+ headers: internals.headers,
+ createConnection: internals.createConnection,
+ timeout: internals.http2 ? getHttp2TimeoutOption(internals) : undefined,
+ // HTTP/2 options
+ h2session: internals.h2session,
+ };
+ }
+ getRequestFunction() {
+ const url = this._internals.url;
+ const { request } = this._internals;
+ if (!request && url) {
+ return this.getFallbackRequestFunction();
+ }
+ return request;
+ }
+ getFallbackRequestFunction() {
+ const url = this._internals.url;
+ if (!url) {
+ return;
+ }
+ if (url.protocol === 'https:') {
+ if (this._internals.http2) {
+ if (major < 15 || (major === 15 && minor < 10)) {
+ const error = new Error('To use the `http2` option, install Node.js 15.10.0 or above');
+ error.code = 'EUNSUPPORTED';
+ throw error;
+ }
+ return http2_wrapper_source.auto;
+ }
+ return external_node_https_namespaceObject.request;
+ }
+ return external_node_http_namespaceObject.request;
+ }
+ freeze() {
+ const options = this._internals;
+ Object.freeze(options);
+ Object.freeze(options.hooks);
+ Object.freeze(options.hooks.afterResponse);
+ Object.freeze(options.hooks.beforeError);
+ Object.freeze(options.hooks.beforeRedirect);
+ Object.freeze(options.hooks.beforeRequest);
+ Object.freeze(options.hooks.beforeRetry);
+ Object.freeze(options.hooks.init);
+ Object.freeze(options.https);
+ Object.freeze(options.cacheOptions);
+ Object.freeze(options.agent);
+ Object.freeze(options.headers);
+ Object.freeze(options.timeout);
+ Object.freeze(options.retry);
+ Object.freeze(options.retry.errorCodes);
+ Object.freeze(options.retry.methods);
+ Object.freeze(options.retry.statusCodes);
+ }
+}
+
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/response.js
+
+const isResponseOk = (response) => {
+ const { statusCode } = response;
+ const { followRedirect } = response.request.options;
+ const shouldFollow = typeof followRedirect === 'function' ? followRedirect(response) : followRedirect;
+ const limitStatusCode = shouldFollow ? 299 : 399;
+ return (statusCode >= 200 && statusCode <= limitStatusCode) || statusCode === 304;
+};
+/**
+An error to be thrown when server response code is 2xx, and parsing body fails.
+Includes a `response` property.
+*/
+class ParseError extends RequestError {
+ constructor(error, response) {
+ const { options } = response.request;
+ super(`${error.message} in "${options.url.toString()}"`, error, response.request);
+ this.name = 'ParseError';
+ this.code = 'ERR_BODY_PARSE_FAILURE';
+ }
+}
+const parseBody = (response, responseType, parseJson, encoding) => {
+ const { rawBody } = response;
+ try {
+ if (responseType === 'text') {
+ return rawBody.toString(encoding);
+ }
+ if (responseType === 'json') {
+ return rawBody.length === 0 ? '' : parseJson(rawBody.toString(encoding));
+ }
+ if (responseType === 'buffer') {
+ return rawBody;
+ }
+ }
+ catch (error) {
+ throw new ParseError(error, response);
+ }
+ throw new ParseError({
+ message: `Unknown body type '${responseType}'`,
+ name: 'Error',
+ }, response);
+};
+
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/is-client-request.js
+function isClientRequest(clientRequest) {
+ return clientRequest.writable && !clientRequest.writableEnded;
+}
+/* harmony default export */ const is_client_request = (isClientRequest);
+
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/utils/is-unix-socket-url.js
+// eslint-disable-next-line @typescript-eslint/naming-convention
+function isUnixSocketURL(url) {
+ return url.protocol === 'unix:' || url.hostname === 'unix';
+}
+
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/core/index.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+const supportsBrotli = dist.string(external_node_process_namespaceObject.versions.brotli);
+const methodsWithoutBody = new Set(['GET', 'HEAD']);
+const cacheableStore = new WeakableMap();
+const redirectCodes = new Set([300, 301, 302, 303, 304, 307, 308]);
+const proxiedRequestEvents = [
+ 'socket',
+ 'connect',
+ 'continue',
+ 'information',
+ 'upgrade',
+];
+const core_noop = () => { };
+class Request extends external_node_stream_namespaceObject.Duplex {
+ // @ts-expect-error - Ignoring for now.
+ ['constructor'];
+ _noPipe;
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/9568
+ options;
+ response;
+ requestUrl;
+ redirectUrls;
+ retryCount;
+ _stopRetry;
+ _downloadedSize;
+ _uploadedSize;
+ _stopReading;
+ _pipedServerResponses;
+ _request;
+ _responseSize;
+ _bodySize;
+ _unproxyEvents;
+ _isFromCache;
+ _cannotHaveBody;
+ _triggerRead;
+ _cancelTimeouts;
+ _removeListeners;
+ _nativeResponse;
+ _flushed;
+ _aborted;
+ // We need this because `this._request` if `undefined` when using cache
+ _requestInitialized;
+ constructor(url, options, defaults) {
+ super({
+ // Don't destroy immediately, as the error may be emitted on unsuccessful retry
+ autoDestroy: false,
+ // It needs to be zero because we're just proxying the data to another stream
+ highWaterMark: 0,
+ });
+ this._downloadedSize = 0;
+ this._uploadedSize = 0;
+ this._stopReading = false;
+ this._pipedServerResponses = new Set();
+ this._cannotHaveBody = false;
+ this._unproxyEvents = core_noop;
+ this._triggerRead = false;
+ this._cancelTimeouts = core_noop;
+ this._removeListeners = core_noop;
+ this._jobs = [];
+ this._flushed = false;
+ this._requestInitialized = false;
+ this._aborted = false;
+ this.redirectUrls = [];
+ this.retryCount = 0;
+ this._stopRetry = core_noop;
+ this.on('pipe', (source) => {
+ if (source?.headers) {
+ Object.assign(this.options.headers, source.headers);
+ }
+ });
+ this.on('newListener', event => {
+ if (event === 'retry' && this.listenerCount('retry') > 0) {
+ throw new Error('A retry listener has been attached already.');
+ }
+ });
+ try {
+ this.options = new Options(url, options, defaults);
+ if (!this.options.url) {
+ if (this.options.prefixUrl === '') {
+ throw new TypeError('Missing `url` property');
+ }
+ this.options.url = '';
+ }
+ this.requestUrl = this.options.url;
+ }
+ catch (error) {
+ const { options } = error;
+ if (options) {
+ this.options = options;
+ }
+ this.flush = async () => {
+ this.flush = async () => { };
+ this.destroy(error);
+ };
+ return;
+ }
+ // Important! If you replace `body` in a handler with another stream, make sure it's readable first.
+ // The below is run only once.
+ const { body } = this.options;
+ if (dist.nodeStream(body)) {
+ body.once('error', error => {
+ if (this._flushed) {
+ this._beforeError(new UploadError(error, this));
+ }
+ else {
+ this.flush = async () => {
+ this.flush = async () => { };
+ this._beforeError(new UploadError(error, this));
+ };
+ }
+ });
+ }
+ if (this.options.signal) {
+ const abort = () => {
+ this.destroy(new AbortError(this));
+ };
+ if (this.options.signal.aborted) {
+ abort();
+ }
+ else {
+ this.options.signal.addEventListener('abort', abort);
+ this._removeListeners = () => {
+ this.options.signal?.removeEventListener('abort', abort);
+ };
+ }
+ }
+ }
+ async flush() {
+ if (this._flushed) {
+ return;
+ }
+ this._flushed = true;
+ try {
+ await this._finalizeBody();
+ if (this.destroyed) {
+ return;
+ }
+ await this._makeRequest();
+ if (this.destroyed) {
+ this._request?.destroy();
+ return;
+ }
+ // Queued writes etc.
+ for (const job of this._jobs) {
+ job();
+ }
+ // Prevent memory leak
+ this._jobs.length = 0;
+ this._requestInitialized = true;
+ }
+ catch (error) {
+ this._beforeError(error);
+ }
+ }
+ _beforeError(error) {
+ if (this._stopReading) {
+ return;
+ }
+ const { response, options } = this;
+ const attemptCount = this.retryCount + (error.name === 'RetryError' ? 0 : 1);
+ this._stopReading = true;
+ if (!(error instanceof RequestError)) {
+ error = new RequestError(error.message, error, this);
+ }
+ const typedError = error;
+ void (async () => {
+ // Node.js parser is really weird.
+ // It emits post-request Parse Errors on the same instance as previous request. WTF.
+ // Therefore, we need to check if it has been destroyed as well.
+ //
+ // Furthermore, Node.js 16 `response.destroy()` doesn't immediately destroy the socket,
+ // but makes the response unreadable. So we additionally need to check `response.readable`.
+ if (response?.readable && !response.rawBody && !this._request?.socket?.destroyed) {
+ // @types/node has incorrect typings. `setEncoding` accepts `null` as well.
+ response.setEncoding(this.readableEncoding);
+ const success = await this._setRawBody(response);
+ if (success) {
+ response.body = response.rawBody.toString();
+ }
+ }
+ if (this.listenerCount('retry') !== 0) {
+ let backoff;
+ try {
+ let retryAfter;
+ if (response && 'retry-after' in response.headers) {
+ retryAfter = Number(response.headers['retry-after']);
+ if (Number.isNaN(retryAfter)) {
+ retryAfter = Date.parse(response.headers['retry-after']) - Date.now();
+ if (retryAfter <= 0) {
+ retryAfter = 1;
+ }
+ }
+ else {
+ retryAfter *= 1000;
+ }
+ }
+ const retryOptions = options.retry;
+ backoff = await retryOptions.calculateDelay({
+ attemptCount,
+ retryOptions,
+ error: typedError,
+ retryAfter,
+ computedValue: calculate_retry_delay({
+ attemptCount,
+ retryOptions,
+ error: typedError,
+ retryAfter,
+ computedValue: retryOptions.maxRetryAfter ?? options.timeout.request ?? Number.POSITIVE_INFINITY,
+ }),
+ });
+ }
+ catch (error_) {
+ void this._error(new RequestError(error_.message, error_, this));
+ return;
+ }
+ if (backoff) {
+ await new Promise(resolve => {
+ const timeout = setTimeout(resolve, backoff);
+ this._stopRetry = () => {
+ clearTimeout(timeout);
+ resolve();
+ };
+ });
+ // Something forced us to abort the retry
+ if (this.destroyed) {
+ return;
+ }
+ try {
+ for (const hook of this.options.hooks.beforeRetry) {
+ // eslint-disable-next-line no-await-in-loop
+ await hook(typedError, this.retryCount + 1);
+ }
+ }
+ catch (error_) {
+ void this._error(new RequestError(error_.message, error, this));
+ return;
+ }
+ // Something forced us to abort the retry
+ if (this.destroyed) {
+ return;
+ }
+ this.destroy();
+ this.emit('retry', this.retryCount + 1, error, (updatedOptions) => {
+ const request = new Request(options.url, updatedOptions, options);
+ request.retryCount = this.retryCount + 1;
+ external_node_process_namespaceObject.nextTick(() => {
+ void request.flush();
+ });
+ return request;
+ });
+ return;
+ }
+ }
+ void this._error(typedError);
+ })();
+ }
+ _read() {
+ this._triggerRead = true;
+ const { response } = this;
+ if (response && !this._stopReading) {
+ // We cannot put this in the `if` above
+ // because `.read()` also triggers the `end` event
+ if (response.readableLength) {
+ this._triggerRead = false;
+ }
+ let data;
+ while ((data = response.read()) !== null) {
+ this._downloadedSize += data.length; // eslint-disable-line @typescript-eslint/restrict-plus-operands
+ const progress = this.downloadProgress;
+ if (progress.percent < 1) {
+ this.emit('downloadProgress', progress);
+ }
+ this.push(data);
+ }
+ }
+ }
+ _write(chunk, encoding, callback) {
+ const write = () => {
+ this._writeRequest(chunk, encoding, callback);
+ };
+ if (this._requestInitialized) {
+ write();
+ }
+ else {
+ this._jobs.push(write);
+ }
+ }
+ _final(callback) {
+ const endRequest = () => {
+ // We need to check if `this._request` is present,
+ // because it isn't when we use cache.
+ if (!this._request || this._request.destroyed) {
+ callback();
+ return;
+ }
+ this._request.end((error) => {
+ // The request has been destroyed before `_final` finished.
+ // See https://github.com/nodejs/node/issues/39356
+ if (this._request._writableState?.errored) {
+ return;
+ }
+ if (!error) {
+ this._bodySize = this._uploadedSize;
+ this.emit('uploadProgress', this.uploadProgress);
+ this._request.emit('upload-complete');
+ }
+ callback(error);
+ });
+ };
+ if (this._requestInitialized) {
+ endRequest();
+ }
+ else {
+ this._jobs.push(endRequest);
+ }
+ }
+ _destroy(error, callback) {
+ this._stopReading = true;
+ this.flush = async () => { };
+ // Prevent further retries
+ this._stopRetry();
+ this._cancelTimeouts();
+ this._removeListeners();
+ if (this.options) {
+ const { body } = this.options;
+ if (dist.nodeStream(body)) {
+ body.destroy();
+ }
+ }
+ if (this._request) {
+ this._request.destroy();
+ }
+ if (error !== null && !dist.undefined(error) && !(error instanceof RequestError)) {
+ error = new RequestError(error.message, error, this);
+ }
+ callback(error);
+ }
+ pipe(destination, options) {
+ if (destination instanceof external_node_http_namespaceObject.ServerResponse) {
+ this._pipedServerResponses.add(destination);
+ }
+ return super.pipe(destination, options);
+ }
+ unpipe(destination) {
+ if (destination instanceof external_node_http_namespaceObject.ServerResponse) {
+ this._pipedServerResponses.delete(destination);
+ }
+ super.unpipe(destination);
+ return this;
+ }
+ async _finalizeBody() {
+ const { options } = this;
+ const { headers } = options;
+ const isForm = !dist.undefined(options.form);
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ const isJSON = !dist.undefined(options.json);
+ const isBody = !dist.undefined(options.body);
+ const cannotHaveBody = methodsWithoutBody.has(options.method) && !(options.method === 'GET' && options.allowGetBody);
+ this._cannotHaveBody = cannotHaveBody;
+ if (isForm || isJSON || isBody) {
+ if (cannotHaveBody) {
+ throw new TypeError(`The \`${options.method}\` method cannot be used with a body`);
+ }
+ // Serialize body
+ const noContentType = !dist.string(headers['content-type']);
+ if (isBody) {
+ // Body is spec-compliant FormData
+ if (lib_isFormData(options.body)) {
+ const encoder = new FormDataEncoder(options.body);
+ if (noContentType) {
+ headers['content-type'] = encoder.headers['Content-Type'];
+ }
+ if ('Content-Length' in encoder.headers) {
+ headers['content-length'] = encoder.headers['Content-Length'];
+ }
+ options.body = encoder.encode();
+ }
+ // Special case for https://github.com/form-data/form-data
+ if (is_form_data_isFormData(options.body) && noContentType) {
+ headers['content-type'] = `multipart/form-data; boundary=${options.body.getBoundary()}`;
+ }
+ }
+ else if (isForm) {
+ if (noContentType) {
+ headers['content-type'] = 'application/x-www-form-urlencoded';
+ }
+ const { form } = options;
+ options.form = undefined;
+ options.body = (new URLSearchParams(form)).toString();
+ }
+ else {
+ if (noContentType) {
+ headers['content-type'] = 'application/json';
+ }
+ const { json } = options;
+ options.json = undefined;
+ options.body = options.stringifyJson(json);
+ }
+ const uploadBodySize = await getBodySize(options.body, options.headers);
+ // See https://tools.ietf.org/html/rfc7230#section-3.3.2
+ // A user agent SHOULD send a Content-Length in a request message when
+ // no Transfer-Encoding is sent and the request method defines a meaning
+ // for an enclosed payload body. For example, a Content-Length header
+ // field is normally sent in a POST request even when the value is 0
+ // (indicating an empty payload body). A user agent SHOULD NOT send a
+ // Content-Length header field when the request message does not contain
+ // a payload body and the method semantics do not anticipate such a
+ // body.
+ if (dist.undefined(headers['content-length']) && dist.undefined(headers['transfer-encoding']) && !cannotHaveBody && !dist.undefined(uploadBodySize)) {
+ headers['content-length'] = String(uploadBodySize);
+ }
+ }
+ if (options.responseType === 'json' && !('accept' in options.headers)) {
+ options.headers.accept = 'application/json';
+ }
+ this._bodySize = Number(headers['content-length']) || undefined;
+ }
+ async _onResponseBase(response) {
+ // This will be called e.g. when using cache so we need to check if this request has been aborted.
+ if (this.isAborted) {
+ return;
+ }
+ const { options } = this;
+ const { url } = options;
+ this._nativeResponse = response;
+ if (options.decompress) {
+ response = decompress_response(response);
+ }
+ const statusCode = response.statusCode;
+ const typedResponse = response;
+ typedResponse.statusMessage = typedResponse.statusMessage ?? external_node_http_namespaceObject.STATUS_CODES[statusCode];
+ typedResponse.url = options.url.toString();
+ typedResponse.requestUrl = this.requestUrl;
+ typedResponse.redirectUrls = this.redirectUrls;
+ typedResponse.request = this;
+ typedResponse.isFromCache = this._nativeResponse.fromCache ?? false;
+ typedResponse.ip = this.ip;
+ typedResponse.retryCount = this.retryCount;
+ typedResponse.ok = isResponseOk(typedResponse);
+ this._isFromCache = typedResponse.isFromCache;
+ this._responseSize = Number(response.headers['content-length']) || undefined;
+ this.response = typedResponse;
+ response.once('end', () => {
+ this._responseSize = this._downloadedSize;
+ this.emit('downloadProgress', this.downloadProgress);
+ });
+ response.once('error', (error) => {
+ this._aborted = true;
+ // Force clean-up, because some packages don't do this.
+ // TODO: Fix decompress-response
+ response.destroy();
+ this._beforeError(new ReadError(error, this));
+ });
+ response.once('aborted', () => {
+ this._aborted = true;
+ this._beforeError(new ReadError({
+ name: 'Error',
+ message: 'The server aborted pending request',
+ code: 'ECONNRESET',
+ }, this));
+ });
+ this.emit('downloadProgress', this.downloadProgress);
+ const rawCookies = response.headers['set-cookie'];
+ if (dist.object(options.cookieJar) && rawCookies) {
+ let promises = rawCookies.map(async (rawCookie) => options.cookieJar.setCookie(rawCookie, url.toString()));
+ if (options.ignoreInvalidCookies) {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
+ promises = promises.map(async (promise) => {
+ try {
+ await promise;
+ }
+ catch { }
+ });
+ }
+ try {
+ await Promise.all(promises);
+ }
+ catch (error) {
+ this._beforeError(error);
+ return;
+ }
+ }
+ // The above is running a promise, therefore we need to check if this request has been aborted yet again.
+ if (this.isAborted) {
+ return;
+ }
+ if (response.headers.location && redirectCodes.has(statusCode)) {
+ // We're being redirected, we don't care about the response.
+ // It'd be best to abort the request, but we can't because
+ // we would have to sacrifice the TCP connection. We don't want that.
+ const shouldFollow = typeof options.followRedirect === 'function' ? options.followRedirect(typedResponse) : options.followRedirect;
+ if (shouldFollow) {
+ response.resume();
+ this._cancelTimeouts();
+ this._unproxyEvents();
+ if (this.redirectUrls.length >= options.maxRedirects) {
+ this._beforeError(new MaxRedirectsError(this));
+ return;
+ }
+ this._request = undefined;
+ const updatedOptions = new Options(undefined, undefined, this.options);
+ const serverRequestedGet = statusCode === 303 && updatedOptions.method !== 'GET' && updatedOptions.method !== 'HEAD';
+ const canRewrite = statusCode !== 307 && statusCode !== 308;
+ const userRequestedGet = updatedOptions.methodRewriting && canRewrite;
+ if (serverRequestedGet || userRequestedGet) {
+ updatedOptions.method = 'GET';
+ updatedOptions.body = undefined;
+ updatedOptions.json = undefined;
+ updatedOptions.form = undefined;
+ delete updatedOptions.headers['content-length'];
+ }
+ try {
+ // We need this in order to support UTF-8
+ const redirectBuffer = external_node_buffer_namespaceObject.Buffer.from(response.headers.location, 'binary').toString();
+ const redirectUrl = new URL(redirectBuffer, url);
+ if (!isUnixSocketURL(url) && isUnixSocketURL(redirectUrl)) {
+ this._beforeError(new RequestError('Cannot redirect to UNIX socket', {}, this));
+ return;
+ }
+ // Redirecting to a different site, clear sensitive data.
+ if (redirectUrl.hostname !== url.hostname || redirectUrl.port !== url.port) {
+ if ('host' in updatedOptions.headers) {
+ delete updatedOptions.headers.host;
+ }
+ if ('cookie' in updatedOptions.headers) {
+ delete updatedOptions.headers.cookie;
+ }
+ if ('authorization' in updatedOptions.headers) {
+ delete updatedOptions.headers.authorization;
+ }
+ if (updatedOptions.username || updatedOptions.password) {
+ updatedOptions.username = '';
+ updatedOptions.password = '';
+ }
+ }
+ else {
+ redirectUrl.username = updatedOptions.username;
+ redirectUrl.password = updatedOptions.password;
+ }
+ this.redirectUrls.push(redirectUrl);
+ updatedOptions.prefixUrl = '';
+ updatedOptions.url = redirectUrl;
+ for (const hook of updatedOptions.hooks.beforeRedirect) {
+ // eslint-disable-next-line no-await-in-loop
+ await hook(updatedOptions, typedResponse);
+ }
+ this.emit('redirect', updatedOptions, typedResponse);
+ this.options = updatedOptions;
+ await this._makeRequest();
+ }
+ catch (error) {
+ this._beforeError(error);
+ return;
+ }
+ return;
+ }
+ }
+ // `HTTPError`s always have `error.response.body` defined.
+ // Therefore, we cannot retry if `options.throwHttpErrors` is false.
+ // On the last retry, if `options.throwHttpErrors` is false, we would need to return the body,
+ // but that wouldn't be possible since the body would be already read in `error.response.body`.
+ if (options.isStream && options.throwHttpErrors && !isResponseOk(typedResponse)) {
+ this._beforeError(new HTTPError(typedResponse));
+ return;
+ }
+ response.on('readable', () => {
+ if (this._triggerRead) {
+ this._read();
+ }
+ });
+ this.on('resume', () => {
+ response.resume();
+ });
+ this.on('pause', () => {
+ response.pause();
+ });
+ response.once('end', () => {
+ this.push(null);
+ });
+ if (this._noPipe) {
+ const success = await this._setRawBody();
+ if (success) {
+ this.emit('response', response);
+ }
+ return;
+ }
+ this.emit('response', response);
+ for (const destination of this._pipedServerResponses) {
+ if (destination.headersSent) {
+ continue;
+ }
+ // eslint-disable-next-line guard-for-in
+ for (const key in response.headers) {
+ const isAllowed = options.decompress ? key !== 'content-encoding' : true;
+ const value = response.headers[key];
+ if (isAllowed) {
+ destination.setHeader(key, value);
+ }
+ }
+ destination.statusCode = statusCode;
+ }
+ }
+ async _setRawBody(from = this) {
+ if (from.readableEnded) {
+ return false;
+ }
+ try {
+ // Errors are emitted via the `error` event
+ const rawBody = await getStreamAsBuffer(from);
+ // TODO: Switch to this:
+ // let rawBody = await from.toArray();
+ // rawBody = Buffer.concat(rawBody);
+ // On retry Request is destroyed with no error, therefore the above will successfully resolve.
+ // So in order to check if this was really successfull, we need to check if it has been properly ended.
+ if (!this.isAborted) {
+ this.response.rawBody = rawBody;
+ return true;
+ }
+ }
+ catch { }
+ return false;
+ }
+ async _onResponse(response) {
+ try {
+ await this._onResponseBase(response);
+ }
+ catch (error) {
+ /* istanbul ignore next: better safe than sorry */
+ this._beforeError(error);
+ }
+ }
+ _onRequest(request) {
+ const { options } = this;
+ const { timeout, url } = options;
+ dist_source(request);
+ if (this.options.http2) {
+ // Unset stream timeout, as the `timeout` option was used only for connection timeout.
+ request.setTimeout(0);
+ }
+ this._cancelTimeouts = timedOut(request, timeout, url);
+ const responseEventName = options.cache ? 'cacheableResponse' : 'response';
+ request.once(responseEventName, (response) => {
+ void this._onResponse(response);
+ });
+ request.once('error', (error) => {
+ this._aborted = true;
+ // Force clean-up, because some packages (e.g. nock) don't do this.
+ request.destroy();
+ error = error instanceof timed_out_TimeoutError ? new TimeoutError(error, this.timings, this) : new RequestError(error.message, error, this);
+ this._beforeError(error);
+ });
+ this._unproxyEvents = proxyEvents(request, this, proxiedRequestEvents);
+ this._request = request;
+ this.emit('uploadProgress', this.uploadProgress);
+ this._sendBody();
+ this.emit('request', request);
+ }
+ async _asyncWrite(chunk) {
+ return new Promise((resolve, reject) => {
+ super.write(chunk, error => {
+ if (error) {
+ reject(error);
+ return;
+ }
+ resolve();
+ });
+ });
+ }
+ _sendBody() {
+ // Send body
+ const { body } = this.options;
+ const currentRequest = this.redirectUrls.length === 0 ? this : this._request ?? this;
+ if (dist.nodeStream(body)) {
+ body.pipe(currentRequest);
+ }
+ else if (dist.generator(body) || dist.asyncGenerator(body)) {
+ (async () => {
+ try {
+ for await (const chunk of body) {
+ await this._asyncWrite(chunk);
+ }
+ super.end();
+ }
+ catch (error) {
+ this._beforeError(error);
+ }
+ })();
+ }
+ else if (!dist.undefined(body)) {
+ this._writeRequest(body, undefined, () => { });
+ currentRequest.end();
+ }
+ else if (this._cannotHaveBody || this._noPipe) {
+ currentRequest.end();
+ }
+ }
+ _prepareCache(cache) {
+ if (!cacheableStore.has(cache)) {
+ const cacheableRequest = new cacheable_request_dist(((requestOptions, handler) => {
+ const result = requestOptions._request(requestOptions, handler);
+ // TODO: remove this when `cacheable-request` supports async request functions.
+ if (dist.promise(result)) {
+ // We only need to implement the error handler in order to support HTTP2 caching.
+ // The result will be a promise anyway.
+ // @ts-expect-error ignore
+ result.once = (event, handler) => {
+ if (event === 'error') {
+ (async () => {
+ try {
+ await result;
+ }
+ catch (error) {
+ handler(error);
+ }
+ })();
+ }
+ else if (event === 'abort') {
+ // The empty catch is needed here in case when
+ // it rejects before it's `await`ed in `_makeRequest`.
+ (async () => {
+ try {
+ const request = (await result);
+ request.once('abort', handler);
+ }
+ catch { }
+ })();
+ }
+ else {
+ /* istanbul ignore next: safety check */
+ throw new Error(`Unknown HTTP2 promise event: ${event}`);
+ }
+ return result;
+ };
+ }
+ return result;
+ }), cache);
+ cacheableStore.set(cache, cacheableRequest.request());
+ }
+ }
+ async _createCacheableRequest(url, options) {
+ return new Promise((resolve, reject) => {
+ // TODO: Remove `utils/url-to-options.ts` when `cacheable-request` is fixed
+ Object.assign(options, urlToOptions(url));
+ let request;
+ // TODO: Fix `cacheable-response`. This is ugly.
+ const cacheRequest = cacheableStore.get(options.cache)(options, async (response) => {
+ response._readableState.autoDestroy = false;
+ if (request) {
+ const fix = () => {
+ if (response.req) {
+ response.complete = response.req.res.complete;
+ }
+ };
+ response.prependOnceListener('end', fix);
+ fix();
+ (await request).emit('cacheableResponse', response);
+ }
+ resolve(response);
+ });
+ cacheRequest.once('error', reject);
+ cacheRequest.once('request', async (requestOrPromise) => {
+ request = requestOrPromise;
+ resolve(request);
+ });
+ });
+ }
+ async _makeRequest() {
+ const { options } = this;
+ const { headers, username, password } = options;
+ const cookieJar = options.cookieJar;
+ for (const key in headers) {
+ if (dist.undefined(headers[key])) {
+ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
+ delete headers[key];
+ }
+ else if (dist.null_(headers[key])) {
+ throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${key}\` header`);
+ }
+ }
+ if (options.decompress && dist.undefined(headers['accept-encoding'])) {
+ headers['accept-encoding'] = supportsBrotli ? 'gzip, deflate, br' : 'gzip, deflate';
+ }
+ if (username || password) {
+ const credentials = external_node_buffer_namespaceObject.Buffer.from(`${username}:${password}`).toString('base64');
+ headers.authorization = `Basic ${credentials}`;
+ }
+ // Set cookies
+ if (cookieJar) {
+ const cookieString = await cookieJar.getCookieString(options.url.toString());
+ if (dist.nonEmptyString(cookieString)) {
+ headers.cookie = cookieString;
+ }
+ }
+ // Reset `prefixUrl`
+ options.prefixUrl = '';
+ let request;
+ for (const hook of options.hooks.beforeRequest) {
+ // eslint-disable-next-line no-await-in-loop
+ const result = await hook(options);
+ if (!dist.undefined(result)) {
+ // @ts-expect-error Skip the type mismatch to support abstract responses
+ request = () => result;
+ break;
+ }
+ }
+ if (!request) {
+ request = options.getRequestFunction();
+ }
+ const url = options.url;
+ this._requestOptions = options.createNativeRequestOptions();
+ if (options.cache) {
+ this._requestOptions._request = request;
+ this._requestOptions.cache = options.cache;
+ this._requestOptions.body = options.body;
+ this._prepareCache(options.cache);
+ }
+ // Cache support
+ const fn = options.cache ? this._createCacheableRequest : request;
+ try {
+ // We can't do `await fn(...)`,
+ // because stream `error` event can be emitted before `Promise.resolve()`.
+ let requestOrResponse = fn(url, this._requestOptions);
+ if (dist.promise(requestOrResponse)) {
+ requestOrResponse = await requestOrResponse;
+ }
+ // Fallback
+ if (dist.undefined(requestOrResponse)) {
+ requestOrResponse = options.getFallbackRequestFunction()(url, this._requestOptions);
+ if (dist.promise(requestOrResponse)) {
+ requestOrResponse = await requestOrResponse;
+ }
+ }
+ if (is_client_request(requestOrResponse)) {
+ this._onRequest(requestOrResponse);
+ }
+ else if (this.writable) {
+ this.once('finish', () => {
+ void this._onResponse(requestOrResponse);
+ });
+ this._sendBody();
+ }
+ else {
+ void this._onResponse(requestOrResponse);
+ }
+ }
+ catch (error) {
+ if (error instanceof types_CacheError) {
+ throw new CacheError(error, this);
+ }
+ throw error;
+ }
+ }
+ async _error(error) {
+ try {
+ if (error instanceof HTTPError && !this.options.throwHttpErrors) {
+ // This branch can be reached only when using the Promise API
+ // Skip calling the hooks on purpose.
+ // See https://github.com/sindresorhus/got/issues/2103
+ }
+ else {
+ for (const hook of this.options.hooks.beforeError) {
+ // eslint-disable-next-line no-await-in-loop
+ error = await hook(error);
+ }
+ }
+ }
+ catch (error_) {
+ error = new RequestError(error_.message, error_, this);
+ }
+ this.destroy(error);
+ }
+ _writeRequest(chunk, encoding, callback) {
+ if (!this._request || this._request.destroyed) {
+ // Probably the `ClientRequest` instance will throw
+ return;
+ }
+ this._request.write(chunk, encoding, (error) => {
+ // The `!destroyed` check is required to prevent `uploadProgress` being emitted after the stream was destroyed
+ if (!error && !this._request.destroyed) {
+ this._uploadedSize += external_node_buffer_namespaceObject.Buffer.byteLength(chunk, encoding);
+ const progress = this.uploadProgress;
+ if (progress.percent < 1) {
+ this.emit('uploadProgress', progress);
+ }
+ }
+ callback(error);
+ });
+ }
+ /**
+ The remote IP address.
+ */
+ get ip() {
+ return this.socket?.remoteAddress;
+ }
+ /**
+ Indicates whether the request has been aborted or not.
+ */
+ get isAborted() {
+ return this._aborted;
+ }
+ get socket() {
+ return this._request?.socket ?? undefined;
+ }
+ /**
+ Progress event for downloading (receiving a response).
+ */
+ get downloadProgress() {
+ let percent;
+ if (this._responseSize) {
+ percent = this._downloadedSize / this._responseSize;
+ }
+ else if (this._responseSize === this._downloadedSize) {
+ percent = 1;
+ }
+ else {
+ percent = 0;
+ }
+ return {
+ percent,
+ transferred: this._downloadedSize,
+ total: this._responseSize,
+ };
+ }
+ /**
+ Progress event for uploading (sending a request).
+ */
+ get uploadProgress() {
+ let percent;
+ if (this._bodySize) {
+ percent = this._uploadedSize / this._bodySize;
+ }
+ else if (this._bodySize === this._uploadedSize) {
+ percent = 1;
+ }
+ else {
+ percent = 0;
+ }
+ return {
+ percent,
+ transferred: this._uploadedSize,
+ total: this._bodySize,
+ };
+ }
+ /**
+ The object contains the following properties:
+
+ - `start` - Time when the request started.
+ - `socket` - Time when a socket was assigned to the request.
+ - `lookup` - Time when the DNS lookup finished.
+ - `connect` - Time when the socket successfully connected.
+ - `secureConnect` - Time when the socket securely connected.
+ - `upload` - Time when the request finished uploading.
+ - `response` - Time when the request fired `response` event.
+ - `end` - Time when the response fired `end` event.
+ - `error` - Time when the request fired `error` event.
+ - `abort` - Time when the request fired `abort` event.
+ - `phases`
+ - `wait` - `timings.socket - timings.start`
+ - `dns` - `timings.lookup - timings.socket`
+ - `tcp` - `timings.connect - timings.lookup`
+ - `tls` - `timings.secureConnect - timings.connect`
+ - `request` - `timings.upload - (timings.secureConnect || timings.connect)`
+ - `firstByte` - `timings.response - timings.upload`
+ - `download` - `timings.end - timings.response`
+ - `total` - `(timings.end || timings.error || timings.abort) - timings.start`
+
+ If something has not been measured yet, it will be `undefined`.
+
+ __Note__: The time is a `number` representing the milliseconds elapsed since the UNIX epoch.
+ */
+ get timings() {
+ return this._request?.timings;
+ }
+ /**
+ Whether the response was retrieved from the cache.
+ */
+ get isFromCache() {
+ return this._isFromCache;
+ }
+ get reusedSocket() {
+ return this._request?.reusedSocket;
+ }
+}
+
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/as-promise/types.js
+
+/**
+An error to be thrown when the request is aborted with `.cancel()`.
+*/
+class types_CancelError extends RequestError {
+ constructor(request) {
+ super('Promise was canceled', {}, request);
+ this.name = 'CancelError';
+ this.code = 'ERR_CANCELED';
+ }
+ /**
+ Whether the promise is canceled.
+ */
+ get isCanceled() {
+ return true;
+ }
+}
+
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/as-promise/index.js
+
+
+
+
+
+
+
+
+const as_promise_proxiedRequestEvents = [
+ 'request',
+ 'response',
+ 'redirect',
+ 'uploadProgress',
+ 'downloadProgress',
+];
+function asPromise(firstRequest) {
+ let globalRequest;
+ let globalResponse;
+ let normalizedOptions;
+ const emitter = new external_node_events_namespaceObject.EventEmitter();
+ const promise = new PCancelable((resolve, reject, onCancel) => {
+ onCancel(() => {
+ globalRequest.destroy();
+ });
+ onCancel.shouldReject = false;
+ onCancel(() => {
+ reject(new types_CancelError(globalRequest));
+ });
+ const makeRequest = (retryCount) => {
+ // Errors when a new request is made after the promise settles.
+ // Used to detect a race condition.
+ // See https://github.com/sindresorhus/got/issues/1489
+ onCancel(() => { });
+ const request = firstRequest ?? new Request(undefined, undefined, normalizedOptions);
+ request.retryCount = retryCount;
+ request._noPipe = true;
+ globalRequest = request;
+ request.once('response', async (response) => {
+ // Parse body
+ const contentEncoding = (response.headers['content-encoding'] ?? '').toLowerCase();
+ const isCompressed = contentEncoding === 'gzip' || contentEncoding === 'deflate' || contentEncoding === 'br';
+ const { options } = request;
+ if (isCompressed && !options.decompress) {
+ response.body = response.rawBody;
+ }
+ else {
+ try {
+ response.body = parseBody(response, options.responseType, options.parseJson, options.encoding);
+ }
+ catch (error) {
+ // Fall back to `utf8`
+ try {
+ response.body = response.rawBody.toString();
+ }
+ catch (error) {
+ request._beforeError(new ParseError(error, response));
+ return;
+ }
+ if (isResponseOk(response)) {
+ request._beforeError(error);
+ return;
+ }
+ }
+ }
+ try {
+ const hooks = options.hooks.afterResponse;
+ for (const [index, hook] of hooks.entries()) {
+ // @ts-expect-error TS doesn't notice that CancelableRequest is a Promise
+ // eslint-disable-next-line no-await-in-loop
+ response = await hook(response, async (updatedOptions) => {
+ options.merge(updatedOptions);
+ options.prefixUrl = '';
+ if (updatedOptions.url) {
+ options.url = updatedOptions.url;
+ }
+ // Remove any further hooks for that request, because we'll call them anyway.
+ // The loop continues. We don't want duplicates (asPromise recursion).
+ options.hooks.afterResponse = options.hooks.afterResponse.slice(0, index);
+ throw new RetryError(request);
+ });
+ if (!(dist.object(response) && dist.number(response.statusCode) && !dist.nullOrUndefined(response.body))) {
+ throw new TypeError('The `afterResponse` hook returned an invalid value');
+ }
+ }
+ }
+ catch (error) {
+ request._beforeError(error);
+ return;
+ }
+ globalResponse = response;
+ if (!isResponseOk(response)) {
+ request._beforeError(new HTTPError(response));
+ return;
+ }
+ request.destroy();
+ resolve(request.options.resolveBodyOnly ? response.body : response);
+ });
+ const onError = (error) => {
+ if (promise.isCanceled) {
+ return;
+ }
+ const { options } = request;
+ if (error instanceof HTTPError && !options.throwHttpErrors) {
+ const { response } = error;
+ request.destroy();
+ resolve(request.options.resolveBodyOnly ? response.body : response);
+ return;
+ }
+ reject(error);
+ };
+ request.once('error', onError);
+ const previousBody = request.options?.body;
+ request.once('retry', (newRetryCount, error) => {
+ firstRequest = undefined;
+ const newBody = request.options.body;
+ if (previousBody === newBody && dist.nodeStream(newBody)) {
+ error.message = 'Cannot retry with consumed body stream';
+ onError(error);
+ return;
+ }
+ // This is needed! We need to reuse `request.options` because they can get modified!
+ // For example, by calling `promise.json()`.
+ normalizedOptions = request.options;
+ makeRequest(newRetryCount);
+ });
+ proxyEvents(request, emitter, as_promise_proxiedRequestEvents);
+ if (dist.undefined(firstRequest)) {
+ void request.flush();
+ }
+ };
+ makeRequest(0);
+ });
+ promise.on = (event, fn) => {
+ emitter.on(event, fn);
+ return promise;
+ };
+ promise.off = (event, fn) => {
+ emitter.off(event, fn);
+ return promise;
+ };
+ const shortcut = (responseType) => {
+ const newPromise = (async () => {
+ // Wait until downloading has ended
+ await promise;
+ const { options } = globalResponse.request;
+ return parseBody(globalResponse, responseType, options.parseJson, options.encoding);
+ })();
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
+ Object.defineProperties(newPromise, Object.getOwnPropertyDescriptors(promise));
+ return newPromise;
+ };
+ promise.json = () => {
+ if (globalRequest.options) {
+ const { headers } = globalRequest.options;
+ if (!globalRequest.writableFinished && !('accept' in headers)) {
+ headers.accept = 'application/json';
+ }
+ }
+ return shortcut('json');
+ };
+ promise.buffer = () => shortcut('buffer');
+ promise.text = () => shortcut('text');
+ return promise;
+}
+
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/create.js
+
+
+
+
+// The `delay` package weighs 10KB (!)
+const delay = async (ms) => new Promise(resolve => {
+ setTimeout(resolve, ms);
+});
+const isGotInstance = (value) => dist.function_(value);
+const aliases = [
+ 'get',
+ 'post',
+ 'put',
+ 'patch',
+ 'head',
+ 'delete',
+];
+const create = (defaults) => {
+ defaults = {
+ options: new Options(undefined, undefined, defaults.options),
+ handlers: [...defaults.handlers],
+ mutableDefaults: defaults.mutableDefaults,
+ };
+ Object.defineProperty(defaults, 'mutableDefaults', {
+ enumerable: true,
+ configurable: false,
+ writable: false,
+ });
+ // Got interface
+ const got = ((url, options, defaultOptions = defaults.options) => {
+ const request = new Request(url, options, defaultOptions);
+ let promise;
+ const lastHandler = (normalized) => {
+ // Note: `options` is `undefined` when `new Options(...)` fails
+ request.options = normalized;
+ request._noPipe = !normalized.isStream;
+ void request.flush();
+ if (normalized.isStream) {
+ return request;
+ }
+ if (!promise) {
+ promise = asPromise(request);
+ }
+ return promise;
+ };
+ let iteration = 0;
+ const iterateHandlers = (newOptions) => {
+ const handler = defaults.handlers[iteration++] ?? lastHandler;
+ const result = handler(newOptions, iterateHandlers);
+ if (dist.promise(result) && !request.options.isStream) {
+ if (!promise) {
+ promise = asPromise(request);
+ }
+ if (result !== promise) {
+ const descriptors = Object.getOwnPropertyDescriptors(promise);
+ for (const key in descriptors) {
+ if (key in result) {
+ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
+ delete descriptors[key];
+ }
+ }
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
+ Object.defineProperties(result, descriptors);
+ result.cancel = promise.cancel;
+ }
+ }
+ return result;
+ };
+ return iterateHandlers(request.options);
+ });
+ got.extend = (...instancesOrOptions) => {
+ const options = new Options(undefined, undefined, defaults.options);
+ const handlers = [...defaults.handlers];
+ let mutableDefaults;
+ for (const value of instancesOrOptions) {
+ if (isGotInstance(value)) {
+ options.merge(value.defaults.options);
+ handlers.push(...value.defaults.handlers);
+ mutableDefaults = value.defaults.mutableDefaults;
+ }
+ else {
+ options.merge(value);
+ if (value.handlers) {
+ handlers.push(...value.handlers);
+ }
+ mutableDefaults = value.mutableDefaults;
+ }
+ }
+ return create({
+ options,
+ handlers,
+ mutableDefaults: Boolean(mutableDefaults),
+ });
+ };
+ // Pagination
+ const paginateEach = (async function* (url, options) {
+ let normalizedOptions = new Options(url, options, defaults.options);
+ normalizedOptions.resolveBodyOnly = false;
+ const { pagination } = normalizedOptions;
+ assert.function_(pagination.transform);
+ assert.function_(pagination.shouldContinue);
+ assert.function_(pagination.filter);
+ assert.function_(pagination.paginate);
+ assert.number(pagination.countLimit);
+ assert.number(pagination.requestLimit);
+ assert.number(pagination.backoff);
+ const allItems = [];
+ let { countLimit } = pagination;
+ let numberOfRequests = 0;
+ while (numberOfRequests < pagination.requestLimit) {
+ if (numberOfRequests !== 0) {
+ // eslint-disable-next-line no-await-in-loop
+ await delay(pagination.backoff);
+ }
+ // eslint-disable-next-line no-await-in-loop
+ const response = (await got(undefined, undefined, normalizedOptions));
+ // eslint-disable-next-line no-await-in-loop
+ const parsed = await pagination.transform(response);
+ const currentItems = [];
+ assert.array(parsed);
+ for (const item of parsed) {
+ if (pagination.filter({ item, currentItems, allItems })) {
+ if (!pagination.shouldContinue({ item, currentItems, allItems })) {
+ return;
+ }
+ yield item;
+ if (pagination.stackAllItems) {
+ allItems.push(item);
+ }
+ currentItems.push(item);
+ if (--countLimit <= 0) {
+ return;
+ }
+ }
+ }
+ const optionsToMerge = pagination.paginate({
+ response,
+ currentItems,
+ allItems,
+ });
+ if (optionsToMerge === false) {
+ return;
+ }
+ if (optionsToMerge === response.request.options) {
+ normalizedOptions = response.request.options;
+ }
+ else {
+ normalizedOptions.merge(optionsToMerge);
+ assert.any([dist.urlInstance, dist.undefined], optionsToMerge.url);
+ if (optionsToMerge.url !== undefined) {
+ normalizedOptions.prefixUrl = '';
+ normalizedOptions.url = optionsToMerge.url;
+ }
+ }
+ numberOfRequests++;
+ }
+ });
+ got.paginate = paginateEach;
+ got.paginate.all = (async (url, options) => {
+ const results = [];
+ for await (const item of paginateEach(url, options)) {
+ results.push(item);
+ }
+ return results;
+ });
+ // For those who like very descriptive names
+ got.paginate.each = paginateEach;
+ // Stream API
+ got.stream = ((url, options) => got(url, { ...options, isStream: true }));
+ // Shortcuts
+ for (const method of aliases) {
+ got[method] = ((url, options) => got(url, { ...options, method }));
+ got.stream[method] = ((url, options) => got(url, { ...options, method, isStream: true }));
+ }
+ if (!defaults.mutableDefaults) {
+ Object.freeze(defaults.handlers);
+ defaults.options.freeze();
+ }
+ Object.defineProperty(got, 'defaults', {
+ value: defaults,
+ writable: false,
+ configurable: false,
+ enumerable: true,
+ });
+ return got;
+};
+/* harmony default export */ const source_create = (create);
+
+;// CONCATENATED MODULE: ./node_modules/got/dist/source/index.js
+
+
+const defaults = {
+ options: new Options(),
+ handlers: [],
+ mutableDefaults: false,
+};
+const got = source_create(defaults);
+/* harmony default export */ const got_dist_source = (got);
+// TODO: Remove this in the next major version.
+
+
+
+
+
+
+
+
+
+
+
+
;// CONCATENATED MODULE: ./src/utils.js
/**
* Replaces any dot chars to __ and removes non-ascii charts
@@ -11217,7 +14215,7 @@ async function getClientToken(client, method, path, payload) {
try {
response = await client.post(`${path}`, options);
} catch (err) {
- if (err instanceof source.HTTPError) {
+ if (err instanceof got_dist_source.HTTPError) {
throw Error(`failed to retrieve vault token. code: ${err.code}, message: ${err.message}, vaultResponse: ${JSON.stringify(err.response.body)}`)
} else {
throw err
@@ -11255,6 +14253,7 @@ async function getClientToken(client, method, path, payload) {
const external_module_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("module");
;// CONCATENATED MODULE: ./src/cjs-require.js
// This allows us to use `require` in our ECMAScript module
+// See: https://github.com/vercel/ncc/issues/791
// https://nodejs.org/api/module.html#modulecreaterequirefilename
const cjs_require_require = (0,external_module_namespaceObject.createRequire)(import.meta.url);
@@ -11476,7 +14475,7 @@ async function exportSecrets() {
https: {},
retry: {
statusCodes: [
- ...source.defaults.options.retry.statusCodes,
+ ...got_dist_source.defaults.options.retry.statusCodes,
// Vault returns 412 when the token in use hasn't yet been replicated
// to the performance replica queried. See issue #332.
412,
@@ -11512,10 +14511,10 @@ async function exportSecrets() {
defaultOptions.headers["X-Vault-Namespace"] = vaultNamespace;
}
- const vaultToken = await retrieveToken(vaultMethod, source.extend(defaultOptions));
+ const vaultToken = await retrieveToken(vaultMethod, got_dist_source.extend(defaultOptions));
core.setSecret(vaultToken)
defaultOptions.headers['X-Vault-Token'] = vaultToken;
- const client = source.extend(defaultOptions);
+ const client = got_dist_source.extend(defaultOptions);
if (outputToken === true) {
core.setOutput('vault_token', `${vaultToken}`);
diff --git a/package-lock.json b/package-lock.json
index 6fc17e0..60e7b9d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,13 +11,12 @@
"license": "MIT",
"dependencies": {
"@actions/core": "^1.10.1",
- "got": "^11.8.6",
+ "got": "^14.2.1",
"jsonata": "^2.0.3",
"jsrsasign": "^11.0.0"
},
"devDependencies": {
"@vercel/ncc": "^0.38.1",
- "jest": "^29.7.0",
"jest-when": "^3.6.0",
"mock-http-server": "^1.4.5",
"vitest": "^1.3.1"
@@ -45,6 +44,7 @@
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
"integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
@@ -58,6 +58,7 @@
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
"integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/highlight": "^7.23.4",
"chalk": "^2.4.2"
@@ -71,6 +72,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
+ "peer": true,
"dependencies": {
"color-convert": "^1.9.0"
},
@@ -83,6 +85,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -97,6 +100,7 @@
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
+ "peer": true,
"dependencies": {
"color-name": "1.1.3"
}
@@ -105,13 +109,15 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/@babel/code-frame/node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=0.8.0"
}
@@ -121,6 +127,7 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=4"
}
@@ -130,6 +137,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
+ "peer": true,
"dependencies": {
"has-flag": "^3.0.0"
},
@@ -142,6 +150,7 @@
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz",
"integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6.9.0"
}
@@ -151,6 +160,7 @@
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz",
"integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.23.5",
@@ -181,6 +191,7 @@
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
"integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/types": "^7.23.6",
"@jridgewell/gen-mapping": "^0.3.2",
@@ -196,6 +207,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
"integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/compat-data": "^7.23.5",
"@babel/helper-validator-option": "^7.23.5",
@@ -212,6 +224,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
"integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6.9.0"
}
@@ -221,6 +234,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
"integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/template": "^7.22.15",
"@babel/types": "^7.23.0"
@@ -234,6 +248,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/types": "^7.22.5"
},
@@ -246,6 +261,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
"integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/types": "^7.22.15"
},
@@ -258,6 +274,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
"integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-module-imports": "^7.22.15",
@@ -277,6 +294,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
"integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6.9.0"
}
@@ -286,6 +304,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
"integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/types": "^7.22.5"
},
@@ -298,6 +317,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
"integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/types": "^7.22.5"
},
@@ -310,6 +330,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
"integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6.9.0"
}
@@ -319,6 +340,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6.9.0"
}
@@ -328,6 +350,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
"integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6.9.0"
}
@@ -337,6 +360,7 @@
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz",
"integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/template": "^7.23.9",
"@babel/traverse": "^7.23.9",
@@ -351,6 +375,7 @@
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
"integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.22.20",
"chalk": "^2.4.2",
@@ -365,6 +390,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
+ "peer": true,
"dependencies": {
"color-convert": "^1.9.0"
},
@@ -377,6 +403,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -391,6 +418,7 @@
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
+ "peer": true,
"dependencies": {
"color-name": "1.1.3"
}
@@ -399,13 +427,15 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/@babel/highlight/node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=0.8.0"
}
@@ -415,6 +445,7 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=4"
}
@@ -424,6 +455,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
+ "peer": true,
"dependencies": {
"has-flag": "^3.0.0"
},
@@ -436,6 +468,7 @@
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz",
"integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==",
"dev": true,
+ "peer": true,
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -448,6 +481,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
"integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -460,6 +494,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
"integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -472,6 +507,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
"integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
@@ -484,6 +520,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
"integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
@@ -496,6 +533,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
"integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -508,6 +546,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz",
"integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5"
},
@@ -523,6 +562,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
"integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
@@ -535,6 +575,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
"integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -547,6 +588,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
"integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
@@ -559,6 +601,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
"integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -571,6 +614,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
"integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -583,6 +627,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
"integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -595,6 +640,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
"integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.14.5"
},
@@ -610,6 +656,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz",
"integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5"
},
@@ -625,6 +672,7 @@
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz",
"integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/code-frame": "^7.23.5",
"@babel/parser": "^7.23.9",
@@ -639,6 +687,7 @@
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz",
"integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/code-frame": "^7.23.5",
"@babel/generator": "^7.23.6",
@@ -660,6 +709,7 @@
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz",
"integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-string-parser": "^7.23.4",
"@babel/helper-validator-identifier": "^7.22.20",
@@ -673,7 +723,8 @@
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/@esbuild/aix-ppc64": {
"version": "0.19.12",
@@ -1048,6 +1099,7 @@
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
"integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"camelcase": "^5.3.1",
"find-up": "^4.1.0",
@@ -1064,6 +1116,7 @@
"resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
"integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -1073,6 +1126,7 @@
"resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
"integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/types": "^29.6.3",
"@types/node": "*",
@@ -1090,6 +1144,7 @@
"resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
"integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/console": "^29.7.0",
"@jest/reporters": "^29.7.0",
@@ -1137,6 +1192,7 @@
"resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
"integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/fake-timers": "^29.7.0",
"@jest/types": "^29.6.3",
@@ -1152,6 +1208,7 @@
"resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
"integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"expect": "^29.7.0",
"jest-snapshot": "^29.7.0"
@@ -1165,6 +1222,7 @@
"resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
"integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
"dev": true,
+ "peer": true,
"dependencies": {
"jest-get-type": "^29.6.3"
},
@@ -1177,6 +1235,7 @@
"resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
"integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/types": "^29.6.3",
"@sinonjs/fake-timers": "^10.0.2",
@@ -1194,6 +1253,7 @@
"resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
"integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/environment": "^29.7.0",
"@jest/expect": "^29.7.0",
@@ -1209,6 +1269,7 @@
"resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
"integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@bcoe/v8-coverage": "^0.2.3",
"@jest/console": "^29.7.0",
@@ -1264,6 +1325,7 @@
"resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
"integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.18",
"callsites": "^3.0.0",
@@ -1278,6 +1340,7 @@
"resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
"integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/console": "^29.7.0",
"@jest/types": "^29.6.3",
@@ -1293,6 +1356,7 @@
"resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
"integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/test-result": "^29.7.0",
"graceful-fs": "^4.2.9",
@@ -1308,6 +1372,7 @@
"resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
"integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/core": "^7.11.6",
"@jest/types": "^29.6.3",
@@ -1334,6 +1399,7 @@
"resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
"integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
@@ -1351,6 +1417,7 @@
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
"integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
@@ -1365,6 +1432,7 @@
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
"integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6.0.0"
}
@@ -1374,6 +1442,7 @@
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6.0.0"
}
@@ -1389,6 +1458,7 @@
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz",
"integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
@@ -1570,11 +1640,11 @@
"dev": true
},
"node_modules/@sindresorhus/is": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz",
- "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-6.2.0.tgz",
+ "integrity": "sha512-yM/IGPkVnYGblhDosFBwq0ZGdnVSBkNV4onUtipGMOjZd4kB6GAu3ys91aftSbyMHh6A2GPdt+KDI5NoWP63MQ==",
"engines": {
- "node": ">=10"
+ "node": ">=16"
},
"funding": {
"url": "https://github.com/sindresorhus/is?sponsor=1"
@@ -1585,6 +1655,7 @@
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
"integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"type-detect": "4.0.8"
}
@@ -1594,19 +1665,20 @@
"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
"integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@sinonjs/commons": "^3.0.0"
}
},
"node_modules/@szmarczak/http-timer": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz",
- "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz",
+ "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==",
"dependencies": {
- "defer-to-connect": "^2.0.0"
+ "defer-to-connect": "^2.0.1"
},
"engines": {
- "node": ">=10"
+ "node": ">=14.16"
}
},
"node_modules/@types/babel__core": {
@@ -1614,6 +1686,7 @@
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
"integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/parser": "^7.20.7",
"@babel/types": "^7.20.7",
@@ -1627,6 +1700,7 @@
"resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
"integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/types": "^7.0.0"
}
@@ -1636,6 +1710,7 @@
"resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
"integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/parser": "^7.1.0",
"@babel/types": "^7.0.0"
@@ -1646,21 +1721,11 @@
"resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz",
"integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/types": "^7.20.7"
}
},
- "node_modules/@types/cacheable-request": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz",
- "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==",
- "dependencies": {
- "@types/http-cache-semantics": "*",
- "@types/keyv": "*",
- "@types/node": "*",
- "@types/responselike": "*"
- }
- },
"node_modules/@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
@@ -1672,26 +1737,29 @@
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
"integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/http-cache-semantics": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz",
- "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A=="
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
+ "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA=="
},
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
"integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/@types/istanbul-lib-report": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
"integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@types/istanbul-lib-coverage": "*"
}
@@ -1701,50 +1769,34 @@
"resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
"integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@types/istanbul-lib-report": "*"
}
},
- "node_modules/@types/json-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ=="
- },
- "node_modules/@types/keyv": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz",
- "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==",
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/node": {
"version": "20.11.25",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz",
"integrity": "sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==",
+ "dev": true,
+ "peer": true,
"dependencies": {
"undici-types": "~5.26.4"
}
},
- "node_modules/@types/responselike": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
- "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/stack-utils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
"integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/@types/yargs": {
"version": "17.0.32",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
"integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
+ "peer": true,
"dependencies": {
"@types/yargs-parser": "*"
}
@@ -1753,7 +1805,8 @@
"version": "21.0.3",
"resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
"integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/@vercel/ncc": {
"version": "0.38.1",
@@ -1886,6 +1939,7 @@
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
"integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"type-fest": "^0.21.3"
},
@@ -1901,6 +1955,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -1910,6 +1965,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "peer": true,
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -1925,6 +1981,7 @@
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
+ "peer": true,
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -1938,6 +1995,7 @@
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
+ "peer": true,
"dependencies": {
"sprintf-js": "~1.0.2"
}
@@ -1956,6 +2014,7 @@
"resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
"integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/transform": "^29.7.0",
"@types/babel__core": "^7.1.14",
@@ -1977,6 +2036,7 @@
"resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
"integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.0.0",
"@istanbuljs/load-nyc-config": "^1.0.0",
@@ -1993,6 +2053,7 @@
"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
"integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/core": "^7.12.3",
"@babel/parser": "^7.14.7",
@@ -2009,6 +2070,7 @@
"resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
"integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/template": "^7.3.3",
"@babel/types": "^7.3.3",
@@ -2024,6 +2086,7 @@
"resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
"integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-bigint": "^7.8.3",
@@ -2047,6 +2110,7 @@
"resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
"integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
"dev": true,
+ "peer": true,
"dependencies": {
"babel-plugin-jest-hoist": "^29.6.3",
"babel-preset-current-node-syntax": "^1.0.0"
@@ -2062,7 +2126,8 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/body-parser": {
"version": "1.20.0",
@@ -2108,6 +2173,7 @@
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
+ "peer": true,
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -2118,6 +2184,7 @@
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
+ "peer": true,
"dependencies": {
"fill-range": "^7.0.1"
},
@@ -2144,6 +2211,7 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "peer": true,
"dependencies": {
"caniuse-lite": "^1.0.30001580",
"electron-to-chromium": "^1.4.648",
@@ -2162,6 +2230,7 @@
"resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
"integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"node-int64": "^0.4.0"
}
@@ -2170,7 +2239,8 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/bytes": {
"version": "3.1.2",
@@ -2191,42 +2261,28 @@
}
},
"node_modules/cacheable-lookup": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
- "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz",
+ "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==",
"engines": {
- "node": ">=10.6.0"
+ "node": ">=14.16"
}
},
"node_modules/cacheable-request": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz",
- "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==",
+ "version": "10.2.14",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz",
+ "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==",
"dependencies": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^4.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^6.0.1",
- "responselike": "^2.0.0"
+ "@types/http-cache-semantics": "^4.0.2",
+ "get-stream": "^6.0.1",
+ "http-cache-semantics": "^4.1.1",
+ "keyv": "^4.5.3",
+ "mimic-response": "^4.0.0",
+ "normalize-url": "^8.0.0",
+ "responselike": "^3.0.0"
},
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/cacheable-request/node_modules/get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=14.16"
}
},
"node_modules/call-bind": {
@@ -2247,6 +2303,7 @@
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
}
@@ -2256,6 +2313,7 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
}
@@ -2278,7 +2336,8 @@
"type": "github",
"url": "https://github.com/sponsors/ai"
}
- ]
+ ],
+ "peer": true
},
"node_modules/chai": {
"version": "4.4.1",
@@ -2303,6 +2362,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "peer": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -2319,6 +2379,7 @@
"resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
"integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=10"
}
@@ -2346,6 +2407,7 @@
"url": "https://github.com/sponsors/sibiraj-s"
}
],
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -2354,13 +2416,15 @@
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz",
"integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/cliui": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
"integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.1",
@@ -2370,19 +2434,12 @@
"node": ">=12"
}
},
- "node_modules/clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==",
- "dependencies": {
- "mimic-response": "^1.0.0"
- }
- },
"node_modules/co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
"integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
"dev": true,
+ "peer": true,
"engines": {
"iojs": ">= 1.0.0",
"node": ">= 0.12.0"
@@ -2392,13 +2449,15 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
"integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"color-name": "~1.1.4"
},
@@ -2410,25 +2469,15 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/compress-brotli": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz",
- "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==",
- "dependencies": {
- "@types/json-buffer": "~3.0.0",
- "json-buffer": "~3.0.1"
- },
- "engines": {
- "node": ">= 12"
- }
+ "dev": true,
+ "peer": true
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/connect": {
"version": "3.7.0",
@@ -2473,13 +2522,15 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/create-jest": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
"integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/types": "^29.6.3",
"chalk": "^4.0.0",
@@ -2557,6 +2608,7 @@
"resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz",
"integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==",
"dev": true,
+ "peer": true,
"peerDependencies": {
"babel-plugin-macros": "^3.1.0"
},
@@ -2583,6 +2635,7 @@
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
"integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -2619,6 +2672,7 @@
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
"integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -2642,13 +2696,15 @@
"version": "1.4.652",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.652.tgz",
"integrity": "sha512-XvQaa8hVUAuEJtLw6VKQqvdOxTOfBLWfI10t2xWpezx4XXD3k8bdLweEKeItqaa0+OkJX5l0mP1W+JWobyIDrg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/emittery": {
"version": "0.13.1",
"resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
"integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=12"
},
@@ -2660,7 +2716,8 @@
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/encodeurl": {
"version": "1.0.2",
@@ -2671,19 +2728,12 @@
"node": ">= 0.8"
}
},
- "node_modules/end-of-stream": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
- "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
- "dependencies": {
- "once": "^1.4.0"
- }
- },
"node_modules/error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true,
+ "peer": true,
"dependencies": {
"is-arrayish": "^0.2.1"
}
@@ -2731,6 +2781,7 @@
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
}
@@ -2746,6 +2797,7 @@
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -2755,6 +2807,7 @@
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true,
+ "peer": true,
"bin": {
"esparse": "bin/esparse.js",
"esvalidate": "bin/esvalidate.js"
@@ -2777,6 +2830,7 @@
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
"integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
"dev": true,
+ "peer": true,
"dependencies": {
"cross-spawn": "^7.0.3",
"get-stream": "^6.0.0",
@@ -2800,6 +2854,7 @@
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
"integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">= 0.8.0"
}
@@ -2809,6 +2864,7 @@
"resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
"integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/expect-utils": "^29.7.0",
"jest-get-type": "^29.6.3",
@@ -2824,13 +2880,15 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/fb-watchman": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
"integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
"dev": true,
+ "peer": true,
"dependencies": {
"bser": "2.1.1"
}
@@ -2840,6 +2898,7 @@
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -2897,6 +2956,7 @@
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
+ "peer": true,
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
@@ -2905,11 +2965,20 @@
"node": ">=8"
}
},
+ "node_modules/form-data-encoder": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz",
+ "integrity": "sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==",
+ "engines": {
+ "node": ">= 18"
+ }
+ },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/fsevents": {
"version": "2.3.3",
@@ -2939,6 +3008,7 @@
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6.9.0"
}
@@ -2948,6 +3018,7 @@
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true,
+ "peer": true,
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
@@ -2980,6 +3051,7 @@
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
"integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8.0.0"
}
@@ -2988,7 +3060,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
"integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true,
"engines": {
"node": ">=10"
},
@@ -3001,6 +3072,7 @@
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
+ "peer": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -3021,39 +3093,52 @@
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/got": {
- "version": "11.8.6",
- "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz",
- "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==",
+ "version": "14.2.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-14.2.1.tgz",
+ "integrity": "sha512-KOaPMremmsvx6l9BLC04LYE6ZFW4x7e4HkTe3LwBmtuYYQwpeS4XKqzhubTIkaQ1Nr+eXxeori0zuwupXMovBQ==",
"dependencies": {
- "@sindresorhus/is": "^4.0.0",
- "@szmarczak/http-timer": "^4.0.5",
- "@types/cacheable-request": "^6.0.1",
- "@types/responselike": "^1.0.0",
- "cacheable-lookup": "^5.0.3",
- "cacheable-request": "^7.0.2",
+ "@sindresorhus/is": "^6.1.0",
+ "@szmarczak/http-timer": "^5.0.1",
+ "cacheable-lookup": "^7.0.0",
+ "cacheable-request": "^10.2.14",
"decompress-response": "^6.0.0",
- "http2-wrapper": "^1.0.0-beta.5.2",
- "lowercase-keys": "^2.0.0",
- "p-cancelable": "^2.0.0",
- "responselike": "^2.0.0"
+ "form-data-encoder": "^4.0.2",
+ "get-stream": "^8.0.1",
+ "http2-wrapper": "^2.2.1",
+ "lowercase-keys": "^3.0.0",
+ "p-cancelable": "^4.0.1",
+ "responselike": "^3.0.0"
},
"engines": {
- "node": ">=10.19.0"
+ "node": ">=20"
},
"funding": {
"url": "https://github.com/sindresorhus/got?sponsor=1"
}
},
+ "node_modules/got/node_modules/get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/has": {
"version": "1.0.3",
@@ -3072,6 +3157,7 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -3093,6 +3179,7 @@
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
"integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
"dev": true,
+ "peer": true,
"dependencies": {
"function-bind": "^1.1.2"
},
@@ -3104,7 +3191,8 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/http-cache-semantics": {
"version": "4.1.1",
@@ -3137,33 +3225,23 @@
}
},
"node_modules/http2-wrapper": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
- "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz",
+ "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==",
"dependencies": {
"quick-lru": "^5.1.1",
- "resolve-alpn": "^1.0.0"
+ "resolve-alpn": "^1.2.0"
},
"engines": {
"node": ">=10.19.0"
}
},
- "node_modules/http2-wrapper/node_modules/quick-lru": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/human-signals": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=10.17.0"
}
@@ -3185,6 +3263,7 @@
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
"integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
"dev": true,
+ "peer": true,
"dependencies": {
"pkg-dir": "^4.2.0",
"resolve-cwd": "^3.0.0"
@@ -3204,6 +3283,7 @@
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=0.8.19"
}
@@ -3213,6 +3293,7 @@
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"dev": true,
+ "peer": true,
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@@ -3228,13 +3309,15 @@
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/is-core-module": {
"version": "2.13.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
"integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
"dev": true,
+ "peer": true,
"dependencies": {
"hasown": "^2.0.0"
},
@@ -3247,6 +3330,7 @@
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -3256,6 +3340,7 @@
"resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
"integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
}
@@ -3265,6 +3350,7 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=0.12.0"
}
@@ -3274,6 +3360,7 @@
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
},
@@ -3292,6 +3379,7 @@
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
"integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -3301,6 +3389,7 @@
"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz",
"integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/core": "^7.12.3",
"@babel/parser": "^7.14.7",
@@ -3317,6 +3406,7 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
+ "peer": true,
"dependencies": {
"yallist": "^4.0.0"
},
@@ -3329,6 +3419,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "peer": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -3343,13 +3434,15 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/istanbul-lib-report": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
"integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
+ "peer": true,
"dependencies": {
"istanbul-lib-coverage": "^3.0.0",
"make-dir": "^4.0.0",
@@ -3364,6 +3457,7 @@
"resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
"integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
"dev": true,
+ "peer": true,
"dependencies": {
"debug": "^4.1.1",
"istanbul-lib-coverage": "^3.0.0",
@@ -3378,6 +3472,7 @@
"resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
"integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
"dev": true,
+ "peer": true,
"dependencies": {
"html-escaper": "^2.0.0",
"istanbul-lib-report": "^3.0.0"
@@ -3391,6 +3486,7 @@
"resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
"integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/core": "^29.7.0",
"@jest/types": "^29.6.3",
@@ -3417,6 +3513,7 @@
"resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
"integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
"dev": true,
+ "peer": true,
"dependencies": {
"execa": "^5.0.0",
"jest-util": "^29.7.0",
@@ -3431,6 +3528,7 @@
"resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
"integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/environment": "^29.7.0",
"@jest/expect": "^29.7.0",
@@ -3462,6 +3560,7 @@
"resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
"integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/core": "^29.7.0",
"@jest/test-result": "^29.7.0",
@@ -3495,6 +3594,7 @@
"resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
"integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/core": "^7.11.6",
"@jest/test-sequencer": "^29.7.0",
@@ -3540,6 +3640,7 @@
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
"integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
"dev": true,
+ "peer": true,
"dependencies": {
"chalk": "^4.0.0",
"diff-sequences": "^29.6.3",
@@ -3555,6 +3656,7 @@
"resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
"integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
"dev": true,
+ "peer": true,
"dependencies": {
"detect-newline": "^3.0.0"
},
@@ -3567,6 +3669,7 @@
"resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
"integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/types": "^29.6.3",
"chalk": "^4.0.0",
@@ -3583,6 +3686,7 @@
"resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
"integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/environment": "^29.7.0",
"@jest/fake-timers": "^29.7.0",
@@ -3600,6 +3704,7 @@
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
"integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
"dev": true,
+ "peer": true,
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
@@ -3609,6 +3714,7 @@
"resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
"integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/types": "^29.6.3",
"@types/graceful-fs": "^4.1.3",
@@ -3634,6 +3740,7 @@
"resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
"integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
"dev": true,
+ "peer": true,
"dependencies": {
"jest-get-type": "^29.6.3",
"pretty-format": "^29.7.0"
@@ -3647,6 +3754,7 @@
"resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
"integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
"dev": true,
+ "peer": true,
"dependencies": {
"chalk": "^4.0.0",
"jest-diff": "^29.7.0",
@@ -3662,6 +3770,7 @@
"resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
"integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/code-frame": "^7.12.13",
"@jest/types": "^29.6.3",
@@ -3682,6 +3791,7 @@
"resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
"integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/types": "^29.6.3",
"@types/node": "*",
@@ -3696,6 +3806,7 @@
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
"integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
},
@@ -3713,6 +3824,7 @@
"resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
"integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
"dev": true,
+ "peer": true,
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
@@ -3722,6 +3834,7 @@
"resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
"integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
"dev": true,
+ "peer": true,
"dependencies": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
@@ -3742,6 +3855,7 @@
"resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
"integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
"dev": true,
+ "peer": true,
"dependencies": {
"jest-regex-util": "^29.6.3",
"jest-snapshot": "^29.7.0"
@@ -3755,6 +3869,7 @@
"resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
"integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/console": "^29.7.0",
"@jest/environment": "^29.7.0",
@@ -3787,6 +3902,7 @@
"resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
"integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/environment": "^29.7.0",
"@jest/fake-timers": "^29.7.0",
@@ -3820,6 +3936,7 @@
"resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
"integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/core": "^7.11.6",
"@babel/generator": "^7.7.2",
@@ -3851,6 +3968,7 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
+ "peer": true,
"dependencies": {
"yallist": "^4.0.0"
},
@@ -3863,6 +3981,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "peer": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -3877,13 +3996,15 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/jest-util": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
"integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/types": "^29.6.3",
"@types/node": "*",
@@ -3901,6 +4022,7 @@
"resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
"integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/types": "^29.6.3",
"camelcase": "^6.2.0",
@@ -3918,6 +4040,7 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=10"
},
@@ -3930,6 +4053,7 @@
"resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
"integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/test-result": "^29.7.0",
"@jest/types": "^29.6.3",
@@ -3958,6 +4082,7 @@
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
"integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@types/node": "*",
"jest-util": "^29.7.0",
@@ -3973,6 +4098,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
+ "peer": true,
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -3987,13 +4113,15 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/js-yaml": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
+ "peer": true,
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@@ -4007,6 +4135,7 @@
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
"dev": true,
+ "peer": true,
"bin": {
"jsesc": "bin/jsesc"
},
@@ -4023,13 +4152,15 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/json5": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
+ "peer": true,
"bin": {
"json5": "lib/cli.js"
},
@@ -4060,11 +4191,10 @@
}
},
"node_modules/keyv": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.2.tgz",
- "integrity": "sha512-kn8WmodVBe12lmHpA6W8OY7SNh6wVR+Z+wZESF4iF5FCazaVXGWOtnbnvX0tMQ1bO+/TmOD9LziuYMvrIIs0xw==",
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
"dependencies": {
- "compress-brotli": "^1.3.8",
"json-buffer": "3.0.1"
}
},
@@ -4073,6 +4203,7 @@
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
}
@@ -4082,6 +4213,7 @@
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
}
@@ -4090,7 +4222,8 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/local-pkg": {
"version": "0.5.0",
@@ -4113,6 +4246,7 @@
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
+ "peer": true,
"dependencies": {
"p-locate": "^4.1.0"
},
@@ -4130,11 +4264,14 @@
}
},
"node_modules/lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz",
+ "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==",
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/lru-cache": {
@@ -4142,6 +4279,7 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
+ "peer": true,
"dependencies": {
"yallist": "^3.0.2"
}
@@ -4163,6 +4301,7 @@
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
"integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
"dev": true,
+ "peer": true,
"dependencies": {
"semver": "^7.5.3"
},
@@ -4178,6 +4317,7 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
+ "peer": true,
"dependencies": {
"yallist": "^4.0.0"
},
@@ -4190,6 +4330,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "peer": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -4204,13 +4345,15 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/makeerror": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
"integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
"dev": true,
+ "peer": true,
"dependencies": {
"tmpl": "1.0.5"
}
@@ -4235,6 +4378,7 @@
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
"integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
"dev": true,
+ "peer": true,
"dependencies": {
"braces": "^3.0.2",
"picomatch": "^2.3.1"
@@ -4269,16 +4413,20 @@
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz",
+ "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==",
"engines": {
- "node": ">=4"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/minimatch": {
@@ -4286,6 +4434,7 @@
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
+ "peer": true,
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -4404,35 +4553,39 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
"integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/node-releases": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/normalize-url": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
- "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz",
+ "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==",
"engines": {
- "node": ">=10"
+ "node": ">=14.16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -4443,6 +4596,7 @@
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"dev": true,
+ "peer": true,
"dependencies": {
"path-key": "^3.0.0"
},
@@ -4475,6 +4629,8 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "peer": true,
"dependencies": {
"wrappy": "1"
}
@@ -4484,6 +4640,7 @@
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dev": true,
+ "peer": true,
"dependencies": {
"mimic-fn": "^2.1.0"
},
@@ -4495,11 +4652,11 @@
}
},
"node_modules/p-cancelable": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz",
- "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz",
+ "integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==",
"engines": {
- "node": ">=8"
+ "node": ">=14.16"
}
},
"node_modules/p-limit": {
@@ -4507,6 +4664,7 @@
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"yocto-queue": "^0.1.0"
},
@@ -4522,6 +4680,7 @@
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
+ "peer": true,
"dependencies": {
"p-limit": "^2.2.0"
},
@@ -4534,6 +4693,7 @@
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
+ "peer": true,
"dependencies": {
"p-try": "^2.0.0"
},
@@ -4549,6 +4709,7 @@
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
}
@@ -4558,6 +4719,7 @@
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
@@ -4585,6 +4747,7 @@
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -4594,6 +4757,7 @@
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -4611,7 +4775,8 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/pathe": {
"version": "1.1.2",
@@ -4639,6 +4804,7 @@
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8.6"
},
@@ -4651,6 +4817,7 @@
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
"integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">= 6"
}
@@ -4660,6 +4827,7 @@
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"find-up": "^4.0.0"
},
@@ -4737,6 +4905,7 @@
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
"integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
"dev": true,
+ "peer": true,
"dependencies": {
"kleur": "^3.0.3",
"sisteransi": "^1.0.5"
@@ -4745,15 +4914,6 @@
"node": ">= 6"
}
},
- "node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
"node_modules/pure-rand": {
"version": "6.0.4",
"resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz",
@@ -4768,7 +4928,8 @@
"type": "opencollective",
"url": "https://opencollective.com/fast-check"
}
- ]
+ ],
+ "peer": true
},
"node_modules/qs": {
"version": "6.10.3",
@@ -4785,6 +4946,17 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/random-bytes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
@@ -4820,6 +4992,7 @@
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -4829,6 +5002,7 @@
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
"dev": true,
+ "peer": true,
"dependencies": {
"is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
@@ -4842,15 +5016,16 @@
}
},
"node_modules/resolve-alpn": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz",
- "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA=="
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
+ "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
},
"node_modules/resolve-cwd": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
"dev": true,
+ "peer": true,
"dependencies": {
"resolve-from": "^5.0.0"
},
@@ -4863,6 +5038,7 @@
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -4872,16 +5048,23 @@
"resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
"integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=10"
}
},
"node_modules/responselike": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
- "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz",
+ "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==",
"dependencies": {
- "lowercase-keys": "^2.0.0"
+ "lowercase-keys": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/rollup": {
@@ -4927,6 +5110,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
+ "peer": true,
"bin": {
"semver": "bin/semver.js"
}
@@ -4982,19 +5166,22 @@
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/sisteransi": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -5004,6 +5191,7 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -5022,6 +5210,7 @@
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
"integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
"dev": true,
+ "peer": true,
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
@@ -5031,13 +5220,15 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/stack-utils": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
"integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"escape-string-regexp": "^2.0.0"
},
@@ -5071,6 +5262,7 @@
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
"integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"char-regex": "^1.0.2",
"strip-ansi": "^6.0.0"
@@ -5084,6 +5276,7 @@
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
+ "peer": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -5098,6 +5291,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
+ "peer": true,
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -5110,6 +5304,7 @@
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
"integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -5119,6 +5314,7 @@
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
}
@@ -5128,6 +5324,7 @@
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
},
@@ -5158,6 +5355,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "peer": true,
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -5170,6 +5368,7 @@
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">= 0.4"
},
@@ -5182,6 +5381,7 @@
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
"integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
"dev": true,
+ "peer": true,
"dependencies": {
"@istanbuljs/schema": "^0.1.2",
"glob": "^7.1.4",
@@ -5219,13 +5419,15 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
"integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=4"
}
@@ -5235,6 +5437,7 @@
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"is-number": "^7.0.0"
},
@@ -5273,6 +5476,7 @@
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
"integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=10"
},
@@ -5320,7 +5524,9 @@
"node_modules/undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true,
+ "peer": true
},
"node_modules/unpipe": {
"version": "1.0.0",
@@ -5350,6 +5556,7 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "peer": true,
"dependencies": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
@@ -5383,6 +5590,7 @@
"resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz",
"integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.12",
"@types/istanbul-lib-coverage": "^2.0.1",
@@ -5673,6 +5881,7 @@
"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
"integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"makeerror": "1.0.12"
}
@@ -5713,6 +5922,7 @@
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
+ "peer": true,
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -5728,13 +5938,16 @@
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true,
+ "peer": true
},
"node_modules/write-file-atomic": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
"integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
"dev": true,
+ "peer": true,
"dependencies": {
"imurmurhash": "^0.1.4",
"signal-exit": "^3.0.7"
@@ -5748,6 +5961,7 @@
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=10"
}
@@ -5756,13 +5970,15 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/yargs": {
"version": "17.7.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
"integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"dev": true,
+ "peer": true,
"dependencies": {
"cliui": "^8.0.1",
"escalade": "^3.1.1",
@@ -5781,6 +5997,7 @@
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=12"
}
@@ -5790,6 +6007,7 @@
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=10"
},
@@ -5821,6 +6039,7 @@
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
"integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
"dev": true,
+ "peer": true,
"requires": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
@@ -5831,6 +6050,7 @@
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
"integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/highlight": "^7.23.4",
"chalk": "^2.4.2"
@@ -5841,6 +6061,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
+ "peer": true,
"requires": {
"color-convert": "^1.9.0"
}
@@ -5850,6 +6071,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
+ "peer": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -5861,6 +6083,7 @@
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
+ "peer": true,
"requires": {
"color-name": "1.1.3"
}
@@ -5869,25 +6092,29 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
+ "peer": true,
"requires": {
"has-flag": "^3.0.0"
}
@@ -5898,13 +6125,15 @@
"version": "7.23.5",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz",
"integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@babel/core": {
"version": "7.23.9",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz",
"integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==",
"dev": true,
+ "peer": true,
"requires": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.23.5",
@@ -5928,6 +6157,7 @@
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
"integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/types": "^7.23.6",
"@jridgewell/gen-mapping": "^0.3.2",
@@ -5940,6 +6170,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
"integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/compat-data": "^7.23.5",
"@babel/helper-validator-option": "^7.23.5",
@@ -5952,13 +6183,15 @@
"version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
"integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@babel/helper-function-name": {
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
"integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/template": "^7.22.15",
"@babel/types": "^7.23.0"
@@ -5969,6 +6202,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/types": "^7.22.5"
}
@@ -5978,6 +6212,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
"integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/types": "^7.22.15"
}
@@ -5987,6 +6222,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
"integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-module-imports": "^7.22.15",
@@ -5999,13 +6235,15 @@
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
"integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@babel/helper-simple-access": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
"integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/types": "^7.22.5"
}
@@ -6015,6 +6253,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
"integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/types": "^7.22.5"
}
@@ -6023,25 +6262,29 @@
"version": "7.23.4",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
"integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@babel/helper-validator-identifier": {
"version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@babel/helper-validator-option": {
"version": "7.23.5",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
"integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@babel/helpers": {
"version": "7.23.9",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz",
"integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/template": "^7.23.9",
"@babel/traverse": "^7.23.9",
@@ -6053,6 +6296,7 @@
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
"integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-validator-identifier": "^7.22.20",
"chalk": "^2.4.2",
@@ -6064,6 +6308,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
+ "peer": true,
"requires": {
"color-convert": "^1.9.0"
}
@@ -6073,6 +6318,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
+ "peer": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -6084,6 +6330,7 @@
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
+ "peer": true,
"requires": {
"color-name": "1.1.3"
}
@@ -6092,25 +6339,29 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
+ "peer": true,
"requires": {
"has-flag": "^3.0.0"
}
@@ -6121,13 +6372,15 @@
"version": "7.23.9",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz",
"integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@babel/plugin-syntax-async-generators": {
"version": "7.8.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
"integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
@@ -6137,6 +6390,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
"integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
@@ -6146,6 +6400,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
"integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13"
}
@@ -6155,6 +6410,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
"integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4"
}
@@ -6164,6 +6420,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
"integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
@@ -6173,6 +6430,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz",
"integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.22.5"
}
@@ -6182,6 +6440,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
"integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4"
}
@@ -6191,6 +6450,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
"integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
@@ -6200,6 +6460,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
"integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4"
}
@@ -6209,6 +6470,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
"integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
@@ -6218,6 +6480,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
"integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
@@ -6227,6 +6490,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
"integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
@@ -6236,6 +6500,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
"integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.14.5"
}
@@ -6245,6 +6510,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz",
"integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.22.5"
}
@@ -6254,6 +6520,7 @@
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz",
"integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/code-frame": "^7.23.5",
"@babel/parser": "^7.23.9",
@@ -6265,6 +6532,7 @@
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz",
"integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/code-frame": "^7.23.5",
"@babel/generator": "^7.23.6",
@@ -6283,6 +6551,7 @@
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz",
"integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-string-parser": "^7.23.4",
"@babel/helper-validator-identifier": "^7.22.20",
@@ -6293,7 +6562,8 @@
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@esbuild/aix-ppc64": {
"version": "0.19.12",
@@ -6461,6 +6731,7 @@
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
"integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
"dev": true,
+ "peer": true,
"requires": {
"camelcase": "^5.3.1",
"find-up": "^4.1.0",
@@ -6473,13 +6744,15 @@
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
"integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@jest/console": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
"integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/types": "^29.6.3",
"@types/node": "*",
@@ -6494,6 +6767,7 @@
"resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
"integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/console": "^29.7.0",
"@jest/reporters": "^29.7.0",
@@ -6530,6 +6804,7 @@
"resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
"integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/fake-timers": "^29.7.0",
"@jest/types": "^29.6.3",
@@ -6542,6 +6817,7 @@
"resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
"integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
"dev": true,
+ "peer": true,
"requires": {
"expect": "^29.7.0",
"jest-snapshot": "^29.7.0"
@@ -6552,6 +6828,7 @@
"resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
"integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
"dev": true,
+ "peer": true,
"requires": {
"jest-get-type": "^29.6.3"
}
@@ -6561,6 +6838,7 @@
"resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
"integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/types": "^29.6.3",
"@sinonjs/fake-timers": "^10.0.2",
@@ -6575,6 +6853,7 @@
"resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
"integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/environment": "^29.7.0",
"@jest/expect": "^29.7.0",
@@ -6587,6 +6866,7 @@
"resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
"integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
"dev": true,
+ "peer": true,
"requires": {
"@bcoe/v8-coverage": "^0.2.3",
"@jest/console": "^29.7.0",
@@ -6628,6 +6908,7 @@
"resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
"integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
"dev": true,
+ "peer": true,
"requires": {
"@jridgewell/trace-mapping": "^0.3.18",
"callsites": "^3.0.0",
@@ -6639,6 +6920,7 @@
"resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
"integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/console": "^29.7.0",
"@jest/types": "^29.6.3",
@@ -6651,6 +6933,7 @@
"resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
"integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/test-result": "^29.7.0",
"graceful-fs": "^4.2.9",
@@ -6663,6 +6946,7 @@
"resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
"integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/core": "^7.11.6",
"@jest/types": "^29.6.3",
@@ -6686,6 +6970,7 @@
"resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
"integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
@@ -6700,6 +6985,7 @@
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
"integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
"dev": true,
+ "peer": true,
"requires": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
@@ -6710,13 +6996,15 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
"integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@jridgewell/set-array": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.15",
@@ -6729,6 +7017,7 @@
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz",
"integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==",
"dev": true,
+ "peer": true,
"requires": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
@@ -6832,15 +7121,16 @@
"dev": true
},
"@sindresorhus/is": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz",
- "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ=="
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-6.2.0.tgz",
+ "integrity": "sha512-yM/IGPkVnYGblhDosFBwq0ZGdnVSBkNV4onUtipGMOjZd4kB6GAu3ys91aftSbyMHh6A2GPdt+KDI5NoWP63MQ=="
},
"@sinonjs/commons": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
"integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
"dev": true,
+ "peer": true,
"requires": {
"type-detect": "4.0.8"
}
@@ -6850,16 +7140,17 @@
"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
"integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
"dev": true,
+ "peer": true,
"requires": {
"@sinonjs/commons": "^3.0.0"
}
},
"@szmarczak/http-timer": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz",
- "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz",
+ "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==",
"requires": {
- "defer-to-connect": "^2.0.0"
+ "defer-to-connect": "^2.0.1"
}
},
"@types/babel__core": {
@@ -6867,6 +7158,7 @@
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
"integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/parser": "^7.20.7",
"@babel/types": "^7.20.7",
@@ -6880,6 +7172,7 @@
"resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
"integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/types": "^7.0.0"
}
@@ -6889,6 +7182,7 @@
"resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
"integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/parser": "^7.1.0",
"@babel/types": "^7.0.0"
@@ -6899,21 +7193,11 @@
"resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz",
"integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/types": "^7.20.7"
}
},
- "@types/cacheable-request": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz",
- "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==",
- "requires": {
- "@types/http-cache-semantics": "*",
- "@types/keyv": "*",
- "@types/node": "*",
- "@types/responselike": "*"
- }
- },
"@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
@@ -6925,26 +7209,29 @@
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
"integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
"dev": true,
+ "peer": true,
"requires": {
"@types/node": "*"
}
},
"@types/http-cache-semantics": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz",
- "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A=="
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
+ "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA=="
},
"@types/istanbul-lib-coverage": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
"integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@types/istanbul-lib-report": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
"integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
"dev": true,
+ "peer": true,
"requires": {
"@types/istanbul-lib-coverage": "*"
}
@@ -6954,50 +7241,34 @@
"resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
"integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
"dev": true,
+ "peer": true,
"requires": {
"@types/istanbul-lib-report": "*"
}
},
- "@types/json-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ=="
- },
- "@types/keyv": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz",
- "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==",
- "requires": {
- "@types/node": "*"
- }
- },
"@types/node": {
"version": "20.11.25",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz",
"integrity": "sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==",
+ "dev": true,
+ "peer": true,
"requires": {
"undici-types": "~5.26.4"
}
},
- "@types/responselike": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
- "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
- "requires": {
- "@types/node": "*"
- }
- },
"@types/stack-utils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
"integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@types/yargs": {
"version": "17.0.32",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
"integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
+ "peer": true,
"requires": {
"@types/yargs-parser": "*"
}
@@ -7006,7 +7277,8 @@
"version": "21.0.3",
"resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
"integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@vercel/ncc": {
"version": "0.38.1",
@@ -7102,6 +7374,7 @@
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
"integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
"dev": true,
+ "peer": true,
"requires": {
"type-fest": "^0.21.3"
}
@@ -7110,13 +7383,15 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "peer": true,
"requires": {
"color-convert": "^2.0.1"
}
@@ -7126,6 +7401,7 @@
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
+ "peer": true,
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -7136,6 +7412,7 @@
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
+ "peer": true,
"requires": {
"sprintf-js": "~1.0.2"
}
@@ -7151,6 +7428,7 @@
"resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
"integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/transform": "^29.7.0",
"@types/babel__core": "^7.1.14",
@@ -7166,6 +7444,7 @@
"resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
"integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
"@istanbuljs/load-nyc-config": "^1.0.0",
@@ -7179,6 +7458,7 @@
"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
"integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/core": "^7.12.3",
"@babel/parser": "^7.14.7",
@@ -7194,6 +7474,7 @@
"resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
"integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/template": "^7.3.3",
"@babel/types": "^7.3.3",
@@ -7206,6 +7487,7 @@
"resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
"integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-bigint": "^7.8.3",
@@ -7226,6 +7508,7 @@
"resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
"integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
"dev": true,
+ "peer": true,
"requires": {
"babel-plugin-jest-hoist": "^29.6.3",
"babel-preset-current-node-syntax": "^1.0.0"
@@ -7235,7 +7518,8 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"body-parser": {
"version": "1.20.0",
@@ -7279,6 +7563,7 @@
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
+ "peer": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -7289,6 +7574,7 @@
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
+ "peer": true,
"requires": {
"fill-range": "^7.0.1"
}
@@ -7298,6 +7584,7 @@
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz",
"integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==",
"dev": true,
+ "peer": true,
"requires": {
"caniuse-lite": "^1.0.30001580",
"electron-to-chromium": "^1.4.648",
@@ -7310,6 +7597,7 @@
"resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
"integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
"dev": true,
+ "peer": true,
"requires": {
"node-int64": "^0.4.0"
}
@@ -7318,7 +7606,8 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"bytes": {
"version": "3.1.2",
@@ -7333,32 +7622,22 @@
"dev": true
},
"cacheable-lookup": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
- "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA=="
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz",
+ "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w=="
},
"cacheable-request": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz",
- "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==",
+ "version": "10.2.14",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz",
+ "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==",
"requires": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^4.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^6.0.1",
- "responselike": "^2.0.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "requires": {
- "pump": "^3.0.0"
- }
- }
+ "@types/http-cache-semantics": "^4.0.2",
+ "get-stream": "^6.0.1",
+ "http-cache-semantics": "^4.1.1",
+ "keyv": "^4.5.3",
+ "mimic-response": "^4.0.0",
+ "normalize-url": "^8.0.0",
+ "responselike": "^3.0.0"
}
},
"call-bind": {
@@ -7375,19 +7654,22 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"caniuse-lite": {
"version": "1.0.30001581",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz",
"integrity": "sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"chai": {
"version": "4.4.1",
@@ -7409,6 +7691,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "peer": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -7418,7 +7701,8 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
"integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"check-error": {
"version": "1.0.3",
@@ -7433,50 +7717,48 @@
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
"integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"cjs-module-lexer": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz",
"integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"cliui": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
"integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dev": true,
+ "peer": true,
"requires": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.1",
"wrap-ansi": "^7.0.0"
}
},
- "clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==",
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
"integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"collect-v8-coverage": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
"integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
+ "peer": true,
"requires": {
"color-name": "~1.1.4"
}
@@ -7485,22 +7767,15 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "compress-brotli": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz",
- "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==",
- "requires": {
- "@types/json-buffer": "~3.0.0",
- "json-buffer": "~3.0.1"
- }
+ "dev": true,
+ "peer": true
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"connect": {
"version": "3.7.0",
@@ -7541,13 +7816,15 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"create-jest": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
"integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/types": "^29.6.3",
"chalk": "^4.0.0",
@@ -7598,6 +7875,7 @@
"resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz",
"integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==",
"dev": true,
+ "peer": true,
"requires": {}
},
"deep-eql": {
@@ -7613,7 +7891,8 @@
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
"integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"defer-to-connect": {
"version": "2.0.1",
@@ -7636,7 +7915,8 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
"integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"diff-sequences": {
"version": "29.6.3",
@@ -7654,19 +7934,22 @@
"version": "1.4.652",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.652.tgz",
"integrity": "sha512-XvQaa8hVUAuEJtLw6VKQqvdOxTOfBLWfI10t2xWpezx4XXD3k8bdLweEKeItqaa0+OkJX5l0mP1W+JWobyIDrg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"emittery": {
"version": "0.13.1",
"resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
"integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"encodeurl": {
"version": "1.0.2",
@@ -7674,19 +7957,12 @@
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
"dev": true
},
- "end-of-stream": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
- "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
- "requires": {
- "once": "^1.4.0"
- }
- },
"error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true,
+ "peer": true,
"requires": {
"is-arrayish": "^0.2.1"
}
@@ -7726,7 +8002,8 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"escape-html": {
"version": "1.0.3",
@@ -7738,13 +8015,15 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"estree-walker": {
"version": "3.0.3",
@@ -7760,6 +8039,7 @@
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
"integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
"dev": true,
+ "peer": true,
"requires": {
"cross-spawn": "^7.0.3",
"get-stream": "^6.0.0",
@@ -7776,13 +8056,15 @@
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
"integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"expect": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
"integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/expect-utils": "^29.7.0",
"jest-get-type": "^29.6.3",
@@ -7795,13 +8077,15 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"fb-watchman": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
"integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
"dev": true,
+ "peer": true,
"requires": {
"bser": "2.1.1"
}
@@ -7811,6 +8095,7 @@
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
+ "peer": true,
"requires": {
"to-regex-range": "^5.0.1"
}
@@ -7861,16 +8146,23 @@
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
+ "peer": true,
"requires": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
}
},
+ "form-data-encoder": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz",
+ "integrity": "sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw=="
+ },
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"fsevents": {
"version": "2.3.3",
@@ -7889,13 +8181,15 @@
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"get-func-name": {
"version": "2.0.2",
@@ -7918,19 +8212,20 @@
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
"integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"get-stream": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="
},
"glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
+ "peer": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -7944,31 +8239,40 @@
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"got": {
- "version": "11.8.6",
- "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz",
- "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==",
+ "version": "14.2.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-14.2.1.tgz",
+ "integrity": "sha512-KOaPMremmsvx6l9BLC04LYE6ZFW4x7e4HkTe3LwBmtuYYQwpeS4XKqzhubTIkaQ1Nr+eXxeori0zuwupXMovBQ==",
"requires": {
- "@sindresorhus/is": "^4.0.0",
- "@szmarczak/http-timer": "^4.0.5",
- "@types/cacheable-request": "^6.0.1",
- "@types/responselike": "^1.0.0",
- "cacheable-lookup": "^5.0.3",
- "cacheable-request": "^7.0.2",
+ "@sindresorhus/is": "^6.1.0",
+ "@szmarczak/http-timer": "^5.0.1",
+ "cacheable-lookup": "^7.0.0",
+ "cacheable-request": "^10.2.14",
"decompress-response": "^6.0.0",
- "http2-wrapper": "^1.0.0-beta.5.2",
- "lowercase-keys": "^2.0.0",
- "p-cancelable": "^2.0.0",
- "responselike": "^2.0.0"
+ "form-data-encoder": "^4.0.2",
+ "get-stream": "^8.0.1",
+ "http2-wrapper": "^2.2.1",
+ "lowercase-keys": "^3.0.0",
+ "p-cancelable": "^4.0.1",
+ "responselike": "^3.0.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="
+ }
}
},
"graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"has": {
"version": "1.0.3",
@@ -7983,7 +8287,8 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"has-symbols": {
"version": "1.0.3",
@@ -7996,6 +8301,7 @@
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
"integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
"dev": true,
+ "peer": true,
"requires": {
"function-bind": "^1.1.2"
}
@@ -8004,7 +8310,8 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"http-cache-semantics": {
"version": "4.1.1",
@@ -8033,26 +8340,20 @@
}
},
"http2-wrapper": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
- "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz",
+ "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==",
"requires": {
"quick-lru": "^5.1.1",
- "resolve-alpn": "^1.0.0"
- },
- "dependencies": {
- "quick-lru": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
- }
+ "resolve-alpn": "^1.2.0"
}
},
"human-signals": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"iconv-lite": {
"version": "0.4.24",
@@ -8068,6 +8369,7 @@
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
"integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
"dev": true,
+ "peer": true,
"requires": {
"pkg-dir": "^4.2.0",
"resolve-cwd": "^3.0.0"
@@ -8077,13 +8379,15 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"dev": true,
+ "peer": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
@@ -8099,13 +8403,15 @@
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"is-core-module": {
"version": "2.13.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
"integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
"dev": true,
+ "peer": true,
"requires": {
"hasown": "^2.0.0"
}
@@ -8114,25 +8420,29 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"is-generator-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
"integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"isexe": {
"version": "2.0.0",
@@ -8144,13 +8454,15 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
"integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"istanbul-lib-instrument": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz",
"integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/core": "^7.12.3",
"@babel/parser": "^7.14.7",
@@ -8164,6 +8476,7 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
+ "peer": true,
"requires": {
"yallist": "^4.0.0"
}
@@ -8173,6 +8486,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "peer": true,
"requires": {
"lru-cache": "^6.0.0"
}
@@ -8181,7 +8495,8 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "dev": true,
+ "peer": true
}
}
},
@@ -8190,6 +8505,7 @@
"resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
"integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
+ "peer": true,
"requires": {
"istanbul-lib-coverage": "^3.0.0",
"make-dir": "^4.0.0",
@@ -8201,6 +8517,7 @@
"resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
"integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
"dev": true,
+ "peer": true,
"requires": {
"debug": "^4.1.1",
"istanbul-lib-coverage": "^3.0.0",
@@ -8212,6 +8529,7 @@
"resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
"integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
"dev": true,
+ "peer": true,
"requires": {
"html-escaper": "^2.0.0",
"istanbul-lib-report": "^3.0.0"
@@ -8222,6 +8540,7 @@
"resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
"integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/core": "^29.7.0",
"@jest/types": "^29.6.3",
@@ -8234,6 +8553,7 @@
"resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
"integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
"dev": true,
+ "peer": true,
"requires": {
"execa": "^5.0.0",
"jest-util": "^29.7.0",
@@ -8245,6 +8565,7 @@
"resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
"integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/environment": "^29.7.0",
"@jest/expect": "^29.7.0",
@@ -8273,6 +8594,7 @@
"resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
"integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/core": "^29.7.0",
"@jest/test-result": "^29.7.0",
@@ -8292,6 +8614,7 @@
"resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
"integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/core": "^7.11.6",
"@jest/test-sequencer": "^29.7.0",
@@ -8322,6 +8645,7 @@
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
"integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
"dev": true,
+ "peer": true,
"requires": {
"chalk": "^4.0.0",
"diff-sequences": "^29.6.3",
@@ -8334,6 +8658,7 @@
"resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
"integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
"dev": true,
+ "peer": true,
"requires": {
"detect-newline": "^3.0.0"
}
@@ -8343,6 +8668,7 @@
"resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
"integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/types": "^29.6.3",
"chalk": "^4.0.0",
@@ -8356,6 +8682,7 @@
"resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
"integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/environment": "^29.7.0",
"@jest/fake-timers": "^29.7.0",
@@ -8369,13 +8696,15 @@
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
"integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"jest-haste-map": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
"integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/types": "^29.6.3",
"@types/graceful-fs": "^4.1.3",
@@ -8396,6 +8725,7 @@
"resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
"integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
"dev": true,
+ "peer": true,
"requires": {
"jest-get-type": "^29.6.3",
"pretty-format": "^29.7.0"
@@ -8406,6 +8736,7 @@
"resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
"integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
"dev": true,
+ "peer": true,
"requires": {
"chalk": "^4.0.0",
"jest-diff": "^29.7.0",
@@ -8418,6 +8749,7 @@
"resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
"integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/code-frame": "^7.12.13",
"@jest/types": "^29.6.3",
@@ -8435,6 +8767,7 @@
"resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
"integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/types": "^29.6.3",
"@types/node": "*",
@@ -8446,19 +8779,22 @@
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
"integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
"dev": true,
+ "peer": true,
"requires": {}
},
"jest-regex-util": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
"integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"jest-resolve": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
"integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
"dev": true,
+ "peer": true,
"requires": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
@@ -8476,6 +8812,7 @@
"resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
"integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
"dev": true,
+ "peer": true,
"requires": {
"jest-regex-util": "^29.6.3",
"jest-snapshot": "^29.7.0"
@@ -8486,6 +8823,7 @@
"resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
"integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/console": "^29.7.0",
"@jest/environment": "^29.7.0",
@@ -8515,6 +8853,7 @@
"resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
"integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/environment": "^29.7.0",
"@jest/fake-timers": "^29.7.0",
@@ -8545,6 +8884,7 @@
"resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
"integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/core": "^7.11.6",
"@babel/generator": "^7.7.2",
@@ -8573,6 +8913,7 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
+ "peer": true,
"requires": {
"yallist": "^4.0.0"
}
@@ -8582,6 +8923,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "peer": true,
"requires": {
"lru-cache": "^6.0.0"
}
@@ -8590,7 +8932,8 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "dev": true,
+ "peer": true
}
}
},
@@ -8599,6 +8942,7 @@
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
"integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/types": "^29.6.3",
"@types/node": "*",
@@ -8613,6 +8957,7 @@
"resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
"integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/types": "^29.6.3",
"camelcase": "^6.2.0",
@@ -8626,7 +8971,8 @@
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true
+ "dev": true,
+ "peer": true
}
}
},
@@ -8635,6 +8981,7 @@
"resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
"integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/test-result": "^29.7.0",
"@jest/types": "^29.6.3",
@@ -8658,6 +9005,7 @@
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
"integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"dev": true,
+ "peer": true,
"requires": {
"@types/node": "*",
"jest-util": "^29.7.0",
@@ -8670,6 +9018,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
+ "peer": true,
"requires": {
"has-flag": "^4.0.0"
}
@@ -8680,13 +9029,15 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"js-yaml": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
+ "peer": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@@ -8696,7 +9047,8 @@
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"json-buffer": {
"version": "3.0.1",
@@ -8707,13 +9059,15 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"json5": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"jsonata": {
"version": "2.0.3",
@@ -8732,11 +9086,10 @@
"integrity": "sha512-BtRwVKS+5dsgPpAtzJcpo5OoWjSs1/zllSBG0+8o8/aV0Ki76m6iZwHnwnsqoTdhfFZDN1XIdcaZr5ZkP+H2gg=="
},
"keyv": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.2.tgz",
- "integrity": "sha512-kn8WmodVBe12lmHpA6W8OY7SNh6wVR+Z+wZESF4iF5FCazaVXGWOtnbnvX0tMQ1bO+/TmOD9LziuYMvrIIs0xw==",
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
"requires": {
- "compress-brotli": "^1.3.8",
"json-buffer": "3.0.1"
}
},
@@ -8744,19 +9097,22 @@
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"lines-and-columns": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"local-pkg": {
"version": "0.5.0",
@@ -8773,6 +9129,7 @@
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
+ "peer": true,
"requires": {
"p-locate": "^4.1.0"
}
@@ -8787,15 +9144,16 @@
}
},
"lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz",
+ "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ=="
},
"lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
+ "peer": true,
"requires": {
"yallist": "^3.0.2"
}
@@ -8814,6 +9172,7 @@
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
"integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
"dev": true,
+ "peer": true,
"requires": {
"semver": "^7.5.3"
},
@@ -8823,6 +9182,7 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
+ "peer": true,
"requires": {
"yallist": "^4.0.0"
}
@@ -8832,6 +9192,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "peer": true,
"requires": {
"lru-cache": "^6.0.0"
}
@@ -8840,7 +9201,8 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "dev": true,
+ "peer": true
}
}
},
@@ -8849,6 +9211,7 @@
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
"integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
"dev": true,
+ "peer": true,
"requires": {
"tmpl": "1.0.5"
}
@@ -8870,6 +9233,7 @@
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
"integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
"dev": true,
+ "peer": true,
"requires": {
"braces": "^3.0.2",
"picomatch": "^2.3.1"
@@ -8894,18 +9258,20 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz",
+ "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg=="
},
"minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
+ "peer": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@@ -8988,36 +9354,41 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
"integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node-releases": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"normalize-url": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
- "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz",
+ "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w=="
},
"npm-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"dev": true,
+ "peer": true,
"requires": {
"path-key": "^3.0.0"
}
@@ -9041,6 +9412,8 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "peer": true,
"requires": {
"wrappy": "1"
}
@@ -9050,20 +9423,22 @@
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dev": true,
+ "peer": true,
"requires": {
"mimic-fn": "^2.1.0"
}
},
"p-cancelable": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz",
- "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg=="
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz",
+ "integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg=="
},
"p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
+ "peer": true,
"requires": {
"yocto-queue": "^0.1.0"
}
@@ -9073,6 +9448,7 @@
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
+ "peer": true,
"requires": {
"p-limit": "^2.2.0"
},
@@ -9082,6 +9458,7 @@
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
+ "peer": true,
"requires": {
"p-try": "^2.0.0"
}
@@ -9092,13 +9469,15 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
@@ -9116,13 +9495,15 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"path-key": {
"version": "3.1.1",
@@ -9134,7 +9515,8 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"pathe": {
"version": "1.1.2",
@@ -9158,19 +9540,22 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"pirates": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
"integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
+ "peer": true,
"requires": {
"find-up": "^4.0.0"
}
@@ -9221,25 +9606,18 @@
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
"integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
"dev": true,
+ "peer": true,
"requires": {
"kleur": "^3.0.3",
"sisteransi": "^1.0.5"
}
},
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
"pure-rand": {
"version": "6.0.4",
"resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz",
"integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"qs": {
"version": "6.10.3",
@@ -9250,6 +9628,11 @@
"side-channel": "^1.0.4"
}
},
+ "quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
+ },
"random-bytes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
@@ -9278,13 +9661,15 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"resolve": {
"version": "1.22.8",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
"dev": true,
+ "peer": true,
"requires": {
"is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
@@ -9292,15 +9677,16 @@
}
},
"resolve-alpn": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz",
- "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA=="
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
+ "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
},
"resolve-cwd": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
"dev": true,
+ "peer": true,
"requires": {
"resolve-from": "^5.0.0"
}
@@ -9309,20 +9695,22 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"resolve.exports": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
"integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"responselike": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
- "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz",
+ "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==",
"requires": {
- "lowercase-keys": "^2.0.0"
+ "lowercase-keys": "^3.0.0"
}
},
"rollup": {
@@ -9358,7 +9746,8 @@
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"setprototypeof": {
"version": "1.2.0",
@@ -9402,25 +9791,29 @@
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"sisteransi": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"source-map-js": {
"version": "1.0.2",
@@ -9433,6 +9826,7 @@
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
"integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
"dev": true,
+ "peer": true,
"requires": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
@@ -9442,13 +9836,15 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"stack-utils": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
"integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
"dev": true,
+ "peer": true,
"requires": {
"escape-string-regexp": "^2.0.0"
}
@@ -9476,6 +9872,7 @@
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
"integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
"dev": true,
+ "peer": true,
"requires": {
"char-regex": "^1.0.2",
"strip-ansi": "^6.0.0"
@@ -9486,6 +9883,7 @@
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
+ "peer": true,
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -9497,6 +9895,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
+ "peer": true,
"requires": {
"ansi-regex": "^5.0.1"
}
@@ -9505,19 +9904,22 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
"integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"strip-final-newline": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"strip-literal": {
"version": "2.0.0",
@@ -9541,6 +9943,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "peer": true,
"requires": {
"has-flag": "^4.0.0"
}
@@ -9549,13 +9952,15 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"test-exclude": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
"integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
"dev": true,
+ "peer": true,
"requires": {
"@istanbuljs/schema": "^0.1.2",
"glob": "^7.1.4",
@@ -9584,19 +9989,22 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
"integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
+ "peer": true,
"requires": {
"is-number": "^7.0.0"
}
@@ -9622,7 +10030,8 @@
"version": "0.21.3",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
"integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"type-is": {
"version": "1.6.18",
@@ -9658,7 +10067,9 @@
"undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true,
+ "peer": true
},
"unpipe": {
"version": "1.0.0",
@@ -9671,6 +10082,7 @@
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
"integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
"dev": true,
+ "peer": true,
"requires": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
@@ -9692,6 +10104,7 @@
"resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz",
"integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==",
"dev": true,
+ "peer": true,
"requires": {
"@jridgewell/trace-mapping": "^0.3.12",
"@types/istanbul-lib-coverage": "^2.0.1",
@@ -9835,6 +10248,7 @@
"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
"integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
"dev": true,
+ "peer": true,
"requires": {
"makeerror": "1.0.12"
}
@@ -9863,6 +10277,7 @@
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
+ "peer": true,
"requires": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -9872,13 +10287,16 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true,
+ "peer": true
},
"write-file-atomic": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
"integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
"dev": true,
+ "peer": true,
"requires": {
"imurmurhash": "^0.1.4",
"signal-exit": "^3.0.7"
@@ -9888,19 +10306,22 @@
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"yargs": {
"version": "17.7.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
"integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"dev": true,
+ "peer": true,
"requires": {
"cliui": "^8.0.1",
"escalade": "^3.1.1",
@@ -9915,13 +10336,15 @@
"version": "21.1.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true
+ "dev": true,
+ "peer": true
}
}
}
diff --git a/package.json b/package.json
index 0608726..d21de00 100644
--- a/package.json
+++ b/package.json
@@ -36,13 +36,12 @@
"homepage": "https://github.com/hashicorp/vault-action#readme",
"dependencies": {
"@actions/core": "^1.10.1",
- "got": "^11.8.6",
+ "got": "^14.2.1",
"jsonata": "^2.0.3",
"jsrsasign": "^11.0.0"
},
"devDependencies": {
"@vercel/ncc": "^0.38.1",
- "jest": "^29.7.0",
"jest-when": "^3.6.0",
"mock-http-server": "^1.4.5",
"vitest": "^1.3.1"