diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index a5ed7b6..8ffe523 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -8,6 +8,7 @@ Relates OR Closes #0000
### Checklist
- [ ] Added [CHANGELOG](https://github.com/hashicorp/vault-action/blob/master/CHANGELOG.md) entry (only for user-facing changes)
+- [ ] Did not commit changes to `dist/index.js` (This is only done for releases by vault-action maintainers)
### Community Note
diff --git a/.github/workflows/local-test.yaml b/.github/workflows/local-test.yaml
index 21585c8..9c24861 100644
--- a/.github/workflows/local-test.yaml
+++ b/.github/workflows/local-test.yaml
@@ -48,26 +48,14 @@ jobs:
token: testtoken
secrets: |
secret/data/test-json-string jsonString;
- secret/data/test-json-data jsonData;
- - uses: actions/github-script@v7
- with:
- github-token: "foobar"
- script: |
- const { JSONSTRING, JSONDATA } = process.env
+ - name: Check Secrets
+ run: |
+ touch secrets.json
+ echo "${{ steps.import-secrets.outputs.jsonString }}" >> secrets.json
- console.log(`string ${JSONSTRING}`)
- console.log(`data ${JSONDATA}`)
- const str = JSONDATA
-
- let valid = true
- try {
- JSON.parse(str)
- } catch (e) {
- valid = false
- }
- if (valid) {
- console.log("valid json")
- } else {
- console.log("not valid json")
- }
+ - name: Check json file format
+ run: |
+ echo
+ cat secrets.json
+ jq -c . < secrets.json
diff --git a/dist/index.js b/dist/index.js
index f40a1d9..987f436 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -1,9 +1,10 @@
-import { createRequire as __WEBPACK_EXTERNAL_createRequire } from "module";
-/******/ var __webpack_modules__ = ({
+/******/ (() => { // webpackBootstrap
+/******/ var __webpack_modules__ = ({
/***/ 7351:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
@@ -102,6 +103,7 @@ function escapeProperty(s) {
/***/ 2186:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
@@ -444,6 +446,7 @@ Object.defineProperty(exports, "toPlatformPath", ({ enumerable: true, get: funct
/***/ 717:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+"use strict";
// For internal use, subject to change.
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
@@ -508,6 +511,7 @@ exports.prepareKeyValueMessage = prepareKeyValueMessage;
/***/ 8041:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
@@ -591,6 +595,7 @@ exports.OidcClient = OidcClient;
/***/ 2981:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
@@ -655,6 +660,7 @@ exports.toPlatformPath = toPlatformPath;
/***/ 1327:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
@@ -944,6 +950,7 @@ exports.summary = _summary;
/***/ 5278:
/***/ ((__unused_webpack_module, exports) => {
+"use strict";
// We use any as a valid input type
/* eslint-disable @typescript-eslint/no-explicit-any */
@@ -990,6 +997,7 @@ exports.toCommandProperties = toCommandProperties;
/***/ 5526:
/***/ (function(__unused_webpack_module, exports) {
+"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
@@ -1077,6 +1085,7 @@ exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHand
/***/ 6255:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+"use strict";
/* eslint-disable @typescript-eslint/no-explicit-any */
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
@@ -1688,6 +1697,7 @@ const lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCa
/***/ 9835:
/***/ ((__unused_webpack_module, exports) => {
+"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.checkBypass = exports.getProxyUrl = void 0;
@@ -1750,11 +1760,1490 @@ function checkBypass(reqUrl) {
exports.checkBypass = checkBypass;
//# sourceMappingURL=proxy.js.map
+/***/ }),
+
+/***/ 7678:
+/***/ ((module, exports) => {
+
+"use strict";
+
+///
+///
+///
+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__) => {
+
+"use strict";
+
+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__) => {
+
+"use strict";
+
+const {
+ V4MAPPED,
+ ADDRCONFIG,
+ ALL,
+ promises: {
+ Resolver: AsyncResolver
+ },
+ lookup: dnsLookup
+} = __nccwpck_require__(9523);
+const {promisify} = __nccwpck_require__(3837);
+const os = __nccwpck_require__(2037);
+
+const kCacheableLookupCreateConnection = Symbol('cacheableLookupCreateConnection');
+const kCacheableLookupInstance = Symbol('cacheableLookupInstance');
+const kExpires = Symbol('expires');
+
+const supportsALL = typeof ALL === 'number';
+
+const verifyAgent = agent => {
+ if (!(agent && typeof agent.createConnection === 'function')) {
+ throw new Error('Expected an Agent instance as the first argument');
+ }
+};
+
+const map4to6 = entries => {
+ for (const entry of entries) {
+ if (entry.family === 6) {
+ continue;
+ }
+
+ entry.address = `::ffff:${entry.address}`;
+ entry.family = 6;
+ }
+};
+
+const getIfaceInfo = () => {
+ let has4 = false;
+ let has6 = false;
+
+ for (const device of Object.values(os.networkInterfaces())) {
+ for (const iface of device) {
+ if (iface.internal) {
+ continue;
+ }
+
+ if (iface.family === 'IPv6') {
+ has6 = true;
+ } else {
+ has4 = true;
+ }
+
+ if (has4 && has6) {
+ return {has4, has6};
+ }
+ }
+ }
+
+ return {has4, has6};
+};
+
+const isIterable = map => {
+ return Symbol.iterator in map;
+};
+
+const 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__) => {
+
+"use strict";
+
+const {PassThrough: PassThroughStream} = __nccwpck_require__(2781);
+
+module.exports = options => {
+ options = {...options};
+
+ const {array} = options;
+ let {encoding} = options;
+ const isBuffer = encoding === 'buffer';
+ let objectMode = false;
+
+ if (array) {
+ objectMode = !(encoding || isBuffer);
+ } else {
+ encoding = encoding || 'utf8';
+ }
+
+ if (isBuffer) {
+ encoding = null;
+ }
+
+ const stream = new PassThroughStream({objectMode});
+
+ if (encoding) {
+ stream.setEncoding(encoding);
+ }
+
+ let length = 0;
+ const chunks = [];
+
+ stream.on('data', chunk => {
+ chunks.push(chunk);
+
+ if (objectMode) {
+ length = chunks.length;
+ } else {
+ length += chunk.length;
+ }
+ });
+
+ stream.getBufferedValue = () => {
+ if (array) {
+ return chunks;
+ }
+
+ return isBuffer ? Buffer.concat(chunks, length) : chunks.join('');
+ };
+
+ stream.getBufferedLength = () => length;
+
+ return stream;
+};
+
+
+/***/ }),
+
+/***/ 7040:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+const {constants: BufferConstants} = __nccwpck_require__(4300);
+const pump = __nccwpck_require__(8341);
+const bufferStream = __nccwpck_require__(4340);
+
+class MaxBufferError extends Error {
+ constructor() {
+ super('maxBuffer exceeded');
+ this.name = 'MaxBufferError';
+ }
+}
+
+async function getStream(inputStream, options) {
+ if (!inputStream) {
+ return Promise.reject(new Error('Expected a stream'));
+ }
+
+ options = {
+ maxBuffer: Infinity,
+ ...options
+ };
+
+ const {maxBuffer} = options;
+
+ let stream;
+ await new Promise((resolve, reject) => {
+ const rejectPromise = error => {
+ // Don't retrieve an oversized buffer.
+ if (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {
+ error.bufferedData = stream.getBufferedValue();
+ }
+
+ reject(error);
+ };
+
+ stream = pump(inputStream, bufferStream(options), error => {
+ if (error) {
+ rejectPromise(error);
+ return;
+ }
+
+ resolve();
+ });
+
+ stream.on('data', () => {
+ if (stream.getBufferedLength() > maxBuffer) {
+ rejectPromise(new MaxBufferError());
+ }
+ });
+ });
+
+ return stream.getBufferedValue();
+}
+
+module.exports = getStream;
+// TODO: Remove this for the next major release
+module.exports["default"] = getStream;
+module.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'});
+module.exports.array = (stream, options) => getStream(stream, {...options, array: true});
+module.exports.MaxBufferError = MaxBufferError;
+
+
+/***/ }),
+
+/***/ 8116:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const EventEmitter = __nccwpck_require__(2361);
+const urlLib = __nccwpck_require__(7310);
+const normalizeUrl = __nccwpck_require__(7952);
+const getStream = __nccwpck_require__(7040);
+const CachePolicy = __nccwpck_require__(1002);
+const Response = __nccwpck_require__(9004);
+const lowercaseKeys = __nccwpck_require__(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__) => {
+
+"use strict";
+
+
+const PassThrough = (__nccwpck_require__(2781).PassThrough);
+const mimicResponse = __nccwpck_require__(2610);
+
+const cloneResponse = response => {
+ if (!(response && response.pipe)) {
+ throw new TypeError('Parameter `response` must be a response stream.');
+ }
+
+ const clone = new PassThrough();
+ mimicResponse(response, clone);
+
+ return response.pipe(clone);
+};
+
+module.exports = cloneResponse;
+
+
+/***/ }),
+
+/***/ 5728:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+const { promisify } = __nccwpck_require__(3837)
+const JSONB = __nccwpck_require__(2820)
+const zlib = __nccwpck_require__(9796)
+
+const mergeOptions = __nccwpck_require__(4968)
+
+const compress = promisify(zlib.brotliCompress)
+
+const decompress = promisify(zlib.brotliDecompress)
+
+const identity = val => val
+
+const createCompress = ({
+ enable = true,
+ serialize = JSONB.stringify,
+ deserialize = JSONB.parse,
+ compressOptions,
+ decompressOptions
+} = {}) => {
+ if (!enable) {
+ return { serialize, deserialize, decompress: identity, compress: identity }
+ }
+
+ return {
+ serialize,
+ deserialize,
+ compress: async (data, options = {}) => {
+ if (data === undefined) return data
+ const serializedData = serialize(data)
+ return compress(serializedData, mergeOptions(compressOptions, options))
+ },
+ decompress: async (data, options = {}) => {
+ if (data === undefined) return data
+ return deserialize(
+ await decompress(data, mergeOptions(decompressOptions, options))
+ )
+ }
+ }
+}
+
+module.exports = createCompress
+module.exports.stringify = JSONB.stringify
+module.exports.parse = JSONB.parse
+
+
+/***/ }),
+
+/***/ 4968:
+/***/ ((module) => {
+
+"use strict";
+
+
+module.exports = (defaultOptions = {}, options = {}) => {
+ const params = {
+ ...(defaultOptions.params || {}),
+ ...(options.params || {})
+ }
+
+ return {
+ ...defaultOptions,
+ ...options,
+ ...(Object.keys(params).length
+ ? {
+ params
+ }
+ : {})
+ }
+}
+
+
/***/ }),
/***/ 2391:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+"use strict";
const {Transform, PassThrough} = __nccwpck_require__(2781);
const zlib = __nccwpck_require__(9796);
@@ -1820,6 +3309,7 @@ module.exports = response => {
/***/ 3877:
/***/ ((module) => {
+"use strict";
// We define these manually to ensure they're always copied
@@ -1904,6 +3394,7 @@ module.exports = (fromStream, toStream) => {
/***/ 6214:
/***/ ((module, exports) => {
+"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
function isTLSSocket(socket) {
@@ -1955,129 +3446,2907 @@ module.exports["default"] = deferToConnect;
/***/ }),
-/***/ 1585:
+/***/ 1205:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+var once = __nccwpck_require__(1223);
-const {PassThrough: PassThroughStream} = __nccwpck_require__(2781);
+var noop = function() {};
-module.exports = options => {
- options = {...options};
+var isRequest = function(stream) {
+ return stream.setHeader && typeof stream.abort === 'function';
+};
- const {array} = options;
- let {encoding} = options;
- const isBuffer = encoding === 'buffer';
- let objectMode = false;
+var isChildProcess = function(stream) {
+ return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3
+};
- if (array) {
- objectMode = !(encoding || isBuffer);
- } else {
- encoding = encoding || 'utf8';
- }
+var eos = function(stream, opts, callback) {
+ if (typeof opts === 'function') return eos(stream, null, opts);
+ if (!opts) opts = {};
- if (isBuffer) {
- encoding = null;
- }
+ callback = once(callback || noop);
- const stream = new PassThroughStream({objectMode});
+ 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);
- 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('');
+ var onlegacyfinish = function() {
+ if (!stream.writable) onfinish();
};
- stream.getBufferedLength = () => length;
+ var onfinish = function() {
+ writable = false;
+ if (!readable) callback.call(stream);
+ };
- return 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 (isChildProcess(stream)) stream.on('exit', onexit);
+
+ stream.on('end', onend);
+ stream.on('finish', onfinish);
+ if (opts.error !== false) stream.on('error', onerror);
+ stream.on('close', onclose);
+
+ return function() {
+ stream.removeListener('complete', onfinish);
+ stream.removeListener('abort', onclose);
+ stream.removeListener('request', onrequest);
+ if (stream.req) stream.req.removeListener('finish', onfinish);
+ stream.removeListener('end', onlegacyfinish);
+ stream.removeListener('close', onlegacyfinish);
+ stream.removeListener('finish', onfinish);
+ stream.removeListener('exit', onexit);
+ stream.removeListener('end', onend);
+ stream.removeListener('error', onerror);
+ stream.removeListener('close', onclose);
+ };
+};
+
+module.exports = eos;
+
+
+/***/ }),
+
+/***/ 6457:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+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;
+}
+exports["default"] = createRejection;
+
+
+/***/ }),
+
+/***/ 6056:
+/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __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;
+}
+exports["default"] = asPromise;
+__exportStar(__nccwpck_require__(4597), exports);
+
+
+/***/ }),
+
+/***/ 1048:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+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__) => {
+
+"use strict";
+
+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__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __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) => {
+
+"use strict";
+
+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__) => {
+
+"use strict";
+
+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) => {
+
+"use strict";
+
+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');
};
/***/ }),
-/***/ 1766:
-/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+/***/ 4564:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+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;
+};
-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);
+/***/ 4500:
+/***/ ((__unused_webpack_module, exports) => {
-class MaxBufferError extends Error {
- constructor() {
- super('maxBuffer exceeded');
- this.name = 'MaxBufferError';
- }
+"use strict";
+
+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__) => {
+
+"use strict";
+
+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) => {
+
+"use strict";
+
+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__) => {
+
+"use strict";
+
+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) => {
+
+"use strict";
+
+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;
-async function getStream(inputStream, options) {
- if (!inputStream) {
- throw new Error('Expected a stream');
- }
- options = {
- maxBuffer: Infinity,
- ...options
- };
+/***/ }),
- const {maxBuffer} = options;
- const stream = bufferStream(options);
+/***/ 2454:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
- 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();
- }
+"use strict";
- 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();
+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;
+};
-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;
+
+/***/ }),
+
+/***/ 1593:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+
+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__) => {
+
+"use strict";
+
+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) => {
+
+"use strict";
+
+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__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __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__) {
+
+"use strict";
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __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) => {
+
+"use strict";
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+
+
+/***/ }),
+
+/***/ 285:
+/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+
+"use strict";
+
+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) => {
+
+"use strict";
+
+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'
+ });
+};
/***/ }),
@@ -2085,6 +6354,7 @@ module.exports.MaxBufferError = MaxBufferError;
/***/ 1002:
/***/ ((module) => {
+"use strict";
// rfc7231 6.1
const statusCodeCacheableByDefault = new Set([
@@ -2761,78 +7031,187 @@ module.exports = class CachePolicy {
};
+/***/ }),
+
+/***/ 5461:
+/***/ ((module) => {
+
+"use strict";
+
+
+class QuickLRU {
+ constructor(options = {}) {
+ if (!(options.maxSize && options.maxSize > 0)) {
+ throw new TypeError('`maxSize` must be a number greater than 0');
+ }
+
+ this.maxSize = options.maxSize;
+ this.onEviction = options.onEviction;
+ this.cache = new Map();
+ this.oldCache = new Map();
+ this._size = 0;
+ }
+
+ _set(key, value) {
+ this.cache.set(key, value);
+ this._size++;
+
+ if (this._size >= this.maxSize) {
+ this._size = 0;
+
+ if (typeof this.onEviction === 'function') {
+ for (const [key, value] of this.oldCache.entries()) {
+ this.onEviction(key, value);
+ }
+ }
+
+ this.oldCache = this.cache;
+ this.cache = new Map();
+ }
+ }
+
+ get(key) {
+ if (this.cache.has(key)) {
+ return this.cache.get(key);
+ }
+
+ if (this.oldCache.has(key)) {
+ const value = this.oldCache.get(key);
+ this.oldCache.delete(key);
+ this._set(key, value);
+ return value;
+ }
+ }
+
+ set(key, value) {
+ if (this.cache.has(key)) {
+ this.cache.set(key, value);
+ } else {
+ this._set(key, value);
+ }
+
+ return this;
+ }
+
+ has(key) {
+ return this.cache.has(key) || this.oldCache.has(key);
+ }
+
+ peek(key) {
+ if (this.cache.has(key)) {
+ return this.cache.get(key);
+ }
+
+ if (this.oldCache.has(key)) {
+ return this.oldCache.get(key);
+ }
+ }
+
+ delete(key) {
+ const deleted = this.cache.delete(key);
+ if (deleted) {
+ this._size--;
+ }
+
+ return this.oldCache.delete(key) || deleted;
+ }
+
+ clear() {
+ this.cache.clear();
+ this.oldCache.clear();
+ this._size = 0;
+ }
+
+ * keys() {
+ for (const [key] of this) {
+ yield key;
+ }
+ }
+
+ * values() {
+ for (const [, value] of this) {
+ yield value;
+ }
+ }
+
+ * [Symbol.iterator]() {
+ for (const item of this.cache) {
+ yield item;
+ }
+
+ for (const item of this.oldCache) {
+ const [key] = item;
+ if (!this.cache.has(key)) {
+ yield item;
+ }
+ }
+ }
+
+ get size() {
+ let oldCacheSize = 0;
+ for (const key of this.oldCache.keys()) {
+ if (!this.cache.has(key)) {
+ oldCacheSize++;
+ }
+ }
+
+ return Math.min(this._size + oldCacheSize, this.maxSize);
+ }
+}
+
+module.exports = QuickLRU;
+
+
/***/ }),
/***/ 9898:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+"use strict";
-// See https://github.com/facebook/jest/issues/2549
-// eslint-disable-next-line node/prefer-global/url
-const {URL} = __nccwpck_require__(7310);
const EventEmitter = __nccwpck_require__(2361);
const tls = __nccwpck_require__(4404);
const http2 = __nccwpck_require__(5158);
-const QuickLRU = __nccwpck_require__(9273);
-const delayAsyncDestroy = __nccwpck_require__(9237);
+const QuickLRU = __nccwpck_require__(5461);
-const kCurrentStreamCount = Symbol('currentStreamCount');
+const kCurrentStreamsCount = Symbol('currentStreamsCount');
const kRequest = Symbol('request');
const kOriginSet = Symbol('cachedOriginSet');
const kGracefullyClosing = Symbol('gracefullyClosing');
-const kLength = Symbol('length');
const nameKeys = [
- // Not an Agent option actually
- 'createConnection',
-
// `http2.connect()` options
'maxDeflateDynamicTableSize',
- 'maxSettings',
'maxSessionMemory',
'maxHeaderListPairs',
'maxOutstandingPings',
'maxReservedRemoteStreams',
'maxSendHeaderBlockLength',
'paddingStrategy',
- 'peerMaxConcurrentStreams',
- 'settings',
- // `tls.connect()` source options
- 'family',
+ // `tls.connect()` options
'localAddress',
- 'rejectUnauthorized',
-
- // `tls.connect()` secure context options
- 'pskCallback',
- 'minDHSize',
-
- // `tls.connect()` destination options
- // - `servername` is automatically validated, skip it
- // - `host` and `port` just describe the destination server,
'path',
- 'socket',
+ 'rejectUnauthorized',
+ 'minDHSize',
// `tls.createSecureContext()` options
'ca',
'cert',
- 'sigalgs',
- 'ciphers',
'clientCertEngine',
- 'crl',
- 'dhparam',
- 'ecdhCurve',
- 'honorCipherOrder',
+ 'ciphers',
'key',
- 'privateKeyEngine',
- 'privateKeyIdentifier',
- 'maxVersion',
- 'minVersion',
'pfx',
- 'secureOptions',
+ 'servername',
+ 'minVersion',
+ 'maxVersion',
'secureProtocol',
- 'sessionIdContext',
- 'ticketKeys'
+ 'crl',
+ 'honorCipherOrder',
+ 'ecdhCurve',
+ 'dhparam',
+ 'secureOptions',
+ 'sessionIdContext'
];
const getSortedIndex = (array, value, compare) => {
@@ -2842,7 +7221,9 @@ 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;
@@ -2852,28 +7233,25 @@ const getSortedIndex = (array, value, compare) => {
return low;
};
-const compareSessions = (a, b) => a.remoteSettings.maxConcurrentStreams > b.remoteSettings.maxConcurrentStreams;
+const compareSessions = (a, b) => {
+ return a.remoteSettings.maxConcurrentStreams > b.remoteSettings.maxConcurrentStreams;
+};
// See https://tools.ietf.org/html/rfc8336
const closeCoveredSessions = (where, session) => {
// Clients SHOULD NOT emit new requests on any connection whose Origin
// Set is a proper subset of another connection's Origin Set, and they
// SHOULD close it once all outstanding requests are satisfied.
- for (let index = 0; index < where.length; index++) {
- const coveredSession = where[index];
-
+ for (const coveredSession of where) {
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[kCurrentStreamCount] + session[kCurrentStreamCount]) <= session.remoteSettings.maxConcurrentStreams
+ coveredSession[kCurrentStreamsCount] + session[kCurrentStreamsCount] <= session.remoteSettings.maxConcurrentStreams
) {
// This allows pending requests to finish and prevents making new requests.
gracefullyClose(coveredSession);
@@ -2883,45 +7261,62 @@ const closeCoveredSessions = (where, session) => {
// This is basically inverted `closeCoveredSessions(...)`.
const closeSessionIfCovered = (where, coveredSession) => {
- for (let index = 0; index < where.length; index++) {
- const session = where[index];
-
+ for (const session of where) {
if (
- coveredSession[kOriginSet].length > 0
- && coveredSession[kOriginSet].length < session[kOriginSet].length
- && coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin))
- && (coveredSession[kCurrentStreamCount] + session[kCurrentStreamCount]) <= session.remoteSettings.maxConcurrentStreams
+ coveredSession[kOriginSet].length < session[kOriginSet].length &&
+ coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin)) &&
+ coveredSession[kCurrentStreamsCount] + session[kCurrentStreamsCount] <= session.remoteSettings.maxConcurrentStreams
) {
gracefullyClose(coveredSession);
+ }
+ }
+};
- return true;
+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 false;
+ return result;
};
const gracefullyClose = session => {
session[kGracefullyClosing] = true;
- if (session[kCurrentStreamCount] === 0) {
+ if (session[kCurrentStreamsCount] === 0) {
session.close();
}
};
class Agent extends EventEmitter {
- constructor({timeout = 0, maxSessions = Number.POSITIVE_INFINITY, maxEmptySessions = 10, maxCachedTlsSessions = 100} = {}) {
+ constructor({timeout = 60000, maxSessions = Infinity, maxFreeSessions = 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.
@@ -2934,90 +7329,69 @@ class Agent extends EventEmitter {
// Max sessions in total
this.maxSessions = maxSessions;
- // Max empty sessions in total
- this.maxEmptySessions = maxEmptySessions;
+ // Max free sessions in total
+ // TODO: decreasing `maxFreeSessions` should close some sessions
+ this.maxFreeSessions = maxFreeSessions;
- this._emptySessionCount = 0;
- this._sessionCount = 0;
+ this._freeSessionsCount = 0;
+ this._sessionsCount = 0;
// We don't support push streams by default.
this.settings = {
- enablePush: false,
- initialWindowSize: 1024 * 1024 * 32 // 32MB, see https://github.com/nodejs/node/issues/38426
+ enablePush: false
};
// Reusing TLS sessions increases performance.
this.tlsSessionCache = new QuickLRU({maxSize: maxCachedTlsSessions});
}
- get protocol() {
- return 'https:';
+ static normalizeOrigin(url, servername) {
+ if (typeof url === 'string') {
+ url = new URL(url);
+ }
+
+ if (servername && url.hostname !== servername) {
+ url.hostname = servername;
+ }
+
+ return url.origin;
}
normalizeOptions(options) {
let normalized = '';
- for (let index = 0; index < nameKeys.length; index++) {
- const key = nameKeys[index];
-
- normalized += ':';
-
- if (options && options[key] !== undefined) {
- normalized += options[key];
+ if (options) {
+ for (const key of nameKeys) {
+ if (options[key]) {
+ normalized += `:${options[key]}`;
+ }
}
}
return normalized;
}
- _processQueue() {
- if (this._sessionCount >= this.maxSessions) {
- this.closeEmptySessions(this.maxSessions - this._sessionCount + 1);
+ _tryToCreateNewSession(normalizedOptions, normalizedOrigin) {
+ if (!(normalizedOptions in this.queue) || !(normalizedOrigin in this.queue[normalizedOptions])) {
return;
}
- // eslint-disable-next-line guard-for-in
- for (const normalizedOptions in this.queue) {
- // eslint-disable-next-line guard-for-in
- for (const normalizedOrigin in this.queue[normalizedOptions]) {
- const item = this.queue[normalizedOptions][normalizedOrigin];
+ const item = this.queue[normalizedOptions][normalizedOrigin];
- // The entry function can be run only once.
- if (!item.completed) {
- item.completed = true;
+ // 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;
- 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;
+ item();
}
}
getSession(origin, options, listeners) {
return new Promise((resolve, reject) => {
- if (Array.isArray(listeners) && listeners.length > 0) {
+ if (Array.isArray(listeners)) {
listeners = [...listeners];
// Resolve the current promise ASAP, we're just moving the listeners.
@@ -3027,33 +7401,17 @@ class Agent extends EventEmitter {
listeners = [{resolve, reject}];
}
- try {
- // Parse origin
- if (typeof origin === 'string') {
- origin = new URL(origin);
- } else if (!(origin instanceof URL)) {
- throw new TypeError('The `origin` argument needs to be a string or an URL object');
- }
+ const normalizedOptions = this.normalizeOptions(options);
+ const normalizedOrigin = Agent.normalizeOrigin(origin, options && options.servername);
- 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);
+ if (normalizedOrigin === undefined) {
+ for (const {reject} of listeners) {
+ reject(new TypeError('The `origin` argument needs to be a string or an URL object'));
}
return;
}
- const normalizedOptions = this.normalizeOptions(options);
- const normalizedOrigin = origin.origin;
-
if (normalizedOptions in this.sessions) {
const sessions = this.sessions[normalizedOptions];
@@ -3063,55 +7421,56 @@ 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.
- //
- // |------------| |------------| |------------| |------------|
- // | 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];
-
+ for (const session of sessions) {
const sessionMaxConcurrentStreams = session.remoteSettings.maxConcurrentStreams;
if (sessionMaxConcurrentStreams < maxConcurrentStreams) {
break;
}
- if (!session[kOriginSet].includes(normalizedOrigin)) {
- continue;
- }
+ if (session[kOriginSet].includes(normalizedOrigin)) {
+ const sessionCurrentStreamsCount = session[kCurrentStreamsCount];
- const sessionCurrentStreamsCount = session[kCurrentStreamCount];
+ if (
+ sessionCurrentStreamsCount >= sessionMaxConcurrentStreams ||
+ session[kGracefullyClosing] ||
+ // Unfortunately the `close` event isn't called immediately,
+ // so `session.destroyed` is `true`, but `session.closed` is `false`.
+ session.destroyed
+ ) {
+ continue;
+ }
- if (
- sessionCurrentStreamsCount >= sessionMaxConcurrentStreams
- || session[kGracefullyClosing]
- // Unfortunately the `close` event isn't called immediately,
- // so `session.destroyed` is `true`, but `session.closed` is `false`.
- || session.destroyed
- ) {
- continue;
- }
+ // We only need set this once.
+ if (!optimalSession) {
+ maxConcurrentStreams = sessionMaxConcurrentStreams;
+ }
- // 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;
+ // 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;
+ }
}
}
if (optimalSession) {
- this._accept(optimalSession, listeners, normalizedOrigin, options);
+ /* 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);
return;
}
}
@@ -3120,12 +7479,14 @@ 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] = {
- [kLength]: 0
- };
+ this.queue[normalizedOptions] = {};
}
// The entry must be removed from the queue IMMEDIATELY when:
@@ -3136,58 +7497,29 @@ class Agent extends EventEmitter {
if (normalizedOptions in this.queue && this.queue[normalizedOptions][normalizedOrigin] === entry) {
delete this.queue[normalizedOptions][normalizedOrigin];
- if (--this.queue[normalizedOptions][kLength] === 0) {
+ if (Object.keys(this.queue[normalizedOptions]).length === 0) {
delete this.queue[normalizedOptions];
}
}
};
// The main logic is here
- const entry = async () => {
- this._sessionCount++;
-
+ const entry = () => {
const name = `${normalizedOrigin}:${normalizedOptions}`;
let receivedSettings = false;
- let socket;
try {
- const computedOptions = {...options};
-
- if (computedOptions.settings === undefined) {
- computedOptions.settings = this.settings;
- }
-
- if (computedOptions.session === undefined) {
- computedOptions.session = this.tlsSessionCache.get(name);
- }
-
- const createConnection = computedOptions.createConnection || this.createConnection;
-
- // A hacky workaround to enable async `createConnection`
- socket = await createConnection.call(this, origin, computedOptions);
- computedOptions.createConnection = () => socket;
-
- const session = http2.connect(origin, computedOptions);
- session[kCurrentStreamCount] = 0;
+ const session = http2.connect(origin, {
+ createConnection: this.createConnection,
+ settings: this.settings,
+ session: this.tlsSessionCache.get(name),
+ ...options
+ });
+ session[kCurrentStreamsCount] = 0;
session[kGracefullyClosing] = false;
- // Node.js return https://false:443 instead of https://1.1.1.1:443
- const getOriginSet = () => {
- const {socket} = session;
-
- let originSet;
- if (socket.servername === false) {
- socket.servername = socket.remoteAddress;
- originSet = session.originSet;
- socket.servername = false;
- } else {
- originSet = session.originSet;
- }
-
- return originSet;
- };
-
- const isFree = () => session[kCurrentStreamCount] < session.remoteSettings.maxConcurrentStreams;
+ const isFree = () => session[kCurrentStreamsCount] < session.remoteSettings.maxConcurrentStreams;
+ let wasFree = true;
session.socket.once('session', tlsSession => {
this.tlsSessionCache.set(name, tlsSession);
@@ -3195,8 +7527,8 @@ class Agent extends EventEmitter {
session.once('error', error => {
// Listeners are empty when the session successfully connected.
- for (let index = 0; index < listeners.length; index++) {
- listeners[index].reject(error);
+ for (const {reject} of listeners) {
+ reject(error);
}
// The connection got broken, purge the cache.
@@ -3205,73 +7537,68 @@ 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', () => {
- this._sessionCount--;
-
if (receivedSettings) {
- // Assumes session `close` is emitted after request `close`
- this._emptySessionCount--;
+ // 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._sessionsCount--;
// 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 === 1) {
+ if (where.length === 0) {
delete this.sessions[normalizedOptions];
- } else {
- where.splice(where.indexOf(session), 1);
}
} else {
// Broken connection
- removeFromQueue();
-
const error = new Error('Session closed without receiving a SETTINGS frame');
error.code = 'HTTP2WRAPPER_NOSETTINGS';
- for (let index = 0; index < listeners.length; index++) {
- listeners[index].reject(error);
+ for (const {reject} of listeners) {
+ reject(error);
}
+
+ removeFromQueue();
}
// There may be another session awaiting.
- this._processQueue();
+ this._tryToCreateNewSession(normalizedOptions, normalizedOrigin);
});
// Iterates over the queue and processes listeners.
const processListeners = () => {
- const queue = this.queue[normalizedOptions];
- if (!queue) {
+ if (!(normalizedOptions in this.queue) || !isFree()) {
return;
}
- const originSet = session[kOriginSet];
-
- for (let index = 0; index < originSet.length; index++) {
- const origin = originSet[index];
-
- if (origin in queue) {
- const {listeners, completed} = queue[origin];
-
- let index = 0;
+ for (const origin of session[kOriginSet]) {
+ if (origin in this.queue[normalizedOptions]) {
+ const {listeners} = this.queue[normalizedOptions][origin];
// Prevents session overloading.
- while (index < listeners.length && isFree()) {
+ while (listeners.length !== 0 && isFree()) {
// We assume `resolve(...)` calls `request(...)` *directly*,
// otherwise the session will get overloaded.
- listeners[index].resolve(session);
-
- index++;
+ listeners.shift().resolve(session);
}
- queue[origin].listeners.splice(0, index);
+ const where = this.queue[normalizedOptions];
+ if (where[origin].listeners.length === 0) {
+ delete where[origin];
- if (queue[origin].listeners.length === 0 && !completed) {
- delete queue[origin];
-
- if (--queue[kLength] === 0) {
+ if (Object.keys(where).length === 0) {
delete this.queue[normalizedOptions];
break;
}
@@ -3287,59 +7614,39 @@ 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] = getOriginSet() || [];
- session[kGracefullyClosing] = false;
- closeSessionIfCovered(this.sessions[normalizedOptions], session);
+ session[kOriginSet] = session.originSet;
- if (session[kGracefullyClosing] || !isFree()) {
+ if (!isFree()) {
+ // The session is full.
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 (let index = 0; index < listeners.length; index++) {
- listeners[index].reject(error);
+ for (const listener of listeners) {
+ listener.reject(error);
}
session.destroy();
return;
}
- // See https://github.com/nodejs/node/issues/38426
- if (session.setLocalWindowSize) {
- session.setLocalWindowSize(1024 * 1024 * 4); // 4 MB
- }
-
- session[kOriginSet] = getOriginSet() || [];
-
- if (session.socket.encrypted) {
- const mainOrigin = session[kOriginSet][0];
- if (mainOrigin !== normalizedOrigin) {
- const error = new Error(`Requested origin ${normalizedOrigin} does not match server ${mainOrigin}`);
-
- for (let index = 0; index < listeners.length; index++) {
- listeners[index].reject(error);
- }
-
- session.destroy();
- return;
- }
- }
-
- removeFromQueue();
+ session[kOriginSet] = session.originSet;
{
const where = this.sessions;
@@ -3352,28 +7659,30 @@ class Agent extends EventEmitter {
}
}
+ this._freeSessionsCount += 1;
receivedSettings = true;
- this._emptySessionCount++;
this.emit('session', session);
- this._accept(session, listeners, normalizedOrigin, options);
- if (session[kCurrentStreamCount] === 0 && this._emptySessionCount > this.maxEmptySessions) {
- this.closeEmptySessions(this._emptySessionCount - this.maxEmptySessions);
+ 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;
}
// `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);
});
@@ -3391,31 +7700,45 @@ class Agent extends EventEmitter {
// The process won't exit until the session is closed or all requests are gone.
session.ref();
- if (session[kCurrentStreamCount]++ === 0) {
- this._emptySessionCount--;
+ ++session[kCurrentStreamsCount];
+
+ if (session[kCurrentStreamsCount] === session.remoteSettings.maxConcurrentStreams) {
+ this._freeSessionsCount--;
}
stream.once('close', () => {
- if (--session[kCurrentStreamCount] === 0) {
- this._emptySessionCount++;
- session.unref();
+ wasFree = isFree();
- if (this._emptySessionCount > this.maxEmptySessions || session[kGracefullyClosing]) {
- session.close();
- return;
- }
- }
+ --session[kCurrentStreamsCount];
- if (session.destroyed || session.closed) {
- return;
- }
+ if (!session.destroyed && !session.closed) {
+ closeSessionIfCovered(this.sessions[normalizedOptions], session);
- if (isFree() && !closeSessionIfCovered(this.sessions[normalizedOptions], session)) {
- closeCoveredSessions(this.sessions[normalizedOptions], session);
- processListeners();
+ if (isFree() && !session.closed) {
+ if (!wasFree) {
+ this._freeSessionsCount++;
- if (session[kCurrentStreamCount] === 0) {
- this._processQueue();
+ 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();
+ }
}
}
});
@@ -3423,12 +7746,11 @@ class Agent extends EventEmitter {
return stream;
};
} catch (error) {
- removeFromQueue();
- this._sessionCount--;
-
- for (let index = 0; index < listeners.length; index++) {
- listeners[index].reject(error);
+ for (const listener of listeners) {
+ listener.reject(error);
}
+
+ removeFromQueue();
}
};
@@ -3437,8 +7759,7 @@ class Agent extends EventEmitter {
entry.destroyed = false;
this.queue[normalizedOptions][normalizedOrigin] = entry;
- this.queue[normalizedOptions][kLength]++;
- this._processQueue();
+ this._tryToCreateNewSession(normalizedOptions, normalizedOrigin);
});
}
@@ -3448,12 +7769,7 @@ class Agent extends EventEmitter {
reject,
resolve: session => {
try {
- const stream = session.request(headers, streamOptions);
-
- // Do not throw before `request(...)` has been awaited
- delayAsyncDestroy(stream);
-
- resolve(stream);
+ resolve(session.request(headers, streamOptions));
} catch (error) {
reject(error);
}
@@ -3462,7 +7778,7 @@ class Agent extends EventEmitter {
});
}
- async createConnection(origin, options) {
+ createConnection(origin, options) {
return Agent.connect(origin, options);
}
@@ -3470,92 +7786,52 @@ class Agent extends EventEmitter {
options.ALPNProtocols = ['h2'];
const port = origin.port || 443;
- const host = origin.hostname;
+ const host = origin.hostname || origin.host;
if (typeof options.servername === 'undefined') {
options.servername = host;
}
- const socket = tls.connect(port, host, options);
-
- if (options.socket) {
- socket._peername = {
- family: undefined,
- address: undefined,
- port
- };
- }
-
- return socket;
+ return tls.connect(port, host, options);
}
- 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++;
+ closeFreeSessions() {
+ for (const sessions of Object.values(this.sessions)) {
+ for (const session of sessions) {
+ if (session[kCurrentStreamsCount] === 0) {
session.close();
-
- if (closedCount >= maxCount) {
- return closedCount;
- }
}
}
}
-
- return closedCount;
}
destroy(reason) {
- const {sessions, queue} = this;
-
- // eslint-disable-next-line guard-for-in
- for (const key in sessions) {
- const thisSessions = sessions[key];
-
- for (let index = 0; index < thisSessions.length; index++) {
- thisSessions[index].destroy(reason);
+ for (const sessions of Object.values(this.sessions)) {
+ for (const session of sessions) {
+ session.destroy(reason);
}
}
- // eslint-disable-next-line guard-for-in
- for (const normalizedOptions in queue) {
- const entries = queue[normalizedOptions];
-
- // eslint-disable-next-line guard-for-in
- for (const normalizedOrigin in entries) {
- entries[normalizedOrigin].destroyed = true;
+ for (const entriesOfAuthority of Object.values(this.queue)) {
+ for (const entry of Object.values(entriesOfAuthority)) {
+ entry.destroyed = true;
}
}
// New requests should NOT attach to destroyed sessions
this.queue = {};
- this.tlsSessionCache.clear();
}
- get emptySessionCount() {
- return this._emptySessionCount;
+ get freeSessions() {
+ return getSessions({agent: this, isFree: true});
}
- get pendingSessionCount() {
- return this._sessionCount - this._emptySessionCount;
- }
-
- get sessionCount() {
- return this._sessionCount;
+ get busySessions() {
+ return getSessions({agent: this, isFree: false});
}
}
-Agent.kCurrentStreamCount = kCurrentStreamCount;
+Agent.kCurrentStreamsCount = kCurrentStreamsCount;
Agent.kGracefullyClosing = kGracefullyClosing;
module.exports = {
@@ -3569,18 +7845,15 @@ module.exports = {
/***/ 7167:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+"use strict";
-// See https://github.com/facebook/jest/issues/2549
-// eslint-disable-next-line node/prefer-global/url
-const {URL, urlToHttpOptions} = __nccwpck_require__(7310);
const http = __nccwpck_require__(3685);
const https = __nccwpck_require__(5687);
const resolveALPN = __nccwpck_require__(6624);
-const QuickLRU = __nccwpck_require__(9273);
-const {Agent, globalAgent} = __nccwpck_require__(9898);
+const QuickLRU = __nccwpck_require__(5461);
const Http2ClientRequest = __nccwpck_require__(9632);
const calculateServerName = __nccwpck_require__(1982);
-const delayAsyncDestroy = __nccwpck_require__(9237);
+const urlToOptions = __nccwpck_require__(2686);
const cache = new QuickLRU({maxSize: 100});
const queue = new Map();
@@ -3600,24 +7873,10 @@ 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);
};
@@ -3626,65 +7885,76 @@ const installSocket = (agent, socket, options) => {
agent.emit('free', socket, options);
};
-const createResolveProtocol = (cache, queue = new Map(), connect = undefined) => {
- return async options => {
- const name = `${options.host}:${options.port}:${options.ALPNProtocols.sort()}`;
+const resolveProtocol = async options => {
+ const name = `${options.host}:${options.port}:${options.ALPNProtocols.sort()}`;
- if (!cache.has(name)) {
- if (queue.has(name)) {
- const result = await queue.get(name);
- return {alpnProtocol: result.alpnProtocol};
- }
-
- const {path} = options;
- options.path = options.socketPath;
-
- const resultPromise = resolveALPN(options, connect);
- queue.set(name, resultPromise);
-
- try {
- const result = await resultPromise;
-
- cache.set(name, result.alpnProtocol);
- queue.delete(name);
-
- options.path = path;
-
- return result;
- } catch (error) {
- queue.delete(name);
-
- options.path = path;
-
- throw error;
- }
+ if (!cache.has(name)) {
+ if (queue.has(name)) {
+ const result = await queue.get(name);
+ return result.alpnProtocol;
}
- return {alpnProtocol: cache.get(name)};
- };
+ 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();
+ }
+ }
+
+ queue.delete(name);
+
+ return alpnProtocol;
+ } catch (error) {
+ queue.delete(name);
+
+ throw error;
+ }
+ }
+
+ return cache.get(name);
};
-const defaultResolveProtocol = createResolveProtocol(cache, queue);
-
module.exports = async (input, options, callback) => {
- if (typeof input === 'string') {
- input = urlToHttpOptions(new URL(input));
- } else if (input instanceof URL) {
- input = urlToHttpOptions(input);
- } else {
- input = {...input};
+ if (typeof input === 'string' || input instanceof URL) {
+ input = urlToOptions(new URL(input));
}
- if (typeof options === 'function' || options === undefined) {
- // (options, callback)
+ if (typeof options === 'function') {
callback = options;
- options = input;
- } else {
- // (input, options, callback)
- options = Object.assign(input, options);
+ options = undefined;
}
- options.ALPNProtocols = options.ALPNProtocols || ['h2', 'http/1.1'];
+ options = {
+ ALPNProtocols: ['h2', 'http/1.1'],
+ ...input,
+ ...options,
+ resolveSocket: true
+ };
if (!Array.isArray(options.ALPNProtocols) || options.ALPNProtocols.length === 0) {
throw new Error('The `ALPNProtocols` option must be an Array with at least one entry');
@@ -3695,105 +7965,36 @@ module.exports = async (input, options, callback) => {
options.host = options.hostname || options.host || 'localhost';
options.session = options.tlsSession;
- options.servername = options.servername || calculateServerName((options.headers && options.headers.host) || options.host);
+ options.servername = options.servername || calculateServerName(options);
options.port = options.port || (isHttps ? 443 : 80);
options._defaultAgent = isHttps ? https.globalAgent : http.globalAgent;
- const resolveProtocol = options.resolveProtocol || defaultResolveProtocol;
+ const agents = options.agent;
- // Note: We don't support `h2session` here
+ if (agents) {
+ if (agents.addRequest) {
+ throw new Error('The `options.agent` object can contain only `http`, `https` or `http2` properties');
+ }
- 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');
+ options.agent = agents[isHttps ? 'https' : 'http'];
}
if (isHttps) {
- options.resolveSocket = true;
+ const protocol = await resolveProtocol(options);
- let {socket, alpnProtocol, timeout} = await resolveProtocol(options);
-
- if (timeout) {
- if (socket) {
- socket.destroy();
+ if (protocol === 'h2') {
+ if (agents) {
+ options.agent = agents.http2;
}
- const error = new Error(`Timed out resolving ALPN: ${options.timeout} ms`);
- error.code = 'ETIMEDOUT';
- error.ms = options.timeout;
-
- throw error;
+ return new Http2ClientRequest(options, callback);
}
-
- // 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;
}
- // 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));
+ return http.request(options, callback);
};
module.exports.protocolCache = cache;
-module.exports.resolveProtocol = defaultResolveProtocol;
-module.exports.createResolveProtocol = createResolveProtocol;
/***/ }),
@@ -3801,29 +8002,28 @@ module.exports.createResolveProtocol = createResolveProtocol;
/***/ 9632:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+"use strict";
-// See https://github.com/facebook/jest/issues/2549
-// eslint-disable-next-line node/prefer-global/url
-const {URL, urlToHttpOptions} = __nccwpck_require__(7310);
const http2 = __nccwpck_require__(5158);
const {Writable} = __nccwpck_require__(2781);
const {Agent, globalAgent} = __nccwpck_require__(9898);
const IncomingMessage = __nccwpck_require__(2575);
+const 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_HTTP_HEADERS_SENT,
+ ERR_INVALID_HTTP_TOKEN,
+ ERR_HTTP_INVALID_HEADER_VALUE,
+ ERR_INVALID_CHAR
} = __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;
@@ -3833,66 +8033,59 @@ const kSession = Symbol('session');
const kOptions = Symbol('options');
const kFlushedHeaders = Symbol('flushedHeaders');
const kJobs = Symbol('jobs');
-const kPendingAgentPromise = Symbol('pendingAgentPromise');
+
+const isValidHttpToken = /^[\^`\-\w!#$%&*+.|~]+$/;
+const isInvalidHeaderValue = /[^\t\u0020-\u007E\u0080-\u00FF]/;
class ClientRequest extends Writable {
constructor(input, options, callback) {
super({
- autoDestroy: false,
- emitClose: false
+ autoDestroy: false
});
- if (typeof input === 'string') {
- input = urlToHttpOptions(new URL(input));
- } else if (input instanceof URL) {
- input = urlToHttpOptions(input);
- } else {
- input = {...input};
+ const hasInput = typeof input === 'string' || input instanceof URL;
+ if (hasInput) {
+ input = urlToOptions(input instanceof URL ? input : new URL(input));
}
if (typeof options === 'function' || options === undefined) {
// (options, callback)
callback = options;
- options = input;
+ options = hasInput ? input : {...input};
} else {
// (input, options, callback)
- options = Object.assign(input, options);
+ options = {...input, ...options};
}
if (options.h2session) {
this[kSession] = options.h2session;
-
- if (this[kSession].destroyed) {
- throw new Error('The session has been closed already');
- }
-
- this.protocol = this[kSession].socket.encrypted ? 'https:' : 'http:';
} else if (options.agent === false) {
- this.agent = new Agent({maxEmptySessions: 0});
+ this.agent = new Agent({maxFreeSessions: 0});
} else if (typeof options.agent === 'undefined' || options.agent === null) {
- this.agent = globalAgent;
+ 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;
+ }
} else if (typeof options.agent.request === 'function') {
this.agent = options.agent;
} else {
- throw new ERR_INVALID_ARG_TYPE('options.agent', ['http2wrapper.Agent-like Object', 'undefined', 'false'], options.agent);
+ throw new ERR_INVALID_ARG_TYPE('options.agent', ['Agent-like Object', 'undefined', 'false'], options.agent);
}
- if (this.agent) {
- this.protocol = this.agent.protocol;
+ if (options.protocol && options.protocol !== 'https:') {
+ throw new ERR_INVALID_PROTOCOL(options.protocol, 'https:');
}
- if (options.protocol && options.protocol !== this.protocol) {
- throw new ERR_INVALID_PROTOCOL(options.protocol, this.protocol);
- }
+ const port = options.port || options.defaultPort || (this.agent && this.agent.defaultPort) || 443;
+ const host = options.hostname || options.host || 'localhost';
- if (!options.port) {
- options.port = options.defaultPort || (this.agent && this.agent.defaultPort) || 443;
- }
-
- options.host = options.hostname || options.host || 'localhost';
-
- // Unused
+ // Don't enforce the origin via options. It may be changed in an Agent.
delete options.hostname;
+ delete options.host;
+ delete options.port;
const {timeout} = options;
options.timeout = undefined;
@@ -3900,26 +8093,19 @@ 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';
-
- if (!(this.method === 'CONNECT' && (options.path === '/' || options.path === undefined))) {
- this.path = options.path;
- }
+ this.path = options.path;
this.res = null;
this.aborted = false;
this.reusedSocket = false;
- const {headers} = options;
- if (headers) {
- // eslint-disable-next-line guard-for-in
- for (const header in headers) {
- this.setHeader(header, headers[header]);
+ if (options.headers) {
+ for (const [header, value] of Object.entries(options.headers)) {
+ this.setHeader(header, value);
}
}
@@ -3933,21 +8119,18 @@ 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.
- this[kOrigin] = new URL(`${this.protocol}//${options.servername || options.host}:${options.port}`);
+ if (port === 443) {
+ this[kOrigin] = `https://${host}`;
- // 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;
+ }
+ } else {
+ this[kOrigin] = `https://${host}:${port}`;
- return reuseSocket;
- };
-
- // eslint-disable-next-line promise/prefer-await-to-then
- this.agent.getSession(this[kOrigin], this[kOptions]).catch(() => {});
+ if (!(':authority' in this[kHeaders])) {
+ this[kHeaders][':authority'] = `${host}:${port}`;
+ }
}
if (timeout) {
@@ -3972,27 +8155,15 @@ class ClientRequest extends Writable {
}
get path() {
- const header = this.method === 'CONNECT' ? HTTP2_HEADER_AUTHORITY : HTTP2_HEADER_PATH;
-
- return this[kHeaders][header];
+ return this[kHeaders][HTTP2_HEADER_PATH];
}
set path(value) {
if (value) {
- const header = this.method === 'CONNECT' ? HTTP2_HEADER_AUTHORITY : HTTP2_HEADER_PATH;
-
- this[kHeaders][header] = value;
+ this[kHeaders][HTTP2_HEADER_PATH] = 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';
}
@@ -4016,11 +8187,15 @@ class ClientRequest extends Writable {
}
_final(callback) {
+ if (this.destroyed) {
+ return;
+ }
+
this.flushHeaders();
const callEnd = () => {
- // For GET, HEAD and DELETE and CONNECT
- if (this._mustNotHaveABody || this.method === 'CONNECT') {
+ // For GET, HEAD and DELETE
+ if (this._mustNotHaveABody) {
callback();
return;
}
@@ -4049,25 +8224,13 @@ class ClientRequest extends Writable {
this.destroy();
}
- async _destroy(error, callback) {
+ _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);
@@ -4093,45 +8256,46 @@ class ClientRequest extends Writable {
// Forwards `timeout`, `continue`, `close` and `error` events to this instance.
if (!isConnectMethod) {
- // TODO: Should we proxy `close` here?
- proxyEvents(stream, this, ['timeout', 'continue']);
+ proxyEvents(stream, this, ['timeout', 'continue', 'close', 'error']);
}
- stream.once('error', error => {
- this.destroy(error);
- });
+ // 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('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) => {
+ // This event tells we are ready to listen for the data.
+ stream.once('response', waitForEnd((headers, flags, rawHeaders) => {
// If we were to emit raw request stream, it would be as fast as the native approach.
// Note that wrapping the raw stream in a Proxy instance won't improve the performance (already tested it).
const response = new IncomingMessage(this.socket, stream.readableHighWaterMark);
this.res = response;
- // Undocumented, but it is used by `cacheable-request`
- response.url = `${this[kOrigin].origin}${this.path}`;
-
response.req = this;
response.statusCode = headers[HTTP2_HEADER_STATUS];
response.headers = headers;
response.rawHeaders = rawHeaders;
response.once('end', () => {
- response.complete = true;
+ if (this.aborted) {
+ response.aborted = true;
+ response.emit('aborted');
+ } else {
+ 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) {
@@ -4154,9 +8318,7 @@ class ClientRequest extends Writable {
});
stream.once('end', () => {
- if (!this.aborted) {
- response.push(null);
- }
+ response.push(null);
});
if (!this.emit('response', response)) {
@@ -4164,123 +8326,50 @@ 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', headers => this.emit('information', {statusCode: headers[HTTP2_HEADER_STATUS]}));
+ stream.once('headers', waitForEnd(
+ headers => this.emit('information', {statusCode: headers[HTTP2_HEADER_STATUS]})
+ ));
- stream.once('trailers', (trailers, flags, rawTrailers) => {
+ stream.once('trailers', waitForEnd((trailers, flags, rawTrailers) => {
const {res} = this;
- // https://github.com/nodejs/node/issues/41251
- if (res === null) {
- onResponse(trailers, flags, rawTrailers);
- return;
- }
-
// Assigns trailers to the response object.
res.trailers = trailers;
res.rawTrailers = rawTrailers;
- });
+ }));
- stream.once('close', () => {
- const {aborted, res} = this;
- if (res) {
- if (aborted) {
- res.aborted = true;
- res.emit('aborted');
- res.destroy();
- }
-
- const finish = () => {
- res.emit('close');
-
- this.destroy();
- this.emit('close');
- };
-
- if (res.readable) {
- res.once('end', finish);
- } else {
- finish();
- }
-
- return;
- }
-
- if (!this.destroyed) {
- this.destroy(new Error('The HTTP/2 stream has been early terminated'));
- this.emit('close');
- return;
- }
-
- this.destroy();
- this.emit('close');
- });
-
- this.socket = new Proxy(stream, proxySocketHandler);
+ const {socket} = stream.session;
+ this.socket = socket;
+ this.connection = socket;
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.destroy(error);
+ this.emit('error', error);
}
} else {
this.reusedSocket = true;
try {
- const promise = this.agent.request(this[kOrigin], this[kOptions], this[kHeaders]);
- this[kPendingAgentPromise] = promise;
-
- onStream(await promise);
-
- this[kPendingAgentPromise] = false;
+ onStream(await this.agent.request(this[kOrigin], this[kOptions], this[kHeaders]));
} catch (error) {
- this[kPendingAgentPromise] = false;
-
- this.destroy(error);
+ this.emit('error', 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);
@@ -4310,24 +8399,19 @@ class ClientRequest extends Writable {
throw new ERR_HTTP_HEADERS_SENT('set');
}
- validateHeaderName(name);
- validateHeaderValue(name, value);
-
- const lowercased = name.toLowerCase();
-
- if (lowercased === 'connection') {
- if (value.toLowerCase() === 'keep-alive') {
- return;
- }
-
- throw new Error(`Invalid 'connection' header: ${value}`);
+ if (typeof name !== 'string' || (!isValidHttpToken.test(name) && !isRequestPseudoHeader(name))) {
+ throw new ERR_INVALID_HTTP_TOKEN('Header name', name);
}
- if (lowercased === 'host' && this.method === 'CONNECT') {
- this[kHeaders][HTTP2_HEADER_AUTHORITY] = value;
- } else {
- this[kHeaders][lowercased] = value;
+ if (typeof value === 'undefined') {
+ throw new ERR_HTTP_INVALID_HEADER_VALUE(value, name);
}
+
+ if (isInvalidHeaderValue.test(value)) {
+ throw new ERR_INVALID_CHAR('header content', name);
+ }
+
+ this[kHeaders][name.toLowerCase()] = value;
}
setNoDelay() {
@@ -4371,15 +8455,15 @@ module.exports = ClientRequest;
/***/ 2575:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+"use strict";
const {Readable} = __nccwpck_require__(2781);
class IncomingMessage extends Readable {
constructor(socket, highWaterMark) {
super({
- emitClose: false,
- autoDestroy: true,
- highWaterMark
+ highWaterMark,
+ autoDestroy: false
});
this.statusCode = null;
@@ -4399,26 +8483,12 @@ class IncomingMessage extends Readable {
this.rawTrailers = [];
this.socket = socket;
+ this.connection = socket;
this._dumped = false;
}
- get connection() {
- return this.socket;
- }
-
- set connection(value) {
- this.socket = value;
- }
-
- _destroy(error, callback) {
- if (!this.readableEnded) {
- this.aborted = true;
- }
-
- // See https://github.com/nodejs/node/issues/35303
- callback();
-
+ _destroy(error) {
this.req._request.destroy(error);
}
@@ -4451,28 +8521,17 @@ module.exports = IncomingMessage;
/***/ 4645:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+"use strict";
const http2 = __nccwpck_require__(5158);
-const {
- Agent,
- globalAgent
-} = __nccwpck_require__(9898);
+const agent = __nccwpck_require__(9898);
const ClientRequest = __nccwpck_require__(9632);
const IncomingMessage = __nccwpck_require__(2575);
const auto = __nccwpck_require__(7167);
-const {
- HttpOverHttp2,
- HttpsOverHttp2
-} = __nccwpck_require__(8795);
-const Http2OverHttp2 = __nccwpck_require__(8553);
-const {
- Http2OverHttp,
- Http2OverHttps
-} = __nccwpck_require__(9794);
-const validateHeaderName = __nccwpck_require__(4592);
-const validateHeaderValue = __nccwpck_require__(3549);
-const request = (url, options, callback) => new ClientRequest(url, options, callback);
+const request = (url, options, callback) => {
+ return new ClientRequest(url, options, callback);
+};
const get = (url, options, callback) => {
// eslint-disable-next-line unicorn/prevent-abbreviations
@@ -4486,360 +8545,41 @@ module.exports = {
...http2,
ClientRequest,
IncomingMessage,
- Agent,
- globalAgent,
+ ...agent,
request,
get,
- auto,
- proxies: {
- HttpOverHttp2,
- HttpsOverHttp2,
- Http2OverHttp2,
- Http2OverHttp,
- Http2OverHttps
- },
- validateHeaderName,
- validateHeaderValue
+ auto
};
-/***/ }),
-
-/***/ 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__) => {
+"use strict";
-const {isIP} = __nccwpck_require__(1808);
-const assert = __nccwpck_require__(9491);
+const net = __nccwpck_require__(1808);
+/* istanbul ignore file: https://github.com/nodejs/node/blob/v13.0.1/lib/_http_agent.js */
-const getHost = host => {
- if (host[0] === '[') {
- const idx = host.indexOf(']');
+module.exports = options => {
+ let servername = options.host;
+ const hostHeader = options.headers && options.headers.host;
- assert(idx !== -1);
- return host.slice(1, idx);
+ 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];
+ }
}
- const idx = host.indexOf(':');
- if (idx === -1) {
- return host;
- }
-
- return host.slice(0, idx);
-};
-
-module.exports = host => {
- const servername = getHost(host);
-
- if (isIP(servername)) {
+ if (net.isIP(servername)) {
return '';
}
@@ -4847,78 +8587,12 @@ module.exports = host => {
};
-/***/ }),
-
-/***/ 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:
/***/ ((module) => {
+"use strict";
/* istanbul ignore file: https://github.com/nodejs/node/blob/master/lib/internal/errors.js */
@@ -4945,31 +8619,25 @@ 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 =>
- `Protocol "${args[0]}" not supported. Expected "${args[1]}"`
-);
+makeError(TypeError, 'ERR_INVALID_PROTOCOL', args => {
+ return `Protocol "${args[0]}" not supported. Expected "${args[1]}"`;
+});
-makeError(Error, 'ERR_HTTP_HEADERS_SENT', args =>
- `Cannot ${args[0]} headers after they are sent to the client`
-);
+makeError(Error, 'ERR_HTTP_HEADERS_SENT', args => {
+ return `Cannot ${args[0]} headers after they are sent to the client`;
+});
-makeError(TypeError, 'ERR_INVALID_HTTP_TOKEN', args =>
- `${args[0]} must be a valid HTTP token [${args[1]}]`
-);
+makeError(TypeError, 'ERR_INVALID_HTTP_TOKEN', args => {
+ return `${args[0]} must be a valid HTTP token [${args[1]}]`;
+});
-makeError(TypeError, 'ERR_HTTP_INVALID_HEADER_VALUE', args =>
- `Invalid value "${args[0]} for header "${args[1]}"`
-);
+makeError(TypeError, 'ERR_HTTP_INVALID_HEADER_VALUE', args => {
+ return `Invalid value "${args[0]} for header "${args[1]}"`;
+});
-makeError(TypeError, 'ERR_INVALID_CHAR', args =>
- `Invalid character in ${args[0]} [${args[1]}]`
-);
-
-makeError(
- Error,
- 'ERR_HTTP2_NO_SOCKET_MANIPULATION',
- 'HTTP/2 sockets should not be directly manipulated (e.g. read and written)'
-);
+makeError(TypeError, 'ERR_INVALID_CHAR', args => {
+ return `Invalid character in ${args[0]} [${args[1]}]`;
+});
/***/ }),
@@ -4977,6 +8645,7 @@ makeError(
/***/ 1199:
/***/ ((module) => {
+"use strict";
module.exports = header => {
@@ -4992,26 +8661,12 @@ 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:
/***/ ((module) => {
+"use strict";
module.exports = (from, to, events) => {
@@ -5023,152 +8678,34 @@ module.exports = (from, to, events) => {
/***/ }),
-/***/ 9404:
-/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+/***/ 2686:
+/***/ ((module) => {
+"use strict";
-const {ERR_HTTP2_NO_SOCKET_MANIPULATION} = __nccwpck_require__(7087);
+/* istanbul ignore file: https://github.com/nodejs/node/blob/a91293d4d9ab403046ab5eb022332e4e3d249bd3/lib/internal/url.js#L1257 */
-/* istanbul ignore file */
-/* https://github.com/nodejs/node/blob/6eec858f34a40ffa489c1ec54bb24da72a28c781/lib/internal/http2/compat.js#L195-L272 */
+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 || ''}`
+ };
-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 (typeof url.port === 'string' && url.port.length !== 0) {
+ options.port = Number(url.port);
}
- if (isInvalidHeaderValue.test(value)) {
- throw new ERR_INVALID_CHAR('header content', name);
+ if (url.username || url.password) {
+ options.auth = `${url.username || ''}:${url.password || ''}`;
}
+
+ return options;
};
@@ -5237,12 +8774,7544 @@ exports.parse = function (s) {
}
+/***/ }),
+
+/***/ 4245:
+/***/ ((module) => {
+
+(function(f){if(true){module.exports=f()}else { var g; }})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=require,i=0;i 0) {
+ words += '-' + lookup(remainder, false, ord);
+ } else if (ord) {
+ words = words.substring(0, words.length - 1) + 'ieth';
+ }
+ } else if (num < 1000) {
+ const hundreds = Math.floor(num / 100);
+ const remainder = num % 100;
+ words = (prev ? ', ' : '') + few[hundreds] + ' Hundred';
+ if (remainder > 0) {
+ words += lookup(remainder, true, ord);
+ } else if (ord) {
+ words += 'th';
+ }
+ } else {
+ var mag = Math.floor(Math.log10(num) / 3);
+ if (mag > magnitudes.length) {
+ mag = magnitudes.length; // the largest word
+ }
+ const factor = Math.pow(10, mag * 3);
+ const mant = Math.floor(num / factor);
+ const remainder = num - mant * factor;
+ words = (prev ? ', ' : '') + lookup(mant, false, false) + ' ' + magnitudes[mag - 1];
+ if (remainder > 0) {
+ words += lookup(remainder, true, ord);
+ } else if (ord) {
+ words += 'th';
+ }
+ }
+ return words;
+ };
+
+ var words = lookup(value, false, ordinal);
+ return words;
+ }
+
+ const wordValues = {};
+ few.forEach(function (word, index) {
+ wordValues[word.toLowerCase()] = index;
+ });
+ ordinals.forEach(function (word, index) {
+ wordValues[word.toLowerCase()] = index;
+ });
+ decades.forEach(function (word, index) {
+ const lword = word.toLowerCase();
+ wordValues[lword] = (index + 2) * 10;
+ wordValues[lword.substring(0, word.length - 1) + 'ieth'] = wordValues[lword];
+ });
+ wordValues.hundredth = 100;
+ magnitudes.forEach(function (word, index) {
+ const lword = word.toLowerCase();
+ const val = Math.pow(10, (index + 1) * 3);
+ wordValues[lword] = val;
+ wordValues[lword + 'th'] = val;
+ });
+
+ /**
+ * Converts a number in english words to numeric value
+ * @param {string} text - the number in words
+ * @returns {number} - the numeric value
+ */
+ function wordsToNumber(text) {
+ const parts = text.split(/,\s|\sand\s|[\s\\-]/);
+ const values = parts.map(part => wordValues[part]);
+ let segs = [0];
+ values.forEach(value => {
+ if (value < 100) {
+ let top = segs.pop();
+ if (top >= 1000) {
+ segs.push(top);
+ top = 0;
+ }
+ segs.push(top + value);
+ } else {
+ segs.push(segs.pop() * value);
+ }
+ });
+ const result = segs.reduce((a, b) => a + b, 0);
+ return result;
+ }
+
+ const romanNumerals = [
+ [1000, 'm'],
+ [900, 'cm'],
+ [500, 'd'],
+ [400, 'cd'],
+ [100, 'c'],
+ [90, 'xc'],
+ [50, 'l'],
+ [40, 'xl'],
+ [10, 'x'],
+ [9, 'ix'],
+ [5, 'v'],
+ [4, 'iv'],
+ [1, 'i']
+ ];
+
+ const romanValues = {'M': 1000, 'D': 500, 'C': 100, 'L': 50, 'X': 10, 'V': 5, 'I': 1};
+
+ /**
+ * converts a number to roman numerals
+ * @param {number} value - the number
+ * @returns {string} - the number in roman numerals
+ */
+ function decimalToRoman(value) {
+ for (var index = 0; index < romanNumerals.length; index++) {
+ const numeral = romanNumerals[index];
+ if (value >= numeral[0]) {
+ return numeral[1] + decimalToRoman(value - numeral[0]);
+ }
+ }
+ return '';
+ }
+
+ /**
+ * converts roman numerals to a number
+ * @param {string} roman - roman number
+ * @returns {number} - the numeric value
+ */
+ function romanToDecimal(roman) {
+ var decimal = 0;
+ var max = 1;
+ for (var i = roman.length - 1; i >= 0; i--) {
+ const digit = roman[i];
+ const value = romanValues[digit];
+ if (value < max) {
+ decimal -= value;
+ } else {
+ max = value;
+ decimal += value;
+ }
+ }
+ return decimal;
+ }
+
+ /**
+ * converts a number to spreadsheet style letters
+ * @param {number} value - the number
+ * @param {string} aChar - the character representing the start of the sequence, e.g. 'A'
+ * @returns {string} - the letters
+ */
+ function decimalToLetters(value, aChar) {
+ var letters = [];
+ var aCode = aChar.charCodeAt(0);
+ while (value > 0) {
+ letters.unshift(String.fromCharCode((value - 1) % 26 + aCode));
+ value = Math.floor((value - 1) / 26);
+ }
+ return letters.join('');
+ }
+
+ /**
+ * converts spreadsheet style letters to a number
+ * @param {string} letters - the letters
+ * @param {string} aChar - the character representing the start of the sequence, e.g. 'A'
+ * @returns {number} - the numeric value
+ */
+ function lettersToDecimal(letters, aChar) {
+ var aCode = aChar.charCodeAt(0);
+ var decimal = 0;
+ for (var i = 0; i < letters.length; i++) {
+ decimal += (letters.charCodeAt(letters.length - i - 1) - aCode + 1) * Math.pow(26, i);
+ }
+ return decimal;
+ }
+
+ /**
+ * Formats an integer as specified by the XPath fn:format-integer function
+ * See https://www.w3.org/TR/xpath-functions-31/#func-format-integer
+ * @param {number} value - the number to be formatted
+ * @param {string} picture - the picture string that specifies the format
+ * @returns {string} - the formatted number
+ */
+ function formatInteger(value, picture) {
+ if (typeof value === 'undefined') {
+ return undefined;
+ }
+
+ value = Math.floor(value);
+
+ const format = analyseIntegerPicture(picture);
+ return _formatInteger(value, format);
+ }
+
+ const formats = {
+ DECIMAL: 'decimal',
+ LETTERS: 'letters',
+ ROMAN: 'roman',
+ WORDS: 'words',
+ SEQUENCE: 'sequence'
+ };
+
+ const tcase = {
+ UPPER: 'upper',
+ LOWER: 'lower',
+ TITLE: 'title'
+ };
+
+ /**
+ * formats an integer using a preprocessed representation of the picture string
+ * @param {number} value - the number to be formatted
+ * @param {object} format - the preprocessed representation of the pucture string
+ * @returns {string} - the formatted number
+ * @private
+ */
+ function _formatInteger(value, format) {
+ let formattedInteger;
+ const negative = value < 0;
+ value = Math.abs(value);
+ switch (format.primary) {
+ case formats.LETTERS:
+ formattedInteger = decimalToLetters(value, format.case === tcase.UPPER ? 'A' : 'a');
+ break;
+ case formats.ROMAN:
+ formattedInteger = decimalToRoman(value);
+ if (format.case === tcase.UPPER) {
+ formattedInteger = formattedInteger.toUpperCase();
+ }
+ break;
+ case formats.WORDS:
+ formattedInteger = numberToWords(value, format.ordinal);
+ if (format.case === tcase.UPPER) {
+ formattedInteger = formattedInteger.toUpperCase();
+ } else if (format.case === tcase.LOWER) {
+ formattedInteger = formattedInteger.toLowerCase();
+ }
+ break;
+ case formats.DECIMAL:
+ formattedInteger = '' + value;
+ // TODO use functionPad
+ var padLength = format.mandatoryDigits - formattedInteger.length;
+ if (padLength > 0) {
+ var padding = (new Array(padLength + 1)).join('0');
+ formattedInteger = padding + formattedInteger;
+ }
+ if (format.zeroCode !== 0x30) {
+ formattedInteger = stringToArray(formattedInteger).map(code => {
+ return String.fromCodePoint(code.codePointAt(0) + format.zeroCode - 0x30);
+ }).join('');
+ }
+ // insert the grouping-separator-signs, if any
+ if (format.regular) {
+ const n = Math.floor((formattedInteger.length - 1) / format.groupingSeparators.position);
+ for (let ii = n; ii > 0; ii--) {
+ const pos = formattedInteger.length - ii * format.groupingSeparators.position;
+ formattedInteger = formattedInteger.substr(0, pos) + format.groupingSeparators.character + formattedInteger.substr(pos);
+ }
+ } else {
+ format.groupingSeparators.reverse().forEach(separator => {
+ const pos = formattedInteger.length - separator.position;
+ formattedInteger = formattedInteger.substr(0, pos) + separator.character + formattedInteger.substr(pos);
+ });
+ }
+
+ if (format.ordinal) {
+ var suffix123 = {'1': 'st', '2': 'nd', '3': 'rd'};
+ var lastDigit = formattedInteger[formattedInteger.length - 1];
+ var suffix = suffix123[lastDigit];
+ if (!suffix || (formattedInteger.length > 1 && formattedInteger[formattedInteger.length - 2] === '1')) {
+ suffix = 'th';
+ }
+ formattedInteger = formattedInteger + suffix;
+ }
+ break;
+ case formats.SEQUENCE:
+ throw {
+ code: 'D3130',
+ value: format.token
+ };
+ }
+ if (negative) {
+ formattedInteger = '-' + formattedInteger;
+ }
+
+ return formattedInteger;
+ }
+
+ //TODO what about decimal groups in the unicode supplementary planes (surrogate pairs) ???
+ const decimalGroups = [0x30, 0x0660, 0x06F0, 0x07C0, 0x0966, 0x09E6, 0x0A66, 0x0AE6, 0x0B66, 0x0BE6, 0x0C66, 0x0CE6, 0x0D66, 0x0DE6, 0x0E50, 0x0ED0, 0x0F20, 0x1040, 0x1090, 0x17E0, 0x1810, 0x1946, 0x19D0, 0x1A80, 0x1A90, 0x1B50, 0x1BB0, 0x1C40, 0x1C50, 0xA620, 0xA8D0, 0xA900, 0xA9D0, 0xA9F0, 0xAA50, 0xABF0, 0xFF10];
+
+ /**
+ * preprocesses the picture string
+ * @param {string} picture - picture string
+ * @returns {{type: string, primary: string, case: string, ordinal: boolean}} - analysed picture
+ */
+ function analyseIntegerPicture(picture) {
+ const format = {
+ type: 'integer',
+ primary: formats.DECIMAL,
+ case: tcase.LOWER,
+ ordinal: false
+ };
+
+ let primaryFormat, formatModifier;
+ const semicolon = picture.lastIndexOf(';');
+ if (semicolon === -1) {
+ primaryFormat = picture;
+ } else {
+ primaryFormat = picture.substring(0, semicolon);
+ formatModifier = picture.substring(semicolon + 1);
+ if (formatModifier[0] === 'o') {
+ format.ordinal = true;
+ }
+ }
+
+ /* eslnt-disable-next no-fallthrough */
+ switch (primaryFormat) {
+ case 'A':
+ format.case = tcase.UPPER;
+ /* eslnt-disable-next-line no-fallthrough */
+ case 'a':
+ format.primary = formats.LETTERS;
+ break;
+ case 'I':
+ format.case = tcase.UPPER;
+ /* eslnt-disable-next-line no-fallthrough */
+ case 'i':
+ format.primary = formats.ROMAN;
+ break;
+ case 'W':
+ format.case = tcase.UPPER;
+ format.primary = formats.WORDS;
+ break;
+ case 'Ww':
+ format.case = tcase.TITLE;
+ format.primary = formats.WORDS;
+ break;
+ case 'w':
+ format.primary = formats.WORDS;
+ break;
+ default: {
+ // this is a decimal-digit-pattern if it contains a decimal digit (from any unicode decimal digit group)
+ let zeroCode = null;
+ let mandatoryDigits = 0;
+ let optionalDigits = 0;
+ let groupingSeparators = [];
+ let separatorPosition = 0;
+ const formatCodepoints = stringToArray(primaryFormat).map(c => c.codePointAt(0)).reverse(); // reverse the array to determine positions of grouping-separator-signs
+ formatCodepoints.forEach((codePoint) => {
+ // step though each char in the picture to determine the digit group
+ let digit = false;
+ for (let ii = 0; ii < decimalGroups.length; ii++) {
+ const group = decimalGroups[ii];
+ if (codePoint >= group && codePoint <= group + 9) {
+ // codepoint is part of this decimal group
+ digit = true;
+ mandatoryDigits++;
+ separatorPosition++;
+ if (zeroCode === null) {
+ zeroCode = group;
+ } else if (group !== zeroCode) {
+ // error! different decimal groups in the same pattern
+ throw {
+ code: 'D3131'
+ };
+ }
+ break;
+ }
+ }
+ if (!digit) {
+ if (codePoint === 0x23) { // # - optional-digit-sign
+ separatorPosition++;
+ optionalDigits++;
+ } else {
+ // neither a decimal-digit-sign ot optional-digit-sign, assume it is a grouping-separator-sign
+ groupingSeparators.push({
+ position: separatorPosition,
+ character: String.fromCodePoint(codePoint)
+ });
+ }
+ }
+ });
+ if (mandatoryDigits > 0) {
+ format.primary = formats.DECIMAL;
+ // TODO validate decimal-digit-pattern
+
+ // the decimal digit family (codepoint offset)
+ format.zeroCode = zeroCode;
+ // the number of mandatory digits
+ format.mandatoryDigits = mandatoryDigits;
+ // the number of optional digits
+ format.optionalDigits = optionalDigits;
+ // grouping separator template
+ // are the grouping-separator-signs 'regular'?
+ const regularRepeat = function (separators) {
+ // are the grouping positions regular? i.e. same interval between each of them
+ // is there at least one separator?
+ if (separators.length === 0) {
+ return 0;
+ }
+ // are all the characters the same?
+ const sepChar = separators[0].character;
+ for (let ii = 1; ii < separators.length; ii++) {
+ if (separators[ii].character !== sepChar) {
+ return 0;
+ }
+ }
+ // are they equally spaced?
+ const indexes = separators.map(separator => separator.position);
+ const gcd = function (a, b) {
+ return b === 0 ? a : gcd(b, a % b);
+ };
+ // find the greatest common divisor of all the positions
+ const factor = indexes.reduce(gcd);
+ // is every position separated by this divisor? If so, it's regular
+ for (let index = 1; index <= indexes.length; index++) {
+ if (indexes.indexOf(index * factor) === -1) {
+ return 0;
+ }
+ }
+ return factor;
+ };
+
+ const regular = regularRepeat(groupingSeparators);
+ if (regular > 0) {
+ format.regular = true;
+ format.groupingSeparators = {
+ position: regular,
+ character: groupingSeparators[0].character
+ };
+ } else {
+ format.regular = false;
+ format.groupingSeparators = groupingSeparators;
+ }
+
+ } else {
+ // this is a 'numbering sequence' which the spec says is implementation-defined
+ // this implementation doesn't support any numbering sequences at the moment.
+ format.primary = formats.SEQUENCE;
+ format.token = primaryFormat;
+ }
+ }
+ }
+
+ return format;
+ }
+
+ const defaultPresentationModifiers = {
+ Y: '1', M: '1', D: '1', d: '1', F: 'n', W: '1', w: '1', X: '1', x: '1', H: '1', h: '1',
+ P: 'n', m: '01', s: '01', f: '1', Z: '01:01', z: '01:01', C: 'n', E: 'n'
+ };
+
+ // §9.8.4.1 the format specifier is an array of string literals and variable markers
+ /**
+ * analyse the date-time picture string
+ * @param {string} picture - picture string
+ * @returns {{type: string, parts: Array}} - the analysed string
+ */
+ function analyseDateTimePicture(picture) {
+ var spec = [];
+ const format = {
+ type: 'datetime',
+ parts: spec
+ };
+ const addLiteral = function (start, end) {
+ if (end > start) {
+ let literal = picture.substring(start, end);
+ // replace any doubled ]] with single ]
+ // what if there are instances of single ']' ? - the spec doesn't say
+ literal = literal.split(']]').join(']');
+ spec.push({type: 'literal', value: literal});
+ }
+ };
+
+ var start = 0, pos = 0;
+ while (pos < picture.length) {
+ if (picture.charAt(pos) === '[') {
+ // check it's not a doubled [[
+ if (picture.charAt(pos + 1) === '[') {
+ // literal [
+ addLiteral(start, pos);
+ spec.push({type: 'literal', value: '['});
+ pos += 2;
+ start = pos;
+ continue;
+ }
+ // start of variable marker
+ // push the string literal (if there is one) onto the array
+ addLiteral(start, pos);
+ start = pos;
+ // search forward to closing ]
+ pos = picture.indexOf(']', start);
+ // TODO handle error case if pos === -1
+ if(pos === -1) {
+ // error - no closing bracket
+ throw {
+ code: 'D3135'
+ };
+ }
+ let marker = picture.substring(start + 1, pos);
+ // whitespace within a variable marker is ignored (i.e. remove it)
+ marker = marker.split(/\s+/).join('');
+ var def = {
+ type: 'marker',
+ component: marker.charAt(0) // 1. The component specifier is always present and is always a single letter.
+ };
+ var comma = marker.lastIndexOf(','); // 2. The width modifier may be recognized by the presence of a comma
+ var presMod; // the presentation modifiers
+ if (comma !== -1) {
+ // §9.8.4.2 The Width Modifier
+ const widthMod = marker.substring(comma + 1);
+ const dash = widthMod.indexOf('-');
+ let min, max;
+ const parseWidth = function (wm) {
+ if (typeof wm === 'undefined' || wm === '*') {
+ return undefined;
+ } else {
+ // TODO validate wm is an unsigned int
+ return parseInt(wm);
+ }
+ };
+ if (dash === -1) {
+ min = widthMod;
+ } else {
+ min = widthMod.substring(0, dash);
+ max = widthMod.substring(dash + 1);
+ }
+ const widthDef = {
+ min: parseWidth(min),
+ max: parseWidth(max)
+ };
+ def.width = widthDef;
+ presMod = marker.substring(1, comma);
+ } else {
+ presMod = marker.substring(1);
+ }
+ if (presMod.length === 1) {
+ def.presentation1 = presMod; // first presentation modifier
+ //TODO validate the first presentation modifier - it's either N, n, Nn or it passes analyseIntegerPicture
+ } else if (presMod.length > 1) {
+ var lastChar = presMod.charAt(presMod.length - 1);
+ if ('atco'.indexOf(lastChar) !== -1) {
+ def.presentation2 = lastChar;
+ if (lastChar === 'o') {
+ def.ordinal = true;
+ }
+ // 'c' means 'cardinal' and is the default (i.e. not 'ordinal')
+ // 'a' & 't' are ignored (not sure of their relevance to English numbering)
+ def.presentation1 = presMod.substring(0, presMod.length - 1);
+ } else {
+ def.presentation1 = presMod;
+ //TODO validate the first presentation modifier - it's either N, n, Nn or it passes analyseIntegerPicture,
+ // doesn't use ] as grouping separator, and if grouping separator is , then must have width modifier
+ }
+ } else {
+ // no presentation modifier specified - apply the default;
+ def.presentation1 = defaultPresentationModifiers[def.component];
+ }
+ if (typeof def.presentation1 === 'undefined') {
+ // unknown component specifier
+ throw {
+ code: 'D3132',
+ value: def.component
+ };
+ }
+ if (def.presentation1[0] === 'n') {
+ def.names = tcase.LOWER;
+ } else if (def.presentation1[0] === 'N') {
+ if (def.presentation1[1] === 'n') {
+ def.names = tcase.TITLE;
+ } else {
+ def.names = tcase.UPPER;
+ }
+ } else if ('YMDdFWwXxHhmsf'.indexOf(def.component) !== -1) {
+ var integerPattern = def.presentation1;
+ if (def.presentation2) {
+ integerPattern += ';' + def.presentation2;
+ }
+ def.integerFormat = analyseIntegerPicture(integerPattern);
+ if (def.width && def.width.min !== undefined) {
+ if (def.integerFormat.mandatoryDigits < def.width.min) {
+ def.integerFormat.mandatoryDigits = def.width.min;
+ }
+ }
+ if ('YMD'.indexOf(def.component) !== -1) {
+ // §9.8.4.4
+ def.n = -1;
+ if (def.width && def.width.max !== undefined) {
+ def.n = def.width.max;
+ def.integerFormat.mandatoryDigits = def.n;
+ } else {
+ var w = def.integerFormat.mandatoryDigits + def.integerFormat.optionalDigits;
+ if (w >= 2) {
+ def.n = w;
+ }
+ }
+ }
+ }
+ if (def.component === 'Z' || def.component === 'z') {
+ def.integerFormat = analyseIntegerPicture(def.presentation1);
+ }
+ spec.push(def);
+ start = pos + 1;
+ }
+ pos++;
+ }
+ addLiteral(start, pos);
+ return format;
+ }
+
+ const days = ['', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
+ const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
+ const millisInADay = 1000 * 60 * 60 * 24;
+
+ const startOfFirstWeek = function (ym) {
+ // ISO 8601 defines the first week of the year to be the week that contains the first Thursday
+ // XPath F&O extends this same definition for the first week of a month
+ // the week starts on a Monday - calculate the millis for the start of the first week
+ // millis for given 1st Jan of that year (at 00:00 UTC)
+ const jan1 = Date.UTC(ym.year, ym.month);
+ var dayOfJan1 = (new Date(jan1)).getUTCDay();
+ if (dayOfJan1 === 0) {
+ dayOfJan1 = 7;
+ }
+ // if Jan 1 is Fri, Sat or Sun, then add the number of days (in millis) to jan1 to get the start of week 1
+ return dayOfJan1 > 4 ? jan1 + (8 - dayOfJan1) * millisInADay : jan1 - (dayOfJan1 - 1) * millisInADay;
+ };
+
+ const yearMonth = function (year, month) {
+ return {
+ year: year,
+ month: month,
+ nextMonth: function () {
+ return (month === 11) ? yearMonth(year + 1, 0) : yearMonth(year, month + 1);
+ },
+ previousMonth: function () {
+ return (month === 0) ? yearMonth(year - 1, 11) : yearMonth(year, month - 1);
+ },
+ nextYear: function () {
+ return yearMonth(year + 1, month);
+ },
+ previousYear: function () {
+ return yearMonth(year - 1, month);
+ }
+ };
+ };
+
+ const deltaWeeks = function (start, end) {
+ return (end - start) / (millisInADay * 7) + 1;
+ };
+
+ const getDateTimeFragment = (date, component) => {
+ let componentValue;
+ switch (component) {
+ case 'Y': // year
+ componentValue = date.getUTCFullYear();
+ break;
+ case 'M': // month in year
+ componentValue = date.getUTCMonth() + 1;
+ break;
+ case 'D': // day in month
+ componentValue = date.getUTCDate();
+ break;
+ case 'd': { // day in year
+ // millis for given date (at 00:00 UTC)
+ const today = Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
+ // millis for given 1st Jan of that year (at 00:00 UTC)
+ const firstJan = Date.UTC(date.getUTCFullYear(), 0);
+ componentValue = (today - firstJan) / millisInADay + 1;
+ break;
+ }
+ case 'F': // day of week
+ componentValue = date.getUTCDay();
+ if (componentValue === 0) {
+ // ISO 8601 defines days 1-7: Mon-Sun
+ componentValue = 7;
+ }
+ break;
+ case 'W': { // week in year
+ const thisYear = yearMonth(date.getUTCFullYear(), 0);
+ const startOfWeek1 = startOfFirstWeek(thisYear);
+ const today = Date.UTC(thisYear.year, date.getUTCMonth(), date.getUTCDate());
+ let week = deltaWeeks(startOfWeek1, today);
+ if (week > 52) {
+ // might be first week of the following year
+ const startOfFollowingYear = startOfFirstWeek(thisYear.nextYear());
+ if (today >= startOfFollowingYear) {
+ week = 1;
+ }
+ } else if (week < 1) {
+ // must be end of the previous year
+ const startOfPreviousYear = startOfFirstWeek(thisYear.previousYear());
+ week = deltaWeeks(startOfPreviousYear, today);
+ }
+ componentValue = Math.floor(week);
+ break;
+ }
+ case 'w': { // week in month
+ const thisMonth = yearMonth(date.getUTCFullYear(), date.getUTCMonth());
+ const startOfWeek1 = startOfFirstWeek(thisMonth);
+ const today = Date.UTC(thisMonth.year, thisMonth.month, date.getUTCDate());
+ let week = deltaWeeks(startOfWeek1, today);
+ if (week > 4) {
+ // might be first week of the following month
+ const startOfFollowingMonth = startOfFirstWeek(thisMonth.nextMonth());
+ if (today >= startOfFollowingMonth) {
+ week = 1;
+ }
+ } else if (week < 1) {
+ // must be end of the previous month
+ const startOfPreviousMonth = startOfFirstWeek(thisMonth.previousMonth());
+ week = deltaWeeks(startOfPreviousMonth, today);
+ }
+ componentValue = Math.floor(week);
+ break;
+ }
+ case 'X': { // ISO week-numbering year
+ // Extension: The F&O spec says nothing about how to access the year associated with the week-of-the-year
+ // e.g. Sat 1 Jan 2005 is in the 53rd week of 2004.
+ // The 'W' component specifier gives 53, but 'Y' will give 2005.
+ // I propose to add 'X' as the component specifier to give the ISO week-numbering year (2004 in this example)
+ const thisYear = yearMonth(date.getUTCFullYear(), 0);
+ const startOfISOYear = startOfFirstWeek(thisYear);
+ const endOfISOYear = startOfFirstWeek(thisYear.nextYear());
+ const now = date.getTime();
+ if (now < startOfISOYear) {
+ componentValue = thisYear.year - 1;
+ } else if (now >= endOfISOYear) {
+ componentValue = thisYear.year + 1;
+ } else {
+ componentValue = thisYear.year;
+ }
+ break;
+ }
+ case 'x': { // ISO week-numbering month
+ // Extension: The F&O spec says nothing about how to access the month associated with the week-of-the-month
+ // e.g. Sat 1 Jan 2005 is in the 5th week of December 2004.
+ // The 'w' component specifier gives 5, but 'W' will give January and 'Y' will give 2005.
+ // I propose to add 'x' as the component specifier to give the 'week-numbering' month (December in this example)
+ const thisMonth = yearMonth(date.getUTCFullYear(), date.getUTCMonth());
+ const startOfISOMonth = startOfFirstWeek(thisMonth);
+ const nextMonth = thisMonth.nextMonth();
+ const endOfISOMonth = startOfFirstWeek(nextMonth);
+ const now = date.getTime();
+ if (now < startOfISOMonth) {
+ componentValue = thisMonth.previousMonth().month + 1;
+ } else if (now >= endOfISOMonth) {
+ componentValue = nextMonth.month + 1;
+ } else {
+ componentValue = thisMonth.month + 1;
+ }
+ break;
+ }
+ case 'H': // hour in day (24 hours)
+ componentValue = date.getUTCHours();
+ break;
+ case 'h': // hour in half-day (12 hours)
+ componentValue = date.getUTCHours();
+ componentValue = componentValue % 12;
+ if (componentValue === 0) {
+ componentValue = 12;
+ }
+ break;
+ case 'P': // am/pm marker
+ componentValue = date.getUTCHours() >= 12 ? 'pm' : 'am';
+ break;
+ case 'm': // minute in hour
+ componentValue = date.getUTCMinutes();
+ break;
+ case 's': // second in minute
+ componentValue = date.getUTCSeconds();
+ break;
+ case 'f': // fractional seconds
+ componentValue = date.getUTCMilliseconds();
+ break;
+ case 'Z': // timezone
+ case 'z':
+ // since the date object is constructed from epoch millis, the TZ component is always be UTC.
+ break;
+ case 'C': // calendar name
+ componentValue = 'ISO';
+ break;
+ case 'E': // era
+ componentValue = 'ISO';
+ break;
+ }
+ return componentValue;
+ };
+
+ let iso8601Spec = null;
+
+ /**
+ * formats the date/time as specified by the XPath fn:format-dateTime function
+ * @param {number} millis - the timestamp to be formatted, in millis since the epoch
+ * @param {string} picture - the picture string that specifies the format
+ * @param {string} timezone - the timezone to use
+ * @returns {string} - the formatted timestamp
+ */
+ function formatDateTime(millis, picture, timezone) {
+ var offsetHours = 0;
+ var offsetMinutes = 0;
+
+ if (typeof timezone !== 'undefined') {
+ // parse the hour and minute offsets
+ // assume for now the format supplied is +hhmm
+ const offset = parseInt(timezone);
+ offsetHours = Math.floor(offset / 100);
+ offsetMinutes = offset % 100;
+ }
+
+ var formatComponent = function (date, markerSpec) {
+ var componentValue = getDateTimeFragment(date, markerSpec.component);
+
+ // §9.8.4.3 Formatting Integer-Valued Date/Time Components
+ if ('YMDdFWwXxHhms'.indexOf(markerSpec.component) !== -1) {
+ if (markerSpec.component === 'Y') {
+ // §9.8.4.4 Formatting the Year Component
+ if (markerSpec.n !== -1) {
+ componentValue = componentValue % Math.pow(10, markerSpec.n);
+ }
+ }
+ if (markerSpec.names) {
+ if (markerSpec.component === 'M' || markerSpec.component === 'x') {
+ componentValue = months[componentValue - 1];
+ } else if (markerSpec.component === 'F') {
+ componentValue = days[componentValue];
+ } else {
+ throw {
+ code: 'D3133',
+ value: markerSpec.component
+ };
+ }
+ if (markerSpec.names === tcase.UPPER) {
+ componentValue = componentValue.toUpperCase();
+ } else if (markerSpec.names === tcase.LOWER) {
+ componentValue = componentValue.toLowerCase();
+ }
+ if (markerSpec.width && componentValue.length > markerSpec.width.max) {
+ componentValue = componentValue.substring(0, markerSpec.width.max);
+ }
+ } else {
+ componentValue = _formatInteger(componentValue, markerSpec.integerFormat);
+ }
+ } else if (markerSpec.component === 'f') {
+ // TODO §9.8.4.5 Formatting Fractional Seconds
+ componentValue = _formatInteger(componentValue, markerSpec.integerFormat);
+ } else if (markerSpec.component === 'Z' || markerSpec.component === 'z') {
+ // §9.8.4.6 Formatting timezones
+ const offset = offsetHours * 100 + offsetMinutes;
+ if (markerSpec.integerFormat.regular) {
+ componentValue = _formatInteger(offset, markerSpec.integerFormat);
+ } else {
+ const numDigits = markerSpec.integerFormat.mandatoryDigits;
+ if (numDigits === 1 || numDigits === 2) {
+ componentValue = _formatInteger(offsetHours, markerSpec.integerFormat);
+ if (offsetMinutes !== 0) {
+ componentValue += ':' + formatInteger(offsetMinutes, '00');
+ }
+ } else if (numDigits === 3 || numDigits === 4) {
+ componentValue = _formatInteger(offset, markerSpec.integerFormat);
+ } else {
+ throw {
+ code: 'D3134',
+ value: numDigits
+ };
+ }
+ }
+ if (offset >= 0) {
+ componentValue = '+' + componentValue;
+ }
+ if (markerSpec.component === 'z') {
+ componentValue = 'GMT' + componentValue;
+ }
+ if (offset === 0 && markerSpec.presentation2 === 't') {
+ componentValue = 'Z';
+ }
+ }
+ return componentValue;
+ };
+
+ let formatSpec;
+ if(typeof picture === 'undefined') {
+ // default to ISO 8601 format
+ if (iso8601Spec === null) {
+ iso8601Spec = analyseDateTimePicture('[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01].[f001][Z01:01t]');
+ }
+ formatSpec = iso8601Spec;
+ } else {
+ formatSpec = analyseDateTimePicture(picture);
+ }
+
+ const offsetMillis = (60 * offsetHours + offsetMinutes) * 60 * 1000;
+ const dateTime = new Date(millis + offsetMillis);
+
+ let result = '';
+ formatSpec.parts.forEach(function (part) {
+ if (part.type === 'literal') {
+ result += part.value;
+ } else {
+ result += formatComponent(dateTime, part);
+ }
+ });
+
+ return result;
+ }
+
+ /**
+ * Generate a regex to parse integers or timestamps
+ * @param {object} formatSpec - object representing the format
+ * @returns {object} - regex
+ */
+ function generateRegex(formatSpec) {
+ var matcher = {};
+ if (formatSpec.type === 'datetime') {
+ matcher.type = 'datetime';
+ matcher.parts = formatSpec.parts.map(function (part) {
+ var res = {};
+ if (part.type === 'literal') {
+ res.regex = part.value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
+ } else if (part.component === 'Z' || part.component === 'z') {
+ // timezone
+ let separator;
+ if (!Array.isArray(part.integerFormat.groupingSeparators)) {
+ separator = part.integerFormat.groupingSeparators;
+ }
+ res.regex = '';
+ if (part.component === 'z') {
+ res.regex = 'GMT';
+ }
+ res.regex += '[-+][0-9]+';
+ if (separator) {
+ res.regex += separator.character + '[0-9]+';
+ }
+ res.parse = function(value) {
+ if (part.component === 'z') {
+ value = value.substring(3); // remove the leading GMT
+ }
+ let offsetHours = 0, offsetMinutes = 0;
+ if (separator) {
+ offsetHours = Number.parseInt(value.substring(0, value.indexOf(separator.character)));
+ offsetMinutes = Number.parseInt(value.substring(value.indexOf(separator.character) + 1));
+ } else {
+ // depends on number of digits
+ const numdigits = value.length - 1;
+ if (numdigits <= 2) {
+ // just hour offset
+ offsetHours = Number.parseInt(value);
+ } else {
+ offsetHours = Number.parseInt(value.substring(0, 3));
+ offsetMinutes = Number.parseInt(value.substring(3));
+ }
+ }
+ return offsetHours * 60 + offsetMinutes;
+ };
+ } else if (part.integerFormat) {
+ part.integerFormat.n = part.n;
+ res = generateRegex(part.integerFormat);
+ } else {
+ // must be a month or day name
+ res.regex = '[a-zA-Z]+';
+ var lookup = {};
+ if (part.component === 'M' || part.component === 'x') {
+ // months
+ months.forEach(function (name, index) {
+ if (part.width && part.width.max) {
+ lookup[name.substring(0, part.width.max)] = index + 1;
+ } else {
+ lookup[name] = index + 1;
+ }
+ });
+ } else if (part.component === 'F') {
+ // days
+ days.forEach(function (name, index) {
+ if (index > 0) {
+ if (part.width && part.width.max) {
+ lookup[name.substring(0, part.width.max)] = index;
+ } else {
+ lookup[name] = index;
+ }
+ }
+ });
+ } else if (part.component === 'P') {
+ lookup = {'am': 0, 'AM': 0, 'pm': 1, 'PM': 1};
+ } else {
+ // unsupported 'name' option for this component
+ throw {
+ code: 'D3133',
+ value: part.component
+ };
+ }
+ res.parse = function (value) {
+ return lookup[value];
+ };
+ }
+ res.component = part.component;
+ return res;
+ });
+ } else { // type === 'integer'
+ matcher.type = 'integer';
+ const isUpper = formatSpec.case === tcase.UPPER;
+ let occurrences;
+ if(formatSpec.n && formatSpec.n > 0){
+ if(formatSpec.optionalDigits === 0){
+ occurrences = `{${formatSpec.n}}`;
+ } else {
+ occurrences = `{${formatSpec.n - formatSpec.optionalDigits},${formatSpec.n}}`;
+ }
+ } else {
+ occurrences = '+';
+ }
+
+ switch (formatSpec.primary) {
+ case formats.LETTERS:
+ matcher.regex = isUpper ? '[A-Z]+' : '[a-z]+';
+ matcher.parse = function (value) {
+ return lettersToDecimal(value, isUpper ? 'A' : 'a');
+ };
+ break;
+ case formats.ROMAN:
+ matcher.regex = isUpper ? '[MDCLXVI]+' : '[mdclxvi]+';
+ matcher.parse = function (value) {
+ return romanToDecimal(isUpper ? value : value.toUpperCase());
+ };
+ break;
+ case formats.WORDS:
+ matcher.regex = '(?:' + Object.keys(wordValues).concat('and', '[\\-, ]').join('|') + ')+';
+ matcher.parse = function (value) {
+ return wordsToNumber(value.toLowerCase());
+ };
+ break;
+ case formats.DECIMAL:
+ matcher.regex = `[0-9]${occurrences}`;
+ if (formatSpec.ordinal) {
+ // ordinals
+ matcher.regex += '(?:th|st|nd|rd)';
+ }
+ matcher.parse = function (value) {
+ let digits = value;
+ if (formatSpec.ordinal) {
+ // strip off the suffix
+ digits = value.substring(0, value.length - 2);
+ }
+ // strip out the separators
+ if (formatSpec.regular) {
+ digits = digits.split(',').join('');
+ } else {
+ formatSpec.groupingSeparators.forEach(sep => {
+ digits = digits.split(sep.character).join('');
+ });
+ }
+ if (formatSpec.zeroCode !== 0x30) {
+ // apply offset
+ digits = digits.split('').map(char => String.fromCodePoint(char.codePointAt(0) - formatSpec.zeroCode + 0x30)).join('');
+ }
+ return parseInt(digits);
+ };
+ break;
+ case formats.SEQUENCE:
+ throw {
+ code: 'D3130',
+ value: formatSpec.token
+ };
+ }
+
+ }
+ return matcher;
+ }
+
+ /**
+ * parse a string containing an integer as specified by the picture string
+ * @param {string} value - the string to parse
+ * @param {string} picture - the picture string
+ * @returns {number} - the parsed number
+ */
+ function parseInteger(value, picture) {
+ if (typeof value === 'undefined') {
+ return undefined;
+ }
+
+ const formatSpec = analyseIntegerPicture(picture);
+ const matchSpec = generateRegex(formatSpec);
+ //const fullRegex = '^' + matchSpec.regex + '$';
+ //const matcher = new RegExp(fullRegex);
+ // TODO validate input based on the matcher regex
+ const result = matchSpec.parse(value);
+ return result;
+ }
+
+ /**
+ * parse a string containing a timestamp as specified by the picture string
+ * @param {string} timestamp - the string to parse
+ * @param {string} picture - the picture string
+ * @returns {number} - the parsed timestamp in millis since the epoch
+ */
+ function parseDateTime(timestamp, picture) {
+ const formatSpec = analyseDateTimePicture(picture);
+ const matchSpec = generateRegex(formatSpec);
+ const fullRegex = '^' + matchSpec.parts.map(part => '(' + part.regex + ')').join('') + '$';
+
+ const matcher = new RegExp(fullRegex, 'i'); // TODO can cache this against the picture
+ var info = matcher.exec(timestamp);
+ if (info !== null) {
+ // validate what we've just parsed - do we have enough information to create a timestamp?
+ // rules:
+ // The date is specified by one of:
+ // {Y, M, D} (dateA)
+ // or {Y, d} (dateB)
+ // or {Y, x, w, F} (dateC)
+ // or {X, W, F} (dateD)
+ // The time is specified by one of:
+ // {H, m, s, f} (timeA)
+ // or {P, h, m, s, f} (timeB)
+ // All sets can have an optional Z
+ // To create a timestamp (epoch millis) we need both date and time, but we can default missing
+ // information according to the following rules:
+ // - line up one combination of the above from date, and one from time, most significant value (MSV) to least significant (LSV
+ // - for the values that have been captured, if there are any gaps between MSV and LSV, then throw an error
+ // (e.g.) if hour and seconds, but not minutes is given - throw
+ // (e.g.) if month, hour and minutes, but not day-of-month is given - throw
+ // - anything right of the LSV should be defaulted to zero
+ // (e.g.) if hour and minutes given, default seconds and fractional seconds to zero
+ // (e.g.) if date only given, default the time to 0:00:00.000 (midnight)
+ // - anything left of the MSV should be defaulted to the value of that component returned by $now()
+ // (e.g.) if time only given, default the date to today
+ // (e.g.) if month and date given, default to this year (and midnight, by previous rule)
+ // -- default values for X, x, W, w, F will be derived from the values returned by $now()
+
+ // implement the above rules
+ // determine which of the above date/time combinations we have by using bit masks
+
+ // Y X M x W w d D F P H h m s f Z
+ // dateA 1 0 1 0 0 0 0 1 ? 0 - must not appear
+ // dateB 1 0 0 0 0 0 1 0 ? 1 - can appear - relevant
+ // dateC 0 1 0 1 0 1 0 0 1 ? - can appear - ignored
+ // dateD 0 1 0 0 1 0 0 0 1
+ // timeA 0 1 0 1 1 1
+ // timeB 1 0 1 1 1 1
+
+ // create bitmasks based on the above
+ // date mask YXMxWwdD
+ const dmA = 161; // binary 10100001
+ const dmB = 130; // binary 10000010
+ const dmC = 84; // binary 01010100
+ const dmD = 72; // binary 01001000
+ // time mask PHhmsf
+ const tmA = 23; // binary 010111
+ const tmB = 47; // binary 101111
+
+ const components = {};
+ for (let i = 1; i < info.length; i++) {
+ const mpart = matchSpec.parts[i - 1];
+ if (mpart.parse) {
+ components[mpart.component] = mpart.parse(info[i]);
+ }
+ }
+
+ if(Object.getOwnPropertyNames(components).length === 0) {
+ // nothing specified
+ return undefined;
+ }
+
+ let mask = 0;
+
+ const shift = bit => {
+ mask <<= 1;
+ mask += bit ? 1 : 0;
+ };
+
+ const isType = type => {
+ // shouldn't match any 0's, must match at least one 1
+ return !(~type & mask) && !!(type & mask);
+ };
+
+ 'YXMxWwdD'.split('').forEach(part => shift(components[part]));
+
+ const dateA = isType(dmA);
+ const dateB = !dateA && isType(dmB);
+ const dateC = isType(dmC);
+ const dateD = !dateC && isType(dmD);
+
+ mask = 0;
+ 'PHhmsf'.split('').forEach(part => shift(components[part]));
+
+ const timeA = isType(tmA);
+ const timeB = !timeA && isType(tmB);
+
+ // should only be zero or one date type and zero or one time type
+
+ const dateComps = dateB ? 'YD' : dateC ? 'XxwF' : dateD? 'XWF' : 'YMD';
+ const timeComps = timeB ? 'Phmsf' : 'Hmsf';
+
+ const comps = dateComps + timeComps;
+
+ // step through the candidate parts from most significant to least significant
+ // default the most significant unspecified parts to current timestamp component
+ // default the least significant unspecified parts to zero
+ // if any gaps in between the specified parts, throw an error
+
+ const now = this.environment.timestamp; // must get the fixed timestamp from jsonata
+
+ let startSpecified = false;
+ let endSpecified = false;
+ comps.split('').forEach(part => {
+ if(typeof components[part] === 'undefined') {
+ if(startSpecified) {
+ // past the specified block - default to zero
+ components[part] = ('MDd'.indexOf(part) !== -1) ? 1 : 0;
+ endSpecified = true;
+ } else {
+ // haven't hit the specified block yet, default to current timestamp
+ components[part] = getDateTimeFragment(now, part);
+ }
+ } else {
+ startSpecified = true;
+ if(endSpecified) {
+ throw {
+ code: 'D3136'
+ };
+ }
+ }
+ });
+
+ // validate and fill in components
+ if (components.M > 0) {
+ components.M -= 1; // Date.UTC requires a zero-indexed month
+ } else {
+ components.M = 0; // default to January
+ }
+ if (dateB) {
+ // millis for given 1st Jan of that year (at 00:00 UTC)
+ const firstJan = Date.UTC(components.Y, 0);
+ const offsetMillis = (components.d - 1) * 1000 * 60 * 60 * 24;
+ const derivedDate = new Date(firstJan + offsetMillis);
+ components.M = derivedDate.getUTCMonth();
+ components.D = derivedDate.getUTCDate();
+ }
+ if (dateC) {
+ // TODO implement this
+ // parsing this format not currently supported
+ throw {
+ code: 'D3136'
+ };
+ }
+ if (dateD) {
+ // TODO implement this
+ // parsing this format (ISO week date) not currently supported
+ throw {
+ code: 'D3136'
+ };
+ }
+ if (timeB) {
+ // 12hr to 24hr
+ components.H = components.h === 12 ? 0 : components.h;
+ if (components.P === 1) {
+ components.H += 12;
+ }
+ }
+
+ var millis = Date.UTC(components.Y, components.M, components.D, components.H, components.m, components.s, components.f);
+ if(components.Z || components.z) {
+ // adjust for timezone
+ millis -= (components.Z || components.z) * 60 * 1000;
+ }
+ return millis;
+ }
+ }
+
+ // Regular expression to match an ISO 8601 formatted timestamp
+ var iso8601regex = new RegExp('^\\d{4}(-[01]\\d)*(-[0-3]\\d)*(T[0-2]\\d:[0-5]\\d:[0-5]\\d)*(\\.\\d+)?([+-][0-2]\\d:?[0-5]\\d|Z)?$');
+
+ /**
+ * Converts an ISO 8601 timestamp to milliseconds since the epoch
+ *
+ * @param {string} timestamp - the timestamp to be converted
+ * @param {string} [picture] - the picture string defining the format of the timestamp (defaults to ISO 8601)
+ * @returns {Number} - milliseconds since the epoch
+ */
+ function toMillis(timestamp, picture) {
+ // undefined inputs always return undefined
+ if(typeof timestamp === 'undefined') {
+ return undefined;
+ }
+
+ if(typeof picture === 'undefined') {
+ if (!iso8601regex.test(timestamp)) {
+ throw {
+ stack: (new Error()).stack,
+ code: "D3110",
+ value: timestamp
+ };
+ }
+
+ return Date.parse(timestamp);
+ } else {
+ return parseDateTime.call(this, timestamp, picture);
+ }
+ }
+
+ /**
+ * Converts milliseconds since the epoch to an ISO 8601 timestamp
+ * @param {Number} millis - milliseconds since the epoch to be converted
+ * @param {string} [picture] - the picture string defining the format of the timestamp (defaults to ISO 8601)
+ * @param {string} [timezone] - the timezone to format the timestamp in (defaults to UTC)
+ * @returns {String} - the formatted timestamp
+ */
+ function fromMillis(millis, picture, timezone) {
+ // undefined inputs always return undefined
+ if(typeof millis === 'undefined') {
+ return undefined;
+ }
+
+ return formatDateTime.call(this, millis, picture, timezone);
+ }
+
+ return {
+ formatInteger, parseInteger, fromMillis, toMillis
+ };
+})();
+
+module.exports = dateTime;
+
+},{"./utils":6}],2:[function(require,module,exports){
+(function (global){(function (){
+/**
+ * © Copyright IBM Corp. 2016, 2018 All Rights Reserved
+ * Project name: JSONata
+ * This project is licensed under the MIT License, see LICENSE
+ */
+
+var utils = require('./utils');
+
+const functions = (() => {
+ 'use strict';
+
+ var isNumeric = utils.isNumeric;
+ var isArrayOfStrings = utils.isArrayOfStrings;
+ var isArrayOfNumbers = utils.isArrayOfNumbers;
+ var createSequence = utils.createSequence;
+ var isSequence = utils.isSequence;
+ var isFunction = utils.isFunction;
+ var isLambda = utils.isLambda;
+ var isPromise = utils.isPromise;
+ var getFunctionArity = utils.getFunctionArity;
+ var deepEquals = utils.isDeepEqual;
+ var stringToArray = utils.stringToArray;
+
+ /**
+ * Sum function
+ * @param {Object} args - Arguments
+ * @returns {number} Total value of arguments
+ */
+ function sum(args) {
+ // undefined inputs always return undefined
+ if (typeof args === 'undefined') {
+ return undefined;
+ }
+
+ var total = 0;
+ args.forEach(function (num) {
+ total += num;
+ });
+ return total;
+ }
+
+ /**
+ * Count function
+ * @param {Object} args - Arguments
+ * @returns {number} Number of elements in the array
+ */
+ function count(args) {
+ // undefined inputs always return undefined
+ if (typeof args === 'undefined') {
+ return 0;
+ }
+
+ return args.length;
+ }
+
+ /**
+ * Max function
+ * @param {Object} args - Arguments
+ * @returns {number} Max element in the array
+ */
+ function max(args) {
+ // undefined inputs always return undefined
+ if (typeof args === 'undefined' || args.length === 0) {
+ return undefined;
+ }
+
+ return Math.max.apply(Math, args);
+ }
+
+ /**
+ * Min function
+ * @param {Object} args - Arguments
+ * @returns {number} Min element in the array
+ */
+ function min(args) {
+ // undefined inputs always return undefined
+ if (typeof args === 'undefined' || args.length === 0) {
+ return undefined;
+ }
+
+ return Math.min.apply(Math, args);
+ }
+
+ /**
+ * Average function
+ * @param {Object} args - Arguments
+ * @returns {number} Average element in the array
+ */
+ function average(args) {
+ // undefined inputs always return undefined
+ if (typeof args === 'undefined' || args.length === 0) {
+ return undefined;
+ }
+
+ var total = 0;
+ args.forEach(function (num) {
+ total += num;
+ });
+ return total / args.length;
+ }
+
+ /**
+ * Stringify arguments
+ * @param {Object} arg - Arguments
+ * @param {boolean} [prettify] - Pretty print the result
+ * @returns {String} String from arguments
+ */
+ function string(arg, prettify = false) {
+ // undefined inputs always return undefined
+ if (typeof arg === 'undefined') {
+ return undefined;
+ }
+
+ var str;
+
+ if (typeof arg === 'string') {
+ // already a string
+ str = arg;
+ } else if (isFunction(arg)) {
+ // functions (built-in and lambda convert to empty string
+ str = '';
+ } else if (typeof arg === 'number' && !isFinite(arg)) {
+ throw {
+ code: "D3001",
+ value: arg,
+ stack: (new Error()).stack
+ };
+ } else {
+ var space = prettify ? 2 : 0;
+ if(Array.isArray(arg) && arg.outerWrapper) {
+ arg = arg[0];
+ }
+ str = JSON.stringify(arg, function (key, val) {
+ return (typeof val !== 'undefined' && val !== null && val.toPrecision && isNumeric(val)) ? Number(val.toPrecision(15)) :
+ (val && isFunction(val)) ? '' : val;
+ }, space);
+ }
+ return str;
+ }
+
+ /**
+ * Create substring based on character number and length
+ * @param {String} str - String to evaluate
+ * @param {Integer} start - Character number to start substring
+ * @param {Integer} [length] - Number of characters in substring
+ * @returns {string|*} Substring
+ */
+ function substring(str, start, length) {
+ // undefined inputs always return undefined
+ if (typeof str === 'undefined') {
+ return undefined;
+ }
+
+ var strArray = stringToArray(str);
+ var strLength = strArray.length;
+
+ if (strLength + start < 0) {
+ start = 0;
+ }
+
+ if (typeof length !== 'undefined') {
+ if (length <= 0) {
+ return '';
+ }
+ var end = start >= 0 ? start + length : strLength + start + length;
+ return strArray.slice(start, end).join('');
+ }
+
+ return strArray.slice(start).join('');
+ }
+
+ /**
+ * Create substring up until a character
+ * @param {String} str - String to evaluate
+ * @param {String} chars - Character to define substring boundary
+ * @returns {*} Substring
+ */
+ function substringBefore(str, chars) {
+ // undefined inputs always return undefined
+ if (typeof str === 'undefined') {
+ return undefined;
+ }
+
+ var pos = str.indexOf(chars);
+ if (pos > -1) {
+ return str.substr(0, pos);
+ } else {
+ return str;
+ }
+ }
+
+ /**
+ * Create substring after a character
+ * @param {String} str - String to evaluate
+ * @param {String} chars - Character to define substring boundary
+ * @returns {*} Substring
+ */
+ function substringAfter(str, chars) {
+ // undefined inputs always return undefined
+ if (typeof str === 'undefined') {
+ return undefined;
+ }
+
+ var pos = str.indexOf(chars);
+ if (pos > -1) {
+ return str.substr(pos + chars.length);
+ } else {
+ return str;
+ }
+ }
+
+ /**
+ * Lowercase a string
+ * @param {String} str - String to evaluate
+ * @returns {string} Lowercase string
+ */
+ function lowercase(str) {
+ // undefined inputs always return undefined
+ if (typeof str === 'undefined') {
+ return undefined;
+ }
+
+ return str.toLowerCase();
+ }
+
+ /**
+ * Uppercase a string
+ * @param {String} str - String to evaluate
+ * @returns {string} Uppercase string
+ */
+ function uppercase(str) {
+ // undefined inputs always return undefined
+ if (typeof str === 'undefined') {
+ return undefined;
+ }
+
+ return str.toUpperCase();
+ }
+
+ /**
+ * length of a string
+ * @param {String} str - string
+ * @returns {Number} The number of characters in the string
+ */
+ function length(str) {
+ // undefined inputs always return undefined
+ if (typeof str === 'undefined') {
+ return undefined;
+ }
+
+ return stringToArray(str).length;
+ }
+
+ /**
+ * Normalize and trim whitespace within a string
+ * @param {string} str - string to be trimmed
+ * @returns {string} - trimmed string
+ */
+ function trim(str) {
+ // undefined inputs always return undefined
+ if (typeof str === 'undefined') {
+ return undefined;
+ }
+
+ // normalize whitespace
+ var result = str.replace(/[ \t\n\r]+/gm, ' ');
+ if (result.charAt(0) === ' ') {
+ // strip leading space
+ result = result.substring(1);
+ }
+ if (result.charAt(result.length - 1) === ' ') {
+ // strip trailing space
+ result = result.substring(0, result.length - 1);
+ }
+ return result;
+ }
+
+ /**
+ * Pad a string to a minimum width by adding characters to the start or end
+ * @param {string} str - string to be padded
+ * @param {number} width - the minimum width; +ve pads to the right, -ve pads to the left
+ * @param {string} [char] - the pad character(s); defaults to ' '
+ * @returns {string} - padded string
+ */
+ function pad(str, width, char) {
+ // undefined inputs always return undefined
+ if (typeof str === 'undefined') {
+ return undefined;
+ }
+
+ if (typeof char === 'undefined' || char.length === 0) {
+ char = ' ';
+ }
+
+ var result;
+ var padLength = Math.abs(width) - length(str);
+ if (padLength > 0) {
+ var padding = (new Array(padLength + 1)).join(char);
+ if (char.length > 1) {
+ padding = substring(padding, 0, padLength);
+ }
+ if (width > 0) {
+ result = str + padding;
+ } else {
+ result = padding + str;
+ }
+ } else {
+ result = str;
+ }
+ return result;
+ }
+
+ /**
+ * Evaluate the matcher function against the str arg
+ *
+ * @param {*} matcher - matching function (native or lambda)
+ * @param {string} str - the string to match against
+ * @returns {object} - structure that represents the match(es)
+ */
+ async function evaluateMatcher(matcher, str) {
+ var result = matcher.apply(this, [str]); // eslint-disable-line no-useless-call
+ if(isPromise(result)) {
+ result = await result;
+ }
+ if(result && !(typeof result.start === 'number' || result.end === 'number' || Array.isArray(result.groups) || isFunction(result.next))) {
+ // the matcher function didn't return the correct structure
+ throw {
+ code: "T1010",
+ stack: (new Error()).stack,
+ };
+ }
+ return result;
+ }
+
+ /**
+ * Tests if the str contains the token
+ * @param {String} str - string to test
+ * @param {String} token - substring or regex to find
+ * @returns {Boolean} - true if str contains token
+ */
+ async function contains(str, token) {
+ // undefined inputs always return undefined
+ if (typeof str === 'undefined') {
+ return undefined;
+ }
+
+ var result;
+
+ if (typeof token === 'string') {
+ result = (str.indexOf(token) !== -1);
+ } else {
+ var matches = await evaluateMatcher(token, str);
+ result = (typeof matches !== 'undefined');
+ }
+
+ return result;
+ }
+
+ /**
+ * Match a string with a regex returning an array of object containing details of each match
+ * @param {String} str - string
+ * @param {String} regex - the regex applied to the string
+ * @param {Integer} [limit] - max number of matches to return
+ * @returns {Array} The array of match objects
+ */
+ async function match(str, regex, limit) {
+ // undefined inputs always return undefined
+ if (typeof str === 'undefined') {
+ return undefined;
+ }
+
+ // limit, if specified, must be a non-negative number
+ if (limit < 0) {
+ throw {
+ stack: (new Error()).stack,
+ value: limit,
+ code: 'D3040',
+ index: 3
+ };
+ }
+
+ var result = createSequence();
+
+ if (typeof limit === 'undefined' || limit > 0) {
+ var count = 0;
+ var matches = await evaluateMatcher(regex, str);
+ if (typeof matches !== 'undefined') {
+ while (typeof matches !== 'undefined' && (typeof limit === 'undefined' || count < limit)) {
+ result.push({
+ match: matches.match,
+ index: matches.start,
+ groups: matches.groups
+ });
+ matches = await evaluateMatcher(matches.next);
+ count++;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Match a string with a regex returning an array of object containing details of each match
+ * @param {String} str - string
+ * @param {String} pattern - the substring/regex applied to the string
+ * @param {String} replacement - text to replace the matched substrings
+ * @param {Integer} [limit] - max number of matches to return
+ * @returns {Array} The array of match objects
+ */
+ async function replace(str, pattern, replacement, limit) {
+ // undefined inputs always return undefined
+ if (typeof str === 'undefined') {
+ return undefined;
+ }
+
+ var self = this;
+
+ // pattern cannot be an empty string
+ if (pattern === '') {
+ throw {
+ code: "D3010",
+ stack: (new Error()).stack,
+ value: pattern,
+ index: 2
+ };
+ }
+
+ // limit, if specified, must be a non-negative number
+ if (limit < 0) {
+ throw {
+ code: "D3011",
+ stack: (new Error()).stack,
+ value: limit,
+ index: 4
+ };
+ }
+
+ var replacer;
+ if (typeof replacement === 'string') {
+ replacer = function (regexMatch) {
+ var substitute = '';
+ // scan forward, copying the replacement text into the substitute string
+ // and replace any occurrence of $n with the values matched by the regex
+ var position = 0;
+ var index = replacement.indexOf('$', position);
+ while (index !== -1 && position < replacement.length) {
+ substitute += replacement.substring(position, index);
+ position = index + 1;
+ var dollarVal = replacement.charAt(position);
+ if (dollarVal === '$') {
+ // literal $
+ substitute += '$';
+ position++;
+ } else if (dollarVal === '0') {
+ substitute += regexMatch.match;
+ position++;
+ } else {
+ var maxDigits;
+ if (regexMatch.groups.length === 0) {
+ // no sub-matches; any $ followed by a digit will be replaced by an empty string
+ maxDigits = 1;
+ } else {
+ // max number of digits to parse following the $
+ maxDigits = Math.floor(Math.log(regexMatch.groups.length) * Math.LOG10E) + 1;
+ }
+ index = parseInt(replacement.substring(position, position + maxDigits), 10);
+ if (maxDigits > 1 && index > regexMatch.groups.length) {
+ index = parseInt(replacement.substring(position, position + maxDigits - 1), 10);
+ }
+ if (!isNaN(index)) {
+ if (regexMatch.groups.length > 0) {
+ var submatch = regexMatch.groups[index - 1];
+ if (typeof submatch !== 'undefined') {
+ substitute += submatch;
+ }
+ }
+ position += index.toString().length;
+ } else {
+ // not a capture group, treat the $ as literal
+ substitute += '$';
+ }
+ }
+ index = replacement.indexOf('$', position);
+ }
+ substitute += replacement.substring(position);
+ return substitute;
+ };
+ } else {
+ replacer = replacement;
+ }
+
+ var result = '';
+ var position = 0;
+
+ if (typeof limit === 'undefined' || limit > 0) {
+ var count = 0;
+ if (typeof pattern === 'string') {
+ var index = str.indexOf(pattern, position);
+ while (index !== -1 && (typeof limit === 'undefined' || count < limit)) {
+ result += str.substring(position, index);
+ result += replacement;
+ position = index + pattern.length;
+ count++;
+ index = str.indexOf(pattern, position);
+ }
+ result += str.substring(position);
+ } else {
+ var matches = await evaluateMatcher(pattern, str);
+ if (typeof matches !== 'undefined') {
+ while (typeof matches !== 'undefined' && (typeof limit === 'undefined' || count < limit)) {
+ result += str.substring(position, matches.start);
+ var replacedWith = replacer.apply(self, [matches]);
+ if (isPromise(replacedWith)) {
+ replacedWith = await replacedWith;
+ }
+ // check replacedWith is a string
+ if (typeof replacedWith === 'string') {
+ result += replacedWith;
+ } else {
+ // not a string - throw error
+ throw {
+ code: "D3012",
+ stack: (new Error()).stack,
+ value: replacedWith
+ };
+ }
+ position = matches.start + matches.match.length;
+ count++;
+ matches = await evaluateMatcher(matches.next);
+ }
+ result += str.substring(position);
+ } else {
+ result = str;
+ }
+ }
+ } else {
+ result = str;
+ }
+
+ return result;
+ }
+
+ /**
+ * Base64 encode a string
+ * @param {String} str - string
+ * @returns {String} Base 64 encoding of the binary data
+ */
+ function base64encode(str) {
+ // undefined inputs always return undefined
+ if (typeof str === 'undefined') {
+ return undefined;
+ }
+ // Use btoa in a browser, or Buffer in Node.js
+
+ var btoa = typeof window !== 'undefined' ?
+ /* istanbul ignore next */ window.btoa :
+ function (str) {
+ // Simply doing `new Buffer` at this point causes Browserify to pull
+ // in the entire Buffer browser library, which is large and unnecessary.
+ // Using `global.Buffer` defeats this.
+ return new global.Buffer.from(str, 'binary').toString('base64'); // eslint-disable-line new-cap
+ };
+ return btoa(str);
+ }
+
+ /**
+ * Base64 decode a string
+ * @param {String} str - string
+ * @returns {String} Base 64 encoding of the binary data
+ */
+ function base64decode(str) {
+ // undefined inputs always return undefined
+ if (typeof str === 'undefined') {
+ return undefined;
+ }
+ // Use btoa in a browser, or Buffer in Node.js
+ var atob = typeof window !== 'undefined' ?
+ /* istanbul ignore next */ window.atob :
+ function (str) {
+ // Simply doing `new Buffer` at this point causes Browserify to pull
+ // in the entire Buffer browser library, which is large and unnecessary.
+ // Using `global.Buffer` defeats this.
+ return new global.Buffer.from(str, 'base64').toString('binary'); // eslint-disable-line new-cap
+ };
+ return atob(str);
+ }
+
+ /**
+ * Encode a string into a component for a url
+ * @param {String} str - String to encode
+ * @returns {string} Encoded string
+ */
+ function encodeUrlComponent(str) {
+ // undefined inputs always return undefined
+ if (typeof str === 'undefined') {
+ return undefined;
+ }
+
+ // Catch URIErrors when URI sequence is malformed
+ var returnVal;
+ try {
+ returnVal = encodeURIComponent(str);
+ } catch (e) {
+ throw {
+ code: "D3140",
+ stack: (new Error()).stack,
+ value: str,
+ functionName: "encodeUrlComponent"
+ };
+ }
+ return returnVal;
+ }
+
+ /**
+ * Encode a string into a url
+ * @param {String} str - String to encode
+ * @returns {string} Encoded string
+ */
+ function encodeUrl(str) {
+ // undefined inputs always return undefined
+ if (typeof str === 'undefined') {
+ return undefined;
+ }
+
+ // Catch URIErrors when URI sequence is malformed
+ var returnVal;
+ try {
+ returnVal = encodeURI(str);
+ } catch (e) {
+ throw {
+ code: "D3140",
+ stack: (new Error()).stack,
+ value: str,
+ functionName: "encodeUrl"
+ };
+ }
+ return returnVal;
+ }
+
+ /**
+ * Decode a string from a component for a url
+ * @param {String} str - String to decode
+ * @returns {string} Decoded string
+ */
+ function decodeUrlComponent(str) {
+ // undefined inputs always return undefined
+ if (typeof str === 'undefined') {
+ return undefined;
+ }
+
+ // Catch URIErrors when URI sequence is malformed
+ var returnVal;
+ try {
+ returnVal = decodeURIComponent(str);
+ } catch (e) {
+ throw {
+ code: "D3140",
+ stack: (new Error()).stack,
+ value: str,
+ functionName: "decodeUrlComponent"
+ };
+ }
+ return returnVal;
+ }
+
+ /**
+ * Decode a string from a url
+ * @param {String} str - String to decode
+ * @returns {string} Decoded string
+ */
+ function decodeUrl(str) {
+ // undefined inputs always return undefined
+ if (typeof str === 'undefined') {
+ return undefined;
+ }
+
+ // Catch URIErrors when URI sequence is malformed
+ var returnVal;
+ try {
+ returnVal = decodeURI(str);
+ } catch (e) {
+ throw {
+ code: "D3140",
+ stack: (new Error()).stack,
+ value: str,
+ functionName: "decodeUrl"
+ };
+ }
+ return returnVal;
+ }
+
+ /**
+ * Split a string into an array of substrings
+ * @param {String} str - string
+ * @param {String} separator - the token or regex that splits the string
+ * @param {Integer} [limit] - max number of substrings
+ * @returns {Array} The array of string
+ */
+ async function split(str, separator, limit) {
+ // undefined inputs always return undefined
+ if (typeof str === 'undefined') {
+ return undefined;
+ }
+
+ // limit, if specified, must be a non-negative number
+ if (limit < 0) {
+ throw {
+ code: "D3020",
+ stack: (new Error()).stack,
+ value: limit,
+ index: 3
+ };
+ }
+
+ var result = [];
+
+ if (typeof limit === 'undefined' || limit > 0) {
+ if (typeof separator === 'string') {
+ result = str.split(separator, limit);
+ } else {
+ var count = 0;
+ var matches = await evaluateMatcher(separator, str);
+ if (typeof matches !== 'undefined') {
+ var start = 0;
+ while (typeof matches !== 'undefined' && (typeof limit === 'undefined' || count < limit)) {
+ result.push(str.substring(start, matches.start));
+ start = matches.end;
+ matches = await evaluateMatcher(matches.next);
+ count++;
+ }
+ if (typeof limit === 'undefined' || count < limit) {
+ result.push(str.substring(start));
+ }
+ } else {
+ result.push(str);
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Join an array of strings
+ * @param {Array} strs - array of string
+ * @param {String} [separator] - the token that splits the string
+ * @returns {String} The concatenated string
+ */
+ function join(strs, separator) {
+ // undefined inputs always return undefined
+ if (typeof strs === 'undefined') {
+ return undefined;
+ }
+
+ // if separator is not specified, default to empty string
+ if (typeof separator === 'undefined') {
+ separator = "";
+ }
+
+ return strs.join(separator);
+ }
+
+ /**
+ * Formats a number into a decimal string representation using XPath 3.1 F&O fn:format-number spec
+ * @param {number} value - number to format
+ * @param {String} picture - picture string definition
+ * @param {Object} [options] - override locale defaults
+ * @returns {String} The formatted string
+ */
+ function formatNumber(value, picture, options) {
+ // undefined inputs always return undefined
+ if (typeof value === 'undefined') {
+ return undefined;
+ }
+
+ var defaults = {
+ "decimal-separator": ".",
+ "grouping-separator": ",",
+ "exponent-separator": "e",
+ "infinity": "Infinity",
+ "minus-sign": "-",
+ "NaN": "NaN",
+ "percent": "%",
+ "per-mille": "\u2030",
+ "zero-digit": "0",
+ "digit": "#",
+ "pattern-separator": ";"
+ };
+
+ // if `options` is specified, then its entries override defaults
+ var properties = defaults;
+ if (typeof options !== 'undefined') {
+ Object.keys(options).forEach(function (key) {
+ properties[key] = options[key];
+ });
+ }
+
+ var decimalDigitFamily = [];
+ var zeroCharCode = properties['zero-digit'].charCodeAt(0);
+ for (var ii = zeroCharCode; ii < zeroCharCode + 10; ii++) {
+ decimalDigitFamily.push(String.fromCharCode(ii));
+ }
+
+ var activeChars = decimalDigitFamily.concat([properties['decimal-separator'], properties['exponent-separator'], properties['grouping-separator'], properties.digit, properties['pattern-separator']]);
+
+ var subPictures = picture.split(properties['pattern-separator']);
+
+ if (subPictures.length > 2) {
+ throw {
+ code: 'D3080',
+ stack: (new Error()).stack
+ };
+ }
+
+ var splitParts = function (subpicture) {
+ var prefix = (function () {
+ var ch;
+ for (var ii = 0; ii < subpicture.length; ii++) {
+ ch = subpicture.charAt(ii);
+ if (activeChars.indexOf(ch) !== -1 && ch !== properties['exponent-separator']) {
+ return subpicture.substring(0, ii);
+ }
+ }
+ })();
+ var suffix = (function () {
+ var ch;
+ for (var ii = subpicture.length - 1; ii >= 0; ii--) {
+ ch = subpicture.charAt(ii);
+ if (activeChars.indexOf(ch) !== -1 && ch !== properties['exponent-separator']) {
+ return subpicture.substring(ii + 1);
+ }
+ }
+ })();
+ var activePart = subpicture.substring(prefix.length, subpicture.length - suffix.length);
+ var mantissaPart, exponentPart, integerPart, fractionalPart;
+ var exponentPosition = subpicture.indexOf(properties['exponent-separator'], prefix.length);
+ if (exponentPosition === -1 || exponentPosition > subpicture.length - suffix.length) {
+ mantissaPart = activePart;
+ exponentPart = undefined;
+ } else {
+ mantissaPart = activePart.substring(0, exponentPosition);
+ exponentPart = activePart.substring(exponentPosition + 1);
+ }
+ var decimalPosition = mantissaPart.indexOf(properties['decimal-separator']);
+ if (decimalPosition === -1) {
+ integerPart = mantissaPart;
+ fractionalPart = suffix;
+ } else {
+ integerPart = mantissaPart.substring(0, decimalPosition);
+ fractionalPart = mantissaPart.substring(decimalPosition + 1);
+ }
+ return {
+ prefix: prefix,
+ suffix: suffix,
+ activePart: activePart,
+ mantissaPart: mantissaPart,
+ exponentPart: exponentPart,
+ integerPart: integerPart,
+ fractionalPart: fractionalPart,
+ subpicture: subpicture
+ };
+ };
+
+ // validate the picture string, F&O 4.7.3
+ var validate = function (parts) {
+ var error;
+ var ii;
+ var subpicture = parts.subpicture;
+ var decimalPos = subpicture.indexOf(properties['decimal-separator']);
+ if (decimalPos !== subpicture.lastIndexOf(properties['decimal-separator'])) {
+ error = 'D3081';
+ }
+ if (subpicture.indexOf(properties.percent) !== subpicture.lastIndexOf(properties.percent)) {
+ error = 'D3082';
+ }
+ if (subpicture.indexOf(properties['per-mille']) !== subpicture.lastIndexOf(properties['per-mille'])) {
+ error = 'D3083';
+ }
+ if (subpicture.indexOf(properties.percent) !== -1 && subpicture.indexOf(properties['per-mille']) !== -1) {
+ error = 'D3084';
+ }
+ var valid = false;
+ for (ii = 0; ii < parts.mantissaPart.length; ii++) {
+ var ch = parts.mantissaPart.charAt(ii);
+ if (decimalDigitFamily.indexOf(ch) !== -1 || ch === properties.digit) {
+ valid = true;
+ break;
+ }
+ }
+ if (!valid) {
+ error = 'D3085';
+ }
+ var charTypes = parts.activePart.split('').map(function (char) {
+ return activeChars.indexOf(char) === -1 ? 'p' : 'a';
+ }).join('');
+ if (charTypes.indexOf('p') !== -1) {
+ error = 'D3086';
+ }
+ if (decimalPos !== -1) {
+ if (subpicture.charAt(decimalPos - 1) === properties['grouping-separator'] || subpicture.charAt(decimalPos + 1) === properties['grouping-separator']) {
+ error = 'D3087';
+ }
+ } else if (parts.integerPart.charAt(parts.integerPart.length - 1) === properties['grouping-separator']) {
+ error = 'D3088';
+ }
+ if (subpicture.indexOf(properties['grouping-separator'] + properties['grouping-separator']) !== -1) {
+ error = 'D3089';
+ }
+ var optionalDigitPos = parts.integerPart.indexOf(properties.digit);
+ if (optionalDigitPos !== -1 && parts.integerPart.substring(0, optionalDigitPos).split('').filter(function (char) {
+ return decimalDigitFamily.indexOf(char) > -1;
+ }).length > 0) {
+ error = 'D3090';
+ }
+ optionalDigitPos = parts.fractionalPart.lastIndexOf(properties.digit);
+ if (optionalDigitPos !== -1 && parts.fractionalPart.substring(optionalDigitPos).split('').filter(function (char) {
+ return decimalDigitFamily.indexOf(char) > -1;
+ }).length > 0) {
+ error = 'D3091';
+ }
+ var exponentExists = (typeof parts.exponentPart === 'string');
+ if (exponentExists && parts.exponentPart.length > 0 && (subpicture.indexOf(properties.percent) !== -1 || subpicture.indexOf(properties['per-mille']) !== -1)) {
+ error = 'D3092';
+ }
+ if (exponentExists && (parts.exponentPart.length === 0 || parts.exponentPart.split('').filter(function (char) {
+ return decimalDigitFamily.indexOf(char) === -1;
+ }).length > 0)) {
+ error = 'D3093';
+ }
+ if (error) {
+ throw {
+ code: error,
+ stack: (new Error()).stack
+ };
+ }
+ };
+
+ // analyse the picture string, F&O 4.7.4
+ var analyse = function (parts) {
+ var getGroupingPositions = function (part, toLeft) {
+ var positions = [];
+ var groupingPosition = part.indexOf(properties['grouping-separator']);
+ while (groupingPosition !== -1) {
+ var charsToTheRight = (toLeft ? part.substring(0, groupingPosition) : part.substring(groupingPosition)).split('').filter(function (char) {
+ return decimalDigitFamily.indexOf(char) !== -1 || char === properties.digit;
+ }).length;
+ positions.push(charsToTheRight);
+ groupingPosition = parts.integerPart.indexOf(properties['grouping-separator'], groupingPosition + 1);
+ }
+ return positions;
+ };
+ var integerPartGroupingPositions = getGroupingPositions(parts.integerPart);
+ var regular = function (indexes) {
+ // are the grouping positions regular? i.e. same interval between each of them
+ if (indexes.length === 0) {
+ return 0;
+ }
+ var gcd = function (a, b) {
+ return b === 0 ? a : gcd(b, a % b);
+ };
+ // find the greatest common divisor of all the positions
+ var factor = indexes.reduce(gcd);
+ // is every position separated by this divisor? If so, it's regular
+ for (var index = 1; index <= indexes.length; index++) {
+ if (indexes.indexOf(index * factor) === -1) {
+ return 0;
+ }
+ }
+ return factor;
+ };
+
+ var regularGrouping = regular(integerPartGroupingPositions);
+ var fractionalPartGroupingPositions = getGroupingPositions(parts.fractionalPart, true);
+
+ var minimumIntegerPartSize = parts.integerPart.split('').filter(function (char) {
+ return decimalDigitFamily.indexOf(char) !== -1;
+ }).length;
+ var scalingFactor = minimumIntegerPartSize;
+
+ var fractionalPartArray = parts.fractionalPart.split('');
+ var minimumFactionalPartSize = fractionalPartArray.filter(function (char) {
+ return decimalDigitFamily.indexOf(char) !== -1;
+ }).length;
+ var maximumFactionalPartSize = fractionalPartArray.filter(function (char) {
+ return decimalDigitFamily.indexOf(char) !== -1 || char === properties.digit;
+ }).length;
+ var exponentPresent = typeof parts.exponentPart === 'string';
+ if (minimumIntegerPartSize === 0 && maximumFactionalPartSize === 0) {
+ if (exponentPresent) {
+ minimumFactionalPartSize = 1;
+ maximumFactionalPartSize = 1;
+ } else {
+ minimumIntegerPartSize = 1;
+ }
+ }
+ if (exponentPresent && minimumIntegerPartSize === 0 && parts.integerPart.indexOf(properties.digit) !== -1) {
+ minimumIntegerPartSize = 1;
+ }
+ if (minimumIntegerPartSize === 0 && minimumFactionalPartSize === 0) {
+ minimumFactionalPartSize = 1;
+ }
+ var minimumExponentSize = 0;
+ if (exponentPresent) {
+ minimumExponentSize = parts.exponentPart.split('').filter(function (char) {
+ return decimalDigitFamily.indexOf(char) !== -1;
+ }).length;
+ }
+
+ return {
+ integerPartGroupingPositions: integerPartGroupingPositions,
+ regularGrouping: regularGrouping,
+ minimumIntegerPartSize: minimumIntegerPartSize,
+ scalingFactor: scalingFactor,
+ prefix: parts.prefix,
+ fractionalPartGroupingPositions: fractionalPartGroupingPositions,
+ minimumFactionalPartSize: minimumFactionalPartSize,
+ maximumFactionalPartSize: maximumFactionalPartSize,
+ minimumExponentSize: minimumExponentSize,
+ suffix: parts.suffix,
+ picture: parts.subpicture
+ };
+ };
+
+ var parts = subPictures.map(splitParts);
+ parts.forEach(validate);
+
+ var variables = parts.map(analyse);
+
+ var minus_sign = properties['minus-sign'];
+ var zero_digit = properties['zero-digit'];
+ var decimal_separator = properties['decimal-separator'];
+ var grouping_separator = properties['grouping-separator'];
+
+ if (variables.length === 1) {
+ variables.push(JSON.parse(JSON.stringify(variables[0])));
+ variables[1].prefix = minus_sign + variables[1].prefix;
+ }
+
+ // TODO cache the result of the analysis
+
+ // format the number
+ // bullet 1: TODO: NaN - not sure we'd ever get this in JSON
+ var pic;
+ // bullet 2:
+ if (value >= 0) {
+ pic = variables[0];
+ } else {
+ pic = variables[1];
+ }
+ var adjustedNumber;
+ // bullet 3:
+ if (pic.picture.indexOf(properties.percent) !== -1) {
+ adjustedNumber = value * 100;
+ } else if (pic.picture.indexOf(properties['per-mille']) !== -1) {
+ adjustedNumber = value * 1000;
+ } else {
+ adjustedNumber = value;
+ }
+ // bullet 4:
+ // TODO: infinity - not sure we'd ever get this in JSON
+ // bullet 5:
+ var mantissa, exponent;
+ if (pic.minimumExponentSize === 0) {
+ mantissa = adjustedNumber;
+ } else {
+ // mantissa * 10^exponent = adjustedNumber
+ var maxMantissa = Math.pow(10, pic.scalingFactor);
+ var minMantissa = Math.pow(10, pic.scalingFactor - 1);
+ mantissa = adjustedNumber;
+ exponent = 0;
+ while (mantissa < minMantissa) {
+ mantissa *= 10;
+ exponent -= 1;
+ }
+ while (mantissa > maxMantissa) {
+ mantissa /= 10;
+ exponent += 1;
+ }
+ }
+ // bullet 6:
+ var roundedNumber = round(mantissa, pic.maximumFactionalPartSize);
+ // bullet 7:
+ var makeString = function (value, dp) {
+ var str = Math.abs(value).toFixed(dp);
+ if (zero_digit !== '0') {
+ str = str.split('').map(function (digit) {
+ if (digit >= '0' && digit <= '9') {
+ return decimalDigitFamily[digit.charCodeAt(0) - 48];
+ } else {
+ return digit;
+ }
+ }).join('');
+ }
+ return str;
+ };
+ var stringValue = makeString(roundedNumber, pic.maximumFactionalPartSize);
+ var decimalPos = stringValue.indexOf('.');
+ if (decimalPos === -1) {
+ stringValue = stringValue + decimal_separator;
+ } else {
+ stringValue = stringValue.replace('.', decimal_separator);
+ }
+ while (stringValue.charAt(0) === zero_digit) {
+ stringValue = stringValue.substring(1);
+ }
+ while (stringValue.charAt(stringValue.length - 1) === zero_digit) {
+ stringValue = stringValue.substring(0, stringValue.length - 1);
+ }
+ // bullets 8 & 9:
+ decimalPos = stringValue.indexOf(decimal_separator);
+ var padLeft = pic.minimumIntegerPartSize - decimalPos;
+ var padRight = pic.minimumFactionalPartSize - (stringValue.length - decimalPos - 1);
+ stringValue = (padLeft > 0 ? new Array(padLeft + 1).join(zero_digit) : '') + stringValue;
+ stringValue = stringValue + (padRight > 0 ? new Array(padRight + 1).join(zero_digit) : '');
+ decimalPos = stringValue.indexOf(decimal_separator);
+ // bullet 10:
+ if (pic.regularGrouping > 0) {
+ var groupCount = Math.floor((decimalPos - 1) / pic.regularGrouping);
+ for (var group = 1; group <= groupCount; group++) {
+ stringValue = [stringValue.slice(0, decimalPos - group * pic.regularGrouping), grouping_separator, stringValue.slice(decimalPos - group * pic.regularGrouping)].join('');
+ }
+ } else {
+ pic.integerPartGroupingPositions.forEach(function (pos) {
+ stringValue = [stringValue.slice(0, decimalPos - pos), grouping_separator, stringValue.slice(decimalPos - pos)].join('');
+ decimalPos++;
+ });
+ }
+ // bullet 11:
+ decimalPos = stringValue.indexOf(decimal_separator);
+ pic.fractionalPartGroupingPositions.forEach(function (pos) {
+ stringValue = [stringValue.slice(0, pos + decimalPos + 1), grouping_separator, stringValue.slice(pos + decimalPos + 1)].join('');
+ });
+ // bullet 12:
+ decimalPos = stringValue.indexOf(decimal_separator);
+ if (pic.picture.indexOf(decimal_separator) === -1 || decimalPos === stringValue.length - 1) {
+ stringValue = stringValue.substring(0, stringValue.length - 1);
+ }
+ // bullet 13:
+ if (typeof exponent !== 'undefined') {
+ var stringExponent = makeString(exponent, 0);
+ padLeft = pic.minimumExponentSize - stringExponent.length;
+ if (padLeft > 0) {
+ stringExponent = new Array(padLeft + 1).join(zero_digit) + stringExponent;
+ }
+ stringValue = stringValue + properties['exponent-separator'] + (exponent < 0 ? minus_sign : '') + stringExponent;
+ }
+ // bullet 14:
+ stringValue = pic.prefix + stringValue + pic.suffix;
+ return stringValue;
+ }
+
+ /**
+ * Converts a number to a string using a specified number base
+ * @param {number} value - the number to convert
+ * @param {number} [radix] - the number base; must be between 2 and 36. Defaults to 10
+ * @returns {string} - the converted string
+ */
+ function formatBase(value, radix) {
+ // undefined inputs always return undefined
+ if (typeof value === 'undefined') {
+ return undefined;
+ }
+
+ value = round(value);
+
+ if (typeof radix === 'undefined') {
+ radix = 10;
+ } else {
+ radix = round(radix);
+ }
+
+ if (radix < 2 || radix > 36) {
+ throw {
+ code: 'D3100',
+ stack: (new Error()).stack,
+ value: radix
+ };
+
+ }
+
+ var result = value.toString(radix);
+
+ return result;
+ }
+
+ /**
+ * Cast argument to number
+ * @param {Object} arg - Argument
+ * @returns {Number} numeric value of argument
+ */
+ function number(arg) {
+ var result;
+
+ // undefined inputs always return undefined
+ if (typeof arg === 'undefined') {
+ return undefined;
+ }
+
+ if (typeof arg === 'number') {
+ // already a number
+ result = arg;
+ } else if (typeof arg === 'string' && /^-?[0-9]+(\.[0-9]+)?([Ee][-+]?[0-9]+)?$/.test(arg) && !isNaN(parseFloat(arg)) && isFinite(arg)) {
+ result = parseFloat(arg);
+ } else if (typeof arg === 'string' && /^(0[xX][0-9A-Fa-f]+)|(0[oO][0-7]+)|(0[bB][0-1]+)$/.test(arg)) {
+ result = Number(arg);
+ } else if (arg === true) {
+ // boolean true casts to 1
+ result = 1;
+ } else if (arg === false) {
+ // boolean false casts to 0
+ result = 0;
+ } else {
+ throw {
+ code: "D3030",
+ value: arg,
+ stack: (new Error()).stack,
+ index: 1
+ };
+ }
+ return result;
+ }
+
+ /**
+ * Absolute value of a number
+ * @param {Number} arg - Argument
+ * @returns {Number} absolute value of argument
+ */
+ function abs(arg) {
+ var result;
+
+ // undefined inputs always return undefined
+ if (typeof arg === 'undefined') {
+ return undefined;
+ }
+
+ result = Math.abs(arg);
+ return result;
+ }
+
+ /**
+ * Rounds a number down to integer
+ * @param {Number} arg - Argument
+ * @returns {Number} rounded integer
+ */
+ function floor(arg) {
+ var result;
+
+ // undefined inputs always return undefined
+ if (typeof arg === 'undefined') {
+ return undefined;
+ }
+
+ result = Math.floor(arg);
+ return result;
+ }
+
+ /**
+ * Rounds a number up to integer
+ * @param {Number} arg - Argument
+ * @returns {Number} rounded integer
+ */
+ function ceil(arg) {
+ var result;
+
+ // undefined inputs always return undefined
+ if (typeof arg === 'undefined') {
+ return undefined;
+ }
+
+ result = Math.ceil(arg);
+ return result;
+ }
+
+ /**
+ * Round to half even
+ * @param {Number} arg - Argument
+ * @param {Number} [precision] - number of decimal places
+ * @returns {Number} rounded integer
+ */
+ function round(arg, precision) {
+ var result;
+
+ // undefined inputs always return undefined
+ if (typeof arg === 'undefined') {
+ return undefined;
+ }
+
+ if (precision) {
+ // shift the decimal place - this needs to be done in a string since multiplying
+ // by a power of ten can introduce floating point precision errors which mess up
+ // this rounding algorithm - See 'Decimal rounding' in
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round
+ // Shift
+ var value = arg.toString().split('e');
+ arg = +(value[0] + 'e' + (value[1] ? (+value[1] + precision) : precision));
+
+ }
+
+ // round up to nearest int
+ result = Math.round(arg);
+ var diff = result - arg;
+ if (Math.abs(diff) === 0.5 && Math.abs(result % 2) === 1) {
+ // rounded the wrong way - adjust to nearest even number
+ result = result - 1;
+ }
+ if (precision) {
+ // Shift back
+ value = result.toString().split('e');
+ /* istanbul ignore next */
+ result = +(value[0] + 'e' + (value[1] ? (+value[1] - precision) : -precision));
+ }
+ if (Object.is(result, -0)) { // ESLint rule 'no-compare-neg-zero' suggests this way
+ // JSON doesn't do -0
+ result = 0;
+ }
+ return result;
+ }
+
+ /**
+ * Square root of number
+ * @param {Number} arg - Argument
+ * @returns {Number} square root
+ */
+ function sqrt(arg) {
+ var result;
+
+ // undefined inputs always return undefined
+ if (typeof arg === 'undefined') {
+ return undefined;
+ }
+
+ if (arg < 0) {
+ throw {
+ stack: (new Error()).stack,
+ code: "D3060",
+ index: 1,
+ value: arg
+ };
+ }
+
+ result = Math.sqrt(arg);
+
+ return result;
+ }
+
+ /**
+ * Raises number to the power of the second number
+ * @param {Number} arg - the base
+ * @param {Number} exp - the exponent
+ * @returns {Number} rounded integer
+ */
+ function power(arg, exp) {
+ var result;
+
+ // undefined inputs always return undefined
+ if (typeof arg === 'undefined') {
+ return undefined;
+ }
+
+ result = Math.pow(arg, exp);
+
+ if (!isFinite(result)) {
+ throw {
+ stack: (new Error()).stack,
+ code: "D3061",
+ index: 1,
+ value: arg,
+ exp: exp
+ };
+ }
+
+ return result;
+ }
+
+ /**
+ * Returns a random number 0 <= n < 1
+ * @returns {number} random number
+ */
+ function random() {
+ return Math.random();
+ }
+
+ /**
+ * Evaluate an input and return a boolean
+ * @param {*} arg - Arguments
+ * @returns {boolean} Boolean
+ */
+ function boolean(arg) {
+ // cast arg to its effective boolean value
+ // boolean: unchanged
+ // string: zero-length -> false; otherwise -> true
+ // number: 0 -> false; otherwise -> true
+ // null -> false
+ // array: empty -> false; length > 1 -> true
+ // object: empty -> false; non-empty -> true
+ // function -> false
+
+ // undefined inputs always return undefined
+ if (typeof arg === 'undefined') {
+ return undefined;
+ }
+
+ var result = false;
+ if (Array.isArray(arg)) {
+ if (arg.length === 1) {
+ result = boolean(arg[0]);
+ } else if (arg.length > 1) {
+ var trues = arg.filter(function (val) {
+ return boolean(val);
+ });
+ result = trues.length > 0;
+ }
+ } else if (typeof arg === 'string') {
+ if (arg.length > 0) {
+ result = true;
+ }
+ } else if (isNumeric(arg)) {
+ if (arg !== 0) {
+ result = true;
+ }
+ } else if (arg !== null && typeof arg === 'object') {
+ if (Object.keys(arg).length > 0) {
+ result = true;
+ }
+ } else if (typeof arg === 'boolean' && arg === true) {
+ result = true;
+ }
+ return result;
+ }
+
+ /**
+ * returns the Boolean NOT of the arg
+ * @param {*} arg - argument
+ * @returns {boolean} - NOT arg
+ */
+ function not(arg) {
+ // undefined inputs always return undefined
+ if (typeof arg === 'undefined') {
+ return undefined;
+ }
+
+ return !boolean(arg);
+ }
+
+ /**
+ * Helper function to build the arguments to be supplied to the function arg of the
+ * HOFs map, filter, each, sift and single
+ * @param {function} func - the function to be invoked
+ * @param {*} arg1 - the first (required) arg - the value
+ * @param {*} arg2 - the second (optional) arg - the position (index or key)
+ * @param {*} arg3 - the third (optional) arg - the whole structure (array or object)
+ * @returns {*[]} the argument list
+ */
+ function hofFuncArgs(func, arg1, arg2, arg3) {
+ var func_args = [arg1]; // the first arg (the value) is required
+ // the other two are optional - only supply it if the function can take it
+ var length = getFunctionArity(func);
+ if (length >= 2) {
+ func_args.push(arg2);
+ }
+ if (length >= 3) {
+ func_args.push(arg3);
+ }
+ return func_args;
+ }
+
+ /**
+ * Create a map from an array of arguments
+ * @param {Array} [arr] - array to map over
+ * @param {Function} func - function to apply
+ * @returns {Array} Map array
+ */
+ async function map(arr, func) {
+ // undefined inputs always return undefined
+ if (typeof arr === 'undefined') {
+ return undefined;
+ }
+
+ var result = createSequence();
+ // do the map - iterate over the arrays, and invoke func
+ for (var i = 0; i < arr.length; i++) {
+ var func_args = hofFuncArgs(func, arr[i], i, arr);
+ // invoke func
+ var res = await func.apply(this, func_args);
+ if (typeof res !== 'undefined') {
+ result.push(res);
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Create a map from an array of arguments
+ * @param {Array} [arr] - array to filter
+ * @param {Function} func - predicate function
+ * @returns {Array} Map array
+ */
+ async function filter(arr, func) {
+ // undefined inputs always return undefined
+ if (typeof arr === 'undefined') {
+ return undefined;
+ }
+
+ var result = createSequence();
+
+ for (var i = 0; i < arr.length; i++) {
+ var entry = arr[i];
+ var func_args = hofFuncArgs(func, entry, i, arr);
+ // invoke func
+ var res = await func.apply(this, func_args);
+ if (boolean(res)) {
+ result.push(entry);
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Given an array, find the single element matching a specified condition
+ * Throws an exception if the number of matching elements is not exactly one
+ * @param {Array} [arr] - array to filter
+ * @param {Function} [func] - predicate function
+ * @returns {*} Matching element
+ */
+ async function single(arr, func) {
+ // undefined inputs always return undefined
+ if (typeof arr === 'undefined') {
+ return undefined;
+ }
+
+ var hasFoundMatch = false;
+ var result;
+
+ for (var i = 0; i < arr.length; i++) {
+ var entry = arr[i];
+ var positiveResult = true;
+ if (typeof func !== 'undefined') {
+ var func_args = hofFuncArgs(func, entry, i, arr);
+ // invoke func
+ var res = await func.apply(this, func_args);
+ positiveResult = boolean(res);
+ }
+ if (positiveResult) {
+ if(!hasFoundMatch) {
+ result = entry;
+ hasFoundMatch = true;
+ } else {
+ throw {
+ stack: (new Error()).stack,
+ code: "D3138",
+ index: i
+ };
+ }
+ }
+ }
+
+ if(!hasFoundMatch) {
+ throw {
+ stack: (new Error()).stack,
+ code: "D3139"
+ };
+ }
+
+ return result;
+ }
+
+ /**
+ * Convolves (zips) each value from a set of arrays
+ * @param {Array} [args] - arrays to zip
+ * @returns {Array} Zipped array
+ */
+ function zip() {
+ // this can take a variable number of arguments
+ var result = [];
+ var args = Array.prototype.slice.call(arguments);
+ // length of the shortest array
+ var length = Math.min.apply(Math, args.map(function (arg) {
+ if (Array.isArray(arg)) {
+ return arg.length;
+ }
+ return 0;
+ }));
+ for (var i = 0; i < length; i++) {
+ var tuple = args.map((arg) => {
+ return arg[i];
+ });
+ result.push(tuple);
+ }
+ return result;
+ }
+
+ /**
+ * Fold left function
+ * @param {Array} sequence - Sequence
+ * @param {Function} func - Function
+ * @param {Object} init - Initial value
+ * @returns {*} Result
+ */
+ async function foldLeft(sequence, func, init) {
+ // undefined inputs always return undefined
+ if (typeof sequence === 'undefined') {
+ return undefined;
+ }
+
+ var result;
+
+ var arity = getFunctionArity(func);
+ if (arity < 2) {
+ throw {
+ stack: (new Error()).stack,
+ code: "D3050",
+ index: 1
+ };
+ }
+
+ var index;
+ if (typeof init === 'undefined' && sequence.length > 0) {
+ result = sequence[0];
+ index = 1;
+ } else {
+ result = init;
+ index = 0;
+ }
+
+ while (index < sequence.length) {
+ var args = [result, sequence[index]];
+ if (arity >= 3) {
+ args.push(index);
+ }
+ if (arity >= 4) {
+ args.push(sequence);
+ }
+ result = await func.apply(this, args);
+ index++;
+ }
+
+ return result;
+ }
+
+ /**
+ * Return keys for an object
+ * @param {Object} arg - Object
+ * @returns {Array} Array of keys
+ */
+ function keys(arg) {
+ var result = createSequence();
+
+ if (Array.isArray(arg)) {
+ // merge the keys of all of the items in the array
+ var merge = {};
+ arg.forEach(function (item) {
+ var allkeys = keys(item);
+ allkeys.forEach(function (key) {
+ merge[key] = true;
+ });
+ });
+ result = keys(merge);
+ } else if (arg !== null && typeof arg === 'object' && !(isLambda(arg))) {
+ Object.keys(arg).forEach(key => result.push(key));
+ }
+ return result;
+ }
+
+ /**
+ * Return value from an object for a given key
+ * @param {Object} input - Object/Array
+ * @param {String} key - Key in object
+ * @returns {*} Value of key in object
+ */
+ function lookup(input, key) {
+ // lookup the 'name' item in the input
+ var result;
+ if (Array.isArray(input)) {
+ result = createSequence();
+ for(var ii = 0; ii < input.length; ii++) {
+ var res = lookup(input[ii], key);
+ if (typeof res !== 'undefined') {
+ if (Array.isArray(res)) {
+ res.forEach(val => result.push(val));
+ } else {
+ result.push(res);
+ }
+ }
+ }
+ } else if (input !== null && typeof input === 'object') {
+ result = input[key];
+ }
+ return result;
+ }
+
+ /**
+ * Append second argument to first
+ * @param {Array|Object} arg1 - First argument
+ * @param {Array|Object} arg2 - Second argument
+ * @returns {*} Appended arguments
+ */
+ function append(arg1, arg2) {
+ // disregard undefined args
+ if (typeof arg1 === 'undefined') {
+ return arg2;
+ }
+ if (typeof arg2 === 'undefined') {
+ return arg1;
+ }
+ // if either argument is not an array, make it so
+ if (!Array.isArray(arg1)) {
+ arg1 = createSequence(arg1);
+ }
+ if (!Array.isArray(arg2)) {
+ arg2 = [arg2];
+ }
+ return arg1.concat(arg2);
+ }
+
+ /**
+ * Determines if the argument is undefined
+ * @param {*} arg - argument
+ * @returns {boolean} False if argument undefined, otherwise true
+ */
+ function exists(arg) {
+ if (typeof arg === 'undefined') {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * Splits an object into an array of object with one property each
+ * @param {*} arg - the object to split
+ * @returns {*} - the array
+ */
+ function spread(arg) {
+ var result = createSequence();
+
+ if (Array.isArray(arg)) {
+ // spread all of the items in the array
+ arg.forEach(function (item) {
+ result = append(result, spread(item));
+ });
+ } else if (arg !== null && typeof arg === 'object' && !isLambda(arg)) {
+ for (var key in arg) {
+ var obj = {};
+ obj[key] = arg[key];
+ result.push(obj);
+ }
+ } else {
+ result = arg;
+ }
+ return result;
+ }
+
+ /**
+ * Merges an array of objects into a single object. Duplicate properties are
+ * overridden by entries later in the array
+ * @param {*} arg - the objects to merge
+ * @returns {*} - the object
+ */
+ function merge(arg) {
+ // undefined inputs always return undefined
+ if (typeof arg === 'undefined') {
+ return undefined;
+ }
+
+ var result = {};
+
+ arg.forEach(function (obj) {
+ for (var prop in obj) {
+ result[prop] = obj[prop];
+ }
+ });
+ return result;
+ }
+
+ /**
+ * Reverses the order of items in an array
+ * @param {Array} arr - the array to reverse
+ * @returns {Array} - the reversed array
+ */
+ function reverse(arr) {
+ // undefined inputs always return undefined
+ if (typeof arr === 'undefined') {
+ return undefined;
+ }
+
+ if (arr.length <= 1) {
+ return arr;
+ }
+
+ var length = arr.length;
+ var result = new Array(length);
+ for (var i = 0; i < length; i++) {
+ result[length - i - 1] = arr[i];
+ }
+
+ return result;
+ }
+
+ /**
+ *
+ * @param {*} obj - the input object to iterate over
+ * @param {*} func - the function to apply to each key/value pair
+ * @returns {Array} - the resultant array
+ */
+ async function each(obj, func) {
+ var result = createSequence();
+
+ for (var key in obj) {
+ var func_args = hofFuncArgs(func, obj[key], key, obj);
+ // invoke func
+ var val = await func.apply(this, func_args);
+ if(typeof val !== 'undefined') {
+ result.push(val);
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ *
+ * @param {string} [message] - the message to attach to the error
+ * @throws custom error with code 'D3137'
+ */
+ function error(message) {
+ throw {
+ code: "D3137",
+ stack: (new Error()).stack,
+ message: message || "$error() function evaluated"
+ };
+ }
+
+ /**
+ *
+ * @param {boolean} condition - the condition to evaluate
+ * @param {string} [message] - the message to attach to the error
+ * @throws custom error with code 'D3137'
+ * @returns {undefined}
+ */
+ function assert(condition, message) {
+ if(!condition) {
+ throw {
+ code: "D3141",
+ stack: (new Error()).stack,
+ message: message || "$assert() statement failed"
+ };
+ }
+
+ return undefined;
+ }
+
+ /**
+ *
+ * @param {*} [value] - the input to which the type will be checked
+ * @returns {string} - the type of the input
+ */
+ function type(value) {
+ if (value === undefined) {
+ return undefined;
+ }
+
+ if (value === null) {
+ return 'null';
+ }
+
+ if (isNumeric(value)) {
+ return 'number';
+ }
+
+ if (typeof value === 'string') {
+ return 'string';
+ }
+
+ if (typeof value === 'boolean') {
+ return 'boolean';
+ }
+
+ if(Array.isArray(value)) {
+ return 'array';
+ }
+
+ if(isFunction(value)) {
+ return 'function';
+ }
+
+ return 'object';
+ }
+
+ /**
+ * Implements the merge sort (stable) with optional comparator function
+ *
+ * @param {Array} arr - the array to sort
+ * @param {*} comparator - comparator function
+ * @returns {Array} - sorted array
+ */
+ async function sort(arr, comparator) {
+ // undefined inputs always return undefined
+ if (typeof arr === 'undefined') {
+ return undefined;
+ }
+
+ if (arr.length <= 1) {
+ return arr;
+ }
+
+ var comp;
+ if (typeof comparator === 'undefined') {
+ // inject a default comparator - only works for numeric or string arrays
+ if (!isArrayOfNumbers(arr) && !isArrayOfStrings(arr)) {
+ throw {
+ stack: (new Error()).stack,
+ code: "D3070",
+ index: 1
+ };
+ }
+
+ comp = async function (a, b) {
+ return a > b;
+ };
+ } else {
+ // for internal usage of functionSort (i.e. order-by syntax)
+ comp = comparator;
+ }
+
+ var merge = async function (l, r) {
+ var merge_iter = async function (result, left, right) {
+ if (left.length === 0) {
+ Array.prototype.push.apply(result, right);
+ } else if (right.length === 0) {
+ Array.prototype.push.apply(result, left);
+ } else if (await comp(left[0], right[0])) { // invoke the comparator function
+ // if it returns true - swap left and right
+ result.push(right[0]);
+ await merge_iter(result, left, right.slice(1));
+ } else {
+ // otherwise keep the same order
+ result.push(left[0]);
+ await merge_iter(result, left.slice(1), right);
+ }
+ };
+ var merged = [];
+ await merge_iter(merged, l, r);
+ return merged;
+ };
+
+ var msort = async function (array) {
+ if (!Array.isArray(array) || array.length <= 1) {
+ return array;
+ } else {
+ var middle = Math.floor(array.length / 2);
+ var left = array.slice(0, middle);
+ var right = array.slice(middle);
+ left = await msort(left);
+ right = await msort(right);
+ return await merge(left, right);
+ }
+ };
+
+ var result = await msort(arr);
+
+ return result;
+ }
+
+ /**
+ * Randomly shuffles the contents of an array
+ * @param {Array} arr - the input array
+ * @returns {Array} the shuffled array
+ */
+ function shuffle(arr) {
+ // undefined inputs always return undefined
+ if (typeof arr === 'undefined') {
+ return undefined;
+ }
+
+ if (arr.length <= 1) {
+ return arr;
+ }
+
+ // shuffle using the 'inside-out' variant of the Fisher-Yates algorithm
+ var result = new Array(arr.length);
+ for (var i = 0; i < arr.length; i++) {
+ var j = Math.floor(Math.random() * (i + 1)); // random integer such that 0 ≤ j ≤ i
+ if (i !== j) {
+ result[i] = result[j];
+ }
+ result[j] = arr[i];
+ }
+
+ return result;
+ }
+
+ /**
+ * Returns the values that appear in a sequence, with duplicates eliminated.
+ * @param {Array} arr - An array or sequence of values
+ * @returns {Array} - sequence of distinct values
+ */
+ function distinct(arr) {
+ // undefined inputs always return undefined
+ if (typeof arr === 'undefined') {
+ return undefined;
+ }
+
+ if(!Array.isArray(arr) || arr.length <= 1) {
+ return arr;
+ }
+
+ var results = isSequence(arr) ? createSequence() : [];
+
+ for(var ii = 0; ii < arr.length; ii++) {
+ var value = arr[ii];
+ // is this value already in the result sequence?
+ var includes = false;
+ for(var jj = 0; jj < results.length; jj++) {
+ if (deepEquals(value, results[jj])) {
+ includes = true;
+ break;
+ }
+ }
+ if(!includes) {
+ results.push(value);
+ }
+ }
+ return results;
+ }
+
+ /**
+ * Applies a predicate function to each key/value pair in an object, and returns an object containing
+ * only the key/value pairs that passed the predicate
+ *
+ * @param {object} arg - the object to be sifted
+ * @param {object} func - the predicate function (lambda or native)
+ * @returns {object} - sifted object
+ */
+ async function sift(arg, func) {
+ var result = {};
+
+ for (var item in arg) {
+ var entry = arg[item];
+ var func_args = hofFuncArgs(func, entry, item, arg);
+ // invoke func
+ var res = await func.apply(this, func_args);
+ if (boolean(res)) {
+ result[item] = entry;
+ }
+ }
+
+ // empty objects should be changed to undefined
+ if (Object.keys(result).length === 0) {
+ result = undefined;
+ }
+
+ return result;
+ }
+
+ return {
+ sum, count, max, min, average,
+ string, substring, substringBefore, substringAfter, lowercase, uppercase, length, trim, pad,
+ match, contains, replace, split, join,
+ formatNumber, formatBase, number, floor, ceil, round, abs, sqrt, power, random,
+ boolean, not,
+ map, zip, filter, single, foldLeft, sift,
+ keys, lookup, append, exists, spread, merge, reverse, each, error, assert, type, sort, shuffle, distinct,
+ base64encode, base64decode, encodeUrlComponent, encodeUrl, decodeUrlComponent, decodeUrl
+ };
+})();
+
+module.exports = functions;
+
+}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"./utils":6}],3:[function(require,module,exports){
+/**
+ * © Copyright IBM Corp. 2016, 2017 All Rights Reserved
+ * Project name: JSONata
+ * This project is licensed under the MIT License, see LICENSE
+ */
+
+/**
+ * @module JSONata
+ * @description JSON query and transformation language
+ */
+
+var datetime = require('./datetime');
+var fn = require('./functions');
+var utils = require('./utils');
+var parser = require('./parser');
+var parseSignature = require('./signature');
+
+/**
+ * jsonata
+ * @function
+ * @param {Object} expr - JSONata expression
+ * @returns {{evaluate: evaluate, assign: assign}} Evaluated expression
+ */
+var jsonata = (function() {
+ 'use strict';
+
+ var isNumeric = utils.isNumeric;
+ var isArrayOfStrings = utils.isArrayOfStrings;
+ var isArrayOfNumbers = utils.isArrayOfNumbers;
+ var createSequence = utils.createSequence;
+ var isSequence = utils.isSequence;
+ var isFunction = utils.isFunction;
+ var isLambda = utils.isLambda;
+ var isIterable = utils.isIterable;
+ var isPromise = utils.isPromise;
+ var getFunctionArity = utils.getFunctionArity;
+ var isDeepEqual = utils.isDeepEqual;
+
+ // Start of Evaluator code
+
+ var staticFrame = createFrame(null);
+
+ /**
+ * Evaluate expression against input data
+ * @param {Object} expr - JSONata expression
+ * @param {Object} input - Input data to evaluate against
+ * @param {Object} environment - Environment
+ * @returns {*} Evaluated input data
+ */
+ async function evaluate(expr, input, environment) {
+ var result;
+
+ var entryCallback = environment.lookup('__evaluate_entry');
+ if(entryCallback) {
+ await entryCallback(expr, input, environment);
+ }
+
+ switch (expr.type) {
+ case 'path':
+ result = await evaluatePath(expr, input, environment);
+ break;
+ case 'binary':
+ result = await evaluateBinary(expr, input, environment);
+ break;
+ case 'unary':
+ result = await evaluateUnary(expr, input, environment);
+ break;
+ case 'name':
+ result = evaluateName(expr, input, environment);
+ break;
+ case 'string':
+ case 'number':
+ case 'value':
+ result = evaluateLiteral(expr, input, environment);
+ break;
+ case 'wildcard':
+ result = evaluateWildcard(expr, input, environment);
+ break;
+ case 'descendant':
+ result = evaluateDescendants(expr, input, environment);
+ break;
+ case 'parent':
+ result = environment.lookup(expr.slot.label);
+ break;
+ case 'condition':
+ result = await evaluateCondition(expr, input, environment);
+ break;
+ case 'block':
+ result = await evaluateBlock(expr, input, environment);
+ break;
+ case 'bind':
+ result = await evaluateBindExpression(expr, input, environment);
+ break;
+ case 'regex':
+ result = evaluateRegex(expr, input, environment);
+ break;
+ case 'function':
+ result = await evaluateFunction(expr, input, environment);
+ break;
+ case 'variable':
+ result = evaluateVariable(expr, input, environment);
+ break;
+ case 'lambda':
+ result = evaluateLambda(expr, input, environment);
+ break;
+ case 'partial':
+ result = await evaluatePartialApplication(expr, input, environment);
+ break;
+ case 'apply':
+ result = await evaluateApplyExpression(expr, input, environment);
+ break;
+ case 'transform':
+ result = evaluateTransformExpression(expr, input, environment);
+ break;
+ }
+
+ if (Object.prototype.hasOwnProperty.call(expr, 'predicate')) {
+ for(var ii = 0; ii < expr.predicate.length; ii++) {
+ result = await evaluateFilter(expr.predicate[ii].expr, result, environment);
+ }
+ }
+
+ if (expr.type !== 'path' && Object.prototype.hasOwnProperty.call(expr, 'group')) {
+ result = await evaluateGroupExpression(expr.group, result, environment);
+ }
+
+ var exitCallback = environment.lookup('__evaluate_exit');
+ if(exitCallback) {
+ await exitCallback(expr, input, environment, result);
+ }
+
+ if(result && isSequence(result) && !result.tupleStream) {
+ if(expr.keepArray) {
+ result.keepSingleton = true;
+ }
+ if(result.length === 0) {
+ result = undefined;
+ } else if(result.length === 1) {
+ result = result.keepSingleton ? result : result[0];
+ }
+
+ }
+
+ return result;
+ }
+
+ /**
+ * Evaluate path expression against input data
+ * @param {Object} expr - JSONata expression
+ * @param {Object} input - Input data to evaluate against
+ * @param {Object} environment - Environment
+ * @returns {*} Evaluated input data
+ */
+ async function evaluatePath(expr, input, environment) {
+ var inputSequence;
+ // expr is an array of steps
+ // if the first step is a variable reference ($...), including root reference ($$),
+ // then the path is absolute rather than relative
+ if (Array.isArray(input) && expr.steps[0].type !== 'variable') {
+ inputSequence = input;
+ } else {
+ // if input is not an array, make it so
+ inputSequence = createSequence(input);
+ }
+
+ var resultSequence;
+ var isTupleStream = false;
+ var tupleBindings = undefined;
+
+ // evaluate each step in turn
+ for(var ii = 0; ii < expr.steps.length; ii++) {
+ var step = expr.steps[ii];
+
+ if(step.tuple) {
+ isTupleStream = true;
+ }
+
+ // if the first step is an explicit array constructor, then just evaluate that (i.e. don't iterate over a context array)
+ if(ii === 0 && step.consarray) {
+ resultSequence = await evaluate(step, inputSequence, environment);
+ } else {
+ if(isTupleStream) {
+ tupleBindings = await evaluateTupleStep(step, inputSequence, tupleBindings, environment);
+ } else {
+ resultSequence = await evaluateStep(step, inputSequence, environment, ii === expr.steps.length - 1);
+ }
+ }
+
+ if (!isTupleStream && (typeof resultSequence === 'undefined' || resultSequence.length === 0)) {
+ break;
+ }
+
+ if(typeof step.focus === 'undefined') {
+ inputSequence = resultSequence;
+ }
+
+ }
+
+ if(isTupleStream) {
+ if(expr.tuple) {
+ // tuple stream is carrying ancestry information - keep this
+ resultSequence = tupleBindings;
+ } else {
+ resultSequence = createSequence();
+ for (ii = 0; ii < tupleBindings.length; ii++) {
+ resultSequence.push(tupleBindings[ii]['@']);
+ }
+ }
+ }
+
+ if(expr.keepSingletonArray) {
+ // if the array is explicitly constructed in the expression and marked to promote singleton sequences to array
+ if(Array.isArray(resultSequence) && resultSequence.cons && !resultSequence.sequence) {
+ resultSequence = createSequence(resultSequence);
+ }
+ resultSequence.keepSingleton = true;
+ }
+
+ if (expr.hasOwnProperty('group')) {
+ resultSequence = await evaluateGroupExpression(expr.group, isTupleStream ? tupleBindings : resultSequence, environment)
+ }
+
+ return resultSequence;
+ }
+
+ function createFrameFromTuple(environment, tuple) {
+ var frame = createFrame(environment);
+ for(const prop in tuple) {
+ frame.bind(prop, tuple[prop]);
+ }
+ return frame;
+ }
+
+ /**
+ * Evaluate a step within a path
+ * @param {Object} expr - JSONata expression
+ * @param {Object} input - Input data to evaluate against
+ * @param {Object} environment - Environment
+ * @param {boolean} lastStep - flag the last step in a path
+ * @returns {*} Evaluated input data
+ */
+ async function evaluateStep(expr, input, environment, lastStep) {
+ var result;
+ if(expr.type === 'sort') {
+ result = await evaluateSortExpression(expr, input, environment);
+ if(expr.stages) {
+ result = await evaluateStages(expr.stages, result, environment);
+ }
+ return result;
+ }
+
+ result = createSequence();
+
+ for(var ii = 0; ii < input.length; ii++) {
+ var res = await evaluate(expr, input[ii], environment);
+ if(expr.stages) {
+ for(var ss = 0; ss < expr.stages.length; ss++) {
+ res = await evaluateFilter(expr.stages[ss].expr, res, environment);
+ }
+ }
+ if(typeof res !== 'undefined') {
+ result.push(res);
+ }
+ }
+
+ var resultSequence = createSequence();
+ if(lastStep && result.length === 1 && Array.isArray(result[0]) && !isSequence(result[0])) {
+ resultSequence = result[0];
+ } else {
+ // flatten the sequence
+ result.forEach(function(res) {
+ if (!Array.isArray(res) || res.cons) {
+ // it's not an array - just push into the result sequence
+ resultSequence.push(res);
+ } else {
+ // res is a sequence - flatten it into the parent sequence
+ res.forEach(val => resultSequence.push(val));
+ }
+ });
+ }
+
+ return resultSequence;
+ }
+
+ async function evaluateStages(stages, input, environment) {
+ var result = input;
+ for(var ss = 0; ss < stages.length; ss++) {
+ var stage = stages[ss];
+ switch(stage.type) {
+ case 'filter':
+ result = await evaluateFilter(stage.expr, result, environment);
+ break;
+ case 'index':
+ for(var ee = 0; ee < result.length; ee++) {
+ var tuple = result[ee];
+ tuple[stage.value] = ee;
+ }
+ break;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Evaluate a step within a path
+ * @param {Object} expr - JSONata expression
+ * @param {Object} input - Input data to evaluate against
+ * @param {Object} tupleBindings - The tuple stream
+ * @param {Object} environment - Environment
+ * @returns {*} Evaluated input data
+ */
+ async function evaluateTupleStep(expr, input, tupleBindings, environment) {
+ var result;
+ if(expr.type === 'sort') {
+ if(tupleBindings) {
+ result = await evaluateSortExpression(expr, tupleBindings, environment);
+ } else {
+ var sorted = await evaluateSortExpression(expr, input, environment);
+ result = createSequence();
+ result.tupleStream = true;
+ for(var ss = 0; ss < sorted.length; ss++) {
+ var tuple = {'@': sorted[ss]};
+ tuple[expr.index] = ss;
+ result.push(tuple);
+ }
+ }
+ if(expr.stages) {
+ result = await evaluateStages(expr.stages, result, environment);
+ }
+ return result;
+ }
+
+ result = createSequence();
+ result.tupleStream = true;
+ var stepEnv = environment;
+ if(tupleBindings === undefined) {
+ tupleBindings = input.map(item => { return {'@': item} });
+ }
+
+ for(var ee = 0; ee < tupleBindings.length; ee++) {
+ stepEnv = createFrameFromTuple(environment, tupleBindings[ee]);
+ var res = await evaluate(expr, tupleBindings[ee]['@'], stepEnv);
+ // res is the binding sequence for the output tuple stream
+ if(typeof res !== 'undefined') {
+ if (!Array.isArray(res)) {
+ res = [res];
+ }
+ for (var bb = 0; bb < res.length; bb++) {
+ tuple = {};
+ Object.assign(tuple, tupleBindings[ee]);
+ if(res.tupleStream) {
+ Object.assign(tuple, res[bb]);
+ } else {
+ if (expr.focus) {
+ tuple[expr.focus] = res[bb];
+ tuple['@'] = tupleBindings[ee]['@'];
+ } else {
+ tuple['@'] = res[bb];
+ }
+ if (expr.index) {
+ tuple[expr.index] = bb;
+ }
+ if (expr.ancestor) {
+ tuple[expr.ancestor.label] = tupleBindings[ee]['@'];
+ }
+ }
+ result.push(tuple);
+ }
+ }
+ }
+
+ if(expr.stages) {
+ result = await evaluateStages(expr.stages, result, environment);
+ }
+
+ return result;
+ }
+
+ /**
+ * Apply filter predicate to input data
+ * @param {Object} predicate - filter expression
+ * @param {Object} input - Input data to apply predicates against
+ * @param {Object} environment - Environment
+ * @returns {*} Result after applying predicates
+ */
+ async function evaluateFilter(predicate, input, environment) {
+ var results = createSequence();
+ if( input && input.tupleStream) {
+ results.tupleStream = true;
+ }
+ if (!Array.isArray(input)) {
+ input = createSequence(input);
+ }
+ if (predicate.type === 'number') {
+ var index = Math.floor(predicate.value); // round it down
+ if (index < 0) {
+ // count in from end of array
+ index = input.length + index;
+ }
+ var item = input[index];
+ if(typeof item !== 'undefined') {
+ if(Array.isArray(item)) {
+ results = item;
+ } else {
+ results.push(item);
+ }
+ }
+ } else {
+ for (index = 0; index < input.length; index++) {
+ var item = input[index];
+ var context = item;
+ var env = environment;
+ if(input.tupleStream) {
+ context = item['@'];
+ env = createFrameFromTuple(environment, item);
+ }
+ var res = await evaluate(predicate, context, env);
+ if (isNumeric(res)) {
+ res = [res];
+ }
+ if (isArrayOfNumbers(res)) {
+ res.forEach(function (ires) {
+ // round it down
+ var ii = Math.floor(ires);
+ if (ii < 0) {
+ // count in from end of array
+ ii = input.length + ii;
+ }
+ if (ii === index) {
+ results.push(item);
+ }
+ });
+ } else if (fn.boolean(res)) { // truthy
+ results.push(item);
+ }
+ }
+ }
+ return results;
+ }
+
+ /**
+ * Evaluate binary expression against input data
+ * @param {Object} expr - JSONata expression
+ * @param {Object} input - Input data to evaluate against
+ * @param {Object} environment - Environment
+ * @returns {*} Evaluated input data
+ */
+ async function evaluateBinary(expr, input, environment) {
+ var result;
+ var lhs = await evaluate(expr.lhs, input, environment);
+ var op = expr.value;
+
+ //defer evaluation of RHS to allow short-circuiting
+ var evalrhs = async () => await evaluate(expr.rhs, input, environment);
+ if (op === "and" || op === "or") {
+ try {
+ return await evaluateBooleanExpression(lhs, evalrhs, op);
+ } catch(err) {
+ err.position = expr.position;
+ err.token = op;
+ throw err;
+ }
+ }
+
+ var rhs = await evalrhs();
+ try {
+ switch (op) {
+ case '+':
+ case '-':
+ case '*':
+ case '/':
+ case '%':
+ result = evaluateNumericExpression(lhs, rhs, op);
+ break;
+ case '=':
+ case '!=':
+ result = evaluateEqualityExpression(lhs, rhs, op);
+ break;
+ case '<':
+ case '<=':
+ case '>':
+ case '>=':
+ result = evaluateComparisonExpression(lhs, rhs, op);
+ break;
+ case '&':
+ result = evaluateStringConcat(lhs, rhs);
+ break;
+ case '..':
+ result = evaluateRangeExpression(lhs, rhs);
+ break;
+ case 'in':
+ result = evaluateIncludesExpression(lhs, rhs);
+ break;
+ }
+ } catch(err) {
+ err.position = expr.position;
+ err.token = op;
+ throw err;
+ }
+ return result;
+ }
+
+ /**
+ * Evaluate unary expression against input data
+ * @param {Object} expr - JSONata expression
+ * @param {Object} input - Input data to evaluate against
+ * @param {Object} environment - Environment
+ * @returns {*} Evaluated input data
+ */
+ async function evaluateUnary(expr, input, environment) {
+ var result;
+
+ switch (expr.value) {
+ case '-':
+ result = await evaluate(expr.expression, input, environment);
+ if(typeof result === 'undefined') {
+ result = undefined;
+ } else if (isNumeric(result)) {
+ result = -result;
+ } else {
+ throw {
+ code: "D1002",
+ stack: (new Error()).stack,
+ position: expr.position,
+ token: expr.value,
+ value: result
+ };
+ }
+ break;
+ case '[':
+ // array constructor - evaluate each item
+ result = [];
+ let generators = await Promise.all(expr.expressions
+ .map(async (item, idx) => {
+ environment.isParallelCall = idx > 0
+ return [item, await evaluate(item, input, environment)]
+ }));
+ for (let generator of generators) {
+ var [item, value] = generator;
+ if (typeof value !== 'undefined') {
+ if(item.value === '[') {
+ result.push(value);
+ } else {
+ result = fn.append(result, value);
+ }
+ }
+ }
+ if(expr.consarray) {
+ Object.defineProperty(result, 'cons', {
+ enumerable: false,
+ configurable: false,
+ value: true
+ });
+ }
+ break;
+ case '{':
+ // object constructor - apply grouping
+ result = await evaluateGroupExpression(expr, input, environment);
+ break;
+
+ }
+ return result;
+ }
+
+ /**
+ * Evaluate name object against input data
+ * @param {Object} expr - JSONata expression
+ * @param {Object} input - Input data to evaluate against
+ * @param {Object} environment - Environment
+ * @returns {*} Evaluated input data
+ */
+ function evaluateName(expr, input, environment) {
+ // lookup the 'name' item in the input
+ return fn.lookup(input, expr.value);
+ }
+
+ /**
+ * Evaluate literal against input data
+ * @param {Object} expr - JSONata expression
+ * @returns {*} Evaluated input data
+ */
+ function evaluateLiteral(expr) {
+ return expr.value;
+ }
+
+ /**
+ * Evaluate wildcard against input data
+ * @param {Object} expr - JSONata expression
+ * @param {Object} input - Input data to evaluate against
+ * @returns {*} Evaluated input data
+ */
+ function evaluateWildcard(expr, input) {
+ var results = createSequence();
+ if (Array.isArray(input) && input.outerWrapper && input.length > 0) {
+ input = input[0];
+ }
+ if (input !== null && typeof input === 'object') {
+ Object.keys(input).forEach(function (key) {
+ var value = input[key];
+ if(Array.isArray(value)) {
+ value = flatten(value);
+ results = fn.append(results, value);
+ } else {
+ results.push(value);
+ }
+ });
+ }
+
+ // result = normalizeSequence(results);
+ return results;
+ }
+
+ /**
+ * Returns a flattened array
+ * @param {Array} arg - the array to be flatten
+ * @param {Array} flattened - carries the flattened array - if not defined, will initialize to []
+ * @returns {Array} - the flattened array
+ */
+ function flatten(arg, flattened) {
+ if(typeof flattened === 'undefined') {
+ flattened = [];
+ }
+ if(Array.isArray(arg)) {
+ arg.forEach(function (item) {
+ flatten(item, flattened);
+ });
+ } else {
+ flattened.push(arg);
+ }
+ return flattened;
+ }
+
+ /**
+ * Evaluate descendants against input data
+ * @param {Object} expr - JSONata expression
+ * @param {Object} input - Input data to evaluate against
+ * @returns {*} Evaluated input data
+ */
+ function evaluateDescendants(expr, input) {
+ var result;
+ var resultSequence = createSequence();
+ if (typeof input !== 'undefined') {
+ // traverse all descendants of this object/array
+ recurseDescendants(input, resultSequence);
+ if (resultSequence.length === 1) {
+ result = resultSequence[0];
+ } else {
+ result = resultSequence;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Recurse through descendants
+ * @param {Object} input - Input data
+ * @param {Object} results - Results
+ */
+ function recurseDescendants(input, results) {
+ // this is the equivalent of //* in XPath
+ if (!Array.isArray(input)) {
+ results.push(input);
+ }
+ if (Array.isArray(input)) {
+ input.forEach(function (member) {
+ recurseDescendants(member, results);
+ });
+ } else if (input !== null && typeof input === 'object') {
+ Object.keys(input).forEach(function (key) {
+ recurseDescendants(input[key], results);
+ });
+ }
+ }
+
+ /**
+ * Evaluate numeric expression against input data
+ * @param {Object} lhs - LHS value
+ * @param {Object} rhs - RHS value
+ * @param {Object} op - opcode
+ * @returns {*} Result
+ */
+ function evaluateNumericExpression(lhs, rhs, op) {
+ var result;
+
+ if (typeof lhs !== 'undefined' && !isNumeric(lhs)) {
+ throw {
+ code: "T2001",
+ stack: (new Error()).stack,
+ value: lhs
+ };
+ }
+ if (typeof rhs !== 'undefined' && !isNumeric(rhs)) {
+ throw {
+ code: "T2002",
+ stack: (new Error()).stack,
+ value: rhs
+ };
+ }
+
+ if (typeof lhs === 'undefined' || typeof rhs === 'undefined') {
+ // if either side is undefined, the result is undefined
+ return result;
+ }
+
+ switch (op) {
+ case '+':
+ result = lhs + rhs;
+ break;
+ case '-':
+ result = lhs - rhs;
+ break;
+ case '*':
+ result = lhs * rhs;
+ break;
+ case '/':
+ result = lhs / rhs;
+ break;
+ case '%':
+ result = lhs % rhs;
+ break;
+ }
+ return result;
+ }
+
+ /**
+ * Evaluate equality expression against input data
+ * @param {Object} lhs - LHS value
+ * @param {Object} rhs - RHS value
+ * @param {Object} op - opcode
+ * @returns {*} Result
+ */
+ function evaluateEqualityExpression(lhs, rhs, op) {
+ var result;
+
+ // type checks
+ var ltype = typeof lhs;
+ var rtype = typeof rhs;
+
+ if (ltype === 'undefined' || rtype === 'undefined') {
+ // if either side is undefined, the result is false
+ return false;
+ }
+
+ switch (op) {
+ case '=':
+ result = isDeepEqual(lhs, rhs);
+ break;
+ case '!=':
+ result = !isDeepEqual(lhs, rhs);
+ break;
+ }
+ return result;
+ }
+
+ /**
+ * Evaluate comparison expression against input data
+ * @param {Object} lhs - LHS value
+ * @param {Object} rhs - RHS value
+ * @param {Object} op - opcode
+ * @returns {*} Result
+ */
+ function evaluateComparisonExpression(lhs, rhs, op) {
+ var result;
+
+ // type checks
+ var ltype = typeof lhs;
+ var rtype = typeof rhs;
+
+ var lcomparable = (ltype === 'undefined' || ltype === 'string' || ltype === 'number');
+ var rcomparable = (rtype === 'undefined' || rtype === 'string' || rtype === 'number');
+
+ // if either aa or bb are not comparable (string or numeric) values, then throw an error
+ if (!lcomparable || !rcomparable) {
+ throw {
+ code: "T2010",
+ stack: (new Error()).stack,
+ value: !(ltype === 'string' || ltype === 'number') ? lhs : rhs
+ };
+ }
+
+ // if either side is undefined, the result is undefined
+ if (ltype === 'undefined' || rtype === 'undefined') {
+ return undefined;
+ }
+
+ //if aa and bb are not of the same type
+ if (ltype !== rtype) {
+ throw {
+ code: "T2009",
+ stack: (new Error()).stack,
+ value: lhs,
+ value2: rhs
+ };
+ }
+
+ switch (op) {
+ case '<':
+ result = lhs < rhs;
+ break;
+ case '<=':
+ result = lhs <= rhs;
+ break;
+ case '>':
+ result = lhs > rhs;
+ break;
+ case '>=':
+ result = lhs >= rhs;
+ break;
+ }
+ return result;
+ }
+
+ /**
+ * Inclusion operator - in
+ *
+ * @param {Object} lhs - LHS value
+ * @param {Object} rhs - RHS value
+ * @returns {boolean} - true if lhs is a member of rhs
+ */
+ function evaluateIncludesExpression(lhs, rhs) {
+ var result = false;
+
+ if (typeof lhs === 'undefined' || typeof rhs === 'undefined') {
+ // if either side is undefined, the result is false
+ return false;
+ }
+
+ if(!Array.isArray(rhs)) {
+ rhs = [rhs];
+ }
+
+ for(var i = 0; i < rhs.length; i++) {
+ if(rhs[i] === lhs) {
+ result = true;
+ break;
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Evaluate boolean expression against input data
+ * @param {Object} lhs - LHS value
+ * @param {Function} evalrhs - function to evaluate RHS value
+ * @param {Object} op - opcode
+ * @returns {*} Result
+ */
+ async function evaluateBooleanExpression(lhs, evalrhs, op) {
+ var result;
+
+ var lBool = boolize(lhs);
+
+ switch (op) {
+ case 'and':
+ result = lBool && boolize(await evalrhs());
+ break;
+ case 'or':
+ result = lBool || boolize(await evalrhs());
+ break;
+ }
+ return result;
+ }
+
+ function boolize(value) {
+ var booledValue = fn.boolean(value);
+ return typeof booledValue === 'undefined' ? false : booledValue;
+ }
+
+ /**
+ * Evaluate string concatenation against input data
+ * @param {Object} lhs - LHS value
+ * @param {Object} rhs - RHS value
+ * @returns {string|*} Concatenated string
+ */
+ function evaluateStringConcat(lhs, rhs) {
+ var result;
+
+ var lstr = '';
+ var rstr = '';
+ if (typeof lhs !== 'undefined') {
+ lstr = fn.string(lhs);
+ }
+ if (typeof rhs !== 'undefined') {
+ rstr = fn.string(rhs);
+ }
+
+ result = lstr.concat(rstr);
+ return result;
+ }
+
+ /**
+ * Evaluate group expression against input data
+ * @param {Object} expr - JSONata expression
+ * @param {Object} input - Input data to evaluate against
+ * @param {Object} environment - Environment
+ * @returns {{}} Evaluated input data
+ */
+ async function evaluateGroupExpression(expr, input, environment) {
+ var result = {};
+ var groups = {};
+ var reduce = input && input.tupleStream ? true : false;
+ // group the input sequence by 'key' expression
+ if (!Array.isArray(input)) {
+ input = createSequence(input);
+ }
+ // if the array is empty, add an undefined entry to enable literal JSON object to be generated
+ if (input.length === 0) {
+ input.push(undefined);
+ }
+
+ for(var itemIndex = 0; itemIndex < input.length; itemIndex++) {
+ var item = input[itemIndex];
+ var env = reduce ? createFrameFromTuple(environment, item) : environment;
+ for(var pairIndex = 0; pairIndex < expr.lhs.length; pairIndex++) {
+ var pair = expr.lhs[pairIndex];
+ var key = await evaluate(pair[0], reduce ? item['@'] : item, env);
+ // key has to be a string
+ if (typeof key !== 'string' && key !== undefined) {
+ throw {
+ code: "T1003",
+ stack: (new Error()).stack,
+ position: expr.position,
+ value: key
+ };
+ }
+
+ if (key !== undefined) {
+ var entry = {data: item, exprIndex: pairIndex};
+ if (groups.hasOwnProperty(key)) {
+ // a value already exists in this slot
+ if(groups[key].exprIndex !== pairIndex) {
+ // this key has been generated by another expression in this group
+ // when multiple key expressions evaluate to the same key, then error D1009 must be thrown
+ throw {
+ code: "D1009",
+ stack: (new Error()).stack,
+ position: expr.position,
+ value: key
+ };
+ }
+
+ // append it as an array
+ groups[key].data = fn.append(groups[key].data, item);
+ } else {
+ groups[key] = entry;
+ }
+ }
+ }
+ }
+
+ // iterate over the groups to evaluate the 'value' expression
+ let generators = await Promise.all(Object.keys(groups).map(async (key, idx) => {
+ let entry = groups[key];
+ var context = entry.data;
+ var env = environment;
+ if (reduce) {
+ var tuple = reduceTupleStream(entry.data);
+ context = tuple['@'];
+ delete tuple['@'];
+ env = createFrameFromTuple(environment, tuple);
+ }
+ environment.isParallelCall = idx > 0
+ return [key, await evaluate(expr.lhs[entry.exprIndex][1], context, env)];
+ }));
+
+ for (let generator of generators) {
+ var [key, value] = await generator;
+ if(typeof value !== 'undefined') {
+ result[key] = value;
+ }
+ }
+
+ return result;
+ }
+
+ function reduceTupleStream(tupleStream) {
+ if(!Array.isArray(tupleStream)) {
+ return tupleStream;
+ }
+ var result = {};
+ Object.assign(result, tupleStream[0]);
+ for(var ii = 1; ii < tupleStream.length; ii++) {
+ for(const prop in tupleStream[ii]) {
+ result[prop] = fn.append(result[prop], tupleStream[ii][prop]);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Evaluate range expression against input data
+ * @param {Object} lhs - LHS value
+ * @param {Object} rhs - RHS value
+ * @returns {Array} Resultant array
+ */
+ function evaluateRangeExpression(lhs, rhs) {
+ var result;
+
+ if (typeof lhs !== 'undefined' && !Number.isInteger(lhs)) {
+ throw {
+ code: "T2003",
+ stack: (new Error()).stack,
+ value: lhs
+ };
+ }
+ if (typeof rhs !== 'undefined' && !Number.isInteger(rhs)) {
+ throw {
+ code: "T2004",
+ stack: (new Error()).stack,
+ value: rhs
+ };
+ }
+
+ if (typeof lhs === 'undefined' || typeof rhs === 'undefined') {
+ // if either side is undefined, the result is undefined
+ return result;
+ }
+
+ if (lhs > rhs) {
+ // if the lhs is greater than the rhs, return undefined
+ return result;
+ }
+
+ // limit the size of the array to ten million entries (1e7)
+ // this is an implementation defined limit to protect against
+ // memory and performance issues. This value may increase in the future.
+ var size = rhs - lhs + 1;
+ if(size > 1e7) {
+ throw {
+ code: "D2014",
+ stack: (new Error()).stack,
+ value: size
+ };
+ }
+
+ result = new Array(size);
+ for (var item = lhs, index = 0; item <= rhs; item++, index++) {
+ result[index] = item;
+ }
+ result.sequence = true;
+ return result;
+ }
+
+ /**
+ * Evaluate bind expression against input data
+ * @param {Object} expr - JSONata expression
+ * @param {Object} input - Input data to evaluate against
+ * @param {Object} environment - Environment
+ * @returns {*} Evaluated input data
+ */
+ async function evaluateBindExpression(expr, input, environment) {
+ // The RHS is the expression to evaluate
+ // The LHS is the name of the variable to bind to - should be a VARIABLE token (enforced by parser)
+ var value = await evaluate(expr.rhs, input, environment);
+ environment.bind(expr.lhs.value, value);
+ return value;
+ }
+
+ /**
+ * Evaluate condition against input data
+ * @param {Object} expr - JSONata expression
+ * @param {Object} input - Input data to evaluate against
+ * @param {Object} environment - Environment
+ * @returns {*} Evaluated input data
+ */
+ async function evaluateCondition(expr, input, environment) {
+ var result;
+ var condition = await evaluate(expr.condition, input, environment);
+ if (fn.boolean(condition)) {
+ result = await evaluate(expr.then, input, environment);
+ } else if (typeof expr.else !== 'undefined') {
+ result = await evaluate(expr.else, input, environment);
+ }
+ return result;
+ }
+
+ /**
+ * Evaluate block against input data
+ * @param {Object} expr - JSONata expression
+ * @param {Object} input - Input data to evaluate against
+ * @param {Object} environment - Environment
+ * @returns {*} Evaluated input data
+ */
+ async function evaluateBlock(expr, input, environment) {
+ var result;
+ // create a new frame to limit the scope of variable assignments
+ // TODO, only do this if the post-parse stage has flagged this as required
+ var frame = createFrame(environment);
+ // invoke each expression in turn
+ // only return the result of the last one
+ for(var ii = 0; ii < expr.expressions.length; ii++) {
+ result = await evaluate(expr.expressions[ii], input, frame);
+ }
+
+ return result;
+ }
+
+ /**
+ * Prepare a regex
+ * @param {Object} expr - expression containing regex
+ * @returns {Function} Higher order function representing prepared regex
+ */
+ function evaluateRegex(expr) {
+ var re = new jsonata.RegexEngine(expr.value);
+ var closure = function(str, fromIndex) {
+ var result;
+ re.lastIndex = fromIndex || 0;
+ var match = re.exec(str);
+ if(match !== null) {
+ result = {
+ match: match[0],
+ start: match.index,
+ end: match.index + match[0].length,
+ groups: []
+ };
+ if(match.length > 1) {
+ for(var i = 1; i < match.length; i++) {
+ result.groups.push(match[i]);
+ }
+ }
+ result.next = function() {
+ if(re.lastIndex >= str.length) {
+ return undefined;
+ } else {
+ var next = closure(str, re.lastIndex);
+ if(next && next.match === '') {
+ // matches zero length string; this will never progress
+ throw {
+ code: "D1004",
+ stack: (new Error()).stack,
+ position: expr.position,
+ value: expr.value.source
+ };
+ }
+ return next;
+ }
+ };
+ }
+
+ return result;
+ };
+ return closure;
+ }
+
+ /**
+ * Evaluate variable against input data
+ * @param {Object} expr - JSONata expression
+ * @param {Object} input - Input data to evaluate against
+ * @param {Object} environment - Environment
+ * @returns {*} Evaluated input data
+ */
+ function evaluateVariable(expr, input, environment) {
+ // lookup the variable value in the environment
+ var result;
+ // if the variable name is empty string, then it refers to context value
+ if (expr.value === '') {
+ result = input && input.outerWrapper ? input[0] : input;
+ } else {
+ result = environment.lookup(expr.value);
+ }
+ return result;
+ }
+
+ /**
+ * sort / order-by operator
+ * @param {Object} expr - AST for operator
+ * @param {Object} input - Input data to evaluate against
+ * @param {Object} environment - Environment
+ * @returns {*} Ordered sequence
+ */
+ async function evaluateSortExpression(expr, input, environment) {
+ var result;
+
+ // evaluate the lhs, then sort the results in order according to rhs expression
+ var lhs = input;
+ var isTupleSort = input.tupleStream ? true : false;
+
+ // sort the lhs array
+ // use comparator function
+ var comparator = async function(a, b) {
+ // expr.terms is an array of order-by in priority order
+ var comp = 0;
+ for(var index = 0; comp === 0 && index < expr.terms.length; index++) {
+ var term = expr.terms[index];
+ //evaluate the sort term in the context of a
+ var context = a;
+ var env = environment;
+ if(isTupleSort) {
+ context = a['@'];
+ env = createFrameFromTuple(environment, a);
+ }
+ var aa = await evaluate(term.expression, context, env);
+ //evaluate the sort term in the context of b
+ context = b;
+ env = environment;
+ if(isTupleSort) {
+ context = b['@'];
+ env = createFrameFromTuple(environment, b);
+ }
+ var bb = await evaluate(term.expression, context, env);
+
+ // type checks
+ var atype = typeof aa;
+ var btype = typeof bb;
+ // undefined should be last in sort order
+ if(atype === 'undefined') {
+ // swap them, unless btype is also undefined
+ comp = (btype === 'undefined') ? 0 : 1;
+ continue;
+ }
+ if(btype === 'undefined') {
+ comp = -1;
+ continue;
+ }
+
+ // if aa or bb are not string or numeric values, then throw an error
+ if(!(atype === 'string' || atype === 'number') || !(btype === 'string' || btype === 'number')) {
+ throw {
+ code: "T2008",
+ stack: (new Error()).stack,
+ position: expr.position,
+ value: !(atype === 'string' || atype === 'number') ? aa : bb
+ };
+ }
+
+ //if aa and bb are not of the same type
+ if(atype !== btype) {
+ throw {
+ code: "T2007",
+ stack: (new Error()).stack,
+ position: expr.position,
+ value: aa,
+ value2: bb
+ };
+ }
+ if(aa === bb) {
+ // both the same - move on to next term
+ continue;
+ } else if (aa < bb) {
+ comp = -1;
+ } else {
+ comp = 1;
+ }
+ if(term.descending === true) {
+ comp = -comp;
+ }
+ }
+ // only swap a & b if comp equals 1
+ return comp === 1;
+ };
+
+ var focus = {
+ environment: environment,
+ input: input
+ };
+ // the `focus` is passed in as the `this` for the invoked function
+ result = await fn.sort.apply(focus, [lhs, comparator]);
+
+ return result;
+ }
+
+ /**
+ * create a transformer function
+ * @param {Object} expr - AST for operator
+ * @param {Object} input - Input data to evaluate against
+ * @param {Object} environment - Environment
+ * @returns {*} tranformer function
+ */
+ function evaluateTransformExpression(expr, input, environment) {
+ // create a function to implement the transform definition
+ var transformer = async function (obj) { // signature <(oa):o>
+ // undefined inputs always return undefined
+ if(typeof obj === 'undefined') {
+ return undefined;
+ }
+
+ // this function returns a copy of obj with changes specified by the pattern/operation
+ var cloneFunction = environment.lookup('clone');
+ if(!isFunction(cloneFunction)) {
+ // throw type error
+ throw {
+ code: "T2013",
+ stack: (new Error()).stack,
+ position: expr.position
+ };
+ }
+ var result = await apply(cloneFunction, [obj], null, environment);
+ var matches = await evaluate(expr.pattern, result, environment);
+ if(typeof matches !== 'undefined') {
+ if(!Array.isArray(matches)) {
+ matches = [matches];
+ }
+ for(var ii = 0; ii < matches.length; ii++) {
+ var match = matches[ii];
+ // evaluate the update value for each match
+ var update = await evaluate(expr.update, match, environment);
+ // update must be an object
+ var updateType = typeof update;
+ if(updateType !== 'undefined') {
+ if(updateType !== 'object' || update === null || Array.isArray(update)) {
+ // throw type error
+ throw {
+ code: "T2011",
+ stack: (new Error()).stack,
+ position: expr.update.position,
+ value: update
+ };
+ }
+ // merge the update
+ for(var prop in update) {
+ match[prop] = update[prop];
+ }
+ }
+
+ // delete, if specified, must be an array of strings (or single string)
+ if(typeof expr.delete !== 'undefined') {
+ var deletions = await evaluate(expr.delete, match, environment);
+ if(typeof deletions !== 'undefined') {
+ var val = deletions;
+ if (!Array.isArray(deletions)) {
+ deletions = [deletions];
+ }
+ if (!isArrayOfStrings(deletions)) {
+ // throw type error
+ throw {
+ code: "T2012",
+ stack: (new Error()).stack,
+ position: expr.delete.position,
+ value: val
+ };
+ }
+ for (var jj = 0; jj < deletions.length; jj++) {
+ if(typeof match === 'object' && match !== null) {
+ delete match[deletions[jj]];
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return result;
+ };
+
+ return defineFunction(transformer, '<(oa):o>');
+ }
+
+ var chainAST = parser('function($f, $g) { function($x){ $g($f($x)) } }');
+
+ /**
+ * Apply the function on the RHS using the sequence on the LHS as the first argument
+ * @param {Object} expr - JSONata expression
+ * @param {Object} input - Input data to evaluate against
+ * @param {Object} environment - Environment
+ * @returns {*} Evaluated input data
+ */
+ async function evaluateApplyExpression(expr, input, environment) {
+ var result;
+
+
+ var lhs = await evaluate(expr.lhs, input, environment);
+ if(expr.rhs.type === 'function') {
+ // this is a function _invocation_; invoke it with lhs expression as the first argument
+ result = await evaluateFunction(expr.rhs, input, environment, { context: lhs });
+ } else {
+ var func = await evaluate(expr.rhs, input, environment);
+
+ if(!isFunction(func)) {
+ throw {
+ code: "T2006",
+ stack: (new Error()).stack,
+ position: expr.position,
+ value: func
+ };
+ }
+
+ if(isFunction(lhs)) {
+ // this is function chaining (func1 ~> func2)
+ // λ($f, $g) { λ($x){ $g($f($x)) } }
+ var chain = await evaluate(chainAST, null, environment);
+ result = await apply(chain, [lhs, func], null, environment);
+ } else {
+ result = await apply(func, [lhs], null, environment);
+ }
+
+ }
+
+ return result;
+ }
+
+ /**
+ * Evaluate function against input data
+ * @param {Object} expr - JSONata expression
+ * @param {Object} input - Input data to evaluate against
+ * @param {Object} environment - Environment
+ * @returns {*} Evaluated input data
+ */
+ async function evaluateFunction(expr, input, environment, applyto) {
+ var result;
+
+ // create the procedure
+ // can't assume that expr.procedure is a lambda type directly
+ // could be an expression that evaluates to a function (e.g. variable reference, parens expr etc.
+ // evaluate it generically first, then check that it is a function. Throw error if not.
+ var proc = await evaluate(expr.procedure, input, environment);
+
+ if (typeof proc === 'undefined' && expr.procedure.type === 'path' && environment.lookup(expr.procedure.steps[0].value)) {
+ // help the user out here if they simply forgot the leading $
+ throw {
+ code: "T1005",
+ stack: (new Error()).stack,
+ position: expr.position,
+ token: expr.procedure.steps[0].value
+ };
+ }
+
+ var evaluatedArgs = [];
+ if(typeof applyto !== 'undefined') {
+ evaluatedArgs.push(applyto.context);
+ }
+ // eager evaluation - evaluate the arguments
+ for (var jj = 0; jj < expr.arguments.length; jj++) {
+ const arg = await evaluate(expr.arguments[jj], input, environment);
+ if(isFunction(arg)) {
+ // wrap this in a closure
+ const closure = async function (...params) {
+ // invoke func
+ return await apply(arg, params, null, environment);
+ };
+ closure.arity = getFunctionArity(arg);
+ evaluatedArgs.push(closure);
+ } else {
+ evaluatedArgs.push(arg);
+ }
+ }
+ // apply the procedure
+ var procName = expr.procedure.type === 'path' ? expr.procedure.steps[0].value : expr.procedure.value;
+ try {
+ if(typeof proc === 'object') {
+ proc.token = procName;
+ proc.position = expr.position;
+ }
+ result = await apply(proc, evaluatedArgs, input, environment);
+ } catch (err) {
+ if(!err.position) {
+ // add the position field to the error
+ err.position = expr.position;
+ }
+ if (!err.token) {
+ // and the function identifier
+ err.token = procName;
+ }
+ throw err;
+ }
+ return result;
+ }
+
+ /**
+ * Apply procedure or function
+ * @param {Object} proc - Procedure
+ * @param {Array} args - Arguments
+ * @param {Object} input - input
+ * @param {Object} environment - environment
+ * @returns {*} Result of procedure
+ */
+ async function apply(proc, args, input, environment) {
+ var result;
+ result = await applyInner(proc, args, input, environment);
+ while(isLambda(result) && result.thunk === true) {
+ // trampoline loop - this gets invoked as a result of tail-call optimization
+ // the function returned a tail-call thunk
+ // unpack it, evaluate its arguments, and apply the tail call
+ var next = await evaluate(result.body.procedure, result.input, result.environment);
+ if(result.body.procedure.type === 'variable') {
+ next.token = result.body.procedure.value;
+ }
+ next.position = result.body.procedure.position;
+ var evaluatedArgs = [];
+ for(var ii = 0; ii < result.body.arguments.length; ii++) {
+ evaluatedArgs.push(await evaluate(result.body.arguments[ii], result.input, result.environment));
+ }
+
+ result = await applyInner(next, evaluatedArgs, input, environment);
+ }
+ return result;
+ }
+
+ /**
+ * Apply procedure or function
+ * @param {Object} proc - Procedure
+ * @param {Array} args - Arguments
+ * @param {Object} input - input
+ * @param {Object} environment - environment
+ * @returns {*} Result of procedure
+ */
+ async function applyInner(proc, args, input, environment) {
+ var result;
+ try {
+ var validatedArgs = args;
+ if (proc) {
+ validatedArgs = validateArguments(proc.signature, args, input);
+ }
+
+ if (isLambda(proc)) {
+ result = await applyProcedure(proc, validatedArgs);
+ } else if (proc && proc._jsonata_function === true) {
+ var focus = {
+ environment: environment,
+ input: input
+ };
+ // the `focus` is passed in as the `this` for the invoked function
+ result = proc.implementation.apply(focus, validatedArgs);
+ // `proc.implementation` might be a generator function
+ // and `result` might be a generator - if so, yield
+ if (isIterable(result)) {
+ result = result.next().value;
+ }
+ if (isPromise(result)) {
+ result = await result;
+ }
+ } else if (typeof proc === 'function') {
+ // typically these are functions that are returned by the invocation of plugin functions
+ // the `input` is being passed in as the `this` for the invoked function
+ // this is so that functions that return objects containing functions can chain
+ // e.g. await (await $func())
+ result = proc.apply(input, validatedArgs);
+ if (isPromise(result)) {
+ result = await result;
+ }
+ } else {
+ throw {
+ code: "T1006",
+ stack: (new Error()).stack
+ };
+ }
+ } catch(err) {
+ if(proc) {
+ if (typeof err.token == 'undefined' && typeof proc.token !== 'undefined') {
+ err.token = proc.token;
+ }
+ err.position = proc.position;
+ }
+ throw err;
+ }
+ return result;
+ }
+
+ /**
+ * Evaluate lambda against input data
+ * @param {Object} expr - JSONata expression
+ * @param {Object} input - Input data to evaluate against
+ * @param {Object} environment - Environment
+ * @returns {{lambda: boolean, input: *, environment: *, arguments: *, body: *}} Evaluated input data
+ */
+ function evaluateLambda(expr, input, environment) {
+ // make a function (closure)
+ var procedure = {
+ _jsonata_lambda: true,
+ input: input,
+ environment: environment,
+ arguments: expr.arguments,
+ signature: expr.signature,
+ body: expr.body
+ };
+ if(expr.thunk === true) {
+ procedure.thunk = true;
+ }
+ procedure.apply = async function(self, args) {
+ return await apply(procedure, args, input, !!self ? self.environment : environment);
+ };
+ return procedure;
+ }
+
+ /**
+ * Evaluate partial application
+ * @param {Object} expr - JSONata expression
+ * @param {Object} input - Input data to evaluate against
+ * @param {Object} environment - Environment
+ * @returns {*} Evaluated input data
+ */
+ async function evaluatePartialApplication(expr, input, environment) {
+ // partially apply a function
+ var result;
+ // evaluate the arguments
+ var evaluatedArgs = [];
+ for(var ii = 0; ii < expr.arguments.length; ii++) {
+ var arg = expr.arguments[ii];
+ if (arg.type === 'operator' && arg.value === '?') {
+ evaluatedArgs.push(arg);
+ } else {
+ evaluatedArgs.push(await evaluate(arg, input, environment));
+ }
+ }
+ // lookup the procedure
+ var proc = await evaluate(expr.procedure, input, environment);
+ if (typeof proc === 'undefined' && expr.procedure.type === 'path' && environment.lookup(expr.procedure.steps[0].value)) {
+ // help the user out here if they simply forgot the leading $
+ throw {
+ code: "T1007",
+ stack: (new Error()).stack,
+ position: expr.position,
+ token: expr.procedure.steps[0].value
+ };
+ }
+ if (isLambda(proc)) {
+ result = partialApplyProcedure(proc, evaluatedArgs);
+ } else if (proc && proc._jsonata_function === true) {
+ result = partialApplyNativeFunction(proc.implementation, evaluatedArgs);
+ } else if (typeof proc === 'function') {
+ result = partialApplyNativeFunction(proc, evaluatedArgs);
+ } else {
+ throw {
+ code: "T1008",
+ stack: (new Error()).stack,
+ position: expr.position,
+ token: expr.procedure.type === 'path' ? expr.procedure.steps[0].value : expr.procedure.value
+ };
+ }
+ return result;
+ }
+
+ /**
+ * Validate the arguments against the signature validator (if it exists)
+ * @param {Function} signature - validator function
+ * @param {Array} args - function arguments
+ * @param {*} context - context value
+ * @returns {Array} - validated arguments
+ */
+ function validateArguments(signature, args, context) {
+ if(typeof signature === 'undefined') {
+ // nothing to validate
+ return args;
+ }
+ var validatedArgs = signature.validate(args, context);
+ return validatedArgs;
+ }
+
+ /**
+ * Apply procedure
+ * @param {Object} proc - Procedure
+ * @param {Array} args - Arguments
+ * @returns {*} Result of procedure
+ */
+ async function applyProcedure(proc, args) {
+ var result;
+ var env = createFrame(proc.environment);
+ proc.arguments.forEach(function (param, index) {
+ env.bind(param.value, args[index]);
+ });
+ if (typeof proc.body === 'function') {
+ // this is a lambda that wraps a native function - generated by partially evaluating a native
+ result = await applyNativeFunction(proc.body, env);
+ } else {
+ result = await evaluate(proc.body, proc.input, env);
+ }
+ return result;
+ }
+
+ /**
+ * Partially apply procedure
+ * @param {Object} proc - Procedure
+ * @param {Array} args - Arguments
+ * @returns {{lambda: boolean, input: *, environment: {bind, lookup}, arguments: Array, body: *}} Result of partially applied procedure
+ */
+ function partialApplyProcedure(proc, args) {
+ // create a closure, bind the supplied parameters and return a function that takes the remaining (?) parameters
+ var env = createFrame(proc.environment);
+ var unboundArgs = [];
+ proc.arguments.forEach(function (param, index) {
+ var arg = args[index];
+ if (arg && arg.type === 'operator' && arg.value === '?') {
+ unboundArgs.push(param);
+ } else {
+ env.bind(param.value, arg);
+ }
+ });
+ var procedure = {
+ _jsonata_lambda: true,
+ input: proc.input,
+ environment: env,
+ arguments: unboundArgs,
+ body: proc.body
+ };
+ return procedure;
+ }
+
+ /**
+ * Partially apply native function
+ * @param {Function} native - Native function
+ * @param {Array} args - Arguments
+ * @returns {{lambda: boolean, input: *, environment: {bind, lookup}, arguments: Array, body: *}} Result of partially applying native function
+ */
+ function partialApplyNativeFunction(native, args) {
+ // create a lambda function that wraps and invokes the native function
+ // get the list of declared arguments from the native function
+ // this has to be picked out from the toString() value
+ var sigArgs = getNativeFunctionArguments(native);
+ sigArgs = sigArgs.map(function (sigArg) {
+ return '$' + sigArg.trim();
+ });
+ var body = 'function(' + sigArgs.join(', ') + '){ _ }';
+
+ var bodyAST = parser(body);
+ bodyAST.body = native;
+
+ var partial = partialApplyProcedure(bodyAST, args);
+ return partial;
+ }
+
+ /**
+ * Apply native function
+ * @param {Object} proc - Procedure
+ * @param {Object} env - Environment
+ * @returns {*} Result of applying native function
+ */
+ async function applyNativeFunction(proc, env) {
+ var sigArgs = getNativeFunctionArguments(proc);
+ // generate the array of arguments for invoking the function - look them up in the environment
+ var args = sigArgs.map(function (sigArg) {
+ return env.lookup(sigArg.trim());
+ });
+
+ var focus = {
+ environment: env
+ };
+ var result = proc.apply(focus, args);
+ if (isPromise(result)) {
+ result = await result;
+ }
+ return result;
+ }
+
+ /**
+ * Get native function arguments
+ * @param {Function} func - Function
+ * @returns {*|Array} Native function arguments
+ */
+ function getNativeFunctionArguments(func) {
+ var signature = func.toString();
+ var sigParens = /\(([^)]*)\)/.exec(signature)[1]; // the contents of the parens
+ var sigArgs = sigParens.split(',');
+ return sigArgs;
+ }
+
+ /**
+ * Creates a function definition
+ * @param {Function} func - function implementation in Javascript
+ * @param {string} signature - JSONata function signature definition
+ * @returns {{implementation: *, signature: *}} function definition
+ */
+ function defineFunction(func, signature) {
+ var definition = {
+ _jsonata_function: true,
+ implementation: func
+ };
+ if(typeof signature !== 'undefined') {
+ definition.signature = parseSignature(signature);
+ }
+ return definition;
+ }
+
+
+ /**
+ * parses and evaluates the supplied expression
+ * @param {string} expr - expression to evaluate
+ * @returns {*} - result of evaluating the expression
+ */
+ async function functionEval(expr, focus) {
+ // undefined inputs always return undefined
+ if(typeof expr === 'undefined') {
+ return undefined;
+ }
+ var input = this.input;
+ if(typeof focus !== 'undefined') {
+ input = focus;
+ // if the input is a JSON array, then wrap it in a singleton sequence so it gets treated as a single input
+ if(Array.isArray(input) && !isSequence(input)) {
+ input = createSequence(input);
+ input.outerWrapper = true;
+ }
+ }
+
+ try {
+ var ast = parser(expr, false);
+ } catch(err) {
+ // error parsing the expression passed to $eval
+ populateMessage(err);
+ throw {
+ stack: (new Error()).stack,
+ code: "D3120",
+ value: err.message,
+ error: err
+ };
+ }
+ try {
+ var result = await evaluate(ast, input, this.environment);
+ } catch(err) {
+ // error evaluating the expression passed to $eval
+ populateMessage(err);
+ throw {
+ stack: (new Error()).stack,
+ code: "D3121",
+ value:err.message,
+ error: err
+ };
+ }
+
+ return result;
+ }
+
+ /**
+ * Clones an object
+ * @param {Object} arg - object to clone (deep copy)
+ * @returns {*} - the cloned object
+ */
+ function functionClone(arg) {
+ // undefined inputs always return undefined
+ if(typeof arg === 'undefined') {
+ return undefined;
+ }
+
+ return JSON.parse(fn.string(arg));
+ }
+
+ /**
+ * Create frame
+ * @param {Object} enclosingEnvironment - Enclosing environment
+ * @returns {{bind: bind, lookup: lookup}} Created frame
+ */
+ function createFrame(enclosingEnvironment) {
+ var bindings = {};
+ return {
+ bind: function (name, value) {
+ bindings[name] = value;
+ },
+ lookup: function (name) {
+ var value;
+ if(bindings.hasOwnProperty(name)) {
+ value = bindings[name];
+ } else if (enclosingEnvironment) {
+ value = enclosingEnvironment.lookup(name);
+ }
+ return value;
+ },
+ timestamp: enclosingEnvironment ? enclosingEnvironment.timestamp : null,
+ async: enclosingEnvironment ? enclosingEnvironment.async : false,
+ isParallelCall: enclosingEnvironment ? enclosingEnvironment.isParallelCall : false,
+ global: enclosingEnvironment ? enclosingEnvironment.global : {
+ ancestry: [ null ]
+ }
+ };
+ }
+
+ // Function registration
+ staticFrame.bind('sum', defineFunction(fn.sum, ':n>'));
+ staticFrame.bind('count', defineFunction(fn.count, ''));
+ staticFrame.bind('max', defineFunction(fn.max, ':n>'));
+ staticFrame.bind('min', defineFunction(fn.min, ':n>'));
+ staticFrame.bind('average', defineFunction(fn.average, ':n>'));
+ staticFrame.bind('string', defineFunction(fn.string, ''));
+ staticFrame.bind('substring', defineFunction(fn.substring, ''));
+ staticFrame.bind('substringBefore', defineFunction(fn.substringBefore, ''));
+ staticFrame.bind('substringAfter', defineFunction(fn.substringAfter, ''));
+ staticFrame.bind('lowercase', defineFunction(fn.lowercase, ''));
+ staticFrame.bind('uppercase', defineFunction(fn.uppercase, ''));
+ staticFrame.bind('length', defineFunction(fn.length, ''));
+ staticFrame.bind('trim', defineFunction(fn.trim, ''));
+ staticFrame.bind('pad', defineFunction(fn.pad, ''));
+ staticFrame.bind('match', defineFunction(fn.match, 'n?:a>'));
+ staticFrame.bind('contains', defineFunction(fn.contains, '')); // TODO ):b>
+ staticFrame.bind('replace', defineFunction(fn.replace, '')); // TODO )(sf)n?:s>
+ staticFrame.bind('split', defineFunction(fn.split, '>')); // TODO )n?:a>
+ staticFrame.bind('join', defineFunction(fn.join, 's?:s>'));
+ staticFrame.bind('formatNumber', defineFunction(fn.formatNumber, ''));
+ staticFrame.bind('formatBase', defineFunction(fn.formatBase, ''));
+ staticFrame.bind('formatInteger', defineFunction(datetime.formatInteger, ''));
+ staticFrame.bind('parseInteger', defineFunction(datetime.parseInteger, ''));
+ staticFrame.bind('number', defineFunction(fn.number, '<(nsb)-:n>'));
+ staticFrame.bind('floor', defineFunction(fn.floor, ''));
+ staticFrame.bind('ceil', defineFunction(fn.ceil, ''));
+ staticFrame.bind('round', defineFunction(fn.round, ''));
+ staticFrame.bind('abs', defineFunction(fn.abs, ''));
+ staticFrame.bind('sqrt', defineFunction(fn.sqrt, ''));
+ staticFrame.bind('power', defineFunction(fn.power, ''));
+ staticFrame.bind('random', defineFunction(fn.random, '<:n>'));
+ staticFrame.bind('boolean', defineFunction(fn.boolean, ''));
+ staticFrame.bind('not', defineFunction(fn.not, ''));
+ staticFrame.bind('map', defineFunction(fn.map, ''));
+ staticFrame.bind('zip', defineFunction(fn.zip, ''));
+ staticFrame.bind('filter', defineFunction(fn.filter, ''));
+ staticFrame.bind('single', defineFunction(fn.single, ''));
+ staticFrame.bind('reduce', defineFunction(fn.foldLeft, '')); // TODO aj?:j>
+ staticFrame.bind('sift', defineFunction(fn.sift, ''));
+ staticFrame.bind('keys', defineFunction(fn.keys, '>'));
+ staticFrame.bind('lookup', defineFunction(fn.lookup, ''));
+ staticFrame.bind('append', defineFunction(fn.append, ''));
+ staticFrame.bind('exists', defineFunction(fn.exists, ''));
+ staticFrame.bind('spread', defineFunction(fn.spread, '>'));
+ staticFrame.bind('merge', defineFunction(fn.merge, ':o>'));
+ staticFrame.bind('reverse', defineFunction(fn.reverse, ''));
+ staticFrame.bind('each', defineFunction(fn.each, ''));
+ staticFrame.bind('error', defineFunction(fn.error, ''));
+ staticFrame.bind('assert', defineFunction(fn.assert, ''));
+ staticFrame.bind('type', defineFunction(fn.type, ''));
+ staticFrame.bind('sort', defineFunction(fn.sort, ''));
+ staticFrame.bind('shuffle', defineFunction(fn.shuffle, ''));
+ staticFrame.bind('distinct', defineFunction(fn.distinct, ''));
+ staticFrame.bind('base64encode', defineFunction(fn.base64encode, ''));
+ staticFrame.bind('base64decode', defineFunction(fn.base64decode, ''));
+ staticFrame.bind('encodeUrlComponent', defineFunction(fn.encodeUrlComponent, ''));
+ staticFrame.bind('encodeUrl', defineFunction(fn.encodeUrl, ''));
+ staticFrame.bind('decodeUrlComponent', defineFunction(fn.decodeUrlComponent, ''));
+ staticFrame.bind('decodeUrl', defineFunction(fn.decodeUrl, ''));
+ staticFrame.bind('eval', defineFunction(functionEval, ''));
+ staticFrame.bind('toMillis', defineFunction(datetime.toMillis, ''));
+ staticFrame.bind('fromMillis', defineFunction(datetime.fromMillis, ''));
+ staticFrame.bind('clone', defineFunction(functionClone, '<(oa)-:o>'));
+
+ /**
+ * Error codes
+ *
+ * Sxxxx - Static errors (compile time)
+ * Txxxx - Type errors
+ * Dxxxx - Dynamic errors (evaluate time)
+ * 01xx - tokenizer
+ * 02xx - parser
+ * 03xx - regex parser
+ * 04xx - function signature parser/evaluator
+ * 10xx - evaluator
+ * 20xx - operators
+ * 3xxx - functions (blocks of 10 for each function)
+ */
+ var errorCodes = {
+ "S0101": "String literal must be terminated by a matching quote",
+ "S0102": "Number out of range: {{token}}",
+ "S0103": "Unsupported escape sequence: \\{{token}}",
+ "S0104": "The escape sequence \\u must be followed by 4 hex digits",
+ "S0105": "Quoted property name must be terminated with a backquote (`)",
+ "S0106": "Comment has no closing tag",
+ "S0201": "Syntax error: {{token}}",
+ "S0202": "Expected {{value}}, got {{token}}",
+ "S0203": "Expected {{value}} before end of expression",
+ "S0204": "Unknown operator: {{token}}",
+ "S0205": "Unexpected token: {{token}}",
+ "S0206": "Unknown expression type: {{token}}",
+ "S0207": "Unexpected end of expression",
+ "S0208": "Parameter {{value}} of function definition must be a variable name (start with $)",
+ "S0209": "A predicate cannot follow a grouping expression in a step",
+ "S0210": "Each step can only have one grouping expression",
+ "S0211": "The symbol {{token}} cannot be used as a unary operator",
+ "S0212": "The left side of := must be a variable name (start with $)",
+ "S0213": "The literal value {{value}} cannot be used as a step within a path expression",
+ "S0214": "The right side of {{token}} must be a variable name (start with $)",
+ "S0215": "A context variable binding must precede any predicates on a step",
+ "S0216": "A context variable binding must precede the 'order-by' clause on a step",
+ "S0217": "The object representing the 'parent' cannot be derived from this expression",
+ "S0301": "Empty regular expressions are not allowed",
+ "S0302": "No terminating / in regular expression",
+ "S0402": "Choice groups containing parameterized types are not supported",
+ "S0401": "Type parameters can only be applied to functions and arrays",
+ "S0500": "Attempted to evaluate an expression containing syntax error(s)",
+ "T0410": "Argument {{index}} of function {{token}} does not match function signature",
+ "T0411": "Context value is not a compatible type with argument {{index}} of function {{token}}",
+ "T0412": "Argument {{index}} of function {{token}} must be an array of {{type}}",
+ "D1001": "Number out of range: {{value}}",
+ "D1002": "Cannot negate a non-numeric value: {{value}}",
+ "T1003": "Key in object structure must evaluate to a string; got: {{value}}",
+ "D1004": "Regular expression matches zero length string",
+ "T1005": "Attempted to invoke a non-function. Did you mean ${{{token}}}?",
+ "T1006": "Attempted to invoke a non-function",
+ "T1007": "Attempted to partially apply a non-function. Did you mean ${{{token}}}?",
+ "T1008": "Attempted to partially apply a non-function",
+ "D1009": "Multiple key definitions evaluate to same key: {{value}}",
+ "T1010": "The matcher function argument passed to function {{token}} does not return the correct object structure",
+ "T2001": "The left side of the {{token}} operator must evaluate to a number",
+ "T2002": "The right side of the {{token}} operator must evaluate to a number",
+ "T2003": "The left side of the range operator (..) must evaluate to an integer",
+ "T2004": "The right side of the range operator (..) must evaluate to an integer",
+ "D2005": "The left side of := must be a variable name (start with $)", // defunct - replaced by S0212 parser error
+ "T2006": "The right side of the function application operator ~> must be a function",
+ "T2007": "Type mismatch when comparing values {{value}} and {{value2}} in order-by clause",
+ "T2008": "The expressions within an order-by clause must evaluate to numeric or string values",
+ "T2009": "The values {{value}} and {{value2}} either side of operator {{token}} must be of the same data type",
+ "T2010": "The expressions either side of operator {{token}} must evaluate to numeric or string values",
+ "T2011": "The insert/update clause of the transform expression must evaluate to an object: {{value}}",
+ "T2012": "The delete clause of the transform expression must evaluate to a string or array of strings: {{value}}",
+ "T2013": "The transform expression clones the input object using the $clone() function. This has been overridden in the current scope by a non-function.",
+ "D2014": "The size of the sequence allocated by the range operator (..) must not exceed 1e6. Attempted to allocate {{value}}.",
+ "D3001": "Attempting to invoke string function on Infinity or NaN",
+ "D3010": "Second argument of replace function cannot be an empty string",
+ "D3011": "Fourth argument of replace function must evaluate to a positive number",
+ "D3012": "Attempted to replace a matched string with a non-string value",
+ "D3020": "Third argument of split function must evaluate to a positive number",
+ "D3030": "Unable to cast value to a number: {{value}}",
+ "D3040": "Third argument of match function must evaluate to a positive number",
+ "D3050": "The second argument of reduce function must be a function with at least two arguments",
+ "D3060": "The sqrt function cannot be applied to a negative number: {{value}}",
+ "D3061": "The power function has resulted in a value that cannot be represented as a JSON number: base={{value}}, exponent={{exp}}",
+ "D3070": "The single argument form of the sort function can only be applied to an array of strings or an array of numbers. Use the second argument to specify a comparison function",
+ "D3080": "The picture string must only contain a maximum of two sub-pictures",
+ "D3081": "The sub-picture must not contain more than one instance of the 'decimal-separator' character",
+ "D3082": "The sub-picture must not contain more than one instance of the 'percent' character",
+ "D3083": "The sub-picture must not contain more than one instance of the 'per-mille' character",
+ "D3084": "The sub-picture must not contain both a 'percent' and a 'per-mille' character",
+ "D3085": "The mantissa part of a sub-picture must contain at least one character that is either an 'optional digit character' or a member of the 'decimal digit family'",
+ "D3086": "The sub-picture must not contain a passive character that is preceded by an active character and that is followed by another active character",
+ "D3087": "The sub-picture must not contain a 'grouping-separator' character that appears adjacent to a 'decimal-separator' character",
+ "D3088": "The sub-picture must not contain a 'grouping-separator' at the end of the integer part",
+ "D3089": "The sub-picture must not contain two adjacent instances of the 'grouping-separator' character",
+ "D3090": "The integer part of the sub-picture must not contain a member of the 'decimal digit family' that is followed by an instance of the 'optional digit character'",
+ "D3091": "The fractional part of the sub-picture must not contain an instance of the 'optional digit character' that is followed by a member of the 'decimal digit family'",
+ "D3092": "A sub-picture that contains a 'percent' or 'per-mille' character must not contain a character treated as an 'exponent-separator'",
+ "D3093": "The exponent part of the sub-picture must comprise only of one or more characters that are members of the 'decimal digit family'",
+ "D3100": "The radix of the formatBase function must be between 2 and 36. It was given {{value}}",
+ "D3110": "The argument of the toMillis function must be an ISO 8601 formatted timestamp. Given {{value}}",
+ "D3120": "Syntax error in expression passed to function eval: {{value}}",
+ "D3121": "Dynamic error evaluating the expression passed to function eval: {{value}}",
+ "D3130": "Formatting or parsing an integer as a sequence starting with {{value}} is not supported by this implementation",
+ "D3131": "In a decimal digit pattern, all digits must be from the same decimal group",
+ "D3132": "Unknown component specifier {{value}} in date/time picture string",
+ "D3133": "The 'name' modifier can only be applied to months and days in the date/time picture string, not {{value}}",
+ "D3134": "The timezone integer format specifier cannot have more than four digits",
+ "D3135": "No matching closing bracket ']' in date/time picture string",
+ "D3136": "The date/time picture string is missing specifiers required to parse the timestamp",
+ "D3137": "{{{message}}}",
+ "D3138": "The $single() function expected exactly 1 matching result. Instead it matched more.",
+ "D3139": "The $single() function expected exactly 1 matching result. Instead it matched 0.",
+ "D3140": "Malformed URL passed to ${{{functionName}}}(): {{value}}",
+ "D3141": "{{{message}}}"
+ };
+
+ /**
+ * lookup a message template from the catalog and substitute the inserts.
+ * Populates `err.message` with the substituted message. Leaves `err.message`
+ * untouched if code lookup fails.
+ * @param {string} err - error code to lookup
+ * @returns {undefined} - `err` is modified in place
+ */
+ function populateMessage(err) {
+ var template = errorCodes[err.code];
+ if(typeof template !== 'undefined') {
+ // if there are any handlebars, replace them with the field references
+ // triple braces - replace with value
+ // double braces - replace with json stringified value
+ var message = template.replace(/\{\{\{([^}]+)}}}/g, function() {
+ return err[arguments[1]];
+ });
+ message = message.replace(/\{\{([^}]+)}}/g, function() {
+ return JSON.stringify(err[arguments[1]]);
+ });
+ err.message = message;
+ }
+ // Otherwise retain the original `err.message`
+ }
+
+ /**
+ * JSONata
+ * @param {Object} expr - JSONata expression
+ * @param {Object} options
+ * @param {boolean} options.recover: attempt to recover on parse error
+ * @param {Function} options.RegexEngine: RegEx class constructor to use
+ * @returns {{evaluate: evaluate, assign: assign}} Evaluated expression
+ */
+ function jsonata(expr, options) {
+ var ast;
+ var errors;
+ try {
+ ast = parser(expr, options && options.recover);
+ errors = ast.errors;
+ delete ast.errors;
+ } catch(err) {
+ // insert error message into structure
+ populateMessage(err); // possible side-effects on `err`
+ throw err;
+ }
+ var environment = createFrame(staticFrame);
+
+ var timestamp = new Date(); // will be overridden on each call to evalute()
+ environment.bind('now', defineFunction(function(picture, timezone) {
+ return datetime.fromMillis(timestamp.getTime(), picture, timezone);
+ }, ''));
+ environment.bind('millis', defineFunction(function() {
+ return timestamp.getTime();
+ }, '<:n>'));
+
+ if(options && options.RegexEngine) {
+ jsonata.RegexEngine = options.RegexEngine;
+ } else {
+ jsonata.RegexEngine = RegExp;
+ }
+
+ return {
+ evaluate: async function (input, bindings, callback) {
+ // throw if the expression compiled with syntax errors
+ if(typeof errors !== 'undefined') {
+ var err = {
+ code: 'S0500',
+ position: 0
+ };
+ populateMessage(err); // possible side-effects on `err`
+ throw err;
+ }
+
+ if (typeof bindings !== 'undefined') {
+ var exec_env;
+ // the variable bindings have been passed in - create a frame to hold these
+ exec_env = createFrame(environment);
+ for (var v in bindings) {
+ exec_env.bind(v, bindings[v]);
+ }
+ } else {
+ exec_env = environment;
+ }
+ // put the input document into the environment as the root object
+ exec_env.bind('$', input);
+
+ // capture the timestamp and put it in the execution environment
+ // the $now() and $millis() functions will return this value - whenever it is called
+ timestamp = new Date();
+ exec_env.timestamp = timestamp;
+
+ // if the input is a JSON array, then wrap it in a singleton sequence so it gets treated as a single input
+ if(Array.isArray(input) && !isSequence(input)) {
+ input = createSequence(input);
+ input.outerWrapper = true;
+ }
+
+ var it;
+ try {
+ it = await evaluate(ast, input, exec_env);
+ if (typeof callback === "function") {
+ callback(null, it);
+ }
+ return it;
+ } catch (err) {
+ // insert error message into structure
+ populateMessage(err); // possible side-effects on `err`
+ throw err;
+ }
+ },
+ assign: function (name, value) {
+ environment.bind(name, value);
+ },
+ registerFunction: function(name, implementation, signature) {
+ var func = defineFunction(implementation, signature);
+ environment.bind(name, func);
+ },
+ ast: function() {
+ return ast;
+ },
+ errors: function() {
+ return errors;
+ }
+ };
+ }
+
+ jsonata.parser = parser; // TODO remove this in a future release - use ast() instead
+
+ return jsonata;
+
+})();
+
+module.exports = jsonata;
+
+},{"./datetime":1,"./functions":2,"./parser":4,"./signature":5,"./utils":6}],4:[function(require,module,exports){
+/**
+ * © Copyright IBM Corp. 2016, 2018 All Rights Reserved
+ * Project name: JSONata
+ * This project is licensed under the MIT License, see LICENSE
+ */
+
+var parseSignature = require('./signature');
+
+const parser = (() => {
+ 'use strict';
+
+ var operators = {
+ '.': 75,
+ '[': 80,
+ ']': 0,
+ '{': 70,
+ '}': 0,
+ '(': 80,
+ ')': 0,
+ ',': 0,
+ '@': 80,
+ '#': 80,
+ ';': 80,
+ ':': 80,
+ '?': 20,
+ '+': 50,
+ '-': 50,
+ '*': 60,
+ '/': 60,
+ '%': 60,
+ '|': 20,
+ '=': 40,
+ '<': 40,
+ '>': 40,
+ '^': 40,
+ '**': 60,
+ '..': 20,
+ ':=': 10,
+ '!=': 40,
+ '<=': 40,
+ '>=': 40,
+ '~>': 40,
+ 'and': 30,
+ 'or': 25,
+ 'in': 40,
+ '&': 50,
+ '!': 0, // not an operator, but needed as a stop character for name tokens
+ '~': 0 // not an operator, but needed as a stop character for name tokens
+ };
+
+ var escapes = { // JSON string escape sequences - see json.org
+ '"': '"',
+ '\\': '\\',
+ '/': '/',
+ 'b': '\b',
+ 'f': '\f',
+ 'n': '\n',
+ 'r': '\r',
+ 't': '\t'
+ };
+
+ // Tokenizer (lexer) - invoked by the parser to return one token at a time
+ var tokenizer = function (path) {
+ var position = 0;
+ var length = path.length;
+
+ var create = function (type, value) {
+ var obj = {type: type, value: value, position: position};
+ return obj;
+ };
+
+ var scanRegex = function () {
+ // the prefix '/' will have been previously scanned. Find the end of the regex.
+ // search for closing '/' ignoring any that are escaped, or within brackets
+ var start = position;
+ var depth = 0;
+ var pattern;
+ var flags;
+
+ var isClosingSlash = function (position) {
+ if (path.charAt(position) === '/' && depth === 0) {
+ var backslashCount = 0;
+ while (path.charAt(position - (backslashCount + 1)) === '\\') {
+ backslashCount++;
+ }
+ if (backslashCount % 2 === 0) {
+ return true;
+ }
+ }
+ return false;
+ };
+
+ while (position < length) {
+ var currentChar = path.charAt(position);
+ if (isClosingSlash(position)) {
+ // end of regex found
+ pattern = path.substring(start, position);
+ if (pattern === '') {
+ throw {
+ code: "S0301",
+ stack: (new Error()).stack,
+ position: position
+ };
+ }
+ position++;
+ currentChar = path.charAt(position);
+ // flags
+ start = position;
+ while (currentChar === 'i' || currentChar === 'm') {
+ position++;
+ currentChar = path.charAt(position);
+ }
+ flags = path.substring(start, position) + 'g';
+ return new RegExp(pattern, flags);
+ }
+ if ((currentChar === '(' || currentChar === '[' || currentChar === '{') && path.charAt(position - 1) !== '\\') {
+ depth++;
+ }
+ if ((currentChar === ')' || currentChar === ']' || currentChar === '}') && path.charAt(position - 1) !== '\\') {
+ depth--;
+ }
+
+ position++;
+ }
+ throw {
+ code: "S0302",
+ stack: (new Error()).stack,
+ position: position
+ };
+ };
+
+ var next = function (prefix) {
+ if (position >= length) return null;
+ var currentChar = path.charAt(position);
+ // skip whitespace
+ while (position < length && ' \t\n\r\v'.indexOf(currentChar) > -1) {
+ position++;
+ currentChar = path.charAt(position);
+ }
+ // skip comments
+ if (currentChar === '/' && path.charAt(position + 1) === '*') {
+ var commentStart = position;
+ position += 2;
+ currentChar = path.charAt(position);
+ while (!(currentChar === '*' && path.charAt(position + 1) === '/')) {
+ currentChar = path.charAt(++position);
+ if (position >= length) {
+ // no closing tag
+ throw {
+ code: "S0106",
+ stack: (new Error()).stack,
+ position: commentStart
+ };
+ }
+ }
+ position += 2;
+ currentChar = path.charAt(position);
+ return next(prefix); // need this to swallow any following whitespace
+ }
+ // test for regex
+ if (prefix !== true && currentChar === '/') {
+ position++;
+ return create('regex', scanRegex());
+ }
+ // handle double-char operators
+ if (currentChar === '.' && path.charAt(position + 1) === '.') {
+ // double-dot .. range operator
+ position += 2;
+ return create('operator', '..');
+ }
+ if (currentChar === ':' && path.charAt(position + 1) === '=') {
+ // := assignment
+ position += 2;
+ return create('operator', ':=');
+ }
+ if (currentChar === '!' && path.charAt(position + 1) === '=') {
+ // !=
+ position += 2;
+ return create('operator', '!=');
+ }
+ if (currentChar === '>' && path.charAt(position + 1) === '=') {
+ // >=
+ position += 2;
+ return create('operator', '>=');
+ }
+ if (currentChar === '<' && path.charAt(position + 1) === '=') {
+ // <=
+ position += 2;
+ return create('operator', '<=');
+ }
+ if (currentChar === '*' && path.charAt(position + 1) === '*') {
+ // ** descendant wildcard
+ position += 2;
+ return create('operator', '**');
+ }
+ if (currentChar === '~' && path.charAt(position + 1) === '>') {
+ // ~> chain function
+ position += 2;
+ return create('operator', '~>');
+ }
+ // test for single char operators
+ if (Object.prototype.hasOwnProperty.call(operators, currentChar)) {
+ position++;
+ return create('operator', currentChar);
+ }
+ // test for string literals
+ if (currentChar === '"' || currentChar === "'") {
+ var quoteType = currentChar;
+ // double quoted string literal - find end of string
+ position++;
+ var qstr = "";
+ while (position < length) {
+ currentChar = path.charAt(position);
+ if (currentChar === '\\') { // escape sequence
+ position++;
+ currentChar = path.charAt(position);
+ if (Object.prototype.hasOwnProperty.call(escapes, currentChar)) {
+ qstr += escapes[currentChar];
+ } else if (currentChar === 'u') {
+ // \u should be followed by 4 hex digits
+ var octets = path.substr(position + 1, 4);
+ if (/^[0-9a-fA-F]+$/.test(octets)) {
+ var codepoint = parseInt(octets, 16);
+ qstr += String.fromCharCode(codepoint);
+ position += 4;
+ } else {
+ throw {
+ code: "S0104",
+ stack: (new Error()).stack,
+ position: position
+ };
+ }
+ } else {
+ // illegal escape sequence
+ throw {
+ code: "S0103",
+ stack: (new Error()).stack,
+ position: position,
+ token: currentChar
+ };
+
+ }
+ } else if (currentChar === quoteType) {
+ position++;
+ return create('string', qstr);
+ } else {
+ qstr += currentChar;
+ }
+ position++;
+ }
+ throw {
+ code: "S0101",
+ stack: (new Error()).stack,
+ position: position
+ };
+ }
+ // test for numbers
+ var numregex = /^-?(0|([1-9][0-9]*))(\.[0-9]+)?([Ee][-+]?[0-9]+)?/;
+ var match = numregex.exec(path.substring(position));
+ if (match !== null) {
+ var num = parseFloat(match[0]);
+ if (!isNaN(num) && isFinite(num)) {
+ position += match[0].length;
+ return create('number', num);
+ } else {
+ throw {
+ code: "S0102",
+ stack: (new Error()).stack,
+ position: position,
+ token: match[0]
+ };
+ }
+ }
+ // test for quoted names (backticks)
+ var name;
+ if (currentChar === '`') {
+ // scan for closing quote
+ position++;
+ var end = path.indexOf('`', position);
+ if (end !== -1) {
+ name = path.substring(position, end);
+ position = end + 1;
+ return create('name', name);
+ }
+ position = length;
+ throw {
+ code: "S0105",
+ stack: (new Error()).stack,
+ position: position
+ };
+ }
+ // test for names
+ var i = position;
+ var ch;
+ for (; ;) {
+ ch = path.charAt(i);
+ if (i === length || ' \t\n\r\v'.indexOf(ch) > -1 || Object.prototype.hasOwnProperty.call(operators, ch)) {
+ if (path.charAt(position) === '$') {
+ // variable reference
+ name = path.substring(position + 1, i);
+ position = i;
+ return create('variable', name);
+ } else {
+ name = path.substring(position, i);
+ position = i;
+ switch (name) {
+ case 'or':
+ case 'in':
+ case 'and':
+ return create('operator', name);
+ case 'true':
+ return create('value', true);
+ case 'false':
+ return create('value', false);
+ case 'null':
+ return create('value', null);
+ default:
+ if (position === length && name === '') {
+ // whitespace at end of input
+ return null;
+ }
+ return create('name', name);
+ }
+ }
+ } else {
+ i++;
+ }
+ }
+ };
+
+ return next;
+ };
+
+ // This parser implements the 'Top down operator precedence' algorithm developed by Vaughan R Pratt; http://dl.acm.org/citation.cfm?id=512931.
+ // and builds on the Javascript framework described by Douglas Crockford at http://javascript.crockford.com/tdop/tdop.html
+ // and in 'Beautiful Code', edited by Andy Oram and Greg Wilson, Copyright 2007 O'Reilly Media, Inc. 798-0-596-51004-6
+
+ var parser = function (source, recover) {
+ var node;
+ var lexer;
+
+ var symbol_table = {};
+ var errors = [];
+
+ var remainingTokens = function () {
+ var remaining = [];
+ if (node.id !== '(end)') {
+ remaining.push({type: node.type, value: node.value, position: node.position});
+ }
+ var nxt = lexer();
+ while (nxt !== null) {
+ remaining.push(nxt);
+ nxt = lexer();
+ }
+ return remaining;
+ };
+
+ var base_symbol = {
+ nud: function () {
+ // error - symbol has been invoked as a unary operator
+ var err = {
+ code: 'S0211',
+ token: this.value,
+ position: this.position
+ };
+
+ if (recover) {
+ err.remaining = remainingTokens();
+ err.type = 'error';
+ errors.push(err);
+ return err;
+ } else {
+ err.stack = (new Error()).stack;
+ throw err;
+ }
+ }
+ };
+
+ var symbol = function (id, bp) {
+ var s = symbol_table[id];
+ bp = bp || 0;
+ if (s) {
+ if (bp >= s.lbp) {
+ s.lbp = bp;
+ }
+ } else {
+ s = Object.create(base_symbol);
+ s.id = s.value = id;
+ s.lbp = bp;
+ symbol_table[id] = s;
+ }
+ return s;
+ };
+
+ var handleError = function (err) {
+ if (recover) {
+ // tokenize the rest of the buffer and add it to an error token
+ err.remaining = remainingTokens();
+ errors.push(err);
+ var symbol = symbol_table["(error)"];
+ node = Object.create(symbol);
+ node.error = err;
+ node.type = "(error)";
+ return node;
+ } else {
+ err.stack = (new Error()).stack;
+ throw err;
+ }
+ };
+
+ var advance = function (id, infix) {
+ if (id && node.id !== id) {
+ var code;
+ if (node.id === '(end)') {
+ // unexpected end of buffer
+ code = "S0203";
+ } else {
+ code = "S0202";
+ }
+ var err = {
+ code: code,
+ position: node.position,
+ token: node.value,
+ value: id
+ };
+ return handleError(err);
+ }
+ var next_token = lexer(infix);
+ if (next_token === null) {
+ node = symbol_table["(end)"];
+ node.position = source.length;
+ return node;
+ }
+ var value = next_token.value;
+ var type = next_token.type;
+ var symbol;
+ switch (type) {
+ case 'name':
+ case 'variable':
+ symbol = symbol_table["(name)"];
+ break;
+ case 'operator':
+ symbol = symbol_table[value];
+ if (!symbol) {
+ return handleError({
+ code: "S0204",
+ stack: (new Error()).stack,
+ position: next_token.position,
+ token: value
+ });
+ }
+ break;
+ case 'string':
+ case 'number':
+ case 'value':
+ symbol = symbol_table["(literal)"];
+ break;
+ case 'regex':
+ type = "regex";
+ symbol = symbol_table["(regex)"];
+ break;
+ /* istanbul ignore next */
+ default:
+ return handleError({
+ code: "S0205",
+ stack: (new Error()).stack,
+ position: next_token.position,
+ token: value
+ });
+ }
+
+ node = Object.create(symbol);
+ node.value = value;
+ node.type = type;
+ node.position = next_token.position;
+ return node;
+ };
+
+ // Pratt's algorithm
+ var expression = function (rbp) {
+ var left;
+ var t = node;
+ advance(null, true);
+ left = t.nud();
+ while (rbp < node.lbp) {
+ t = node;
+ advance();
+ left = t.led(left);
+ }
+ return left;
+ };
+
+ var terminal = function (id) {
+ var s = symbol(id, 0);
+ s.nud = function () {
+ return this;
+ };
+ };
+
+ // match infix operators
+ //
+ // left associative
+ var infix = function (id, bp, led) {
+ var bindingPower = bp || operators[id];
+ var s = symbol(id, bindingPower);
+ s.led = led || function (left) {
+ this.lhs = left;
+ this.rhs = expression(bindingPower);
+ this.type = "binary";
+ return this;
+ };
+ return s;
+ };
+
+ // match infix operators
+ //
+ // right associative
+ var infixr = function (id, bp, led) {
+ var s = symbol(id, bp);
+ s.led = led;
+ return s;
+ };
+
+ // match prefix operators
+ //
+ var prefix = function (id, nud) {
+ var s = symbol(id);
+ s.nud = nud || function () {
+ this.expression = expression(70);
+ this.type = "unary";
+ return this;
+ };
+ return s;
+ };
+
+ terminal("(end)");
+ terminal("(name)");
+ terminal("(literal)");
+ terminal("(regex)");
+ symbol(":");
+ symbol(";");
+ symbol(",");
+ symbol(")");
+ symbol("]");
+ symbol("}");
+ symbol(".."); // range operator
+ infix("."); // map operator
+ infix("+"); // numeric addition
+ infix("-"); // numeric subtraction
+ infix("*"); // numeric multiplication
+ infix("/"); // numeric division
+ infix("%"); // numeric modulus
+ infix("="); // equality
+ infix("<"); // less than
+ infix(">"); // greater than
+ infix("!="); // not equal to
+ infix("<="); // less than or equal
+ infix(">="); // greater than or equal
+ infix("&"); // string concatenation
+ infix("and"); // Boolean AND
+ infix("or"); // Boolean OR
+ infix("in"); // is member of array
+ terminal("and"); // the 'keywords' can also be used as terminals (field names)
+ terminal("or"); //
+ terminal("in"); //
+ prefix("-"); // unary numeric negation
+ infix("~>"); // function application
+
+ infixr("(error)", 10, function (left) {
+ this.lhs = left;
+
+ this.error = node.error;
+ this.remaining = remainingTokens();
+ this.type = 'error';
+ return this;
+ });
+
+ // field wildcard (single level)
+ prefix('*', function () {
+ this.type = "wildcard";
+ return this;
+ });
+
+ // descendant wildcard (multi-level)
+ prefix('**', function () {
+ this.type = "descendant";
+ return this;
+ });
+
+ // parent operator
+ prefix('%', function () {
+ this.type = "parent";
+ return this;
+ });
+
+ // function invocation
+ infix("(", operators['('], function (left) {
+ // left is is what we are trying to invoke
+ this.procedure = left;
+ this.type = 'function';
+ this.arguments = [];
+ if (node.id !== ')') {
+ for (; ;) {
+ if (node.type === 'operator' && node.id === '?') {
+ // partial function application
+ this.type = 'partial';
+ this.arguments.push(node);
+ advance('?');
+ } else {
+ this.arguments.push(expression(0));
+ }
+ if (node.id !== ',') break;
+ advance(',');
+ }
+ }
+ advance(")", true);
+ // if the name of the function is 'function' or λ, then this is function definition (lambda function)
+ if (left.type === 'name' && (left.value === 'function' || left.value === '\u03BB')) {
+ // all of the args must be VARIABLE tokens
+ this.arguments.forEach(function (arg, index) {
+ if (arg.type !== 'variable') {
+ return handleError({
+ code: "S0208",
+ stack: (new Error()).stack,
+ position: arg.position,
+ token: arg.value,
+ value: index + 1
+ });
+ }
+ });
+ this.type = 'lambda';
+ // is the next token a '<' - if so, parse the function signature
+ if (node.id === '<') {
+ var sigPos = node.position;
+ var depth = 1;
+ var sig = '<';
+ while (depth > 0 && node.id !== '{' && node.id !== '(end)') {
+ var tok = advance();
+ if (tok.id === '>') {
+ depth--;
+ } else if (tok.id === '<') {
+ depth++;
+ }
+ sig += tok.value;
+ }
+ advance('>');
+ try {
+ this.signature = parseSignature(sig);
+ } catch (err) {
+ // insert the position into this error
+ err.position = sigPos + err.offset;
+ return handleError(err);
+ }
+ }
+ // parse the function body
+ advance('{');
+ this.body = expression(0);
+ advance('}');
+ }
+ return this;
+ });
+
+ // parenthesis - block expression
+ prefix("(", function () {
+ var expressions = [];
+ while (node.id !== ")") {
+ expressions.push(expression(0));
+ if (node.id !== ";") {
+ break;
+ }
+ advance(";");
+ }
+ advance(")", true);
+ this.type = 'block';
+ this.expressions = expressions;
+ return this;
+ });
+
+ // array constructor
+ prefix("[", function () {
+ var a = [];
+ if (node.id !== "]") {
+ for (; ;) {
+ var item = expression(0);
+ if (node.id === "..") {
+ // range operator
+ var range = {type: "binary", value: "..", position: node.position, lhs: item};
+ advance("..");
+ range.rhs = expression(0);
+ item = range;
+ }
+ a.push(item);
+ if (node.id !== ",") {
+ break;
+ }
+ advance(",");
+ }
+ }
+ advance("]", true);
+ this.expressions = a;
+ this.type = "unary";
+ return this;
+ });
+
+ // filter - predicate or array index
+ infix("[", operators['['], function (left) {
+ if (node.id === "]") {
+ // empty predicate means maintain singleton arrays in the output
+ var step = left;
+ while (step && step.type === 'binary' && step.value === '[') {
+ step = step.lhs;
+ }
+ step.keepArray = true;
+ advance("]");
+ return left;
+ } else {
+ this.lhs = left;
+ this.rhs = expression(operators[']']);
+ this.type = 'binary';
+ advance("]", true);
+ return this;
+ }
+ });
+
+ // order-by
+ infix("^", operators['^'], function (left) {
+ advance("(");
+ var terms = [];
+ for (; ;) {
+ var term = {
+ descending: false
+ };
+ if (node.id === "<") {
+ // ascending sort
+ advance("<");
+ } else if (node.id === ">") {
+ // descending sort
+ term.descending = true;
+ advance(">");
+ } else {
+ //unspecified - default to ascending
+ }
+ term.expression = expression(0);
+ terms.push(term);
+ if (node.id !== ",") {
+ break;
+ }
+ advance(",");
+ }
+ advance(")");
+ this.lhs = left;
+ this.rhs = terms;
+ this.type = 'binary';
+ return this;
+ });
+
+ var objectParser = function (left) {
+ var a = [];
+ if (node.id !== "}") {
+ for (; ;) {
+ var n = expression(0);
+ advance(":");
+ var v = expression(0);
+ a.push([n, v]); // holds an array of name/value expression pairs
+ if (node.id !== ",") {
+ break;
+ }
+ advance(",");
+ }
+ }
+ advance("}", true);
+ if (typeof left === 'undefined') {
+ // NUD - unary prefix form
+ this.lhs = a;
+ this.type = "unary";
+ } else {
+ // LED - binary infix form
+ this.lhs = left;
+ this.rhs = a;
+ this.type = 'binary';
+ }
+ return this;
+ };
+
+ // object constructor
+ prefix("{", objectParser);
+
+ // object grouping
+ infix("{", operators['{'], objectParser);
+
+ // bind variable
+ infixr(":=", operators[':='], function (left) {
+ if (left.type !== 'variable') {
+ return handleError({
+ code: "S0212",
+ stack: (new Error()).stack,
+ position: left.position,
+ token: left.value
+ });
+ }
+ this.lhs = left;
+ this.rhs = expression(operators[':='] - 1); // subtract 1 from bindingPower for right associative operators
+ this.type = "binary";
+ return this;
+ });
+
+ // focus variable bind
+ infix("@", operators['@'], function (left) {
+ this.lhs = left;
+ this.rhs = expression(operators['@']);
+ if(this.rhs.type !== 'variable') {
+ return handleError({
+ code: "S0214",
+ stack: (new Error()).stack,
+ position: this.rhs.position,
+ token: "@"
+ });
+ }
+ this.type = "binary";
+ return this;
+ });
+
+ // index (position) variable bind
+ infix("#", operators['#'], function (left) {
+ this.lhs = left;
+ this.rhs = expression(operators['#']);
+ if(this.rhs.type !== 'variable') {
+ return handleError({
+ code: "S0214",
+ stack: (new Error()).stack,
+ position: this.rhs.position,
+ token: "#"
+ });
+ }
+ this.type = "binary";
+ return this;
+ });
+
+ // if/then/else ternary operator ?:
+ infix("?", operators['?'], function (left) {
+ this.type = 'condition';
+ this.condition = left;
+ this.then = expression(0);
+ if (node.id === ':') {
+ // else condition
+ advance(":");
+ this.else = expression(0);
+ }
+ return this;
+ });
+
+ // object transformer
+ prefix("|", function () {
+ this.type = 'transform';
+ this.pattern = expression(0);
+ advance('|');
+ this.update = expression(0);
+ if (node.id === ',') {
+ advance(',');
+ this.delete = expression(0);
+ }
+ advance('|');
+ return this;
+ });
+
+ // tail call optimization
+ // this is invoked by the post parser to analyse lambda functions to see
+ // if they make a tail call. If so, it is replaced by a thunk which will
+ // be invoked by the trampoline loop during function application.
+ // This enables tail-recursive functions to be written without growing the stack
+ var tailCallOptimize = function (expr) {
+ var result;
+ if (expr.type === 'function' && !expr.predicate) {
+ var thunk = {type: 'lambda', thunk: true, arguments: [], position: expr.position};
+ thunk.body = expr;
+ result = thunk;
+ } else if (expr.type === 'condition') {
+ // analyse both branches
+ expr.then = tailCallOptimize(expr.then);
+ if (typeof expr.else !== 'undefined') {
+ expr.else = tailCallOptimize(expr.else);
+ }
+ result = expr;
+ } else if (expr.type === 'block') {
+ // only the last expression in the block
+ var length = expr.expressions.length;
+ if (length > 0) {
+ expr.expressions[length - 1] = tailCallOptimize(expr.expressions[length - 1]);
+ }
+ result = expr;
+ } else {
+ result = expr;
+ }
+ return result;
+ };
+
+ var ancestorLabel = 0;
+ var ancestorIndex = 0;
+ var ancestry = [];
+
+ var seekParent = function (node, slot) {
+ switch (node.type) {
+ case 'name':
+ case 'wildcard':
+ slot.level--;
+ if(slot.level === 0) {
+ if (typeof node.ancestor === 'undefined') {
+ node.ancestor = slot;
+ } else {
+ // reuse the existing label
+ ancestry[slot.index].slot.label = node.ancestor.label;
+ node.ancestor = slot;
+ }
+ node.tuple = true;
+ }
+ break;
+ case 'parent':
+ slot.level++;
+ break;
+ case 'block':
+ // look in last expression in the block
+ if(node.expressions.length > 0) {
+ node.tuple = true;
+ slot = seekParent(node.expressions[node.expressions.length - 1], slot);
+ }
+ break;
+ case 'path':
+ // last step in path
+ node.tuple = true;
+ var index = node.steps.length - 1;
+ slot = seekParent(node.steps[index--], slot);
+ while (slot.level > 0 && index >= 0) {
+ // check previous steps
+ slot = seekParent(node.steps[index--], slot);
+ }
+ break;
+ default:
+ // error - can't derive ancestor
+ throw {
+ code: "S0217",
+ token: node.type,
+ position: node.position
+ };
+ }
+ return slot;
+ };
+
+ var pushAncestry = function(result, value) {
+ if(typeof value.seekingParent !== 'undefined' || value.type === 'parent') {
+ var slots = (typeof value.seekingParent !== 'undefined') ? value.seekingParent : [];
+ if (value.type === 'parent') {
+ slots.push(value.slot);
+ }
+ if(typeof result.seekingParent === 'undefined') {
+ result.seekingParent = slots;
+ } else {
+ Array.prototype.push.apply(result.seekingParent, slots);
+ }
+ }
+ };
+
+ var resolveAncestry = function(path) {
+ var index = path.steps.length - 1;
+ var laststep = path.steps[index];
+ var slots = (typeof laststep.seekingParent !== 'undefined') ? laststep.seekingParent : [];
+ if (laststep.type === 'parent') {
+ slots.push(laststep.slot);
+ }
+ for(var is = 0; is < slots.length; is++) {
+ var slot = slots[is];
+ index = path.steps.length - 2;
+ while (slot.level > 0) {
+ if (index < 0) {
+ if(typeof path.seekingParent === 'undefined') {
+ path.seekingParent = [slot];
+ } else {
+ path.seekingParent.push(slot);
+ }
+ break;
+ }
+ // try previous step
+ var step = path.steps[index--];
+ // multiple contiguous steps that bind the focus should be skipped
+ while(index >= 0 && step.focus && path.steps[index].focus) {
+ step = path.steps[index--];
+ }
+ slot = seekParent(step, slot);
+ }
+ }
+ };
+
+ // post-parse stage
+ // the purpose of this is to add as much semantic value to the parse tree as possible
+ // in order to simplify the work of the evaluator.
+ // This includes flattening the parts of the AST representing location paths,
+ // converting them to arrays of steps which in turn may contain arrays of predicates.
+ // following this, nodes containing '.' and '[' should be eliminated from the AST.
+ var processAST = function (expr) {
+ var result;
+ switch (expr.type) {
+ case 'binary':
+ switch (expr.value) {
+ case '.':
+ var lstep = processAST(expr.lhs);
+
+ if (lstep.type === 'path') {
+ result = lstep;
+ } else {
+ result = {type: 'path', steps: [lstep]};
+ }
+ if(lstep.type === 'parent') {
+ result.seekingParent = [lstep.slot];
+ }
+ var rest = processAST(expr.rhs);
+ if (rest.type === 'function' &&
+ rest.procedure.type === 'path' &&
+ rest.procedure.steps.length === 1 &&
+ rest.procedure.steps[0].type === 'name' &&
+ result.steps[result.steps.length - 1].type === 'function') {
+ // next function in chain of functions - will override a thenable
+ result.steps[result.steps.length - 1].nextFunction = rest.procedure.steps[0].value;
+ }
+ if (rest.type === 'path') {
+ Array.prototype.push.apply(result.steps, rest.steps);
+ } else {
+ if(typeof rest.predicate !== 'undefined') {
+ rest.stages = rest.predicate;
+ delete rest.predicate;
+ }
+ result.steps.push(rest);
+ }
+ // any steps within a path that are string literals, should be changed to 'name'
+ result.steps.filter(function (step) {
+ if (step.type === 'number' || step.type === 'value') {
+ // don't allow steps to be numbers or the values true/false/null
+ throw {
+ code: "S0213",
+ stack: (new Error()).stack,
+ position: step.position,
+ value: step.value
+ };
+ }
+ return step.type === 'string';
+ }).forEach(function (lit) {
+ lit.type = 'name';
+ });
+ // any step that signals keeping a singleton array, should be flagged on the path
+ if (result.steps.filter(function (step) {
+ return step.keepArray === true;
+ }).length > 0) {
+ result.keepSingletonArray = true;
+ }
+ // if first step is a path constructor, flag it for special handling
+ var firststep = result.steps[0];
+ if (firststep.type === 'unary' && firststep.value === '[') {
+ firststep.consarray = true;
+ }
+ // if the last step is an array constructor, flag it so it doesn't flatten
+ var laststep = result.steps[result.steps.length - 1];
+ if (laststep.type === 'unary' && laststep.value === '[') {
+ laststep.consarray = true;
+ }
+ resolveAncestry(result);
+ break;
+ case '[':
+ // predicated step
+ // LHS is a step or a predicated step
+ // RHS is the predicate expr
+ result = processAST(expr.lhs);
+ var step = result;
+ var type = 'predicate';
+ if (result.type === 'path') {
+ step = result.steps[result.steps.length - 1];
+ type = 'stages';
+ }
+ if (typeof step.group !== 'undefined') {
+ throw {
+ code: "S0209",
+ stack: (new Error()).stack,
+ position: expr.position
+ };
+ }
+ if (typeof step[type] === 'undefined') {
+ step[type] = [];
+ }
+ var predicate = processAST(expr.rhs);
+ if(typeof predicate.seekingParent !== 'undefined') {
+ predicate.seekingParent.forEach(slot => {
+ if(slot.level === 1) {
+ seekParent(step, slot);
+ } else {
+ slot.level--;
+ }
+ });
+ pushAncestry(step, predicate);
+ }
+ step[type].push({type: 'filter', expr: predicate, position: expr.position});
+ break;
+ case '{':
+ // group-by
+ // LHS is a step or a predicated step
+ // RHS is the object constructor expr
+ result = processAST(expr.lhs);
+ if (typeof result.group !== 'undefined') {
+ throw {
+ code: "S0210",
+ stack: (new Error()).stack,
+ position: expr.position
+ };
+ }
+ // object constructor - process each pair
+ result.group = {
+ lhs: expr.rhs.map(function (pair) {
+ return [processAST(pair[0]), processAST(pair[1])];
+ }),
+ position: expr.position
+ };
+ break;
+ case '^':
+ // order-by
+ // LHS is the array to be ordered
+ // RHS defines the terms
+ result = processAST(expr.lhs);
+ if (result.type !== 'path') {
+ result = {type: 'path', steps: [result]};
+ }
+ var sortStep = {type: 'sort', position: expr.position};
+ sortStep.terms = expr.rhs.map(function (terms) {
+ var expression = processAST(terms.expression);
+ pushAncestry(sortStep, expression);
+ return {
+ descending: terms.descending,
+ expression: expression
+ };
+ });
+ result.steps.push(sortStep);
+ resolveAncestry(result);
+ break;
+ case ':=':
+ result = {type: 'bind', value: expr.value, position: expr.position};
+ result.lhs = processAST(expr.lhs);
+ result.rhs = processAST(expr.rhs);
+ pushAncestry(result, result.rhs);
+ break;
+ case '@':
+ result = processAST(expr.lhs);
+ step = result;
+ if (result.type === 'path') {
+ step = result.steps[result.steps.length - 1];
+ }
+ // throw error if there are any predicates defined at this point
+ // at this point the only type of stages can be predicates
+ if(typeof step.stages !== 'undefined' || typeof step.predicate !== 'undefined') {
+ throw {
+ code: "S0215",
+ stack: (new Error()).stack,
+ position: expr.position
+ };
+ }
+ // also throw if this is applied after an 'order-by' clause
+ if(step.type === 'sort') {
+ throw {
+ code: "S0216",
+ stack: (new Error()).stack,
+ position: expr.position
+ };
+ }
+ if(expr.keepArray) {
+ step.keepArray = true;
+ }
+ step.focus = expr.rhs.value;
+ step.tuple = true;
+ break;
+ case '#':
+ result = processAST(expr.lhs);
+ step = result;
+ if (result.type === 'path') {
+ step = result.steps[result.steps.length - 1];
+ } else {
+ result = {type: 'path', steps: [result]};
+ if (typeof step.predicate !== 'undefined') {
+ step.stages = step.predicate;
+ delete step.predicate;
+ }
+ }
+ if (typeof step.stages === 'undefined') {
+ step.index = expr.rhs.value;
+ } else {
+ step.stages.push({type: 'index', value: expr.rhs.value, position: expr.position});
+ }
+ step.tuple = true;
+ break;
+ case '~>':
+ result = {type: 'apply', value: expr.value, position: expr.position};
+ result.lhs = processAST(expr.lhs);
+ result.rhs = processAST(expr.rhs);
+ break;
+ default:
+ result = {type: expr.type, value: expr.value, position: expr.position};
+ result.lhs = processAST(expr.lhs);
+ result.rhs = processAST(expr.rhs);
+ pushAncestry(result, result.lhs);
+ pushAncestry(result, result.rhs);
+ }
+ break;
+ case 'unary':
+ result = {type: expr.type, value: expr.value, position: expr.position};
+ if (expr.value === '[') {
+ // array constructor - process each item
+ result.expressions = expr.expressions.map(function (item) {
+ var value = processAST(item);
+ pushAncestry(result, value);
+ return value;
+ });
+ } else if (expr.value === '{') {
+ // object constructor - process each pair
+ result.lhs = expr.lhs.map(function (pair) {
+ var key = processAST(pair[0]);
+ pushAncestry(result, key);
+ var value = processAST(pair[1]);
+ pushAncestry(result, value);
+ return [key, value];
+ });
+ } else {
+ // all other unary expressions - just process the expression
+ result.expression = processAST(expr.expression);
+ // if unary minus on a number, then pre-process
+ if (expr.value === '-' && result.expression.type === 'number') {
+ result = result.expression;
+ result.value = -result.value;
+ } else {
+ pushAncestry(result, result.expression);
+ }
+ }
+ break;
+ case 'function':
+ case 'partial':
+ result = {type: expr.type, name: expr.name, value: expr.value, position: expr.position};
+ result.arguments = expr.arguments.map(function (arg) {
+ var argAST = processAST(arg);
+ pushAncestry(result, argAST);
+ return argAST;
+ });
+ result.procedure = processAST(expr.procedure);
+ break;
+ case 'lambda':
+ result = {
+ type: expr.type,
+ arguments: expr.arguments,
+ signature: expr.signature,
+ position: expr.position
+ };
+ var body = processAST(expr.body);
+ result.body = tailCallOptimize(body);
+ break;
+ case 'condition':
+ result = {type: expr.type, position: expr.position};
+ result.condition = processAST(expr.condition);
+ pushAncestry(result, result.condition);
+ result.then = processAST(expr.then);
+ pushAncestry(result, result.then);
+ if (typeof expr.else !== 'undefined') {
+ result.else = processAST(expr.else);
+ pushAncestry(result, result.else);
+ }
+ break;
+ case 'transform':
+ result = {type: expr.type, position: expr.position};
+ result.pattern = processAST(expr.pattern);
+ result.update = processAST(expr.update);
+ if (typeof expr.delete !== 'undefined') {
+ result.delete = processAST(expr.delete);
+ }
+ break;
+ case 'block':
+ result = {type: expr.type, position: expr.position};
+ // array of expressions - process each one
+ result.expressions = expr.expressions.map(function (item) {
+ var part = processAST(item);
+ pushAncestry(result, part);
+ if (part.consarray || (part.type === 'path' && part.steps[0].consarray)) {
+ result.consarray = true;
+ }
+ return part;
+ });
+ // TODO scan the array of expressions to see if any of them assign variables
+ // if so, need to mark the block as one that needs to create a new frame
+ break;
+ case 'name':
+ result = {type: 'path', steps: [expr]};
+ if (expr.keepArray) {
+ result.keepSingletonArray = true;
+ }
+ break;
+ case 'parent':
+ result = {type: 'parent', slot: { label: '!' + ancestorLabel++, level: 1, index: ancestorIndex++ } };
+ ancestry.push(result);
+ break;
+ case 'string':
+ case 'number':
+ case 'value':
+ case 'wildcard':
+ case 'descendant':
+ case 'variable':
+ case 'regex':
+ result = expr;
+ break;
+ case 'operator':
+ // the tokens 'and' and 'or' might have been used as a name rather than an operator
+ if (expr.value === 'and' || expr.value === 'or' || expr.value === 'in') {
+ expr.type = 'name';
+ result = processAST(expr);
+ } else /* istanbul ignore else */ if (expr.value === '?') {
+ // partial application
+ result = expr;
+ } else {
+ throw {
+ code: "S0201",
+ stack: (new Error()).stack,
+ position: expr.position,
+ token: expr.value
+ };
+ }
+ break;
+ case 'error':
+ result = expr;
+ if (expr.lhs) {
+ result = processAST(expr.lhs);
+ }
+ break;
+ default:
+ var code = "S0206";
+ /* istanbul ignore else */
+ if (expr.id === '(end)') {
+ code = "S0207";
+ }
+ var err = {
+ code: code,
+ position: expr.position,
+ token: expr.value
+ };
+ if (recover) {
+ errors.push(err);
+ return {type: 'error', error: err};
+ } else {
+ err.stack = (new Error()).stack;
+ throw err;
+ }
+ }
+ if (expr.keepArray) {
+ result.keepArray = true;
+ }
+ return result;
+ };
+
+ // now invoke the tokenizer and the parser and return the syntax tree
+ lexer = tokenizer(source);
+ advance();
+ // parse the tokens
+ var expr = expression(0);
+ if (node.id !== '(end)') {
+ var err = {
+ code: "S0201",
+ position: node.position,
+ token: node.value
+ };
+ handleError(err);
+ }
+ expr = processAST(expr);
+
+ if(expr.type === 'parent' || typeof expr.seekingParent !== 'undefined') {
+ // error - trying to derive ancestor at top level
+ throw {
+ code: "S0217",
+ token: expr.type,
+ position: expr.position
+ };
+ }
+
+ if (errors.length > 0) {
+ expr.errors = errors;
+ }
+
+ return expr;
+ };
+
+ return parser;
+})();
+
+module.exports = parser;
+
+},{"./signature":5}],5:[function(require,module,exports){
+/**
+ * © Copyright IBM Corp. 2016, 2018 All Rights Reserved
+ * Project name: JSONata
+ * This project is licensed under the MIT License, see LICENSE
+ */
+
+var utils = require('./utils');
+
+const signature = (() => {
+ 'use strict';
+
+ // A mapping between the function signature symbols and the full plural of the type
+ // Expected to be used in error messages
+ var arraySignatureMapping = {
+ "a": "arrays",
+ "b": "booleans",
+ "f": "functions",
+ "n": "numbers",
+ "o": "objects",
+ "s": "strings"
+ };
+
+ /**
+ * Parses a function signature definition and returns a validation function
+ * @param {string} signature - the signature between the
+ * @returns {Function} validation function
+ */
+ function parseSignature(signature) {
+ // create a Regex that represents this signature and return a function that when invoked,
+ // returns the validated (possibly fixed-up) arguments, or throws a validation error
+ // step through the signature, one symbol at a time
+ var position = 1;
+ var params = [];
+ var param = {};
+ var prevParam = param;
+ while (position < signature.length) {
+ var symbol = signature.charAt(position);
+ if (symbol === ':') {
+ // TODO figure out what to do with the return type
+ // ignore it for now
+ break;
+ }
+
+ var next = function () {
+ params.push(param);
+ prevParam = param;
+ param = {};
+ };
+
+ var findClosingBracket = function (str, start, openSymbol, closeSymbol) {
+ // returns the position of the closing symbol (e.g. bracket) in a string
+ // that balances the opening symbol at position start
+ var depth = 1;
+ var position = start;
+ while (position < str.length) {
+ position++;
+ symbol = str.charAt(position);
+ if (symbol === closeSymbol) {
+ depth--;
+ if (depth === 0) {
+ // we're done
+ break; // out of while loop
+ }
+ } else if (symbol === openSymbol) {
+ depth++;
+ }
+ }
+ return position;
+ };
+
+ switch (symbol) {
+ case 's': // string
+ case 'n': // number
+ case 'b': // boolean
+ case 'l': // not so sure about expecting null?
+ case 'o': // object
+ param.regex = '[' + symbol + 'm]';
+ param.type = symbol;
+ next();
+ break;
+ case 'a': // array
+ // normally treat any value as singleton array
+ param.regex = '[asnblfom]';
+ param.type = symbol;
+ param.array = true;
+ next();
+ break;
+ case 'f': // function
+ param.regex = 'f';
+ param.type = symbol;
+ next();
+ break;
+ case 'j': // any JSON type
+ param.regex = '[asnblom]';
+ param.type = symbol;
+ next();
+ break;
+ case 'x': // any type
+ param.regex = '[asnblfom]';
+ param.type = symbol;
+ next();
+ break;
+ case '-': // use context if param not supplied
+ prevParam.context = true;
+ prevParam.contextRegex = new RegExp(prevParam.regex); // pre-compiled to test the context type at runtime
+ prevParam.regex += '?';
+ break;
+ case '?': // optional param
+ case '+': // one or more
+ prevParam.regex += symbol;
+ break;
+ case '(': // choice of types
+ // search forward for matching ')'
+ var endParen = findClosingBracket(signature, position, '(', ')');
+ var choice = signature.substring(position + 1, endParen);
+ if (choice.indexOf('<') === -1) {
+ // no parameterized types, simple regex
+ param.regex = '[' + choice + 'm]';
+ } else {
+ // TODO harder
+ throw {
+ code: "S0402",
+ stack: (new Error()).stack,
+ value: choice,
+ offset: position
+ };
+ }
+ param.type = '(' + choice + ')';
+ position = endParen;
+ next();
+ break;
+ case '<': // type parameter - can only be applied to 'a' and 'f'
+ if (prevParam.type === 'a' || prevParam.type === 'f') {
+ // search forward for matching '>'
+ var endPos = findClosingBracket(signature, position, '<', '>');
+ prevParam.subtype = signature.substring(position + 1, endPos);
+ position = endPos;
+ } else {
+ throw {
+ code: "S0401",
+ stack: (new Error()).stack,
+ value: prevParam.type,
+ offset: position
+ };
+ }
+ break;
+ }
+ position++;
+ }
+ var regexStr = '^' +
+ params.map(function (param) {
+ return '(' + param.regex + ')';
+ }).join('') +
+ '$';
+ var regex = new RegExp(regexStr);
+ var getSymbol = function (value) {
+ var symbol;
+ if (utils.isFunction(value)) {
+ symbol = 'f';
+ } else {
+ var type = typeof value;
+ switch (type) {
+ case 'string':
+ symbol = 's';
+ break;
+ case 'number':
+ symbol = 'n';
+ break;
+ case 'boolean':
+ symbol = 'b';
+ break;
+ case 'object':
+ if (value === null) {
+ symbol = 'l';
+ } else if (Array.isArray(value)) {
+ symbol = 'a';
+ } else {
+ symbol = 'o';
+ }
+ break;
+ case 'undefined':
+ default:
+ // any value can be undefined, but should be allowed to match
+ symbol = 'm'; // m for missing
+ }
+ }
+ return symbol;
+ };
+
+ var throwValidationError = function (badArgs, badSig) {
+ // to figure out where this went wrong we need apply each component of the
+ // regex to each argument until we get to the one that fails to match
+ var partialPattern = '^';
+ var goodTo = 0;
+ for (var index = 0; index < params.length; index++) {
+ partialPattern += params[index].regex;
+ var match = badSig.match(partialPattern);
+ if (match === null) {
+ // failed here
+ throw {
+ code: "T0410",
+ stack: (new Error()).stack,
+ value: badArgs[goodTo],
+ index: goodTo + 1
+ };
+ }
+ goodTo = match[0].length;
+ }
+ // if it got this far, it's probably because of extraneous arguments (we
+ // haven't added the trailing '$' in the regex yet.
+ throw {
+ code: "T0410",
+ stack: (new Error()).stack,
+ value: badArgs[goodTo],
+ index: goodTo + 1
+ };
+ };
+
+ return {
+ definition: signature,
+ validate: function (args, context) {
+ var suppliedSig = '';
+ args.forEach(function (arg) {
+ suppliedSig += getSymbol(arg);
+ });
+ var isValid = regex.exec(suppliedSig);
+ if (isValid) {
+ var validatedArgs = [];
+ var argIndex = 0;
+ params.forEach(function (param, index) {
+ var arg = args[argIndex];
+ var match = isValid[index + 1];
+ if (match === '') {
+ if (param.context && param.contextRegex) {
+ // substitute context value for missing arg
+ // first check that the context value is the right type
+ var contextType = getSymbol(context);
+ // test contextType against the regex for this arg (without the trailing ?)
+ if (param.contextRegex.test(contextType)) {
+ validatedArgs.push(context);
+ } else {
+ // context value not compatible with this argument
+ throw {
+ code: "T0411",
+ stack: (new Error()).stack,
+ value: context,
+ index: argIndex + 1
+ };
+ }
+ } else {
+ validatedArgs.push(arg);
+ argIndex++;
+ }
+ } else {
+ // may have matched multiple args (if the regex ends with a '+'
+ // split into single tokens
+ match.split('').forEach(function (single) {
+ if (param.type === 'a') {
+ if (single === 'm') {
+ // missing (undefined)
+ arg = undefined;
+ } else {
+ arg = args[argIndex];
+ var arrayOK = true;
+ // is there type information on the contents of the array?
+ if (typeof param.subtype !== 'undefined') {
+ if (single !== 'a' && match !== param.subtype) {
+ arrayOK = false;
+ } else if (single === 'a') {
+ if (arg.length > 0) {
+ var itemType = getSymbol(arg[0]);
+ if (itemType !== param.subtype.charAt(0)) { // TODO recurse further
+ arrayOK = false;
+ } else {
+ // make sure every item in the array is this type
+ var differentItems = arg.filter(function (val) {
+ return (getSymbol(val) !== itemType);
+ });
+ arrayOK = (differentItems.length === 0);
+ }
+ }
+ }
+ }
+ if (!arrayOK) {
+ throw {
+ code: "T0412",
+ stack: (new Error()).stack,
+ value: arg,
+ index: argIndex + 1,
+ type: arraySignatureMapping[param.subtype]
+ };
+ }
+ // the function expects an array. If it's not one, make it so
+ if (single !== 'a') {
+ arg = [arg];
+ }
+ }
+ validatedArgs.push(arg);
+ argIndex++;
+ } else {
+ validatedArgs.push(arg);
+ argIndex++;
+ }
+ });
+ }
+ });
+ return validatedArgs;
+ }
+ throwValidationError(args, suppliedSig);
+ }
+ };
+ }
+
+ return parseSignature;
+})();
+
+module.exports = signature;
+
+},{"./utils":6}],6:[function(require,module,exports){
+/**
+ * © Copyright IBM Corp. 2016, 2018 All Rights Reserved
+ * Project name: JSONata
+ * This project is licensed under the MIT License, see LICENSE
+ */
+
+const utils = (() => {
+ 'use strict';
+
+ /**
+ * Check if value is a finite number
+ * @param {float} n - number to evaluate
+ * @returns {boolean} True if n is a finite number
+ */
+ function isNumeric(n) {
+ var isNum = false;
+ if(typeof n === 'number') {
+ isNum = !isNaN(n);
+ if (isNum && !isFinite(n)) {
+ throw {
+ code: "D1001",
+ value: n,
+ stack: (new Error()).stack
+ };
+ }
+ }
+ return isNum;
+ }
+
+ /**
+ * Returns true if the arg is an array of strings
+ * @param {*} arg - the item to test
+ * @returns {boolean} True if arg is an array of strings
+ */
+ function isArrayOfStrings(arg) {
+ var result = false;
+ /* istanbul ignore else */
+ if(Array.isArray(arg)) {
+ result = (arg.filter(function(item){return typeof item !== 'string';}).length === 0);
+ }
+ return result;
+ }
+
+ /**
+ * Returns true if the arg is an array of numbers
+ * @param {*} arg - the item to test
+ * @returns {boolean} True if arg is an array of numbers
+ */
+ function isArrayOfNumbers(arg) {
+ var result = false;
+ if(Array.isArray(arg)) {
+ result = (arg.filter(function(item){return !isNumeric(item);}).length === 0);
+ }
+ return result;
+ }
+
+ /**
+ * Create an empty sequence to contain query results
+ * @returns {Array} - empty sequence
+ */
+ function createSequence() {
+ var sequence = [];
+ sequence.sequence = true;
+ if (arguments.length === 1) {
+ sequence.push(arguments[0]);
+ }
+ return sequence;
+ }
+
+ /**
+ * Tests if a value is a sequence
+ * @param {*} value the value to test
+ * @returns {boolean} true if it's a sequence
+ */
+ function isSequence(value) {
+ return value.sequence === true && Array.isArray(value);
+ }
+
+ /**
+ *
+ * @param {Object} arg - expression to test
+ * @returns {boolean} - true if it is a function (lambda or built-in)
+ */
+ function isFunction(arg) {
+ return ((arg && (arg._jsonata_function === true || arg._jsonata_lambda === true)) || typeof arg === 'function');
+ }
+
+ /**
+ * Returns the arity (number of arguments) of the function
+ * @param {*} func - the function
+ * @returns {*} - the arity
+ */
+ function getFunctionArity(func) {
+ var arity = typeof func.arity === 'number' ? func.arity :
+ typeof func.implementation === 'function' ? func.implementation.length :
+ typeof func.length === 'number' ? func.length : func.arguments.length;
+ return arity;
+ }
+
+ /**
+ * Tests whether arg is a lambda function
+ * @param {*} arg - the value to test
+ * @returns {boolean} - true if it is a lambda function
+ */
+ function isLambda(arg) {
+ return arg && arg._jsonata_lambda === true;
+ }
+
+ // istanbul ignore next
+ var iteratorSymbol = (typeof Symbol === "function" ? Symbol : {}).iterator || "@@iterator";
+
+ /**
+ * @param {Object} arg - expression to test
+ * @returns {boolean} - true if it is iterable
+ */
+ function isIterable(arg) {
+ return (
+ typeof arg === 'object' &&
+ arg !== null &&
+ iteratorSymbol in arg &&
+ 'next' in arg &&
+ typeof arg.next === 'function'
+ );
+ }
+
+ /**
+ * Compares two values for equality
+ * @param {*} lhs first value
+ * @param {*} rhs second value
+ * @returns {boolean} true if they are deep equal
+ */
+ function isDeepEqual(lhs, rhs) {
+ if (lhs === rhs) {
+ return true;
+ }
+ if(typeof lhs === 'object' && typeof rhs === 'object' && lhs !== null && rhs !== null) {
+ if(Array.isArray(lhs) && Array.isArray(rhs)) {
+ // both arrays (or sequences)
+ // must be the same length
+ if(lhs.length !== rhs.length) {
+ return false;
+ }
+ // must contain same values in same order
+ for(var ii = 0; ii < lhs.length; ii++) {
+ if(!isDeepEqual(lhs[ii], rhs[ii])) {
+ return false;
+ }
+ }
+ return true;
+ }
+ // both objects
+ // must have the same set of keys (in any order)
+ var lkeys = Object.getOwnPropertyNames(lhs);
+ var rkeys = Object.getOwnPropertyNames(rhs);
+ if(lkeys.length !== rkeys.length) {
+ return false;
+ }
+ lkeys = lkeys.sort();
+ rkeys = rkeys.sort();
+ for(ii=0; ii < lkeys.length; ii++) {
+ if(lkeys[ii] !== rkeys[ii]) {
+ return false;
+ }
+ }
+ // must have the same values
+ for(ii=0; ii < lkeys.length; ii++) {
+ var key = lkeys[ii];
+ if(!isDeepEqual(lhs[key], rhs[key])) {
+ return false;
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @param {Object} arg - expression to test
+ * @returns {boolean} - true if it is a promise
+ */
+ function isPromise(arg) {
+ return (
+ typeof arg === 'object' &&
+ arg !== null &&
+ 'then' in arg &&
+ typeof arg.then === 'function'
+ );
+ }
+
+ /**
+ * converts a string to an array of characters
+ * @param {string} str - the input string
+ * @returns {Array} - the array of characters
+ */
+ function stringToArray(str) {
+ var arr = [];
+ for (let char of str) {
+ arr.push(char);
+ }
+ return arr;
+ }
+
+ return {
+ isNumeric,
+ isArrayOfStrings,
+ isArrayOfNumbers,
+ createSequence,
+ isSequence,
+ isFunction,
+ isLambda,
+ isIterable,
+ getFunctionArity,
+ isDeepEqual,
+ stringToArray,
+ isPromise
+ };
+})();
+
+module.exports = utils;
+
+},{}]},{},[3])(3)
+});
+
+
/***/ }),
/***/ 7175:
/***/ ((__unused_webpack_module, exports) => {
-var __webpack_unused_export__;
var navigator = {};
navigator.userAgent = false;
@@ -5489,105 +16558,105 @@ function X509(v){var o=ASN1HEX,s=o.getChildIdx,k=o.getV,y=o.dump,j=o.parse,b=o.g
var X509CRL=function(e){var a=KJUR,f=a.lang.String.isHex,m=ASN1HEX,k=m.getV,b=m.getTLV,h=m.getVbyList,c=m.getTLVbyList,d=m.getTLVbyListEx,i=m.getIdxbyList,g=m.getIdxbyListEx,l=m.getChildIdx,j=new X509();this.hex=null;this.posSigAlg=null;this.posRevCert=null;this.parsed=null;this._setPos=function(){var o=i(this.hex,0,[0,0]);var n=this.hex.substr(o,2);if(n=="02"){this.posSigAlg=1}else{if(n=="30"){this.posSigAlg=0}else{throw new Error("malformed 1st item of TBSCertList: "+n)}}var s=i(this.hex,0,[0,this.posSigAlg+3]);var r=this.hex.substr(s,2);if(r=="17"||r=="18"){var q,p;q=i(this.hex,0,[0,this.posSigAlg+4]);this.posRevCert=null;if(q!=-1){p=this.hex.substr(q,2);if(p=="30"){this.posRevCert=this.posSigAlg+4}}}else{if(r=="30"){this.posRevCert=this.posSigAlg+3}else{if(r=="a0"){this.posRevCert=null}else{throw new Error("malformed nextUpdate or revCert tag: "+r)}}}};this.getVersion=function(){if(this.posSigAlg==0){return null}return parseInt(h(this.hex,0,[0,0],"02"),16)+1};this.getSignatureAlgorithmField=function(){var n=c(this.hex,0,[0,this.posSigAlg],"30");return j.getAlgorithmIdentifierName(n)};this.getIssuer=function(){return j.getX500Name(this.getIssuerHex())};this.getIssuerHex=function(){return c(this.hex,0,[0,this.posSigAlg+1],"30")};this.getThisUpdate=function(){var n=h(this.hex,0,[0,this.posSigAlg+2]);return result=hextorstr(n)};this.getNextUpdate=function(){var o=i(this.hex,0,[0,this.posSigAlg+3]);var n=this.hex.substr(o,2);if(n!="17"&&n!="18"){return null}return hextorstr(k(this.hex,o))};this.getRevCertArray=function(){if(this.posRevCert==null){return null}var o=[];var n=i(this.hex,0,[0,this.posRevCert]);var p=l(this.hex,n);for(var q=0;q0){var b=":"+n.join(":")+":";if(b.indexOf(":"+k+":")==-1){throw"algorithm '"+k+"' not accepted in the list"}}if(k!="none"&&B===null){throw"key shall be specified to verify."}if(typeof B=="string"&&B.indexOf("-----BEGIN ")!=-1){B=KEYUTIL.getKey(B)}if(z=="RS"||z=="PS"){if(!(B instanceof m)){throw"key shall be a RSAKey obj for RS* and PS* algs"}}if(z=="ES"){if(!(B instanceof p)){throw"key shall be a ECDSA obj for ES* algs"}}if(k=="none"){}var u=null;if(t.jwsalg2sigalg[l.alg]===undefined){throw"unsupported alg name: "+k}else{u=t.jwsalg2sigalg[k]}if(u=="none"){throw"not supported"}else{if(u.substr(0,4)=="Hmac"){var o=null;if(B===undefined){throw"hexadecimal key shall be specified for HMAC"}var j=new s({alg:u,pass:B});j.updateString(c);o=j.doFinal();return A==o}else{if(u.indexOf("withECDSA")!=-1){var h=null;try{h=p.concatSigToASN1Sig(A)}catch(v){return false}var g=new d({alg:u});g.init(B);g.updateString(c);return g.verify(h)}else{var g=new d({alg:u});g.init(B);g.updateString(c);return g.verify(A)}}}};KJUR.jws.JWS.parse=function(g){var c=g.split(".");var b={};var f,e,d;if(c.length!=2&&c.length!=3){throw"malformed sJWS: wrong number of '.' splitted elements"}f=c[0];e=c[1];if(c.length==3){d=c[2]}b.headerObj=KJUR.jws.JWS.readSafeJSONString(b64utoutf8(f));b.payloadObj=KJUR.jws.JWS.readSafeJSONString(b64utoutf8(e));b.headerPP=JSON.stringify(b.headerObj,null," ");if(b.payloadObj==null){b.payloadPP=b64utoutf8(e)}else{b.payloadPP=JSON.stringify(b.payloadObj,null," ")}if(d!==undefined){b.sigHex=b64utohex(d)}return b};KJUR.jws.JWS.verifyJWT=function(e,l,r){var d=KJUR,j=d.jws,o=j.JWS,n=o.readSafeJSONString,p=o.inArray,f=o.includedArray;if(!isBase64URLDot(e)){return false}var k=e.split(".");if(k.length!=3){return false}var c=k[0];var i=k[1];var q=c+"."+i;var m=b64utohex(k[2]);var h=n(b64utoutf8(c));var g=n(b64utoutf8(i));if(h.alg===undefined){return false}if(r.alg===undefined){throw"acceptField.alg shall be specified"}if(!p(h.alg,r.alg)){return false}if(g.iss!==undefined&&typeof r.iss==="object"){if(!p(g.iss,r.iss)){return false}}if(g.sub!==undefined&&typeof r.sub==="object"){if(!p(g.sub,r.sub)){return false}}if(g.aud!==undefined&&typeof r.aud==="object"){if(typeof g.aud=="string"){if(!p(g.aud,r.aud)){return false}}else{if(typeof g.aud=="object"){if(!f(g.aud,r.aud)){return false}}}}var b=j.IntDate.getNow();if(r.verifyAt!==undefined&&typeof r.verifyAt==="number"){b=r.verifyAt}if(r.gracePeriod===undefined||typeof r.gracePeriod!=="number"){r.gracePeriod=0}if(g.exp!==undefined&&typeof g.exp=="number"){if(g.exp+r.gracePeriodl){this.aHeader.pop()}if(this.aSignature.length>l){this.aSignature.pop()}throw"addSignature failed: "+i}};this.verifyAll=function(h){if(this.aHeader.length!==h.length||this.aSignature.length!==h.length){return false}for(var g=0;g0){this.aHeader=g.headers}else{throw"malformed header"}if(typeof g.payload==="string"){this.sPayload=g.payload}else{throw"malformed signatures"}if(g.signatures.length>0){this.aSignature=g.signatures}else{throw"malformed signatures"}}catch(e){throw"malformed JWS-JS JSON object: "+e}}};this.getJSON=function(){return{headers:this.aHeader,payload:this.sPayload,signatures:this.aSignature}};this.isEmpty=function(){if(this.aHeader.length==0){return 1}return 0}};
-__webpack_unused_export__ = SecureRandom;
-__webpack_unused_export__ = rng_seed_time;
+exports.SecureRandom = SecureRandom;
+exports.rng_seed_time = rng_seed_time;
-__webpack_unused_export__ = BigInteger;
-__webpack_unused_export__ = RSAKey;
-__webpack_unused_export__ = KJUR.crypto.ECDSA;
-__webpack_unused_export__ = KJUR.crypto.DSA;
-__webpack_unused_export__ = KJUR.crypto.Signature;
-__webpack_unused_export__ = KJUR.crypto.MessageDigest;
-__webpack_unused_export__ = KJUR.crypto.Mac;
+exports.BigInteger = BigInteger;
+exports.RSAKey = RSAKey;
+exports.ECDSA = KJUR.crypto.ECDSA;
+exports.DSA = KJUR.crypto.DSA;
+exports.Signature = KJUR.crypto.Signature;
+exports.MessageDigest = KJUR.crypto.MessageDigest;
+exports.Mac = KJUR.crypto.Mac;
//exports.Cipher = KJUR.crypto.Cipher;
-exports.KZ = KEYUTIL;
-__webpack_unused_export__ = ASN1HEX;
-__webpack_unused_export__ = X509;
-__webpack_unused_export__ = X509CRL;
-__webpack_unused_export__ = CryptoJS;
+exports.KEYUTIL = KEYUTIL;
+exports.ASN1HEX = ASN1HEX;
+exports.X509 = X509;
+exports.X509CRL = X509CRL;
+exports.CryptoJS = CryptoJS;
// ext/base64.js
-__webpack_unused_export__ = b64tohex;
-__webpack_unused_export__ = b64toBA;
+exports.b64tohex = b64tohex;
+exports.b64toBA = b64toBA;
// ext/ec*.js
-__webpack_unused_export__ = ECFieldElementFp;
-__webpack_unused_export__ = ECPointFp;
-__webpack_unused_export__ = ECCurveFp;
+exports.ECFieldElementFp = ECFieldElementFp;
+exports.ECPointFp = ECPointFp;
+exports.ECCurveFp = ECCurveFp;
// base64x.js
-__webpack_unused_export__ = stoBA;
-__webpack_unused_export__ = BAtos;
-__webpack_unused_export__ = BAtohex;
-__webpack_unused_export__ = stohex;
-__webpack_unused_export__ = stob64;
-__webpack_unused_export__ = stob64u;
-__webpack_unused_export__ = b64utos;
-__webpack_unused_export__ = b64tob64u;
-__webpack_unused_export__ = b64utob64;
-__webpack_unused_export__ = hex2b64;
-__webpack_unused_export__ = hextob64u;
-__webpack_unused_export__ = b64utohex;
-__webpack_unused_export__ = utf8tob64u;
-__webpack_unused_export__ = b64utoutf8;
-__webpack_unused_export__ = utf8tob64;
-__webpack_unused_export__ = b64toutf8;
-__webpack_unused_export__ = utf8tohex;
-__webpack_unused_export__ = hextoutf8;
-__webpack_unused_export__ = hextorstr;
-__webpack_unused_export__ = rstrtohex;
-__webpack_unused_export__ = hextob64;
-__webpack_unused_export__ = hextob64nl;
-__webpack_unused_export__ = b64nltohex;
-__webpack_unused_export__ = hextopem;
-__webpack_unused_export__ = pemtohex;
-__webpack_unused_export__ = hextoArrayBuffer;
-__webpack_unused_export__ = ArrayBuffertohex;
-__webpack_unused_export__ = zulutomsec;
-__webpack_unused_export__ = msectozulu;
-__webpack_unused_export__ = zulutosec;
-__webpack_unused_export__ = zulutodate;
-__webpack_unused_export__ = datetozulu;
-__webpack_unused_export__ = uricmptohex;
-__webpack_unused_export__ = hextouricmp;
-__webpack_unused_export__ = ipv6tohex;
-__webpack_unused_export__ = hextoipv6;
-__webpack_unused_export__ = hextoip;
-__webpack_unused_export__ = iptohex;
-__webpack_unused_export__ = ucs2hextoutf8;
-__webpack_unused_export__ = encodeURIComponentAll;
-__webpack_unused_export__ = newline_toUnix;
-__webpack_unused_export__ = newline_toDos;
-__webpack_unused_export__ = hextoposhex;
-__webpack_unused_export__ = intarystrtohex;
-__webpack_unused_export__ = strdiffidx;
-__webpack_unused_export__ = oidtohex;
-__webpack_unused_export__ = hextooid;
-__webpack_unused_export__ = strpad;
-__webpack_unused_export__ = bitstrtoint;
-__webpack_unused_export__ = inttobitstr;
-__webpack_unused_export__ = bitstrtobinstr;
-__webpack_unused_export__ = binstrtobitstr;
-__webpack_unused_export__ = isBase64URLDot;
-__webpack_unused_export__ = namearraytobinstr;
-__webpack_unused_export__ = extendClass;
-__webpack_unused_export__ = foldnl;
-__webpack_unused_export__ = b64topem;
-__webpack_unused_export__ = pemtob64;
-__webpack_unused_export__ = timetogen;
-__webpack_unused_export__ = aryval;
-__webpack_unused_export__ = inttohex;
-__webpack_unused_export__ = twoscompl;
+exports.stoBA = stoBA;
+exports.BAtos = BAtos;
+exports.BAtohex = BAtohex;
+exports.stohex = stohex;
+exports.stob64 = stob64;
+exports.stob64u = stob64u;
+exports.b64utos = b64utos;
+exports.b64tob64u = b64tob64u;
+exports.b64utob64 = b64utob64;
+exports.hex2b64 = hex2b64;
+exports.hextob64u = hextob64u;
+exports.b64utohex = b64utohex;
+exports.utf8tob64u = utf8tob64u;
+exports.b64utoutf8 = b64utoutf8;
+exports.utf8tob64 = utf8tob64;
+exports.b64toutf8 = b64toutf8;
+exports.utf8tohex = utf8tohex;
+exports.hextoutf8 = hextoutf8;
+exports.hextorstr = hextorstr;
+exports.rstrtohex = rstrtohex;
+exports.hextob64 = hextob64;
+exports.hextob64nl = hextob64nl;
+exports.b64nltohex = b64nltohex;
+exports.hextopem = hextopem;
+exports.pemtohex = pemtohex;
+exports.hextoArrayBuffer = hextoArrayBuffer;
+exports.ArrayBuffertohex = ArrayBuffertohex;
+exports.zulutomsec = zulutomsec;
+exports.msectozulu = msectozulu;
+exports.zulutosec = zulutosec;
+exports.zulutodate = zulutodate;
+exports.datetozulu = datetozulu;
+exports.uricmptohex = uricmptohex;
+exports.hextouricmp = hextouricmp;
+exports.ipv6tohex = ipv6tohex;
+exports.hextoipv6 = hextoipv6;
+exports.hextoip = hextoip;
+exports.iptohex = iptohex;
+exports.ucs2hextoutf8 = ucs2hextoutf8;
+exports.encodeURIComponentAll = encodeURIComponentAll;
+exports.newline_toUnix = newline_toUnix;
+exports.newline_toDos = newline_toDos;
+exports.hextoposhex = hextoposhex;
+exports.intarystrtohex = intarystrtohex;
+exports.strdiffidx = strdiffidx;
+exports.oidtohex = oidtohex;
+exports.hextooid = hextooid;
+exports.strpad = strpad;
+exports.bitstrtoint = bitstrtoint;
+exports.inttobitstr = inttobitstr;
+exports.bitstrtobinstr = bitstrtobinstr;
+exports.binstrtobitstr = binstrtobitstr;
+exports.isBase64URLDot = isBase64URLDot;
+exports.namearraytobinstr = namearraytobinstr;
+exports.extendClass = extendClass;
+exports.foldnl = foldnl;
+exports.b64topem = b64topem;
+exports.pemtob64 = pemtob64;
+exports.timeogen = timetogen;
+exports.aryval = aryval;
+exports.inttohex = inttohex;
+exports.twoscompl = twoscompl;
// name spaces
-exports.fs = KJUR;
-__webpack_unused_export__ = KJUR.crypto;
-__webpack_unused_export__ = KJUR.asn1;
-__webpack_unused_export__ = KJUR.jws;
-__webpack_unused_export__ = KJUR.lang;
+exports.KJUR = KJUR;
+exports.crypto = KJUR.crypto;
+exports.asn1 = KJUR.asn1;
+exports.jws = KJUR.jws;
+exports.lang = KJUR.lang;
-__webpack_unused_export__ = VERSION;
-__webpack_unused_export__ = VERSION_FULL;
+exports.VERSION = VERSION;
+exports.VERSION_FULL = VERSION_FULL;
@@ -5598,10 +16667,12 @@ __webpack_unused_export__ = VERSION_FULL;
/***/ 1531:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+"use strict";
const EventEmitter = __nccwpck_require__(2361);
const JSONB = __nccwpck_require__(2820);
+const compressBrotli = __nccwpck_require__(5728);
const loadStore = options => {
const adapters = {
@@ -5650,10 +16721,13 @@ class Keyv extends EventEmitter {
this.opts.store = loadStore(adapterOptions);
}
- if (this.opts.compression) {
- const compression = this.opts.compression;
- this.opts.serialize = compression.serialize.bind(compression);
- this.opts.deserialize = compression.deserialize.bind(compression);
+ if (this.opts.compress) {
+ const brotli = compressBrotli(this.opts.compress.opts);
+ this.opts.serialize = async ({value, expires}) => brotli.serialize({value: await brotli.compress(value), expires});
+ this.opts.deserialize = async data => {
+ const {value, expires} = brotli.deserialize(data);
+ return {value: await brotli.decompress(value), expires};
+ };
}
if (typeof this.opts.store.on === 'function' && emitErrors) {
@@ -5666,7 +16740,7 @@ class Keyv extends EventEmitter {
for await (const [key, raw] of typeof iterator === 'function'
? iterator(this.opts.store.namespace)
: iterator) {
- const data = await this.opts.deserialize(raw);
+ const data = this.opts.deserialize(raw);
if (this.opts.store.namespace && !key.includes(this.opts.store.namespace)) {
continue;
}
@@ -5718,7 +16792,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) : (this.opts.compression ? this.opts.deserialize(data) : data))
+ .then(data => (typeof data === 'string') ? this.opts.deserialize(data) : data)
.then(data => {
if (data === undefined || data === null) {
return undefined;
@@ -5740,35 +16814,44 @@ class Keyv extends EventEmitter {
data.push(value.value);
}
- return data;
+ return data.every(x => x === undefined) ? [] : data;
});
}
return Promise.resolve()
.then(() => isArray ? store.getMany(keyPrefixed) : store.get(keyPrefixed))
- .then(data => (typeof data === 'string') ? this.opts.deserialize(data) : (this.opts.compression ? this.opts.deserialize(data) : data))
+ .then(data => (typeof data === 'string') ? this.opts.deserialize(data) : data)
.then(data => {
if (data === undefined || data === null) {
return undefined;
}
if (isArray) {
- return data.map((row, index) => {
+ const result = [];
+
+ if (data.length === 0) {
+ return [];
+ }
+
+ for (let row of data) {
if ((typeof row === 'string')) {
row = this.opts.deserialize(row);
}
if (row === undefined || row === null) {
- return undefined;
+ result.push(undefined);
+ continue;
}
if (typeof row.expires === 'number' && Date.now() > row.expires) {
- this.delete(key[index]).then(() => undefined);
- return undefined;
+ this.delete(key).then(() => undefined);
+ result.push(undefined);
+ } else {
+ result.push((options && options.raw) ? row : row.value);
}
+ }
- return (options && options.raw) ? row : row.value;
- });
+ return result.every(x => x === undefined) ? [] : result;
}
if (typeof data.expires === 'number' && Date.now() > data.expires) {
@@ -5861,132 +16944,537 @@ module.exports = Keyv;
/***/ }),
-/***/ 9273:
+/***/ 9662:
/***/ ((module) => {
+"use strict";
+module.exports = object => {
+ const result = {};
-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;
+ for (const [key, value] of Object.entries(object)) {
+ result[key.toLowerCase()] = value;
}
- _set(key, value) {
- this.cache.set(key, value);
- this._size++;
+ return result;
+};
- 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);
+/***/ }),
+
+/***/ 2610:
+/***/ ((module) => {
+
+"use strict";
+
+
+// We define these manually to ensure they're always copied
+// even if they would move up the prototype chain
+// https://nodejs.org/api/http.html#http_class_http_incomingmessage
+const knownProps = [
+ 'destroy',
+ 'setTimeout',
+ 'socket',
+ 'headers',
+ 'trailers',
+ 'rawHeaders',
+ 'statusCode',
+ 'httpVersion',
+ 'httpVersionMinor',
+ 'httpVersionMajor',
+ 'rawTrailers',
+ 'statusMessage'
+];
+
+module.exports = (fromStream, toStream) => {
+ const fromProps = new Set(Object.keys(fromStream).concat(knownProps));
+
+ for (const prop of fromProps) {
+ // Don't overwrite existing properties
+ if (prop in toStream) {
+ continue;
+ }
+
+ toStream[prop] = typeof fromStream[prop] === 'function' ? fromStream[prop].bind(fromStream) : fromStream[prop];
+ }
+};
+
+
+/***/ }),
+
+/***/ 7952:
+/***/ ((module) => {
+
+"use strict";
+
+
+// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
+const DATA_URL_DEFAULT_MIME_TYPE = 'text/plain';
+const DATA_URL_DEFAULT_CHARSET = 'us-ascii';
+
+const testParameter = (name, filters) => {
+ return filters.some(filter => filter instanceof RegExp ? filter.test(name) : filter === name);
+};
+
+const normalizeDataURL = (urlString, {stripHash}) => {
+ const match = /^data:(?[^,]*?),(?[^#]*?)(?:#(?.*))?$/.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 '';
}
}
- this.oldCache = this.cache;
- this.cache = new Map();
+ 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('/') + '/';
}
}
- get(key) {
- if (this.cache.has(key)) {
- return this.cache.get(key);
- }
+ if (urlObj.hostname) {
+ // Remove trailing dot
+ urlObj.hostname = urlObj.hostname.replace(/\.$/, '');
- if (this.oldCache.has(key)) {
- const value = this.oldCache.get(key);
- this.oldCache.delete(key);
- this._set(key, value);
- return value;
+ // 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\./, '');
}
}
- 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;
+ // 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);
}
}
}
- get size() {
- let oldCacheSize = 0;
- for (const key of this.oldCache.keys()) {
- if (!this.cache.has(key)) {
- oldCacheSize++;
- }
- }
+ if (options.removeQueryParameters === true) {
+ urlObj.search = '';
+ }
- return Math.min(this._size + oldCacheSize, this.maxSize);
+ // 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) => {
+
+"use strict";
+
+
+class CancelError extends Error {
+ constructor(reason) {
+ super(reason || 'Promise was canceled');
+ this.name = 'CancelError';
+ }
+
+ get isCanceled() {
+ return true;
}
}
-module.exports = QuickLRU;
+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);
+ }
+ }
+
+ this._isCanceled = true;
+ if (this._rejectOnCancel) {
+ this._reject(new CancelError(reason));
+ }
+ }
+
+ get isCanceled() {
+ return this._isCanceled;
+ }
+}
+
+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
/***/ }),
@@ -5994,51 +17482,67 @@ module.exports = QuickLRU;
/***/ 6624:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+"use strict";
const tls = __nccwpck_require__(4404);
-module.exports = (options = {}, connect = tls.connect) => new Promise((resolve, reject) => {
- let timeout = false;
-
- let socket;
-
- const callback = async () => {
- await socketPromise;
-
- socket.off('timeout', onTimeout);
- socket.off('error', reject);
-
+module.exports = (options = {}) => new Promise((resolve, reject) => {
+ const socket = tls.connect(options, () => {
if (options.resolveSocket) {
- resolve({alpnProtocol: socket.alpnProtocol, socket, timeout});
-
- if (timeout) {
- await Promise.resolve();
- socket.emit('timeout');
- }
+ socket.off('error', reject);
+ resolve({alpnProtocol: socket.alpnProtocol, socket});
} else {
socket.destroy();
- resolve({alpnProtocol: socket.alpnProtocol, timeout});
+ resolve({alpnProtocol: socket.alpnProtocol});
}
- };
+ });
- 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);
- }
- })();
+ socket.on('error', reject);
});
+/***/ }),
+
+/***/ 9004:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+"use strict";
+
+
+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:
@@ -6052,6 +17556,7 @@ module.exports = __nccwpck_require__(4219);
/***/ 4219:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+"use strict";
var net = __nccwpck_require__(1808);
@@ -6323,6 +17828,7 @@ exports.debug = debug; // for test
/***/ 5840:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -6408,6 +17914,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
/***/ 4569:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -6437,6 +17944,7 @@ exports["default"] = _default;
/***/ 5332:
/***/ ((__unused_webpack_module, exports) => {
+"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -6451,6 +17959,7 @@ exports["default"] = _default;
/***/ 2746:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -6502,6 +18011,7 @@ exports["default"] = _default;
/***/ 814:
/***/ ((__unused_webpack_module, exports) => {
+"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -6516,6 +18026,7 @@ exports["default"] = _default;
/***/ 807:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -6546,6 +18057,7 @@ function rng() {
/***/ 5274:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -6575,6 +18087,7 @@ exports["default"] = _default;
/***/ 8950:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -6620,6 +18133,7 @@ exports["default"] = _default;
/***/ 8628:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -6733,6 +18247,7 @@ exports["default"] = _default;
/***/ 6409:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -6755,6 +18270,7 @@ exports["default"] = _default;
/***/ 5998:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -6839,6 +18355,7 @@ function _default(name, version, hashfunc) {
/***/ 5122:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -6882,6 +18399,7 @@ exports["default"] = _default;
/***/ 9120:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -6904,6 +18422,7 @@ exports["default"] = _default;
/***/ 6900:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -6927,6 +18446,7 @@ exports["default"] = _default;
/***/ 1595:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -6951,7151 +18471,288 @@ exports["default"] = _default;
/***/ }),
-/***/ 9491:
+/***/ 2940:
/***/ ((module) => {
-module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("assert");
+// 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
+ }
+}
+
/***/ }),
-/***/ 4300:
-/***/ ((module) => {
+/***/ 3348:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("buffer");
-
-/***/ }),
-
-/***/ 6113:
-/***/ ((module) => {
-
-module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("crypto");
-
-/***/ }),
-
-/***/ 2361:
-/***/ ((module) => {
-
-module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("events");
-
-/***/ }),
-
-/***/ 7147:
-/***/ ((module) => {
-
-module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("fs");
-
-/***/ }),
-
-/***/ 3685:
-/***/ ((module) => {
-
-module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("http");
-
-/***/ }),
-
-/***/ 5158:
-/***/ ((module) => {
-
-module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("http2");
-
-/***/ }),
-
-/***/ 5687:
-/***/ ((module) => {
-
-module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("https");
-
-/***/ }),
-
-/***/ 1808:
-/***/ ((module) => {
-
-module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("net");
-
-/***/ }),
-
-/***/ 2037:
-/***/ ((module) => {
-
-module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("os");
-
-/***/ }),
-
-/***/ 1017:
-/***/ ((module) => {
-
-module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("path");
-
-/***/ }),
-
-/***/ 2781:
-/***/ ((module) => {
-
-module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("stream");
-
-/***/ }),
-
-/***/ 4404:
-/***/ ((module) => {
-
-module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("tls");
-
-/***/ }),
-
-/***/ 7310:
-/***/ ((module) => {
-
-module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("url");
-
-/***/ }),
-
-/***/ 3837:
-/***/ ((module) => {
-
-module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("util");
-
-/***/ }),
-
-/***/ 9796:
-/***/ ((module) => {
-
-module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("zlib");
-
-/***/ })
-
-/******/ });
-/************************************************************************/
-/******/ // The module cache
-/******/ var __webpack_module_cache__ = {};
-/******/
-/******/ // The require function
-/******/ function __nccwpck_require__(moduleId) {
-/******/ // Check if module is in cache
-/******/ var cachedModule = __webpack_module_cache__[moduleId];
-/******/ if (cachedModule !== undefined) {
-/******/ return cachedModule.exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = __webpack_module_cache__[moduleId] = {
-/******/ // no module.id needed
-/******/ // no module.loaded needed
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ var threw = true;
-/******/ try {
-/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __nccwpck_require__);
-/******/ threw = false;
-/******/ } finally {
-/******/ if(threw) delete __webpack_module_cache__[moduleId];
-/******/ }
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/************************************************************************/
-/******/ /* webpack/runtime/compat */
-/******/
-/******/ if (typeof __nccwpck_require__ !== 'undefined') __nccwpck_require__.ab = new URL('.', import.meta.url).pathname.slice(import.meta.url.match(/^file:\/\/\/\w:/) ? 1 : 0, -1) + "/";
-/******/
-/************************************************************************/
-var __webpack_exports__ = {};
-// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
-(() => {
-
-// EXTERNAL MODULE: ./node_modules/@actions/core/lib/core.js
-var core = __nccwpck_require__(2186);
-;// 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
- * @param {string} dataKey
- * @param {boolean=} isEnvVar
- */
-function normalizeOutputKey(dataKey, isEnvVar = false) {
- let outputKey = dataKey
- .replace(".", "__")
- .replace(new RegExp("-", "g"), "")
- .replace(/[^\p{L}\p{N}_-]/gu, "");
- if (isEnvVar) {
- outputKey = outputKey.toUpperCase();
- }
- return outputKey;
-}
-
-
-
-;// CONCATENATED MODULE: ./src/constants.js
-const WILDCARD = '*';
-
-
-
-// EXTERNAL MODULE: external "fs"
-var external_fs_ = __nccwpck_require__(7147);
-// EXTERNAL MODULE: ./node_modules/jsrsasign/lib/jsrsasign.js
-var jsrsasign = __nccwpck_require__(7175);
-;// CONCATENATED MODULE: ./src/auth.js
// @ts-check
+const core = __nccwpck_require__(2186);
+const command = __nccwpck_require__(7351);
+const got = (__nccwpck_require__(3061)["default"]);
+const jsonata = __nccwpck_require__(4245);
+const { normalizeOutputKey } = __nccwpck_require__(1608);
+const { WILDCARD } = __nccwpck_require__(4438);
+
+const { auth: { retrieveToken }, secrets: { getSecrets } } = __nccwpck_require__(4351);
+
+const AUTH_METHODS = ['approle', 'token', 'github', 'jwt', 'kubernetes', 'ldap', 'userpass'];
+const ENCODING_TYPES = ['base64', 'hex', 'utf8'];
+
+async function exportSecrets() {
+ const vaultUrl = core.getInput('url', { required: true });
+ const vaultNamespace = core.getInput('namespace', { required: false });
+ const extraHeaders = parseHeadersInput('extraHeaders', { required: false });
+ const exportEnv = core.getInput('exportEnv', { required: false }) != 'false';
+ const outputToken = (core.getInput('outputToken', { required: false }) || 'false').toLowerCase() != 'false';
+ const exportToken = (core.getInput('exportToken', { required: false }) || 'false').toLowerCase() != 'false';
+
+ const secretsInput = core.getInput('secrets', { required: false });
+ const secretRequests = parseSecretsInput(secretsInput);
+
+ const secretEncodingType = core.getInput('secretEncodingType', { required: false });
+
+ const vaultMethod = (core.getInput('method', { required: false }) || 'token').toLowerCase();
+ const authPayload = core.getInput('authPayload', { required: false });
+ if (!AUTH_METHODS.includes(vaultMethod) && !authPayload) {
+ throw Error(`Sorry, the provided authentication method ${vaultMethod} is not currently supported and no custom authPayload was provided.`);
+ }
+
+ const defaultOptions = {
+ prefixUrl: vaultUrl,
+ headers: {},
+ https: {},
+ retry: {
+ statusCodes: [
+ ...got.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,
+ ]
+ }
+ }
+
+ const tlsSkipVerify = (core.getInput('tlsSkipVerify', { required: false }) || 'false').toLowerCase() != 'false';
+ if (tlsSkipVerify === true) {
+ defaultOptions.https.rejectUnauthorized = false;
+ }
+
+ const caCertificateRaw = core.getInput('caCertificate', { required: false });
+ if (caCertificateRaw != null) {
+ defaultOptions.https.certificateAuthority = Buffer.from(caCertificateRaw, 'base64').toString();
+ }
+
+ const clientCertificateRaw = core.getInput('clientCertificate', { required: false });
+ if (clientCertificateRaw != null) {
+ defaultOptions.https.certificate = Buffer.from(clientCertificateRaw, 'base64').toString();
+ }
+
+ const clientKeyRaw = core.getInput('clientKey', { required: false });
+ if (clientKeyRaw != null) {
+ defaultOptions.https.key = Buffer.from(clientKeyRaw, 'base64').toString();
+ }
+
+ for (const [headerName, headerValue] of extraHeaders) {
+ defaultOptions.headers[headerName] = headerValue;
+ }
+
+ if (vaultNamespace != null) {
+ defaultOptions.headers["X-Vault-Namespace"] = vaultNamespace;
+ }
+
+ const vaultToken = await retrieveToken(vaultMethod, got.extend(defaultOptions));
+ core.setSecret(vaultToken)
+ defaultOptions.headers['X-Vault-Token'] = vaultToken;
+ const client = got.extend(defaultOptions);
+
+ if (outputToken === true) {
+ core.setOutput('vault_token', `${vaultToken}`);
+ }
+ if (exportToken === true) {
+ core.exportVariable('VAULT_TOKEN', `${vaultToken}`);
+ }
+
+ const requests = secretRequests.map(request => {
+ const { path, selector } = request;
+ return request;
+ });
+
+ const results = await getSecrets(requests, client);
+
+
+ for (const result of results) {
+ // Output the result
+
+ var value = result.value;
+ const request = result.request;
+ const cachedResponse = result.cachedResponse;
+
+ if (cachedResponse) {
+ core.debug('ℹ using cached response');
+ }
+
+ // if a secret is encoded, decode it
+ if (ENCODING_TYPES.includes(secretEncodingType)) {
+ value = Buffer.from(value, secretEncodingType).toString();
+ }
+
+ for (const line of value.replace(/\r/g, '').split('\n')) {
+ if (line.length > 0) {
+ core.setSecret(line);
+ }
+ }
+ if (exportEnv) {
+ core.exportVariable(request.envVarName, `${value}`);
+ }
+ core.setOutput(request.outputVarName, `${value}`);
+ core.debug(`✔ ${request.path} => outputs.${request.outputVarName}${exportEnv ? ` | env.${request.envVarName}` : ''}`);
+ }
+};
+
+/** @typedef {Object} SecretRequest
+ * @property {string} path
+ * @property {string} envVarName
+ * @property {string} outputVarName
+ * @property {string} selector
+*/
+
+/**
+ * Parses a secrets input string into key paths and their resulting environment variable name.
+ * @param {string} secretsInput
+ */
+function parseSecretsInput(secretsInput) {
+ if (!secretsInput) {
+ return []
+ }
+
+ const secrets = secretsInput
+ .split(';')
+ .filter(key => !!key)
+ .map(key => key.trim())
+ .filter(key => key.length !== 0);
+
+ /** @type {SecretRequest[]} */
+ const output = [];
+ for (const secret of secrets) {
+ let pathSpec = secret;
+ let outputVarName = null;
+
+ const renameSigilIndex = secret.lastIndexOf('|');
+ if (renameSigilIndex > -1) {
+ pathSpec = secret.substring(0, renameSigilIndex).trim();
+ outputVarName = secret.substring(renameSigilIndex + 1).trim();
+
+ if (outputVarName.length < 1) {
+ throw Error(`You must provide a value when mapping a secret to a name. Input: "${secret}"`);
+ }
+ }
+
+ const pathParts = pathSpec
+ .split(/\s+/)
+ .map(part => part.trim())
+ .filter(part => part.length !== 0);
+
+ if (pathParts.length !== 2) {
+ throw Error(`You must provide a valid path and key. Input: "${secret}"`);
+ }
+
+ const [path, selectorQuoted] = pathParts;
+
+ /** @type {any} */
+ const selectorAst = jsonata(selectorQuoted).ast();
+ const selector = selectorQuoted.replace(new RegExp('"', 'g'), '');
+
+ if (selector !== WILDCARD && (selectorAst.type !== "path" || selectorAst.steps[0].stages) && selectorAst.type !== "string" && !outputVarName) {
+ throw Error(`You must provide a name for the output key when using json selectors. Input: "${secret}"`);
+ }
+
+ let envVarName = outputVarName;
+ if (!outputVarName) {
+ outputVarName = normalizeOutputKey(selector);
+ envVarName = normalizeOutputKey(selector, true);
+ }
+
+ output.push({
+ path,
+ envVarName,
+ outputVarName,
+ selector
+ });
+ }
+ return output;
+}
+
+/**
+ * @param {string} inputKey
+ * @param {any} inputOptions
+ */
+function parseHeadersInput(inputKey, inputOptions) {
+ /** @type {string}*/
+ const rawHeadersString = core.getInput(inputKey, inputOptions) || '';
+ const headerStrings = rawHeadersString
+ .split('\n')
+ .map(line => line.trim())
+ .filter(line => line !== '');
+ return headerStrings
+ .reduce((map, line) => {
+ const seperator = line.indexOf(':');
+ const key = line.substring(0, seperator).trim().toLowerCase();
+ const value = line.substring(seperator + 1).trim();
+ if (map.has(key)) {
+ map.set(key, [map.get(key), value].join(', '));
+ } else {
+ map.set(key, value);
+ }
+ return map;
+ }, new Map());
+}
+
+module.exports = {
+ exportSecrets,
+ parseSecretsInput,
+ parseHeadersInput,
+};
+/***/ }),
+/***/ 4915:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+// @ts-check
+const core = __nccwpck_require__(2186);
+const rsasign = __nccwpck_require__(7175);
+const fs = __nccwpck_require__(7147);
+const { default: got } = __nccwpck_require__(3061);
const defaultKubernetesTokenPath = '/var/run/secrets/kubernetes.io/serviceaccount/token'
/***
@@ -14110,7 +18767,7 @@ async function retrieveToken(method, client) {
switch (method) {
case 'approle': {
const vaultRoleId = core.getInput('roleId', { required: true });
- const vaultSecretId = core.getInput('secretId', { required: false });
+ const vaultSecretId = core.getInput('secretId', { required: true });
return await getClientToken(client, method, path, { role_id: vaultRoleId, secret_id: vaultSecretId });
}
case 'github': {
@@ -14138,7 +18795,7 @@ async function retrieveToken(method, client) {
case 'kubernetes': {
const role = core.getInput('role', { required: true })
const tokenPath = core.getInput('kubernetesTokenPath', { required: false }) || defaultKubernetesTokenPath
- const data = external_fs_.readFileSync(tokenPath, 'utf8')
+ const data = fs.readFileSync(tokenPath, 'utf8')
if (!(role && data) && data != "") {
throw new Error("Role Name must be set and a kubernetes token must set")
}
@@ -14176,7 +18833,7 @@ async function retrieveToken(method, client) {
function generateJwt(privateKey, keyPassword, ttl) {
const alg = 'RS256';
const header = { alg: alg, typ: 'JWT' };
- const now = jsrsasign/* KJUR.jws.IntDate.getNow */.fs.jws.IntDate.getNow();
+ const now = rsasign.KJUR.jws.IntDate.getNow();
const payload = {
iss: 'vault-action',
iat: now,
@@ -14189,8 +18846,8 @@ function generateJwt(privateKey, keyPassword, ttl) {
repository: process.env.GITHUB_REPOSITORY,
ref: process.env.GITHUB_REF
};
- const decryptedKey = jsrsasign/* KEYUTIL.getKey */.KZ.getKey(privateKey, keyPassword);
- return jsrsasign/* KJUR.jws.JWS.sign */.fs.jws.JWS.sign(alg, JSON.stringify(header), JSON.stringify(payload), decryptedKey);
+ const decryptedKey = rsasign.KEYUTIL.getKey(privateKey, keyPassword);
+ return rsasign.KJUR.jws.JWS.sign(alg, JSON.stringify(header), JSON.stringify(payload), decryptedKey);
}
/***
@@ -14215,7 +18872,7 @@ async function getClientToken(client, method, path, payload) {
try {
response = await client.post(`${path}`, options);
} catch (err) {
- if (err instanceof got_dist_source.HTTPError) {
+ if (err instanceof got.HTTPError) {
throw Error(`failed to retrieve vault token. code: ${err.code}, message: ${err.message}, vaultResponse: ${JSON.stringify(err.response.body)}`)
} else {
throw err
@@ -14247,28 +18904,44 @@ async function getClientToken(client, method, path, payload) {
* }} auth
*/
+module.exports = {
+ retrieveToken,
+};
-;// CONCATENATED MODULE: external "module"
-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);
+/***/ 4438:
+/***/ ((module) => {
-/* harmony default export */ const cjs_require = (cjs_require_require);
+const WILDCARD = '*';
-;// CONCATENATED MODULE: ./src/secrets.js
+module.exports = {
+ WILDCARD
+};
+/***/ }),
+/***/ 4351:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+const auth = __nccwpck_require__(4915);
+const secrets = __nccwpck_require__(8452);
-// ncc doesn't compile jsonata imports properly, so we must use our own custom require
+module.exports = {
+ auth,
+ secrets
+};
-const jsonata = cjs_require('jsonata');
+/***/ }),
+/***/ 8452:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+const jsonata = __nccwpck_require__(4245);
+const { WILDCARD } = __nccwpck_require__(4438);
+const { normalizeOutputKey } = __nccwpck_require__(1608);
+const core = __nccwpck_require__(2186);
/**
* @typedef {Object} SecretRequest
@@ -14311,7 +18984,7 @@ async function getSecrets(secretRequests, client, ignoreNotFound) {
} catch (error) {
const {response} = error;
if (response?.statusCode === 404) {
- let notFoundMsg = `Unable to retrieve result for "${path}" because it was not found: ${response.body.trim()}`;
+ notFoundMsg = `Unable to retrieve result for "${path}" because it was not found: ${response.body.trim()}`;
const ignoreNotFound = (core.getInput('ignoreNotFound', { required: false }) || 'false').toLowerCase() != 'false';
if (ignoreNotFound) {
core.error(`✘ ${notFoundMsg}`);
@@ -14432,237 +19105,219 @@ const selectAndAppendResults = async (
];
};
+module.exports = {
+ getSecrets,
+ selectData
+}
-;// CONCATENATED MODULE: ./src/action.js
+/***/ }),
+/***/ 1608:
+/***/ ((module) => {
+/**
+ * Replaces any dot chars to __ and removes non-ascii charts
+ * @param {string} dataKey
+ * @param {boolean=} isEnvVar
+ */
+function normalizeOutputKey(dataKey, isEnvVar = false) {
+ let outputKey = dataKey
+ .replace(".", "__")
+ .replace(new RegExp("-", "g"), "")
+ .replace(/[^\p{L}\p{N}_-]/gu, "");
+ if (isEnvVar) {
+ outputKey = outputKey.toUpperCase();
+ }
+ return outputKey;
+}
-
-
-
-
-
-// ncc doesn't compile jsonata imports properly, so we must use our own custom require
-
-const action_jsonata = cjs_require('jsonata');
-
-const AUTH_METHODS = ['approle', 'token', 'github', 'jwt', 'kubernetes', 'ldap', 'userpass'];
-const ENCODING_TYPES = ['base64', 'hex', 'utf8'];
-
-async function exportSecrets() {
- const vaultUrl = core.getInput('url', { required: true });
- const vaultNamespace = core.getInput('namespace', { required: false });
- const extraHeaders = parseHeadersInput('extraHeaders', { required: false });
- const exportEnv = core.getInput('exportEnv', { required: false }) != 'false';
- const outputToken = (core.getInput('outputToken', { required: false }) || 'false').toLowerCase() != 'false';
- const exportToken = (core.getInput('exportToken', { required: false }) || 'false').toLowerCase() != 'false';
-
- const secretsInput = core.getInput('secrets', { required: false });
- const secretRequests = parseSecretsInput(secretsInput);
-
- const secretEncodingType = core.getInput('secretEncodingType', { required: false });
-
- const vaultMethod = (core.getInput('method', { required: false }) || 'token').toLowerCase();
- const authPayload = core.getInput('authPayload', { required: false });
- if (!AUTH_METHODS.includes(vaultMethod) && !authPayload) {
- throw Error(`Sorry, the provided authentication method ${vaultMethod} is not currently supported and no custom authPayload was provided.`);
- }
-
- const defaultOptions = {
- prefixUrl: vaultUrl,
- headers: {},
- https: {},
- 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,
- ]
- }
- }
-
- const tlsSkipVerify = (core.getInput('tlsSkipVerify', { required: false }) || 'false').toLowerCase() != 'false';
- if (tlsSkipVerify === true) {
- defaultOptions.https.rejectUnauthorized = false;
- }
-
- const caCertificateRaw = core.getInput('caCertificate', { required: false });
- if (caCertificateRaw != null) {
- defaultOptions.https.certificateAuthority = Buffer.from(caCertificateRaw, 'base64').toString();
- }
-
- const clientCertificateRaw = core.getInput('clientCertificate', { required: false });
- if (clientCertificateRaw != null) {
- defaultOptions.https.certificate = Buffer.from(clientCertificateRaw, 'base64').toString();
- }
-
- const clientKeyRaw = core.getInput('clientKey', { required: false });
- if (clientKeyRaw != null) {
- defaultOptions.https.key = Buffer.from(clientKeyRaw, 'base64').toString();
- }
-
- for (const [headerName, headerValue] of extraHeaders) {
- defaultOptions.headers[headerName] = headerValue;
- }
-
- if (vaultNamespace != null) {
- defaultOptions.headers["X-Vault-Namespace"] = vaultNamespace;
- }
-
- const vaultToken = await retrieveToken(vaultMethod, got_dist_source.extend(defaultOptions));
- core.setSecret(vaultToken)
- defaultOptions.headers['X-Vault-Token'] = vaultToken;
- const client = got_dist_source.extend(defaultOptions);
-
- if (outputToken === true) {
- core.setOutput('vault_token', `${vaultToken}`);
- }
- if (exportToken === true) {
- core.exportVariable('VAULT_TOKEN', `${vaultToken}`);
- }
-
- const requests = secretRequests.map(request => {
- const { path, selector } = request;
- return request;
- });
-
- const results = await getSecrets(requests, client);
-
-
- for (const result of results) {
- // Output the result
-
- var value = result.value;
- const request = result.request;
- const cachedResponse = result.cachedResponse;
-
- if (cachedResponse) {
- core.debug('ℹ using cached response');
- }
-
- // if a secret is encoded, decode it
- if (ENCODING_TYPES.includes(secretEncodingType)) {
- value = Buffer.from(value, secretEncodingType).toString();
- }
-
- for (const line of value.replace(/\r/g, '').split('\n')) {
- if (line.length > 0) {
- core.setSecret(line);
- }
- }
- if (exportEnv) {
- core.exportVariable(request.envVarName, `${value}`);
- }
- core.setOutput(request.outputVarName, `${value}`);
- core.debug(`✔ ${request.path} => outputs.${request.outputVarName}${exportEnv ? ` | env.${request.envVarName}` : ''}`);
- }
+module.exports = {
+ normalizeOutputKey
};
-/** @typedef {Object} SecretRequest
- * @property {string} path
- * @property {string} envVarName
- * @property {string} outputVarName
- * @property {string} selector
-*/
-/**
- * Parses a secrets input string into key paths and their resulting environment variable name.
- * @param {string} secretsInput
- */
-function parseSecretsInput(secretsInput) {
- if (!secretsInput) {
- return []
- }
+/***/ }),
- const secrets = secretsInput
- .split(';')
- .filter(key => !!key)
- .map(key => key.trim())
- .filter(key => key.length !== 0);
+/***/ 9491:
+/***/ ((module) => {
- /** @type {SecretRequest[]} */
- const output = [];
- for (const secret of secrets) {
- let pathSpec = secret;
- let outputVarName = null;
+"use strict";
+module.exports = require("assert");
- const renameSigilIndex = secret.lastIndexOf('|');
- if (renameSigilIndex > -1) {
- pathSpec = secret.substring(0, renameSigilIndex).trim();
- outputVarName = secret.substring(renameSigilIndex + 1).trim();
+/***/ }),
- if (outputVarName.length < 1) {
- throw Error(`You must provide a value when mapping a secret to a name. Input: "${secret}"`);
- }
- }
+/***/ 4300:
+/***/ ((module) => {
- const pathParts = pathSpec
- .split(/\s+/)
- .map(part => part.trim())
- .filter(part => part.length !== 0);
+"use strict";
+module.exports = require("buffer");
- if (pathParts.length !== 2) {
- throw Error(`You must provide a valid path and key. Input: "${secret}"`);
- }
+/***/ }),
- const [path, selectorQuoted] = pathParts;
+/***/ 6113:
+/***/ ((module) => {
- /** @type {any} */
- const selectorAst = action_jsonata(selectorQuoted).ast();
- const selector = selectorQuoted.replace(new RegExp('"', 'g'), '');
+"use strict";
+module.exports = require("crypto");
- if (selector !== WILDCARD && (selectorAst.type !== "path" || selectorAst.steps[0].stages) && selectorAst.type !== "string" && !outputVarName) {
- throw Error(`You must provide a name for the output key when using json selectors. Input: "${secret}"`);
- }
+/***/ }),
- let envVarName = outputVarName;
- if (!outputVarName) {
- outputVarName = normalizeOutputKey(selector);
- envVarName = normalizeOutputKey(selector, true);
- }
+/***/ 9523:
+/***/ ((module) => {
- output.push({
- path,
- envVarName,
- outputVarName,
- selector
- });
- }
- return output;
-}
+"use strict";
+module.exports = require("dns");
-/**
- * @param {string} inputKey
- * @param {any} inputOptions
- */
-function parseHeadersInput(inputKey, inputOptions) {
- /** @type {string}*/
- const rawHeadersString = core.getInput(inputKey, inputOptions) || '';
- const headerStrings = rawHeadersString
- .split('\n')
- .map(line => line.trim())
- .filter(line => line !== '');
- return headerStrings
- .reduce((map, line) => {
- const seperator = line.indexOf(':');
- const key = line.substring(0, seperator).trim().toLowerCase();
- const value = line.substring(seperator + 1).trim();
- if (map.has(key)) {
- map.set(key, [map.get(key), value].join(', '));
- } else {
- map.set(key, value);
- }
- return map;
- }, new Map());
-}
+/***/ }),
+/***/ 2361:
+/***/ ((module) => {
+"use strict";
+module.exports = require("events");
-;// CONCATENATED MODULE: ./src/entry.js
+/***/ }),
+/***/ 7147:
+/***/ ((module) => {
+"use strict";
+module.exports = require("fs");
+
+/***/ }),
+
+/***/ 3685:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("http");
+
+/***/ }),
+
+/***/ 5158:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("http2");
+
+/***/ }),
+
+/***/ 5687:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("https");
+
+/***/ }),
+
+/***/ 1808:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("net");
+
+/***/ }),
+
+/***/ 2037:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("os");
+
+/***/ }),
+
+/***/ 1017:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("path");
+
+/***/ }),
+
+/***/ 2781:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("stream");
+
+/***/ }),
+
+/***/ 4404:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("tls");
+
+/***/ }),
+
+/***/ 7310:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("url");
+
+/***/ }),
+
+/***/ 3837:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("util");
+
+/***/ }),
+
+/***/ 9796:
+/***/ ((module) => {
+
+"use strict";
+module.exports = require("zlib");
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/ // The module cache
+/******/ var __webpack_module_cache__ = {};
+/******/
+/******/ // The require function
+/******/ function __nccwpck_require__(moduleId) {
+/******/ // Check if module is in cache
+/******/ var cachedModule = __webpack_module_cache__[moduleId];
+/******/ if (cachedModule !== undefined) {
+/******/ return cachedModule.exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = __webpack_module_cache__[moduleId] = {
+/******/ // no module.id needed
+/******/ // no module.loaded needed
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ var threw = true;
+/******/ try {
+/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __nccwpck_require__);
+/******/ threw = false;
+/******/ } finally {
+/******/ if(threw) delete __webpack_module_cache__[moduleId];
+/******/ }
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/compat */
+/******/
+/******/ if (typeof __nccwpck_require__ !== 'undefined') __nccwpck_require__.ab = __dirname + "/";
+/******/
+/************************************************************************/
+var __webpack_exports__ = {};
+// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
+(() => {
+const core = __nccwpck_require__(2186);
+const { exportSecrets } = __nccwpck_require__(3348);
(async () => {
try {
@@ -14675,3 +19330,6 @@ function parseHeadersInput(inputKey, inputOptions) {
})();
+module.exports = __webpack_exports__;
+/******/ })()
+;
\ No newline at end of file
diff --git a/dist/package.json b/dist/package.json
deleted file mode 100644
index 3dbc1ca..0000000
--- a/dist/package.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "type": "module"
-}
diff --git a/integrationTests/basic/approle_auth.test.js b/integrationTests/basic/approle_auth.test.js
index ea32cd7..39e9c8c 100644
--- a/integrationTests/basic/approle_auth.test.js
+++ b/integrationTests/basic/approle_auth.test.js
@@ -1,12 +1,11 @@
-import { vi, describe, test, expect } from 'vitest';
+jest.mock('@actions/core');
+jest.mock('@actions/core/lib/command');
+const core = require('@actions/core');
-vi.mock('@actions/core');
-import core from '@actions/core';
+const got = require('got');
+const { when } = require('jest-when');
-import got from 'got';
-import { when } from 'jest-when'
-
-import { exportSecrets } from '../../src/action.js';
+const { exportSecrets } = require('../../src/action');
const vaultUrl = `http://${process.env.VAULT_HOST || 'localhost'}:${process.env.VAULT_PORT || '8200'}`;
const vaultToken = `${process.env.VAULT_TOKEN || 'testtoken'}`
@@ -103,7 +102,7 @@ describe('authenticate with approle', () => {
});
beforeEach(() => {
- vi.resetAllMocks();
+ jest.resetAllMocks();
when(core.getInput)
.calledWith('method', expect.anything())
diff --git a/integrationTests/basic/integration.test.js b/integrationTests/basic/integration.test.js
index 479ed87..39a874e 100644
--- a/integrationTests/basic/integration.test.js
+++ b/integrationTests/basic/integration.test.js
@@ -1,12 +1,11 @@
-import { vi, describe, test, expect } from 'vitest';
+jest.mock('@actions/core');
+jest.mock('@actions/core/lib/command');
+const core = require('@actions/core');
-vi.mock('@actions/core');
-import core from '@actions/core';
+const got = require('got');
+const { when } = require('jest-when');
-import got from 'got';
-import { when } from 'jest-when'
-
-import { exportSecrets } from '../../src/action.js';
+const { exportSecrets } = require('../../src/action');
const vaultUrl = `http://${process.env.VAULT_HOST || 'localhost'}:${process.env.VAULT_PORT || '8200'}`;
const vaultToken = `${process.env.VAULT_TOKEN || 'testtoken'}`
@@ -108,7 +107,7 @@ describe('integration', () => {
});
beforeEach(() => {
- vi.resetAllMocks();
+ jest.resetAllMocks();
when(core.getInput)
.calledWith('url', expect.anything())
diff --git a/integrationTests/basic/jest.config.js b/integrationTests/basic/jest.config.js
new file mode 100644
index 0000000..03d15be
--- /dev/null
+++ b/integrationTests/basic/jest.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ verbose: true
+};
diff --git a/integrationTests/basic/jwt_auth.test.js b/integrationTests/basic/jwt_auth.test.js
index 1384c47..df2703b 100644
--- a/integrationTests/basic/jwt_auth.test.js
+++ b/integrationTests/basic/jwt_auth.test.js
@@ -1,18 +1,17 @@
-import { vi, describe, test, expect } from 'vitest';
-
-vi.mock('@actions/core');
-import core from '@actions/core';
-import rsasign from 'jsrsasign';
-import {
+jest.mock('@actions/core');
+jest.mock('@actions/core/lib/command');
+const core = require('@actions/core');
+const rsasign = require('jsrsasign');
+const {
privateRsaKey,
privateRsaKeyBase64,
publicRsaKey
-} from './rsa_keys.js';
+} = require('./rsa_keys');
-import got from 'got';
-import { when } from 'jest-when'
+const got = require('got');
+const { when } = require('jest-when');
-import { exportSecrets } from '../../src/action.js';
+const { exportSecrets } = require('../../src/action');
const vaultUrl = `http://${process.env.VAULT_HOST || 'localhost'}:${process.env.VAULT_PORT || '8200'}`;
const vaultToken = `${process.env.VAULT_TOKEN || 'testtoken'}`
@@ -140,7 +139,7 @@ describe('jwt auth', () => {
describe('authenticate with private key', () => {
beforeEach(() => {
- vi.resetAllMocks();
+ jest.resetAllMocks();
when(core.getInput)
.calledWith('url', expect.anything())
@@ -190,7 +189,7 @@ describe('jwt auth', () => {
})
beforeEach(() => {
- vi.resetAllMocks();
+ jest.resetAllMocks();
when(core.getInput)
.calledWith('url', expect.anything())
diff --git a/integrationTests/basic/rsa_keys.js b/integrationTests/basic/rsa_keys.js
index 598cdd9..13ea27d 100644
--- a/integrationTests/basic/rsa_keys.js
+++ b/integrationTests/basic/rsa_keys.js
@@ -42,7 +42,7 @@ LrJEY9tZaRF8xraMZiOcBcyAt6S/TS29HttJ6+zlhcWx34fItEZ8jA5gzhTmspOY
-----END PUBLIC KEY-----
`;
-export {
+module.exports = {
privateRsaKey,
privateRsaKeyBase64,
publicRsaKey
diff --git a/integrationTests/basic/userpass_auth.test.js b/integrationTests/basic/userpass_auth.test.js
index 9a98b66..a8a9933 100644
--- a/integrationTests/basic/userpass_auth.test.js
+++ b/integrationTests/basic/userpass_auth.test.js
@@ -1,12 +1,11 @@
-import { vi, describe, test, expect } from 'vitest';
+jest.mock('@actions/core');
+jest.mock('@actions/core/lib/command');
+const core = require('@actions/core');
-vi.mock('@actions/core');
-import core from '@actions/core';
+const got = require('got');
+const { when } = require('jest-when');
-import got from 'got';
-import { when } from 'jest-when'
-
-import { exportSecrets } from '../../src/action.js';
+const { exportSecrets } = require('../../src/action');
const vaultUrl = `http://${process.env.VAULT_HOST || 'localhost'}:${process.env.VAULT_PORT || '8200'}`;
const vaultToken = `${process.env.VAULT_TOKEN || 'testtoken'}`
@@ -85,7 +84,7 @@ describe('authenticate with userpass', () => {
});
beforeEach(() => {
- vi.resetAllMocks();
+ jest.resetAllMocks();
when(core.getInput)
.calledWith('method', expect.anything())
diff --git a/integrationTests/basic/vitest.config.js b/integrationTests/basic/vitest.config.js
deleted file mode 100644
index 31378ee..0000000
--- a/integrationTests/basic/vitest.config.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import { defineConfig, configDefaults } from 'vitest/config'
-
-export default defineConfig({
- test: {
- // required to make jest-when work with vitest
- globals: true,
- include: [
- '**/integrationTests/basic/**.{test,spec}.?(c|m)[jt]s?(x)',
- ],
- },
-})
diff --git a/integrationTests/e2e-tls/e2e-tls.test.js b/integrationTests/e2e-tls/e2e-tls.test.js
index d590b2a..6db450a 100644
--- a/integrationTests/e2e-tls/e2e-tls.test.js
+++ b/integrationTests/e2e-tls/e2e-tls.test.js
@@ -1,5 +1,3 @@
-import { describe, test, expect } from 'vitest';
-
describe('e2e-tls', () => {
it('verify', () => {
expect(process.env.SECRET).toBe("SUPERSECRET");
diff --git a/integrationTests/e2e-tls/jest.config.js b/integrationTests/e2e-tls/jest.config.js
new file mode 100644
index 0000000..03d15be
--- /dev/null
+++ b/integrationTests/e2e-tls/jest.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ verbose: true
+};
diff --git a/integrationTests/e2e-tls/setup.js b/integrationTests/e2e-tls/setup.js
index c85fe04..0e25646 100644
--- a/integrationTests/e2e-tls/setup.js
+++ b/integrationTests/e2e-tls/setup.js
@@ -1,5 +1,5 @@
-import got from 'got';
-import core from '@actions/core';
+const got = require('got');
+const core = require('@actions/core');
const vaultUrl = `${process.env.VAULT_HOST}:${process.env.VAULT_PORT}`;
const caCertificateRaw = `${process.env.VAULTCA}`;
diff --git a/integrationTests/e2e-tls/vitest.config.js b/integrationTests/e2e-tls/vitest.config.js
deleted file mode 100644
index a4c36d0..0000000
--- a/integrationTests/e2e-tls/vitest.config.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import { defineConfig, configDefaults } from 'vitest/config'
-
-export default defineConfig({
- test: {
- // required to make jest-when work with vitest
- globals: true,
- include: [
- '**/integrationTests/e2e-tls/**.{test,spec}.?(c|m)[jt]s?(x)',
- ],
- },
-})
diff --git a/integrationTests/e2e/e2e.test.js b/integrationTests/e2e/e2e.test.js
index c41db9b..3924d04 100644
--- a/integrationTests/e2e/e2e.test.js
+++ b/integrationTests/e2e/e2e.test.js
@@ -1,5 +1,3 @@
-import { describe, test, expect } from 'vitest';
-
describe('e2e', () => {
it('verify', () => {
expect(process.env.SECRET).toBe("SUPERSECRET");
diff --git a/integrationTests/e2e/jest.config.js b/integrationTests/e2e/jest.config.js
new file mode 100644
index 0000000..03d15be
--- /dev/null
+++ b/integrationTests/e2e/jest.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ verbose: true
+};
diff --git a/integrationTests/e2e/setup.js b/integrationTests/e2e/setup.js
index 2a60038..33daf37 100644
--- a/integrationTests/e2e/setup.js
+++ b/integrationTests/e2e/setup.js
@@ -1,4 +1,4 @@
-import got from 'got';
+const got = require('got');
const vaultUrl = `${process.env.VAULT_HOST}:${process.env.VAULT_PORT}`;
const vaultToken = `${process.env.VAULT_TOKEN}` === undefined ? `${process.env.VAULT_TOKEN}` : "testtoken";
diff --git a/integrationTests/e2e/vitest.config.js b/integrationTests/e2e/vitest.config.js
deleted file mode 100644
index 6308301..0000000
--- a/integrationTests/e2e/vitest.config.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import { defineConfig, configDefaults } from 'vitest/config'
-
-export default defineConfig({
- test: {
- // required to make jest-when work with vitest
- globals: true,
- include: [
- '**/integrationTests/e2e/**.{test,spec}.?(c|m)[jt]s?(x)',
- ],
- },
-})
diff --git a/integrationTests/enterprise/enterprise.test.js b/integrationTests/enterprise/enterprise.test.js
index 08adb06..9fa3f08 100644
--- a/integrationTests/enterprise/enterprise.test.js
+++ b/integrationTests/enterprise/enterprise.test.js
@@ -1,12 +1,11 @@
-import { vi, describe, test, expect } from 'vitest';
+jest.mock('@actions/core');
+jest.mock('@actions/core/lib/command');
+const core = require('@actions/core');
-vi.mock('@actions/core');
-import core from '@actions/core';
+const got = require('got');
+const { when } = require('jest-when');
-import got from 'got';
-import { when } from 'jest-when'
-
-import { exportSecrets } from '../../src/action.js';
+const { exportSecrets } = require('../../src/action');
const vaultUrl = `http://${process.env.VAULT_HOST || 'localhost'}:${process.env.VAULT_PORT || '8201'}`;
const vaultToken = `${process.env.VAULT_TOKEN || 'testtoken'}`
@@ -42,7 +41,7 @@ describe('integration', () => {
});
beforeEach(() => {
- vi.resetAllMocks();
+ jest.resetAllMocks();
when(core.getInput)
.calledWith('url', expect.anything())
@@ -239,7 +238,7 @@ describe('authenticate with approle', () => {
});
beforeEach(() => {
- vi.resetAllMocks();
+ jest.resetAllMocks();
when(core.getInput)
.calledWith('method', expect.anything())
diff --git a/integrationTests/enterprise/jest.config.js b/integrationTests/enterprise/jest.config.js
new file mode 100644
index 0000000..03d15be
--- /dev/null
+++ b/integrationTests/enterprise/jest.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ verbose: true
+};
diff --git a/integrationTests/enterprise/vitest.config.js b/integrationTests/enterprise/vitest.config.js
deleted file mode 100644
index 0cc1646..0000000
--- a/integrationTests/enterprise/vitest.config.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import { defineConfig, configDefaults } from 'vitest/config'
-
-export default defineConfig({
- test: {
- // required to make jest-when work with vitest
- globals: true,
- include: [
- '**/integrationTests/enterprise/**.{test,spec}.?(c|m)[jt]s?(x)',
- ],
- },
-})
diff --git a/jest.config.js b/jest.config.js
new file mode 100644
index 0000000..7916d69
--- /dev/null
+++ b/jest.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ testPathIgnorePatterns: ['/node_modules/', '/integrationTests/'],
+};
diff --git a/jsconfig.json b/jsconfig.json
index 27625de..e7fe98e 100644
--- a/jsconfig.json
+++ b/jsconfig.json
@@ -7,4 +7,4 @@
"compilerOptions": {
"target": "es2018"
}
-}
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index c8ee97d..e22ddac 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3,29 +3,32 @@
"version": "0.1.0",
"lockfileVersion": 2,
"requires": true,
- "type": "module",
"packages": {
"": {
"name": "vault-action",
"version": "0.1.0",
"license": "MIT",
"dependencies": {
- "@actions/core": "^1.10.1",
- "got": "^14.2.1",
- "jsonata": "^2.0.4",
+ "got": "^11.8.6",
+ "jsonata": "^2.0.3",
"jsrsasign": "^11.0.0"
},
"devDependencies": {
+ "@actions/core": "^1.10.1",
"@vercel/ncc": "^0.38.1",
+ "jest": "^29.7.0",
"jest-when": "^3.6.0",
- "mock-http-server": "^1.4.5",
- "vitest": "^1.3.1"
+ "mock-http-server": "^1.4.5"
+ },
+ "peerDependencies": {
+ "@actions/core": ">=1 <2"
}
},
"node_modules/@actions/core": {
"version": "1.10.1",
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz",
"integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==",
+ "dev": true,
"dependencies": {
"@actions/http-client": "^2.0.1",
"uuid": "^8.3.2"
@@ -35,6 +38,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
"integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
+ "dev": true,
"dependencies": {
"tunnel": "^0.0.6"
}
@@ -44,7 +48,6 @@
"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,7 +61,6 @@
"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"
@@ -72,7 +74,6 @@
"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"
},
@@ -85,7 +86,6 @@
"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",
@@ -100,7 +100,6 @@
"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"
}
@@ -109,15 +108,13 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true,
- "peer": true
+ "dev": 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"
}
@@ -127,7 +124,6 @@
"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"
}
@@ -137,7 +133,6 @@
"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"
},
@@ -150,7 +145,6 @@
"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"
}
@@ -160,7 +154,6 @@
"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",
@@ -191,7 +184,6 @@
"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",
@@ -207,7 +199,6 @@
"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",
@@ -224,7 +215,6 @@
"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"
}
@@ -234,7 +224,6 @@
"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"
@@ -248,7 +237,6 @@
"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"
},
@@ -261,7 +249,6 @@
"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"
},
@@ -274,7 +261,6 @@
"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",
@@ -294,7 +280,6 @@
"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"
}
@@ -304,7 +289,6 @@
"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"
},
@@ -317,7 +301,6 @@
"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"
},
@@ -330,7 +313,6 @@
"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"
}
@@ -340,7 +322,6 @@
"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"
}
@@ -350,7 +331,6 @@
"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"
}
@@ -360,7 +340,6 @@
"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",
@@ -375,7 +354,6 @@
"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",
@@ -390,7 +368,6 @@
"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"
},
@@ -403,7 +380,6 @@
"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",
@@ -418,7 +394,6 @@
"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"
}
@@ -427,15 +402,13 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true,
- "peer": true
+ "dev": 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"
}
@@ -445,7 +418,6 @@
"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"
}
@@ -455,7 +427,6 @@
"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"
},
@@ -468,7 +439,6 @@
"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"
},
@@ -481,7 +451,6 @@
"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"
},
@@ -494,7 +463,6 @@
"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"
},
@@ -507,7 +475,6 @@
"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"
},
@@ -520,7 +487,6 @@
"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"
},
@@ -533,7 +499,6 @@
"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"
},
@@ -546,7 +511,6 @@
"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"
},
@@ -562,7 +526,6 @@
"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"
},
@@ -575,7 +538,6 @@
"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"
},
@@ -588,7 +550,6 @@
"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"
},
@@ -601,7 +562,6 @@
"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"
},
@@ -614,7 +574,6 @@
"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"
},
@@ -627,7 +586,6 @@
"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"
},
@@ -640,7 +598,6 @@
"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"
},
@@ -656,7 +613,6 @@
"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"
},
@@ -672,7 +628,6 @@
"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",
@@ -687,7 +642,6 @@
"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",
@@ -709,7 +663,6 @@
"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",
@@ -723,383 +676,13 @@
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
- "dev": true,
- "peer": true
- },
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
- "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz",
- "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz",
- "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz",
- "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz",
- "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz",
- "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz",
- "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz",
- "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz",
- "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz",
- "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz",
- "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz",
- "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz",
- "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz",
- "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz",
- "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz",
- "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz",
- "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz",
- "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz",
- "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz",
- "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz",
- "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz",
- "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz",
- "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
+ "dev": true
},
"node_modules/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"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",
@@ -1116,7 +699,6 @@
"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"
}
@@ -1126,7 +708,6 @@
"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": "*",
@@ -1144,7 +725,6 @@
"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",
@@ -1192,7 +772,6 @@
"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",
@@ -1208,7 +787,6 @@
"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"
@@ -1222,7 +800,6 @@
"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"
},
@@ -1235,7 +812,6 @@
"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",
@@ -1253,7 +829,6 @@
"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",
@@ -1269,7 +844,6 @@
"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",
@@ -1325,7 +899,6 @@
"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",
@@ -1340,7 +913,6 @@
"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",
@@ -1356,7 +928,6 @@
"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",
@@ -1372,7 +943,6 @@
"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",
@@ -1399,7 +969,6 @@
"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",
@@ -1417,7 +986,6 @@
"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",
@@ -1432,7 +1000,6 @@
"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"
}
@@ -1442,7 +1009,6 @@
"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"
}
@@ -1458,181 +1024,11 @@
"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"
}
},
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.1.tgz",
- "integrity": "sha512-iU2Sya8hNn1LhsYyf0N+L4Gf9Qc+9eBTJJJsaOGUp+7x4n2M9dxTt8UvhJl3oeftSjblSlpCfvjA/IfP3g5VjQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.1.tgz",
- "integrity": "sha512-wlzcWiH2Ir7rdMELxFE5vuM7D6TsOcJ2Yw0c3vaBR3VOsJFVTx9xvwnAvhgU5Ii8Gd6+I11qNHwndDscIm0HXg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.1.tgz",
- "integrity": "sha512-YRXa1+aZIFN5BaImK+84B3uNK8C6+ynKLPgvn29X9s0LTVCByp54TB7tdSMHDR7GTV39bz1lOmlLDuedgTwwHg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.1.tgz",
- "integrity": "sha512-opjWJ4MevxeA8FhlngQWPBOvVWYNPFkq6/25rGgG+KOy0r8clYwL1CFd+PGwRqqMFVQ4/Qd3sQu5t7ucP7C/Uw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.1.tgz",
- "integrity": "sha512-uBkwaI+gBUlIe+EfbNnY5xNyXuhZbDSx2nzzW8tRMjUmpScd6lCQYKY2V9BATHtv5Ef2OBq6SChEP8h+/cxifQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.1.tgz",
- "integrity": "sha512-0bK9aG1kIg0Su7OcFTlexkVeNZ5IzEsnz1ept87a0TUgZ6HplSgkJAnFpEVRW7GRcikT4GlPV0pbtVedOaXHQQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.1.tgz",
- "integrity": "sha512-qB6AFRXuP8bdkBI4D7UPUbE7OQf7u5OL+R94JE42Z2Qjmyj74FtDdLGeriRyBDhm4rQSvqAGCGC01b8Fu2LthQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.1.tgz",
- "integrity": "sha512-sHig3LaGlpNgDj5o8uPEoGs98RII8HpNIqFtAI8/pYABO8i0nb1QzT0JDoXF/pxzqO+FkxvwkHZo9k0NJYDedg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.1.tgz",
- "integrity": "sha512-nD3YcUv6jBJbBNFvSbp0IV66+ba/1teuBcu+fBBPZ33sidxitc6ErhON3JNavaH8HlswhWMC3s5rgZpM4MtPqQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.1.tgz",
- "integrity": "sha512-7/XVZqgBby2qp/cO0TQ8uJK+9xnSdJ9ct6gSDdEr4MfABrjTyrW6Bau7HQ73a2a5tPB7hno49A0y1jhWGDN9OQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.1.tgz",
- "integrity": "sha512-CYc64bnICG42UPL7TrhIwsJW4QcKkIt9gGlj21gq3VV0LL6XNb1yAdHVp1pIi9gkts9gGcT3OfUYHjGP7ETAiw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.1.tgz",
- "integrity": "sha512-LN+vnlZ9g0qlHGlS920GR4zFCqAwbv2lULrR29yGaWP9u7wF5L7GqWu9Ah6/kFZPXPUkpdZwd//TNR+9XC9hvA==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.1.tgz",
- "integrity": "sha512-n+vkrSyphvmU0qkQ6QBNXCGr2mKjhP08mPRM/Xp5Ck2FV4NrHU+y6axzDeixUrCBHVUS51TZhjqrKBBsHLKb2Q==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
"node_modules/@sinclair/typebox": {
"version": "0.27.8",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
@@ -1640,11 +1036,11 @@
"dev": true
},
"node_modules/@sindresorhus/is": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-6.2.0.tgz",
- "integrity": "sha512-yM/IGPkVnYGblhDosFBwq0ZGdnVSBkNV4onUtipGMOjZd4kB6GAu3ys91aftSbyMHh6A2GPdt+KDI5NoWP63MQ==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz",
+ "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==",
"engines": {
- "node": ">=16"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sindresorhus/is?sponsor=1"
@@ -1655,7 +1051,6 @@
"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"
}
@@ -1665,20 +1060,19 @@
"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": "5.0.1",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz",
- "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz",
+ "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==",
"dependencies": {
- "defer-to-connect": "^2.0.1"
+ "defer-to-connect": "^2.0.0"
},
"engines": {
- "node": ">=14.16"
+ "node": ">=10"
}
},
"node_modules/@types/babel__core": {
@@ -1686,7 +1080,6 @@
"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",
@@ -1700,7 +1093,6 @@
"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"
}
@@ -1710,7 +1102,6 @@
"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"
@@ -1721,45 +1112,46 @@
"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/estree": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
- "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
- "dev": true
+ "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/graceful-fs": {
"version": "4.1.9",
"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.4",
- "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
- "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA=="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz",
+ "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A=="
},
"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,
- "peer": true
+ "dev": 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": "*"
}
@@ -1769,34 +1161,47 @@
"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/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,
+ "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": {
- "undici-types": "~5.26.4"
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "12.7.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.5.tgz",
+ "integrity": "sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w=="
+ },
+ "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,
- "peer": true
+ "dev": 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": "*"
}
@@ -1805,8 +1210,7 @@
"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,
- "peer": true
+ "dev": true
},
"node_modules/@vercel/ncc": {
"version": "0.38.1",
@@ -1817,129 +1221,11 @@
"ncc": "dist/ncc/cli.js"
}
},
- "node_modules/@vitest/expect": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.3.1.tgz",
- "integrity": "sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==",
- "dev": true,
- "dependencies": {
- "@vitest/spy": "1.3.1",
- "@vitest/utils": "1.3.1",
- "chai": "^4.3.10"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/@vitest/runner": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.3.1.tgz",
- "integrity": "sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg==",
- "dev": true,
- "dependencies": {
- "@vitest/utils": "1.3.1",
- "p-limit": "^5.0.0",
- "pathe": "^1.1.1"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/@vitest/runner/node_modules/p-limit": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz",
- "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^1.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@vitest/runner/node_modules/yocto-queue": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
- "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
- "dev": true,
- "engines": {
- "node": ">=12.20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@vitest/snapshot": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.3.1.tgz",
- "integrity": "sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==",
- "dev": true,
- "dependencies": {
- "magic-string": "^0.30.5",
- "pathe": "^1.1.1",
- "pretty-format": "^29.7.0"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/@vitest/spy": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.3.1.tgz",
- "integrity": "sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==",
- "dev": true,
- "dependencies": {
- "tinyspy": "^2.2.0"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/@vitest/utils": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.3.1.tgz",
- "integrity": "sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==",
- "dev": true,
- "dependencies": {
- "diff-sequences": "^29.6.3",
- "estree-walker": "^3.0.3",
- "loupe": "^2.3.7",
- "pretty-format": "^29.7.0"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/acorn": {
- "version": "8.11.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
- "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-walk": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
- "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/ansi-escapes": {
"version": "4.3.2",
"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"
},
@@ -1955,7 +1241,6 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
- "peer": true,
"engines": {
"node": ">=8"
}
@@ -1965,7 +1250,6 @@
"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"
},
@@ -1981,7 +1265,6 @@
"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"
@@ -1995,26 +1278,15 @@
"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"
}
},
- "node_modules/assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
"node_modules/babel-jest": {
"version": "29.7.0",
"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",
@@ -2036,7 +1308,6 @@
"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",
@@ -2053,7 +1324,6 @@
"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",
@@ -2070,7 +1340,6 @@
"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",
@@ -2086,7 +1355,6 @@
"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",
@@ -2110,7 +1378,6 @@
"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"
@@ -2126,8 +1393,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "peer": true
+ "dev": true
},
"node_modules/body-parser": {
"version": "1.20.0",
@@ -2173,7 +1439,6 @@
"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"
@@ -2184,7 +1449,6 @@
"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"
},
@@ -2211,7 +1475,6 @@
"url": "https://github.com/sponsors/ai"
}
],
- "peer": true,
"dependencies": {
"caniuse-lite": "^1.0.30001580",
"electron-to-chromium": "^1.4.648",
@@ -2230,7 +1493,6 @@
"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"
}
@@ -2239,8 +1501,7 @@
"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,
- "peer": true
+ "dev": true
},
"node_modules/bytes": {
"version": "3.1.2",
@@ -2251,38 +1512,43 @@
"node": ">= 0.8"
}
},
- "node_modules/cac": {
- "version": "6.7.14",
- "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
- "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
- "dev": true,
+ "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==",
+ "engines": {
+ "node": ">=10.6.0"
+ }
+ },
+ "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==",
+ "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"
+ },
"engines": {
"node": ">=8"
}
},
- "node_modules/cacheable-lookup": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz",
- "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==",
- "engines": {
- "node": ">=14.16"
- }
- },
- "node_modules/cacheable-request": {
- "version": "10.2.14",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz",
- "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==",
+ "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": {
- "@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"
+ "pump": "^3.0.0"
},
"engines": {
- "node": ">=14.16"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/call-bind": {
@@ -2303,7 +1569,6 @@
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true,
- "peer": true,
"engines": {
"node": ">=6"
}
@@ -2313,7 +1578,6 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true,
- "peer": true,
"engines": {
"node": ">=6"
}
@@ -2336,33 +1600,13 @@
"type": "github",
"url": "https://github.com/sponsors/ai"
}
- ],
- "peer": true
- },
- "node_modules/chai": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz",
- "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==",
- "dev": true,
- "dependencies": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.3",
- "deep-eql": "^4.1.3",
- "get-func-name": "^2.0.2",
- "loupe": "^2.3.6",
- "pathval": "^1.1.1",
- "type-detect": "^4.0.8"
- },
- "engines": {
- "node": ">=4"
- }
+ ]
},
"node_modules/chalk": {
"version": "4.1.2",
"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"
@@ -2379,23 +1623,10 @@
"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"
}
},
- "node_modules/check-error": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
- "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
- "dev": true,
- "dependencies": {
- "get-func-name": "^2.0.2"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/ci-info": {
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
@@ -2407,7 +1638,6 @@
"url": "https://github.com/sponsors/sibiraj-s"
}
],
- "peer": true,
"engines": {
"node": ">=8"
}
@@ -2416,15 +1646,13 @@
"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,
- "peer": true
+ "dev": 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",
@@ -2434,12 +1662,19 @@
"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"
@@ -2449,15 +1684,13 @@
"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,
- "peer": true
+ "dev": 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"
},
@@ -2469,15 +1702,25 @@
"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,
- "peer": true
+ "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"
+ }
},
"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,
- "peer": true
+ "dev": true
},
"node_modules/connect": {
"version": "3.7.0",
@@ -2522,15 +1765,13 @@
"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,
- "peer": true
+ "dev": 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",
@@ -2608,7 +1849,6 @@
"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"
},
@@ -2618,24 +1858,11 @@
}
}
},
- "node_modules/deep-eql": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
- "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
- "dev": true,
- "dependencies": {
- "type-detect": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/deepmerge": {
"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,
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -2672,7 +1899,6 @@
"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"
}
@@ -2696,15 +1922,13 @@
"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,
- "peer": true
+ "dev": 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"
},
@@ -2716,8 +1940,7 @@
"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,
- "peer": true
+ "dev": true
},
"node_modules/encodeurl": {
"version": "1.0.2",
@@ -2728,60 +1951,28 @@
"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"
}
},
- "node_modules/esbuild": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz",
- "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==",
- "dev": true,
- "hasInstallScript": true,
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=12"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.19.12",
- "@esbuild/android-arm": "0.19.12",
- "@esbuild/android-arm64": "0.19.12",
- "@esbuild/android-x64": "0.19.12",
- "@esbuild/darwin-arm64": "0.19.12",
- "@esbuild/darwin-x64": "0.19.12",
- "@esbuild/freebsd-arm64": "0.19.12",
- "@esbuild/freebsd-x64": "0.19.12",
- "@esbuild/linux-arm": "0.19.12",
- "@esbuild/linux-arm64": "0.19.12",
- "@esbuild/linux-ia32": "0.19.12",
- "@esbuild/linux-loong64": "0.19.12",
- "@esbuild/linux-mips64el": "0.19.12",
- "@esbuild/linux-ppc64": "0.19.12",
- "@esbuild/linux-riscv64": "0.19.12",
- "@esbuild/linux-s390x": "0.19.12",
- "@esbuild/linux-x64": "0.19.12",
- "@esbuild/netbsd-x64": "0.19.12",
- "@esbuild/openbsd-x64": "0.19.12",
- "@esbuild/sunos-x64": "0.19.12",
- "@esbuild/win32-arm64": "0.19.12",
- "@esbuild/win32-ia32": "0.19.12",
- "@esbuild/win32-x64": "0.19.12"
- }
- },
"node_modules/escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
"dev": true,
- "peer": true,
"engines": {
"node": ">=6"
}
@@ -2797,7 +1988,6 @@
"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"
}
@@ -2807,7 +1997,6 @@
"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"
@@ -2816,21 +2005,11 @@
"node": ">=4"
}
},
- "node_modules/estree-walker": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
- "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.0"
- }
- },
"node_modules/execa": {
"version": "5.1.1",
"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",
@@ -2854,7 +2033,6 @@
"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"
}
@@ -2864,7 +2042,6 @@
"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",
@@ -2880,15 +2057,13 @@
"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,
- "peer": true
+ "dev": 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"
}
@@ -2898,7 +2073,6 @@
"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"
},
@@ -2956,7 +2130,6 @@
"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"
@@ -2965,20 +2138,11 @@
"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,
- "peer": true
+ "dev": true
},
"node_modules/fsevents": {
"version": "2.3.3",
@@ -3008,7 +2172,6 @@
"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"
}
@@ -3018,20 +2181,10 @@
"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.*"
}
},
- "node_modules/get-func-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
- "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
"node_modules/get-intrinsic": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
@@ -3051,7 +2204,6 @@
"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"
}
@@ -3060,6 +2212,7 @@
"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"
},
@@ -3072,7 +2225,6 @@
"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",
@@ -3093,52 +2245,39 @@
"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": "14.2.1",
- "resolved": "https://registry.npmjs.org/got/-/got-14.2.1.tgz",
- "integrity": "sha512-KOaPMremmsvx6l9BLC04LYE6ZFW4x7e4HkTe3LwBmtuYYQwpeS4XKqzhubTIkaQ1Nr+eXxeori0zuwupXMovBQ==",
+ "version": "11.8.6",
+ "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz",
+ "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==",
"dependencies": {
- "@sindresorhus/is": "^6.1.0",
- "@szmarczak/http-timer": "^5.0.1",
- "cacheable-lookup": "^7.0.0",
- "cacheable-request": "^10.2.14",
+ "@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",
"decompress-response": "^6.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"
+ "http2-wrapper": "^1.0.0-beta.5.2",
+ "lowercase-keys": "^2.0.0",
+ "p-cancelable": "^2.0.0",
+ "responselike": "^2.0.0"
},
"engines": {
- "node": ">=20"
+ "node": ">=10.19.0"
},
"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,
- "peer": true
+ "dev": true
},
"node_modules/has": {
"version": "1.0.3",
@@ -3157,7 +2296,6 @@
"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"
}
@@ -3179,7 +2317,6 @@
"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"
},
@@ -3191,8 +2328,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true,
- "peer": true
+ "dev": true
},
"node_modules/http-cache-semantics": {
"version": "4.1.1",
@@ -3225,23 +2361,33 @@
}
},
"node_modules/http2-wrapper": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz",
- "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
+ "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
"dependencies": {
"quick-lru": "^5.1.1",
- "resolve-alpn": "^1.2.0"
+ "resolve-alpn": "^1.0.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"
}
@@ -3263,7 +2409,6 @@
"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"
@@ -3283,7 +2428,6 @@
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
"dev": true,
- "peer": true,
"engines": {
"node": ">=0.8.19"
}
@@ -3293,7 +2437,6 @@
"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"
@@ -3309,15 +2452,13 @@
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true,
- "peer": true
+ "dev": 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"
},
@@ -3330,7 +2471,6 @@
"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"
}
@@ -3340,7 +2480,6 @@
"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"
}
@@ -3350,7 +2489,6 @@
"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"
}
@@ -3360,7 +2498,6 @@
"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"
},
@@ -3379,7 +2516,6 @@
"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"
}
@@ -3389,7 +2525,6 @@
"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",
@@ -3406,7 +2541,6 @@
"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"
},
@@ -3419,7 +2553,6 @@
"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"
},
@@ -3434,15 +2567,13 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true,
- "peer": true
+ "dev": 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",
@@ -3457,7 +2588,6 @@
"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",
@@ -3472,7 +2602,6 @@
"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"
@@ -3486,7 +2615,6 @@
"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",
@@ -3513,7 +2641,6 @@
"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",
@@ -3528,7 +2655,6 @@
"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",
@@ -3560,7 +2686,6 @@
"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",
@@ -3594,7 +2719,6 @@
"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",
@@ -3640,7 +2764,6 @@
"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",
@@ -3656,7 +2779,6 @@
"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"
},
@@ -3669,7 +2791,6 @@
"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",
@@ -3686,7 +2807,6 @@
"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",
@@ -3704,7 +2824,6 @@
"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"
}
@@ -3714,7 +2833,6 @@
"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",
@@ -3740,7 +2858,6 @@
"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"
@@ -3754,7 +2871,6 @@
"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",
@@ -3770,7 +2886,6 @@
"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",
@@ -3791,7 +2906,6 @@
"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": "*",
@@ -3806,7 +2920,6 @@
"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"
},
@@ -3824,7 +2937,6 @@
"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"
}
@@ -3834,7 +2946,6 @@
"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",
@@ -3855,7 +2966,6 @@
"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"
@@ -3869,7 +2979,6 @@
"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",
@@ -3902,7 +3011,6 @@
"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",
@@ -3936,7 +3044,6 @@
"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",
@@ -3968,7 +3075,6 @@
"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"
},
@@ -3981,7 +3087,6 @@
"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"
},
@@ -3996,15 +3101,13 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true,
- "peer": true
+ "dev": 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": "*",
@@ -4022,7 +3125,6 @@
"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",
@@ -4040,7 +3142,6 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true,
- "peer": true,
"engines": {
"node": ">=10"
},
@@ -4053,7 +3154,6 @@
"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",
@@ -4082,7 +3182,6 @@
"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",
@@ -4098,7 +3197,6 @@
"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"
},
@@ -4113,15 +3211,13 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true,
- "peer": true
+ "dev": 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"
@@ -4135,7 +3231,6 @@
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
"dev": true,
- "peer": true,
"bin": {
"jsesc": "bin/jsesc"
},
@@ -4152,15 +3247,13 @@
"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,
- "peer": true
+ "dev": 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"
},
@@ -4176,12 +3269,6 @@
"node": ">= 8"
}
},
- "node_modules/jsonc-parser": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz",
- "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==",
- "dev": true
- },
"node_modules/jsrsasign": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-11.0.0.tgz",
@@ -4191,10 +3278,11 @@
}
},
"node_modules/keyv": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
- "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.2.tgz",
+ "integrity": "sha512-kn8WmodVBe12lmHpA6W8OY7SNh6wVR+Z+wZESF4iF5FCazaVXGWOtnbnvX0tMQ1bO+/TmOD9LziuYMvrIIs0xw==",
"dependencies": {
+ "compress-brotli": "^1.3.8",
"json-buffer": "3.0.1"
}
},
@@ -4203,7 +3291,6 @@
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
"dev": true,
- "peer": true,
"engines": {
"node": ">=6"
}
@@ -4213,7 +3300,6 @@
"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"
}
@@ -4222,31 +3308,13 @@
"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,
- "peer": true
- },
- "node_modules/local-pkg": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz",
- "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==",
- "dev": true,
- "dependencies": {
- "mlly": "^1.4.2",
- "pkg-types": "^1.0.3"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
+ "dev": true
},
"node_modules/locate-path": {
"version": "5.0.0",
"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"
},
@@ -4254,24 +3322,12 @@
"node": ">=8"
}
},
- "node_modules/loupe": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz",
- "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==",
- "dev": true,
- "dependencies": {
- "get-func-name": "^2.0.1"
- }
- },
"node_modules/lowercase-keys": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz",
- "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
+ "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=8"
}
},
"node_modules/lru-cache": {
@@ -4279,29 +3335,15 @@
"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"
}
},
- "node_modules/magic-string": {
- "version": "0.30.8",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz",
- "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==",
- "dev": true,
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.4.15"
- },
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/make-dir": {
"version": "4.0.0",
"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"
},
@@ -4317,7 +3359,6 @@
"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"
},
@@ -4330,7 +3371,6 @@
"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"
},
@@ -4345,15 +3385,13 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true,
- "peer": true
+ "dev": 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"
}
@@ -4378,7 +3416,6 @@
"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"
@@ -4413,20 +3450,16 @@
"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": "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==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=4"
}
},
"node_modules/minimatch": {
@@ -4434,7 +3467,6 @@
"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"
},
@@ -4442,18 +3474,6 @@
"node": "*"
}
},
- "node_modules/mlly": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz",
- "integrity": "sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==",
- "dev": true,
- "dependencies": {
- "acorn": "^8.11.3",
- "pathe": "^1.1.2",
- "pkg-types": "^1.0.3",
- "ufo": "^1.3.2"
- }
- },
"node_modules/mock-http-server": {
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/mock-http-server/-/mock-http-server-1.4.5.tgz",
@@ -4531,61 +3551,39 @@
}
]
},
- "node_modules/nanoid": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
- "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
"node_modules/natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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": "8.0.1",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz",
- "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
+ "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
"engines": {
- "node": ">=14.16"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -4596,7 +3594,6 @@
"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"
},
@@ -4629,8 +3626,6 @@
"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"
}
@@ -4640,7 +3635,6 @@
"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"
},
@@ -4652,11 +3646,11 @@
}
},
"node_modules/p-cancelable": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz",
- "integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz",
+ "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==",
"engines": {
- "node": ">=14.16"
+ "node": ">=8"
}
},
"node_modules/p-limit": {
@@ -4664,7 +3658,6 @@
"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"
},
@@ -4680,7 +3673,6 @@
"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"
},
@@ -4693,7 +3685,6 @@
"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"
},
@@ -4709,7 +3700,6 @@
"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"
}
@@ -4719,7 +3709,6 @@
"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",
@@ -4747,7 +3736,6 @@
"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"
}
@@ -4757,7 +3745,6 @@
"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"
}
@@ -4775,24 +3762,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,
- "peer": true
- },
- "node_modules/pathe": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
- "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
"dev": true
},
- "node_modules/pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -4804,7 +3775,6 @@
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
- "peer": true,
"engines": {
"node": ">=8.6"
},
@@ -4817,7 +3787,6 @@
"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"
}
@@ -4827,7 +3796,6 @@
"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"
},
@@ -4835,45 +3803,6 @@
"node": ">=8"
}
},
- "node_modules/pkg-types": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz",
- "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==",
- "dev": true,
- "dependencies": {
- "jsonc-parser": "^3.2.0",
- "mlly": "^1.2.0",
- "pathe": "^1.1.0"
- }
- },
- "node_modules/postcss": {
- "version": "8.4.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
- "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "nanoid": "^3.3.7",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
"node_modules/pretty-format": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
@@ -4905,7 +3834,6 @@
"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"
@@ -4914,6 +3842,15 @@
"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",
@@ -4928,8 +3865,7 @@
"type": "opencollective",
"url": "https://opencollective.com/fast-check"
}
- ],
- "peer": true
+ ]
},
"node_modules/qs": {
"version": "6.10.3",
@@ -4946,17 +3882,6 @@
"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",
@@ -4992,7 +3917,6 @@
"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"
}
@@ -5002,7 +3926,6 @@
"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",
@@ -5016,16 +3939,15 @@
}
},
"node_modules/resolve-alpn": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
- "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz",
+ "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA=="
},
"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"
},
@@ -5038,7 +3960,6 @@
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
- "peer": true,
"engines": {
"node": ">=8"
}
@@ -5048,55 +3969,16 @@
"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": "3.0.0",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz",
- "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
+ "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
"dependencies": {
- "lowercase-keys": "^3.0.0"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/rollup": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.1.tgz",
- "integrity": "sha512-ggqQKvx/PsB0FaWXhIvVkSWh7a/PCLQAsMjBc+nA2M8Rv2/HG0X6zvixAB7KyZBRtifBUhy5k8voQX/mRnABPg==",
- "dev": true,
- "dependencies": {
- "@types/estree": "1.0.5"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.12.1",
- "@rollup/rollup-android-arm64": "4.12.1",
- "@rollup/rollup-darwin-arm64": "4.12.1",
- "@rollup/rollup-darwin-x64": "4.12.1",
- "@rollup/rollup-linux-arm-gnueabihf": "4.12.1",
- "@rollup/rollup-linux-arm64-gnu": "4.12.1",
- "@rollup/rollup-linux-arm64-musl": "4.12.1",
- "@rollup/rollup-linux-riscv64-gnu": "4.12.1",
- "@rollup/rollup-linux-x64-gnu": "4.12.1",
- "@rollup/rollup-linux-x64-musl": "4.12.1",
- "@rollup/rollup-win32-arm64-msvc": "4.12.1",
- "@rollup/rollup-win32-ia32-msvc": "4.12.1",
- "@rollup/rollup-win32-x64-msvc": "4.12.1",
- "fsevents": "~2.3.2"
+ "lowercase-keys": "^2.0.0"
}
},
"node_modules/safer-buffer": {
@@ -5110,7 +3992,6 @@
"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"
}
@@ -5156,32 +4037,23 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/siginfo": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
- "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
- "dev": true
- },
"node_modules/signal-exit": {
"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,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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"
}
@@ -5191,16 +4063,6 @@
"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"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -5210,7 +4072,6 @@
"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"
@@ -5220,15 +4081,13 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "dev": true,
- "peer": true
+ "dev": 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"
},
@@ -5236,12 +4095,6 @@
"node": ">=10"
}
},
- "node_modules/stackback": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
- "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
- "dev": true
- },
"node_modules/statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
@@ -5251,18 +4104,11 @@
"node": ">= 0.6"
}
},
- "node_modules/std-env": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz",
- "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==",
- "dev": true
- },
"node_modules/string-length": {
"version": "4.0.2",
"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"
@@ -5276,7 +4122,6 @@
"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",
@@ -5291,7 +4136,6 @@
"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"
},
@@ -5304,7 +4148,6 @@
"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"
}
@@ -5314,7 +4157,6 @@
"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"
}
@@ -5324,7 +4166,6 @@
"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"
},
@@ -5332,30 +4173,11 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/strip-literal": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.0.0.tgz",
- "integrity": "sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==",
- "dev": true,
- "dependencies": {
- "js-tokens": "^8.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
- "node_modules/strip-literal/node_modules/js-tokens": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz",
- "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==",
- "dev": true
- },
"node_modules/supports-color": {
"version": "7.2.0",
"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"
},
@@ -5368,7 +4190,6 @@
"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"
},
@@ -5381,7 +4202,6 @@
"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",
@@ -5391,43 +4211,17 @@
"node": ">=8"
}
},
- "node_modules/tinybench": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz",
- "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==",
- "dev": true
- },
- "node_modules/tinypool": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz",
- "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==",
- "dev": true,
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/tinyspy": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz",
- "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==",
- "dev": true,
- "engines": {
- "node": ">=14.0.0"
- }
- },
"node_modules/tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
"integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
- "dev": true,
- "peer": true
+ "dev": 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"
}
@@ -5437,7 +4231,6 @@
"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"
},
@@ -5458,6 +4251,7 @@
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
+ "dev": true,
"engines": {
"node": ">=0.6.11 <=0.7.0 || >=0.7.3"
}
@@ -5476,7 +4270,6 @@
"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"
},
@@ -5497,12 +4290,6 @@
"node": ">= 0.6"
}
},
- "node_modules/ufo": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz",
- "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==",
- "dev": true
- },
"node_modules/uid-safe": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
@@ -5521,13 +4308,6 @@
"integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==",
"dev": true
},
- "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==",
- "dev": true,
- "peer": true
- },
"node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -5556,7 +4336,6 @@
"url": "https://github.com/sponsors/ai"
}
],
- "peer": true,
"dependencies": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
@@ -5581,6 +4360,7 @@
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "dev": true,
"bin": {
"uuid": "dist/bin/uuid"
}
@@ -5590,7 +4370,6 @@
"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",
@@ -5600,288 +4379,11 @@
"node": ">=10.12.0"
}
},
- "node_modules/vite": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.5.tgz",
- "integrity": "sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==",
- "dev": true,
- "dependencies": {
- "esbuild": "^0.19.3",
- "postcss": "^8.4.35",
- "rollup": "^4.2.0"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": "^18.0.0 || >=20.0.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- },
- "peerDependencies": {
- "@types/node": "^18.0.0 || >=20.0.0",
- "less": "*",
- "lightningcss": "^1.21.0",
- "sass": "*",
- "stylus": "*",
- "sugarss": "*",
- "terser": "^5.4.0"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- }
- }
- },
- "node_modules/vite-node": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.3.1.tgz",
- "integrity": "sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==",
- "dev": true,
- "dependencies": {
- "cac": "^6.7.14",
- "debug": "^4.3.4",
- "pathe": "^1.1.1",
- "picocolors": "^1.0.0",
- "vite": "^5.0.0"
- },
- "bin": {
- "vite-node": "vite-node.mjs"
- },
- "engines": {
- "node": "^18.0.0 || >=20.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- }
- },
- "node_modules/vitest": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.3.1.tgz",
- "integrity": "sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==",
- "dev": true,
- "dependencies": {
- "@vitest/expect": "1.3.1",
- "@vitest/runner": "1.3.1",
- "@vitest/snapshot": "1.3.1",
- "@vitest/spy": "1.3.1",
- "@vitest/utils": "1.3.1",
- "acorn-walk": "^8.3.2",
- "chai": "^4.3.10",
- "debug": "^4.3.4",
- "execa": "^8.0.1",
- "local-pkg": "^0.5.0",
- "magic-string": "^0.30.5",
- "pathe": "^1.1.1",
- "picocolors": "^1.0.0",
- "std-env": "^3.5.0",
- "strip-literal": "^2.0.0",
- "tinybench": "^2.5.1",
- "tinypool": "^0.8.2",
- "vite": "^5.0.0",
- "vite-node": "1.3.1",
- "why-is-node-running": "^2.2.2"
- },
- "bin": {
- "vitest": "vitest.mjs"
- },
- "engines": {
- "node": "^18.0.0 || >=20.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/vitest"
- },
- "peerDependencies": {
- "@edge-runtime/vm": "*",
- "@types/node": "^18.0.0 || >=20.0.0",
- "@vitest/browser": "1.3.1",
- "@vitest/ui": "1.3.1",
- "happy-dom": "*",
- "jsdom": "*"
- },
- "peerDependenciesMeta": {
- "@edge-runtime/vm": {
- "optional": true
- },
- "@types/node": {
- "optional": true
- },
- "@vitest/browser": {
- "optional": true
- },
- "@vitest/ui": {
- "optional": true
- },
- "happy-dom": {
- "optional": true
- },
- "jsdom": {
- "optional": true
- }
- }
- },
- "node_modules/vitest/node_modules/execa": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
- "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^8.0.1",
- "human-signals": "^5.0.0",
- "is-stream": "^3.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^5.1.0",
- "onetime": "^6.0.0",
- "signal-exit": "^4.1.0",
- "strip-final-newline": "^3.0.0"
- },
- "engines": {
- "node": ">=16.17"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/vitest/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==",
- "dev": true,
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/vitest/node_modules/human-signals": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
- "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
- "dev": true,
- "engines": {
- "node": ">=16.17.0"
- }
- },
- "node_modules/vitest/node_modules/is-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
- "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
- "dev": true,
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/vitest/node_modules/mimic-fn": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
- "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/vitest/node_modules/npm-run-path": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
- "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
- "dev": true,
- "dependencies": {
- "path-key": "^4.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/vitest/node_modules/onetime": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
- "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
- "dev": true,
- "dependencies": {
- "mimic-fn": "^4.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/vitest/node_modules/path-key": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
- "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/vitest/node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/vitest/node_modules/strip-final-newline": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
- "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/walker": {
"version": "1.0.8",
"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"
}
@@ -5901,28 +4403,11 @@
"node": ">= 8"
}
},
- "node_modules/why-is-node-running": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz",
- "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==",
- "dev": true,
- "dependencies": {
- "siginfo": "^2.0.0",
- "stackback": "0.0.2"
- },
- "bin": {
- "why-is-node-running": "cli.js"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/wrap-ansi": {
"version": "7.0.0",
"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",
@@ -5938,16 +4423,13 @@
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true,
- "peer": true
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"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"
@@ -5961,7 +4443,6 @@
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true,
- "peer": true,
"engines": {
"node": ">=10"
}
@@ -5970,15 +4451,13 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true,
- "peer": true
+ "dev": 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",
@@ -5997,7 +4476,6 @@
"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"
}
@@ -6007,7 +4485,6 @@
"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"
},
@@ -6021,6 +4498,7 @@
"version": "1.10.1",
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz",
"integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==",
+ "dev": true,
"requires": {
"@actions/http-client": "^2.0.1",
"uuid": "^8.3.2"
@@ -6030,6 +4508,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
"integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
+ "dev": true,
"requires": {
"tunnel": "^0.0.6"
}
@@ -6039,7 +4518,6 @@
"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"
@@ -6050,7 +4528,6 @@
"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"
@@ -6061,7 +4538,6 @@
"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"
}
@@ -6071,7 +4547,6 @@
"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",
@@ -6083,7 +4558,6 @@
"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,29 +4566,25 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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"
}
@@ -6125,15 +4595,13 @@
"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,
- "peer": true
+ "dev": 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",
@@ -6157,7 +4625,6 @@
"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",
@@ -6170,7 +4637,6 @@
"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",
@@ -6183,15 +4649,13 @@
"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,
- "peer": true
+ "dev": 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"
@@ -6202,7 +4666,6 @@
"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"
}
@@ -6212,7 +4675,6 @@
"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"
}
@@ -6222,7 +4684,6 @@
"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",
@@ -6235,15 +4696,13 @@
"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,
- "peer": true
+ "dev": 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"
}
@@ -6253,7 +4712,6 @@
"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"
}
@@ -6262,29 +4720,25 @@
"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,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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",
@@ -6296,7 +4750,6 @@
"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",
@@ -6308,7 +4761,6 @@
"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"
}
@@ -6318,7 +4770,6 @@
"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",
@@ -6330,7 +4781,6 @@
"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"
}
@@ -6339,29 +4789,25 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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"
}
@@ -6372,15 +4818,13 @@
"version": "7.23.9",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz",
"integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==",
- "dev": true,
- "peer": true
+ "dev": 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"
}
@@ -6390,7 +4834,6 @@
"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"
}
@@ -6400,7 +4843,6 @@
"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"
}
@@ -6410,7 +4852,6 @@
"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"
}
@@ -6420,7 +4861,6 @@
"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"
}
@@ -6430,7 +4870,6 @@
"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"
}
@@ -6440,7 +4879,6 @@
"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"
}
@@ -6450,7 +4888,6 @@
"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"
}
@@ -6460,7 +4897,6 @@
"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"
}
@@ -6470,7 +4906,6 @@
"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"
}
@@ -6480,7 +4915,6 @@
"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"
}
@@ -6490,7 +4924,6 @@
"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"
}
@@ -6500,7 +4933,6 @@
"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"
}
@@ -6510,7 +4942,6 @@
"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"
}
@@ -6520,7 +4951,6 @@
"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",
@@ -6532,7 +4962,6 @@
"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",
@@ -6551,7 +4980,6 @@
"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",
@@ -6562,176 +4990,13 @@
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
- "dev": true,
- "peer": true
- },
- "@esbuild/aix-ppc64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
- "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/android-arm": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz",
- "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==",
- "dev": true,
- "optional": true
- },
- "@esbuild/android-arm64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz",
- "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/android-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz",
- "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==",
- "dev": true,
- "optional": true
- },
- "@esbuild/darwin-arm64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz",
- "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==",
- "dev": true,
- "optional": true
- },
- "@esbuild/darwin-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz",
- "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==",
- "dev": true,
- "optional": true
- },
- "@esbuild/freebsd-arm64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz",
- "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/freebsd-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz",
- "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-arm": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz",
- "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-arm64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz",
- "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-ia32": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz",
- "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-loong64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz",
- "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-mips64el": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz",
- "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-ppc64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz",
- "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-riscv64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz",
- "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-s390x": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz",
- "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz",
- "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/netbsd-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz",
- "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/openbsd-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz",
- "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/sunos-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz",
- "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/win32-arm64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz",
- "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==",
- "dev": true,
- "optional": true
- },
- "@esbuild/win32-ia32": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz",
- "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/win32-x64": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz",
- "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==",
- "dev": true,
- "optional": true
+ "dev": true
},
"@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"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",
@@ -6744,15 +5009,13 @@
"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,
- "peer": true
+ "dev": 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": "*",
@@ -6767,7 +5030,6 @@
"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",
@@ -6804,7 +5066,6 @@
"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",
@@ -6817,7 +5078,6 @@
"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"
@@ -6828,7 +5088,6 @@
"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"
}
@@ -6838,7 +5097,6 @@
"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",
@@ -6853,7 +5111,6 @@
"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",
@@ -6866,7 +5123,6 @@
"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",
@@ -6908,7 +5164,6 @@
"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",
@@ -6920,7 +5175,6 @@
"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",
@@ -6933,7 +5187,6 @@
"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",
@@ -6946,7 +5199,6 @@
"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",
@@ -6970,7 +5222,6 @@
"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",
@@ -6985,7 +5236,6 @@
"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",
@@ -6996,15 +5246,13 @@
"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,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": true
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.15",
@@ -7017,103 +5265,11 @@
"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"
}
},
- "@rollup/rollup-android-arm-eabi": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.1.tgz",
- "integrity": "sha512-iU2Sya8hNn1LhsYyf0N+L4Gf9Qc+9eBTJJJsaOGUp+7x4n2M9dxTt8UvhJl3oeftSjblSlpCfvjA/IfP3g5VjQ==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-android-arm64": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.1.tgz",
- "integrity": "sha512-wlzcWiH2Ir7rdMELxFE5vuM7D6TsOcJ2Yw0c3vaBR3VOsJFVTx9xvwnAvhgU5Ii8Gd6+I11qNHwndDscIm0HXg==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-darwin-arm64": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.1.tgz",
- "integrity": "sha512-YRXa1+aZIFN5BaImK+84B3uNK8C6+ynKLPgvn29X9s0LTVCByp54TB7tdSMHDR7GTV39bz1lOmlLDuedgTwwHg==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-darwin-x64": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.1.tgz",
- "integrity": "sha512-opjWJ4MevxeA8FhlngQWPBOvVWYNPFkq6/25rGgG+KOy0r8clYwL1CFd+PGwRqqMFVQ4/Qd3sQu5t7ucP7C/Uw==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.1.tgz",
- "integrity": "sha512-uBkwaI+gBUlIe+EfbNnY5xNyXuhZbDSx2nzzW8tRMjUmpScd6lCQYKY2V9BATHtv5Ef2OBq6SChEP8h+/cxifQ==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-linux-arm64-gnu": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.1.tgz",
- "integrity": "sha512-0bK9aG1kIg0Su7OcFTlexkVeNZ5IzEsnz1ept87a0TUgZ6HplSgkJAnFpEVRW7GRcikT4GlPV0pbtVedOaXHQQ==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-linux-arm64-musl": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.1.tgz",
- "integrity": "sha512-qB6AFRXuP8bdkBI4D7UPUbE7OQf7u5OL+R94JE42Z2Qjmyj74FtDdLGeriRyBDhm4rQSvqAGCGC01b8Fu2LthQ==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.1.tgz",
- "integrity": "sha512-sHig3LaGlpNgDj5o8uPEoGs98RII8HpNIqFtAI8/pYABO8i0nb1QzT0JDoXF/pxzqO+FkxvwkHZo9k0NJYDedg==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-linux-x64-gnu": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.1.tgz",
- "integrity": "sha512-nD3YcUv6jBJbBNFvSbp0IV66+ba/1teuBcu+fBBPZ33sidxitc6ErhON3JNavaH8HlswhWMC3s5rgZpM4MtPqQ==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-linux-x64-musl": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.1.tgz",
- "integrity": "sha512-7/XVZqgBby2qp/cO0TQ8uJK+9xnSdJ9ct6gSDdEr4MfABrjTyrW6Bau7HQ73a2a5tPB7hno49A0y1jhWGDN9OQ==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-win32-arm64-msvc": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.1.tgz",
- "integrity": "sha512-CYc64bnICG42UPL7TrhIwsJW4QcKkIt9gGlj21gq3VV0LL6XNb1yAdHVp1pIi9gkts9gGcT3OfUYHjGP7ETAiw==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-win32-ia32-msvc": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.1.tgz",
- "integrity": "sha512-LN+vnlZ9g0qlHGlS920GR4zFCqAwbv2lULrR29yGaWP9u7wF5L7GqWu9Ah6/kFZPXPUkpdZwd//TNR+9XC9hvA==",
- "dev": true,
- "optional": true
- },
- "@rollup/rollup-win32-x64-msvc": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.1.tgz",
- "integrity": "sha512-n+vkrSyphvmU0qkQ6QBNXCGr2mKjhP08mPRM/Xp5Ck2FV4NrHU+y6axzDeixUrCBHVUS51TZhjqrKBBsHLKb2Q==",
- "dev": true,
- "optional": true
- },
"@sinclair/typebox": {
"version": "0.27.8",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
@@ -7121,16 +5277,15 @@
"dev": true
},
"@sindresorhus/is": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-6.2.0.tgz",
- "integrity": "sha512-yM/IGPkVnYGblhDosFBwq0ZGdnVSBkNV4onUtipGMOjZd4kB6GAu3ys91aftSbyMHh6A2GPdt+KDI5NoWP63MQ=="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz",
+ "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ=="
},
"@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"
}
@@ -7140,17 +5295,16 @@
"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": "5.0.1",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz",
- "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz",
+ "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==",
"requires": {
- "defer-to-connect": "^2.0.1"
+ "defer-to-connect": "^2.0.0"
}
},
"@types/babel__core": {
@@ -7158,7 +5312,6 @@
"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",
@@ -7172,7 +5325,6 @@
"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"
}
@@ -7182,7 +5334,6 @@
"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"
@@ -7193,45 +5344,46 @@
"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/estree": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
- "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
- "dev": true
+ "@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/graceful-fs": {
"version": "4.1.9",
"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.4",
- "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
- "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA=="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz",
+ "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A=="
},
"@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,
- "peer": true
+ "dev": 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": "*"
}
@@ -7241,34 +5393,47 @@
"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/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,
+ "@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": {
- "undici-types": "~5.26.4"
+ "@types/node": "*"
+ }
+ },
+ "@types/node": {
+ "version": "12.7.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.5.tgz",
+ "integrity": "sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w=="
+ },
+ "@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,
- "peer": true
+ "dev": 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": "*"
}
@@ -7277,8 +5442,7 @@
"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,
- "peer": true
+ "dev": true
},
"@vercel/ncc": {
"version": "0.38.1",
@@ -7286,95 +5450,11 @@
"integrity": "sha512-IBBb+iI2NLu4VQn3Vwldyi2QwaXt5+hTyh58ggAMoCGE6DJmPvwL3KPBWcJl1m9LYPChBLE980Jw+CS4Wokqxw==",
"dev": true
},
- "@vitest/expect": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.3.1.tgz",
- "integrity": "sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==",
- "dev": true,
- "requires": {
- "@vitest/spy": "1.3.1",
- "@vitest/utils": "1.3.1",
- "chai": "^4.3.10"
- }
- },
- "@vitest/runner": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.3.1.tgz",
- "integrity": "sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg==",
- "dev": true,
- "requires": {
- "@vitest/utils": "1.3.1",
- "p-limit": "^5.0.0",
- "pathe": "^1.1.1"
- },
- "dependencies": {
- "p-limit": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz",
- "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==",
- "dev": true,
- "requires": {
- "yocto-queue": "^1.0.0"
- }
- },
- "yocto-queue": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
- "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
- "dev": true
- }
- }
- },
- "@vitest/snapshot": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.3.1.tgz",
- "integrity": "sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==",
- "dev": true,
- "requires": {
- "magic-string": "^0.30.5",
- "pathe": "^1.1.1",
- "pretty-format": "^29.7.0"
- }
- },
- "@vitest/spy": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.3.1.tgz",
- "integrity": "sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==",
- "dev": true,
- "requires": {
- "tinyspy": "^2.2.0"
- }
- },
- "@vitest/utils": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.3.1.tgz",
- "integrity": "sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==",
- "dev": true,
- "requires": {
- "diff-sequences": "^29.6.3",
- "estree-walker": "^3.0.3",
- "loupe": "^2.3.7",
- "pretty-format": "^29.7.0"
- }
- },
- "acorn": {
- "version": "8.11.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
- "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
- "dev": true
- },
- "acorn-walk": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
- "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
- "dev": true
- },
"ansi-escapes": {
"version": "4.3.2",
"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"
}
@@ -7383,15 +5463,13 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "peer": true
+ "dev": 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"
}
@@ -7401,7 +5479,6 @@
"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"
@@ -7412,23 +5489,15 @@
"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"
}
},
- "assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true
- },
"babel-jest": {
"version": "29.7.0",
"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",
@@ -7444,7 +5513,6 @@
"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",
@@ -7458,7 +5526,6 @@
"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",
@@ -7474,7 +5541,6 @@
"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",
@@ -7487,7 +5553,6 @@
"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",
@@ -7508,7 +5573,6 @@
"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"
@@ -7518,8 +5582,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "peer": true
+ "dev": true
},
"body-parser": {
"version": "1.20.0",
@@ -7563,7 +5626,6 @@
"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"
@@ -7574,7 +5636,6 @@
"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"
}
@@ -7584,7 +5645,6 @@
"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",
@@ -7597,7 +5657,6 @@
"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"
}
@@ -7606,8 +5665,7 @@
"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,
- "peer": true
+ "dev": true
},
"bytes": {
"version": "3.1.2",
@@ -7615,29 +5673,33 @@
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
"dev": true
},
- "cac": {
- "version": "6.7.14",
- "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
- "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
- "dev": true
- },
"cacheable-lookup": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz",
- "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w=="
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
+ "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA=="
},
"cacheable-request": {
- "version": "10.2.14",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz",
- "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz",
+ "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==",
"requires": {
- "@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"
+ "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"
+ }
+ }
}
},
"call-bind": {
@@ -7654,44 +5716,25 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "peer": true
+ "dev": true
},
"camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true,
- "peer": true
+ "dev": 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,
- "peer": true
- },
- "chai": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz",
- "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==",
- "dev": true,
- "requires": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.3",
- "deep-eql": "^4.1.3",
- "get-func-name": "^2.0.2",
- "loupe": "^2.3.6",
- "pathval": "^1.1.1",
- "type-detect": "^4.0.8"
- }
+ "dev": true
},
"chalk": {
"version": "4.1.2",
"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"
@@ -7701,64 +5744,56 @@
"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,
- "peer": true
- },
- "check-error": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
- "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
- "dev": true,
- "requires": {
- "get-func-name": "^2.0.2"
- }
+ "dev": true
},
"ci-info": {
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
"integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
- "dev": true,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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"
}
@@ -7767,15 +5802,22 @@
"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,
- "peer": true
+ "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"
+ }
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true,
- "peer": true
+ "dev": true
},
"connect": {
"version": "3.7.0",
@@ -7816,15 +5858,13 @@
"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,
- "peer": true
+ "dev": 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",
@@ -7875,24 +5915,13 @@
"resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz",
"integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==",
"dev": true,
- "peer": true,
"requires": {}
},
- "deep-eql": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
- "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
- "dev": true,
- "requires": {
- "type-detect": "^4.0.0"
- }
- },
"deepmerge": {
"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,
- "peer": true
+ "dev": true
},
"defer-to-connect": {
"version": "2.0.1",
@@ -7915,8 +5944,7 @@
"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,
- "peer": true
+ "dev": true
},
"diff-sequences": {
"version": "29.6.3",
@@ -7934,22 +5962,19 @@
"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,
- "peer": true
+ "dev": true
},
"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
+ "dev": 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,
- "peer": true
+ "dev": true
},
"encodeurl": {
"version": "1.0.2",
@@ -7957,53 +5982,28 @@
"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"
}
},
- "esbuild": {
- "version": "0.19.12",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz",
- "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==",
- "dev": true,
- "requires": {
- "@esbuild/aix-ppc64": "0.19.12",
- "@esbuild/android-arm": "0.19.12",
- "@esbuild/android-arm64": "0.19.12",
- "@esbuild/android-x64": "0.19.12",
- "@esbuild/darwin-arm64": "0.19.12",
- "@esbuild/darwin-x64": "0.19.12",
- "@esbuild/freebsd-arm64": "0.19.12",
- "@esbuild/freebsd-x64": "0.19.12",
- "@esbuild/linux-arm": "0.19.12",
- "@esbuild/linux-arm64": "0.19.12",
- "@esbuild/linux-ia32": "0.19.12",
- "@esbuild/linux-loong64": "0.19.12",
- "@esbuild/linux-mips64el": "0.19.12",
- "@esbuild/linux-ppc64": "0.19.12",
- "@esbuild/linux-riscv64": "0.19.12",
- "@esbuild/linux-s390x": "0.19.12",
- "@esbuild/linux-x64": "0.19.12",
- "@esbuild/netbsd-x64": "0.19.12",
- "@esbuild/openbsd-x64": "0.19.12",
- "@esbuild/sunos-x64": "0.19.12",
- "@esbuild/win32-arm64": "0.19.12",
- "@esbuild/win32-ia32": "0.19.12",
- "@esbuild/win32-x64": "0.19.12"
- }
- },
"escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true,
- "peer": true
+ "dev": true
},
"escape-html": {
"version": "1.0.3",
@@ -8015,31 +6015,19 @@
"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,
- "peer": true
+ "dev": 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,
- "peer": true
- },
- "estree-walker": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
- "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
- "dev": true,
- "requires": {
- "@types/estree": "^1.0.0"
- }
+ "dev": true
},
"execa": {
"version": "5.1.1",
"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",
@@ -8056,15 +6044,13 @@
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
"integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
- "dev": true,
- "peer": true
+ "dev": 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",
@@ -8077,15 +6063,13 @@
"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,
- "peer": true
+ "dev": 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"
}
@@ -8095,7 +6079,6 @@
"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"
}
@@ -8146,23 +6129,16 @@
"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,
- "peer": true
+ "dev": true
},
"fsevents": {
"version": "2.3.3",
@@ -8181,20 +6157,12 @@
"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,
- "peer": true
+ "dev": 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,
- "peer": true
- },
- "get-func-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
- "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
"dev": true
},
"get-intrinsic": {
@@ -8212,20 +6180,19 @@
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
"integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
- "dev": true,
- "peer": true
+ "dev": 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=="
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true
},
"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",
@@ -8239,40 +6206,31 @@
"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,
- "peer": true
+ "dev": true
},
"got": {
- "version": "14.2.1",
- "resolved": "https://registry.npmjs.org/got/-/got-14.2.1.tgz",
- "integrity": "sha512-KOaPMremmsvx6l9BLC04LYE6ZFW4x7e4HkTe3LwBmtuYYQwpeS4XKqzhubTIkaQ1Nr+eXxeori0zuwupXMovBQ==",
+ "version": "11.8.6",
+ "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz",
+ "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==",
"requires": {
- "@sindresorhus/is": "^6.1.0",
- "@szmarczak/http-timer": "^5.0.1",
- "cacheable-lookup": "^7.0.0",
- "cacheable-request": "^10.2.14",
+ "@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",
"decompress-response": "^6.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=="
- }
+ "http2-wrapper": "^1.0.0-beta.5.2",
+ "lowercase-keys": "^2.0.0",
+ "p-cancelable": "^2.0.0",
+ "responselike": "^2.0.0"
}
},
"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,
- "peer": true
+ "dev": true
},
"has": {
"version": "1.0.3",
@@ -8287,8 +6245,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "peer": true
+ "dev": true
},
"has-symbols": {
"version": "1.0.3",
@@ -8301,7 +6258,6 @@
"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"
}
@@ -8310,8 +6266,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true,
- "peer": true
+ "dev": true
},
"http-cache-semantics": {
"version": "4.1.1",
@@ -8340,20 +6295,26 @@
}
},
"http2-wrapper": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz",
- "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
+ "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
"requires": {
"quick-lru": "^5.1.1",
- "resolve-alpn": "^1.2.0"
+ "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=="
+ }
}
},
"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
+ "dev": true
},
"iconv-lite": {
"version": "0.4.24",
@@ -8369,7 +6330,6 @@
"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"
@@ -8379,15 +6339,13 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
- "peer": true
+ "dev": 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"
@@ -8403,15 +6361,13 @@
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true,
- "peer": true
+ "dev": 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"
}
@@ -8420,29 +6376,25 @@
"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,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": true
},
"isexe": {
"version": "2.0.0",
@@ -8454,15 +6406,13 @@
"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,
- "peer": true
+ "dev": 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",
@@ -8476,7 +6426,6 @@
"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"
}
@@ -8486,7 +6435,6 @@
"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"
}
@@ -8495,8 +6443,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true,
- "peer": true
+ "dev": true
}
}
},
@@ -8505,7 +6452,6 @@
"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",
@@ -8517,7 +6463,6 @@
"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",
@@ -8529,7 +6474,6 @@
"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"
@@ -8540,7 +6484,6 @@
"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",
@@ -8553,7 +6496,6 @@
"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",
@@ -8565,7 +6507,6 @@
"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",
@@ -8594,7 +6535,6 @@
"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",
@@ -8614,7 +6554,6 @@
"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",
@@ -8645,7 +6584,6 @@
"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",
@@ -8658,7 +6596,6 @@
"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"
}
@@ -8668,7 +6605,6 @@
"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",
@@ -8682,7 +6618,6 @@
"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",
@@ -8696,15 +6631,13 @@
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
"integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
- "dev": true,
- "peer": true
+ "dev": 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",
@@ -8725,7 +6658,6 @@
"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"
@@ -8736,7 +6668,6 @@
"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",
@@ -8749,7 +6680,6 @@
"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",
@@ -8767,7 +6697,6 @@
"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": "*",
@@ -8779,22 +6708,19 @@
"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,
- "peer": true
+ "dev": 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",
@@ -8812,7 +6738,6 @@
"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"
@@ -8823,7 +6748,6 @@
"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",
@@ -8853,7 +6777,6 @@
"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",
@@ -8884,7 +6807,6 @@
"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",
@@ -8913,7 +6835,6 @@
"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"
}
@@ -8923,7 +6844,6 @@
"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"
}
@@ -8932,8 +6852,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true,
- "peer": true
+ "dev": true
}
}
},
@@ -8942,7 +6861,6 @@
"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": "*",
@@ -8957,7 +6875,6 @@
"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",
@@ -8971,8 +6888,7 @@
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true,
- "peer": true
+ "dev": true
}
}
},
@@ -8981,7 +6897,6 @@
"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",
@@ -9005,7 +6920,6 @@
"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",
@@ -9018,7 +6932,6 @@
"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"
}
@@ -9029,15 +6942,13 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true,
- "peer": true
+ "dev": 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"
@@ -9047,8 +6958,7 @@
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true,
- "peer": true
+ "dev": true
},
"json-buffer": {
"version": "3.0.1",
@@ -9059,37 +6969,30 @@
"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,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": true
},
"jsonata": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/jsonata/-/jsonata-2.0.4.tgz",
"integrity": "sha512-vfavX4/G/yrYxE+UrmT/oUJ3ph7KqUrb0R7b0LVRcntQwxw+Z5kA1pNUIQzX5hF04Oe1eKxyoIPsmXtc2LgJTQ=="
},
- "jsonc-parser": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz",
- "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==",
- "dev": true
- },
"jsrsasign": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-11.0.0.tgz",
"integrity": "sha512-BtRwVKS+5dsgPpAtzJcpo5OoWjSs1/zllSBG0+8o8/aV0Ki76m6iZwHnwnsqoTdhfFZDN1XIdcaZr5ZkP+H2gg=="
},
"keyv": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
- "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.2.tgz",
+ "integrity": "sha512-kn8WmodVBe12lmHpA6W8OY7SNh6wVR+Z+wZESF4iF5FCazaVXGWOtnbnvX0tMQ1bO+/TmOD9LziuYMvrIIs0xw==",
"requires": {
+ "compress-brotli": "^1.3.8",
"json-buffer": "3.0.1"
}
},
@@ -9097,82 +7000,48 @@
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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,
- "peer": true
- },
- "local-pkg": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz",
- "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==",
- "dev": true,
- "requires": {
- "mlly": "^1.4.2",
- "pkg-types": "^1.0.3"
- }
+ "dev": true
},
"locate-path": {
"version": "5.0.0",
"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"
}
},
- "loupe": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz",
- "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==",
- "dev": true,
- "requires": {
- "get-func-name": "^2.0.1"
- }
- },
"lowercase-keys": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz",
- "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ=="
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
+ "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
},
"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"
}
},
- "magic-string": {
- "version": "0.30.8",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz",
- "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==",
- "dev": true,
- "requires": {
- "@jridgewell/sourcemap-codec": "^1.4.15"
- }
- },
"make-dir": {
"version": "4.0.0",
"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"
},
@@ -9182,7 +7051,6 @@
"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"
}
@@ -9192,7 +7060,6 @@
"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"
}
@@ -9201,8 +7068,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true,
- "peer": true
+ "dev": true
}
}
},
@@ -9211,7 +7077,6 @@
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
"integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
"dev": true,
- "peer": true,
"requires": {
"tmpl": "1.0.5"
}
@@ -9233,7 +7098,6 @@
"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"
@@ -9258,36 +7122,22 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true,
- "peer": true
+ "dev": true
},
"mimic-response": {
- "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=="
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
},
"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"
}
},
- "mlly": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz",
- "integrity": "sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==",
- "dev": true,
- "requires": {
- "acorn": "^8.11.3",
- "pathe": "^1.1.2",
- "pkg-types": "^1.0.3",
- "ufo": "^1.3.2"
- }
- },
"mock-http-server": {
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/mock-http-server/-/mock-http-server-1.4.5.tgz",
@@ -9344,51 +7194,40 @@
}
}
},
- "nanoid": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
- "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
- "dev": true
- },
"natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": true
},
"normalize-url": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz",
- "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w=="
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
+ "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="
},
"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"
}
@@ -9412,8 +7251,6 @@
"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"
}
@@ -9423,22 +7260,20 @@
"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": "4.0.1",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz",
- "integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg=="
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz",
+ "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg=="
},
"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"
}
@@ -9448,7 +7283,6 @@
"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"
},
@@ -9458,7 +7292,6 @@
"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"
}
@@ -9469,15 +7302,13 @@
"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,
- "peer": true
+ "dev": 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",
@@ -9495,15 +7326,13 @@
"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,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": true
},
"path-key": {
"version": "3.1.1",
@@ -9515,19 +7344,6 @@
"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,
- "peer": true
- },
- "pathe": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
- "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
- "dev": true
- },
- "pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
"dev": true
},
"picocolors": {
@@ -9540,48 +7356,23 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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"
}
},
- "pkg-types": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz",
- "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==",
- "dev": true,
- "requires": {
- "jsonc-parser": "^3.2.0",
- "mlly": "^1.2.0",
- "pathe": "^1.1.0"
- }
- },
- "postcss": {
- "version": "8.4.35",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
- "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
- "dev": true,
- "requires": {
- "nanoid": "^3.3.7",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- }
- },
"pretty-format": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
@@ -9606,18 +7397,25 @@
"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,
- "peer": true
+ "dev": true
},
"qs": {
"version": "6.10.3",
@@ -9628,11 +7426,6 @@
"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",
@@ -9661,15 +7454,13 @@
"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,
- "peer": true
+ "dev": 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",
@@ -9677,16 +7468,15 @@
}
},
"resolve-alpn": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
- "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz",
+ "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA=="
},
"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"
}
@@ -9695,45 +7485,20 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": true
},
"responselike": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz",
- "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
+ "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
"requires": {
- "lowercase-keys": "^3.0.0"
- }
- },
- "rollup": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.1.tgz",
- "integrity": "sha512-ggqQKvx/PsB0FaWXhIvVkSWh7a/PCLQAsMjBc+nA2M8Rv2/HG0X6zvixAB7KyZBRtifBUhy5k8voQX/mRnABPg==",
- "dev": true,
- "requires": {
- "@rollup/rollup-android-arm-eabi": "4.12.1",
- "@rollup/rollup-android-arm64": "4.12.1",
- "@rollup/rollup-darwin-arm64": "4.12.1",
- "@rollup/rollup-darwin-x64": "4.12.1",
- "@rollup/rollup-linux-arm-gnueabihf": "4.12.1",
- "@rollup/rollup-linux-arm64-gnu": "4.12.1",
- "@rollup/rollup-linux-arm64-musl": "4.12.1",
- "@rollup/rollup-linux-riscv64-gnu": "4.12.1",
- "@rollup/rollup-linux-x64-gnu": "4.12.1",
- "@rollup/rollup-linux-x64-musl": "4.12.1",
- "@rollup/rollup-win32-arm64-msvc": "4.12.1",
- "@rollup/rollup-win32-ia32-msvc": "4.12.1",
- "@rollup/rollup-win32-x64-msvc": "4.12.1",
- "@types/estree": "1.0.5",
- "fsevents": "~2.3.2"
+ "lowercase-keys": "^2.0.0"
}
},
"safer-buffer": {
@@ -9746,8 +7511,7 @@
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "peer": true
+ "dev": true
},
"setprototypeof": {
"version": "1.2.0",
@@ -9781,44 +7545,28 @@
"object-inspect": "^1.9.0"
}
},
- "siginfo": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
- "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
- "dev": true
- },
"signal-exit": {
"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,
- "peer": true
+ "dev": true
},
"sisteransi": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true,
- "peer": true
+ "dev": true
},
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "peer": true
+ "dev": 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,
- "peer": true
- },
- "source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"dev": true
},
"source-map-support": {
@@ -9826,7 +7574,6 @@
"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"
@@ -9836,43 +7583,28 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "dev": true,
- "peer": true
+ "dev": 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"
}
},
- "stackback": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
- "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
- "dev": true
- },
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
"dev": true
},
- "std-env": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz",
- "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==",
- "dev": true
- },
"string-length": {
"version": "4.0.2",
"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"
@@ -9883,7 +7615,6 @@
"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",
@@ -9895,7 +7626,6 @@
"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"
}
@@ -9904,46 +7634,25 @@
"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,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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,
- "peer": true
- },
- "strip-literal": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.0.0.tgz",
- "integrity": "sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==",
- "dev": true,
- "requires": {
- "js-tokens": "^8.0.2"
- },
- "dependencies": {
- "js-tokens": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz",
- "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==",
- "dev": true
- }
- }
+ "dev": true
},
"supports-color": {
"version": "7.2.0",
"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"
}
@@ -9952,59 +7661,36 @@
"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,
- "peer": true
+ "dev": 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",
"minimatch": "^3.0.4"
}
},
- "tinybench": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz",
- "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==",
- "dev": true
- },
- "tinypool": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz",
- "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==",
- "dev": true
- },
- "tinyspy": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz",
- "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==",
- "dev": true
- },
"tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
"integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
- "dev": true,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": 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"
}
@@ -10018,7 +7704,8 @@
"tunnel": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
- "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
+ "dev": true
},
"type-detect": {
"version": "4.0.8",
@@ -10030,8 +7717,7 @@
"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,
- "peer": true
+ "dev": true
},
"type-is": {
"version": "1.6.18",
@@ -10043,12 +7729,6 @@
"mime-types": "~2.1.24"
}
},
- "ufo": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz",
- "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==",
- "dev": true
- },
"uid-safe": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
@@ -10064,13 +7744,6 @@
"integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==",
"dev": true
},
- "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==",
- "dev": true,
- "peer": true
- },
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -10082,7 +7755,6 @@
"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"
@@ -10097,158 +7769,25 @@
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "dev": true
},
"v8-to-istanbul": {
"version": "9.2.0",
"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",
"convert-source-map": "^2.0.0"
}
},
- "vite": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.5.tgz",
- "integrity": "sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==",
- "dev": true,
- "requires": {
- "esbuild": "^0.19.3",
- "fsevents": "~2.3.3",
- "postcss": "^8.4.35",
- "rollup": "^4.2.0"
- }
- },
- "vite-node": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.3.1.tgz",
- "integrity": "sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==",
- "dev": true,
- "requires": {
- "cac": "^6.7.14",
- "debug": "^4.3.4",
- "pathe": "^1.1.1",
- "picocolors": "^1.0.0",
- "vite": "^5.0.0"
- }
- },
- "vitest": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.3.1.tgz",
- "integrity": "sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==",
- "dev": true,
- "requires": {
- "@vitest/expect": "1.3.1",
- "@vitest/runner": "1.3.1",
- "@vitest/snapshot": "1.3.1",
- "@vitest/spy": "1.3.1",
- "@vitest/utils": "1.3.1",
- "acorn-walk": "^8.3.2",
- "chai": "^4.3.10",
- "debug": "^4.3.4",
- "execa": "^8.0.1",
- "local-pkg": "^0.5.0",
- "magic-string": "^0.30.5",
- "pathe": "^1.1.1",
- "picocolors": "^1.0.0",
- "std-env": "^3.5.0",
- "strip-literal": "^2.0.0",
- "tinybench": "^2.5.1",
- "tinypool": "^0.8.2",
- "vite": "^5.0.0",
- "vite-node": "1.3.1",
- "why-is-node-running": "^2.2.2"
- },
- "dependencies": {
- "execa": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
- "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^8.0.1",
- "human-signals": "^5.0.0",
- "is-stream": "^3.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^5.1.0",
- "onetime": "^6.0.0",
- "signal-exit": "^4.1.0",
- "strip-final-newline": "^3.0.0"
- }
- },
- "get-stream": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
- "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
- "dev": true
- },
- "human-signals": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
- "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
- "dev": true
- },
- "is-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
- "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
- "dev": true
- },
- "mimic-fn": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
- "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
- "dev": true
- },
- "npm-run-path": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
- "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
- "dev": true,
- "requires": {
- "path-key": "^4.0.0"
- }
- },
- "onetime": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
- "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
- "dev": true,
- "requires": {
- "mimic-fn": "^4.0.0"
- }
- },
- "path-key": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
- "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
- "dev": true
- },
- "signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true
- },
- "strip-final-newline": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
- "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
- "dev": true
- }
- }
- },
"walker": {
"version": "1.0.8",
"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"
}
@@ -10262,22 +7801,11 @@
"isexe": "^2.0.0"
}
},
- "why-is-node-running": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz",
- "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==",
- "dev": true,
- "requires": {
- "siginfo": "^2.0.0",
- "stackback": "0.0.2"
- }
- },
"wrap-ansi": {
"version": "7.0.0",
"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",
@@ -10287,16 +7815,13 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true,
- "peer": true
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"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"
@@ -10306,22 +7831,19 @@
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "peer": true
+ "dev": true
},
"yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true,
- "peer": true
+ "dev": 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",
@@ -10336,15 +7858,13 @@
"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,
- "peer": true
+ "dev": 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,
- "peer": true
+ "dev": true
}
}
}
diff --git a/package.json b/package.json
index ac1b4eb..56354bc 100644
--- a/package.json
+++ b/package.json
@@ -2,15 +2,14 @@
"name": "vault-action",
"version": "0.1.0",
"description": "A Github Action that allows you to consume vault secrets as secure environment variables.",
- "type": "module",
"main": "dist/index.js",
"scripts": {
"build": "ncc build src/entry.js -o dist",
- "test": "vitest run",
- "test:integration:basic": "vitest run -c integrationTests/basic/vitest.config.js",
- "test:integration:enterprise": "vitest run -c integrationTests/enterprise/vitest.config.js",
- "test:integration:e2e": "vitest run -c integrationTests/e2e/vitest.config.js",
- "test:integration:e2e-tls": "vitest run -c integrationTests/e2e-tls/vitest.config.js"
+ "test": "jest",
+ "test:integration:basic": "jest -c integrationTests/basic/jest.config.js",
+ "test:integration:enterprise": "jest -c integrationTests/enterprise/jest.config.js",
+ "test:integration:e2e": "jest -c integrationTests/e2e/jest.config.js",
+ "test:integration:e2e-tls": "jest -c integrationTests/e2e-tls/jest.config.js"
},
"files": [
"src/**/*",
@@ -35,15 +34,18 @@
},
"homepage": "https://github.com/hashicorp/vault-action#readme",
"dependencies": {
- "@actions/core": "^1.10.1",
- "got": "^14.2.1",
- "jsonata": "^2.0.4",
+ "got": "^11.8.6",
+ "jsonata": "^2.0.3",
"jsrsasign": "^11.0.0"
},
+ "peerDependencies": {
+ "@actions/core": ">=1 <2"
+ },
"devDependencies": {
+ "@actions/core": "^1.10.1",
"@vercel/ncc": "^0.38.1",
+ "jest": "^29.7.0",
"jest-when": "^3.6.0",
- "mock-http-server": "^1.4.5",
- "vitest": "^1.3.1"
+ "mock-http-server": "^1.4.5"
}
}
diff --git a/src/action.js b/src/action.js
index 03ef0b3..94c8f8e 100644
--- a/src/action.js
+++ b/src/action.js
@@ -1,14 +1,12 @@
-import core from '@actions/core';
-import got from 'got';
-
-import { normalizeOutputKey } from './utils.js';
-import { WILDCARD } from './constants.js';
-import { retrieveToken } from './auth.js';
-import { getSecrets } from './secrets.js';
-
-// ncc doesn't compile jsonata imports properly, so we must use our own custom require
-import require from "./cjs-require.js";
+// @ts-check
+const core = require('@actions/core');
+const command = require('@actions/core/lib/command');
+const got = require('got').default;
const jsonata = require('jsonata');
+const { normalizeOutputKey } = require('./utils');
+const { WILDCARD } = require('./constants');
+
+const { auth: { retrieveToken }, secrets: { getSecrets } } = require('./index');
const AUTH_METHODS = ['approle', 'token', 'github', 'jwt', 'kubernetes', 'ldap', 'userpass'];
const ENCODING_TYPES = ['base64', 'hex', 'utf8'];
@@ -221,8 +219,9 @@ function parseHeadersInput(inputKey, inputOptions) {
}, new Map());
}
-export {
+module.exports = {
exportSecrets,
parseSecretsInput,
parseHeadersInput,
-}
+};
+
diff --git a/src/action.test.js b/src/action.test.js
index 3844358..eb99bfa 100644
--- a/src/action.test.js
+++ b/src/action.test.js
@@ -1,17 +1,17 @@
-import { vi, describe, test, expect } from 'vitest';
+jest.mock('got');
+jest.mock('@actions/core');
+jest.mock('@actions/core/lib/command');
-vi.mock('got');
-vi.mock('@actions/core');
-
-import core from '@actions/core';
-import got from 'got';
-import {
+const command = require('@actions/core/lib/command');
+const core = require('@actions/core');
+const got = require('got');
+const {
exportSecrets,
parseSecretsInput,
parseHeadersInput
-} from './action.js';
+} = require('./action');
-import { when } from 'jest-when'
+const { when } = require('jest-when');
describe('parseSecretsInput', () => {
it('parses simple secret', () => {
@@ -132,7 +132,7 @@ describe('parseHeaders', () => {
describe('exportSecrets', () => {
beforeEach(() => {
- vi.resetAllMocks();
+ jest.resetAllMocks();
when(core.getInput)
.calledWith('url', expect.anything())
diff --git a/src/auth.js b/src/auth.js
index 5756101..630ad1e 100644
--- a/src/auth.js
+++ b/src/auth.js
@@ -1,8 +1,8 @@
// @ts-check
-import core from '@actions/core';
-import * as fs from 'fs';
-import got from 'got';
-import rsasign from 'jsrsasign';
+const core = require('@actions/core');
+const rsasign = require('jsrsasign');
+const fs = require('fs');
+const { default: got } = require('got');
const defaultKubernetesTokenPath = '/var/run/secrets/kubernetes.io/serviceaccount/token'
/***
@@ -154,6 +154,6 @@ async function getClientToken(client, method, path, payload) {
* }} auth
*/
-export {
+module.exports = {
retrieveToken,
};
diff --git a/src/auth.test.js b/src/auth.test.js
index 1d17b36..ac689d3 100644
--- a/src/auth.test.js
+++ b/src/auth.test.js
@@ -1,20 +1,22 @@
-import { vi, describe, test, expect } from 'vitest';
-
-vi.mock('got');
-vi.mock('@actions/core');
-vi.mock('fs', () => ({
- stat: vi.fn().mockResolvedValue(null),
+jest.mock('got');
+jest.mock('@actions/core');
+jest.mock('@actions/core/lib/command');
+jest.mock('fs', () => ({
+ stat: jest.fn().mockResolvedValue(null),
promises: {
- access: vi.fn().mockResolvedValue(null),
+ access: jest.fn().mockResolvedValue(null),
}
}));
-import core from '@actions/core';
-import got from 'got'
-import * as fs from 'fs';
-import { when } from 'jest-when'
+const core = require('@actions/core');
+const got = require('got');
+const fs = require("fs")
+const { when } = require('jest-when');
-import { retrieveToken } from './auth.js';
+
+const {
+ retrieveToken
+} = require('./auth');
function mockInput(name, key) {
@@ -25,7 +27,7 @@ function mockInput(name, key) {
function mockApiResponse() {
const response = { body: { auth: { client_token: testToken, renewable: true, policies: [], accessor: "accessor" } } }
- got.post = vi.fn()
+ got.post = jest.fn()
got.post.mockReturnValue(response)
}
const testToken = "testoken";
@@ -33,7 +35,7 @@ const testToken = "testoken";
describe("test retrival for token", () => {
beforeEach(() => {
- vi.resetAllMocks();
+ jest.resetAllMocks();
});
it("test retrival with approle", async () => {
@@ -74,7 +76,7 @@ describe("test retrival for token", () => {
mockInput("kubernetesTokenPath", testTokenPath)
mockInput("role", testRole)
mockInput("path", testPath)
- fs.readFileSync = vi.fn()
+ fs.readFileSync = jest.fn()
fs.readFileSync.mockReturnValueOnce(jwtToken)
const token = await retrieveToken(method, got)
expect(token).toEqual(testToken)
diff --git a/src/cjs-require.js b/src/cjs-require.js
deleted file mode 100644
index 55708c1..0000000
--- a/src/cjs-require.js
+++ /dev/null
@@ -1,7 +0,0 @@
-// 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
-import { createRequire } from "module";
-const require = createRequire(import.meta.url);
-
-export default require;
diff --git a/src/constants.js b/src/constants.js
index df7addb..b005350 100644
--- a/src/constants.js
+++ b/src/constants.js
@@ -1,5 +1,5 @@
const WILDCARD = '*';
-export {
+module.exports = {
WILDCARD
-};
+};
\ No newline at end of file
diff --git a/src/entry.js b/src/entry.js
index dea04bf..ea764e6 100644
--- a/src/entry.js
+++ b/src/entry.js
@@ -1,5 +1,5 @@
-import core from '@actions/core';
-import { exportSecrets } from './action.js';
+const core = require('@actions/core');
+const { exportSecrets } = require('./action');
(async () => {
try {
diff --git a/src/index.js b/src/index.js
index cf4affa..d1d673b 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,7 +1,7 @@
-import auth from './auth.js';
-import secrets from './secrets.js';
+const auth = require('./auth');
+const secrets = require('./secrets');
-export default {
+module.exports = {
auth,
secrets
-};
+};
\ No newline at end of file
diff --git a/src/retries.test.js b/src/retries.test.js
index 1ca7d9f..285a7f2 100644
--- a/src/retries.test.js
+++ b/src/retries.test.js
@@ -1,19 +1,17 @@
-import { vi, describe, test, expect } from 'vitest';
+jest.mock('@actions/core');
-vi.mock('@actions/core');
-
-import core from '@actions/core';
-import ServerMock from 'mock-http-server';
-import { exportSecrets } from './action.js';
-import { when } from 'jest-when';
+const core = require('@actions/core');
+const ServerMock = require("mock-http-server");
+const { exportSecrets } = require("./action");
+const { when } = require('jest-when');
describe('exportSecrets retries', () => {
var server = new ServerMock({ host: "127.0.0.1", port: 0 });
var calls = 0;
- beforeEach(() => new Promise(done => {
+ beforeEach((done) => {
calls = 0;
- vi.resetAllMocks();
+ jest.resetAllMocks();
when(core.getInput)
.calledWith('token', expect.anything())
@@ -30,11 +28,11 @@ describe('exportSecrets retries', () => {
.mockReturnValueOnce('http://127.0.0.1:' + server.getHttpPort());
done();
});
- }));
+ });
- afterEach(() => new Promise(done => {
+ afterEach((done) => {
server.stop(done);
- }));
+ });
function mockStatusCodes(statusCodes) {
server.on({
@@ -53,19 +51,19 @@ describe('exportSecrets retries', () => {
});
}
- it('retries on 412 status code', () => new Promise(done => {
+ it('retries on 412 status code', (done) => {
mockStatusCodes([412, 200])
exportSecrets().then(() => {
expect(calls).toEqual(2);
done();
});
- }));
+ });
- it('retries on 500 status code', () => new Promise(done => {
+ it('retries on 500 status code', (done) => {
mockStatusCodes([500, 200])
exportSecrets().then(() => {
expect(calls).toEqual(2);
done();
});
- }));
+ });
});
diff --git a/src/secrets.js b/src/secrets.js
index 9552a4b..10677da 100644
--- a/src/secrets.js
+++ b/src/secrets.js
@@ -1,11 +1,7 @@
-import core from '@actions/core';
-import { WILDCARD } from './constants.js';
-import { normalizeOutputKey } from './utils.js';
-
-// ncc doesn't compile jsonata imports properly, so we must use our own custom require
-import require from "./cjs-require.js";
-const jsonata = require('jsonata');
-
+const jsonata = require("jsonata");
+const { WILDCARD } = require("./constants");
+const { normalizeOutputKey } = require("./utils");
+const core = require('@actions/core');
/**
* @typedef {Object} SecretRequest
@@ -48,7 +44,7 @@ async function getSecrets(secretRequests, client, ignoreNotFound) {
} catch (error) {
const {response} = error;
if (response?.statusCode === 404) {
- let notFoundMsg = `Unable to retrieve result for "${path}" because it was not found: ${response.body.trim()}`;
+ notFoundMsg = `Unable to retrieve result for "${path}" because it was not found: ${response.body.trim()}`;
const ignoreNotFound = (core.getInput('ignoreNotFound', { required: false }) || 'false').toLowerCase() != 'false';
if (ignoreNotFound) {
core.error(`✘ ${notFoundMsg}`);
@@ -169,7 +165,7 @@ const selectAndAppendResults = async (
];
};
-export {
+module.exports = {
getSecrets,
selectData
}
diff --git a/src/utils.js b/src/utils.js
index b2fa151..b8dd863 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -14,6 +14,6 @@ function normalizeOutputKey(dataKey, isEnvVar = false) {
return outputKey;
}
-export {
- normalizeOutputKey
+module.exports = {
+ normalizeOutputKey
};
diff --git a/tsconfig.json b/tsconfig.json
index 49359fa..91e905b 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -9,4 +9,4 @@
"exclude": [
"node_modules"
]
-}
+}
\ No newline at end of file
diff --git a/vitest.config.js b/vitest.config.js
deleted file mode 100644
index e70fa6d..0000000
--- a/vitest.config.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import { defineConfig, configDefaults } from 'vitest/config'
-
-export default defineConfig({
- test: {
- // required to make jest-when work with vitest
- globals: true,
- exclude:[
- ...configDefaults.exclude,
- '**/integrationTests/**'
- ]
- },
-})